db HEX (00)
dw _int21_00
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Console Input With Echo.
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ db HEX (01)
+ dw _int21_01
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Display Output.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
xor al, al
jmp _int21_4C
+;******************************************************************************
+; @function _int21_01
+; @brief Console Input With Echo
+;******************************************************************************
+_int21_01:
+
+ mov al, cs:[_int21_01.scan]
+
+ and al, al
+ jz _int21_01.wait
+
+ mov byte ptr cs:[_int21_01.scan], 0
+ jmp _int21_01.output
+
+_int21_01.wait:
+
+ xor ah, ah
+ int HEX (16)
+
+ cmp ax, HEX (2E03)
+ jne _int21_01.char_ok
+
+ mov al, '^'
+ call _writechr
+
+ mov al, 'C'
+ call _writechr
+
+ mov al, HEX (0D)
+ call _writechr
+
+ mov al, HEX (0A)
+ call _writechr
+
+ jmp _spawn_int23
+
+_int21_01.char_ok:
+
+ mov cs:[_int21_01.scan], ah
+
+ and al, al
+ jz _int21_01.output
+
+ mov byte ptr cs:[_int21_01.scan], 0
+
+_int21_01.output:
+
+ cmp al, HEX (09)
+ jne _int21_01.no_tab
+
+ push ax
+ push bx
+ push cx
+ push dx
+
+ mov ah, HEX (03)
+ xor bh, bh
+ int HEX (10)
+
+ xor ah, ah
+ mov al, dl
+ xor dx, dx
+
+ mov cx, 4
+ div cx
+
+ mov cx, 4
+ sub cx, dx
+
+_int21_01.tab_loop:
+
+ mov al, ' '
+ call _writechr
+
+ loop _int21_01.tab_loop
+
+_int21_01.tab_done:
+
+ pop dx
+ pop cx
+ pop bx
+ pop ax
+
+ jmp _int21_01.done
+
+_int21_01.no_tab:
+
+ call _writechr
+
+_int21_01.done:
+
+ mov ah, HEX (01)
+ iret
+
+_int21_01.scan: db HEX (00)
+
;******************************************************************************
; @function _int21_02
; @brief Display Ouput