home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / SYSPC22.ZIP / OVERRET2.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-04-01  |  6.2 KB  |  283 lines

  1. overlay procedure init;
  2.  
  3.   procedure readstatus;
  4.   var f:file of systemstatus;
  5.       ss:systemstatus absolute numcallers;
  6.   begin
  7.     assign (f,'Status');
  8.     reset (f);
  9.     if ioresult<>0 then begin
  10.       fillchar (numcallers,511,0);
  11.       tonext:=-1;
  12.       sysopavail:=bytime;
  13.       writestatus;
  14.       exit
  15.     end;
  16.     read (f,ss);
  17.     close (f)
  18.   end;
  19.  
  20.   procedure formatmfile;
  21.   var m:mailrec;
  22.   begin
  23.     rewrite (mfile);
  24.     fillchar (m,sizeof(m),0);
  25.     write (mfile,m)
  26.   end;
  27.  
  28.   procedure openmfile;
  29.   begin
  30.     close (mfile);
  31.     assign (mfile,'Mail');
  32.     reset (mfile);
  33.     if ioresult<>0 then formatmfile
  34.   end;
  35.  
  36.   procedure closetfile;
  37.   var n:integer;
  38.   begin
  39.     close (tfile);
  40.     n:=ioresult;
  41.     close (mapfile);
  42.     n:=ioresult
  43.   end;
  44.  
  45.   procedure formattfile;
  46.   var cnt,p:integer;
  47.       r:real;
  48.       buff:buffer;
  49.   const dummystr:sstr='Blank!! ';
  50.   begin
  51.     writestr ('Create new message base (y/n)? *');
  52.     if not yes then halt;
  53.     rewrite (mapfile);
  54.     if ioresult<>0 then begin
  55.       writeln ('Unable to create message base.');
  56.       halt
  57.     end;
  58.     p:=-2;
  59.     for cnt:=0 to numsectors do write (mapfile,p);
  60.     p:=1;
  61.     for cnt:=1 to sectorsize do begin
  62.       buff[cnt]:=dummystr[p];
  63.       p:=p+1;
  64.       if p>length(dummystr) then p:=1
  65.     end;
  66.     rewrite (tfile);
  67.     if ioresult<>0 then begin
  68.       writeln ('Unable to create message base.');
  69.       halt
  70.     end;
  71.     for cnt:=0 to 5 do write (tfile,buff)
  72.   end;
  73.  
  74.   procedure opentfile;
  75.   var i,j:integer;
  76.   begin
  77.     closetfile;
  78.     assign (tfile,textdir+'Text');
  79.     assign (mapfile,textdir+'BlockMap');
  80.     reset (tfile);
  81.     i:=ioresult;
  82.     reset (mapfile);
  83.     j:=ioresult;
  84.     if (i<>0) or (j<>0) then formattfile;
  85.     firstfree:=-1
  86.   end;
  87.  
  88.   procedure openufile;
  89.   var u:userrec;
  90.       n,cnt:integer;
  91.       k:integer;
  92.   begin
  93.     close (ufile);
  94.     assign (ufile,'Users');
  95.     reset (ufile);
  96.     n:=ioresult;
  97.     if n=0 then begin
  98.       numusers:=filesize(ufile)-1;
  99.       exit
  100.     end;
  101.     close (ufile);
  102.     n:=ioresult;
  103.     rewrite (ufile);
  104.     fillchar (u,sizeof(u),0);
  105.     write (ufile,u);
  106.     u.handle:=sysopname;
  107.     u.password:='Sysop';
  108.     u.timetoday:=9999;
  109.     u.level:=sysoplevel+1;
  110.     u.udlevel:=sysoplevel+1;
  111.     u.udpoints:=10000;
  112.     u.gflvl:=sysoplevel+1;
  113.     for k:=1 to 9 do
  114.     u.infoform[k]:=-1;
  115.     fillchar (u.access2,32,255);
  116.     if useconmode
  117.       then u.config:=u.config+[ansigraphics,lowercase]
  118.       else u.config:=u.config+[asciigraphics];
  119.     write (ufile,u);
  120.     numusers:=1
  121.  
  122.   end;
  123.  
  124.   procedure initfile (var f:file);
  125.   var fi:fib absolute f;
  126.   begin
  127.     fi.handle:=-1;
  128.     fi.path[1]:=chr(0)
  129.   end;
  130.  
  131.   procedure devicedrivers;
  132.   begin
  133.     if coninptr=ofs(readchar) then exit;
  134.     turbooutptr:=conoutptr;
  135.     turboinptr:=coninptr;
  136.     usrinptr:=ofs(bioskey);
  137.     usroutptr:=turbooutptr;
  138.     coninptr:=ofs(readchar);
  139.     conoutptr:=ofs(writechar);
  140.     constptr:=ofs(charready);
  141.     auxoutptr:=ofs(sendchar);
  142.     auxinptr:=ofs(getchar);
  143. (*  errorptr:=ofs(errorhandle) *)
  144.   end;
  145.  
  146.   procedure openlogfile;
  147.  
  148.     procedure autodeletesyslog;
  149.     var mx,cnt:integer;
  150.         l:logrec;
  151.     begin
  152.       dontanswer;
  153.       write (usr,'*> Autodeleting system log ... please stand by ... ');
  154.       mx:=filesize(logfile) div 2;
  155.       for cnt:=1 to mx do begin
  156.         seek (logfile,cnt+mx-1);
  157.         read (logfile,l);
  158.         seek (logfile,cnt-1);
  159.         write (logfile,l)
  160.       end;
  161.       seek (logfile,mx-1);
  162.       truncate (logfile);
  163.       writeln (usr,'Done. <*');
  164.       doanswer
  165.     end;
  166.  
  167.   begin
  168.     assign (logfile,'Syslog');
  169.     reset (logfile);
  170.     if ioresult<>0 then begin
  171.       rewrite (logfile);
  172.       if ioresult<>0 then begin
  173.         writeln (usr,'Unable to create log file');
  174.         halt
  175.       end
  176.     end;
  177.     if filesize(logfile)>maxsyslogsize then autodeletesyslog
  178.   end;
  179.  
  180.   procedure loadsyslogdat;
  181.   var tf:text;
  182.       q:lstr;
  183.       b1,b2,p,s,n:integer;
  184.   begin
  185.     numsyslogdat:=0;
  186.     with syslogdat[0] do begin
  187.       menu:=0;
  188.       subcommand:=0;
  189.       text:='SYSLOG.DAT entry not found: %'
  190.     end;
  191.     assign (tf,'syslog.dat');
  192.     {$I-} reset (tf); {$I+}
  193.     if ioresult=0 then begin
  194.       while not eof(tf) do begin
  195.         readln (tf,q);
  196.         p:=pos(' ',q);
  197.         if p<>0 then begin
  198.           val (copy(q,1,p-1),b1,s);
  199.           if s=0 then begin
  200.             delete (q,1,p);
  201.             p:=pos(' ',q);
  202.             if p<>0 then begin
  203.               val (copy(q,1,p-1),b2,s);
  204.               if s=0 then begin
  205.                 delete (q,1,p);
  206.                 if numsyslogdat=maxsyslogdat
  207.                   then writeln ('Too many SYSLOG.DAT entries')
  208.                   else begin
  209.                     numsyslogdat:=numsyslogdat+1;
  210.                     with syslogdat[numsyslogdat] do begin
  211.                       menu:=b1;
  212.                       subcommand:=b2;
  213.                       text:=copy(q,1,30)
  214.                     end
  215.                   end
  216.               end
  217.             end
  218.           end
  219.         end
  220.       end;
  221.       textclose (tf)
  222.     end;
  223.     if numsyslogdat=0 then writeln (usr,'SYSLOG.DAT file missing or invalid')
  224.   end;
  225.  
  226. var k:char;
  227.     cnt:integer;
  228.     r:regs;
  229. begin
  230.   r.ah:=15;
  231.   intr ($10,r);
  232.   if r.al=7
  233.     then screenseg:=$b000
  234.     else screenseg:=$b800;
  235.   devicestackptr:=0;
  236.   devicedrivers;
  237.   iocode:=0;
  238.   linecount:=0;
  239.   sysopavail:=bytime;
  240.   errorparam:='';
  241.   errorproc:='';
  242.   unam:='';
  243.   chainstr:='';
  244.   chatreason:='';
  245.   ulvl:=0;
  246.   unum:=-1;
  247.   logonunum:=-2;
  248.   break:=false;
  249.   nochain:=false;
  250.   nobreak:=false;
  251.   wordwrap:=false;
  252.   dots:=false;
  253.   online:=false;
  254.   local:=true;
  255.   chatmode:=false;
  256.   texttrap:=false;
  257.   printerecho:=false;
  258.   fillchar (urec,sizeof(urec),0);
  259.   usecapsonly:=false;
  260.   uselinefeeds:=true;
  261.   curattrib:=0;
  262.   buflen:=80;
  263.   baudrate:=defbaudrate;
  264.   parity:=false;
  265.   timelock:=false;
  266.   modeminlock:=false;
  267.   modemoutlock:=false;
  268.   tempsysop:=false;
  269.   sysnext:=false;
  270.   cursection:=mainsysop;
  271.   regularlevel:=0;
  272.   setparam (usecom,baudrate,parity);
  273.   initwinds;
  274.   for cnt:=1 to numsysfiles do initfile (sysfiles[cnt]);
  275.   cls;
  276.   loadsyslogdat;
  277.   readstatus;
  278.   openufile;
  279.   opentfile;
  280.   openlogfile;
  281.   openmfile
  282. end;
  283.