home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug184.arc / ROS34.LBR / ROSUTL.IZC / ROSUTL.INC
Text File  |  1979-12-31  |  11KB  |  347 lines

  1. { ROSUTL.INC - Remote Operating System Utility Sub-system }
  2. { for ros 3.4 }
  3.  
  4. overlay procedure display_users;
  5. { Display user file }
  6.   const
  7.     col_width = 19;
  8.   var
  9.     i, colbeg, colend, len: integer;
  10.     ch, disp_case, disp_nois: char;
  11.     t: tad_array;
  12.     key: StrName;
  13.     str: StrTAD;
  14.     temp_user_rec: user_list;
  15.   begin
  16.     if (user_rec.access >= 250) or (not remote_copy)
  17.       then
  18.         repeat
  19.           ch := select('Type of list', 'AllExceptionalQuickUnvalidated');
  20.           if ch = '?'
  21.             then Writeln(USR, '<A>ll, <E>xceptional, <Q>uick, <U>nvalidated');
  22.         until ch in ['A', 'E', 'Q', 'U']
  23.       else ch := 'Q';
  24.     Writeln(USR);
  25.  
  26.                             
  27.     Writeln(USR, 'The user list will be alphabetic by last name,');
  28.     Writeln(USR, 'starting with a character or string you specify.');
  29.     Writeln(USR);
  30.     key := prompt('Start [C/R for all names]', len_name, 'ES');
  31.     if key = ''
  32.       then
  33.         begin
  34.           ClearKey(IdxF);
  35.           NextKey(IdxF, i, key)
  36.         end
  37.       else
  38.         begin
  39.           SearchKey(IdxF, i, key);
  40.           if not OK
  41.             then
  42.               begin
  43.                 ClearKey(IdxF);
  44.                 NextKey(IdxF, i, key)
  45.               end
  46.         end;
  47.     GetTAD(t);
  48.     str := FormTAD(t);
  49.     if ch = 'E'
  50.  
  51.                             
  52.       then Write(USR, 'Exceptional ')
  53.     else if ch = 'U'
  54.       then Write(USR, 'Unvalidated ');
  55.     Writeln(USR, 'Users As Of: ', str);
  56.     Writeln(USR);
  57.     if (user_rec.access >= 250) or (not remote_copy)
  58.       then Write(USR, FileLen(DatF), ' records, ');
  59.     Writeln(USR, UsedRecs(DatF), ' users in file.');
  60.     colend := 999;
  61.     while (not brk) and OK do
  62.       with temp_user_rec do
  63.         begin
  64.           GetRec(DatF, i, temp_user_rec);
  65.           if (ch = 'Q') and (fn <> 'SYSOP') and (access >= val_acc)
  66.             then
  67.               begin
  68.                 key := fn + ' ' + ln;
  69.                 colbeg := succ(colend);
  70.                 while 0 <> colbeg mod col_width do
  71.                   colbeg := succ(colbeg);
  72.                 len := colbeg - colend;
  73.                 colend := colbeg + length(key);
  74.                 if colend > user_rec.columns
  75.  
  76.                             
  77.                   then
  78.                     begin
  79.                       Writeln(USR);
  80.                       colend := length(key)
  81.                     end
  82.                   else Write(USR, ' ':len);
  83.                 Write(USR, key)
  84.               end
  85.           else if (ch = 'A')
  86.                or ((ch = 'U') and (access < val_acc))
  87.                or ((ch = 'E') and ((access > val_acc) or (limit > val_time)))
  88.             then
  89.               begin
  90.                 Write(USR,
  91.                   pad(ln, succ(len_ln)),
  92.                   pad(fn, succ(len_fn)),
  93.                   pad(cy, succ(len_cy)),
  94.                   pad(st, succ(len_st)),
  95.                   pad(ph, succ(len_ph)));
  96.                 if shift_lock
  97.                   then disp_case := 'U'
  98.                   else disp_case := 'L';
  99.                 if noisy
  100.  
  101.                             
  102.                   then disp_nois := 'N'
  103.                   else disp_nois := 'Q';
  104.                 str := FormTAD(laston);
  105.                 Writeln(USR,
  106.                   '    ',
  107.                   access:4,
  108.                   limit:4,
  109.                   nulls:2,
  110.                   disp_case:2,
  111.                   disp_nois:2,
  112.                   help_level:2,
  113.                   columns:3,
  114.                   lines:3,
  115.                   str:28,
  116.                   time_today:3,
  117.                   time_total:5,
  118.                   lasthi:5,
  119.                   upload:3,
  120.                   download:4)
  121.               end;
  122.           NextKey(IdxF, i, key)
  123.         end
  124.   end;
  125.  
  126.                             
  127.  
  128. overlay function chat: boolean;
  129. { Chat with sysop }
  130.   var
  131.     ch: char;
  132.     i: integer;
  133.     count: real;
  134.     t: tad_array;
  135.     str: StrStd;
  136.   begin
  137.     OK := op_chat;
  138.     if op_chat
  139.       then Writeln(USR, 'Chat requested by Sysop...', BEL, BEL)
  140.       else
  141.         begin
  142.           GetTAD(t);
  143.           if (t[2] < ChatStart) or (t[2] > pred(ChatEnd))
  144.             then Writeln(USR, 'Sorry, the hours to chat are ', ChatStart, ':00 to ', ChatEnd, ':00.')
  145.             else
  146.               begin
  147.                 Writeln(USR);
  148.                 Writeln(USR, 'Please standby ', user_rec.fn, ' ', user_rec.ln, '.');
  149.                 Writeln(USR, 'Will ring for 30 seconds.  Type ^C to cancel.');
  150.  
  151.                             
  152.                 Writeln(USR);
  153.                 Write(USR, '|-------------------------------|', CR, '|');
  154.                 i := 15;
  155.                 repeat
  156.                   Write(BEL, BEL, BEL);           { BEL is not normally sent to console }
  157.                   Write(USR, '-+', BEL);
  158.                   count := 1.6 * lps;
  159.                   repeat
  160.                     ch := GetChar;
  161.                     count := count - 1.0
  162.                   until (not online) or (count < 0.0) or (ch in [ETX, ESC]);
  163.                   i := pred(i)
  164.                 until (not online) or (i <= 0) or (ch in [ETX, ESC]);
  165.                 Writeln(USR);
  166.                 if ch = ETX
  167.                   then Writeln(USR, 'Cancelled.')
  168.                   else if ch = ESC
  169.                     then
  170.                       begin
  171.                         Writeln(USR, 'Sysop is available.  Type ^C to exit CHAT...');
  172.                         OK := TRUE
  173.                       end
  174.                     else Writeln(USR, 'Sorry, the sysop is not available.')
  175.  
  176.                             
  177.               end
  178.         end;
  179.     if OK
  180.       then
  181.         begin
  182.           Writeln(USR);
  183.           next_inpstr := '';
  184.           repeat
  185.             str := next_inpstr;
  186.             GetStr(str, ch, len_msg, 'AEW');
  187.             Writeln(USR)
  188.           until (not online) or (ch = ETX);
  189.           chat := FALSE
  190.         end
  191.       else chat := ask('Would you care to leave a message')
  192.   end;
  193.  
  194. overlay procedure display_time;
  195. { Display current system time and date }
  196.   var
  197.     t: tad_array;
  198.     str: StrTAD;
  199.   begin
  200.  
  201.                             
  202.     GetTAD(t);
  203.     str := FormTAD(t);
  204.     Writeln(USR, str);
  205.     if (user_rec.access >= 250) or (not remote_copy)
  206.       then if ask('Do you want to reset the time')
  207.              then
  208.                begin
  209.                  Writeln(USR);              { Change login time so system doesn't hang up on us }
  210.                  login_t[5] := strint(prompt('Year  ', 2, 'E'));
  211.                  login_t[4] := strint(prompt('Month ', 2, 'E'));
  212.                  login_t[3] := strint(prompt('Day   ', 2, 'E'));
  213.                  login_t[2] := strint(prompt('Hour  ', 2, 'E'));
  214.                  login_t[1] := strint(prompt('Minute', 2, 'E'));
  215.                  login_t[0] := strint(prompt('Second', 2, 'E'));
  216.                  SetTAD(login_t);
  217.                  str := FormTAD(login_t);
  218.                  Writeln(USR, str)
  219.                end
  220.   end;
  221.  
  222. overlay procedure display_stats;
  223.   var
  224.     i, days, max: integer;
  225.  
  226.                             
  227.     t: tad_array;
  228.     day_array: array[0..23] of integer;
  229.  
  230.   procedure show_graph(title: StrPr);
  231.     var
  232.       i, j: integer;
  233.       factor, scale: real;
  234.       line: StrStd;
  235.     begin
  236.       Writeln(USR, ' ':8, title, ' for the Last ', days, ' Days');
  237.       Writeln(USR);
  238.       factor := max / 15.0;
  239.       for j := 15 downto 1 do
  240.         begin
  241.           line := '                                                                       ';
  242.           scale := factor * j;
  243.           for i := 0 to 23 do
  244.             if day_array[i] > scale
  245.               then
  246.                 begin
  247.                   line[1 + 3 * i] := '*';
  248.                   line[2 + 3 * i] := '*'
  249.                 end;
  250.  
  251.                             
  252.           Write(USR, scale:3:0);
  253.           i := length(line);
  254.           while line[i] = ' ' do
  255.             i := pred(i);
  256.           Writeln(USR, ' ', copy(line, 1, i))
  257.         end;
  258.       Writeln(USR, '    12  1  2  3  4  5  6  7  8  9 10 11 12  1  2  3  4  5  6  7  8  9 10 11');
  259.       Writeln(USR, '    |--(EST)------ A. M. ---------------|------------- P. M. -------------|')
  260.     end;
  261.  
  262.   begin { show_stats }
  263.     GetTAD(t);
  264.     days := round(greg_to_jul(t[3], t[4], t[5]) - greg_to_jul(stat_rec.date[3],
  265.       stat_rec.date[4], stat_rec.date[5]));
  266.     if days = 0
  267.       then days := 1;
  268.     max := 0;
  269.     for i := 0 to 23 do
  270.       begin
  271.         day_array[i] := round((100.0 * stat_rec.busy_per_hour[i]) / (60.0 * days));
  272.         if max < day_array[i]
  273.           then max := day_array[i]
  274.       end;
  275.  
  276.                             
  277.     show_graph('Percent of Average System Usage by Hour')
  278.   end;
  279.  
  280. overlay procedure alter_user_params;
  281. { Get new user parameters }
  282.   var
  283.     valid, continue: boolean;
  284.     ch: char;
  285.     i: integer;
  286.     temp: string[2];
  287.   begin
  288.     repeat
  289.       continue := TRUE;
  290.       ch := select('Parameter', 'BellCharactersHelpLinesNullsPasswordShiftlock');
  291.       case ch of
  292.         'B': begin
  293.                user_rec.noisy := not user_rec.noisy;
  294.                if user_rec.noisy
  295.                  then Writeln(USR, 'Prompt bell on.')
  296.                  else Writeln(USR, 'Prompt bell off.')
  297.              end;
  298.         'C': begin
  299.                Writeln(USR, 'Current characters-per-line setting is ', user_rec.columns, '.');
  300.  
  301.                             
  302.                temp := prompt('New setting [20-80]', 2, 'ES');
  303.                i := strint(temp);
  304.                if (temp = '') or (not i in [20..80])
  305.                  then Writeln(USR, 'Characters-per-line unchanged.')
  306.                  else user_rec.columns := i
  307.              end;
  308.         'H': begin
  309.                Writeln(USR, 'Current help level: ', user_rec.help_level);
  310.                temp := prompt('New level [0-3]', 1, 'AES');
  311.                i := strint(temp);
  312.                if (temp = '') or (not i in [0..3])
  313.                  then Writeln(USR, 'Help level unchanged.')
  314.                  else user_rec.help_level := i
  315.              end;
  316.         'L': begin
  317.                Writeln(USR, 'Current lines-per-page setting is ', user_rec.lines, '.');
  318.                temp := prompt('New setting [10-48 or 99 to inhibit pause]', 2, 'ES');
  319.                i := strint(temp);
  320.                if (temp = '') or (not i in [10..48, 99])
  321.                  then Writeln(USR, 'Lines-per-page unchanged.')
  322.                  else user_rec.lines := i
  323.              end;
  324.         'N': begin
  325.  
  326.                             
  327.                Writeln(USR, 'Currently using ', user_rec.nulls, ' nulls.');
  328.                get_nulls
  329.              end;
  330.         'P': begin
  331.                get_old_password('Please enter current password', valid);
  332.                if valid
  333.                  then get_new_password
  334.                  else Writeln(USR, 'Password unchanged.')
  335.              end;
  336.         'S': get_case;
  337.         '?': begin
  338.                list('C');
  339.                continue := FALSE
  340.              end
  341.       end
  342.     until continue
  343.   end;
  344. : begin
  345.                list('C');
  346.                continue := FALSE
  347.