home *** CD-ROM | disk | FTP | other *** search
- (********************************************************************)
- (* THIS PROCEDURE WILL RECEIVE A CHAR FROM SERIAL DEVICE IF PRESENT *)
- (* INPUT : Ser_Chan : INTEGER *)
- (* INPUT/OUTPUT : NONE *)
- (* OUTPUT : Ch : CHAR, Ok : BOOLEAN STATUS *)
- (* USES : UPDATES GLB FLAGS AND COUNTERS *)
- (* CALLS : INTR *)
- (* ERRORS : ALL SERIAL I/O POSSIBLE *)
- (* GLOBAL VARS : GLB SERIAL VARS *)
- (* SUBJECT : SER COMM, RECEIVE CHARACTER *)
- (* DOMAIN : ARNO A. KARNER LEVEL : 001 *)
- (********************************************************************)
-
- PROCEDURE Recv_Char ( Ser_Chan : INTEGER ;
- VAR CH : CHAR ;
- VAR OK : BOOLEAN ) ;
-
- VAR
- Regs : Reg ;
-
- BEGIN (* PROC *)
- Regs.AH := 2 ;
- Regs.DX := Ser_Chan ;
- INTR ( $14 , Regs ) ;
- IF Regs.AH AND $80 = 0
- THEN BEGIN
- OK := TRUE ;
- CH := CHR ( Regs.AL ) ;
- END
- ELSE Ok := FALSE;
- IF Glb_Diag
- THEN BEGIN (* DIAG MODE *)
- CSF [ Ser_Chan ] := CSF [ Ser_Chan ] AND $9EFF;
- CSF [ Ser_Chan ] := CSF [ Ser_Chan ] OR ( Regs.AH SHL 8 ) ;
- Comm_Counters [ Ser_Chan ].Chars_Recieved :=
- Comm_Counters [ Ser_Chan ].Chars_Recieved + 1 ;
- END;
- END ; (* PROC *)