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) , , 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 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