home *** CD-ROM | disk | FTP | other *** search
/ The Education Master 1994 (4th Edition) / EDUCATIONS_MASTER_4TH_EDITION.bin / files / progscal / tinypasc / stdio.hdr < prev    next >
Encoding:
Text File  |  1986-02-19  |  2.8 KB  |  94 lines

  1. ;  STDIO.HDR
  2. ;
  3. ;  READ and WRITE routines needed for Tiny Pascal
  4. ;
  5. SYS_RCHAR   PROC   NEAR   ; Read single character from stdin
  6.             MOV    AH,1
  7.             INT    021H
  8.             RET           ; value comes back in AL
  9.             ENDP
  10.  
  11. SYS_WRCHAR  PROC   NEAR   ; Write a single character (in DL) to stdin
  12.             MOV    AH,2
  13.             INT    021H
  14.             RET
  15.             ENDP
  16.  
  17. SYS_WHEX    PROC   NEAR   ; Write a single HEX number (in DL) to stdin
  18.             CMP    DL,10
  19.             JL     SYS_01
  20.             ADD    DL,55     ; 'A' - 10
  21.             CALL   SYS_WRCHAR
  22.             RET
  23. SYS_01      ADD    DL,'0'
  24.             CALL   SYS_WRCHAR
  25.             RET
  26.             ENDP
  27.  
  28. SYS_IWRT    PROC   NEAR   ; Write an integer to stdout in HEX
  29.             MOV    DH,4   ; used as a counter
  30. SYS_11      ROL    AX
  31.             ROL    AX
  32.             ROL    AX
  33.             ROL    AX
  34.             MOV    DL,AL
  35.             AND    DL,0FH
  36.             PUSH   AX
  37.             CALL   SYS_WHEX
  38.             POP    AX
  39.             DEC    DH
  40.             JNZ    SYS_11
  41.             RET
  42.             ENDP
  43.  
  44. SYS_SWRT    PROC   NEAR   ; Write a string terminated by 0 to stdout
  45. SYS_21      MOV    DL,0[BX]
  46.             CMP    DL,0
  47.             JNZ    SYS_22   ; zero terminator?
  48.             RET
  49. SYS_22      CALL   SYS_WRCHAR
  50.             INC    BX
  51.             JMPS   SYS_21
  52.             ENDP
  53.  
  54. SYS_WRTLN   PROC   NEAR    ; write carriage return/line feed to stdout
  55.             MOV    DL,0DH
  56.             CALL   SYS_WRCHAR
  57.             MOV    DL,0AH
  58.             CALL   SYS_WRCHAR
  59.             RET
  60.             ENDP
  61.  
  62. READ        PROC   NEAR         ; read a HEX number from STDIN
  63.             MOV    DX,0         ; clear DX
  64. READ_01     CALL   SYS_RCHAR    ; get one character in AL
  65.                     ; won't affect DX
  66.             CMP    AL,0DH
  67.             JNZ    READ_02
  68.             PUSH   DX           ; save the thing we've done
  69.             CALL   SYS_WRTLN    ; send a carriage return/line feed
  70.             POP    AX           ; was an ENTER
  71.             RET
  72. READ_02     CMP    AL,' '
  73.             JZ     READ_01      ; ignore spaces
  74.             SUB    AL,'0'       ; start conversion to binary
  75.             CMP    AL,9
  76.             JLE    READ_03
  77.             SUB    AL,7         ; turn 'A' into 0AH
  78. READ_03     CMP    AL,0FH
  79.             JLE    READ_04
  80.             SUB    AL,32        ; turn 'a' into 0AH
  81. READ_04     AND    AL,0FH       ; clip for good measure
  82.             SHL    DX           ; prepare DX for hex value
  83.             SHL    DX
  84.             SHL    DX
  85.             SHL    DX
  86.             OR     DL,AL
  87.             JMPS   READ_01      ; go do some more
  88.             ENDP
  89.  
  90. READLN      PROC   NEAR
  91.             JMPS   READ         ; does the same thing
  92.             ENDP
  93.  
  94.