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

  1.  
  2. overlay procedure edituser (eunum:integer);
  3. var eurec:userrec;
  4.     ca:integer;
  5.     k:char;
  6. const sysopstr:array [false..true] of string[6]=('Normal','Sysop');
  7.       sectionnames:array [udsysop..databasesysop] of string[20]=
  8.         ('File transfer','Bulletin section','Voting booths',
  9.          'E-mail section','Doors','Main menu','Databases');
  10.  
  11.   procedure clearvote;
  12. var n,cnt:integer;
  13.     u:userrec;
  14.  
  15.  
  16.  
  17. {****  procedure comrem;
  18.    var
  19.    comfile:file of commentrec;
  20.    comstuf:commentrec;
  21.  
  22.   begin
  23.     assign (comfile,'comments');
  24.     if ioresult<>0 then exit;
  25.     for cnt:=1 to (filesize(comfile)+1) do begin
  26.     read (comfile,comstuf);
  27.     if comstuf.num=eunum then comstuf.num:=0;
  28.     write (comfile,comstuf);
  29.     end;
  30.     close (comfile);
  31.     end;  ****}
  32.  
  33.   procedure dorem;
  34.   begin
  35.    cnt:=0;
  36.    for cnt:=1 to 50 do begin
  37.    if u.didvote[cnt]=eunum then begin
  38.    u.didvote[cnt]:=0;
  39.    cnt:=50;
  40.    end;
  41.   end;
  42.   end;
  43.  
  44. begin
  45.   writeln ('*> Removing vote records <*');
  46. (*  comrem; *)
  47.   for n:=1 to numusers do begin
  48.     seek (ufile,n);
  49.     read (ufile,u);
  50.     if (u.level>=forvote) then dorem;
  51.     writeurec;
  52.     seek (ufile,n);
  53.     write (ufile,u);
  54.     readurec;
  55.   end;
  56.   end;
  57.  
  58.  
  59.   procedure truesysops;
  60.   begin
  61.     writeln ('Sorry, you may do that without true sysop access!');
  62.     writelog (18,17,'')
  63.   end;
  64.  
  65.   function truesysop:boolean;
  66.   begin
  67.     truesysop:=ulvl>=sysoplevel
  68.   end;
  69.  
  70.   procedure eustatus;
  71.   var cnt:integer;
  72.       k:char;
  73.       c:configtype;
  74.   begin
  75.     writehdr ('Status');
  76.     with eurec do begin
  77.       write (^M'Number:    '^S,eunum,
  78.              ^M'Name:      '^S,handle,
  79.              ^M'Phone #:   '^S,phonenum,
  80.              ^M'Pwd:       '^S);
  81.       if truesysop
  82.         then write (password)
  83.         else write ('Classified');
  84.       write (^M'Level:     '^S,level,
  85.              ^M'Last on:   '^S,londa,', at ',lonti,
  86.              ^M'Posts:     '^S,nbu,
  87.              ^M'G-File Section',
  88.              ^M'  Uploads: '^S,gfup,
  89.              ^M'  Dnloads: '^S,gfdown,
  90.              ^M'File xfer',
  91.              ^M'  Level:   '^S,udlevel,
  92.              ^M'  Points:  '^S,udpoints,
  93.              ^M'  Uploads: '^S,uploads,
  94.              ^M'  Dnloads: '^S,downloads,
  95.            ^M^M'Time on system:  '^S,totaltime:0:0,
  96.              ^M'Wanted:    '^S,yesno(wanted in config),
  97.              ^M'Number of calls: '^S,numon,
  98.              ^M'Voting record:   '^S);
  99.       for cnt:=1 to maxtopics do begin
  100.         if cnt<>1 then write (',');
  101.         write (voted[cnt])
  102.       end;
  103.       writeln (^M);
  104.       for c:=udsysop to databasesysop do
  105.         if c in eurec.config
  106.           then writeln (^B'Sysop of the '^S,sectionnames[c]);
  107.       writeln
  108.     end;
  109.     writelog (18,13,'')
  110.   end;
  111.  
  112.   procedure getmstr (t:mstr; var mm);
  113.   var m:mstr absolute mm;
  114.   begin
  115.     writeln ('Old ',t,': '^S,m);
  116.     writestr ('New '+t+'? *');
  117.     if length(input)>0 then m:=input
  118.   end;
  119.  
  120.   procedure getsstr (t:mstr; var s:sstr);
  121.   var m:mstr;
  122.   begin
  123.     m:=s;
  124.     getmstr (t,m);
  125.     s:=m
  126.   end;
  127.  
  128.   procedure getint (t:mstr; var i:integer);
  129.   var m:mstr;
  130.   begin
  131.     m:=strr(i);
  132.     getmstr (t,m);
  133.     i:=valu(m)
  134.   end;
  135.  
  136.   procedure euwanted;
  137.   begin
  138.     writestr ('Wanted status: '^S+yesno(wanted in eurec.config));
  139.     writestr ('New wanted status:');
  140.     if yes
  141.       then eurec.config:=eurec.config+[wanted]
  142.       else eurec.config:=eurec.config-[wanted];
  143.     writelog (18,1,yesno(wanted in eurec.config))
  144.   end;
  145.  
  146.   procedure eudel;
  147.   begin
  148.     writestr ('Delete user --- confirm:');
  149.     if yes then begin
  150.       deleteuser (eunum);
  151.       seek (ufile,eunum);
  152.       read (ufile,eurec);
  153.       clearvote;
  154.       writelog (18,9,'')
  155.     end
  156.   end;
  157.  
  158.   procedure euname;
  159.   var m:mstr;
  160.   begin
  161.     m:=eurec.handle;
  162.     getmstr ('name',m);
  163.     if not match (m,eurec.handle) then
  164.       if lookupuser (m)<>0 then begin
  165.         writestr ('Already exists!  Are you sure? *');
  166.         if not yes then exit
  167.       end;
  168.     eurec.handle:=m;
  169.     writelog (18,6,m)
  170.   end;
  171.  
  172.   procedure eupassword;
  173.   begin
  174.     if not truesysop
  175.       then truesysops
  176.       else begin
  177.         getsstr ('password',eurec.password);
  178.         writelog (18,8,'')
  179.       end
  180.   end;
  181.  
  182.   procedure eulevel;
  183.   var n:integer;
  184.   begin
  185.     n:=eurec.level;
  186.     getint ('level',n);
  187.     if (n>=sysoplevel) and (not truesysop)
  188.       then truesysops
  189.       else begin
  190.         if (eurec.level<=level2nd) and (n>level2nd) then clearvote;
  191.         eurec.level:=n;
  192.         writelog (18,15,strr(n))
  193.       end
  194.   end;
  195.  
  196.   procedure eugflvl;
  197.   var n:integer;
  198.    begin
  199.     n:=eurec.gflvl;
  200.     getint ('g-file level',n);
  201.    if (n>=sysoplevel) and (not truesysop)
  202.       then truesysops
  203.       else begin
  204.         eurec.gflvl:=n;
  205.         end
  206.    end;
  207.  
  208.   procedure euphone;
  209.   var m:mstr;
  210.  
  211.   begin
  212.     m:=eurec.phonenum;
  213.     buflen:=15;
  214.     getmstr ('phone number',m);
  215.     if length(m)>7 then begin
  216.       eurec.phonenum:=m;
  217.       writelog (18,16,m)
  218.     end
  219.   end;
  220.  
  221.   procedure boardflags;
  222.   var quit:boolean;
  223.  
  224.     procedure listflags;
  225.     var bd:boardrec;
  226.         cnt:integer;
  227.     begin
  228.       seek (bdfile,0);
  229.       for cnt:=0 to filesize(bdfile)-1 do begin
  230.         read (bdfile,bd);
  231.         tab (bd.shortname,9);
  232.         tab (bd.boardname,30);
  233.         writeln (accessstr[getuseraccflag (eurec,cnt)]);
  234.         if break then exit
  235.       end
  236.     end;
  237.  
  238.     procedure changeflag;
  239.     var bn,q:integer;
  240.         bname:mstr;
  241.         ac:accesstype;
  242.     begin
  243.       buflen:=8;
  244.       writestr ('Board to change access:');
  245.       bname:=input;
  246.       bn:=searchboard(input);
  247.       if bn=-1 then begin
  248.         writeln ('Not found!');
  249.         exit
  250.       end;
  251.       writeln (^B^M'Current access: '^S,
  252.                accessstr[getuseraccflag (eurec,bn)]);
  253.       getacflag (ac,input);
  254.       if ac=invalid then exit;
  255.       setuseraccflag (eurec,bn,ac);
  256.       case ac of
  257.         letin:q:=2;
  258.         keepout:q:=3;
  259.         bylevel:q:=4
  260.       end;
  261.       writelog (18,q,bname)
  262.     end;
  263.  
  264.     procedure allflags;
  265.     var ac:accesstype;
  266.     begin
  267.       writehdr ('Set all board access flags');
  268.       getacflag (ac,input);
  269.       if ac=invalid then exit;
  270.       writestr ('Confirm [Y/N]:');
  271.       if not yes then exit;
  272.       setalluserflags (eurec,ac);
  273.       writelog (18,5,accessstr[ac])
  274.     end;
  275.  
  276.   begin
  277.     opentempbdfile;
  278.     quit:=false;
  279.     repeat
  280.       repeat
  281.         writestr (^M'L)ist flags, C)hange one flag, A)ll flags, or Q)uit:');
  282.         if hungupon then exit
  283.       until length(input)<>0;
  284.       case upcase(input[1]) of
  285.         'L':listflags;
  286.         'C':changeflag;
  287.         'A':allflags;
  288.         'Q':quit:=true
  289.       end
  290.     until quit;
  291.     closetempbdfile
  292.   end;
  293.  
  294.   procedure specialsysop;
  295.  
  296.     procedure getsysop (c:configtype);
  297.     begin
  298.       writeln ('Section ',sectionnames[c],': '^S,
  299.                sysopstr[c in eurec.config]);
  300.       writestr ('Grant sysop access? *');
  301.       if length(input)<>0
  302.         then if yes
  303.           then
  304.             begin
  305.               eurec.config:=eurec.config+[c];
  306.               writelog (18,10,sectionnames[c])
  307.             end
  308.           else
  309.             begin
  310.               eurec.config:=eurec.config-[c];
  311.               writelog (18,11,sectionnames[c])
  312.             end
  313.     end;
  314.  
  315.   begin
  316.     if not truesysop then begin
  317.       truesysops;
  318.       exit
  319.     end;
  320.     writestr
  321. ('Section of M)ain, F)ile, B)ulletin, V)oting, E)mail, D)atabase, P)Doors:');
  322.     if length(input)=0 then exit;
  323.     case upcase(input[1]) of
  324.       'M':getsysop (mainsysop);
  325.       'F':getsysop (udsysop);
  326.       'B':getsysop (bulletinsysop);
  327.       'V':getsysop (votingsysop);
  328.       'E':getsysop (emailsysop);
  329.       'D':getsysop (databasesysop);
  330.       'P':getsysop (doorssysop)
  331.     end
  332.   end;
  333.  
  334.   procedure getlogint (prompt:mstr; var i:integer; ln:integer);
  335.   begin
  336.     getint (prompt,i);
  337.     writelog (18,ln,strr(i))
  338.   end;
  339.  
  340. var q:integer;
  341. begin
  342.   seek (ufile,eunum);
  343.   read (ufile,eurec);
  344.   writelog (2,3,eurec.handle);
  345.   usedit:=true;
  346.   edit_user:=eurec.handle;
  347.   repeat
  348.     q:=menu('User edit','UEDIT','SDHPLOEWTBQYNIG');
  349.     case q of
  350.       1:eustatus;
  351.       2:eudel;
  352.       3:euname;
  353.       4:eupassword;
  354.       5:eulevel;
  355.       6:getlogint ('u/d points',eurec.udpoints,7);
  356.       7:getlogint ('u/d level',eurec.udlevel,14);
  357.       8:euwanted;
  358.       9:getlogint ('time for today',eurec.timetoday,12);
  359.       10:boardflags;
  360.       12:specialsysop;
  361.       13:euphone;
  362.       14:showinfoforms(strr(eunum));
  363.       15:eugflvl;
  364.     end
  365.   until hungupon or (q=11) or (length(eurec.handle)<1);
  366.   writeurec;
  367.   seek (ufile,eunum);
  368.   write (ufile,eurec);
  369.  readurec;
  370.   usedit:=false;
  371. end;
  372.  
  373. overlay procedure printnews;
  374. var nfile:file of newsrec;
  375.     line:newsrec;
  376. begin
  377.   assign (nfile,'News');
  378.   reset (nfile);
  379.   if ioresult<>0 then exit;
  380.   if filesize (nfile)=0 then begin
  381.     close (nfile);
  382.     exit
  383.   end;
  384.   writehdr ('News Bulletins: <SPACE> to abort, ^S to stop, ^Q to continue');
  385.   while not (eof(nfile) or break or hungupon) do begin
  386.     read (nfile,line);
  387.     if (line.where>=0) and (line.level<=ulvl) then begin
  388.       writeln;
  389.         ansireset;
  390.         write ('Title: ['^S,line.title);
  391.         ansireset;
  392.         write (']  Date: ['^S,line.date,' at ',line.time);
  393.         ansireset;
  394.         write (']  Level: ['^S,line.level);
  395.         ansireset;
  396.         writeln (']');
  397.       writeln ('------------------------------------------------------------------------------');
  398.       printtext (line.where)
  399.     end
  400.   end;
  401.   close (nfile)
  402. end;
  403.  
  404. overlay procedure sendmodemstr (ss:anystr; endifcarrier:boolean);
  405. var cnt,ptr:integer;
  406.     k:char;
  407. label exit,connected;
  408. begin
  409.   ptr:=0;
  410.   while ptr<length(ss) do
  411.     begin
  412.       if keyhit or (carrier=endifcarrier) then goto exit;
  413.       ptr:=ptr+1;
  414.       k:=ss[ptr];
  415.       case k of
  416.         '|':sendchar (^M);
  417.         '~':delay (500);
  418.         '^':begin
  419.               ptr:=ptr+1;
  420.               if ptr>length(ss)
  421.                 then k:='^'
  422.                 else k:=upcase(ss[ptr]);
  423.               if k in ['A'..'Z']
  424.                 then sendchar (chr(ord(k)-64))
  425.                 else sendchar (k)
  426.             end;
  427.         else sendchar (k)
  428.       end;
  429.       delay (50);
  430.       while numchars>0 do writecon (getchar)
  431.     end;
  432.   cnt:=0;
  433.   repeat
  434.     while numchars>0 do begin
  435.       cnt:=0;
  436.       writecon (getchar)
  437.     end;
  438.     cnt:=cnt+1
  439.   until (cnt=1000) or keyhit or (carrier=endifcarrier);
  440.   exit:
  441.   break:=keyhit
  442. end;
  443.  
  444. overlay function getlastcaller:mstr;
  445. var qf:file of lastrec;
  446.     l:lastrec;
  447. begin
  448.   getlastcaller:='';
  449.   assign (qf,'Callers');
  450.   reset (qf);
  451.   if ioresult=0 then
  452.     if filesize(qf)>0
  453.       then
  454.         begin
  455.           seek (qf,0);
  456.           read (qf,l);
  457.           getlastcaller:=l.name
  458.         end;
  459.   close (qf)
  460. end;
  461.  
  462. overlay procedure showlastcallers;
  463. var qf:file of lastrec;
  464.     cnt:integer;
  465.     l:lastrec;
  466. begin
  467.   assign (qf,'Callers');
  468.   reset (qf);
  469.   if ioresult=0 then begin
  470.     break:=false;
  471.     for cnt:=0 to filesize(qf)-1 do
  472.       if not break then begin
  473.         read (qf,l);
  474.        if not break then
  475.         writeln ('[',l.caller:0:0,'] - ['+l.name+']  [Level: ',l.level:4,']');
  476.         if not break then
  477.         writeln ('Baud: [',l.baud,']  Called At: ['+l.da+'] at ['+l.ti+']');
  478.       end
  479.   end;
  480.   close (qf)
  481. end;
  482.  
  483. overlay procedure updateuserstats;
  484. var timeon:integer;
  485. begin
  486.   with urec do begin
  487.     timeon:=timeontoday;
  488.     timetoday:=timetoday-timeon;
  489.     if timetoday<0 then timetoday:=0;
  490.     totaltime:=totaltime+timeon;
  491.     if tempsysop then begin
  492.       ulvl:=regularlevel;
  493.       writeln (usr,'(Disabling temporary sysop powers)');
  494.       writeurec
  495.     end;
  496.     if numon=1 then begin
  497.       if (ulvl=1) and (level2nd<>0) then ulvl:=level2nd;
  498.       if (udlevel=defudlevel) and (udlevel2nd<>0) then udlevel:=udlevel2nd;
  499.       if (udpoints=defudpoints) and (udpoints2nd<>0)
  500.         then udpoints:=udpoints2nd
  501.     end
  502.   end;
  503.   writeurec
  504. end;
  505.  
  506. overlay procedure question(which:integer);
  507. var ff:text;
  508.     k:char;
  509.     me:message;
  510.     z:integer;
  511.     x:char;
  512.     i:integer;
  513.  
  514. procedure dosee (c:integer; uname:mstr);
  515. var lnum,un,cnt:integer;
  516.     u:userrec;
  517.  
  518.   procedure showone;
  519.   var ff:text;
  520.       me:message;
  521.       k:char;
  522.       found:boolean;
  523.       z:integer;
  524.       l:anystr;
  525.  
  526.   begin
  527.   begin
  528.     z:=u.infoform[c];
  529.     if z=-1 then begin
  530.       writestr ('That user has not filled out that infoform.');
  531.       exit
  532.     end;
  533.     end;
  534.     assign (ff,textfiledir+'info'+strr(c));
  535.     reset (ff);
  536.     if ioresult<>0 then begin
  537.       close (ff);
  538.       lnum:=ioresult;
  539.       writeln ('Information form not present.');
  540.       exit
  541.     end;
  542.     reloadtext (u.infoform[c],me);
  543.     writeln (^M,me.text[1],^M^M);
  544.     lnum:=1;
  545.     while not (break or eof(ff)) do begin
  546.       read (ff,k);
  547.       if k='*'
  548.         then if lnum>me.numlines
  549.           then writeln ('No answer')
  550.           else begin
  551.             lnum:=lnum+1;
  552.             writeln (me.text[lnum])
  553.           end
  554.         else writechar (k);
  555.     end;
  556.    textclose (ff)
  557.   end;
  558.  
  559. begin
  560.     un:=lookupuser (uname);
  561.     if un=0 then writestr ('No such user.') else begin
  562.       seek (ufile,un);
  563.       read (ufile,u);
  564.       showone;
  565.       nosys:=true;
  566.     end
  567. end;
  568.  
  569.  procedure viewinfo(l:integer; s:mstr);
  570.   begin
  571.     dosee(l,s);
  572.  end;
  573.  
  574. begin
  575.   if which>0 then i:=which else
  576.   repeat
  577.    i:=menu('InfoForms','Info','ABCDEFGHIQ');
  578.    if i=10 then exit;
  579.   until hungupon or (i>0);
  580.   if i<10 then z:=urec.infoform[i];
  581.   writeln;
  582.   if not exist (textfiledir+'Info'+strr(i)) then begin
  583.     writestr ('Information form #'+strr(i)+' does not exist.');
  584.     if issysop then
  585.       writeln ('Sysop: To make an information form, create a text file',
  586.              ^M'called INFO(Number).  Use * to indicate a pause for user input.');
  587.     exit
  588.   end;
  589.   if z<>-1 then begin
  590.     writeln ('*> Infoform already filled out <*');
  591.     writestr ('D)elete, R)eplace, V)iew or Q)uit: @');
  592.  
  593.     if upcase(input[1])='D' then begin
  594.                                   Deletetext(z);
  595.                                   urec.infoform[i]:=-1;
  596.                                   writeurec;
  597.                                   exit;
  598.                                   end;
  599.  
  600.     if upcase(input[1])='V' then begin
  601.                                   nosys:=true;
  602.                                   viewinfo(i,unam);
  603.                                   nosys:=false;
  604.                                   exit;
  605.                                   end;
  606.  
  607.     if upcase(input[1])='Q' then exit;
  608.  
  609.     deletetext (urec.infoform[i]);
  610.     urec.infoform[i]:=-1;
  611.     writeurec
  612.   end;
  613.   assign (ff,textfiledir+'Info'+strr(i));
  614.   reset (ff);
  615.   me.numlines:=1;
  616.   me.title:='';
  617.   me.anon:=false;
  618.   me.text[1]:='Filled out on: '+datestr+' at '+timestr;
  619.   while not eof(ff) do begin
  620.     if hungupon then begin
  621.       textclose (ff);
  622.       exit
  623.     end;
  624.     read (ff,k);
  625.     if k='*' then begin
  626.       nochain:=true;
  627.       getstr;
  628.       me.numlines:=me.numlines+1;
  629.       me.text[me.numlines]:=input
  630.      end
  631.     else writechar (k);
  632.   end;
  633.   textclose (ff);
  634.   z:=maketext (me);
  635.   urec.infoform[i]:=z;
  636.   writeurec
  637. end;
  638.  
  639. overlay procedure newvote;
  640.  
  641. var u:userrec;
  642.     n,cnt1,cnt:integer;
  643.     cv,alv:boolean;
  644.  
  645. (***  procedure makecomment;
  646.   var
  647.   com:string[80];
  648.   comstuf:commentrec;
  649.   comfile:file of commentrec;
  650.   C:integer;
  651.   temp:commentrec;
  652.   here:boolean;
  653.  
  654.   begin
  655.   writestr ('Would you like to insert a comment? *');
  656.   if yes then begin
  657.   assign (comfile,'comments');
  658.   reset (comfile);
  659.   if ioresult <> 0 then rewrite (comfile);
  660.   Writeln ('You have one line (80 chr.)');
  661.   repeat
  662.   writeln ('------------------------------------------------------------------------------');
  663.   getstr;
  664.   if hungupon then exit;
  665.   com:=input;
  666.   writeln (com);
  667.   writestr ('Is this ok? *');
  668.   until yes or hungupon;
  669.   C:=0;
  670.   here:=false;
  671.   repeat
  672.   C:=c+1;
  673.   seek (comfile,c);
  674.   read (comfile,temp);
  675.   if temp.num<1 then here:=true;
  676.   until (c=filesize(comfile)) or here;
  677.   if not here then seek(comfile,filesize(comfile)+1) else seek (comfile,c);
  678.        comstuf.num:=n;
  679.        comstuf.comment:=com;
  680.        comstuf.who:=unam;
  681. write (comfile,comstuf);
  682. writeln ('Comment Saved');
  683.   close (comfile);
  684.   end;
  685.   end;   ***)
  686.  
  687.  
  688.   procedure lookinfo (uname:mstr);
  689.   var ff:text;
  690.       me:message;
  691.       k:char;
  692.       found:boolean;
  693.       z,lnum,g:integer;
  694.       l:anystr;
  695.       b:userrec;
  696.  
  697.   begin
  698.     g:=lookupuser(uname);
  699.     if g=0 then writestr ('No such user.') else begin
  700.       seek (ufile,g);
  701.       read (ufile,b);
  702.      z:=b.infoform[1];
  703.     if z=-1 then begin
  704.       writestr ('User did not fill it out');
  705.       exit
  706.     end;
  707.     assign (ff,textfiledir+'Info1');
  708.     reset (ff);
  709.     if ioresult<>0 then begin
  710.       close (ff);
  711.       lnum:=ioresult;
  712.       writeln ('That information form is not present.');
  713.       exit
  714.      end;
  715.     reloadtext (b.infoform[1],me);
  716.     writeln (^M,me.text[1],^M^M);
  717.     lnum:=1;
  718.     while not (break or eof(ff)) do begin
  719.       read (ff,k);
  720.       if k='*'
  721.         then if lnum>me.numlines
  722.           then writeln ('No answer')
  723.           else begin
  724.             lnum:=lnum+1;
  725.             writeln (me.text[lnum])
  726.           end
  727.         else writechar (k);
  728.     end;
  729.    textclose (ff)
  730.   end;
  731.   end;
  732.  
  733.   procedure look;
  734.    begin
  735.    cnt1:=0;
  736.    alv:=false;
  737.    for cnt1:=1 to 50 do begin
  738.     if urec.didvote[cnt1]=n then begin
  739.      alv:=true;
  740.      cnt1:=50;
  741.      end;
  742.     end;
  743.    end;
  744.  
  745. (****   procedure comview;
  746.    var
  747.      comfile:file of commentrec;
  748.      comstuf:commentrec;
  749.      cnt:integer;
  750.  
  751.    begin
  752.    writeln ('Comments on ',u.handle,':');
  753.    assign (comfile,'comments');
  754.    if ioresult<>0 then exit;
  755.    for cnt:=1 to filesize(comfile) do begin
  756.    read (comfile,comstuf);
  757.    if comstuf.num=n then begin
  758.    writeln ('----------------------');
  759.    writeln ('Comment left by: ',comstuf.who);
  760.    writeln (comstuf.comment);
  761.    end;
  762.    end;
  763.    close (comfile);
  764.    end;   ***)
  765.  
  766.   procedure showuser;
  767.   begin
  768.     look;
  769.     if not alv then begin
  770.     writeln (^M'Name       : '^S,u.handle,^M);
  771.     writeln ('--Current Voting--');
  772.     writeln ('Yes          : '^S,u.votey);
  773.     writeln ('No           : '^S,u.voten,^M);
  774.     writestr ('Vote on user? *');
  775.     if not yes then alv:=true;
  776.     if not alv then begin
  777.     write ('View ',u.handle,'''s infoform? ');
  778.     getstr;
  779.     if yes then lookinfo(u.handle);
  780. (***    writestr ('View other voters comments? *');
  781.     if yes then comview; ***)
  782.     end;
  783.     end;
  784.     repeat
  785.     if alv then input:='3' else begin
  786.     writeln ('Please make your decision:',^M^M
  787.             ,'1) Yes, let him in',^M
  788.             ,'2) No, don''t let him in',^M
  789.             ,'3) Undecided, I will vote later');
  790.     writestr (^M'Please enter your choice: *');
  791.     end;
  792.     if (length(input)<1) then input:=('3');
  793.     case input of
  794.     '1':begin
  795.          cv:=false;
  796.          cnt:=0;
  797.          seek (ufile,n);
  798.          u.votey:=u.votey+1;
  799.          while cnt<=50 do begin
  800.          if urec.didvote[cnt]=0 then begin
  801.          urec.didvote[cnt]:=n;
  802.          cnt:=50;
  803.          Writeln ('*> Vote recorded <*');
  804.          cv:=true;
  805.          writeurec;
  806.          end;
  807.          cnt:=cnt+1;
  808.          end;
  809.          nnu:=nnu-1;
  810. (***         makecomment;   ***)
  811.         end;
  812.  
  813.     '2':begin
  814.          cv:=false;
  815.          cnt:=0;
  816.          seek (ufile,n);
  817.          u.voten:=u.voten+1;
  818.          while cnt<=50 do begin
  819.          if urec.didvote[cnt]=0 then begin
  820.          urec.didvote[cnt]:=n;
  821.          cnt:=50;
  822.          Writeln ('*> Vote recorded <*');
  823.          cv:=true;
  824.          writeurec;
  825.          end;
  826.          cnt:=cnt+1;
  827.          end;
  828.          nnu:=nnu-1;
  829. (***         makecomment;   ***)
  830.          end;
  831.  
  832.     '3':begin
  833.          cv:=false;
  834.          if not alv then writeln ('*> Please vote soon! <*');
  835.          cv:=true;
  836.          end;
  837.  
  838.    end;{case}
  839.    until cv;
  840.   end;{showuser}
  841.  
  842. begin
  843.   if nnu<1 then begin
  844.   Writeln ('*> No new users <*');
  845.   exit;
  846.   end;
  847.   writeln ('*> Please wait. Scanning User File <*');
  848.   for n:=1 to numusers do begin
  849.     seek (ufile,n);
  850.     read (ufile,u);
  851.     if (u.level<=level2nd) then if (length(u.handle)>0) then showuser;
  852.     writeurec;
  853.     seek (ufile,n);
  854.     write (ufile,u);
  855.     readurec;
  856.   end
  857. end;
  858.