1336 lines
34 KiB
Plaintext
1336 lines
34 KiB
Plaintext
UNIT RGApi;
|
||
{ Renegade Bulletin Board Software & Turbo Pascal/Borland Pascal API unit. }
|
||
{ This unit uses commonly used routines in building a utility to work }
|
||
{ with the Renegade BBS. }
|
||
{ }
|
||
{ Copyright 2003 - 2013 Chris Hoppman & T.J. McMillian }
|
||
|
||
{
|
||
|
||
This unit will be gave out and will there will never be a charge to use
|
||
the API for Renegade. This unit may be changed as wished and alter'd to
|
||
suit the needs of the programmer that is using it. Feel free to summit
|
||
any changes or updates you might have for this unit to the Programmer of
|
||
the Renegade BBS for thanks and for future releases of this API from other
|
||
programmers
|
||
|
||
}
|
||
|
||
{
|
||
Special thanks goes out to the orginal programmer (owner: see below)
|
||
Copyright 1994 By Jeff Fanjoy and MatrixSoft(tm). All Rights Reserved.
|
||
Upon tring to contact and not being able to contact the authors we
|
||
have decided to update and release new releases to the public ourselves.
|
||
If the perivous owers would like for us to stop please let us know and
|
||
we will comply with your wishes. We regeat that we can't keep the orginal
|
||
documention in as it's whole, because the lack of explaination of uses and
|
||
the way to use the source.
|
||
|
||
Here is a excert of the orginal documentation.
|
||
"RGAPI is a PUBLIC DOMAIN product. That means that anybody is free to
|
||
modify and use this product at their own personal whim. I would greatly
|
||
appreciate it if myself and MatrixSoft(tm) were recognized in the
|
||
documentation if this unit is used in any way."
|
||
}
|
||
|
||
{
|
||
We would like to thank Swag for providing the RunTime Error Libary.
|
||
Also, would like to thank the unknow author of the unit and if they
|
||
wish to come forward and request for us to stop using the source we
|
||
will respect the wishes of the author.
|
||
|
||
Thank-you swag again for providing the Time Slice Routines.
|
||
}
|
||
|
||
INTERFACE
|
||
|
||
USES CRT, {Turbo Pascal's standard CRT unit }
|
||
DOS; {Turbo Pascal's standard DOS unit }
|
||
|
||
{$I RECORDS.PAS}
|
||
|
||
|
||
{*** UNIX TIME CONVERSIONS *********************************************}
|
||
|
||
FUNCTION LZero(W: Word) : String;
|
||
FUNCTION GetTimeZone : ShortInt;
|
||
FUNCTION IsLeapYear(Source : Word) : Boolean;
|
||
FUNCTION Norm2Unix(Y, M, D, H, Min, S : Word) : LongInt;
|
||
PROCEDURE Unix2Norm(Date : LongInt; Var Y, M, D, H, Min, S : Word);
|
||
FUNCTION TodayInUnix : LongInt;
|
||
FUNCTION AddSlash(Str: String): String;
|
||
|
||
{*** RENEGADE COLOR CODE HANDLING **************************************}
|
||
|
||
FUNCTION StripColor ( Var InStr ): String;
|
||
|
||
{*** MISC ROUTINES *****************************************************}
|
||
function IntToStr ( IntIn: LongInt ) : String;
|
||
function StrToInt ( InStr: String ) : LongInt;
|
||
function DirExists ( InDir: DirStr ) : Boolean;
|
||
function FileExists ( InFile: String ) : Boolean;
|
||
procedure pipe ( InStr : String );
|
||
procedure pipexy ( x,y : byte; instr : string );
|
||
procedure HandleError ( ErrStr : String; ProgHalt : Boolean; StopWith : Byte );
|
||
function takeoutblanks ( instr : string ) : string;
|
||
function detectOS : string;
|
||
procedure timeslice;
|
||
PROCEDURE FindRGDir;
|
||
{
|
||
function InputStrxy ( x,y: byte ) : string;
|
||
function InputIntxy ( x,y: byte ) : integer;
|
||
|
||
|
||
{*** RENEGADE.DAT ******************************************************}
|
||
|
||
PROCEDURE OpenRenegadeDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromRenegadeDat ( Var RenegadeDatIn: GeneralRecordType; Var Err: Byte );
|
||
PROCEDURE WriteToRenegadeDat ( Var RenegadeDatIn: GeneralRecordType; Var Err: Byte );
|
||
PROCEDURE CloseRenegadeDat;
|
||
|
||
{*** CONVERENC.DAT *****************************************************}
|
||
|
||
PROCEDURE OpenConferencDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromConferencDat ( Var ConferencDatIn: ConferenceRecordType );
|
||
PROCEDURE WriteToConferencDat ( Var ConferencDatIn: ConferenceRecordType );
|
||
PROCEDURE CloseConferencDat;
|
||
|
||
{*** SCHEME.DAT ********************************************************}
|
||
|
||
PROCEDURE OpenSchemeDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromSchemeDat ( Var SchemeDatIn: SchemeRec );
|
||
PROCEDURE WriteToSchemeDat ( Var SchemeDatIn: SchemeRec );
|
||
PROCEDURE CloseSchemeDat;
|
||
|
||
{*** MBASES.DAT ********************************************************}
|
||
|
||
PROCEDURE OpenMBasesDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromMBasesDat ( Var MBasesDatIn: MessageAreaRecordType; Rec: Integer );
|
||
PROCEDURE WriteToMBasesDat ( Var MBasesDatIn: MessageAreaRecordType; Rec: Integer );
|
||
PROCEDURE CloseMBasesDat;
|
||
|
||
{*** *.HDR *************************************************************}
|
||
|
||
PROCEDURE OpenHdr ( FileName: String; Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromHdr ( Var HdrIn: MHeaderRec; Rec: Integer );
|
||
PROCEDURE WriteToHdr ( Var HdrIn: MHeaderRec; Rec: Integer );
|
||
PROCEDURE CloseHdr;
|
||
|
||
{*** *.DAT *************************************************************}
|
||
|
||
PROCEDURE OpenDat ( FileName: String; Path: String; Var Err: Byte );
|
||
PROCEDURE CloseDat;
|
||
|
||
{*** USERS.DAT *********************************************************}
|
||
|
||
PROCEDURE OpenUsersDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromUsersDat ( Var UsersDatIn: UserRecordType; Rec: Integer );
|
||
PROCEDURE WriteToUsersDat ( Var UsersDatIn: UserRecordType; Rec: Integer );
|
||
PROCEDURE CloseUsersDat;
|
||
|
||
{*** USERS.IDX *********************************************************}
|
||
PROCEDURE OpenUsersIdx(Path: String; VAR Err: Byte);
|
||
PROCEDURE ReadFromUsersIdx(VAR UsersIdxIn: UserIdxRec; Rec: Integer);
|
||
PROCEDURE WriteToUsersIdx(VAR UsersIdxIn: UserIdxRec; Rec: Integer);
|
||
PROCEDURE CloseUsersIdx;
|
||
|
||
{*** HISTORY.DAT *******************************************************}
|
||
|
||
PROCEDURE OpenHistoryDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromHistoryDat ( Var HistoryDatIn: HistoryRecordType; Rec: Integer );
|
||
PROCEDURE WriteToHistoryDat ( Var HistoryDatIn: HistoryRecordType; Rec: Integer );
|
||
PROCEDURE CloseHistoryDat;
|
||
|
||
{*** VOTING.DAT ********************************************************}
|
||
|
||
PROCEDURE OpenVotingDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromVotingDat ( Var VotingDatIn: VotingRecordType; Rec: Integer );
|
||
PROCEDURE WriteToVotingDat ( Var VotingDatIn: VotingRecordType; Rec: Integer );
|
||
PROCEDURE CloseVotingDat;
|
||
|
||
{*** FBASES.DAT ********************************************************}
|
||
|
||
PROCEDURE OpenFBasesDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromFBasesDat ( Var FBasesDatIn: FileAreaRecordType; Rec: Integer );
|
||
PROCEDURE WriteToFBasesDat ( Var FBasesDatIn: FileAreaRecordType; Rec: Integer );
|
||
PROCEDURE CloseFBasesDat;
|
||
|
||
{*** *.DIR *************************************************************}
|
||
|
||
PROCEDURE OpenDir ( FileName: String; Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromDir ( Var DirIn: FileInfoRecordType; Rec: Integer );
|
||
PROCEDURE WriteToDir ( Var DirIn: FileInfoRecordType; Rec: Integer );
|
||
PROCEDURE CloseDir;
|
||
|
||
{*** FILE DATE CONVERSION FROM STRING FORMAT ***************************}
|
||
|
||
PROCEDURE StrDate2FileDate ( S: String; Var Y: Word; Var M: Word; Var D: Word );
|
||
|
||
{*** EXTENDED.DAT ******************************************************}
|
||
|
||
PROCEDURE OpenExtendedDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromExtendedDat ( Var ExtendedDatIn: VerbRec; Rec: LongInt );
|
||
PROCEDURE WriteToExtendedDat ( Var ExtendedDatIn: VerbRec; Rec: LongInt );
|
||
PROCEDURE CloseExtendedDat;
|
||
|
||
{*** LASTON.DAT ********************************************************}
|
||
|
||
PROCEDURE OpenLastOnDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromLastOnDat ( Var LastOnDatIn: LastCallerRec; Rec: Integer );
|
||
PROCEDURE WriteToLastOnDat ( Var LastOnDatIn: LastCallerRec; Rec: Integer );
|
||
PROCEDURE CloseLastOnDat;
|
||
|
||
{*** EVENTS.DAT ********************************************************}
|
||
|
||
PROCEDURE OpenEventsDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromEventsDat ( Var EventsDatIn: EventRec; Rec: Integer );
|
||
PROCEDURE WriteToEventsDat ( Var EventsDatIn: EventRec; Rec: Integer );
|
||
PROCEDURE CloseEventsDat;
|
||
|
||
{*** PROTOCOL.DAT ******************************************************}
|
||
|
||
PROCEDURE OpenProtocolDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromProtocolDat ( Var ProtocolDatIn: ProtRec; Rec: Integer );
|
||
PROCEDURE WriteToProtocolDat ( Var ProtocolDatIn: ProtRec; Rec: Integer );
|
||
PROCEDURE CloseProtocolDat;
|
||
|
||
{*** MULTNODE.DAT ******************************************************}
|
||
|
||
PROCEDURE OpenMultNodeDat ( Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromMultNodeDat ( Var MultNodeDatIn: NodeRec; Rec: Integer );
|
||
PROCEDURE WriteToMultNodeDat ( Var MultNodeDatIn: NodeRec; Rec: Integer );
|
||
PROCEDURE CloseMultNodeDat;
|
||
|
||
{*** *.SCN *************************************************************}
|
||
|
||
PROCEDURE OpenScn ( FileName: String; Path: String; Var Err: Byte );
|
||
PROCEDURE ReadFromScn ( Var ScnIn: ScanRec; Rec: Integer );
|
||
PROCEDURE WriteToScn ( Var ScnIn: ScanRec; Rec: Integer );
|
||
PROCEDURE CloseScn;
|
||
|
||
{***********************************************************************}
|
||
|
||
CONST
|
||
RGApiVer = '12-27.3 - DOS';
|
||
RGApiAuthor = 'Bluewolf';
|
||
MonthArray: Array[1..12] OF String[3] =
|
||
('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct',
|
||
'Nov','Dec');
|
||
DowArray: Array[0..6] OF String[3] =
|
||
('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
|
||
|
||
{*** USED BY UNIX-TIME CONVERTING PROCEDURES ***************************}
|
||
|
||
DaysPerMonth :
|
||
Array[1..12] of ShortInt =
|
||
(031,028,031,030,031,030,031,031,030,031,030,031);
|
||
DaysPerYear :
|
||
Array[1..12] of Integer =
|
||
(031,059,090,120,151,181,212,243,273,304,334,365);
|
||
DaysPerLeapYear :
|
||
Array[1..12] of Integer =
|
||
(031,060,091,121,152,182,213,244,274,305,335,366);
|
||
SecsPerYear : LongInt = 31536000;
|
||
SecsPerLeapYear : LongInt = 31622400;
|
||
SecsPerDay : LongInt = 86400;
|
||
SecsPerHour : Integer = 3600;
|
||
SecsPerMinute : ShortInt = 60;
|
||
|
||
(***************************************************************************)
|
||
|
||
type
|
||
TaskRec = record
|
||
OS : Word;
|
||
Version : Word; {writeln('Version ',hi(Version), '.', lo(Version) );}
|
||
Delay : Word;
|
||
end;
|
||
|
||
|
||
const
|
||
Task : TaskRec = (
|
||
OS : 0;
|
||
Version : 0;
|
||
Delay : 100
|
||
);
|
||
|
||
Var
|
||
OldExit : Pointer;
|
||
SchemeDat : FILE of SchemeRec;
|
||
MBasesDat : FILE of MessageAreaRecordType;
|
||
RenegadeDat : FILE Of GeneralRecordType;
|
||
StringDat : FILE OF FStringRec;
|
||
ConferencDat : FILE OF ConfRec;
|
||
UsersDat : FILE OF UserRecordType;
|
||
Hdr : FILE of MHeaderRec;
|
||
HistoryDat : FILE OF HistoryRec;
|
||
Dat : FILE;
|
||
VotingDat : FILE OF VotingR;
|
||
FBasesDat : FILE OF FileAreaRecordType;
|
||
Dir : FILE OF UlfRec;
|
||
ExtendedDat : FILE OF VerbRec;
|
||
LastOnDat : FILE OF LastCallerRec;
|
||
EventsDat : FILE OF EventRec;
|
||
ProtocolDat : FILE OF ProtRec;
|
||
MultNodeDat : FILE OF NodeRec;
|
||
Scn : FILE OF ScanRec;
|
||
UsersIdx : FILE OF UserIdxRec;
|
||
|
||
RGDir : String;
|
||
CurrDir : String;
|
||
OSVer : String;
|
||
|
||
IMPLEMENTATION
|
||
|
||
Procedure RunTimeExitProc;Far;
|
||
var Message : string;
|
||
begin
|
||
if ErrorAddr<>Nil then { If error occurs }
|
||
begin
|
||
case ExitCode of { Pick the appropriate message }
|
||
2:Message:='File not found ';
|
||
3:Message:='Path not found ';
|
||
4:Message:='Too many open files ';
|
||
5:Message:='File access denied ';
|
||
6:Message:='Invalid file handle ';
|
||
8:Message:='Insufficient memory ';
|
||
12:Message:='Invalid file access code ';
|
||
15:Message:='Invalid drive number ';
|
||
16:Message:='Cannot remove current directory ';
|
||
17:Message:='Cannot rename across drives ';
|
||
100:Message:='Disk read error ';
|
||
100:Message:='Disk write error ';
|
||
102:Message:='File not assigned ';
|
||
103:Message:='File not open ';
|
||
104:Message:='File not open for input ';
|
||
105:Message:='File not open for output ';
|
||
106:Message:='Invalid numeric format ';
|
||
150:Message:='Disk is write-protected ';
|
||
151:Message:='Unknown unit ';
|
||
152:Message:='Drive not ready ';
|
||
153:Message:='Unknown command ';
|
||
154:Message:='CRC error in data ';
|
||
155:Message:='Bad drive request structure length ';
|
||
156:Message:='Disk seek error ';
|
||
157:Message:='Unknown media type ';
|
||
158:Message:='Sector not found ';
|
||
159:Message:='Printer out of paper ';
|
||
160:Message:='Device write fault ';
|
||
161:Message:='Device read fault ';
|
||
162:Message:='Hardware failure ';
|
||
200:Message:='Division by zero ';
|
||
201:Message:='Range check error ';
|
||
202:Message:='Stack overflow error ';
|
||
203:Message:='Heap overflow error ';
|
||
204:Message:='Invalid pointer operation ';
|
||
205:Message:='Floating-point overflow ';
|
||
206:Message:='Floating-point underflow ';
|
||
207:Message:='Invalid floating-point operation ';
|
||
208:Message:='Overlay manager not installed ';
|
||
209:Message:='Overlay file read error ';
|
||
210:Message:='Object not initialized ';
|
||
211:Message:='Call to abstract method ';
|
||
212:Message:='Stream register error ';
|
||
213:Message:='Collection index out of range ';
|
||
214:Message:='Collection overflow error ';
|
||
end;
|
||
writeln;
|
||
writeln('Error : ',ExitCode,' - ',Message);
|
||
writeln;
|
||
|
||
ErrorAddr:=nil;
|
||
ExitCode:=1; { End program with errorlevel 1 }
|
||
end;
|
||
ExitProc:=OldExit; { Restore the original exit procedure }
|
||
end;
|
||
|
||
FUNCTION AddSlash(Str: String): String;
|
||
BEGIN
|
||
IF Str <> '' THEN
|
||
BEGIN
|
||
IF Str[Length(Str)] <> '\' THEN AddSlash := Str + '\'
|
||
ELSE AddSlash := Str;
|
||
END
|
||
ELSE AddSlash := '';
|
||
END;
|
||
|
||
|
||
FUNCTION LZero( W: Word ) : String;
|
||
Var S1: String;
|
||
BEGIN
|
||
Str(W:0,S1);
|
||
IF LENGTH(S1) = 1 THEN S1 := '0' + S1;
|
||
LZero := S1;
|
||
END;
|
||
|
||
|
||
FUNCTION GetTimeZone : ShortInt;
|
||
Var
|
||
Environment : String;
|
||
Index : Integer;
|
||
BEGIN
|
||
GetTimeZone := 0; {Assume UTC}
|
||
Environment := GetEnv('TZ'); {Grab TZ string}
|
||
For Index := 1 TO Length(Environment) DO
|
||
Environment[Index] := UpCase(Environment[Index]);
|
||
IF Environment = 'EST05' THEN GetTimeZone := -05; {USA EASTERN}
|
||
IF Environment = 'EST05EDT' THEN GetTimeZone := -06;
|
||
IF Environment = 'CST06' THEN GetTimeZone := -06; {USA CENTRAL}
|
||
IF Environment = 'CST06CDT' THEN GetTimeZone := -07;
|
||
IF Environment = 'MST07' THEN GetTimeZone := -07; {USA MOUNTAIN}
|
||
IF Environment = 'MST07MDT' THEN GetTimeZone := -08;
|
||
IF Environment = 'PST08' THEN GetTimeZone := -08;
|
||
IF Environment = 'PST08PDT' THEN GetTimeZone := -09;
|
||
IF Environment = 'YST09' THEN GetTimeZone := -09;
|
||
IF Environment = 'AST10' THEN GetTimeZone := -10;
|
||
IF Environment = 'BST11' THEN GetTimeZone := -11;
|
||
IF Environment = 'CET-1' THEN GetTimeZone := 01;
|
||
IF Environment = 'CET-01' THEN GetTimeZone := 01;
|
||
IF Environment = 'EST-10' THEN GetTimeZone := 10;
|
||
IF Environment = 'WST-8' THEN GetTimeZone := 08; {Perth, W. Aust.}
|
||
IF Environment = 'WST-08' THEN GetTimeZone := 08;
|
||
END;
|
||
|
||
FUNCTION IsLeapYear( Source : Word ) : Boolean;
|
||
BEGIN
|
||
IF (Source MOD 400 = 0) OR ((Source Mod 4 = 0) AND
|
||
(Source MOD 100 <> 0)) THEN
|
||
IsLeapYear := TRUE
|
||
ELSE
|
||
IsLeapYear := FALSE;
|
||
END;
|
||
|
||
|
||
FUNCTION Norm2Unix( Y,M,D,H,Min,S : Word ) : LongInt;
|
||
Var
|
||
UnixDate : LongInt;
|
||
Index : Word;
|
||
BEGIN
|
||
UnixDate := 0; {initialize}
|
||
Inc(UnixDate,S); {add seconds}
|
||
Inc(UnixDate,(SecsPerMinute * Min)); {add minutes}
|
||
Inc(UnixDate,(SecsPerHour * H)); {add hours}
|
||
(*************************************************************************)
|
||
(* If UTC = 0, and local time is -06 hours of UTC, then *)
|
||
(* UTC := UTC - (-06 * SecsPerHour) *)
|
||
(* Remember that a negative # minus a negative # yields a positive value *)
|
||
(*************************************************************************)
|
||
UnixDate := UnixDate - (GetTimeZone * SecsPerHour);
|
||
|
||
IF D > 1 THEN
|
||
Inc(UnixDate,(SecsPerDay * (D-1)));
|
||
|
||
IF IsLeapYear(Y) THEN
|
||
DaysPerMonth[02] := 29
|
||
ELSE
|
||
DaysPerMonth[02] := 28;
|
||
|
||
Index := 1;
|
||
IF M > 1 THEN FOR Index := 1 TO (M-1) DO
|
||
Inc(UnixDate,(DaysPerMonth[Index] * SecsPerDay));
|
||
|
||
WHILE Y > 1970 DO
|
||
BEGIN
|
||
IF IsLeapYear((Y-1)) THEN
|
||
Inc(UnixDate,SecsPerLeapYear)
|
||
ELSE
|
||
Inc(UnixDate,SecsPerYear);
|
||
Dec(Y,1);
|
||
END;
|
||
|
||
Norm2Unix := UnixDate;
|
||
END;
|
||
|
||
PROCEDURE Unix2Norm( Date : LongInt; Var Y, M, D, H, Min, S : Word );
|
||
Var
|
||
LocalDate : LongInt;
|
||
Done : Boolean;
|
||
X : ShortInt;
|
||
TotDays : Integer;
|
||
BEGIN
|
||
Y := 1970;
|
||
M := 1;
|
||
D := 1;
|
||
H := 0;
|
||
Min := 0;
|
||
S := 0;
|
||
LocalDate := Date + (GetTimeZone * SecsPerHour);
|
||
Done := FALSE;
|
||
WHILE NOT (Done) DO
|
||
BEGIN
|
||
IF LocalDate >= SecsPerYear THEN
|
||
BEGIN
|
||
Inc(Y,1);
|
||
Dec(LocalDate,SecsPerYear);
|
||
END
|
||
ELSE
|
||
Done := TRUE;
|
||
IF (IsLeapYear(Y+1)) AND (LocalDate >= SecsPerLeapYear) AND
|
||
(NOT (Done)) THEN
|
||
BEGIN
|
||
Inc(Y,1);
|
||
Dec(LocalDate,SecsPerLeapYear);
|
||
END;
|
||
END;
|
||
M := 1;
|
||
D := 1;
|
||
Done := FALSE;
|
||
TotDays := LocalDate DIV SecsPerDay;
|
||
IF IsLeapYear(Y) THEN
|
||
BEGIN
|
||
DaysPerMonth[02] := 29;
|
||
X := 1;
|
||
REPEAT
|
||
IF (TotDays <= DaysPerLeapYear[x]) THEN
|
||
BEGIN
|
||
M := X;
|
||
Done := TRUE;
|
||
Dec(LocalDate,(TotDays * SecsPerDay));
|
||
D := DaysPerMonth[M]-(DaysPerLeapYear[M]-TotDays) + 1;
|
||
END
|
||
ELSE
|
||
Done := FALSE;
|
||
Inc(X);
|
||
UNTIL (Done) or (X > 12);
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
DaysPerMonth[02] := 28;
|
||
X := 1;
|
||
REPEAT
|
||
IF (TotDays <= DaysPerYear[x]) THEN
|
||
BEGIN
|
||
M := X;
|
||
Done := TRUE;
|
||
Dec(LocalDate,(TotDays * SecsPerDay));
|
||
D := DaysPerMonth[M]-(DaysPerYear[M]-TotDays) + 1;
|
||
END
|
||
ELSE
|
||
Done := FALSE;
|
||
Inc(X);
|
||
UNTIL Done = TRUE or (X > 12);
|
||
END;
|
||
H := LocalDate DIV SecsPerHour;
|
||
Dec(LocalDate,(H * SecsPerHour));
|
||
Min := LocalDate DIV SecsPerMinute;
|
||
Dec(LocalDate,(Min * SecsPerMinute));
|
||
S := LocalDate;
|
||
END;
|
||
|
||
FUNCTION TodayInUnix : LongInt;
|
||
Var
|
||
Year, Month, Day, DayOfWeek: Word;
|
||
Hour, Minute, Second, Sec100: Word;
|
||
BEGIN
|
||
GetDate(Year, Month, Day, DayOfWeek);
|
||
GetTime(Hour, Minute, Second, Sec100);
|
||
TodayInUnix := Norm2Unix(Year,Month,Day,Hour,Minute,Second);
|
||
END;
|
||
|
||
FUNCTION StripColor( Var InStr ):String;
|
||
Var
|
||
Temp: String;
|
||
S: String Absolute InStr;
|
||
I,
|
||
Len: Integer;
|
||
BEGIN
|
||
Len := Length(S);
|
||
I := 1;
|
||
Temp := '';
|
||
REPEAT
|
||
IF (S[I] = '|') THEN Inc(I,3)
|
||
ELSE IF (S[I] = '^') THEN Inc(I,2)
|
||
ELSE
|
||
BEGIN
|
||
Temp := Temp + S[I];
|
||
Inc(I);
|
||
END;
|
||
UNTIL (I > Len);
|
||
StripColor := Temp;
|
||
END;
|
||
|
||
function IntToStr( intin : longint) : string;
|
||
var s : string;
|
||
begin
|
||
s:='';
|
||
Str(intin, S);
|
||
IntToStr := s;
|
||
end;
|
||
|
||
function StrToInt( InStr: String ) : LongInt;
|
||
var i : longint;
|
||
code : integer;
|
||
begin
|
||
Val(InStr, I, Code);
|
||
StrToInt := I;
|
||
end;
|
||
|
||
|
||
|
||
FUNCTION DirExists(inDir : dirstr) : boolean;
|
||
var
|
||
woFattr : word;
|
||
fiTemp : file;
|
||
begin
|
||
assign(fiTemp, (inDir + '.'));
|
||
getfattr(fiTemp, woFattr);
|
||
if (doserror <> 0) then DirExists := false
|
||
else DirExists := ((woFattr and directory) <> 0)
|
||
end;
|
||
|
||
|
||
function FileExists( inFile : string) : Boolean;
|
||
var
|
||
woFattr : word;
|
||
fiTemp : file;
|
||
begin
|
||
assign(fiTemp,inFile);
|
||
getfattr(fiTemp, woFattr);
|
||
if (doserror <> 0) then FileExists := false
|
||
else FileExists := ((woFattr and Archive) <> 0)
|
||
end;
|
||
|
||
PROCEDURE Pipe(InStr : String );
|
||
Var
|
||
S : String;
|
||
I, Err : Integer;
|
||
Col : byte;
|
||
BEGIN
|
||
S := InStr;
|
||
I := 1;
|
||
REPEAT
|
||
IF (S[I] = '|') THEN
|
||
BEGIN
|
||
Val(COPY(S,I+1,2),Col,Err);
|
||
IF (Err = 0) AND (Col IN [0..22]) THEN
|
||
IF Col IN [0..15] THEN TextColor(Col)
|
||
ELSE IF Col IN [16..22] THEN TextBackground(Col - 16);
|
||
Inc(I,3);
|
||
END
|
||
ELSE BEGIN
|
||
Write(S[I]);
|
||
Inc(I);
|
||
END;
|
||
UNTIL (I > Length(S));
|
||
Writeln;
|
||
END;
|
||
|
||
PROCEDURE Pipexy(x,y : byte; InStr : String );
|
||
BEGIN
|
||
gotoxy(x,y);
|
||
pipe(instr);
|
||
END;
|
||
|
||
{
|
||
ErrStr : String to display when a error occurs
|
||
ProgHalt : 0: No, display the string and keep running
|
||
1: Yes, stop the application
|
||
HaltWith : if you want to halt the application you can
|
||
provide a RunTime Error.
|
||
}
|
||
Procedure HandleError(ErrStr : String; ProgHalt : Boolean; StopWith : Byte );
|
||
|
||
begin
|
||
pipe('|11<31> |12ERROR |11<31> |14: |06#'++IntToStr(StopWith)+'|07');
|
||
pipe(ErrStr+'|07');
|
||
if ProgHalt then Halt(StopWith);
|
||
end;
|
||
|
||
function takeoutblanks( instr : string) : string;
|
||
var t : string;
|
||
a : byte;
|
||
begin
|
||
t := '';
|
||
for a := 1 to length(instr) do
|
||
if instr[a] <> ' ' then t := t + instr[a];
|
||
|
||
takeoutblanks := t;
|
||
end;
|
||
|
||
function detectOS : string;
|
||
Procedure InitMulti; Assembler;
|
||
Asm
|
||
mov Task.OS, 0
|
||
mov Task.Version, 0
|
||
mov Ah, 30h
|
||
mov Al, 01h
|
||
int 21h
|
||
cmp Al, 20
|
||
je @OS2
|
||
|
||
mov Ax, 160Ah
|
||
int 2Fh
|
||
cmp Ax, 0
|
||
je @Windows
|
||
|
||
mov Ax, 1022h
|
||
mov Bx, 0000h
|
||
int 15h
|
||
cmp Bx, 0
|
||
jne @DESQview
|
||
|
||
|
||
mov Ah, 2Bh
|
||
mov Al, 01h
|
||
mov Cx, 4445h
|
||
mov Dx, 5351h
|
||
int 21h
|
||
cmp Al, $FF
|
||
jne @TopView
|
||
|
||
jmp @Fin
|
||
|
||
@Windows:
|
||
Mov Task.OS, 1
|
||
Mov Task.Version, BX
|
||
jmp @Fin
|
||
|
||
@OS2:
|
||
Mov Task.OS, 2
|
||
Mov Bh, Ah
|
||
Xor Ah, Ah
|
||
Mov Cl, 10
|
||
Div Cl
|
||
Mov Ah, Bh
|
||
Xchg Ah, Al
|
||
Mov Task.Version, AX
|
||
jmp @Fin
|
||
|
||
@DESQview:
|
||
mov Task.OS, 3
|
||
jmp @Fin
|
||
|
||
@TopView:
|
||
mov Task.OS, 4
|
||
|
||
@Fin:
|
||
End;
|
||
begin
|
||
InitMulti;
|
||
case Task.OS of
|
||
0 : detectOS := 'No MultiTasking';
|
||
1 : detectOS := 'Windows';
|
||
2 : detectOS := 'OS/2';
|
||
3 : detectOS := 'DESQview';
|
||
4 : detectOS := 'TopView';
|
||
end;
|
||
end;
|
||
procedure TimeSlice;
|
||
var Regs : Registers;
|
||
Procedure TimeSliceASM; Assembler;
|
||
Asm
|
||
cmp Task.OS, 0
|
||
je @Fin
|
||
cmp Task.OS, 1
|
||
je @Win_OS2
|
||
cmp Task.OS, 2
|
||
je @Win_OS2
|
||
@DV_TV:
|
||
mov Ax, 1000h
|
||
int 15h
|
||
jmp @Fin
|
||
@Win_OS2:
|
||
mov Ax, 1680h
|
||
int 2Fh
|
||
@Fin:
|
||
End;
|
||
|
||
begin
|
||
if Task.OS <> 0 then TimeSliceASM
|
||
else with Regs do Intr($28,Regs);
|
||
end;
|
||
|
||
PROCEDURE FindRGDir;
|
||
BEGIN
|
||
GetDir(0,CurrDir);
|
||
if paramstr(1) <> '' then RGDir := ParamStr(1);
|
||
if (paramstr(1) = '') or (RGDir[2] <> ':') then RGDir := GetEnv('RENEGADE');
|
||
if RGDir = '' then RGDir := GetEnv('RG');
|
||
if RGDir = '' then RGDir := GetEnv('BBS');
|
||
{ work on more ..fexpand..
|
||
if RGDir = '' then RGDir := FSearch('RENEGADE.DAT',GetEnv('PATH'))
|
||
else if RGDir = '' then RGDir := FSearch('RENEGADE.EXE',GetEnv('PATH'));
|
||
if RGDir = '' then RGDir := FSearch('RENEGADE.DAT',CurrDir)
|
||
else if RGDir = '' then RGDir := FSearch('RENEGADE.EXE',CurrDir);
|
||
}
|
||
if (RGDir <> '') and (RGDir[length(RGDir)] <> '\') then RGDir := RGDir + '\';
|
||
if (RGDir = '') or (not DirExists(RGDir)) then begin handleerror('<27> Renegade.dat not found..',True,15); halt; end;
|
||
END;
|
||
|
||
PROCEDURE OpenRenegadeDat( Path: String; Var Err: Byte );
|
||
BEGIN
|
||
If Path = '' then begin
|
||
FindRGDir;
|
||
if RGDir <> '' then Path := RGDir;
|
||
end;
|
||
Assign(RenegadeDat,AddSlash(Path) + 'RENEGADE.DAT');
|
||
{$I-} Reset(RenegadeDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
PROCEDURE ReadFromRenegadeDat( Var RenegadeDatIn: GeneralRecordType; Var Err: Byte );
|
||
BEGIN
|
||
{$I-}Seek(RenegadeDat,0);{$I+}
|
||
if ioresult = 0 then Read(RenegadeDat,RenegadeDatIn);
|
||
Err := IOResult;
|
||
END;
|
||
|
||
PROCEDURE WriteToRenegadeDat(Var RenegadeDatIn: GeneralRecordType; Var Err: Byte );
|
||
BEGIN
|
||
{$I-}Seek(RenegadeDat,0);{$I+}
|
||
if ioresult = 0 then Write(RenegadeDat,RenegadeDatIn);
|
||
Err := IOResult;
|
||
END;
|
||
|
||
PROCEDURE CloseRenegadeDat;
|
||
BEGIN
|
||
Close(RenegadeDat);
|
||
END;
|
||
|
||
PROCEDURE OpenConferencDat(Path: String; Var Err: Byte);
|
||
BEGIN
|
||
Assign(ConferencDat,AddSlash(Path) + 'CONFERENC.DAT');
|
||
{$I-} Reset(ConferencDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
PROCEDURE ReadFromConferencDat(Var ConferencDatIn: ConfRec);
|
||
BEGIN
|
||
Seek(ConferencDat,0);
|
||
Read(ConferencDat,ConferencDatIn);
|
||
END;
|
||
|
||
PROCEDURE WriteToConferencDat(Var ConferencDatIn: ConfRec);
|
||
BEGIN
|
||
Seek(ConferencDat,0);
|
||
Read(ConferencDat,ConferencDatIn);
|
||
END;
|
||
|
||
PROCEDURE CloseConferencDat;
|
||
BEGIN
|
||
Close(ConferencDat);
|
||
END;
|
||
|
||
PROCEDURE OpenSchemeDat(Path: String; Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(SchemeDat,AddSlash(Path) + 'SCHEME.DAT');
|
||
{$I-} Reset(SchemeDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromSchemeDat(Var SchemeDatIn: SchemeRec);
|
||
|
||
BEGIN
|
||
Seek(SchemeDat,0);
|
||
Read(SchemeDat,SchemeDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE WriteToSchemeDat(Var SchemeDatIn: SchemeRec);
|
||
|
||
BEGIN
|
||
Seek(SchemeDat,0);
|
||
Read(SchemeDat,SchemeDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseSchemeDat;
|
||
|
||
BEGIN
|
||
Close(SchemeDat);
|
||
END;
|
||
|
||
|
||
PROCEDURE OpenMBasesDat(Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(MBasesDat,AddSlash(Path) + 'MBASES.DAT');
|
||
{$I-} Reset(MBasesDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromMBasesDat(Var MBasesDatIn: MessageAreaRecordType;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(MBasesDat,Rec);
|
||
Read(MBasesDat,MBasesDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE WriteToMBasesDat(Var MBasesDatIn: MessageAreaRecordType;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(MBasesDat,Rec);
|
||
Write(MBasesDat,MBasesDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseMBasesDat;
|
||
|
||
BEGIN
|
||
Close(MBasesDat);
|
||
END;
|
||
|
||
|
||
PROCEDURE OpenHdr(FileName: String;
|
||
Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(Hdr,AddSlash(Path) + FileName);
|
||
{$I-} Reset(Hdr); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromHdr(Var HdrIn: MHeaderRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(Hdr,Rec);
|
||
Read(Hdr,HdrIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE WriteToHdr(Var HdrIn: MHeaderRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(Hdr,Rec);
|
||
Write(Hdr,HdrIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseHdr;
|
||
|
||
BEGIN
|
||
Close(Hdr);
|
||
END;
|
||
|
||
|
||
PROCEDURE OpenDat(FileName: String;
|
||
Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(Dat,AddSlash(Path) + FileName);
|
||
{$I-} Reset(Dat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseDat;
|
||
|
||
BEGIN
|
||
Close(Dat);
|
||
END;
|
||
|
||
|
||
PROCEDURE OpenUsersDat(Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(UsersDat,AddSlash(Path) + 'USERS.DAT');
|
||
{$I-} Reset(UsersDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromUsersDat(Var UsersDatIn: UserRecordType;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(UsersDat,Rec);
|
||
Read(UsersDat,UsersDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE WriteToUsersDat(Var UsersDatIn: UserRecordType;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(UsersDat,Rec);
|
||
Read(UsersDat,UsersDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseUsersDat;
|
||
|
||
BEGIN
|
||
Close(UsersDat);
|
||
END;
|
||
|
||
{*** USERS.IDX *********************************************************}
|
||
PROCEDURE OpenUsersIdx(Path: String; VAR Err: Byte);
|
||
BEGIN
|
||
Assign(UsersIdx,AddSlash(Path) + 'users.idx');
|
||
{$I-} Reset(UsersIdx); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
PROCEDURE ReadFromUsersIdx(VAR UsersIdxIn: UserIdxRec; Rec: Integer);
|
||
BEGIN
|
||
Seek(UsersIdx,Rec);
|
||
Read(UsersIdx,UsersIdxIn);
|
||
END;
|
||
PROCEDURE WriteToUsersIdx(VAR UsersIdxIn: UserIdxRec; Rec: Integer);
|
||
BEGIN
|
||
Seek(UsersIdx,Rec);
|
||
Write(UsersIdx,UsersIdxIn);
|
||
END;
|
||
PROCEDURE CloseUsersIdx;
|
||
BEGIN
|
||
Close(UsersIdx);
|
||
END;
|
||
|
||
|
||
|
||
|
||
PROCEDURE OpenHistoryDat(Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(HistoryDat,AddSlash(Path) + 'HISTORY.DAT');
|
||
{$I-} Reset(HistoryDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromHistoryDat(Var HistoryDatIn: HistoryRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(HistoryDat,Rec);
|
||
Read(HistoryDat,HistoryDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE WriteToHistoryDat(Var HistoryDatIn: HistoryRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(HistoryDat,Rec);
|
||
Write(HistoryDat,HistoryDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseHistoryDat;
|
||
|
||
BEGIN
|
||
Close(HistoryDat);
|
||
END;
|
||
|
||
|
||
PROCEDURE OpenVotingDat(Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(VotingDat,AddSlash(Path) + 'VOTING.DAT');
|
||
{$I-} Reset(VotingDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromVotingDat(Var VotingDatIn: VotingR;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(VotingDat,Rec);
|
||
Read(VotingDat,VotingDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE WriteToVotingDat(Var VotingDatIn: VotingR;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(VotingDat,Rec);
|
||
Read(VotingDat,VotingDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseVotingDat;
|
||
|
||
BEGIN
|
||
Close(VotingDat);
|
||
END;
|
||
|
||
(* FBASES.DAT *)
|
||
PROCEDURE OpenFBasesDat(Path: String; Var Err: Byte);
|
||
BEGIN
|
||
Assign(FBasesDat,AddSlash(Path) + 'FBASES.DAT');
|
||
{$I-} Reset(FBasesDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
PROCEDURE ReadFromFBasesDat(Var FBasesDatIn: FileAreaRecordType; Rec: Integer);
|
||
BEGIN
|
||
Seek(FBasesDat,Rec);
|
||
Read(FBasesDat,FBasesDatIn);
|
||
END;
|
||
|
||
PROCEDURE WriteToFBasesDat(Var FBasesDatIn: FileAreaRecordType; Rec: Integer);
|
||
BEGIN
|
||
Seek(FBasesDat,Rec);
|
||
Write(FBasesDat,FBasesDatIn);
|
||
END;
|
||
|
||
PROCEDURE CloseFBasesDat;
|
||
|
||
BEGIN
|
||
Close(FBasesDat);
|
||
END;
|
||
|
||
|
||
PROCEDURE OpenDir(FileName: String;
|
||
Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(Dir,AddSlash(Path) + FileName);
|
||
{$I-} Reset(Dir); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromDir (Var DirIn: UlfRec; Rec: Integer );
|
||
BEGIN
|
||
Seek(Dir,Rec);
|
||
Read(Dir,DirIn);
|
||
END;
|
||
|
||
PROCEDURE WriteToDir ( Var DirIn: UlfRec; Rec: Integer );
|
||
BEGIN
|
||
Seek(Dir,Rec);
|
||
Write(Dir,DirIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseDir;
|
||
BEGIN
|
||
Close(Dir);
|
||
END;
|
||
|
||
|
||
PROCEDURE StrDate2FileDate ( S: String; Var Y: Word; Var M: Word; Var D: Word );
|
||
Var Err: Integer;
|
||
|
||
BEGIN
|
||
VAL(COPY(S,1,2),D,Err);
|
||
VAL(COPY(S,4,2),M,Err);
|
||
VAL(COPY(S,7,4),Y,Err);
|
||
END;
|
||
|
||
|
||
PROCEDURE OpenExtendedDat(Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(ExtendedDat,AddSlash(Path) + 'EXTENDED.DAT');
|
||
{$I-} Reset(ExtendedDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromExtendedDat(Var ExtendedDatIn: VerbRec;
|
||
Rec: LongInt);
|
||
|
||
BEGIN
|
||
Seek(ExtendedDat,Rec);
|
||
Read(ExtendedDat,ExtendedDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE WriteToExtendedDat(Var ExtendedDatIn: VerbRec;
|
||
Rec: LongInt);
|
||
|
||
BEGIN
|
||
Seek(ExtendedDat,Rec);
|
||
Write(ExtendedDat,ExtendedDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseExtendedDat;
|
||
|
||
BEGIN
|
||
Close(ExtendedDat);
|
||
END;
|
||
|
||
|
||
PROCEDURE OpenLastOnDat(Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(LastOnDat,AddSlash(Path) + 'LASTON.DAT');
|
||
{$I-} Reset(LastOnDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromLastOnDat(Var LastOnDatIn: LastCallerRec; Rec: Integer);
|
||
BEGIN
|
||
Seek(LastOnDat,Rec);
|
||
Read(LastOnDat,LastOnDatIn);
|
||
END;
|
||
|
||
PROCEDURE WriteToLastOnDat(Var LastOnDatIn: LastCallerRec; Rec: Integer);
|
||
BEGIN
|
||
Seek(LastOnDat,Rec);
|
||
Write(LastOnDat,LastOnDatIn);
|
||
END;
|
||
|
||
PROCEDURE CloseLastOnDat;
|
||
BEGIN
|
||
Close(LastOnDat);
|
||
END;
|
||
|
||
PROCEDURE OpenEventsDat(Path: String; Var Err: Byte);
|
||
BEGIN
|
||
Assign(EventsDat,AddSlash(Path) + 'EVENTS.DAT');
|
||
{$I-} Reset(EventsDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromEventsDat(Var EventsDatIn: EventRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(EventsDat,Rec);
|
||
Read(EventsDat,EventsDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE WriteToEventsDat(Var EventsDatIn: EventRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(EventsDat,Rec);
|
||
Write(EventsDat,EventsDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseEventsDat;
|
||
|
||
BEGIN
|
||
Close(EventsDat);
|
||
END;
|
||
|
||
|
||
PROCEDURE OpenProtocolDat(Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(ProtocolDat,AddSlash(Path) + 'PROTOCOL.DAT');
|
||
{$I-} Reset(ProtocolDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromProtocolDat(Var ProtocolDatIn: ProtRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(ProtocolDat,Rec);
|
||
Read(ProtocolDat,ProtocolDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE WriteToProtocolDat(Var ProtocolDatIn: ProtRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(ProtocolDat,Rec);
|
||
Write(ProtocolDat,ProtocolDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseProtocolDat;
|
||
|
||
BEGIN
|
||
Close(ProtocolDat);
|
||
END;
|
||
|
||
|
||
PROCEDURE OpenMultNodeDat(Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(MultNodeDat,AddSlash(Path) + 'MULTNODE.DAT');
|
||
{$I-} Reset(MultNodeDat); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromMultNodeDat(Var MultNodeDatIn: NodeRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(MultNodeDat,Rec);
|
||
Read(MultNodeDat,MultNodeDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE WriteToMultNodeDat(Var MultNodeDatIn: NodeRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(MultNodeDat,Rec);
|
||
Write(MultNodeDat,MultNodeDatIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseMultNodeDat;
|
||
|
||
BEGIN
|
||
Close(MultNodeDat);
|
||
END;
|
||
|
||
|
||
PROCEDURE OpenScn(FileName: String;
|
||
Path: String;
|
||
Var Err: Byte);
|
||
|
||
BEGIN
|
||
Assign(Scn,AddSlash(Path) + FileName);
|
||
{$I-} Reset(Scn); {$I+}
|
||
Err := IoResult;
|
||
END;
|
||
|
||
|
||
PROCEDURE ReadFromScn(Var ScnIn: ScanRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(Scn,Rec);
|
||
Read(Scn,ScnIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE WriteToScn(Var ScnIn: ScanRec;
|
||
Rec: Integer);
|
||
|
||
BEGIN
|
||
Seek(Scn,Rec);
|
||
Write(Scn,ScnIn);
|
||
END;
|
||
|
||
|
||
PROCEDURE CloseScn;
|
||
|
||
BEGIN
|
||
Close(Scn);
|
||
END;
|
||
|
||
|
||
BEGIN
|
||
OldExit:=ExitProc; { Save the original exit procedure }
|
||
ExitProc:=@RunTimeExitProc; { Insert the RunTime exit procedure }
|
||
OSVer := detectOS;
|
||
END.
|
||
|