593 lines
16 KiB
Plaintext
593 lines
16 KiB
Plaintext
|
{$IFDEF WIN32}
|
|||
|
{$I DEFINES.INC}
|
|||
|
{$ENDIF}
|
|||
|
|
|||
|
{$A+,B-,D-,E-,F+,I-,L-,N-,O+,R-,S+,V-}
|
|||
|
UNIT Bulletin;
|
|||
|
|
|||
|
INTERFACE
|
|||
|
|
|||
|
USES
|
|||
|
Common;
|
|||
|
|
|||
|
FUNCTION FindOnlyOnce: Boolean;
|
|||
|
FUNCTION NewBulletins: Boolean;
|
|||
|
PROCEDURE Bulletins(MenuOption: Str50);
|
|||
|
PROCEDURE UList(MenuOption: Str50);
|
|||
|
PROCEDURE TodaysCallers(x: Byte; MenuOptions: Str50);
|
|||
|
PROCEDURE RGQuote(MenuOption: Str50);
|
|||
|
|
|||
|
IMPLEMENTATION
|
|||
|
|
|||
|
USES
|
|||
|
Dos,
|
|||
|
Common5,
|
|||
|
Mail1,
|
|||
|
ShortMsg,
|
|||
|
TimeFunc;
|
|||
|
|
|||
|
TYPE
|
|||
|
LastCallerPtrType = ^LastCallerRec;
|
|||
|
UserPtrType = ^UserRecordType;
|
|||
|
|
|||
|
PROCEDURE Bulletins(MenuOption: Str50);
|
|||
|
VAR
|
|||
|
Main,
|
|||
|
Subs,
|
|||
|
InputStr: ASTR;
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
IF (MenuOption = '') THEN
|
|||
|
IF (General.BulletPrefix = '') THEN
|
|||
|
MenuOption := 'BULLETIN;BULLET'
|
|||
|
ELSE
|
|||
|
MenuOption := 'BULLETIN;'+General.BulletPrefix;
|
|||
|
IF (Pos(';',MenuOption) <> 0) THEN
|
|||
|
BEGIN
|
|||
|
Main := Copy(MenuOption,1,(Pos(';',MenuOption) - 1));
|
|||
|
Subs := Copy(MenuOption,(Pos(';',MenuOption) + 1),(Length(MenuOption) - Pos(';',MenuOption)));
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
Main := MenuOption;
|
|||
|
Subs := MenuOption;
|
|||
|
END;
|
|||
|
PrintF(Main);
|
|||
|
IF (NOT NoFile) THEN
|
|||
|
REPEAT
|
|||
|
NL;
|
|||
|
{ Prt(FString.BulletinLine); }
|
|||
|
lRGLngStr(16,FALSE);
|
|||
|
ScanInput(InputStr,'ABCDEFGHIJKLMNOPQRSTUVWXYZ?');
|
|||
|
IF (NOT HangUp) THEN
|
|||
|
BEGIN
|
|||
|
IF (InputStr = '?') THEN
|
|||
|
PrintF(Main);
|
|||
|
IF (InputStr <> '') AND NOT (InputStr[1] IN ['Q','?']) THEN
|
|||
|
PrintF(Subs+InputStr);
|
|||
|
END;
|
|||
|
UNTIL (InputStr = 'Q') OR (HangUp);
|
|||
|
END;
|
|||
|
|
|||
|
FUNCTION FindOnlyOnce: Boolean;
|
|||
|
VAR
|
|||
|
(*
|
|||
|
DirInfo: SearchRec;
|
|||
|
*)
|
|||
|
DT: DateTime;
|
|||
|
BEGIN
|
|||
|
FindOnlyOnce := FALSE;
|
|||
|
FindFirst(General.MiscPath+'ONLYONCE.*',AnyFile - Directory - VolumeID- DOS.Hidden,DirInfo);
|
|||
|
IF (DosError = 0) THEN
|
|||
|
BEGIN
|
|||
|
UnPackTime(DirInfo.Time,DT);
|
|||
|
IF (DateToPack(DT) > ThisUser.LastOn) THEN
|
|||
|
FindOnlyOnce := TRUE;
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
FUNCTION NewBulletins: Boolean;
|
|||
|
TYPE
|
|||
|
BulletinType = ARRAY [0..255] OF Byte;
|
|||
|
VAR
|
|||
|
BulletinArray: ^BulletinType;
|
|||
|
DT: DateTime;
|
|||
|
(*
|
|||
|
DirInfo: SearchRec;
|
|||
|
*)
|
|||
|
BullCount,
|
|||
|
Biggest,
|
|||
|
LenOfBullPrefix,
|
|||
|
LenToCopy: Byte;
|
|||
|
Found: Boolean;
|
|||
|
|
|||
|
PROCEDURE ShowBulls;
|
|||
|
VAR
|
|||
|
Counter,
|
|||
|
Counter1,
|
|||
|
Counter2: Byte;
|
|||
|
BEGIN
|
|||
|
FOR Counter := 0 TO BullCount DO
|
|||
|
BEGIN
|
|||
|
FOR Counter1 := 0 TO BullCount DO
|
|||
|
IF (BulletinArray^[Counter] < BulletinArray^[Counter1]) THEN
|
|||
|
BEGIN
|
|||
|
Counter2 := BulletinArray^[Counter];
|
|||
|
BulletinArray^[Counter] := BulletinArray^[Counter1];
|
|||
|
BulletinArray^[Counter1] := Counter2;
|
|||
|
END;
|
|||
|
END;
|
|||
|
Counter1 := 1;
|
|||
|
Prt('|01[ |11');
|
|||
|
FOR Counter2 := 0 TO (BullCount) DO
|
|||
|
BEGIN
|
|||
|
IF (Counter1 = 15) THEN
|
|||
|
BEGIN
|
|||
|
Prt(PadRightInt(BulletinArray^[Counter2],2));
|
|||
|
IF (Counter2 < BullCount) THEN
|
|||
|
Prt(' |01]'+^M^J+'|01[ |11')
|
|||
|
ELSE
|
|||
|
Prt(' |01]');
|
|||
|
Counter1 := 0;
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
Prt(PadRightInt(BulletinArray^[Counter2],2));
|
|||
|
IF (Counter2 < BullCount) THEN
|
|||
|
Prt('|07,|11 ')
|
|||
|
ELSE
|
|||
|
Prt(' |01]');
|
|||
|
END;
|
|||
|
Inc(Counter1);
|
|||
|
END;
|
|||
|
NL;
|
|||
|
END;
|
|||
|
|
|||
|
BEGIN
|
|||
|
New(BulletinArray);
|
|||
|
FOR BullCount := 0 TO 255 DO
|
|||
|
BulletinArray^[BullCount] := 0;
|
|||
|
Found := FALSE;
|
|||
|
Biggest := 0;
|
|||
|
BullCount := 0;
|
|||
|
LenOfBullPrefix := (Length(General.BulletPrefix) + 1);
|
|||
|
FindFirst(General.MiscPath+General.BulletPrefix+'*.ASC',AnyFile - Directory - VolumeID - DOS.Hidden,DirInfo);
|
|||
|
WHILE (DosError = 0) DO
|
|||
|
BEGIN
|
|||
|
IF (((Pos(General.BulletPrefix,General.MiscPath+General.BulletPrefix+'*.ASC') > 0) AND
|
|||
|
(Pos('BULLETIN',AllCaps(DirInfo.Name)) = 0)) AND
|
|||
|
(Pos('~',DirInfo.Name) = 0)) THEN
|
|||
|
BEGIN
|
|||
|
UnPackTime(DirInfo.Time,DT);
|
|||
|
IF (DateToPack(DT) > ThisUser.LastOn) THEN
|
|||
|
BEGIN
|
|||
|
Found := TRUE;
|
|||
|
LenToCopy := (Pos('.',DirInfo.Name) - 1) - Length(General.BulletPrefix);
|
|||
|
BulletinArray^[BullCount] := StrToInt(Copy(DirInfo.Name,LenOfBullPrefix,LenToCopy));
|
|||
|
IF (BulletinArray^[BullCount] > Biggest) THEN
|
|||
|
Biggest := BulletinArray^[BullCount];
|
|||
|
Inc(BullCount);
|
|||
|
END;
|
|||
|
END;
|
|||
|
IF (BullCount > 254) THEN
|
|||
|
Exit;
|
|||
|
FindNext(DirInfo);
|
|||
|
END;
|
|||
|
IF (Found) THEN
|
|||
|
BEGIN
|
|||
|
Dec(BullCount);
|
|||
|
ShowBulls;
|
|||
|
END;
|
|||
|
Dispose(BulletinArray);
|
|||
|
NewBulletins := Found;
|
|||
|
END;
|
|||
|
|
|||
|
FUNCTION UlistMCI(CONST S: ASTR; Data1,Data2: Pointer): STRING;
|
|||
|
VAR
|
|||
|
UserPtr: UserPtrType;
|
|||
|
BEGIN
|
|||
|
UlistMCI := S;
|
|||
|
UserPtr := Data1;
|
|||
|
CASE S[1] OF
|
|||
|
'A' : CASE S[2] OF
|
|||
|
'G' : UListMCI := IntToStr(AgeUser(UserPtr^.BirthDate));
|
|||
|
END;
|
|||
|
'D' : CASE S[2] OF
|
|||
|
'K' : UListMCI := IntToStr(UserPtr^.DK);
|
|||
|
'L' : UListMCI := IntToStr(UserPtr^.Downloads);
|
|||
|
END;
|
|||
|
'L' : CASE S[2] OF
|
|||
|
'C' : UListMCI := UserPtr^.CityState;
|
|||
|
'O' : UListMCI := ToDate8(PD2Date(UserPtr^.LastOn));
|
|||
|
END;
|
|||
|
'M' : CASE S[2] OF
|
|||
|
'P' : UListMCI := IntToStr(UserPtr^.MsgPost);
|
|||
|
END;
|
|||
|
'N' : CASE S[2] OF
|
|||
|
'O' : UListMCI := Userptr^.Note;
|
|||
|
END;
|
|||
|
'R' : CASE S[2] OF
|
|||
|
'N' : UListMCI := UserPtr^.RealName;
|
|||
|
END;
|
|||
|
'S' : CASE S[2] OF
|
|||
|
'X' : UListMCI := UserPtr^.Sex;
|
|||
|
END;
|
|||
|
'U' : CASE S[2] OF
|
|||
|
'K' : UListMCI := IntToStr(UserPtr^.UK);
|
|||
|
'L' : UListMCI := IntToStr(UserPtr^.Uploads);
|
|||
|
'N' : UListMCI := Caps(UserPtr^.Name);
|
|||
|
'1' : UListMCI := UserPtr^.UsrDefStr[1];
|
|||
|
'2' : UListMCI := UserPtr^.UsrDefStr[2];
|
|||
|
'3' : UListMCI := UserPtr^.UsrDefStr[3];
|
|||
|
END;
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE UList(MenuOption: Str50);
|
|||
|
VAR
|
|||
|
Junk: Pointer;
|
|||
|
User: UserRecordType;
|
|||
|
Cmd: Char;
|
|||
|
TempStr: ASTR;
|
|||
|
Gender: Str1;
|
|||
|
State,
|
|||
|
UState: Str2;
|
|||
|
Age: Str3;
|
|||
|
DateLastOn: Str8;
|
|||
|
City,
|
|||
|
UCity: Str30;
|
|||
|
RName,
|
|||
|
UName: Str36;
|
|||
|
FN: Str50;
|
|||
|
RecNum: Integer;
|
|||
|
|
|||
|
PROCEDURE Option(c1: Char; s1,s2: Str160);
|
|||
|
BEGIN
|
|||
|
Prompt('^4<^5'+c1+'^4>'+s1+': ');
|
|||
|
IF (s2 <> '') THEN
|
|||
|
Print('^5"^4'+s2+'^5"^1')
|
|||
|
ELSE
|
|||
|
Print('^5<<INACTIVE>>^1');
|
|||
|
END;
|
|||
|
|
|||
|
BEGIN
|
|||
|
IF (RUserList IN ThisUser.Flags) THEN
|
|||
|
BEGIN
|
|||
|
Print('You are restricted from listing users.');
|
|||
|
Exit;
|
|||
|
END;
|
|||
|
Age := '';
|
|||
|
City := '';
|
|||
|
DateLastOn := '';
|
|||
|
Gender := '';
|
|||
|
RName := '';
|
|||
|
State := '';
|
|||
|
UName := '';
|
|||
|
REPEAT
|
|||
|
NL;
|
|||
|
Print('^5User lister search options:');
|
|||
|
NL;
|
|||
|
Option('A','ge match string ',Age);
|
|||
|
Option('C','ity match string ',City);
|
|||
|
Option('D','ate last online match string',DateLastOn);
|
|||
|
Option('G','ender match string ',Gender);
|
|||
|
Option('R','eal name match string ',RName);
|
|||
|
Option('S','tate match string ',State);
|
|||
|
Option('U','ser name match string ',UName);
|
|||
|
NL;
|
|||
|
Prompt('^4Enter choice (^5A^4,^5C^4,^5D^4,^5G^4,^5R^4,^5S^4,^5U^4) [^5L^4]ist [^5Q^4]uit: ');
|
|||
|
OneK(Cmd,'QACDGLRSU'^M,TRUE,TRUE);
|
|||
|
NL;
|
|||
|
IF (Cmd IN ['A','C','D','G','R','S','U']) THEN
|
|||
|
BEGIN
|
|||
|
TempStr := 'Enter new match string for the ';
|
|||
|
CASE Cmd OF
|
|||
|
'A' : TempStr := TempStr + 'age';
|
|||
|
'C' : TempStr := TempStr + 'city';
|
|||
|
'D' : TempStr := TempStr + 'date last online';
|
|||
|
'G' : TempStr := TempStr + 'gender';
|
|||
|
'R' : TempStr := TempStr + 'real name';
|
|||
|
'S' : TempStr := TempStr + 'state';
|
|||
|
'U' : TempStr := TempStr + 'user name';
|
|||
|
END;
|
|||
|
TempStr := TempStr + ' (<CR>=Make INACTIVE)';
|
|||
|
Print('^4'+TempStr);
|
|||
|
Prompt('^4: ');
|
|||
|
END;
|
|||
|
CASE Cmd OF
|
|||
|
'A' : BEGIN
|
|||
|
Mpl(3);
|
|||
|
Input(Age,3);
|
|||
|
END;
|
|||
|
'C' : BEGIN
|
|||
|
Mpl(30);
|
|||
|
Input(City,30);
|
|||
|
END;
|
|||
|
'D' : BEGIN
|
|||
|
Mpl(8);
|
|||
|
InputFormatted('',DateLastOn,'##/##/##',TRUE);
|
|||
|
IF (DayNum(DateLastOn) <> 0) AND (DayNum(DateLastOn) <= DayNum(DateStr)) THEN
|
|||
|
BEGIN
|
|||
|
Delete(DateLastOn,3,1);
|
|||
|
Insert('-',DateLastOn,3);
|
|||
|
Delete(DateLastOn,6,1);
|
|||
|
Insert('-',DateLastOn,6);
|
|||
|
END;
|
|||
|
END;
|
|||
|
'G' : BEGIN
|
|||
|
Mpl(1);
|
|||
|
Input(Gender,1);
|
|||
|
END;
|
|||
|
'R' : BEGIN
|
|||
|
Mpl(36);
|
|||
|
Input(RName,36);
|
|||
|
END;
|
|||
|
'S' : BEGIN
|
|||
|
Mpl(2);
|
|||
|
Input(State,2);
|
|||
|
END;
|
|||
|
'U' : BEGIN
|
|||
|
Mpl(36);
|
|||
|
Input(UName,36);
|
|||
|
END;
|
|||
|
END;
|
|||
|
UNTIL (Cmd IN ['L','Q',^M]) OR (HangUp);
|
|||
|
IF (Cmd IN ['L',^M]) THEN
|
|||
|
BEGIN
|
|||
|
Abort := FALSE;
|
|||
|
Next := FALSE;
|
|||
|
AllowContinue := TRUE;
|
|||
|
IF (Pos(';',MenuOption) > 0) THEN
|
|||
|
BEGIN
|
|||
|
FN := Copy(MenuOption,(Pos(';',MenuOption) + 1),255);
|
|||
|
MenuOption := Copy(MenuOption,1,(Pos(';',MenuOption) - 1));
|
|||
|
END
|
|||
|
ELSE
|
|||
|
FN := 'USER';
|
|||
|
IF (NOT ReadBuffer(FN+'M')) THEN
|
|||
|
Exit;
|
|||
|
PrintF(FN+'H');
|
|||
|
Reset(UserFile);
|
|||
|
RecNum := 1;
|
|||
|
WHILE (RecNum <= (FileSize(UserFile) - 1)) AND (NOT Abort) AND (NOT HangUp) DO
|
|||
|
BEGIN
|
|||
|
LoadURec(User,RecNum);
|
|||
|
UCity := (Copy(User.CityState,1,(Pos(',',User.CityState) - 1)));
|
|||
|
UState := SQOutSP((Copy(User.CityState,(Pos(',',User.CityState) + 2),(Length(User.CityState)))));
|
|||
|
IF (AACS1(User,RecNum,MenuOption)) AND NOT (Deleted IN User.SFlags) THEN
|
|||
|
IF (Age = '') OR (Pos(Age,IntToStr(AgeUser(User.BirthDate))) > 0) THEN
|
|||
|
IF (City = '') OR (Pos(City,AllCaps(UCity)) > 0) THEN
|
|||
|
IF (DateLastOn = '') OR (Pos(DateLastOn,ToDate8(PD2Date(User.LastOn))) > 0) THEN
|
|||
|
IF (Gender = '') OR (Pos(Gender,User.Sex) > 0) THEN
|
|||
|
IF (RName = '') OR (Pos(RName,AllCaps(User.RealName)) > 0) THEN
|
|||
|
IF (State = '') OR (Pos(State,AllCaps(UState)) > 0) THEN
|
|||
|
IF (UName = '') OR (Pos(UName,User.Name) > 0) THEN
|
|||
|
DisplayBuffer(UlistMCI,@User,Junk);
|
|||
|
Inc(RecNum);
|
|||
|
END;
|
|||
|
Close(UserFile);
|
|||
|
IF (NOT Abort) AND (NOT HangUp) THEN
|
|||
|
PrintF(FN+'T');
|
|||
|
AllowContinue := FALSE;
|
|||
|
END;
|
|||
|
SysOpLog('Viewed User Listing.');
|
|||
|
LastError := IOResult;
|
|||
|
END;
|
|||
|
|
|||
|
FUNCTION TodaysCallerMCI(CONST S: ASTR; Data1,Data2: Pointer): STRING;
|
|||
|
VAR
|
|||
|
LastCallerPtr: LastCallerPtrType;
|
|||
|
s1: STRING[100];
|
|||
|
BEGIN
|
|||
|
LastCallerPtr := Data1;
|
|||
|
TodaysCallerMCI := S;
|
|||
|
CASE S[1] OF
|
|||
|
'C' : CASE S[2] OF
|
|||
|
'A' : TodaysCallerMCI := FormatNumber(LastCallerPtr^.Caller);
|
|||
|
END;
|
|||
|
'D' : CASE S[2] OF
|
|||
|
'K' : TodaysCallerMCI := IntToStr(LastCallerPtr^.DK);
|
|||
|
'L' : TodaysCallerMCI := IntToStr(LastCallerPtr^.Downloads);
|
|||
|
END;
|
|||
|
'E' : CASE S[2] OF
|
|||
|
'S' : TodaysCallerMCI := IntToStr(LastCallerPtr^.EmailSent);
|
|||
|
END;
|
|||
|
'F' : CASE S[2] OF
|
|||
|
'S' : TodaysCallerMCI := IntToStr(LastCallerPtr^.FeedbackSent);
|
|||
|
END;
|
|||
|
'L' : CASE S[2] OF
|
|||
|
'C' : TodaysCallerMCI := LastCallerPtr^.Location;
|
|||
|
'O' : BEGIN
|
|||
|
s1 := PDT2Dat(LastCallerPtr^.LogonTime,0);
|
|||
|
s1[0] := Char(Pos('m',s1) - 2);
|
|||
|
s1[Length(s1)] := s1[Length(s1) + 1];
|
|||
|
TodaysCallerMCI := s1;
|
|||
|
END;
|
|||
|
'T' : BEGIN
|
|||
|
IF (LastCallerPtr^.LogoffTime = 0) THEN
|
|||
|
S1 := 'Online'
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
s1 := PDT2Dat(LastCallerPtr^.LogoffTime,0);
|
|||
|
s1[0] := Char(Pos('m',s1) - 2);
|
|||
|
s1[Length(s1)] := s1[Length(s1) + 1];
|
|||
|
END;
|
|||
|
TodaysCallerMCI := s1;
|
|||
|
END;
|
|||
|
END;
|
|||
|
'M' : CASE S[2] OF
|
|||
|
'P' : TodaysCallerMCI := IntToStr(LastCallerPtr^.MsgPost);
|
|||
|
'R' : TodaysCallerMCI := IntToStr(LastCallerPtr^.MsgRead);
|
|||
|
END;
|
|||
|
'N' : CASE S[2] OF
|
|||
|
'D' : TodaysCallerMCI := IntToStr(LastCallerPtr^.Node);
|
|||
|
'U' : IF (LastCallerPtr^.NewUser) THEN
|
|||
|
TodaysCallerMCI := '*'
|
|||
|
ELSE
|
|||
|
TodaysCallerMCI := ' ';
|
|||
|
END;
|
|||
|
'S' : CASE S[2] OF
|
|||
|
'P' : IF (LastCallerPtr^.Speed = 0) THEN
|
|||
|
TodaysCallerMCI := 'Local'
|
|||
|
ELSE IF (Telnet) THEN
|
|||
|
TodaysCallerMCI := 'Telnet'
|
|||
|
ELSE
|
|||
|
TodaysCallerMCI := IntToStr(LastCallerPtr^.Speed);
|
|||
|
END;
|
|||
|
'T' : CASE S[2] OF
|
|||
|
'O' : WITH LastCallerPtr^ DO
|
|||
|
TodaysCallerMCI := IntToStr((LogoffTime - LogonTime) DIV 60);
|
|||
|
END;
|
|||
|
'U' : CASE S[2] OF
|
|||
|
'K' : TodaysCallerMCI := IntToStr(LastCallerPtr^.UK);
|
|||
|
'L' : TodaysCallerMCI := IntToStr(LastCallerPtr^.Uploads);
|
|||
|
'N' : TodaysCallerMCI := LastCallerPtr^.UserName;
|
|||
|
END;
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE TodaysCallers(x: Byte; MenuOptions: Str50);
|
|||
|
VAR
|
|||
|
Junk: Pointer;
|
|||
|
LastCallerFile: FILE OF LastCallerRec;
|
|||
|
LastCaller: LastCallerRec;
|
|||
|
RecNum: Integer;
|
|||
|
BEGIN
|
|||
|
Abort := FALSE;
|
|||
|
Next := FALSE;
|
|||
|
AllowContinue := TRUE;
|
|||
|
IF (MenuOptions = '') THEN
|
|||
|
MenuOptions := 'LAST';
|
|||
|
IF (NOT ReadBuffer(MenuOptions+'M')) THEN
|
|||
|
Exit;
|
|||
|
Assign(LastCallerFile,General.DataPath+'LASTON.DAT');
|
|||
|
Reset(LastCallerFile);
|
|||
|
IF (IOResult <> 0) THEN
|
|||
|
Exit;
|
|||
|
RecNum := 0;
|
|||
|
IF (x > 0) AND (x <= FileSize(LastCallerFile)) THEN
|
|||
|
RecNum := (FileSize(LastCallerFile) - x);
|
|||
|
PrintF(MenuOptions+'H');
|
|||
|
Seek(LastCallerFile,RecNum);
|
|||
|
WHILE (NOT EOF(LastCallerFile)) AND (NOT Abort) AND (NOT HangUp) DO
|
|||
|
BEGIN
|
|||
|
Read(LastCallerFile,LastCaller);
|
|||
|
IF (((LastCaller.LogonTime DIV 86400) <> (GetPackDateTime DIV 86400)) AND (x > 0)) OR
|
|||
|
(((LastCaller.LogonTime DIV 86400) = (GetPackDateTime DIV 86400))) AND (NOT LastCaller.Invisible) THEN
|
|||
|
DisplayBuffer(TodaysCallerMCI,@LastCaller,Junk);
|
|||
|
END;
|
|||
|
Close(LastCallerFile);
|
|||
|
IF (NOT Abort) THEN
|
|||
|
PrintF(MenuOptions+'T');
|
|||
|
AllowContinue := FALSE;
|
|||
|
SysOpLog('Viewed Todays Callers.');
|
|||
|
LastError := IOResult;
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE RGQuote(MenuOption: Str50);
|
|||
|
VAR
|
|||
|
StrPointerFile: FILE OF StrPointerRec;
|
|||
|
StrPointer: StrPointerRec;
|
|||
|
RGStrFile: FILE;
|
|||
|
F,
|
|||
|
F1: Text;
|
|||
|
MHeader: MHeaderRec;
|
|||
|
S: STRING;
|
|||
|
StrNum: Word;
|
|||
|
TotLoad: LongInt;
|
|||
|
BEGIN
|
|||
|
IF (MenuOption = '') THEN
|
|||
|
Exit;
|
|||
|
Assign(StrPointerFile,General.LMultPath+MenuOption+'.PTR');
|
|||
|
Reset(StrPointerFile);
|
|||
|
TotLoad := FileSize(StrPointerFile);
|
|||
|
IF (TotLoad < 1) THEN
|
|||
|
Exit;
|
|||
|
IF (TotLoad > 65535) THEN
|
|||
|
Totload := 65535
|
|||
|
ELSE
|
|||
|
Dec(TotLoad);
|
|||
|
Randomize;
|
|||
|
StrNum := Random(Totload);
|
|||
|
Seek(StrPointerFile,StrNum);
|
|||
|
Read(StrPointerFile,StrPointer);
|
|||
|
Close(StrPointerFile);
|
|||
|
LastError := IOResult;
|
|||
|
IF (Exist(General.MiscPath+'QUOTEHDR.*')) THEN
|
|||
|
PrintF('QUOTEHDR')
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('|03[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[ |11And Now |03... |11A Quote For You! |03]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]');
|
|||
|
NL;
|
|||
|
END;
|
|||
|
TotLoad := 0;
|
|||
|
Assign(RGStrFile,General.LMultPath+MenuOption+'.DAT');
|
|||
|
Reset(RGStrFile,1);
|
|||
|
Seek(RGStrFile,(StrPointer.Pointer - 1));
|
|||
|
REPEAT
|
|||
|
BlockRead(RGStrFile,S[0],1);
|
|||
|
BlockRead(RGStrFile,S[1],Ord(S[0]));
|
|||
|
Inc(TotLoad,(Length(S) + 1));
|
|||
|
IF (S[Length(S)] = '@') THEN
|
|||
|
BEGIN
|
|||
|
Dec(S[0]);
|
|||
|
Prt(Centre(S));
|
|||
|
END
|
|||
|
ELSE
|
|||
|
PrintACR(Centre(S));
|
|||
|
UNTIL (TotLoad >= StrPointer.TextSize) OR EOF(RGStrFile);
|
|||
|
Close(RGStrFile);
|
|||
|
LastError := IOResult;
|
|||
|
IF (Exist(General.MiscPath+'QUOTEFTR.*')) THEN
|
|||
|
PrintF('QUOTEFTR')
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('|03[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]');
|
|||
|
NL;
|
|||
|
END;
|
|||
|
IF (NOT General.UserAddQuote) THEN
|
|||
|
PauseScr(FALSE)
|
|||
|
ELSE IF (PYNQ('Would you like to add a quote? ',0,FALSE)) THEN
|
|||
|
BEGIN
|
|||
|
PrintF('QUOTE');
|
|||
|
InResponseTo := '';
|
|||
|
MHeader.Status := [];
|
|||
|
IF (InputMessage(TRUE,FALSE,'New Quote',MHeader,General.LMultPath+MenuOption+'.TMP',78,500)) then
|
|||
|
IF Exist(General.LMultPath+MenuOption+'.TMP') THEN
|
|||
|
BEGIN
|
|||
|
Assign(F,General.LMultPath+MenuOption+'.NEW');
|
|||
|
Reset(F);
|
|||
|
IF (IOResult <> 0) THEN
|
|||
|
ReWrite(F)
|
|||
|
ELSE
|
|||
|
Append(F);
|
|||
|
Assign(F1,General.LMultPath+MenuOption+'.TMP');
|
|||
|
Reset(F1);
|
|||
|
IF (IOResult <> 0) THEN
|
|||
|
Exit;
|
|||
|
WriteLn(F,'New quote from: '+Caps(ThisUser.Name)+' #'+IntToStr(UserNum)+'.');
|
|||
|
WriteLn(F,'');
|
|||
|
WriteLn(F,'$');
|
|||
|
WHILE (NOT EOF(F1)) DO
|
|||
|
BEGIN
|
|||
|
ReadLn(F1,S);
|
|||
|
WriteLn(F,S);
|
|||
|
END;
|
|||
|
WriteLn(F,'$');
|
|||
|
WriteLn(F,'');
|
|||
|
WriteLn(F);
|
|||
|
Close(F);
|
|||
|
Close(F1);
|
|||
|
Kill(General.LMultPath+MenuOption+'.TMP');
|
|||
|
NL;
|
|||
|
Print('^7Your new quote was saved.');
|
|||
|
PauseScr(FALSE);
|
|||
|
SendShortMessage(1,Caps(ThisUser.Name)+' added a new quote to "'+MenuOption+'.NEW".');
|
|||
|
END;
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
END.
|