(C) ESC.  Run-time library.  E.A.Eremin, 1999

0100  E97D01         JMP    0280

      TEXTS:
0103  2F 30 0D 0A 24
       /  0 cr lf  $
0108  6F 76 65 72 66 6C 6F 77 0D 0A 24
       o  v  e  r  f  l  o  w cr lf  $
0113  69 6E 70 75 74 20 65 72 72 6F 72 0D 0A 24
       i  n  p  u  t     e  r  r  o  r cr lf  $
0121  69 6E 64 65 78 20 65 72 72 6F 72 0D 0A 24
       i  n  d  e  x     e  r  r  o  r cr lf  $

      CHECK /0
012F  83F900         CMP    CX,0000
0132  7401           JZ     0135
0134  C3             RET
0135  BA0301         MOV    DX,0103 ('/0')
0138  B409           MOV    AH,09
013A  CD21           INT    21
013C  CD20           INT    20

      OVERFLOW EXIT
013E  BA0801         MOV    DX,0108 ('overflow')
0141  EBF5           JMP    0138

      DIV/MOD
0143  21DB           AND    BX,BX
0145  74EE           JZ     0135
0147  52             PUSH   DX
0148  31D2           XOR    DX,DX
014A  F7FB           IDIV   BX
014C  89D3           MOV    BX,DX
014E  5A             POP    DX
014F  C3             RET

      ABS
0150  21C0           AND    AX,AX
0152  7902           JNS    0156
0154  F7D8           NEG    AX
0156  C3             RET

      WRITE INTEGER
0157  50             PUSH   AX
0158  53             PUSH   BX
0159  51             PUSH   CX
015A  52             PUSH   DX
015B  09C0           OR     AX,AX
015D  790A           JNS    0169
015F  F7D8           NEG    AX
0161  50             PUSH   AX
0162  B22D           MOV    DL,2D
0164  B402           MOV    AH,02
0166  CD21           INT    21
0168  58             POP    AX
0169  31C9           XOR    CX,CX
016B  BB0A00         MOV    BX,000A
016E  E8D2FF         CALL   0143
0171  53             PUSH   BX
0172  41             INC    CX
0173  21C0           AND    AX,AX
0175  75F4           JNZ    016B
0177  5A             POP    DX
0178  80C230         ADD    DL,30
017B  B402           MOV    AH,02
017D  CD21           INT    21
017F  E2F6           LOOP   0177
0181  5A             POP    DX
0182  59             POP    CX
0183  5B             POP    BX
0184  58             POP    AX
0185  C3             RET

      WRITE CHAR
0186  50             PUSH   AX
0187  52             PUSH   DX
0188  89C2           MOV    DX,AX
018A  B402           MOV    AH,02
018C  CD21           INT    21
018E  5A             POP    DX
018F  58             POP    AX
0190  C3             RET

      CR/LF
0191  50             PUSH   AX
0192  B80D00         MOV    AX,000D
0195  E8EEFF         CALL   0186
0198  B80A00         MOV    AX,000A
019B  E8E8FF         CALL   0186
019E  58             POP    AX
019F  C3             RET

      WRITE PAS STRING
01A0  5E             POP    SI
01A1  50             PUSH   AX
01A2  51             PUSH   CX
01A3  B500           MOV    CH,00
01A5  8A0C           MOV    CL,[SI]
01A7  46             INC    SI
01A8  8B04           MOV    AX,[SI]
01AA  46             INC    SI
01AB  E8D8FF         CALL   0186
01AE  E2F8           LOOP   01A8
01B0  59             POP    CX
01B1  58             POP    AX
01B2  FFE6           JMP    SI

      WRITE BOOLEAN
01B4  09C0           OR     AX,AX
01B6  750A           JNZ    01C2
01B8  E8E5FF         CALL   01A0
01BB  0566616C7365   05 false
01C1  C3             RET
01C2  E8DBFF         CALL   01A0
01C5  0474727565     04 true
01CA  C3             RET

      READ CHAR
01CB  B401           MOV    AH,01
01CD  CD21           INT    21
01CF  C3             RET

      PRINT 'input error'
01D0  BA1301         MOV    DX,0113 ('input error')
01D3  B409           MOV    AH,09
01D5  CD21           INT    21
01D7  C3             RET
      RRINT 'overflow'
01D8  BA0801         MOV    DX,0108 ('overflow')
01DB  EBF6           JMP    01D3

      READ INTEGER
01DD-01E5 buffer
01E6  53             PUSH   BX
01E7  51             PUSH   CX
01E8  52             PUSH   DX
01E9  56             PUSH   SI
01EA  BBDD01         MOV    BX,01DD
01ED  C60707         MOV    [BX],07
01F0  89DA           MOV    DX,BX
01F2  B40A           MOV    AH,0A
01F4  CD21           INT    21
01F6  E898FF         CALL   0191
01F9  43             INC    BX
01FA  8A0F           MOV    CL,[BX]
01FC  B500           MOV    CH,00
01FE  43             INC    BX
01FF  31F6           XOR    SI,SI
0201  803F2D         CMP    [BX],2D
0204  7503           JNZ    0209
0206  46             INC    SI
0207  43             INC    BX
0208  49             DEC    CX
0209  09C9           OR     CX,CX
020B  7505           JNZ    0212
020D  E8C0FF         CALL   01D0
0210  EBD8           JMP    01EA
0212  31C0           XOR    AX,AX
0214  BA0A00         MOV    DX,000A
0217  F7E2           MUL    DX
0219  7305           JNC    0220
021B  E8BAFF         CALL   01D8
021E  EBCA           JMP    01EA
0220  8A17           MOV    DL,[BX]
0222  80EA30         SUB    DL,30
0225  72E6           JC     020D
0227  80FA0A         CMP    DL,0A
022A  73E1           JNC    020D
022C  01D0           ADD    AX,DX
022E  43             INC    BX
022F  E2E3           LOOP   0214
0231  09C0           OR     AX,AX
0233  78E6           JS     021B
0235  09F6           OR     SI,SI
0237  7402           JZ     023B
0239  F7D8           NEG    AX
023B  5E             POP    SI
023C  5A             POP    DX
023D  59             POP    CX
023E  5B             POP    BX
023F  C3             RET

      CHECK INDEX
0240  8EC6           MOV    ES,SI
0242  89E6           MOV    SI,SP
0244  3B5C04         CMP    BX,[SI+04]
0247  720D           JC     0256
0249  395C02         CMP    [SI+02],BX
024C  7208           JC     0256
024E  8CC6           MOV    SI,ES
0250  07             POP    ES
0251  83C404         ADD    SP,0004
0254  06             PUSH   ES
0255  C3             RET
0256  BA2101         MOV    DX,0121 ('index error')
0259  E9DCFE         JMP    0138
