     1                                  ; ****************************************************************************
     2                                  ; stdiotst.s - TRDOS 386 (TRDOS v2.0) Kernel - SYSSTDIO function test
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 23/08/2024
     6                                  ;
     7                                  ; [ Last Modification: 19/09/2024 ]
     8                                  ;
     9                                  ; ****************************************************************************
    10                                  
    11                                  ; 20/08/2024 ; TRDOS 386 v2.0.9 (exit code)
    12                                  ; 20/08/2017
    13                                  ; 01/03/2017
    14                                  ; 16/10/2016
    15                                  ; 29/04/2016
    16                                  ; TRDOS 386 system calls (temporary list!)
    17                                  _ver 	equ 0
    18                                  _exit 	equ 1
    19                                  _fork 	equ 2
    20                                  _read 	equ 3
    21                                  _write	equ 4
    22                                  _open	equ 5
    23                                  _close 	equ 6
    24                                  _wait 	equ 7
    25                                  _creat 	equ 8
    26                                  _link 	equ 9
    27                                  _unlink	equ 10
    28                                  _exec	equ 11
    29                                  _chdir	equ 12
    30                                  _time 	equ 13
    31                                  _mkdir 	equ 14
    32                                  _chmod	equ 15
    33                                  _chown	equ 16
    34                                  _break	equ 17
    35                                  _stat	equ 18
    36                                  _seek	equ 19
    37                                  _tell 	equ 20
    38                                  _mount	equ 21
    39                                  _umount	equ 22
    40                                  _setuid	equ 23
    41                                  _getuid	equ 24
    42                                  _stime	equ 25
    43                                  _quit	equ 26
    44                                  _intr	equ 27
    45                                  _fstat	equ 28
    46                                  _emt 	equ 29
    47                                  _mdate 	equ 30
    48                                  _video 	equ 31
    49                                  _audio	equ 32
    50                                  _timer	equ 33
    51                                  _sleep	equ 34
    52                                  _msg    equ 35
    53                                  _geterr	equ 36
    54                                  _fpsave	equ 37
    55                                  _pri	equ 38
    56                                  _rele	equ 39
    57                                  _fff	equ 40
    58                                  _fnf	equ 41
    59                                  _alloc	equ 42
    60                                  _dalloc equ 43
    61                                  _calbac equ 44
    62                                  _dma	equ 45
    63                                  _stdio  equ 46	;  TRDOS 386 v2.0.9
    64                                  
    65                                  %macro sys 1-4
    66                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)
    67                                      ; 03/09/2015
    68                                      ; 13/04/2015
    69                                      ; Retro UNIX 386 v1 system call.
    70                                      %if %0 >= 2
    71                                          mov ebx, %2
    72                                          %if %0 >= 3
    73                                              mov ecx, %3
    74                                              %if %0 = 4
    75                                                 mov edx, %4
    76                                              %endif
    77                                          %endif
    78                                      %endif
    79                                      mov eax, %1
    80                                      ;int 30h
    81                                      int 40h ; TRDOS 386 (TRDOS v2.0)
    82                                  %endmacro
    83                                  
    84                                  ; TRDOS 386 (and Retro UNIX 386 v1) system call format:
    85                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    86                                  
    87                                  ;========================================================================
    88                                  ; EXEC TEST - CODE
    89                                  ;========================================================================
    90                                  
    91                                  [BITS 32] ; 32-bit intructions
    92                                  
    93                                  [ORG 0] 
    94                                  
    95                                  START_CODE:
    96                                  	sys	_msg, program, len0, 0Bh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000000 BB[DA080000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000005 B92D000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000000A BA0B000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000000F B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000014 CD40                <1>  int 40h
    97                                  	sys	_msg, owner, 255, 0Eh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000016 BB[08090000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000001B B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000020 BA0E000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000025 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000002A CD40                <1>  int 40h
    98                                  
    99                                  	; If TRDOS 386 kernel version < 2.0.9 ..
   100                                  	; (because sysstdio sysstem call was not existing before v2.0.9)
   101                                  	; Program will be terminated with Invalid Function Call error msg
   102                                  
   103                                  	; sysstdio Reset STDIN & STDOUT redirections
   104                                  	; NOTE: In fact, there is not a redirection at start stage of
   105                                  	; a program. (Redirections are done in a program.)
   106                                  	; ((I am putting this here for IFC test.))
   107                                  	sys	_stdio, 4, 0  ; Reset STDIN redirection
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000002C BB04000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000031 B900000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000036 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 0000003B CD40                <1>  int 40h
   108                                  	sys	_stdio, 5, 0  ; Reset STDOUT redirection
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000003D BB05000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000042 B900000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000047 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 0000004C CD40                <1>  int 40h
   109                                  
   110                                  restart:
   111                                  	sys	_msg, press_F_key, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000004E BB[3B090000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000053 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000058 BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000005D B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000062 CD40                <1>  int 40h
   112                                  	sys	_msg, functions1, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000064 BB[76090000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000069 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000006E BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000073 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000078 CD40                <1>  int 40h
   113                                  	sys	_msg, functions2, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000007A BB[310A0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000007F B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000084 BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000089 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000008E CD40                <1>  int 40h
   114                                  	sys	_msg, functions3, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000090 BB[0C0B0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000095 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000009A BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000009F B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000000A4 CD40                <1>  int 40h
   115                                  
   116                                  getchar_@:
   117                                  	; getchar
   118                                  	;mov	ah, 10h
   119                                  	;int	32h
   120                                  
   121                                  	; stdio getchar (TRDOS 386 Kernel v2.0.9 and later)
   122                                  	;mov	bl, 6	; read character (ascii and scancode) on stdin
   123                                  			; -no redirection, wait-
   124                                  	sys	_stdio, 6
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000000A6 BB06000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000000AB B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000000B0 CD40                <1>  int 40h
   125                                  
   126 000000B2 3C1B                    	cmp	al, 1Bh ; ESC key
   127 000000B4 7471                    	je	short terminate
   128                                  
   129 000000B6 80FC3B                  	cmp	ah, 3Bh ; F1 key
   130 000000B9 72EB                    	jb	short getchar_@
   131 000000BB 80FC44                  	cmp	ah, 44h ; F10 key
   132 000000BE 77E6                    	ja	short getchar_@
   133                                  
   134 000000C0 88E3                    	mov	bl, ah
   135 000000C2 80EB3B                  	sub	bl, 3Bh
   136 000000C5 C1E302                  	shl	ebx, 2
   137 000000C8 81C3[4C010000]          	add	ebx, function_table
   138 000000CE FF13                    	call	dword [ebx]
   139                                  	sys	_msg, crlf, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000000D0 BB[F80C0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000000D5 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000000DA BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000000DF B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000000E4 CD40                <1>  int 40h
   140                                  	sys	_msg, continue_msg, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000000E6 BB[C90C0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000000EB B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000000F0 BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000000F5 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000000FA CD40                <1>  int 40h
   141                                  	sys	_stdio, 6
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000000FC BB06000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000101 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000106 CD40                <1>  int 40h
   142 00000108 3C1B                    	cmp	al, 1Bh ; ESC key
   143 0000010A 7405                    	je	short _ok
   144 0000010C E93DFFFFFF              	jmp	restart
   145                                  
   146                                  getchar_@@:
   147                                  
   148                                  _ok:
   149                                  	sys	_msg, msg_ok, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000111 BB[18130000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000116 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000011B BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000120 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000125 CD40                <1>  int 40h
   150                                  terminate:
   151                                  	sys	_msg, crlf, 2, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000127 BB[F80C0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000012C B902000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000131 BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000136 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000013B CD40                <1>  int 40h
   152                                  
   153                                  	sys	_exit, 0  ; ebx = exit code
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000013D BB00000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000142 B801000000          <1>  mov eax, %1
    80                              <1> 
    81 00000147 CD40                <1>  int 40h
   154                                  	;sys	_exit
   155                                  here:
   156 00000149 90                      	nop
   157 0000014A EBFD                    	jmp	short here
   158                                  
   159                                  function_table:
   160 0000014C [74010000]              	dd	F1_function
   161 00000150 [E1010000]              	dd	F2_function
   162 00000154 [52020000]              	dd	F3_function
   163 00000158 [38050000]              	dd	F4_function
   164 0000015C [10040000]              	dd	F5_function
   165 00000160 [B5050000]              	dd	F6_function
   166 00000164 [3E070000]              	dd	F7_function
   167 00000168 [0B070000]              	dd	F8_function
   168 0000016C [E6050000]              	dd	F9_function
   169 00000170 [7D060000]              	dd	F10_function
   170                                  
   171                                  F1_function:
   172                                  	sys	_stdio, 4, 0 ; reset STDIN
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000174 BB04000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000179 B900000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000017E B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000183 CD40                <1>  int 40h
   173                                  	; ecx = 0
   174                                  	sys	_stdio, 5    ; reset STDOUT
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000185 BB05000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000018A B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 0000018F CD40                <1>  int 40h
   175                                  
   176                                  	sys	_msg, F1_header, 255, 0Ch
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000191 BB[FB0C0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000196 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000019B BA0C000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000001A0 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000001A5 CD40                <1>  int 40h
   177                                  	sys	_msg, F1_text, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000001A7 BB[520D0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000001AC B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000001B1 BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000001B6 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000001BB CD40                <1>  int 40h
   178                                  
   179 000001BD 29C9                    	sub	ecx, ecx
   180 000001BF B50F                    	mov	ch, 0Fh ; color = white
   181                                  F1_nextchar:
   182                                  	sys	_stdio, 6  ; read character (from STDIN)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000001C1 BB06000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000001C6 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000001CB CD40                <1>  int 40h
   183 000001CD 88C1                    	mov	cl, al
   184                                  	sys	_stdio, 8  ; write character (to STDOUT)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000001CF BB08000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000001D4 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000001D9 CD40                <1>  int 40h
   185 000001DB 80F90D                  	cmp	cl, 0Dh  ; ENTER/CR key
   186 000001DE 75E1                    	jne	short F1_nextchar
   187 000001E0 C3                      	retn
   188                                  
   189                                  F2_function:
   190                                  	sys	_stdio, 4, 0 ; reset STDIN
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000001E1 BB04000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000001E6 B900000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000001EB B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000001F0 CD40                <1>  int 40h
   191                                  	; ecx = 0
   192                                  	sys	_stdio, 5    ; reset STDOUT
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000001F2 BB05000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000001F7 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000001FC CD40                <1>  int 40h
   193                                  
   194                                  	sys	_msg, F2_header, 255, 0Ch
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000001FE BB[250D0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000203 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000208 BA0C000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000020D B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000212 CD40                <1>  int 40h
   195                                  	sys	_msg, F2_text, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000214 BB[520D0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000219 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000021E BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000223 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000228 CD40                <1>  int 40h
   196                                  
   197 0000022A 29C9                    	sub	ecx, ecx
   198 0000022C B50F                    	mov	ch, 0Fh ; color = white
   199                                  F2_nextchar:	
   200                                  	sys	_stdio, 7  ; read character (from STDIN)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000022E BB07000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000233 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000238 CD40                <1>  int 40h
   201 0000023A 21C0                    	and	eax, eax
   202 0000023C 74F0                    	jz	short F2_nextchar ; not a character input
   203 0000023E 88C1                    	mov	cl, al
   204                                  	sys	_stdio, 8  ; write character (to STDOUT)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000240 BB08000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000245 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 0000024A CD40                <1>  int 40h
   205 0000024C 80F90D                  	cmp	cl, 0Dh  ; ENTER/CR key
   206 0000024F 75DD                    	jne	short F2_nextchar
   207 00000251 C3                      	retn
   208                                  
   209                                  F3_function:
   210                                  	sys	_msg, F3_header, 255, 0Ch
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000252 BB[E00D0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000257 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000025C BA0C000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000261 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000266 CD40                <1>  int 40h
   211                                  	sys	_msg, F3_text, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000268 BB[150E0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000026D B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000272 BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000277 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000027C CD40                <1>  int 40h
   212                                  F6_continue:
   213                                  	sys	_msg, stdio_at_first, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000027E BB[460E0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000283 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000288 BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000028D B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000292 CD40                <1>  int 40h
   214                                  
   215                                  	; create STDIO.TXT or truncate it if it is existing
   216                                  	sys	_creat, stdio_file, 0 ; create normal file
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000294 BB[860E0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000299 B900000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000029E B808000000          <1>  mov eax, %1
    80                              <1> 
    81 000002A3 CD40                <1>  int 40h
   217 000002A5 7317                    	jnc	short F3_continue_1 ; eax = file handle
   218                                  F3_error:
   219                                  	sys	_msg, create_error, 255, 0Dh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000002A7 BB[900E0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000002AC B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000002B1 BA0D000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000002B6 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000002BB CD40                <1>  int 40h
   220 000002BD C3                      	retn
   221                                  
   222                                  F3_continue_1:
   223                                  	; 18/09/2024 (TRDOS 386 v2.0.9)
   224                                  	;sys	_close, eax 
   225                                  	;	; needed for now (TRDOS 386 v2.0.9 defect/bug)
   226                                  	;sys	_open, stdio_file, 1 ; open for write
   227                                  	;jc	short F3_error
   228                                  	
   229 000002BE 40                      	inc	eax ; file descriptor + 1 (for SYSSTDIO)
   230 000002BF A3[14130000]            	mov	[filehandle], eax
   231                                  	sys	_intr, 0 ; CRTL+BRK disabled
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000002C4 BB00000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000002C9 B81B000000          <1>  mov eax, %1
    80                              <1> 
    81 000002CE CD40                <1>  int 40h
   232                                  	sys	_msg, redir_option_hdr, 255, 0Eh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000002D0 BB[810B0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000002D5 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000002DA BA0E000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000002DF B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000002E4 CD40                <1>  int 40h
   233                                  	sys	_msg, redir_option, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000002E6 BB[A20B0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000002EB B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000002F0 BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000002F5 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000002FA CD40                <1>  int 40h
   234                                  
   235                                  	; write SAMPLE text
   236                                  	; redirect STDOUT to the (open) file
   237                                  	sys	_stdio, 5, [filehandle]
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000002FC BB05000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000301 8B0D[14130000]      <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000307 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 0000030C CD40                <1>  int 40h
   238                                  
   239                                  F3_continue_2:
   240                                  	sys	_stdio, 6 ; read character (from STDIN)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000030E BB06000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000313 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000318 CD40                <1>  int 40h
   241 0000031A 3C0D                    	cmp	al, 0Dh ; ENTER
   242 0000031C 7446                    	je	short F3_continue_4
   243 0000031E 3C1B                    	cmp	al, 1Bh ; ESC
   244 00000320 75EC                    	jne	short F3_continue_2
   245                                  
   246                                  	sys	_msg, redir_text_hdr, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000322 BB[E10B0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000327 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000032C BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000331 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000336 CD40                <1>  int 40h
   247                                  	
   248 00000338 BE[070C0000]            	mov	esi, redir_text
   249 0000033D BFC1000000              	mov	edi, redir_text_size
   250                                  F3_continue_3:
   251 00000342 AC                      	lodsb	; load a character from the sample text
   252                                  	; write to redirected STDOUT (STDIO.TXT)
   253                                  	sys	_stdio, 2, eax
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000343 BB02000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000348 89C1                <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000034A B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 0000034F CD40                <1>  int 40h
   254                                  	; 18/09/2024
   255                                  	; Also write to STDERR 
   256                                  	;sys	_stdio, 3 ; ecx = character to be written
   257 00000351 B50B                    	mov	ch, 0Bh ; color (cyan)
   258                                  	sys	_stdio, 8 ; write char and color to STDERR
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000353 BB08000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000358 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 0000035D CD40                <1>  int 40h
   259 0000035F 4F                      	dec	edi
   260 00000360 75E0                    	jnz	short F3_continue_3
   261 00000362 EB6A                    	jmp	short F3_continue_9
   262                                  
   263                                  F3_continue_4:
   264                                  	; read from STDIN
   265                                  	sys	_msg, F3_enter_msg, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000364 BB[110F0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000369 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000036E BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000373 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000378 CD40                <1>  int 40h
   266                                  F3_continue_5:
   267                                  	sys	_stdio, 6 ; read char (no redir, wait)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000037A BB06000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000037F B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000384 CD40                <1>  int 40h
   268 00000386 3C20                    	cmp	al, 20h
   269 00000388 721E                    	jb	short F3_continue_6
   270                                  	; write to redirected STDOUT (STDIO.TXT)
   271                                  	sys	_stdio, 2, eax
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000038A BB02000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000038F 89C1                <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000391 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000396 CD40                <1>  int 40h
   272                                  	;mov	eax, ecx
   273                                  	; echo to STDERR (colored)
   274 00000398 B40F                    	mov	ah, 0Fh ; white
   275                                  	sys	_stdio, 8, eax	 
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000039A BB08000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000039F 89C1                <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000003A1 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000003A6 CD40                <1>  int 40h
   276                                  F3_continue_6:
   277 000003A8 3C0D                    	cmp	al, 0Dh
   278 000003AA 7406                    	je	short F3_continue_8
   279                                  F3_continue_7:
   280 000003AC 3C1B                    	cmp	al, 1Bh
   281 000003AE 75CA                    	jne	short F3_continue_5
   282 000003B0 B00D                    	mov	al, 0Dh
   283                                  F3_continue_8:
   284                                  	; AL = CR
   285                                  	sys	_stdio, 2, eax
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000003B2 BB02000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000003B7 89C1                <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000003B9 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000003BE CD40                <1>  int 40h
   286 000003C0 B10A                    	mov	cl, 0Ah ; LF
   287                                  	sys	_stdio, 2
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000003C2 BB02000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000003C7 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000003CC CD40                <1>  int 40h
   288                                  	;jmp	short F3_continue_9
   289                                  
   290                                  F3_continue_9:
   291                                  	; close STDIO.TXT file
   292 000003CE 8B1D[14130000]          	mov	ebx, [filehandle] ; file descriptor + 1
   293 000003D4 4B                      	dec	ebx ; file descriptor (0 based)
   294                                  	sys	_close
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71                              <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000003D5 B806000000          <1>  mov eax, %1
    80                              <1> 
    81 000003DA CD40                <1>  int 40h
   295                                  
   296                                  	sys	_intr, 1 ; CRTL+BRK enabled again
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000003DC BB01000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000003E1 B81B000000          <1>  mov eax, %1
    80                              <1> 
    81 000003E6 CD40                <1>  int 40h
   297                                  
   298                                  	; cancel STDOUT redirection
   299                                  	sys	_stdio, 5, 0 ; reset stdout
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000003E8 BB05000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000003ED B900000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000003F2 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000003F7 CD40                <1>  int 40h
   300                                  	
   301                                  	; written message (success/completed msg)
   302                                  	sys	_msg, msg_written, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000003F9 BB[D10B0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000003FE B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000403 BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000408 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000040D CD40                <1>  int 40h
   303 0000040F C3                      	retn
   304                                  
   305                                  F5_function:
   306                                  	sys	_msg, F5_header, 255, 0Ch
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000410 BB[DF0F0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000415 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000041A BA0C000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000041F B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000424 CD40                <1>  int 40h
   307                                  	sys	_msg, F5_text, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000426 BB[FF0F0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000042B B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000430 BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000435 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000043A CD40                <1>  int 40h
   308                                  	
   309                                  	; CL = 0E7h -> except volume names and directories
   310                                  	; CH = 0 -> 24 bytes buffer
   311                                  	sys	_fff, stdio_file, 0E7h, fff_buffer
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000043C BB[860E0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000441 B9E7000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000446 BA[23090000]        <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000044B B828000000          <1>  mov eax, %1
    80                              <1> 
    81 00000450 CD40                <1>  int 40h
   312 00000452 7230                    	jc	short F5_nf_error
   313                                  
   314 00000454 837A0600                	cmp	dword [edx+6], 0 ; file size
   315 00000458 7641                    	jna	short F5_zf_error
   316                                  
   317                                  	sys	_open, stdio_file, 0 ; open for read
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000045A BB[860E0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000045F B900000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000464 B805000000          <1>  mov eax, %1
    80                              <1> 
    81 00000469 CD40                <1>  int 40h
   318 0000046B 7345                    	jnc	short F5_continue_1
   319                                  	; access denied error !?
   320                                  F5_error:
   321                                  	sys	_msg, open_error, 255, 0Dh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000046D BB[BA0E0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000472 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000477 BA0D000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000047C B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000481 CD40                <1>  int 40h
   322 00000483 C3                      	retn
   323                                  
   324                                  F5_nf_error:
   325                                  	sys	_msg, not_found, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000484 BB[FA0E0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000489 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000048E BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000493 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000498 CD40                <1>  int 40h
   326 0000049A C3                      	retn
   327                                  F5_zf_error:
   328                                  	sys	_msg, zero_file, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000049B BB[DA0E0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000004A0 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000004A5 BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000004AA B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000004AF CD40                <1>  int 40h
   329 000004B1 C3                      	retn
   330                                  
   331                                  F5_continue_1:
   332 000004B2 40                      	inc	eax ; file descriptor + 1 (for SYSSTDIO)
   333 000004B3 A3[14130000]            	mov	[filehandle], eax
   334                                  	
   335                                  	sys	_intr, 0 ; CRTL+BRK disabled
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000004B8 BB00000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000004BD B81B000000          <1>  mov eax, %1
    80                              <1> 
    81 000004C2 CD40                <1>  int 40h
   336                                  	; redirect STDIN to the (open) file
   337                                  	sys	_stdio, 4, [filehandle]
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000004C4 BB04000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000004C9 8B0D[14130000]      <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000004CF B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000004D4 CD40                <1>  int 40h
   338                                  F5_continue_2:
   339                                  	sys	_stdio, 0 ; read character (from STDIN)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000004D6 BB00000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000004DB B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000004E0 CD40                <1>  int 40h
   340 000004E2 7212                    	jc	short F5_continue_3 ; error or EOF
   341                                  
   342                                  	; al  = character
   343 000004E4 B40B                    	mov	ah, 0Bh ; character color (cyan)
   344                                  	; write character/byte to STDOUT (non redirected)
   345                                  	sys	_stdio, 8, eax
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000004E6 BB08000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000004EB 89C1                <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000004ED B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000004F2 CD40                <1>  int 40h
   346                                  
   347 000004F4 EBE0                    	jmp	short F5_continue_2
   348                                  
   349                                  F5_continue_3:
   350                                  	; close STDIO.TXT file
   351 000004F6 8B1D[14130000]          	mov	ebx, [filehandle]
   352 000004FC 4B                      	dec	ebx ; file descriptor (0 based)
   353                                  	sys	_close
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71                              <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000004FD B806000000          <1>  mov eax, %1
    80                              <1> 
    81 00000502 CD40                <1>  int 40h
   354                                  
   355                                  	sys	_intr, 1 ; CRTL+BRK enabled again
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000504 BB01000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000509 B81B000000          <1>  mov eax, %1
    80                              <1> 
    81 0000050E CD40                <1>  int 40h
   356                                  
   357                                  	; cancel STDIN redirection
   358                                  	sys	_stdio, 4, 0 ; reset stdin
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000510 BB04000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000515 B900000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000051A B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 0000051F CD40                <1>  int 40h
   359                                  F4_ok:
   360                                  	sys	_msg, msg_ok, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000521 BB[18130000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000526 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000052B BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000530 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000535 CD40                <1>  int 40h
   361 00000537 C3                      	retn
   362                                  
   363                                  F4_function:
   364                                  	sys	_msg, F4_header, 255, 0Ch
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000538 BB[F9090000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000053D B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000542 BA0C000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000547 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000054C CD40                <1>  int 40h
   365                                  
   366 0000054E BE[2F100000]            	mov	esi, F4_text_1
   367                                  F4_nextchar_1:
   368 00000553 AC                      	lodsb
   369 00000554 08C0                    	or	al, al
   370 00000556 7410                    	jz	short F4_function_@	
   371                                  	sys	_stdio, 3, eax  ; write character (to STDERR)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000558 BB03000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000055D 89C1                <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000055F B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000564 CD40                <1>  int 40h
   372 00000566 EBEB                    	jmp	short F4_nextchar_1
   373                                  
   374                                  F4_function_@:
   375 00000568 81FE[49100000]          	cmp	esi, F4_text_1_end
   376 0000056E 7507                    	jne	short F4_function_@@
   377 00000570 BE[B50D0000]            	mov	esi, F4_text_2
   378 00000575 EBDC                    	jmp	short F4_nextchar_1
   379                                  
   380                                  F4_function_@@:
   381                                  	sys	_msg, F4_string, F4_string_len, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000577 BB[49100000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000057C B908000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000581 BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000586 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000058B CD40                <1>  int 40h
   382                                  F4_nextchar_2:	
   383                                  	sys	_stdio, 6 ; read character (from STDIN) -wait-
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000058D BB06000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000592 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000597 CD40                <1>  int 40h
   384 00000599 3C1B                    	cmp	al, 1Bh  ; ESC
   385 0000059B 7484                    	je	short F4_ok
   386 0000059D 88C1                    	mov	cl, al
   387                                  	sys	_stdio, 3  ; write character (to STDERR)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000059F BB03000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000005A4 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000005A9 CD40                <1>  int 40h
   388 000005AB 80F90D                  	cmp	cl, 0Dh  ; ENTER/CR key
   389 000005AE 75DD                    	jne	short F4_nextchar_2
   390 000005B0 E96CFFFFFF              	jmp	F4_ok
   391                                  
   392                                  F6_function:
   393                                  	; same with F3 (except the caption)
   394                                  	sys	_msg, F6_header, 255, 0Ch
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000005B5 BB[52100000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000005BA B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000005BF BA0C000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000005C4 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000005C9 CD40                <1>  int 40h
   395                                  	sys	_msg, F6_text, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000005CB BB[73100000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000005D0 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000005D5 BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000005DA B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000005DF CD40                <1>  int 40h
   396 000005E1 E998FCFFFF              	jmp	F6_continue
   397                                  
   398                                  F9_function:
   399                                  	sys	_msg, F9_header, 255, 0Ch
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000005E6 BB[A4100000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000005EB B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000005F0 BA0C000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000005F5 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000005FA CD40                <1>  int 40h
   400                                  
   401                                  	; select color message
   402                                  	sys	_msg, F9_text, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000005FC BB[D3100000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000601 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000606 BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000060B B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000610 CD40                <1>  int 40h
   403                                  
   404 00000612 BE[D0080000]            	mov	esi, colortable
   405                                  F9_function_@:
   406                                  	sys	_stdio, 6 ; read char (from STDIN) -wait-
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000617 BB06000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000061C B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000621 CD40                <1>  int 40h
   407                                  	; ah = scan code
   408                                  	
   409 00000623 3C1B                    	cmp	al, 1Bh  ; ESC
   410 00000625 7451                    	je	short F9_ok
   411 00000627 3C0D                    	cmp	al, 0Dh	 ; ENTER/CR key
   412 00000629 740E                    	je	short F9_function_@@
   413                                  
   414 0000062B 3C30                    	cmp	al, '0'
   415 0000062D 72E8                    	jb	short F9_function_@
   416 0000062F 3C39                     	cmp	al, '9'
   417 00000631 77E4                    	ja	short F9_function_@
   418                                  
   419 00000633 30E4                    	xor	ah, ah	; clear scan code
   420 00000635 2C30                    	sub	al, '0'
   421                                  	;jz	short F9_string
   422 00000637 01C6                    	add	esi, eax
   423                                  
   424                                  F9_function_@@:
   425                                  	sys	_msg, F4_string, F4_string_len, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000639 BB[49100000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000063E B908000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000643 BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000648 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000064D CD40                <1>  int 40h
   426                                  
   427                                  F9_nextchar:
   428                                  	sys	_stdio, 7 ; read char (from STDIN) -no wait-
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000064F BB07000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000654 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000659 CD40                <1>  int 40h
   429                                  	; ah = scan code
   430                                  
   431 0000065B 21C0                    	and	eax, eax
   432 0000065D 74F0                    	jz	short F9_nextchar ; not a character input
   433                                  
   434 0000065F 3C1B                    	cmp	al, 1Bh  ; ESC
   435 00000661 7415                    	je	short F9_ok
   436                                  
   437 00000663 88C1                    	mov	cl, al
   438 00000665 8A2E                    	mov	ch, [esi] ; colortable + index
   439                                  	sys	_stdio, 8 ; write char & color (to STDOUT)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000667 BB08000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000066C B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000671 CD40                <1>  int 40h
   440 00000673 80F90D                  	cmp	cl, 0Dh  ; ENTER/CR key
   441 00000676 75D7                    	jne	short F9_nextchar
   442                                  F9_ok:
   443 00000678 E9A4FEFFFF              	jmp	F4_ok ; write 'OK' & return back to the menu 
   444                                  	
   445                                  F10_function:
   446                                  	sys	_msg, F10_header, 255, 0Ch
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000067D BB[470B0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000682 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000687 BA0C000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000068C B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000691 CD40                <1>  int 40h
   447                                  	sys	_msg, F10_text_1, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000693 BB[AF110000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000698 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000069D BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000006A2 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000006A7 CD40                <1>  int 40h
   448                                  	sys	_msg, F10_text_2, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000006A9 BB[DF110000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000006AE B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000006B3 BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000006B8 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000006BD CD40                <1>  int 40h
   449                                  
   450 000006BF 31F6                    	xor	esi, esi
   451 000006C1 31D2                    	xor	edx, edx
   452                                  F10_nextchar:
   453 000006C3 B50F                    	mov	ch, 0Fh ; white 
   454                                  F10_nextchar_@:
   455                                  	sys	_stdio, 0 ; read char (from STDIN) -wait-
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000006C5 BB00000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000006CA B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000006CF CD40                <1>  int 40h
   456                                  
   457 000006D1 3C1B                    	cmp	al, 1Bh  ; ESC
   458 000006D3 7431                    	je	short F10_ok
   459                                  
   460 000006D5 09F6                    	or	esi, esi
   461 000006D7 7502                    	jnz	short F10_nextchar_@@
   462                                  
   463 000006D9 89C6                    	mov	esi, eax  ; the 1st char
   464                                  F10_nextchar_@@:
   465 000006DB 88C1                    	mov	cl, al
   466                                  	sys	_stdio, 8 ; write char & color (to STDOUT)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000006DD BB08000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000006E2 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 000006E7 CD40                <1>  int 40h
   467 000006E9 80F90D                  	cmp	cl, 0Dh  ; ENTER/CR key
   468 000006EC 7418                    	je	short F10_ok
   469 000006EE 42                      	inc	edx
   470 000006EF 83FA04                  	cmp	edx, 4
   471 000006F2 75CF                    	jne	short F10_nextchar
   472 000006F4 89F1                    	mov	ecx, esi
   473                                  	sys	_stdio, 9 ; ungetchar (the 1st char) 
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000006F6 BB09000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000006FB B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000700 CD40                <1>  int 40h
   474 00000702 B50B                    	mov	ch, 0Bh ; cyan
   475 00000704 EBBF                    	jmp	short F10_nextchar_@
   476                                  
   477                                  F10_ok:
   478 00000706 E916FEFFFF              	jmp	F4_ok
   479                                  
   480                                  F8_function:
   481                                  	sys	_msg, F8_header, 255, 0Ch
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000070B BB[C40A0000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000710 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000715 BA0C000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000071A B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000071F CD40                <1>  int 40h
   482                                  	sys	_msg, F8_text, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000721 BB[A5120000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000726 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000072B BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000730 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000735 CD40                <1>  int 40h
   483 00000737 BF07000000              	mov	edi, 7 ; read char (no wait)
   484 0000073C EB31                    	jmp	short F8_getchar
   485                                  
   486                                  F7_function:
   487                                  	sys	_msg, F7_header, 255, 0Ch
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000073E BB[60120000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000743 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000748 BA0C000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000074D B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000752 CD40                <1>  int 40h
   488                                  	sys	_msg, F7_text, 255, 07h
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000754 BB[A5120000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000759 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 0000075E BA07000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000763 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000768 CD40                <1>  int 40h
   489 0000076A BF06000000              	mov	edi, 6 ; read char (wait)
   490                                  F7_getchar:
   491                                  F8_getchar:
   492                                  	sys	_stdio, edi ; read character (from STDIN)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000076F 89FB                <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73                              <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000771 B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000776 CD40                <1>  int 40h
   493                                  
   494 00000778 83FF06                  	cmp	edi, 6
   495 0000077B 7404                    	je	short F7_getchar_@ ; (wait)
   496                                  
   497 0000077D 21C0                    	and	eax, eax
   498 0000077F 74EE                    	jz	short F8_getchar ; (no wait)
   499                                  F7_getchar_@:
   500 00000781 E8BF000000              	call	chk_ctrl_char
   501                                  
   502 00000786 50                      	push	eax
   503                                  	sys	_msg, chartext, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000787 BB[DC120000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000078C B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000791 BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000796 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000079B CD40                <1>  int 40h
   504                                  	sys	_msg, char, 255, 0Bh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000079D BB[EA120000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000007A2 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000007A7 BA0B000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000007AC B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000007B1 CD40                <1>  int 40h
   505 000007B3 58                      	pop	eax
   506                                  	
   507 000007B4 BB[FD120000]            	mov	ebx, ascii
   508 000007B9 E8CA000000              	call	write_hex_number  ; ascii code
   509 000007BE 50                      	push	eax ; +
   510 000007BF 50                      	push	eax
   511                                  	sys	_msg, asciitext, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000007C0 BB[F0120000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000007C5 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000007CA BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000007CF B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000007D4 CD40                <1>  int 40h
   512                                  	sys	_msg, ascii, 255, 0Bh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000007D6 BB[FD120000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000007DB B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 000007E0 BA0B000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 000007E5 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 000007EA CD40                <1>  int 40h
   513 000007EC 58                      	pop	eax
   514 000007ED 86C4                    	xchg	ah, al
   515 000007EF BB[0F130000]            	mov	ebx, scanc
   516 000007F4 E88F000000              	call	write_hex_number  ; scan code
   517                                  	sys	_msg, scanctext, 255, 0Fh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 000007F9 BB[03130000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 000007FE B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000803 BA0F000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 00000808 B823000000          <1>  mov eax, %1
    80                              <1> 
    81 0000080D CD40                <1>  int 40h
   518                                  	sys	_msg, scanc, 255, 0Bh
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 0000080F BB[0F130000]        <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 00000814 B9FF000000          <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75 00000819 BA0B000000          <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000081E B823000000          <1>  mov eax, %1
    80                              <1> 
    81 00000823 CD40                <1>  int 40h
   519 00000825 58                      	pop	eax ; +
   520                                  F7_nextchar:
   521                                  F8_nextchar:
   522 00000826 3C1B                    	cmp	al, 1Bh ; ESC
   523 00000828 7405                    	je	short F8_ok
   524 0000082A E940FFFFFF              	jmp	F8_getchar
   525                                  F8_ok:
   526                                   	; write 'OK' & return back to the menu
   527 0000082F E9EDFCFFFF              	jmp	F4_ok
   528                                  
   529                                  F7_write_char:
   530 00000834 B40B                    	mov	ah, 0Bh ; cyan
   531                                  	sys	_stdio, 8, eax ; write char (to STDOUT)
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1> 
    70                              <1>  %if %0 >= 2
    71 00000836 BB08000000          <1>  mov ebx, %2
    72                              <1>  %if %0 >= 3
    73 0000083B 89C1                <1>  mov ecx, %3
    74                              <1>  %if %0 = 4
    75                              <1>  mov edx, %4
    76                              <1>  %endif
    77                              <1>  %endif
    78                              <1>  %endif
    79 0000083D B82E000000          <1>  mov eax, %1
    80                              <1> 
    81 00000842 CD40                <1>  int 40h
   532 00000844 C3                      	retn
   533                                  
   534                                  chk_ctrl_char:
   535 00000845 B920202020              	mov	ecx, 20202020h ; 4 space chars
   536 0000084A 31F6                    	xor	esi, esi
   537 0000084C 3C20                    	cmp	al, 20h
   538 0000084E 720D                    	jb 	short chk_ctrl_char_@
   539 00000850 3C7F                    	cmp	al, 127 ; DEL
   540 00000852 742A                    	je	short chk_ctrl_char_@@@
   541 00000854 88C1                    	mov	cl, al
   542                                  ctrl_char_retn:
   543 00000856 890D[EA120000]          	mov	[char], ecx
   544 0000085C C3                      	retn
   545                                  chk_ctrl_char_@:
   546 0000085D 46                      	inc	esi
   547 0000085E 3C1B                    	cmp	al, 1Bh  ; ESC
   548 00000860 7419                    	je	short chk_ctrl_char_@@
   549 00000862 46                      	inc	esi
   550 00000863 3C0D                    	cmp	al, 0Dh  ; CR 
   551 00000865 7414                    	je	short chk_ctrl_char_@@
   552 00000867 46                      	inc	esi
   553 00000868 3C0A                    	cmp	al, 0Ah  ; LF 
   554 0000086A 740F                    	je	short chk_ctrl_char_@@
   555 0000086C 46                      	inc	esi
   556 0000086D 3C09                    	cmp	al, 09h  ; TAB
   557 0000086F 740A                    	je	short chk_ctrl_char_@@
   558 00000871 46                      	inc	esi
   559 00000872 3C08                    	cmp	al, 08h  ; BS
   560 00000874 7405                    	je	short chk_ctrl_char_@@
   561 00000876 46                      	inc	esi
   562 00000877 3C07                    	cmp	al, 07h  ; BEEP
   563 00000879 75DB                    	jne	short ctrl_char_retn
   564                                  chk_ctrl_char_@@:
   565 0000087B C1E602                  	shl	esi, 2 ; *4
   566                                  chk_ctrl_char_@@@:
   567 0000087E 81C6[A4080000]          	add	esi, ctrltable
   568 00000884 8B0E                    	mov	ecx, [esi]
   569 00000886 EBCE                    	jmp	short ctrl_char_retn
   570                                  
   571                                  write_hex_number:
   572                                  	; ebx = hex number (text) address
   573 00000888 50                      	push	eax
   574 00000889 30E4                    	xor	ah, ah
   575 0000088B B110                    	mov	cl, 16
   576 0000088D F6F1                    	div	cl
   577 0000088F 88C2                    	mov	dl, al  ; edx = al
   578 00000891 8A82[C0080000]          	mov	al, [edx+hextable]
   579 00000897 88E2                    	mov	dl, ah  ; edx = ah
   580 00000899 8AA2[C0080000]          	mov	ah, [edx+hextable]
   581 0000089F 668903                  	mov	[ebx], ax
   582 000008A2 58                      	pop	eax
   583 000008A3 C3                      	retn
   584                                  
   585                                  ;-----------------------------------------------------------------
   586                                  
   587 000008A4 44454C204553432043-     ctrltable: db "DEL ESC CR  LF  TAB BS  BEEP"
   587 000008AD 5220204C4620205441-
   587 000008B6 422042532020424545-
   587 000008BF 50                 
   588                                  
   589 000008C0 303132333435363738-     hextable: db "0123456789ABCDEF"
   589 000008C9 39414243444546     
   590                                  
   591                                  ; CGA
   592 000008D0 07090A0B0C0D0E0F06-     colortable: db 07h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh,06h,07h
   592 000008D9 07                 
   593                                  
   594                                  ;-----------------------------------------------------------------
   595                                  ;  messages
   596                                  ;-----------------------------------------------------------------
   597                                  
   598                                  program:
   599 000008DA 0D0A                    		db 0Dh, 0Ah
   600 000008DC 5452444F5320333836-     		db "TRDOS 386 v2.0.9 - SYSSTDIO Function Test"
   600 000008E5 2076322E302E39202D-
   600 000008EE 20535953535444494F-
   600 000008F7 2046756E6374696F6E-
   600 00000900 2054657374         
   601 00000905 0D0A                    		db 0Dh, 0Ah
   602                                  len0	equ $-program
   603 00000907 00                      		db 0
   604                                  owner:
   605 00000908 4572646F67616E2054-     		db "Erdogan Tan - 19/09/2024"
   605 00000911 616E202D2031392F30-
   605 0000091A 392F32303234       
   606 00000920 0D0A00                  		db 0Dh, 0Ah, 0
   607                                  
   608 00000923 FF<rep 18h>             fff_buffer:	times 24 db 0FFh
   609                                  
   610                                  press_F_key:
   611 0000093B 0D0A                    		db 0Dh, 0Ah
   612 0000093D 5072657373206F6E65-     		db "Press one of F1-F10 keys to test or press ESC to exit."
   612 00000946 206F662046312D4631-
   612 0000094F 30206B65797320746F-
   612 00000958 2074657374206F7220-
   612 00000961 707265737320455343-
   612 0000096A 20746F20657869742E 
   613 00000973 0D0A00                  		db 0Dh, 0Ah, 0
   614                                  functions1:
   615 00000976 0D0A                    		db 0Dh, 0Ah
   616 00000978 4631202D2072656164-     		db "F1 - read a character on stdin (wait)"
   616 00000981 206120636861726163-
   616 0000098A 746572206F6E207374-
   616 00000993 64696E202877616974-
   616 0000099C 29                 
   617 0000099D 0D0A                    		db 0Dh, 0Ah
   618 0000099F 4632202D2072656164-     		db "F2 - read a character on stdin (no wait)"
   618 000009A8 206120636861726163-
   618 000009B1 746572206F6E207374-
   618 000009BA 64696E20286E6F2077-
   618 000009C3 61697429           
   619 000009C7 0D0A                    		db 0Dh, 0Ah
   620 000009C9 4633202D2077726974-     		db "F3 - write a character onto stdout (redirection)"
   620 000009D2 652061206368617261-
   620 000009DB 63746572206F6E746F-
   620 000009E4 207374646F75742028-
   620 000009ED 726564697265637469-
   620 000009F6 6F6E29             
   621                                  F4_header:
   622 000009F9 0D0A                    		db 0Dh, 0Ah
   623 000009FB 4634202D2077726974-     		db "F4 - write a character onto stderr (no redirection)"
   623 00000A04 652061206368617261-
   623 00000A0D 63746572206F6E746F-
   623 00000A16 207374646572722028-
   623 00000A1F 6E6F20726564697265-
   623 00000A28 6374696F6E29       
   624 00000A2E 0D0A00                  		db 0Dh, 0Ah,0
   625                                  functions2:		
   626 00000A31 4635202D2072656469-     		db "F5 - redirect stdin to file (if cl > 0)"
   626 00000A3A 726563742073746469-
   626 00000A43 6E20746F2066696C65-
   626 00000A4C 2028696620636C203E-
   626 00000A55 203029             
   627 00000A58 0D0A                    		db 0Dh, 0Ah
   628 00000A5A 4636202D2072656469-     		db "F6 - redirect stdout to file (if cl > 0)"
   628 00000A63 72656374207374646F-
   628 00000A6C 757420746F2066696C-
   628 00000A75 652028696620636C20-
   628 00000A7E 3E203029           
   629 00000A82 0D0A                    		db 0Dh, 0Ah
   630 00000A84 4637202D2072656164-     		db "F7 - read character (ascii & scancode) on stdin (no redir, wait)"
   630 00000A8D 206368617261637465-
   630 00000A96 722028617363696920-
   630 00000A9F 26207363616E636F64-
   630 00000AA8 6529206F6E20737464-
   630 00000AB1 696E20286E6F207265-
   630 00000ABA 6469722C2077616974-
   630 00000AC3 29                 
   631                                  F8_header:
   632 00000AC4 0D0A                    		db 0Dh, 0Ah
   633 00000AC6 4638202D2072656164-     		db "F8 - read character (ascii & scancode) on stdin (no redir, no wait)"
   633 00000ACF 206368617261637465-
   633 00000AD8 722028617363696920-
   633 00000AE1 26207363616E636F64-
   633 00000AEA 6529206F6E20737464-
   633 00000AF3 696E20286E6F207265-
   633 00000AFC 6469722C206E6F2077-
   633 00000B05 61697429           
   634 00000B09 0D0A00                  		db 0Dh, 0Ah,0
   635                                  functions3:
   636 00000B0C 4639202D2077726974-     		db "F9 - write character and color onto stdout (no redirection)"
   636 00000B15 652063686172616374-
   636 00000B1E 657220616E6420636F-
   636 00000B27 6C6F72206F6E746F20-
   636 00000B30 7374646F757420286E-
   636 00000B39 6F2072656469726563-
   636 00000B42 74696F6E29         
   637                                  F10_header:
   638 00000B47 0D0A                    		db 0Dh, 0Ah
   639 00000B49 463130202D20756E67-     		db "F10 - ungetchar (put back the ascii code in u.getc)"
   639 00000B52 657463686172202870-
   639 00000B5B 7574206261636B2074-
   639 00000B64 686520617363696920-
   639 00000B6D 636F646520696E2075-
   639 00000B76 2E6765746329       
   640 00000B7C 0D0A                    		db 0Dh, 0Ah
   641 00000B7E 0D0A00                  		db 0Dh, 0Ah, 0
   642                                  
   643                                  redir_option_hdr:
   644 00000B81 0D0A                    		db 0Dh, 0Ah
   645 00000B83 53656C65637420494E-     		db "Select INPUT option to STDOUT:"
   645 00000B8C 505554206F7074696F-
   645 00000B95 6E20746F205354444F-
   645 00000B9E 55543A             
   646 00000BA1 00                      		db 0
   647                                  redir_option:
   648 00000BA2 0D0A                    		db 0Dh, 0Ah
   649 00000BA4 455343202D2053616D-     		db "ESC - Sample Text"
   649 00000BAD 706C652054657874   
   650 00000BB5 0D0A                    		db 0Dh, 0Ah
   651 00000BB7 454E544552202D204B-     		db "ENTER - Keyboad (STDIN)"
   651 00000BC0 6579626F6164202853-
   651 00000BC9 5444494E29         
   652 00000BCE 0D0A00                  		db 0Dh, 0Ah, 0
   653                                  
   654                                  msg_written:	
   655 00000BD1 0D0A                    		db 0Dh, 0Ah
   656 00000BD3 7772697474656E202E-     		db "written ..."
   656 00000BDC 2E2E               
   657 00000BDE 0D0A00                  		db 0Dh, 0Ah, 0
   658                                  
   659                                  redir_text_hdr:
   660 00000BE1 0D0A                    		db 0Dh, 0Ah
   661 00000BE3 53616D706C65205465-     		db "Sample Text for Redirection Test:"
   661 00000BEC 787420666F72205265-
   661 00000BF5 646972656374696F6E-
   661 00000BFE 20546573743A       
   662 00000C04 0D0A00                  		db 0Dh, 0Ah, 0
   663                                  redir_text:
   664 00000C07 546869732069732061-     		db "This is a text for TRDOS 386 v2.0.9 SYSSTDIO system call,"
   664 00000C10 207465787420666F72-
   664 00000C19 205452444F53203338-
   664 00000C22 362076322E302E3920-
   664 00000C2B 535953535444494F20-
   664 00000C34 73797374656D206361-
   664 00000C3D 6C6C2C             
   665 00000C40 0D0A                    		db 0Dh, 0Ah
   666 00000C42 535444494E2F535444-     		db "STDIN/STDOUT redirection test."
   666 00000C4B 4F5554207265646972-
   666 00000C54 656374696F6E207465-
   666 00000C5D 73742E             
   667 00000C60 0D0A                    		db 0Dh, 0Ah
   668 00000C62 0D0A                    		db 0Dh, 0Ah
   669 00000C64 492072756E20656163-     		db "I run each teen me? Each team. Catch bar duck each teen?"
   669 00000C6D 68207465656E206D65-
   669 00000C76 3F2045616368207465-
   669 00000C7F 616D2E204361746368-
   669 00000C88 20626172206475636B-
   669 00000C91 206561636820746565-
   669 00000C9A 6E3F               
   670 00000C9C 0D0A                    		db 0Dh, 0Ah
   671 00000C9E 4F6E20626172206475-     		db "On bar duck each team. Why high one why!"
   671 00000CA7 636B20656163682074-
   671 00000CB0 65616D2E2057687920-
   671 00000CB9 68696768206F6E6520-
   671 00000CC2 77687921           
   672 00000CC6 0D0A00                  		db 0Dh, 0Ah, 0
   673                                  redir_text_size equ $ - (redir_text+1) ;  except 0 
   674                                  
   675                                  continue_msg:
   676 00000CC9 0D0A                    		db 0Dh, 0Ah
   677 00000CCB 50726573732061206B-     		db "Press a key to continue or press ESC to exit."
   677 00000CD4 657920746F20636F6E-
   677 00000CDD 74696E7565206F7220-
   677 00000CE6 707265737320455343-
   677 00000CEF 20746F20657869742E 
   678                                  crlf:
   679 00000CF8 0D0A00                  		db 0Dh, 0Ah, 0
   680                                  F1_header:
   681 00000CFB 0D0A                    		db 0Dh, 0Ah
   682 00000CFD 4631202D2072656164-     		db "F1 - read a character on stdin (wait)"
   682 00000D06 206120636861726163-
   682 00000D0F 746572206F6E207374-
   682 00000D18 64696E202877616974-
   682 00000D21 29                 
   683 00000D22 0D0A00                  		db 0Dh, 0Ah, 0
   684                                  F2_header:
   685 00000D25 0D0A                    		db 0Dh, 0Ah
   686 00000D27 4632202D2072656164-     		db "F2 - read a character on stdin (no wait)"
   686 00000D30 206120636861726163-
   686 00000D39 746572206F6E207374-
   686 00000D42 64696E20286E6F2077-
   686 00000D4B 61697429           
   687 00000D4F 0D0A00                  		db 0Dh, 0Ah, 0
   688                                  F1_text:
   689                                  F2_text:
   690 00000D52 0D0A                    		db 0Dh, 0Ah
   691 00000D54 4B6579626F61726420-     		db "Keyboard is set as STDIN."
   691 00000D5D 697320736574206173-
   691 00000D66 20535444494E2E     
   692 00000D6D 0D0A                    		db 0Dh, 0Ah
   693 00000D6F 436F6E736F6C652053-     		db "Console Screen is set as STDOUT."
   693 00000D78 637265656E20697320-
   693 00000D81 736574206173205354-
   693 00000D8A 444F55542E         
   694 00000D8F 0D0A                    		db 0Dh, 0Ah
   695 00000D91 50726573736564206B-     		db "Pressed keys will be sent to STDOUT."
   695 00000D9A 6579732077696C6C20-
   695 00000DA3 62652073656E742074-
   695 00000DAC 6F205354444F55542E 
   696                                  F4_text_2:
   697 00000DB5 0D0A                    		db 0Dh, 0Ah
   698 00000DB7 28454E544552206120-     		db "(ENTER a character string to display.)"
   698 00000DC0 636861726163746572-
   698 00000DC9 20737472696E672074-
   698 00000DD2 6F20646973706C6179-
   698 00000DDB 2E29               
   699 00000DDD 0D0A00                  		db 0Dh, 0Ah, 0
   700                                  
   701                                  F3_header:
   702 00000DE0 0D0A                    		db 0Dh, 0Ah
   703 00000DE2 4633202D2077726974-     		db "F3 - write a character onto stdout (redirection)"
   703 00000DEB 652061206368617261-
   703 00000DF4 63746572206F6E746F-
   703 00000DFD 207374646F75742028-
   703 00000E06 726564697265637469-
   703 00000E0F 6F6E29             
   704 00000E12 0D0A00                  		db 0Dh, 0Ah, 0
   705                                  F3_text:
   706 00000E15 0D0A                    		db 0Dh, 0Ah
   707 00000E17 5354444F5554207769-     		db "STDOUT will be redirected to STDIO.TXT file."
   707 00000E20 6C6C20626520726564-
   707 00000E29 697265637465642074-
   707 00000E32 6F20535444494F2E54-
   707 00000E3B 58542066696C652E   
   708 00000E43 0D0A00                  		db 0Dh, 0Ah, 0
   709                                  stdio_at_first:
   710 00000E46 0D0A                    		db 0Dh, 0Ah
   711 00000E48 41742046697273742C-     		db "At First, the STDIO.TXT file will be opened (from scratch)."
   711 00000E51 207468652053544449-
   711 00000E5A 4F2E5458542066696C-
   711 00000E63 652077696C6C206265-
   711 00000E6C 206F70656E65642028-
   711 00000E75 66726F6D2073637261-
   711 00000E7E 746368292E         
   712 00000E83 0D0A00                  		db 0Dh, 0Ah, 0
   713                                  
   714                                  stdio_file:
   715 00000E86 535444494F2E545854-     		db "STDIO.TXT", 0
   715 00000E8F 00                 
   716                                  create_error:
   717 00000E90 0D0A                    		db 0Dh, 0Ah
   718 00000E92 535953435245415420-     		db "SYSCREAT - File creating/open error !"
   718 00000E9B 2D2046696C65206372-
   718 00000EA4 656174696E672F6F70-
   718 00000EAD 656E206572726F7220-
   718 00000EB6 21                 
   719 00000EB7 0D0A00                  		db 0Dh, 0Ah,0
   720                                  open_error:
   721 00000EBA 0D0A                    		db 0Dh, 0Ah
   722 00000EBC 5359534F50454E202D-     		db "SYSOPEN - File open error !"
   722 00000EC5 2046696C65206F7065-
   722 00000ECE 6E206572726F722021 
   723 00000ED7 0D0A00                  		db 0Dh, 0Ah,0
   724                                  zero_file:
   725 00000EDA 535444494F2E545854-     		db "STDIO.TXT File Size is zero !", 0Dh, 0Ah, 0
   725 00000EE3 2046696C652053697A-
   725 00000EEC 65206973207A65726F-
   725 00000EF5 20210D0A00         
   726                                  not_found:
   727 00000EFA 535444494F2E545854-     		db "STDIO.TXT not found!", 0Dh, 0Ah, 0
   727 00000F03 206E6F7420666F756E-
   727 00000F0C 64210D0A00         
   728                                  
   729                                  F3_enter_msg:
   730 00000F11 0D0A                    		db 0Dh, 0Ah
   731 00000F13 50726573736564206B-     		db "Pressed keys will be written into STDOUT file."
   731 00000F1C 6579732077696C6C20-
   731 00000F25 626520777269747465-
   731 00000F2E 6E20696E746F205354-
   731 00000F37 444F55542066696C65-
   731 00000F40 2E                 
   732 00000F41 0D0A                    		db 0Dh, 0Ah
   733 00000F43 5772697474656E2063-     		db "Written characters will be echoed to STDERR/screen."
   733 00000F4C 686172616374657273-
   733 00000F55 2077696C6C20626520-
   733 00000F5E 6563686F656420746F-
   733 00000F67 205354444552522F73-
   733 00000F70 637265656E2E       
   734 00000F76 0D0A                    		db 0Dh, 0Ah
   735 00000F78 5468656E2E2E2E2050-     		db "Then... Press ENTER to stop and close the file."
   735 00000F81 7265737320454E5445-
   735 00000F8A 5220746F2073746F70-
   735 00000F93 20616E6420636C6F73-
   735 00000F9C 65207468652066696C-
   735 00000FA5 652E               
   736 00000FA7 0D0A                    		db 0Dh, 0Ah
   737 00000FA9 43524C462077696C6C-     		db "CRLF will be added to the file instead of ENTER/CR."
   737 00000FB2 206265206164646564-
   737 00000FBB 20746F207468652066-
   737 00000FC4 696C6520696E737465-
   737 00000FCD 6164206F6620454E54-
   737 00000FD6 45522F43522E       
   738 00000FDC 0D0A00                  		db 0Dh, 0Ah, 0
   739                                  
   740                                  F5_header:
   741 00000FDF 0D0A                    		db 0Dh, 0Ah
   742 00000FE1 4635202D2072656469-     		db "F5 - redirect stdin to file"
   742 00000FEA 726563742073746469-
   742 00000FF3 6E20746F2066696C65 
   743 00000FFC 0D0A00                  		db 0Dh, 0Ah, 0
   744                                  F5_text:
   745 00000FFF 0D0A                    		db 0Dh, 0Ah
   746 00001001 535444494E2077696C-     		db "STDIN will be redirected to STDIO.TXT file."
   746 0000100A 6C2062652072656469-
   746 00001013 72656374656420746F-
   746 0000101C 20535444494F2E5458-
   746 00001025 542066696C652E     
   747 0000102C 0D0A00                  		db 0Dh, 0Ah, 0
   748                                  
   749                                  F4_text_1:
   750 0000102F 0D0A                    		db 0Dh, 0Ah
   751 00001031 546869732069732053-     		db "This is STDERR message."
   751 0000103A 5444455252206D6573-
   751 00001043 736167652E         
   752 00001048 00                      		db 0
   753                                  F4_text_1_end:
   754 00001049 537472696E673A2000      F4_string:	db "String: ",0
   755                                  F4_string_len	equ $ - (F4_string+1)
   756                                  
   757                                  F6_header:
   758 00001052 0D0A                    		db 0Dh, 0Ah
   759 00001054 4636202D2072656469-     		db "F6 - redirect stdout to file"
   759 0000105D 72656374207374646F-
   759 00001066 757420746F2066696C-
   759 0000106F 65                 
   760 00001070 0D0A00                  		db 0Dh, 0Ah, 0
   761                                  F6_text:
   762 00001073 0D0A                    		db 0Dh, 0Ah
   763 00001075 5354444F5554207769-     		db "STDOUT will be redirected to STDIO.TXT file."
   763 0000107E 6C6C20626520726564-
   763 00001087 697265637465642074-
   763 00001090 6F20535444494F2E54-
   763 00001099 58542066696C652E   
   764 000010A1 0D0A00                  		db 0Dh, 0Ah, 0
   765                                  
   766                                  F9_header:
   767 000010A4 0D0A                    		db 0Dh, 0Ah
   768 000010A6 4639202D2077726974-     		db "F9 - write character and color onto stdout"
   768 000010AF 652063686172616374-
   768 000010B8 657220616E6420636F-
   768 000010C1 6C6F72206F6E746F20-
   768 000010CA 7374646F7574       
   769 000010D0 0D0A00                  		db 0Dh, 0Ah, 0
   770                                  
   771                                  F9_text:
   772 000010D3 0D0A                    		db 0Dh, 0Ah
   773 000010D5 53656C656374206120-     		db "Select a color:"
   773 000010DE 636F6C6F723A       
   774 000010E4 0D0A                    		db 0Dh, 0Ah
   775 000010E6 202020202020203120-     		db "       1 = BLUE   "
   775 000010EF 3D20424C5545202020 
   776 000010F8 0D0A                    		db 0Dh, 0Ah
   777 000010FA 202020202020203220-     		db "       2 = GREEN  "
   777 00001103 3D20475245454E2020 
   778 0000110C 0D0A                    		db 0Dh, 0Ah
   779 0000110E 202020202020203320-     		db "       3 = CYAN   "
   779 00001117 3D204359414E202020 
   780 00001120 0D0A                    		db 0Dh, 0Ah
   781 00001122 202020202020203420-     		db "       4 = RED    "
   781 0000112B 3D2052454420202020 
   782 00001134 0D0A                    		db 0Dh, 0Ah
   783 00001136 202020202020203520-     		db "       5 = MAGENTA"
   783 0000113F 3D204D4147454E5441 
   784 00001148 0D0A                    		db 0Dh, 0Ah
   785 0000114A 202020202020203620-     		db "       6 = YELLOW "
   785 00001153 3D2059454C4C4F5720 
   786 0000115C 0D0A                    		db 0Dh, 0Ah
   787 0000115E 202020202020203720-     		db "       7 = WHITE  "
   787 00001167 3D2057484954452020 
   788 00001170 0D0A                    		db 0Dh, 0Ah
   789 00001172 202020202020203820-     		db "       8 = BROWN  "
   789 0000117B 3D2042524F574E2020 
   790 00001184 0D0A                    		db 0Dh, 0Ah
   791 00001186 202020202020203920-     		db "       9 = GRAY   "
   791 0000118F 3D2047524159202020 
   792 00001198 0D0A                    		db 0Dh, 0Ah
   793 0000119A 202020202020203020-     		db "       0 = Default"
   793 000011A3 3D2044656661756C74 
   794 000011AC 0D0A00                  		db 0Dh, 0Ah, 0
   795                                  
   796                                  F10_text_1:
   797 000011AF 0D0A                    		db 0Dh, 0Ah
   798 000011B1 454E54455220612073-     		db "ENTER a string to test ungetchar feature..."
   798 000011BA 7472696E6720746F20-
   798 000011C3 7465737420756E6765-
   798 000011CC 746368617220666561-
   798 000011D5 747572652E2E2E     
   799 000011DC 0D0A00                  		db 0Dh, 0Ah, 0
   800                                  
   801                                  F10_text_2:
   802 000011DF 0D0A                    		db 0Dh, 0Ah
   803 000011E1 546865203173742063-     		db "The 1st char will be written as 5th char without any keypress."
   803 000011EA 6861722077696C6C20-
   803 000011F3 626520777269747465-
   803 000011FC 6E2061732035746820-
   803 00001205 636861722077697468-
   803 0000120E 6F757420616E79206B-
   803 00001217 657970726573732E   
   804 0000121F 0D0A                    		db 0Dh, 0Ah
   805 00001221 286120676574636861-     		db "(a getchar just after ungetchar works as a virtual keypress)" 
   805 0000122A 72206A757374206166-
   805 00001233 74657220756E676574-
   805 0000123C 6368617220776F726B-
   805 00001245 732061732061207669-
   805 0000124E 727475616C206B6579-
   805 00001257 707265737329       
   806 0000125D 0D0A00                  		db 0Dh, 0Ah, 0
   807                                  
   808                                  F7_header:
   809 00001260 0D0A                    		db 0Dh, 0Ah
   810 00001262 4637202D2072656164-     		db "F7 - read character (ascii & scancode) on stdin (no redir, wait)"
   810 0000126B 206368617261637465-
   810 00001274 722028617363696920-
   810 0000127D 26207363616E636F64-
   810 00001286 6529206F6E20737464-
   810 0000128F 696E20286E6F207265-
   810 00001298 6469722C2077616974-
   810 000012A1 29                 
   811 000012A2 0D0A00                  		db 0Dh, 0Ah, 0
   812                                  F7_text:
   813                                  F8_text:
   814 000012A5 0D0A                    		db 0Dh, 0Ah
   815 000012A7 507265737320616E79-     		db "Press any keys to continue or press ESC to cancel."
   815 000012B0 206B65797320746F20-
   815 000012B9 636F6E74696E756520-
   815 000012C2 6F7220707265737320-
   815 000012CB 45534320746F206361-
   815 000012D4 6E63656C2E         
   816 000012D9 0D0A00                  		db 0Dh, 0Ah, 0
   817                                  
   818 000012DC 0D0A                    chartext:	db 0Dh, 0Ah
   819 000012DE 436861726163746572-     		db "Character: ",0
   819 000012E7 3A2000             
   820 000012EA 202020202000            char:		db "     ",0 
   821 000012F0 417363696920436F64-     asciitext:	db "Ascii Code: ",0
   821 000012F9 653A2000           
   822 000012FD 303068202000            ascii:		db "00h  ",0
   823 00001303 5363616E20436F6465-     scanctext:	db "Scan Code: ",0
   823 0000130C 3A2000             
   824 0000130F 3030682000              scanc:		db "00h ",0
   825                                  
   826 00001314 00000000                filehandle:	dd 0
   827                                  
   828                                  msg_ok:
   829 00001318 0D0A                    		db 0Dh, 0Ah
   830 0000131A 4F4B2E20                		db "OK. "
   831 0000131E 00                      		db 0
