home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 153.img / TELES.ZIP / BOARDEDT.PAS < prev    next >
Pascal/Delphi Source File  |  1988-07-23  |  45KB  |  1,394 lines

  1. {$R-}    {Range checking off}
  2. {$B+}    {Boolean complete evaluation on}
  3. {$S+}    {Stack checking on}
  4. {$I+}    {I/O checking on}
  5. {$N-}    {No numeric coprocessor}
  6. {$V-}
  7.  
  8. Unit Boardedt;
  9.  
  10. Interface
  11.  
  12. Uses
  13.   Crt,
  14.   Dos,
  15.   Common;
  16.  
  17. {function mln(i:astr; l:integer):astr;
  18. function mn(i,l:integer):astr;
  19. procedure inu(var i:integer);
  20. procedure ini(var i:byte);}
  21. procedure dlboardedit;
  22. {procedure eventedit;}
  23. procedure boardedit;
  24. procedure initvotes;
  25. procedure changestuff;
  26.  
  27. Implementation
  28.  
  29. function mln(i:astr; l:integer):astr;
  30. begin
  31.   while length(i)<l do i:=i+' ';
  32.   mln:=i;
  33. end;
  34.  
  35. function mn(i,l:integer):astr;
  36. begin
  37.   mn:=mln(cstr(i),l);
  38. end;
  39.  
  40. procedure inu(var i:integer);
  41. var s:astr;
  42. begin
  43.   input(s,5); i:=value(s);
  44. end;
  45.  
  46. procedure ini(var i:byte);
  47. var s:astr;
  48. begin
  49.   input(s,3); i:=value(s);
  50. end;
  51.  
  52. procedure autoswac(var u:systatrec;r:restrictions);
  53. begin
  54.   if r in u.autoac then u.autoac:=u.autoac-[r] else u.autoac:=u.autoac+[r];
  55. end;
  56.  
  57. procedure autoacch(c:char; var u:systatrec);
  58. begin
  59.   case c of
  60.     'L':autoswac(u,rlogon);
  61.     'C':autoSWAC(u,RCHAT);
  62.     'V':autoSWAC(u,RVALIDATE);
  63.     'B':autoSWAC(u,RBACKSPACE);
  64.     'A':autoSWAC(u,RAMSG);
  65.     '*':autoSWAC(u,RPOSTAN);
  66.     'P':autoSWAC(u,RPOST);
  67.     'E':autoSWAC(u,REMAIL);
  68.     'K':autoSWAC(u,RVOTING);
  69.     'M':autoswac(u,rmsg);
  70.   END;
  71. end;
  72.  
  73. procedure zswac(var u:systatrec;r:restrictions);
  74. begin
  75.   if r in u.newac then u.newac:=u.newac-[r] else u.newac:=u.newac+[r];
  76. end;
  77.  
  78. procedure zacch(c:char; var u:systatrec);
  79. begin
  80.   case c of
  81.     'L':zswac(u,rlogon);
  82.     'C':zSWAC(u,RCHAT);
  83.     'V':zSWAC(u,RVALIDATE);
  84.     'B':zSWAC(u,RBACKSPACE);
  85.     'A':zSWAC(u,RAMSG);
  86.     '*':zSWAC(u,RPOSTAN);
  87.     'P':zSWAC(u,RPOST);
  88.     'E':zSWAC(u,REMAIL);
  89.     'K':zSWAC(u,RVOTING);
  90.     'M':zswac(u,rmsg);
  91.   END;
  92. end;
  93.  
  94. {
  95. procedure eed;
  96. var i1,i2,ii:integer; c:char; ij:astr;
  97. begin
  98.   prt('Protocal number to delete? '); inu(ii);
  99.   if (ii>0) and (ii<=numprotocals) then begin
  100.     prompt(protocals[ii].descr+'   Delete it? ');
  101.     if yn then begin
  102.       numprotocals:=numprotocals-1; for i1:=ii to numprotocals do
  103.         protocals[i1]:=protocals[i1+1];
  104.       rewrite(xp); for i1:=1 to numprotocals do write(xp,protocals[i1]);
  105.       close(xp);
  106.       end;
  107.     end;
  108. end;
  109.  
  110. procedure eem;
  111. var i1,i2,ii:integer; c:char; ij:astr;
  112. begin
  113.   prt('Protocal number to edit? '); inu(ii);
  114.   if (ii>0) and (ii<=numprotocals) then begin with protocals[ii] do
  115.   repeat
  116.     cls;
  117.     print('   Protocal   : '+cstr(ii));
  118.     print('1. Description: '+descr);
  119.     print('2. Send out   : '+scmd);
  120.     print('3. Recieve in : '+rcmd);
  121.     print('4. Xfer Ok    : '+cstr(xferok));
  122.     print('Q. Quit');
  123.     nl; prt('Which? '); onek(c,'Q1234');
  124.     case c of
  125.       '1':begin prt('New description? '); mpl(30); inputl(descr,30); end;
  126.       '2':begin
  127.             nl;
  128.             print('@1=Baud @2=Port @3=Filename');
  129.             prt('New send out command line? '); mpl(40);
  130.             input(scmd,40);
  131.           end;
  132.       '3':begin
  133.             nl;
  134.             print('@1=Baud @2=Port @3=Filename');
  135.             prt('New recieve command line? '); mpl(40);
  136.             input(rcmd,40);
  137.           end;
  138.       '4':begin prt('Xfer Ok Value? '); inu(xferok); end;
  139.     end;
  140.   until (c='Q') or hangup;
  141.   reset(xp); seek(xp,ii-1); write(xp,protocals[ii]); close(xp); c:=' ';
  142.  end;
  143. end;
  144.  
  145. procedure eei;
  146. var i1,i2,ii:integer; c:char; ij:astr;
  147. begin
  148.   prt('Protocal number to insert before? '); inu(ii);
  149.   if (ii>5) and (ii<=numprotocals+1) and (numprotocals<19) then begin
  150.     numprotocals:=numprotocals+1; for i1:=numprotocals downto ii do
  151.       protocals[i1]:=protocals[i1-1];
  152.     with protocals[ii] do begin
  153.       descr:='NEW Protocal';
  154.       xferok:=-1;
  155.     end;
  156.     rewrite(xp); for i1:=1 to numprotocals do write(xp,protocals[i1]);
  157.     close(xp);
  158.   end;
  159. end;
  160.  
  161. procedure Exproedit;
  162. var i1,i2,ii:integer; c:char; ij:astr; abort,next:boolean; st:astr;
  163. begin
  164.  if checkpw then
  165.  repeat
  166.   cls; abort:=false;
  167.   cl(0);printacr('NN Description of Protocal        Xfer Ok Code',abort,next);
  168.   cl(9);printacr('-- ------------------------------ ============',abort,next);
  169.   ii:=1;
  170.   while (ii<=numprotocals) and (not abort) do
  171.     with protocals[ii] do begin
  172.       st:=mn(ii+5,2)+' '+mln(descr,30)+'    '+mn(xferok,6);
  173.       printacr(st,abort,next);
  174.       ii:=ii+1;
  175.     end;
  176.   nl; prt('D)elete, I)nsert, M)odify, Q)uit  :'); onek(c,'QDIM');
  177.   case c of
  178.     'D':eed;
  179.     'M':eem;
  180.     'I':eei;
  181.   end;
  182.  until (c='Q') or hangup;
  183. end;
  184. }
  185.  
  186. procedure initvotes;
  187. var vdata:file of vdatar; cv,tv,ii:integer; i,i1,i2:astr; vd:vdatar; t1,tf:boolean;
  188.     u1:userrec;
  189. begin
  190.   begin
  191.     assign(vdata,systat.gfilepath+'voting.dat'); {$I-} reset(vdata); {$I+}
  192.     if ioresult<>0 then begin
  193.       rewrite(vdata); vd.question:='<< No Question >>'; vd.numa:=0;
  194.       for cv:=0 to 19 do write(vdata,vd);
  195.     end;
  196.     repeat
  197.       cls;
  198.       for cv:=1 to 20 do begin
  199.         seek(vdata,cv-1); read(vdata,vd);
  200.         cl(4); if cv<10 then prompt(' ');
  201.         prompt(cstr(cv));cl(7);prompt(': ');cl(3);print(vd.question);
  202.       end;
  203.       prt('Which? '); input(i,2);
  204.       ii:=value(i); t1:=false;
  205.       if (ii>0) and (ii<21) then begin
  206.         cv:=1; t1:=true;
  207.         print('Enter new question:'); prt(':');
  208.         inputl(vd.question,79);
  209.       if vd.question='' then begin vd.numa:=0;vd.question:='<< NO QUESTION >>';
  210.         end else begin
  211.           vd.answ[0].ans:='No Comment';
  212.           vd.answ[0].numres:=0;
  213.           nl; print('Enter blank line for last answer,');
  214.           print('max 9 answers, 25 chars/answer');
  215.           tf:=false;
  216.           repeat
  217.             cl(4);prompt(cstr(cv));cl(7);prompt(':');cl(3);inputl(vd.answ[cv].ans,25); vd.answ[cv].numres:=0;
  218.             if vd.answ[cv].ans='' then begin
  219.               tf:=true;
  220.               if cv=1 then vd.question:='<< NO QUESTION >>'
  221.             end else cv:=cv+1;
  222.           until hangup or (cv=21) or tf;
  223.           vd.numa:=cv-1;
  224.         end;
  225.         seek(vdata,ii-1); write(vdata,vd);
  226.         vqu[ii]:= vd.numa<>0;
  227.         reset(uf); for cv:=1 to filesize(uf)-1 do begin
  228.           seek(uf,cv); read(uf,u1); u1.vote[ii]:=0; seek(uf,cv); write(uf,u1);
  229.         end;
  230.         close(uf);
  231.         thisuser.vote[ii]:=0;
  232.       end;
  233.     until (not t1) or hangup;
  234.     close(vdata);
  235.   end;
  236. end;
  237.  
  238. procedure dlbed;
  239. var i1,ii,i2:integer;
  240.     c:char;
  241.     d:dlnscan;
  242. begin
  243.   prt('Directory number to delete? '); inu(ii);
  244.   if (ii>0) and (ii<=maxulb) then begin
  245.     prt(uboards[ii].name+'   Delete it? ');
  246.     if yn then begin
  247.       maxulb:=maxulb-1; for i1:=ii to maxulb do
  248.         uboards[i1]:=uboards[i1+1];
  249.       rewrite(ulf); for i1:=0 to maxulb do write(ulf,uboards[i1]);
  250.       close(ulf); reset(uf);
  251.       for i1:=1 to filesize(uf)-1 do begin
  252.         seek(uf,i1);read(uf,user); d:=[];
  253.         for i2:=0 to ii-1 do
  254.           if i2 in user.dlnscn then
  255.             d:=d+[i2];
  256.         for i2:=ii+1 to 39 do
  257.           if i2 in user.dlnscn then
  258.             d:=d+[i2-1];
  259.         user.dlnscn:=(d+[39]); seek(uf,i1); write(uf,user);
  260.       end; close(uf);
  261.       d:=[];
  262.       for i2:=0 to ii-1 do
  263.         if i2 in thisuser.dlnscn then
  264.           d:=d+[i2];
  265.       for i2:=ii+1 to 39 do
  266.         if i2 in thisuser.dlnscn then
  267.           d:=d+[i2-1];
  268.       thisuser.dlnscn:=(d+[39]);
  269.     end;
  270.   end;
  271. end;
  272.  
  273. {
  274. procedure modevent;
  275. var ii:integer; s:astr;
  276. begin
  277.   cls;
  278.   prt('Event number to edit? '); inu(ii); cls;
  279.   print('   Event       : '+cstr(ii));
  280.   print('<1>Description : '+uevent[ii].descr);
  281.   print('<2>Filename.ext: '+uevent[ii].batch);
  282.   print('<3>Time start  : '+ctim(uevent[ii].time));
  283.   print('<Q>uit');
  284.   nl;
  285.   prt('Which? ');
  286.   onek(c,'123Q');
  287.   case c of
  288.     '1':begin
  289.           print('Enter new description'); mpl(25);
  290.           input(s,25); if s<>'' then uevent[ii].descr:=s;
  291.         end;
  292.     '2':begin
  293.           print('Enter new file name to run');
  294.           mpl(12); input(s,12); if s<>'' then uevent[ii].batch:=s;
  295.         end;
  296.     '3':begin
  297.           print('All entries 24 hour time.  Hour: (0-23), Minute: (0-59)');
  298.           prompt('  Hour   : ');
  299.           inu(t1h);
  300.           if (t1h<0) or (t1h>23) then t1h:=0;
  301.           prompt('  Minute : ');
  302.           inu(t1m);
  303.           if (t1m<0) or (t1m>59) then t1m:=0;
  304.           nl;
  305.           print('300 baud allowed off time:');          prompt('  Hour   : ');
  306.     inu(t2h);
  307.     if (t2h<0) or (t2h>23) then t2h:=0;
  308.     prompt('  Minute : ');
  309.     inu(t2m);
  310.     if (t2m<0) or (t2m>59) then t2m:=0;
  311.     t1:=t1h*60+t1m;
  312.     t2:=t2h*60+t2m;
  313.     nl;nl;
  314.     print('Hours: '+tch(cstr(t1h))+':'+tch(cstr(t1m))+' to '+
  315.             tch(cstr(t2h))+':'+tch(cstr(t2m)));
  316.     nl;
  317.  
  318.  
  319. procedure eventedit;
  320. var nn:integer; abort,next:boolean;
  321. begin
  322.   repeat
  323.     cls;
  324.     printacr(#3+#0+'NN Description              Filename.Ext Time');
  325.     printacr(#3+#9+'-- ======================== ============ ====');
  326.     nn:=0;
  327.     repeat
  328.       nn:=nn+1;
  329.       printacr(mln(cstr(nn),3)+mln(uevent[nn].descr,26)
  330.       +mln(uevent[nn].batch,13)+ctim(uevent[nn].time),abort,next);
  331.     until (nn=9) or (hangup);
  332.     prt('D)elete, M)odify or Q)uit: ');
  333.     onek(c,'DMQ');
  334.     case c of
  335.       'D':delevent;
  336.       'M':modevent;
  337.     end;
  338.   until (c='Q') or (hangup);
  339. end;
  340. }
  341. procedure dlbem;
  342. var i1,ii,i2:integer;
  343.     c:char;
  344.     s:astr;
  345.     d:dlnscan;
  346. begin
  347.   prt('Directory number to edit? '); inu(ii); cls;
  348.   if (ii>=0) and (ii<=maxulb) then with uboards[ii] do begin
  349.     repeat
  350.       cls; print('   Directory #: '+cstr(ii));
  351.       print('<1>Name       : '+name);
  352.       print('<2>Filename   : '+filename);
  353.       print('<3>DSL req    : '+cstr(dsl));
  354.       print('<4>Password   : "'+password+'"');
  355.       print('<5>Max files  : '+cstr(maxfiles));
  356.       print('<6>D/L path   : '+dlpath);
  357.       print('<7>Age Req''rd : '+cstr(agereq));
  358.       print('<8>AR flag    : '+ar);
  359.       print('<9>Sig Key    : '+key);
  360.       print('<Q>uit');
  361.       nl; prt('Which? '); onek(c,'Q123456789');
  362.       case c of
  363.         '1':begin prt('New name? '); inputl(name,25); end;
  364.         '2':begin
  365.               prt('New filename? ');
  366.               input(filename,8);
  367.               if pos('.',filename)>0 then
  368.                 filename:=copy(filename,1,pos('.',filename)-1);
  369.             end;
  370.         '3':begin prt('New DSL? '); ini(dsl); end;
  371.         '4':begin prt('New PW? '); input(password,10); end;
  372.         '5':begin prt('Max files? '); inu(maxfiles); end;
  373.         '6':begin
  374.               print('This allows you to change what drive and path you are able');
  375.               print('to download from. If you attempt to use a path that does not');
  376.               print('exist on the specified drive, the BBS will crash when the');
  377.               print('directory is accessed.');
  378.               nl;
  379.               print('If you are changing the path to a new one, you will have to');
  380.               print('copy all the files in the previous path to the new path.');
  381.               nl;
  382.               prt('Enter new download drive:\path? ');mpl(40);input(s,40);
  383.               if s<>'' then
  384.                 dlpath:=s;
  385.             end;
  386.          '7':begin
  387.                print('Enter the age required to enter this section.');
  388.                prt(':');mpl(2);input(s,2);if (value(s)>0) and (value(s)<100) and (s<>'') then
  389.                agereq:=value(s);
  390.              end;
  391.          '8':begin
  392.                prt('New AR? '); getkey(c); ar:=upcase(c);
  393.                if (ar<'A') or (ar>'G') then ar:='@'; nl;
  394.              end;
  395.          '9':begin
  396.                prt('New Board Key? '); getkey(c); key:=upcase(c);
  397.              end;
  398.       end;
  399.     until (c='Q') or hangup;
  400.     reset(ulf); seek(ulf,ii); write(ulf,uboards[ii]); close(ulf); c:=' ';
  401.   end;
  402. end;
  403.  
  404.   procedure dlbei;
  405. var i1,ii,i2:integer;
  406.     c:char;
  407.     d:dlnscan;
  408. begin
  409.   prt('Directory number to insert before? '); inu(ii);
  410.   if (ii>0) and (ii<=maxulb+1) and (maxulb<39) then begin
  411.     maxulb:=maxulb+1; for i1:=maxulb downto ii do
  412.       uboards[i1]:=uboards[i1-1];
  413.     with uboards[ii] do begin
  414.       name:='<< Not Used >>';
  415.       filename:='NEWDIR';
  416.       dsl:=0;
  417.       maxfiles:=50;
  418.       password:=''; getdir(0,i); dlpath:=i[1]+':DLOADS\'; agereq:=1; key:=' ';
  419.     end;
  420.     rewrite(ulf); for i1:=0 to maxulb do write(ulf,uboards[i1]);
  421.     close(ulf);reset(uf);
  422.     for i1:=1 to filesize(uf)-1 do begin
  423.       seek(uf,i1);read(uf,user); d:=[];
  424.       for i2:=0 to ii-1 do
  425.         if i2 in user.dlnscn then
  426.           d:=d+[i2];
  427.       for i2:=ii to 38 do
  428.         if i2 in user.dlnscn then
  429.           d:=d+[i2+1];
  430.       d:=d+[ii]; user.dlnscn:=d;
  431.       seek(uf,i1); write(uf,user);
  432.     end; close(uf);
  433.     d:=[];
  434.     for i2:=0 to ii-1 do
  435.       if i2 in thisuser.dlnscn then
  436.         d:=d+[i2];
  437.     for i2:=ii to 38 do
  438.       if i2 in thisuser.dlnscn then
  439.         d:=d+[i2+1];
  440.     d:=d+[ii]; thisuser.dlnscn:=d;
  441.   end;
  442. end;
  443.  
  444.   procedure bed;
  445. var i1,i2,ii:integer; c:char; ij:astr;
  446. begin
  447.   prt('Board number to delete? '); inu(ii);
  448.   if (ii>0) and (ii<=numboards) then begin
  449.     prompt(boards[ii].name+'   Delete it? ');
  450.     if yn then begin
  451.       numboards:=numboards-1; for i1:=ii to numboards do
  452.         boards[i1]:=boards[i1+1];
  453.       rewrite(bf); for i1:=1 to numboards do write(bf,boards[i1]);
  454.       close(bf); reset(uf); for i1:=1 to filesize(uf)-1 do begin
  455.         seek(uf,i1);read(uf,user); for i2:=ii to numboards do begin
  456.           user.qscn[i2]:=user.qscn[i2+1]; user.qscan[i2]:=user.qscan[i2+1];
  457.         end;
  458.         seek(uf,i1); write(uf,user);
  459.       end; close(uf);
  460.       for i2:=ii to numboards do begin
  461.         thisuser.qscn[i2]:=thisuser.qscn[i2+1]; thisuser.qscan[i2]:=thisuser.qscan[i2+1];
  462.       end;
  463.     end;
  464.   end;
  465. end;
  466.  
  467.   procedure bem;
  468. var i1,i2,ii:integer; c:char; ij:astr;
  469. begin
  470.   prt('Board number to edit? '); inu(ii);
  471.   if (ii>0) and (ii<=numboards) then begin with boards[ii] do
  472.   repeat
  473.     cls;
  474.     print('   Board #   : '+cstr(ii));
  475.     print('<1>Name      : '+name);
  476.     print('<2>Filename  : '+filename);
  477.     print('<3>Sig Key   : '+key);
  478.     print('<4>SL req    : '+cstr(sl));
  479.     print('<5>Post SL   : '+cstr(postsl));
  480.     print('<6>AR flag   : '+ar);
  481.     print('<7>Password  : "'+pw+'"');
  482.     print('<8>Max Mess  : '+cstr(maxmsgs));
  483.    prompt('<9>Anonymous : '); case anonymous of
  484.       yes:print('Yes');
  485.       no:print('No');
  486.       forced:print('Force');
  487.       dearabby:print('Dear abby');
  488.     end;
  489.     print('<Q>uit');
  490.     nl; prt('Which? '); onek(c,'Q123456789');
  491.     case c of
  492.       '1':begin prt('New name? '); inputl(name,30); end;
  493.       '2':begin
  494.             prt('New filename? ');
  495.             input(filename,8);
  496.             if pos('.',filename)>0 then
  497.               filename:=copy(filename,1,pos('.',filename)-1);
  498.           end;
  499.       '3':begin prt('New key? '); getkey(c); key:=c; nl; end;
  500.       '4':begin prt('New SL? '); ini(sl); end;
  501.       '5':begin prt('New Post SL? '); ini(postsl); end;
  502.       '6':begin prt('New AR? '); getkey(c); ar:=upcase(c);
  503.             if (ar<'A') or (ar>'G') then ar:='@'; nl; end;
  504.       '7':begin prt('New PW? '); input(pw,10); end;
  505.       '8':begin prt('Max messages? '); ini(maxmsgs);
  506.                 if maxmsgs>200 then maxmsgs:=200; end;
  507.       '9':begin prt('New ANST (Y:es,N:o,F:orced,D:ear Abby) :'); onek(c,'YNFD');
  508.             case c of
  509.               'Y':anonymous:=yes;
  510.               'N':anonymous:=no;
  511.               'F':anonymous:=forced;
  512.               'D':anonymous:=dearabby;
  513.             end;
  514.           end;
  515.     end;
  516.   until (c='Q') or hangup;
  517.   reset(bf); seek(bf,ii-1); write(bf,boards[ii]); close(bf); c:=' ';
  518.  end;
  519. end;
  520.  
  521.   procedure bei;
  522. var i1,i2,ii:integer; c:char; ij:astr;
  523. begin
  524.   prt('Board number to insert before? '); inu(ii);
  525.   if (ii>0) and (ii<=numboards+1) and (numboards<39) then begin
  526.     numboards:=numboards+1; for i1:=numboards downto ii do
  527.       boards[i1]:=boards[i1-1];
  528.     with boards[ii] do begin
  529.       name:='<< Not used >>';
  530.       filename:='newboard';
  531.       sl:=30;
  532.       postsl:=30;
  533.       maxmsgs:=50;
  534.       pw:='';
  535.       anonymous:=no;
  536.       ar:='@';
  537.       key:=' ';
  538.     end;
  539.     rewrite(bf); for i1:=1 to numboards do write(bf,boards[i1]);
  540.     close(bf); reset(uf); for i1:=1 to filesize(uf)-1 do begin
  541.       seek(uf,i1);read(uf,user); for i2:=numboards downto ii do begin
  542.         user.qscn[i2]:=user.qscn[i2-1]; user.qscan[i2]:=user.qscan[i2-1];
  543.       end;
  544.       user.qscan[ii].number:=-32767; user.qscan[ii].ltr:='A'; user.qscn[ii]:=true;
  545.       user.qscan[ii].ext:=1; seek(uf,i1); write(uf,user);
  546.     end; close(uf);
  547.     for i2:=numboards downto ii do begin
  548.       thisuser.qscn[i2]:=thisuser.qscn[i2-1]; thisuser.qscan[i2]:=thisuser.qscan[i2-1];
  549.     end;
  550.     thisuser.qscan[ii].number:=-32767; thisuser.qscan[ii].ltr:='A'; thisuser.qscn[ii]:=true;
  551.     thisuser.qscan[ii].ext:=1;
  552.   end;
  553. end;
  554.  
  555. procedure dlboardedit;
  556. var i1,ii,culb,i2:integer;
  557.     c:char; abort,next,done:boolean;
  558.     ij:astr;
  559.     d:dlnscan;
  560. begin
  561.  if checkpw then
  562.  repeat
  563.   cls; done:=false; abort:=false;
  564.   cl(0);printacr('NN Directory Name            DSL Directory Path',abort,next);
  565.   cl(4);printacr('-- ========================= === ========================================',abort,next);
  566.   ii:=0;
  567.   while (ii<=maxulb) and (not abort) do
  568.     with uboards[ii] do begin
  569.       printacr(#3+#0+mn(ii,2)+' '+#3+#3+mln(name,25)+' '+#3+#9+mn(dsl,3)+' '+#3+#5+mln(dlpath,40),abort,next);
  570.       ii:=ii+1;
  571.     end;
  572.   nl; prt('D)elete, I)nsert, M)odify, Q)uit  :'); onek(c,'QDIM');
  573.   case c of
  574.     'Q':done:=true;
  575.     'D':dlbed;
  576.     'M':dlbem;
  577.     'I':dlbei;
  578.   end;
  579.  until done or hangup;
  580. end;
  581.  
  582. procedure boardedit;
  583. var i1,i2,ii:integer; c:char; ij:astr; abort,next:boolean; st:astr;
  584. begin
  585.  if checkpw then
  586.  repeat
  587.   cls; abort:=false;
  588.   cl(0);printacr('NN K Name                           Filename     RSL PSL MaxM Password   AR An',abort,next);
  589.   cl(4);printacr('-- = ------------------------------ ============ --- === ---- ========== -- ==',abort,next);
  590.   ii:=1;
  591.   while (ii<=numboards) and (not abort) do
  592.     with boards[ii] do begin
  593.       st:=#3+#0+mn(ii,2)+' '+#3+#9+key+' '+#3+#3+mln(name,30)+' '+#3+#9+mln(filename,12)+' '+mn(sl,3)+' '+mn(postsl,3)+' ';
  594.       st:=st+#3+#5+mn(maxmsgs,3)+'  '+mln(pw,10)+' ';
  595.       if ar='@' then st:=st+'   ' else st:=st+ar+'  ';
  596.       case anonymous of
  597.         yes:st:=st+'Y';
  598.         no:st:=st+'N';
  599.         forced:st:=st+'F';
  600.         dearabby:st:=st+'DA';
  601.       end;
  602.       printacr(st,abort,next);
  603.       ii:=ii+1;
  604.     end;
  605.   nl; prt('D)elete, I)nsert, M)odify, Q)uit  :'); onek(c,'QDIM');
  606.   case c of
  607.     'D':bed;
  608.     'M':bem;
  609.     'I':bei;
  610.   end;
  611.  until (c='Q') or hangup;
  612. end;
  613.  
  614.  
  615. procedure chstb;
  616. var i:astr;
  617. begin
  618.   nl;
  619.   prompt('New NewUser Password : ');
  620.   input(i,20);
  621.   nl;
  622.   print('NewUser Password: "'+i+'"');
  623.   nl;
  624.   prompt('Is this what you want? ');
  625.   if yn then systat.boardpw:=i;
  626. end;
  627.  
  628.   procedure chsta;
  629. var i:astr;
  630. begin
  631.   nl;
  632.   prompt('New Sysop Password : ');
  633.   input(i,20);
  634.   nl;
  635.   print('Sysop Password: "'+i+'"');
  636.   nl;
  637.   prompt('Is this what you want? ');
  638.   if yn then systat.sysoppw:=i;
  639. end;
  640.  
  641.   procedure chstc;
  642. var i:astr; b2:boolean;
  643. begin
  644.   nl;
  645.   prompt('Do you want the system closed? ');
  646.   b2:=yn;
  647.   nl;
  648.   prompt('System: '); if b2 then print('Closed') else print('Open');
  649.   nl;
  650.   prompt('Is this what you want? ');
  651.   if yn then systat.closedsystem:=b2;
  652. end;
  653.  
  654.   procedure chstd;
  655. var i:astr; c1:integer;
  656. begin
  657.   nl;
  658.   prompt('Com port (1-2) ? ');
  659.   inu(c1);
  660.   if (c1<1) or (c1>2) then c1:=systat.comport;
  661.   nl;
  662.   print('Com Port : '+cstr(c1));
  663.   nl;
  664.   print('If this is not correct, the BBS will hang and you will not be able');
  665.   print('to fix it easily.');
  666.   nl;
  667.   prompt('Are you sure this is what you want? ');
  668.   if yn then begin systat.comport:=c1; remove_port; iport; end;
  669. end;
  670.  
  671. procedure chste;
  672. var i:astr; c1:integer;
  673. begin
  674.   NL;
  675.   prompt('Modem speed (300,1200,2400,4800,9600) ? ');
  676.   inu(c1);
  677.   if (c1<>300) and (c1<>1200) and (c1<>2400) and (c1<>4800) and (c1<>9600)
  678.   then c1:=systat.maxbaud;
  679.   nl;
  680.   print('Modem Speed : '+cstr(c1));
  681.   nl;
  682.   print('If your modem speed is LESS than what you specified, then the');
  683.   print('BBS will hang and you will not be able to fix it easily.');
  684.   nl;
  685.   prompt('Are you sure this is what you want? ');
  686.   if yn then systat.maxbaud:=c1;
  687. end;
  688.  
  689. procedure chstg;
  690. var i1,i2:astr; t1,t2,t1h,t1m,t2h,t2m:integer;
  691. begin
  692.   if spd<>'KB' then begin cl(7); print('This can only be changed locally.'); end;
  693.   if spd='KB' then begin
  694.   nl;
  695.   prompt('Do you want to declare sysop hours? ');
  696.   if yn then begin
  697.     nl;
  698.     print('All entries 24 hour time.  Hour: (0-23), Minute: (0-59)');
  699.     print('Chat on time:');
  700.     prompt('  Hour   : ');
  701.     inu(t1h);
  702.     if (t1h<0) or (t1h>23) then t1h:=0;
  703.     prompt('  Minute : ');
  704.     inu(t1m);
  705.     if (t1m<0) or (t1m>59) then t1m:=0;
  706.     nl;
  707.     print('Chat off time:');
  708.     prompt('  Hour   : ');
  709.     inu(t2h);
  710.     if (t2h<0) or (t2h>23) then t2h:=0;
  711.     prompt('  Minute : ');
  712.     inu(t2m);
  713.     if (t2m<0) or (t2m>59) then t2m:=0;
  714.     t1:=t1h*60+t1m;
  715.     t2:=t2h*60+t2m;
  716.     nl;nl;
  717.     print('Hours: '+tch(cstr(t1h))+':'+tch(cstr(t1m))+' to '+
  718.             tch(cstr(t2h))+':'+tch(cstr(t2m)));
  719.     nl;
  720.     prompt('Is this what you want? ');
  721.     if yn then begin
  722.       systat.lowtime:=t1;
  723.       systat.hitime:=t2;
  724.     end;
  725.   end else begin
  726.     systat.lowtime:=0;
  727.     systat.hitime:=0;
  728.     end;
  729.   end;
  730. end;
  731.  
  732.   procedure ch300dl;
  733. var i1,i2:astr; t1,t2,t1h,t1m,t2h,t2m:integer;
  734. begin
  735.   nl;
  736.   prompt('Do you want to declare 300 baud download hours? ');
  737.   if yn then begin
  738.     nl;
  739.     print('All entries 24 hour time.  Hour: (0-23), Minute: (0-59)');
  740.     print('300 baud downloading available time on:');
  741.     prompt('  Hour   : ');
  742.     inu(t1h);
  743.     if (t1h<0) or (t1h>23) then t1h:=0;
  744.     prompt('  Minute : ');
  745.     inu(t1m);
  746.     if (t1m<0) or (t1m>59) then t1m:=0;
  747.     nl;
  748.     print('300 baud downloading available time off:');
  749.     prompt('  Hour   : ');
  750.     inu(t2h);
  751.     if (t2h<0) or (t2h>23) then t2h:=0;
  752.     prompt('  Minute : ');
  753.     inu(t2m);
  754.     if (t2m<0) or (t2m>59) then t2m:=0;
  755.     t1:=t1h*60+t1m;
  756.     t2:=t2h*60+t2m;
  757.     nl;nl;
  758.     print('Hours: '+tch(cstr(t1h))+':'+tch(cstr(t1m))+' to '+
  759.             tch(cstr(t2h))+':'+tch(cstr(t2m)));
  760.     nl;
  761.     prompt('Is this what you want? ');
  762.     if yn then begin
  763.       systat.b300dllowtime:=t1;
  764.       systat.b300dlhitime:=t2;
  765.     end;
  766.   end else begin
  767.     systat.b300dllowtime:=0;
  768.     systat.b300dlhitime:=0;
  769.     end;
  770. end;
  771.  
  772.   procedure chdl;
  773. var i1,i2l:astr; t1,t2,t1h,t1m,t2h,t2m:integer;
  774. begin
  775.   nl;
  776.   prompt('Do you want to declare download hours? ');
  777.   if yn then begin
  778.     nl;
  779.     print('All entries 24 hour time.  Hour: (0-23), Minute: (0-59)');
  780.     print('Download available time:');
  781.     prompt('  Hour   : ');
  782.     inu(t1h);
  783.     if (t1h<0) or (t1h>23) then t1h:=0;
  784.     prompt('  Minute : ');
  785.     inu(t1m);
  786.     if (t1m<0) or (t1m>59) then t1m:=0;
  787.     nl;
  788.     print('Download off time:');
  789.     prompt('  Hour   : ');
  790.     inu(t2h);
  791.     if (t2h<0) or (t2h>23) then t2h:=0;
  792.     prompt('  Minute : ');
  793.     inu(t2m);
  794.     if (t2m<0) or (t2m>59) then t2m:=0;
  795.     t1:=t1h*60+t1m;
  796.     t2:=t2h*60+t2m;
  797.     nl;nl;
  798.     print('Hours: '+tch(cstr(t1h))+':'+tch(cstr(t1m))+' to '+
  799.             tch(cstr(t2h))+':'+tch(cstr(t2m)));
  800.     nl;
  801.     prompt('Is this what you want? ');
  802.     if yn then begin
  803.       systat.dllowtime:=t1;
  804.       systat.dlhitime:=t2;
  805.     end;
  806.   end else begin
  807.     systat.dllowtime:=0;
  808.     systat.dlhitime:=0;
  809.     end;
  810. end;
  811.  
  812.   procedure ch300;
  813. var i1,i2:astr; t1,t2,t1h,t1m,t2h,t2m:integer;
  814. begin
  815.   nl;
  816.   prompt('Do you want to declare 300 baud hours? ');
  817.   if yn then begin
  818.     nl;
  819.     print('All entries 24 hour time.  Hour: (0-23), Minute: (0-59)');
  820.     print('300 baud allowed time:');
  821.     prompt('  Hour   : ');
  822.     inu(t1h);
  823.     if (t1h<0) or (t1h>23) then t1h:=0;
  824.     prompt('  Minute : ');
  825.     inu(t1m);
  826.     if (t1m<0) or (t1m>59) then t1m:=0;
  827.     nl;
  828.     print('300 baud allowed off time:');
  829.     prompt('  Hour   : ');
  830.     inu(t2h);
  831.     if (t2h<0) or (t2h>23) then t2h:=0;
  832.     prompt('  Minute : ');
  833.     inu(t2m);
  834.     if (t2m<0) or (t2m>59) then t2m:=0;
  835.     t1:=t1h*60+t1m;
  836.     t2:=t2h*60+t2m;
  837.     nl;nl;
  838.     print('Hours: '+tch(cstr(t1h))+':'+tch(cstr(t1m))+' to '+
  839.             tch(cstr(t2h))+':'+tch(cstr(t2m)));
  840.     nl;
  841.     prompt('Is this what you want? ');
  842.     if yn then begin
  843.       systat.b300lowtime:=t1;
  844.       systat.b300hitime:=t2;
  845.     end;
  846.   end else begin
  847.     systat.b300lowtime:=0;
  848.     systat.b300hitime:=0;
  849.     end;
  850. end;
  851.  
  852.  
  853.   PROCEDURE CHSTH;
  854. VAR I:astr;
  855.   BEGIN
  856.     PRINT('Enter new engage chat string');
  857.     mpl(79); inputl(i,79);
  858.     prompt('Is this what you want? ');
  859.     if yn then systat.engage:=i;
  860.   end;
  861.  
  862.   procedure chsti;
  863. var i:astr;
  864.   begin
  865.     print('Enter new end chat string');
  866.     mpl(79); inputl(i,79);
  867.     prompt('Is this what you want? ');
  868.     if yn then systat.endchat:=i;
  869.   end;
  870.  
  871.   procedure chstj;
  872. begin
  873.   prompt('Do you want to allow handles? ');
  874.   if yn then systat.alias:=true else systat.alias:=false;
  875. end;
  876.  
  877.   procedure chstk;
  878. var i:astr;
  879. begin
  880.   prompt('Please enter new echo character: ');
  881.   mpl(1);inputl(i,1);
  882.   nl;prompt('Is this what you want? ');
  883.   if yn then systat.echoc:=i[1];
  884. end;
  885.  
  886.   procedure chstl;
  887. var i:astr;
  888. begin
  889.   print('Please enter new sysop in string');
  890.   mpl(79); inputl(i,79);
  891.   prompt('Is this what you want? ');
  892.   if yn then systat.sysopin:=i;
  893. end;
  894.  
  895.   procedure chstm;
  896. var i:astr;
  897. begin
  898.   print('Please enter new sysop OUT string');
  899.   mpl(79); inputl(i,79);
  900.   prompt('Is this what you want? ');
  901.   if yn then systat.sysopout:=i;
  902. end;
  903.  
  904.   procedure chstn;
  905. var i,ii:astr;
  906. begin
  907.   print('Please enter new log on note.  You may have 2 lines.');
  908.   mpl(79); inputl(i,79);
  909.   mpl(79); inputl(ii,79);
  910.   prompt('Is this what you want? ');
  911.   if yn then begin systat.note[1]:=i; systat.note[2]:=ii; end;
  912. end;
  913.  
  914.   procedure chsto;
  915. var i:astr;
  916. begin
  917.   print('Please enter new log on PROMPT.');
  918.   mpl(40); inputl(i,40);
  919.   prompt('Is this want you want? ');
  920.   if yn then systat.lprompt:=i;
  921. end;
  922.  
  923.   procedure chstp;
  924. begin
  925.   prompt('Do you want to have ANSI logons? ');
  926.   if yn then systat.lansi:=true else systat.lansi:=false;
  927. end;
  928.  
  929.   procedure chstq;
  930. var i:astr;
  931. begin
  932.   cl(8);prompt('WARNING: '); cl(3); print('You should only change this if your modem is');
  933.   cl(3);print('incompatible with HAYES.'); print(' ');
  934.   prompt('Do you want to change this? ');
  935.   if yn then begin
  936.     print('Enter new modem init');
  937.     mpl(79); inputl(i,79);
  938.     prompt('Are you sure? ');
  939.     if yn then systat.init:=i
  940.   end;
  941. end;
  942.  
  943.   PROCEDURE CHSTR;
  944. VAR I:astr;
  945. BEGIN
  946.   cl(3);print('Enter new sysop working string.');
  947.   mpl(79);inputl(i,79);
  948.   prompt('Is this what you want? ');
  949.   if yn then systat.wait:=i;
  950. end;
  951.  
  952.   PROCEDURE CHSTS;
  953. BEGIN
  954.   PRINT('Do you want to have new users email you? ');
  955.   if yn then systat.app:=true else systat.app:=false;
  956. end;
  957.  
  958. procedure chstt;
  959. begin
  960.   print('Do you want to use last 4 digits of ph# as 2nd pw? ');
  961.   if yn then systat.fone:=true else systat.fone:=false;
  962. end;
  963.  
  964. procedure changestuff;
  965. var i,i1:astr; c:char; b1,b2:boolean; c1,c2,c3:integer; abort,next:boolean; cc:integer;
  966.  
  967.   procedure pomodem;
  968.   var done:boolean; s:astr;
  969.   begin
  970.     done:=false;
  971.     repeat
  972.       cls;
  973.       cl(5); print('Modem Configuration');
  974.       nl;
  975.       print('A) Modem Init String     : '+systat.init);
  976.       print('B) Modem Baud Rate       : '+cstr(systat.maxbaud));
  977.       print('C) COM Port number       : '+cstr(systat.comport));
  978.       print('D) Send Carrier String   : '+systat.answer);
  979.       print('E) Hangup Phone String   : '+systat.hangup);
  980.       print('F) 300  Bps Result Code  : '+cstr(systat.result300));
  981.       print('G) 1200 Bps Result Code  : '+cstr(systat.result1200));
  982.       print('H) 2400 Bps Result Code  : '+cstr(systat.result2400));
  983.       print('I) 4800 Bps Result Code  : '+cstr(systat.result4800));
  984.       print('J) 9600 Bps Result Code  : '+cstr(systat.result9600));
  985.       print('K) No Carrier Result Code: '+cstr(systat.nocarrier));
  986.       nl;
  987.       prt('Selection (A-K,Q=quit) : ');
  988.       onek(c,'ABCDEFGHIJKQ');
  989.       case c of
  990.         'A':chstq;
  991.         'B':chste;
  992.         'C':chstd;
  993.         'D':begin
  994.               print('Enter modem command string used to send a carrier');
  995.               prt(':');mpl(40);input(s,40); if s<>'' then systat.answer:=s;
  996.             end;
  997.         'E':begin
  998.               print('Enter string used to drop carrier');
  999.               prt(':');mpl(40);input(s,40); if s<>'' then systat.hangup:=s;
  1000.             end;
  1001.         'F':begin
  1002.               print('Enter result code number returned when 300 baud connects');
  1003.               prt(':');mpl(5);input(s,5); if s<>'' then systat.result300:=value(s);
  1004.             end;
  1005.          'G':begin
  1006.                print('Enter result code number returned when 1200 baud connects');
  1007.                prt(':');mpl(5);input(s,5); if s<>'' then systat.result1200:=value(s);
  1008.              end;
  1009.           'H':begin
  1010.                 print('Enter result code number returned when 2400 baud connects');
  1011.                 prt(':');mpl(5);input(s,5); if s<>'' then systat.result2400:=value(s);
  1012.               end;
  1013.           'I':begin
  1014.                 print('Enter result code number returned when 4800 baud connects');
  1015.                 prt(':');mpl(5);input(s,5); if s<>'' then systat.result4800:=value(s);
  1016.               end;
  1017.           'J':begin
  1018.                 print('Enter result code number returned when 9600 baud connects');
  1019.                 prt(':');mpl(5);input(s,5); if s<>'' then systat.result9600:=value(s);
  1020.               end;
  1021.           'K':begin
  1022.                 print('Enter result code number returned when there is no carrier');
  1023.                 prt(':');mpl(5);input(s,5); if s<>'' then systat.nocarrier:=value(s);
  1024.               end;
  1025.         'Q':done:=true;
  1026.       end;
  1027.     until (done) or (hangup);
  1028.   end;
  1029.  
  1030.   procedure poauto;
  1031.   var done:boolean; s:astr; c:char; r:restrictions;
  1032.   begin
  1033.     done:=false;
  1034.     repeat
  1035.       cls;
  1036.       cl(5); print('Auto Validation Command');
  1037.       nl;
  1038.       print('A) Security Level      : '+cstr(systat.autosl));
  1039.       print('B) D/L Security        : '+cstr(systat.autodsl));
  1040.       prompt('C) AR Flags            : ');
  1041.       for c:='A' to 'G' do
  1042.         if (c in systat.autoar) then prompt(c) else prompt('-');
  1043.       nl;
  1044.       prompt('D) Access Restrictions : ');
  1045.       for r:=rlogon to rmsg do
  1046.         if r in systat.autoac then prompt(copy('LCVBA*PEKM',ORD(R)+1,1)) else prompt('-');
  1047.       nl;
  1048.       nl;
  1049.       prt('Enter selection (A-D, Q=quit) :'); cl(9);
  1050.       onek(c,'ABCDQ');
  1051.       case c of
  1052.         'A':begin
  1053.               print('Enter SL given to a validated user.');
  1054.               prt(':');mpl(3);input(s,3);if s<>'' then systat.autosl:=value(s);
  1055.             end;
  1056.         'B':begin
  1057.               print('Enter DSL given to a validated user');
  1058.               prt(':');mpl(3);input(s,3);if s<>'' then systat.autodsl:=value(s);
  1059.             end;
  1060.         'C':begin
  1061.               prompt('Toggle AR Flag (A-G)? '); onek(c,#13'ABCDEFG'); c:=upcase(c);
  1062.               if c in ['A'..'G'] then if c in systat.autoar then systat.autoar:=systat.autoar-[c]
  1063.                 else systat.autoar:=systat.autoar+[c];
  1064.             end;
  1065.         'D':begin
  1066.               print('LCVBA*PEKM');
  1067.               nl;prompt('Which? ');onek(c,'LCVBA*PEKM'+#13); c:=upcase(c); print(c); nl;
  1068.               if c<>#13 then autoacch(c,systat);
  1069.             end;
  1070.         'Q':done:=true;
  1071.       end;
  1072.     until (done) or (hangup);
  1073.   end;
  1074.  
  1075.   procedure ponew;
  1076.   var done:boolean; s:astr; c:char; r:restrictions;
  1077.   begin
  1078.     done:=false;
  1079.     repeat
  1080.       cls;
  1081.       cl(5); print('New User Configuration');
  1082.       nl;
  1083.       print('A) Security Level      : '+cstr(systat.newsl));
  1084.       print('B) D/L Security        : '+cstr(systat.newdsl));
  1085.       prompt('C) AR Flags            : ');
  1086.       for c:='A' to 'G' do
  1087.         if (c in systat.newar) then prompt(c) else prompt('-');
  1088.       nl;
  1089.       prompt('D) Access Restrictions : ');
  1090.       for r:=rlogon to rmsg do
  1091.         if r in systat.newac then prompt(copy('LCVBA*PEKM',ORD(R)+1,1)) else prompt('-');
  1092.       nl;
  1093.       print('E) New File Points     : '+cstr(systat.newfp));
  1094.       nl;
  1095.       prt('Enter selection (A-E, Q=quit) :'); cl(9);
  1096.       onek(c,'ABCDEQ');
  1097.       case c of
  1098.         'A':begin
  1099.               print('Enter SL given to a new user');
  1100.               prt(':');mpl(3);input(s,3);if s<>'' then systat.newsl:=value(s);
  1101.             end;
  1102.         'B':begin
  1103.               print('Enter DSL given to a new user');
  1104.               prt(':');mpl(3);input(s,3);if s<>'' then systat.newdsl:=value(s);
  1105.             end;
  1106.         'C':begin
  1107.               prompt('Toggle AR Flag (A-G)? '); onek(c,#13'ABCDEFG'); c:=upcase(c);
  1108.               if c in ['A'..'G'] then if c in systat.newar then systat.newar:=systat.newar-[c]
  1109.                 else systat.newar:=systat.newar+[c];
  1110.             end;
  1111.         'D':begin
  1112.               print('LCVBA*PEKM');
  1113.               nl;prompt('Which? ');onek(c,'LCVBA*PEKM'+#13); c:=upcase(c); print(c); nl;
  1114.               if c<>#13 then zacch(c,systat);
  1115.             end;
  1116.         'E':begin
  1117.               print('Enter File Points granted to new users');
  1118.               prt(':');mpl(2);input(s,2);if s<>'' then systat.newfp:=value(s);
  1119.             end;
  1120.         'Q':done:=true;
  1121.       end;
  1122.     until (done) or (hangup);
  1123.   end;
  1124.  
  1125.   procedure postring;
  1126.   var done:boolean; s:astr;
  1127.   begin
  1128.     done:=false;
  1129.     repeat
  1130.       cls;
  1131.       cl(5); print('Text Configuration');
  1132.       nl;
  1133.       print('A) Engage chat string : '+systat.engage);
  1134.       print('B) Exit chat string   : '+systat.endchat);
  1135.       print('C) Echo character     : '+systat.echoc);
  1136.       print('D) Sysop IN string    : '+systat.sysopin);
  1137.       print('E) Sysop OUT string   : '+systat.sysopout);
  1138.       print('F) Logon note #1      : '+systat.note[1]);
  1139.       print('   Logon note #2      : '+systat.note[2]);
  1140.       print('G) Logon prompt       : '+systat.lprompt);
  1141.       print('H) Sysop working str  : '+systat.wait);
  1142.       print('I) Pause screen       : '+systat.pause);
  1143.       print('J) Ansi Logon question: '+systat.ansiq);
  1144.       nl;
  1145.       prt('Enter selection (A-J, Q=quit) :'); cl(9);
  1146.       onek(c,'ABCDEFGHIJQ');
  1147.       case c of
  1148.         'A':chsth;
  1149.         'B':chsti;
  1150.         'C':chstk;
  1151.         'D':chstl;
  1152.         'E':chstm;
  1153.         'F':chstn;
  1154.         'G':chsto;
  1155.         'H':chstr;
  1156.         'I':begin
  1157.               print('Enter new pause string');
  1158.               mpl(79);inputl(s,79);if s<>'' then systat.pause:=s;
  1159.             end;
  1160.         'J':begin
  1161.               print('Enter new ansi logon question or <CR> for same.');
  1162.               mpl(79);inputl(s,79);if s<>'' then systat.ansiq:=s;
  1163.             end;
  1164.         'Q':done:=true;
  1165.       end;
  1166.     until (done) or (hangup);
  1167.   end;
  1168.  
  1169.   procedure pofile;
  1170.   var done:boolean; s:astr;
  1171.   begin
  1172.   done:=false;
  1173.   repeat
  1174.     cls;
  1175.     cl(5); print('File Paths & BBS Configuration');
  1176.     nl;
  1177.     print('A) System password     : '+systat.sysoppw);
  1178.     print('B) Newuser password    : '+systat.boardpw);
  1179.     print('C) Gfiles drive & path : '+systat.gfilepath);
  1180.     print('D) Message drive & path: '+systat.msgpath);
  1181.     print('E) Menu data drive+path: '+systat.menupath);
  1182.     print('F) BBS Name            : '+systat.bbsname);
  1183.     print('G) Sysop First Name    : '+systat.sysopfirst);
  1184.     print('H) Sysop Last Name     : '+systat.sysoplast);
  1185.     print('I) BBS Phone Number    : '+systat.bbsphone);
  1186.     print('J) Max lines in msg    : '+cstr(systat.maxlines));
  1187.     print('K) Sysop Color in Chat : '+cstr(systat.sysopcolor));
  1188.     print('L) User Color in Chat  : '+cstr(systat.usercolor));
  1189.     prompt('M) Special Effects     : '); if systat.special then print('Yes') else print('No');
  1190.     prompt('O) BBS Password        : '); if systat.bbspw='' then print('None') else print(systat.bbspw);
  1191.     prompt('P) Matrix Logon        : '); if systat.matrix then print('Yes') else print('No');
  1192.     nl;
  1193.     prt('Enter selection (A-M,Q=quit) :'); cl(9);
  1194.     onek(c,'ABCDEFGHIJKLMOPQ');
  1195.     case c of
  1196.       'A':chsta;
  1197.       'B':chstb;
  1198.       'C':begin
  1199.             nl;
  1200.             print('Enter new gfiles path where data files are to be stored');
  1201.             print('<CR>=no change.');
  1202.             mpl(79);input(s,79);
  1203.             if s<>'' then systat.gfilepath:=s;
  1204.           end;
  1205.       'D':begin
  1206.             nl;
  1207.             print('Enter new message drive:\path  <CR>=no change');
  1208.             mpl(79);input(s,79);if s<>'' then systat.msgpath:=s;
  1209.           end;
  1210.        'E':begin
  1211.              nl;
  1212.              print('Enter new menu data drive:\path  <CR>=no change');
  1213.              mpl(79);input(s,79);if s<>'' then systat.menupath:=s;
  1214.            end;
  1215.        'F':begin
  1216.              nl;
  1217.              print('Enter new BBS name, or <CR> for no change.');
  1218.              prt(':');mpl(40);inputl(s,40);if s<>'' then systat.bbsname:=s;
  1219.            end;
  1220.        'G':begin
  1221.              nl;
  1222.              print('Enter Sysop''s first name, or <CR> for no change.');
  1223.              prt(':');mpl(12);inputl(s,12);if s<>'' then systat.sysopfirst:=s;
  1224.            end;
  1225.        'H':begin
  1226.              nl;
  1227.              print('Enter Sysop''s last name, or <CR> for no change.');
  1228.              prt(':');mpl(12);inputl(s,16);if s<>'' then systat.sysoplast:=s;
  1229.            end;
  1230.        'I':begin
  1231.              nl;
  1232.              print('Enter new BBS Phone number in the following format');
  1233.              print('or <CR> for no change.');
  1234.              print(' XXX-XXX-XXXX');
  1235.              prt(':');mpl(12);input(s,12);if s<>'' then systat.bbsphone:=s;
  1236.            end;
  1237.        'J':begin
  1238.              print('Enter maximum amount of lines allowed in a message (10-120):');
  1239.              mpl(3);input(s,3); if (s<>'') and (value(s)>9) and (value(s)<121)
  1240.                then systat.maxlines:=value(S);
  1241.            end;
  1242.        'K':begin
  1243.              print('Enter numeric color value for the SysOp typing color:');
  1244.              mpl(1);input(s,1);if s<>'' then systat.sysopcolor:=value(s);
  1245.            end;
  1246.        'L':begin
  1247.              print('Enter numeric color value for the User typing color:');
  1248.              mpl(1);input(s,1);if s<>'' then systat.usercolor:=value(s);
  1249.            end;
  1250.        'M':begin
  1251.              print('Do you want opening screen special effects? ');
  1252.              if yn then systat.special:=true else systat.special:=false;
  1253.            end;
  1254.        'O':Begin
  1255.              print('Current BBS password is "'+systat.bbspw+'".  Enter new BBS password.');
  1256.              prt(':');mpl(20);
  1257.              input(s,20); systat.bbspw:=s;
  1258.            end;
  1259.        'P':begin
  1260.              prt('Do you want Telegard to have a Matrix Logon? ');
  1261.              if yn then systat.matrix:=true else systat.matrix:=false;
  1262.            end;
  1263.        'Q':done:=true;
  1264.      end;
  1265.    until (done) or (hangup);
  1266.   end;
  1267.  
  1268.   procedure poflag;
  1269.   var done:boolean; s:astr;
  1270.   begin
  1271.     done:=false;
  1272.     repeat
  1273.       cls;
  1274.       cl(5); print('General Flags & SL Configuration'); nl;
  1275.       prompt('A) System Status : ');
  1276.       if systat.closedsystem then print('Closed') else print('Open');
  1277.       prompt('B) Sysop hours   : ');
  1278.       if systat.lowtime=systat.hitime then
  1279.        print('None')
  1280.       else
  1281.        with systat do
  1282.          print(tch(cstr(lowtime div 60))+':'+tch(cstr(lowtime mod 60))+' to '+
  1283.                 tch(cstr(hitime div 60))+':'+tch(cstr(hitime mod 60)));
  1284.       prompt('C) Allow handles : ');if systat.alias then print('Yes') else print('No');
  1285.       prompt('D) ANSI Logons   : ');if systat.lansi then print('Yes') else print('No');
  1286.       prompt('E) Newuser App RQ: ');if systat.app then print('Yes') else print('No');
  1287.       prompt('F) Phone # pw    : ');if systat.fone then print('Yes') else print('No');
  1288.       prompt('G) Multitasking  : ');if systat.multitask then print('Yes') else print('No');
  1289.       print('H) Bkspace delay : '+cstr(systat.bsdelay));
  1290.       prompt('I) 300 Baud hours: ');
  1291.       if systat.b300lowtime=systat.b300hitime then
  1292.        print('Always allowed')
  1293.       else
  1294.        with systat do
  1295.          print(tch(cstr(b300lowtime div 60))+':'+tch(cstr(b300lowtime mod 60))+' to '+
  1296.                 tch(cstr(b300hitime div 60))+':'+tch(cstr(b300hitime mod 60)));
  1297.       prompt('J) 300 d/l hours : ');
  1298.       if systat.b300dllowtime=systat.b300dlhitime then
  1299.        print('Always allowed')
  1300.       else
  1301.        with systat do
  1302.          print(tch(cstr(b300dllowtime div 60))+':'+tch(cstr(b300dllowtime mod 60))+' to '+
  1303.                 tch(cstr(b300dlhitime div 60))+':'+tch(cstr(b300dlhitime mod 60)));
  1304.       prompt('K) reg d/l hours : ');
  1305.       if systat.dllowtime=systat.dlhitime then
  1306.        print('Always allowed')
  1307.       else
  1308.        with systat do
  1309.          print(tch(cstr(dllowtime div 60))+':'+tch(cstr(dllowtime mod 60))+' to '+
  1310.                 tch(cstr(dlhitime div 60))+':'+tch(cstr(dlhitime mod 60)));
  1311.       prompt('L) Lock out 300  : '); if systat.lock300 then print('Yes') else print('No');
  1312.       print('M) # of tries    : '+cstr(systat.tries));
  1313. {      prompt('O) Quote of Day  : '); if systat.wantquote then print('Yes') else print('No');}
  1314.       prompt('O) Message Cls   : '); if systat.clearmsg then print('Yes') else print('No');
  1315.       nl;
  1316.       prt('Enter selection (A-O,Q=quit) :'); cl(9);
  1317.       onek(c,'ABCDEFGHIJKLMOQ');
  1318.       case c of
  1319.         'A':chstc;
  1320.         'B':chstg;
  1321.         'C':chstj;
  1322.         'D':chstp;
  1323.         'E':chsts;
  1324.         'F':chstt;
  1325.         'G':begin
  1326.               nl;
  1327.               print('Is this system under multitasking environment? ');
  1328.               if yn then systat.multitask:=true else systat.multitask:=false;
  1329.             end;
  1330.         'H':begin
  1331.               nl;
  1332.               prompt('Enter new backspace delay (1-255)');
  1333.               prt(':');mpl(3);input(s,3);if s<>'' then systat.bsdelay:=value(s);
  1334.             end;
  1335.         'I':ch300;
  1336.         'J':ch300dl;
  1337.         'K':chdl;
  1338.         'L':begin
  1339.               print('When 300 baud callers are locked out, Telegard will print');
  1340.               print(systat.gfilepath+'NO300.MSG when 300 baud is connected.'); nl;
  1341.               ynq('Would you like to lock-out 300 baud callers? ');
  1342.               if yn then systat.lock300:=true else systat.lock300:=false;
  1343.             end;
  1344.         'M':begin
  1345.               prompt('Enter new # of tries allowed (1-255):');
  1346.               prt(':');mpl(3);input(s,3);if s<>'' then systat.tries:=value(s);
  1347.             end;
  1348. {        'O':begin
  1349.               cl(9);print('Do you want Telegard to display Quote of the Day');
  1350.               ynq('At logon? ');if yn then systat.wantquote:=true else systat.wantquote:=false;
  1351.             end;}
  1352.         'O':begin
  1353.               cl(9);print('Do you want Telegard to clear the screen before a message');
  1354.               ynq('is printed? '); if yn then systat.clearmsg:=true else systat.clearmsg:=false;
  1355.             end;
  1356.         'Q':done:=true;
  1357.        end;
  1358.      until (done) or (hangup);
  1359.    end;
  1360.  
  1361. var done:boolean;
  1362. begin
  1363.   if checkpw then begin
  1364.     repeat
  1365.       done:=false;
  1366.       abort:=false;
  1367.       cls;
  1368.       cl(5);
  1369.       print('System Configuration:');
  1370.       nl;
  1371.       print('A) Modem Configuration');
  1372.       print('B) String Configuration');
  1373.       print('C) File Paths & BBS Configuration');
  1374.       print('D) General Flags & SL settings');
  1375.       print('E) New User Configuration');
  1376.       print('F) Auto Validation Command');
  1377.       nl;
  1378.       prt('Enter selection (A-F, Q=quit) :'); cl(9);
  1379.       onek(c,'ABCDEFQ');
  1380.       case c of
  1381.         'A':pomodem;
  1382.         'B':postring;
  1383.         'C':pofile;
  1384.         'D':poflag;
  1385.         'E':ponew;
  1386.         'F':poauto;
  1387.         'Q':done:=true;
  1388.       end;
  1389.    until (done) or (hangup);
  1390.   savesystat;
  1391.   end;
  1392. end;
  1393.  
  1394. END.