home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / SYSPC22.ZIP / CHATSTUF.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-02-17  |  10.5 KB  |  442 lines

  1. function specialcommand:boolean;
  2.  
  3.   overlay procedure getnewtime;
  4.   var q:sstr;
  5.       n:integer;
  6.   begin
  7.     n:=timeleft;
  8.     writeln (usr,'The user has ',n,' minutes left.');
  9.     write (usr,'New time left for today? ');
  10.     readline (q);
  11.     if length(q)>0 then begin
  12.       urec.timetoday:=urec.timetoday+(valu(q)-n);
  13.       writeurec;
  14.       writeln ('You have been granted ',timeleft,' minutes for today.')
  15.     end
  16.   end;
  17.  
  18.   overlay procedure getnewlevel;
  19.   var q:sstr;
  20.       n:integer;
  21.   begin
  22.     writeln (usr,'Current level: ',ulvl);
  23.     write (usr,'New level [-1 to trash]: ');
  24.     readline (q);
  25.     if length (q)>0 then begin
  26.      n:=valu(q);
  27.      ulvl:=n;
  28.      urec.level:=n;
  29.      writeurec;
  30.      writeln ('*> New Access Level :',n,' <*');
  31.      if n=-1 then writeln ('*> User Locked Out <*')
  32.     end
  33.   end;
  34.  
  35.   overlay procedure getnewgflvl;
  36.   var q:sstr;
  37.       n:integer;
  38.   begin
  39.     writeln (usr,'Current Gfile level: ',urec.gflvl);
  40.     write (usr,'New level: ');
  41.     readline (q);
  42.     if length (q)>0 then begin
  43.      n:=valu(q);
  44.      urec.gflvl:=n;
  45.      writeurec;
  46.      writeln ('*> New G-File Level :',n,' <*');
  47.     end
  48.   end;
  49.  
  50.   overlay procedure getnewaccess;
  51.   var q,bname:sstr;
  52.       bn:integer;
  53.       ac:accesstype;
  54.       wasopen:boolean;
  55.       k:char;
  56.  
  57.     function inputaccess (q:sstr):accesstype;
  58.     begin
  59.       inputaccess:=invalid;
  60.       if length(q)=0 then exit;
  61.       case upcase(q[1]) of
  62.         'L':inputaccess:=letin;
  63.         'B':inputaccess:=bylevel;
  64.         'K':inputaccess:=keepout
  65.       end
  66.     end;
  67.  
  68.   procedure getallaccess;
  69.  
  70.       procedure setallaccess (ac:accesstype);
  71.       var cnt:integer;
  72.       begin
  73.         setalluserflags (urec,ac);
  74.         writeln ('*> Access to all sub-boards: ',accessstr[ac],' <*');
  75.         writeurec
  76.       end;
  77.  
  78.     begin
  79.       write (usr,'Grant ALL access ([B]y level, [L]et in, [K]eep out, or CR): ');
  80.       readline (q);
  81.       ac:=inputaccess(q);
  82.       if ac<>invalid then setallaccess(ac)
  83.     end;
  84.  
  85.   var bd:boardrec;
  86.   begin
  87.     write (usr,'Which board for which to change access [*=all]: ');
  88.     readline (bname);
  89.     if length(bname)=0 then exit;
  90.     if bname='*' then
  91.       begin
  92.         getallaccess;
  93.         exit
  94.       end;
  95.     opentempbdfile;
  96.     bn:=searchboard(bname);
  97.     if bn=-1 then
  98.       begin
  99.         closetempbdfile;
  100.         writeln (usr,'No such board!  Press any key..');
  101.         k:=bioskey;
  102.         exit
  103.       end;
  104.     writeln (usr,'Board ',bname,'... Current access: ',
  105.       accessstr[getuseraccflag(urec,bn)]);
  106.     write (usr,'Grant access ([B]y level, [L]et in, [K]eep out, or CR: ');
  107.     readline (q);
  108.     ac:=inputaccess(q);
  109.     if ac=invalid then begin
  110.       closetempbdfile;
  111.       exit
  112.     end;
  113.     setuseraccflag (urec,bn,ac);
  114.     writeurec;
  115.     closetempbdfile;
  116.     writeln ('*> Access for board ',bname,': ',accessstr[ac],' <*')
  117.   end;
  118.  
  119.  overlay procedure finger;
  120.   begin
  121.     if exist (textfiledir+'Finger') then printfile (textfiledir+'Finger');
  122.     disconnect;
  123.   end;
  124.  
  125.   overlay procedure hangupyn;
  126.   var q:sstr;
  127.   begin
  128.     write (usr,'Hang up on him (Y/N)? ');
  129.     readline (q);
  130.     if length(q)>0 then if upcase(q[1])='Y' then
  131.       begin
  132.         write('▄ƒ╗ªfô}¿█┐J¥£┌▐ΓΣR┐*>');
  133.         delay(1500);
  134.         write('#α┘┌(▀·■⌡≈°╔φτ▄α▌█');
  135.         delay(500);
  136.         write('°╔φτ▄α▌╫É~?');
  137.         delay(1000);
  138.         write('#α┘┌(▀·■⌡≈°╔Z|²∙≈ⁿ÷φ∙');
  139.         delay(800);
  140.         write('▄ƒ╗ªfô}¿█┐J¥£┌▐ΓΣR┐*>');
  141.         delay(1500);
  142.         write('#α┘┌(▀·■⌡≈°╔φτ▄α▌█');
  143.         delay(500);
  144.         hangup;
  145.         disconnect;
  146.         specialcommand:=true
  147.       end
  148.   end;
  149.  
  150.   overlay procedure getnewname;
  151.   var m:mstr;
  152.       n:integer;
  153.       t:string[1];
  154.   begin
  155.     writeln (usr,'Current name: ',unam);
  156.     write (usr,'New name: ');
  157.     readline (m);
  158.     if length(m)<>0 then begin
  159.       if not validuname(m) then begin
  160.         writeln (usr,'Invalid name!');
  161.         exit
  162.       end;
  163.       n:=lookupuser(m);
  164.       if n<>0 then begin
  165.         write (usr,'Name already exists!  Are you sure? ');
  166.         buflen:=1;
  167.         readline (t);
  168.         if upcase(t[1])<>'Y' then exit
  169.       end;
  170.       unam:=m;
  171.       urec.handle:=m;
  172.       writeurec;
  173.       writeln ('Your name is changed to ',unam,'.')
  174.     end
  175.   end;
  176.  
  177.   overlay procedure exitdos;
  178.     begin
  179.      clrscr;
  180.      Write ('*>Sysop in Dos...Wait');
  181.  
  182.      dos_shell ('*');
  183.      Write (^H^H^H^H'Thank You! <*');
  184.     end;
  185.  
  186.   overlay procedure getnewpassword;
  187.   var m:mstr;
  188.   begin
  189.     writeln (usr,'Current password: ',urec.password);
  190.     write (usr,'New password: ');
  191.     readline (m);
  192.     if length(m)<>0 then begin
  193.       urec.password:=m;
  194.       writeurec;
  195.       writeln ('*> Password Changed <*')
  196.     end
  197.   end;
  198.  
  199.   overlay procedure getnewud;
  200.   var m:mstr;
  201.  
  202.     procedure getnewud1 (var i:integer; q:sstr);
  203.     begin
  204.       if length(m)>1
  205.         then i:=valu(copy(m,2,255))
  206.         else begin
  207.           writeln (usr,'New file transfer '+q+'? ');
  208.           readline (m);
  209.           if length(m)=0
  210.             then exit
  211.             else i:=valu(m)
  212.         end;
  213.       writeln ('*> New file transfer ',q,': ',i,' <*');
  214.       writeurec
  215.     end;
  216.  
  217.   begin
  218.     writeln (usr,'Current upload L)evel:  ',urec.udlevel);
  219.     writeln (usr,'Current upload P)oints: ',urec.udpoints);
  220.     write (usr,'Enter L, P, or CR for neither: ');
  221.     readline (m);
  222.     if length(m)>0 then begin
  223.       case upcase(m[1]) of
  224.         'L':getnewud1 (urec.udlevel,'level');
  225.         'P':getnewud1 (urec.udpoints,'points')
  226.       end
  227.     end
  228.   end;
  229.  
  230.   overlay procedure snoopmode;
  231.   begin
  232.     writeln (usr,'All I/O to the modem is locked.');
  233.     modeminlock:=true;
  234.     setoutlock (true)
  235.   end;
  236.  
  237.   overlay procedure unsnoop;
  238.   begin
  239.     writeln (usr,'I/O to the modem is re-enabled.');
  240.     modeminlock:=false;
  241.     setoutlock (false)
  242.   end;
  243.  
  244.   overlay procedure getsysopaccess;
  245.   const sysopstr:array [false..true] of string[6]=('Normal','Sysop');
  246.         sectionnames:array [udsysop..databasesysop] of string[20]=
  247.           ('File transfer','Bulletin section','Voting booths',
  248.            'E-mail section','Doors','Main menu','Databases');
  249.   var cnt:configtype;
  250.       x:string[10];
  251.       n,mx:integer;
  252.       v:boolean;
  253.   begin
  254.     repeat
  255.       clrscr;
  256.       mx:=1;
  257.       for cnt:=udsysop to databasesysop do begin
  258.         write (usr,mx:3,'. ',sectionnames[cnt]);
  259.         mx:=mx+1;
  260.         gotoxy (25,wherey);
  261.         writeln (usr,sysopstr[cnt in urec.config])
  262.       end;
  263.       write (usr,^M^J'Number to toggle [CR to exit]: ');
  264.       buflen:=1;
  265.       readline (x);
  266.       n:=valu(x);
  267.       v:=(n>0) and (n<mx);
  268.       if v then begin
  269.         cnt:=configtype(ord(udsysop)+n-1);
  270.         if cnt in urec.config
  271.           then
  272.             begin
  273.               urec.config:=urec.config-[cnt];
  274.               x:='denied'
  275.             end
  276.           else
  277.             begin
  278.               urec.config:=urec.config+[cnt];
  279.               x:='granted'
  280.             end;
  281.         writeln ('*> Sysop Priveleges for ',sectionnames[cnt],': ',x,' <*');
  282.  
  283.       end
  284.     until not v;
  285.     writeurec
  286.   end;
  287.  
  288. var scom:sstr;
  289.     k:char;
  290. begin
  291.   writeln (^B^M'*> Please Wait <*');
  292.   splitscreen (12);
  293.   top;
  294.   clrscr;
  295.   specialcommand:=false;
  296.   writeln (usr,'Special commands:');
  297.   writeln (usr,'N)ame, P)assword, L)evel, T)ime left, B)oard access, H)ang up, D)Exit to DOS,');
  298.   writeln (usr,'U)UD section, G)G-file section, Y)Sysop access, S)noop, Z)unsnoop, Q)uit');
  299.   writeln (usr,'F)inger');
  300.   write (usr,'---> ');
  301.   readline (scom);
  302.   clearbreak;
  303.   k:=' ';
  304.   if length(scom)>0 then begin
  305.     k:=upcase(scom[1]);
  306.     case k of
  307.       'L':getnewlevel;
  308.       'B':getnewaccess;
  309.       'H':hangupyn;
  310.       'N':getnewname;
  311.       'P':getnewpassword;
  312.       'L':getnewlevel;
  313.       'T':getnewtime;
  314.       'U':getnewud;
  315.       'S':snoopmode;
  316.       'Z':unsnoop;
  317.       'Y':getsysopaccess;
  318.       'G':getnewgflvl;
  319.       'F':finger;
  320.       'D':exitdos;
  321.     end
  322.   end;
  323.   bottomline;
  324.   specialcommand:=k in ['Q','S','Z'];
  325.   unsplit
  326. end;
  327.  
  328. procedure specialseries;
  329. begin
  330.   repeat until specialcommand
  331. end;
  332.  
  333. procedure chat (* (gotospecial:boolean) (forward) *) ;
  334. var k:char;
  335.     cnt,displaywid:integer;
  336.     quit,carrierloss,fromkbd:boolean;
  337.     linebuffer:lstr;
  338.     l:byte absolute linebuffer;
  339.  
  340.   procedure instruct;
  341.   begin
  342.     splitscreen (3);
  343.     top;
  344.     clrscr;
  345.     write (usr,'Now in chat mode.  Press <F1> to leave or <F2> for commands.');
  346.     bottom
  347.   end;
  348.  
  349.   procedure wordwrap;
  350.   var cnt,wl:integer;
  351.       ww:lstr;
  352.   begin
  353.     ww:='';
  354.     cnt:=displaywid;
  355.     while (cnt>0) and (linebuffer[cnt]<>' ') do cnt:=cnt-1;
  356.     if cnt=0 then ww:=k else begin
  357.       ww:=copy(linebuffer,cnt+1,255);
  358.       wl:=length(ww)-1;
  359.       if wl>0 then begin
  360.         for cnt:=1 to wl do write (^H);
  361.         for cnt:=1 to wl do write (' ')
  362.       end
  363.     end;
  364.     writeln;
  365.     write (ww);
  366.     linebuffer:=ww
  367.   end;
  368.  
  369.   procedure typedchar (k:char);
  370.   begin
  371.     l:=l+1;
  372.     linebuffer[l]:=k;
  373.     if l=displaywid then wordwrap else write(k)
  374.   end;
  375.  
  376. begin
  377.   carrierloss:=false;
  378.   chatmode:=false;
  379.   writestr (^M);
  380.   if wanted in urec.config then begin
  381.     specialmsg ('(No longer wanted)');
  382.     urec.config:=urec.config-[wanted];
  383.     writeurec;
  384.   end;
  385.   if eightycols in urec.config then displaywid:=80 else displaywid:=40;
  386.   if length(chatreason)>0 then specialmsg ('(Chat reason: '+chatreason+')');
  387.   chatreason:='';
  388.   if gotospecial then begin
  389.     specialseries;
  390.     exit
  391.   end;
  392.   clearbreak;
  393.   nobreak:=true;
  394.   writeln (^M^M,sysopname,' is here.'^M);
  395.   instruct;
  396.   quit:=false;
  397.   l:=0;
  398.   repeat
  399.     linecount:=0;
  400.     if (not carrierloss) and (not carrier) then begin
  401.       carrierloss:=true;
  402.       writeln (^M'No one''s here to chat with!'^M)
  403.     end;
  404.     repeat until keyhit or (carrier and (numchars>0));
  405.     fromkbd:=keyhit;
  406.     ingetstr:=true;
  407.     k:=readchar;
  408.     if k=#127 then k:=#8;
  409.     if requestchat
  410.       then if requestcom
  411.         then
  412.           begin
  413.             quit:=specialcommand;
  414.             if not quit then instruct;
  415.             clearbreak;
  416.             nobreak:=true;
  417.             l:=0
  418.           end
  419.         else
  420.           begin
  421.             unsplit;
  422.             quit:=true
  423.           end;
  424.     case ord(k) of
  425.       8:if l>0 then begin
  426.           write (k+' '+k);
  427.           l:=l-1
  428.         end;
  429.       0:;
  430.       13:begin
  431.            writeln;
  432.            bottomline;
  433.            l:=0
  434.          end;
  435.       32..126:typedchar (k);
  436.       1..31:if fromkbd then write(k)
  437.     end
  438.   until quit;
  439.   clearbreak
  440. end;
  441.  
  442.