home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / beehive / bbs / rosuncr.arc / ROSMAIN.INC < prev    next >
Text File  |  1991-08-11  |  8KB  |  207 lines

  1. { ROSMAIN.INC - Remote Operating System mainline code }
  2.  
  3. { 17dec87 wb - Modifed to go directly into file mode with heap restored
  4.   when chaining back from ROSUNCR.CHN uncrunch program.
  5.  
  6.   07nov87 wb - Added Archive Directory & File Find commands
  7. }
  8.  
  9. begin { ROS }
  10.  
  11.   {Go directly into file mode if executed by turbo instead of CP/M}
  12.   turbo_x := (cmdline_bfr > 127);
  13.   cmdline_bfr := 128;
  14.  
  15.   if not turbo_x then
  16.     begin
  17.       { Raise heap address to make room for uncrunch program }
  18.       HeapPtr:=$a400;
  19.       HeapFre:=$a400;
  20.       for i:=0 to 3 do
  21.         mem[HeapPtr+i]:=0;
  22.       { Save heap address so heap can be restored after chain }
  23.       heap_low:=HeapPtr;
  24.       heap_hi:=RecurPtr;
  25.       system_init;
  26.       cold_start;
  27.       setup;
  28.       local_online := TRUE;
  29.       display_time;
  30.       local_online := FALSE;
  31.       wait_for_user;
  32.     end;
  33.  
  34.   while not fini do
  35.     begin
  36.       if turbo_x  then
  37.         begin
  38.           UsrOutPtr:=addr(putchar); { Reassign USR: to ROS output driver }
  39.           HeapPtr:=heap_ptr;        { Restore heap pointers }
  40.           HeapFre:=heap_fre;
  41.         end
  42.       else
  43.         begin
  44.           login;
  45.           if online and in_use then
  46.             begin
  47.               if user_rec.access >= 250 then
  48.                 begin
  49.                   mesg_area_change('SYSTEM');
  50.                   file_area_change('NEWIN')
  51.                 end
  52.               else
  53.                 IF user_rec.access >= 30 then
  54.                   begin
  55.                     mesg_area_change('POST');
  56.                     file_area_change('NEWIN')
  57.                   end
  58.                 else
  59.                   begin
  60.                     mesg_area_change('POST');
  61.                     file_area_change('LOGIN')
  62.                   end;
  63.             list('B')
  64.             end;
  65.         end;  {if not turbo_x}
  66.  
  67.       turbo_x:=false;
  68.  
  69.       while online and in_use do
  70.         begin
  71.           if op_chat
  72.             then op_chat := chat;
  73.           timer(time_on, time_left);
  74.           st := intstr(time_left, 1) + '-';
  75.           if user_rec.help_level > 0
  76.             then st := st + pr_msg[mode]
  77.             else st := st + pr_msg[mode][1];
  78.           case mode of
  79.             message_mode: st := st + ' ' + AreaReq;
  80.             files_mode  : begin
  81.                             st := st + ' ' + SectReq;
  82.                             if in_library
  83.                               then st := st + ' [' + LibReq + ']';
  84.                             if new_dir
  85.                               then directory;
  86.                             if up_down_display
  87.                               then
  88.                                 begin
  89.                                   writeln(USR, user_rec.upload, ' uploads, ',
  90.                                     user_rec.download, ' downloads to date.');
  91.                                   up_down_display := FALSE
  92.                                 end
  93.                           end
  94.           end;
  95.           if time_left <= 0
  96.             then
  97.               begin
  98.                 writeln(USR, 'Access time expired.  Please call back tomorrow.', BEL, BEL, BEL);
  99.                 remote_online := FALSE
  100.               end
  101.           else if time_left <= 2
  102.                  then writeln(USR, 'Less than 2 minutes of access time left.  Please finish up.', BEL);
  103.           writeln(USR);
  104.           putstat(user_rec.fn + ' ' + user_rec.ln + '  ' + user_rec.cy + ', ' +
  105.             user_rec.st + '  Access: ' + intstr(user_rec.access, 1) + '  On: ' +
  106.             intstr(time_on, 1) + '  Heap: ' + intstr(MaxAvail, 1));
  107.           ch := select(st, rep_msg[mode]);
  108.               case mode of
  109.                 message_mode:
  110.                   case ch of
  111.                     'A': mesg_enter('A');
  112.                     'C': mesg_area_change('');
  113.                     'E': mesg_enter(' ');
  114.                     'F': mode := files_mode;
  115.                     'G': in_use := FALSE;
  116.                     'K': mesg_kill;
  117.                     'Q': mesg_quick_scan;
  118.                     'R': mesg_read;
  119.                     'S': mesg_summary;
  120.                     'U': mode := utility_mode;
  121.                     'X': if (user_rec.access >= 250) or (not remote_copy)
  122.                            then mode := sysop_mode;
  123.                     'B', 'I', 'O', '1'..'9': list(ch);
  124.                     '?': list('M')
  125.                   end;
  126.                 files_mode:
  127.                   case ch of
  128.                     'A': darc;  { Display Archive Directory }
  129.                     'C': begin
  130.                            if in_library
  131.                              then library;
  132.                            file_area_change('')
  133.                          end;
  134.                     'D': directory;
  135.                     'F': toggle_st_switch;
  136.                     'G': in_use := FALSE;
  137.                     'L': library;
  138.                     'M': mode := message_mode;
  139.                     'N': newin_list;
  140.                     'R': RecvXmodem;
  141.                     'S': SendXmodem;
  142.                     'T': SendText;
  143.                     'U': mode := utility_mode;
  144.                     'W': ffnd;  { Find File in SYSTEM.DIR }
  145.                     'X': if (user_rec.access >= 250) or (not remote_copy)
  146.                            then mode := sysop_mode;
  147.                     '?': list('F')
  148.                   end;
  149.                 utility_mode:
  150.                   case ch of
  151.                     'A': alter_user_params;
  152.                     'C': if chat
  153.                            then mesg_enter('S');
  154.                     'F': mode := files_mode;
  155.                     'G': in_use := FALSE;
  156.                     'M': mode := message_mode;
  157.                     'S': display_stats;
  158.                     'T': display_time;
  159.                     'U': display_users;
  160.                     'X': if (user_rec.access >= 250) or (not remote_copy)
  161.                            then mode := sysop_mode;
  162.                     '?': list('U')
  163.                   end;
  164.                 sysop_mode:
  165.                   case ch of
  166.                     'A': toggle_audit;
  167.                     'D': delete_user;
  168.                     'E': edit_user;
  169.                     'F': mode := files_mode;
  170.                     'G': in_use := FALSE;
  171.                     'I': rebuild_index;
  172.                     'L': print_log;
  173.                     'M': mode := message_mode;
  174.                     'N': process_newin;
  175.                     'O': process_macro;
  176.                     'P': purge_files;
  177.                     'R': print_messages;
  178.                     'S': sys_dir;
  179.                     'T': toggle_printer;
  180.                     'U': mode := utility_mode;
  181.                     'V': validate_user;
  182.                     'X': if user_rec.access = 255
  183.                            then extended_commands;
  184.                     '?': list('X')
  185.                   end
  186.               end
  187.         end;
  188.       if connected
  189.         then
  190.           begin
  191.             if in_library
  192.               then library;
  193.             if audit_on
  194.               then toggle_audit;
  195.             if user_rec.fn <> 'SYSOP'
  196.               then if not valid_pw
  197.                      then mesg_enter('S')
  198.                      else if ask('Do you have a message for the sysop')
  199.                             then mesg_enter('S');
  200.             wrapup;
  201.             setup
  202.           end;
  203.       wait_for_user
  204.     end;
  205.   system_de_init
  206. end.
  207.