home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBOPAS / TKERMIT.LBR / KTERM.PQS / KTERM.PAS
Pascal/Delphi Source File  |  2000-06-30  |  4KB  |  114 lines

  1.  
  2. (*----------------------------------------------------------------*)
  3.  
  4.   procedure send_char(character : integer);
  5.  
  6.     (* This procedure sends a character out of the port specified by
  7.        the default condition or set by 'set port' command.  The currently
  8.        supported ports are reader/punch and UC1:.  The output to the reader
  9.        punch port is via the bios call to punch out.  This is to (hopefully)
  10.        be able to output 8 bit data so binary files can be transfered
  11.        directly.  The output to UC1: is done by changing the IOBYTE so
  12.        the CON: port is UC1: and using a bios call.
  13.        Notes: 1. The Digital Research manual specifies that input and output
  14.                  to the console and reader punch port is done with the high
  15.                  order bit set to 0.  I have heard from reliable sources that
  16.                  this is not necessarily so, but it could cause a problem on
  17.                  some systems.
  18.  
  19.        Input : integer value of character to be sent.
  20.        Output : none.
  21.        Variables affected: none;
  22.     *)
  23.  
  24.     begin
  25.       case port_type_var of
  26.         comm : bios(5, character);
  27.         uc1 : begin
  28.                 iobyte := port_iobyte; (* use current port *)
  29.                 bios(3, character);
  30.                 iobyte := base_iobyte; (* return to original port for console *)
  31.               end;
  32.       end; (* case *)
  33.     end;
  34.  
  35. (*---------------------------------------------------------------*)
  36.  
  37.   procedure term; (* virtual terminal mode *)
  38.  
  39.     (* Term is the virtual terminal mode. Anything typed at the terminal
  40.        is sent to the currently selected port, and anything the port
  41.        receives is sent to the terminal.
  42.        The terminal is port CON: and the default port is RDR:/PUN:.
  43.        ^\C aborts the virtual terminal mode.  Cleanup is done by deleting all
  44.        cahracters in the input buffer at the time the connection is opened.
  45.        All I/O is done via bios calls.  No parity checking/stripping is done.
  46.        Note: If I/O using read() and write() is done during port status
  47.              checking, some incoming characters may be lost. I'm not sure
  48.              why but it can hang you up totally.
  49.  
  50.        Input: none.
  51.        Output : none.
  52.        Variables affected: none.
  53.     *)
  54.  
  55.     var
  56.       letter, temp : integer;
  57.       connect_exit : boolean;
  58.  
  59.  
  60.     begin (* term *)
  61.       connect_exit := false;
  62.       temp := 0;
  63.       writeln('Connected to remote host. Type Control-backslash c to return');
  64.       writeln('to local Kermit.');
  65.       iobyte := port_iobyte;
  66.       while (bios(1) <> 0) do  (* clear the input buffer *)
  67.         bios(2);
  68.       repeat
  69.         iobyte := port_iobyte;
  70.         if bios(1) <> 0 then
  71.           begin
  72.             if port_type_var = comm then
  73.               letter := bios(6)
  74.             else
  75.               letter := bios(2);
  76.             iobyte := base_iobyte;
  77.             bios(3, letter);
  78.             if printing then
  79.               bios(4, letter);
  80.           end;
  81.       iobyte := base_iobyte; (* make sure we're back at console *)
  82.       if bios(1) <> 0 then
  83.         begin
  84.           letter := bios(2);
  85.             case letter of (* check for escape sequence *)
  86.               escape_char : begin
  87.                               if temp = escape_char then
  88.                                 send_char(escape_char)
  89.                               else
  90.                                 temp := escape_char;
  91.                             end;
  92.               $43, $63 : begin  (* handle upper and lower case  'C' *)
  93.                            if temp = escape_char then
  94.                              connect_exit := true
  95.                            else
  96.                              send_char(letter);
  97.                            temp := 0;
  98.                          end;
  99.               else
  100.                 begin
  101.                   if temp = escape_char then
  102.                     begin
  103.                       send_char(escape_char);
  104.                       write(con, bell);
  105.                     end;
  106.                   send_char(letter);
  107.                       temp := 0;
  108.                     end;
  109.             end; (* case *)
  110.           end;
  111.       until connect_exit;
  112.       iobyte := base_iobyte; (* make sure we're back at CON: *)
  113.     end; (* term *)
  114.