home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / PASCAL / TPKERMIT / READCHAR.PAS < prev    next >
Pascal/Delphi Source File  |  1987-03-25  |  3KB  |  52 lines

  1. (* +FILE+ READCHAR.PASMSCPM *)
  2. (* ------------------------------------------------------------------ *)
  3. (* ReadChar - Read a character from the modem.                        *)
  4. (*           Waits for a character to appear on the modem.            *)
  5. (*           It returns TRUE when the character is received and       *)
  6. (*           the value of the char is return in the parameter.        *)
  7. (*           It returns FALSE if the keyboard char is detected before *)
  8. (*           a character is received or it times out.                 *)
  9. (*   Side Effects : if the keys ^Z ^X ^C or ^E are pressed then       *)
  10. (*           BREAKSTATE is set to BZ, BX, BC, or BE respectively.     *)
  11. (*   Note : The ticker value may need to change if code is added to   *)
  12. (*           to this procedure or RecvChar or KeyChar. It is also     *)
  13. (*           machine dependent.                                       *)
  14. (* ------------------------------------------------------------------ *)
  15.     Function ReadChar(var char : byte): boolean;
  16.     var waiting : boolean ;
  17.         dummy : byte ;
  18.         Ticker,Timer : integer ;
  19.     Begin (* Read Char *)
  20.     waiting := true ;
  21.     timer := 0 ;
  22.     ticker := 0 ;
  23.     While waiting Do
  24.          Begin (* Wait for a Character *)
  25.          If RecvChar(char) then
  26.               Begin (* got char *)
  27.               ReadChar := true ;
  28.               waiting := false ;
  29.               End  (* got char *)
  30.                            else
  31.               If KeyChar(char,dummy) then
  32.                    Begin (* key char *)
  33.                    ReadChar := false ;
  34.                    waiting := false ;
  35.                    if char = $03 then BREAKSTATE := BC ;
  36.                    if char = $05 then BREAKSTATE := BE ;
  37.                    if char = $18 then BREAKSTATE := BX ;
  38.                    if char = $1A then BREAKSTATE := BZ ;
  39.                    End   (* key char *)
  40.                                     else
  41.                    Begin (* Check for timeout *)
  42.                    if Timer < Timeout then (* increment timer *)
  43.                         If ticker = 1072 then
  44.                              Begin ticker := 0 ; Timer := Timer + 1; end
  45.                                         else ticker := ticker + 1
  46.                                       else  (* times up *)
  47.                         Begin Waiting := false; ReadChar := False; End;
  48.                   End;   (* Check for timeout *)
  49.         End ; (* Wait for a Character *)
  50.     End; (* Read Char *)
  51.  
  52.