home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
pascal
/
library
/
dos
/
vi_si_on
/
init.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-04-09
|
15KB
|
591 lines
{$R-,S-,I-,D-,F+,V-,B-,N-,L+,O+ }
unit init;
interface
uses crt,dos,
gentypes,modem,statret,configrt,gensubs,subs1,windows,subs2,desq42;
Var t:Text;
procedure validconfiguration;
procedure initforum (checkfiles30:boolean);
implementation
procedure validconfiguration;
var errs:integer;
cnt:integer;
flag:boolean;
trs,trb:mstr;
a,b:integer;
procedure getinfo;
var reg:registerrec;
rf:file of registerrec;
name,board:string;
i:integer;
begin
registo:='■╣┬æN╟';
registb:='';
close (rf);
assign (rf,'VISION.REG');
reset (rf);
if ioresult <> 0 then exit;
read (rf,reg);
close (rf);
name:=reg.sysop;
for i:=1 to length(name) do
name[i]:=chr((ord(name[i]) - i) xor $12);
registo:=name;
board:=reg.boardname;
for i:=1 to length(board) do
board[i]:=chr((ord(board[i]) + i) xor $08);
registb:=board;
notvalidas:=not match(configset.sysopnam,registo);
end;
procedure error (q:anystr);
begin
if errs=0 then writeln (usr,'Configuration Errors:');
errs:=errs+1;
writeln (usr,errs,'. ',q)
end;
procedure ispath (var x:lstr; name:lstr);
begin
if not exist(x+'con') then error (name+' path bad: '+x)
end;
procedure isstring (x:anystr; name:lstr);
var cnt:integer;
begin
if length(x)=0 then begin
error (name+' has not been set!');
exit
end;
for cnt:=1 to length(x) do if not (x[cnt] in [#32..#255])
then begin
error ('Bad '+name+' string');
exit
end
end;
Procedure IsExistedFile(X:Mstr);
Begin
If Fsearch(X,'.;'+GetEnv('PATH'))='' Then
Error('File '+X+' not found in your environment!');
End;
procedure isinteger (n,r1,r2:integer; name:lstr);
begin
if (n<r1) or (n>r2) then error ('Bad '+name+' value: '+strr(n))
end;
begin
a:=100;
b:=50;
a:=a div b;
b:=a+3;
mens:=false;
totalsent:=0;
totalrece:=0;
errs:=0;
matrix:='';
texttrap:=false;
notvalidas:=true;
getinfo;
if notvalidas then begin
ClrScr;
writeln('This copy of ViSiON is NOT registered to you, if there is');
writeln('a problem with the validation file please contact Crimson Blade or');
WriteLn('The Elemental at...');
writeln(' Countdown To Chaos (619)868-2025 - ViSiON Home');
delay(4000);
matrix:='GO AHEAD AND TRY TO CRACK THIS!!';
end;
isstring (configset.sysopnam,'Sysop name');
ispath (configset.textdi,'Path to message base');
ispath (configset.uploaddi,'Path to ASCII uploads');
ispath (configset.boarddi,'Path to sub-board files');
ispath (configset.textfiledi,'Path to text files');
ispath (configset.doordi,'Path to door batch files');
ispath (configset.netdir,'Path to net mail files');
ispath (configset.workdir,'Path to "Work Directory"');
isinteger (configset.useco,1,4,'COM: port');
isinteger (configset.mintimeou,1,maxint,'input time out');
isinteger (configset.sysopleve,1,maxint,'co-sysop level');
IsExistedFile('PKZIP.EXE');
IsExistedFile('PKUNZIP.EXE');
IsExistedFile('DSZ.COM');
IsExistedFile('COMMAND.COM');
flag:=true;
usedvmode:=(dv_get_version>0);
for cnt:=1 to 100 do if flag and (configset.usertim[cnt]<1) then begin
flag:=false;
error ('Time per day has non-positive entries')
end;
assign (t,'PROMPT.DAT');
reset(t);
if ioresult<>0 then begin
rewrite(t);
close(t);
append(t);
writeln('Creating Prompt File...');
writeln(t,'|01■|09■|03■|10[|14|CP|10]|03■|09■|01■:');
writeln(t);
writeln(t);
close(t);
reset(t);
end;
readln(t,confpromp1);
readln(t,confpromp2);
readln(t,confpromp3);
if errs>0 then begin
closeport;
halt(e_badconfig)
end;
end;
procedure initforum (checkfiles30:boolean);
var knt:integer;
procedure formatmfile;
var m:mailrec;
begin
rewrite (mfile);
fillchar (m,sizeof(m),255);
write (mfile,m)
end;
procedure openmfile;
var i:integer;
begin
close (mfile);
i:=ioresult;
assign (mfile,configset.forumdi+'Mail');
reset (mfile);
i:=ioresult;
if i<>0
then if i=2
then formatmfile
else begin
writeln (usr,'Fatal error: Unable to open mail file!');
closeport;
halt (e_fatalfileerror)
end
end;
procedure closetfile;
var n:integer;
begin
close (tfile);
n:=ioresult;
close (mapfile);
n:=ioresult
end;
procedure formattfile;
var cnt,p:integer;
r:real;
buff:buffer;
x:string[1];
const dummystr:sstr='Blank!! ';
begin
write (usr,'Creat New Message Base? [N]: ');
buflen:=1;
readline (x);
if (length(x)=0) or (upcase(x[1])<>'Y') then begin
closeport;
halt (e_fatalfileerror);
end;
rewrite (mapfile);
if ioresult<>0 then begin
writeln (usr,'Unable to create message base.');
closeport;
halt (e_fatalfileerror)
end;
p:=-2;
for cnt:=0 to numsectors do write (mapfile,p);
p:=1;
for cnt:=1 to sectorsize do begin
buff[cnt]:=dummystr[p];
p:=p+1;
if p>length(dummystr) then p:=1
end;
rewrite (tfile);
if ioresult<>0 then begin
writeln (usr,'Unable to create message base.');
closeport;
halt (e_fatalfileerror)
end;
for cnt:=0 to 5 do write (tfile,buff)
end;
procedure opentfile;
var i,j:integer;
begin
closetfile;
assign (tfile,configset.textdi+'Text');
assign (mapfile,configset.textdi+'BlockMap');
reset (tfile);
i:=ioresult;
reset (mapfile);
j:=ioresult;
if (i<>0) or (j<>0) then formattfile;
firstfree:=-1
end;
procedure openufile;
var u:userrec;
n,cnt:integer;
lsd:bbsrec;
lsf:file of bbsrec;
procedure createuhfile;
var cnt:integer;
begin
rewrite (uhfile);
if ioresult<>0 then begin
writeln (usr,'Unable to create user index file. Run ViSiON Again!');
closeport;
halt (e_fatalfileerror)
end;
seek (ufile,0);
while not eof(ufile) do begin
read (ufile,u);
write (uhfile,u.handle)
end
end;
var knte:integer;
begin
close (ufile);
assign (ufile,configset.forumdi+'USERS');
reset (ufile);
n:=ioresult;
if n=0 then begin
numusers:=filesize(ufile)-1;
assign (uhfile,configset.forumdi+'USERINDX');
reset (uhfile);
if ioresult<>0
then createuhfile
else if filesize(uhfile)<>filesize(ufile) then begin
close (uhfile);
createuhfile
end;
assign(lsf,configset.forumdi+'BBSLIST.DAT');
reset(lsf);
if ioresult<>0 then begin
lsd.name:='Countdown To Chaos';
lsd.baud:='38.4';
lsd.phone:='619-868-2025';
lsd.ware:='ViSiON';
rewrite(lsf);
write(lsf,lsd);
close(lsf);
end;
exit
end;
close (ufile);
n:=ioresult;
rewrite (ufile);
fillchar (u,sizeof(u),0);
write (ufile,u);
u.handle:=configset.sysopnam;
u.password:='Sysop';
u.Conf[1]:=true;
u.Conf[2]:=True;
U.Conf[3]:=True;
U.Conf[4]:=True;
U.Conf[5]:=true;
u.timetoday:=9999;
u.level:=configset.sysopleve+1;
u.menuboard:=112;
u.menuback:=27;
u.menuhighlight:=14;
u.blowboard:=configset.defblowbor;
u.blowinside:=configset.defblowin;
u.macro1:='Macro 1';
u.macro2:='Macro 2';
u.macro3:='Macro 3';
u.udlevel:=10000;
u.udpoints:=10000;
u.config:=[lowercase,eightycols,linefeeds,postprompts,asciigraphics,fseditor];
u.emailannounce:=-1;
u.infoform:=-1;
u.phonenum:='8005551212';
u.displaylen:=24;
fillchar (u.access2,32,255);
u.config:=u.config+[ansigraphics];
u.statcolor:=configset.defstacolor;
u.regularcolor:=configset.defreg;
u.promptcolor:=configset.defpromp;
u.inputcolor:=configset.definput;
u.usernote:='SysOverLord';
u.glevel:=configset.sysopleve+1;
u.gpoints:=10000;
u.upkay:=0;
u.dnkay:=0;
u.revision:=0;
u.lastposts:=0;
u.lastfiles:=0;
u.infoform2:=-1;
u.infoform3:=-1;
u.infoform4:=-1;
u.infoform5:=-1;
for knte:=1 to 32 do u.confset[knte]:=1;
write (ufile,u);
numusers:=1;
createuhfile
end;
procedure initfile (var f:file);
var fi:fib absolute f;
begin
fi.handle:=0;
fi.name[0]:=chr(0)
end;
procedure openlogfile;
procedure autodeletesyslog;
var mx,cnt:integer;
l:logrec;
begin
dontanswer;
write (usr,'Autodeleting system log ... please stand by ... ');
mx:=filesize(logfile) div 2;
(* for cnt:=1 to mx do begin *)
(* assign (Configset.ForumDi+'SysLog'); *)
erase (logfile);
(* seek (logfile,cnt-1); *)
close (logfile);
(* end;
seek (logfile,mx-1);
truncate (logfile); *)
writeln (usr,'Done.');
doanswer;
end;
begin
assign (logfile,configset.forumdi+'Syslog');
reset (logfile);
if ioresult<>0 then begin
rewrite (logfile);
if ioresult<>0 then begin
writeln (usr,'Unable to create log file');
closeport;
halt (e_fatalfileerror)
end
end;
if filesize(logfile)>maxsyslogsize then autodeletesyslog
end;
procedure loadsyslogdat;
var tf:text;
f:File of Byte;
q:lstr;
b1,b2,p,s,n:integer;
{$I MakeDat.Pas}
begin
numsyslogdat:=0;
with syslogdat[0] do begin
menu:=0;
subcommand:=0;
text:='SYSLOG.DAT entry not found: %'
end;
if not exist('syslog.dat') then
begin
WriteLn(Usr,'Syslog.Dat not found! Recreating!');
makesyslogdat;
End;
Assign(F,'Syslog.Dat');
Reset(F);
If FileSize(F)<>4056 then
Begin
WriteLn(Usr,'SysLog.Dat file invalid. Updating.');
MakeSyslogDat;
End;
Close(F);
assign (tf,'syslog.dat');
reset (tf);
if ioresult=0 then begin
while not eof(tf) do begin
readln (tf,q);
p:=pos(' ',q);
if p<>0 then begin
val (copy(q,1,p-1),b1,s);
if s=0 then begin
delete (q,1,p);
p:=pos(' ',q);
if p<>0 then begin
val (copy(q,1,p-1),b2,s);
if s=0 then begin
delete (q,1,p);
if numsyslogdat=maxsyslogdat
then writeln (usr,'Too many SYSLOG.DAT entries')
else begin
numsyslogdat:=numsyslogdat+1;
with syslogdat[numsyslogdat] do begin
menu:=b1;
subcommand:=b2;
text:=copy(q,1,30)
end
end
end
end
end
end
end;
textclose (tf)
end;
if numsyslogdat=0 then writeln (usr,'SYSLOG.DAT file missing or invalid')
end;
procedure doesfilesequal30;
var f:array [1..14] of file;
cnt,i:integer;
begin
{
for cnt:=1 to 14 do begin
assign (f[cnt],'CON');
reset (f[cnt]);
i:=ioresult;
if i<>0 then begin
writeln (usr,^M^J'Fatal error: You MUST put the command',
^M^J^J' FILES=30',
^M^J^J'in your CONFIG.SYS file on the disk from which you boot.',
^M^J^J'Note: If you have been modifying Forum-PC, then you may',
^M^J' be leaving a file open.');
closeport;
halt (e_files30)
end
end;
for cnt:=14 downto 1 do close(f[cnt])}
end;
var k:char;
cnt:integer;
begin
with textrec(system.output) do begin
openfunc:=@opendevice;
closefunc:=@closedevice;
flushfunc:=@writechars;
inoutfunc:=@writechars
end;
with textrec(system.input) do begin
inoutfunc:=@readcharfunc;
openfunc:=@ignorecommand;
closefunc:=@ignorecommand;
flushfunc:=@ignorecommand
end;
if checkfiles30 then doesfilesequal30;
fillchar (urec,sizeof(urec),0);
urec.config:=[lowercase,eightycols,asciigraphics];
iocode:=0;
linecount:=0;
sysopavail:=bytime;
errorparam:='';
errorproc:='';
unam:='';
chainstr:='';
chatreason:='';
ulvl:=0;
unum:=-1;
logonunum:=-2;
break:=false;
nochain:=false;
nobreak:=false;
wordwrap:=false;
beginwithspacesok:=false;
dots:=false;
online:=false;
local:=true;
chatmode:=false;
printerecho:=false;
fillchar (urec,sizeof(urec),0);
usecapsonly:=false;
uselinefeeds:=true;
curattrib:=0;
buflen:=80;
baudrate:=configset.defbaudrat;
parity:=false;
timelock:=false;
ingetstr:=false;
modeminlock:=false;
modemoutlock:=false;
tempsysop:=false;
usebottom:=false;
sysnext:=false;
forcehangup:=false;
requestbreak:=false;
disconnected:=false;
cursection:=mainsysop;
regularlevel:=0;
setparam (configset.useco,baudrate,parity);
doanswer;
initwinds;
for cnt:=1 to numsysfiles do initfile (sysfiles[cnt]);
cls;
loadsyslogdat;
readstatus;
openufile;
opentfile;
openlogfile;
openmfile;
end;
procedure assignname (var t:text; nm:lstr);
begin
with textrec(t) do begin
move (nm[1],name,length(nm));
name[length(nm)]:=#0
end
end;
var r:registers;
begin
textmode (co80);
checkbreak:=false;
checkeof:=false;
directvideo:=configset.directvideomod;
checksnow:=configset.checksnowmod;
r.ah:=15;
intr ($10,r);
if r.al=7
then screenseg:=$b000
else screenseg:=$b800;
textrec(system.input).mode:=fminput;
move (output,usr,sizeof(text)); { Set up device drivers }
move (output,direct,sizeof(text));
move (system.input,directin,sizeof(text));
with textrec(direct) do begin
openfunc:=@opendevice;
closefunc:=@closedevice;
flushfunc:=@directoutchars;
inoutfunc:=@directoutchars;
bufptr:=@buffer
end;
with textrec(directin) do begin
mode:=fminput;
inoutfunc:=@directinchars;
openfunc:=@ignorecommand;
flushfunc:=@ignorecommand;
closefunc:=@ignorecommand;
bufptr:=@buffer
end;
with textrec(usr) do bufptr:=@buffer;
assignname (usr,'USR');
assignname (direct,'DIRECT');
assignname (directin,'DIRECT-IN');
assignname (system.output,'OUTPUT');
assignname (system.input,'INPUT');
notvalidas:=not match(configset.sysopnam,registo);
end.