home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / modem / glasstty.pas < prev    next >
Pascal/Delphi Source File  |  1994-03-04  |  2KB  |  74 lines

  1. program GLASSTTY (input, output);
  2.  
  3. {Dumb terminal program for the IBM PC.
  4.  Please note that this is meant more as a test driver for COM_PKG1.ASM
  5.  than as a reasonable way to use a PC as a terminal!
  6.  Programmed by Richard Gillmann (GILLMANN@ISIB), 1983}
  7.  
  8. {***INTERFACE TO THE COM_PKG1 ASYNCHRONOUS COMMUNICATIONS PACKAGE***}
  9. {initialize port and interrupt vector}
  10.     procedure init_au(divisor:word); EXTERN;
  11. {turn off interrupts from the aux port}
  12.     procedure close_a;               EXTERN;
  13. {turn off dtr}
  14.     procedure dtr_off;               EXTERN;
  15. {turn on dtr}
  16.     procedure dtr_on;                EXTERN;
  17. {return number of characters in input buffer}
  18.     function crcnt : word;           EXTERN;
  19. {read next character in input buffer}
  20.     function cread : byte;           EXTERN;
  21. {return number of free bytes in output buffer}
  22.     function cwcnt : word;           EXTERN;
  23. {write a character to output buffer}
  24.     procedure cwrit(ch:byte);        EXTERN;
  25. {write a character to the input queue}
  26.     procedure wlocal(ch:byte);       EXTERN;
  27. {cause a break to be sent}
  28.     procedure make_br;               EXTERN;
  29.  
  30. {***INTERFACE TO DOS***}
  31. function DOSXQQ(command, parameter: word): byte; EXTERN;
  32.  
  33. var
  34.    rate    : word;
  35.    divisor : word;
  36.    ok      : boolean;
  37.    ch      : byte;
  38.  
  39. begin
  40.  
  41. {Obtain baud rate from user}
  42. repeat
  43.    ok := true;
  44.    write('Baud rate = ');
  45.    readln(rate);
  46.    case rate of
  47.        300 : divisor := 384;
  48.       1200 : divisor :=  96;
  49.       2400 : divisor :=  48;
  50.       4800 : divisor :=  24;
  51.       9600 : divisor :=  12;
  52.       otherwise begin
  53.          writeln('Incorrect rate.  Try again.');
  54.          ok := false;
  55.       end {otherwise};
  56.    end {case};
  57. until ok;
  58.  
  59. writeln('Entering terminal mode...');
  60. init_au(divisor);
  61.  
  62. {terminal mode loop}
  63. while true do begin            {infinite loop - exit with ctl/brk}
  64.    if DOSXQQ(11,0) <> 0 then        {character typed?}
  65.       cwrit(DOSXQQ(8,0) and 127);    {if so, strip parity & send}
  66.    if crcnt <> 0 then begin        {character received?}
  67.       ch := cread and 127;        {read port, strip parity}
  68.       if ch <> 0 then            {ignore NULs}
  69.          ch := DOSXQQ(2, WRD(ch));    {if ok, display char}
  70.    end {if};
  71. end {while};
  72.  
  73. end.
  74.