home *** CD-ROM | disk | FTP | other *** search
-
- ; FILENAME: OPRCBYTE.ASM
- ; Copyright (c) 1988, 1989 by Borland International, Inc.
- ;
- ; Description: This module implements the routine ProcByte. ProcByte
- ; processes a byte.
- ; This module uses MASM mode syntax and standard segment directives.
- ;
- ; ASSEMBLY INSTRUCTIONS: To assemble this module use the following
- ; TASM command line.
- ;
- ; TASM oprcbyte
-
- include globals.inc
-
- _TEXT segment
-
- ProcByte proc
-
- ; This procedure processes an ASCII character.
- ; ProcByte performs the following tasks
- ; reads the byte
- ; determines the type of character
- ; and checks whether or not an error has occurred
- ;
- ; Input
- ; al - an ASCII character
- ; di - the buffer location
- ; InpBlk - input control block
- ; InpBuf - input buffer
- ; cx - bytes in the buffer
- ; Options - the options being used
- ; STR_BIT - constant set to strip high bits
- ; INP_EOF - designates the end of the input file
- ; InpSta - input status
- ; INP_ERR - constant set to designate an input error
- ; INP_EOL - constant set to designate an end-of-line condition
- ; Output
- ; di - the buffer is updated
- ; cx - updated
- ; ax - byte processed
- ; Registers modified
- ; ax
-
- ;--- read byte
-
- push cx
- push di
- lea bx, InpBlk ;input control block
- mov cx, 1 ;bytes to read
- lea di, InpBuf ;input buffer
- call FileRead ;read byte
- pop di
- pop cx
- jc probyt5 ;jump if error or EOF
-
- ;--- check type of character
-
- mov al, InpBuf ;load byte
- probyt1:
- cmp al, 32
- jb probyt2
- cmp al, 127
- ja probyt3
-
- ;--- normal byte, 31 < AL < 128
-
- call ByteNorm
- ret
-
- ;--- low byte, AL < 32
-
- probyt2:
- call ByteLow
- ret
-
- ;--- high byte, AL > 127
-
- probyt3:
- test Options, STR_BIT ;check if strip high bit
- jnz probyt4
- call ByteHigh
- ret
-
- probyt4:
- and al, 7fh ;clear bit
- jmp probyt1 ;loop back
-
- ;--- error reading
-
- probyt5:
- cmp ax, 0 ;check if EOF
- jne probyt7
- or InpSta, INP_EOF ;set end of file flag
- or cx, cx ;check if any bytes remaining
- jz probyt6
- or InpSta, INP_EOL ;set end of line also
- probyt6:
- ret
- ret
-
- probyt7:
- or InpSta, INP_ERR ;set error flag
- ret
-
- ProcByte endp
-
- _TEXT ends
-
- end