[Back to MAIL SWAG index] [Back to Main SWAG index] [Original]

    {
    From: Norman.User@telos.org (Norman User)
    Here is the revised NewSquishList function you need.
    }

    Function NewSquishList(Urec,Arec:MaxRecPtr;NewOnly,ToYouOnly:Boolean):pointer;
       Var
         Sq : SqiColPtr;
         f  : PDosStream;
         fb : PBufStream;
         sql: sqlType;
         sqi: sqiType;
         Sqp: SqiPtr;
         tempN : longint;
         lhn   : LongInt;
         lhs   : string;
         sqz   : Longint;
       Begin
         NewSquishList := nil;
         sq    := nil;
         sql   := 0;
         tempN := 0;
         if   NewOnly
         then Begin
                (***** last read message number from the SQL file *****)
                New(F,init(StrPas(@MaxAreaRec(Arec^.rec^).mpath) +
                           '.SQL',StOpenRead or StDenyNone));
                if   f^.status = StOk
                then begin
                       f^.seek(MaxUserRec(Urec^.rec^).LastRead*SizeOf(sqlType));
                       if f^.status = stok then f^.read(sql,sizeof(sql));
                       if f^.status <> Stok then sql := -1;
                     end;
                dispose(f,done);
                if sql < 0 then exit;
              End;
         lhn := sql;
         sqz := sql;
         fillchar(sqi,sizeof(sqi),0);
         New(fb,init(StrPas(@MaxAreaRec(Arec^.rec^).mpath) + '.SQI',StOpenRead or
                    StDenyNone,2048));
         if fb^.status = StOk then fb^.read(sqi,sizeof(sqitype));
         while (fb^.status = StOk) and (sqi.msgnum <= sql)
         do    begin
                 inc(tempN);
                 fillchar(sqi,sizeof(sqitype),0);
                 fb^.read(sqi,sizeof(sqitype));
               end;
         while (fb^.status = StOk)
         do    begin
                 if   Sqi.msgnum > SQZ
                 then begin
                        sqz := sqi.MsgNum;
                        inc(tempN);
                        if Sqi.MsgNum > lhn
                        then lhn := Sqi.MsgNum;
                        sqi.msgnum := TempN;
                        if   (Not ToYouOnly) or
                             (SqHashName(StrPas(@MaxUserRec(Urec^.rec^).name)) =
                              Sqi.Hashname)
                        then begin
                                new(sqp);
                                sqp^ := sqi;
                                if sq = nil then new(sq,init(20,5));
                                sq^.insert(sqp);
                              end
                       end
                 else inc(tempN);
                 fb^.read(sqi,sizeof(sqitype));
               end;
         dispose(fb,done);
         if   lhn > sql
         then begin
                if   LRMCollection = Nil
                then New(LRMCollection,init(10,5));
                lhs := StrPas(@MaxAreaRec(Arec^.rec^).mpath) + '.SQL';
                LRMCollection^.Insert(New(P0Base,init(newstr(lhs),
                               LongInt((MaxUserRec(Urec^.rec^).lastread)),
                               lhn,true)));
              end;
         NewSquishList := sq;
    End;

[Back to MAIL SWAG index] [Back to Main SWAG index] [Original]