Contributor: NORMAN USER
{
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;


AltStyle によって変換されたページ (->オリジナル) /