diff options
| author | 1983-08-12 17:53:34 -0700 | |
|---|---|---|
| committer | 2018-09-21 17:53:34 -0700 | |
| commit | 80ab2fddfdf30f09f0a0a637654cbb3cd5c7baa6 (patch) | |
| tree | ee4357f7f3dd0f2ded59b9c6e7384432d85e7ec9 /v2.0/source/TCODE2.ASM | |
| parent | MS-DOS v1.25 Release (diff) | |
| download | ms-dos-80ab2fddfdf30f09f0a0a637654cbb3cd5c7baa6.tar.gz ms-dos-80ab2fddfdf30f09f0a0a637654cbb3cd5c7baa6.tar.xz ms-dos-80ab2fddfdf30f09f0a0a637654cbb3cd5c7baa6.zip | |
MS-DOS v2.0 Release
Diffstat (limited to 'v2.0/source/TCODE2.ASM')
| -rw-r--r-- | v2.0/source/TCODE2.ASM | 522 |
1 files changed, 522 insertions, 0 deletions
diff --git a/v2.0/source/TCODE2.ASM b/v2.0/source/TCODE2.ASM new file mode 100644 index 0000000..bc2742d --- /dev/null +++ b/v2.0/source/TCODE2.ASM | |||
| @@ -0,0 +1,522 @@ | |||
| 1 | TITLE PART2 - COMMAND Transient routines. | ||
| 2 | |||
| 3 | INCLUDE COMSW.ASM | ||
| 4 | |||
| 5 | .xlist | ||
| 6 | .xcref | ||
| 7 | INCLUDE DOSSYM.ASM | ||
| 8 | INCLUDE DEVSYM.ASM | ||
| 9 | INCLUDE COMSEG.ASM | ||
| 10 | .list | ||
| 11 | .cref | ||
| 12 | |||
| 13 | INCLUDE COMEQU.ASM | ||
| 14 | |||
| 15 | CODERES SEGMENT PUBLIC | ||
| 16 | EXTRN LODCOM1:NEAR | ||
| 17 | CODERES ENDS | ||
| 18 | |||
| 19 | DATARES SEGMENT PUBLIC | ||
| 20 | EXTRN PARENT:WORD,IO_SAVE:WORD,PERMCOM:BYTE | ||
| 21 | EXTRN PIPEFLAG:BYTE,ENVIRSEG:WORD | ||
| 22 | if ibmver | ||
| 23 | EXTRN SYS_CALL:DWORD | ||
| 24 | endif | ||
| 25 | DATARES ENDS | ||
| 26 | |||
| 27 | TRANDATA SEGMENT PUBLIC | ||
| 28 | |||
| 29 | EXTRN PATH_TEXT:BYTE,PROMPT_TEXT:BYTE | ||
| 30 | EXTRN BADDEV:BYTE,SYNTMES:BYTE,ENVERR:BYTE | ||
| 31 | TRANDATA ENDS | ||
| 32 | |||
| 33 | TRANSPACE SEGMENT PUBLIC | ||
| 34 | |||
| 35 | EXTRN CURDRV:BYTE,DIRCHAR:BYTE,PWDBUF:BYTE | ||
| 36 | EXTRN INTERNATVARS:BYTE,RESSEG:WORD,TPA:WORD | ||
| 37 | |||
| 38 | TRANSPACE ENDS | ||
| 39 | |||
| 40 | |||
| 41 | TRANCODE SEGMENT PUBLIC BYTE | ||
| 42 | ASSUME CS:TRANGROUP,DS:NOTHING,ES:NOTHING,SS:NOTHING | ||
| 43 | |||
| 44 | EXTRN CERROR:NEAR,ZPRINT:NEAR | ||
| 45 | EXTRN CRLF2:NEAR,SCANOFF:NEAR,FREE_TPA:NEAR,ALLOC_TPA:NEAR | ||
| 46 | EXTRN OUT:NEAR,DRVBAD:NEAR,SETPATH:NEAR,PRINT:NEAR | ||
| 47 | EXTRN FCB_TO_ASCZ:NEAR | ||
| 48 | |||
| 49 | PUBLIC PRINT_DRIVE,$EXIT,MOVE_NAME | ||
| 50 | PUBLIC UPCONV,ADD_PROMPT,CTTY,PRINT_DEFAULT_DIRECTORY | ||
| 51 | PUBLIC ADD_NAME_TO_ENVIRONMENT,PWD,SCAN_DOUBLE_NULL | ||
| 52 | PUBLIC FIND_NAME_IN_ENVIRONMENT,STORE_CHAR | ||
| 53 | PUBLIC FIND_PATH,DELETE_PATH,FIND_PROMPT | ||
| 54 | PUBLIC SCASB2 | ||
| 55 | |||
| 56 | IF KANJI | ||
| 57 | PUBLIC TESTKANJ | ||
| 58 | ENDIF | ||
| 59 | |||
| 60 | BREAK <Environment utilities> | ||
| 61 | ASSUME DS:TRANGROUP | ||
| 62 | |||
| 63 | ADD_PROMPT: | ||
| 64 | CALL DELETE_PROMPT ; DELETE ANY EXISTING PROMPT | ||
| 65 | CALL SCAN_DOUBLE_NULL | ||
| 66 | ADD_PROMPT2: | ||
| 67 | PUSH SI | ||
| 68 | CALL GETARG | ||
| 69 | POP SI | ||
| 70 | retz ; PRE SCAN FOR ARGUMENTS | ||
| 71 | CALL MOVE_NAME ; MOVE IN NAME | ||
| 72 | CALL GETARG | ||
| 73 | JMP SHORT ADD_NAME | ||
| 74 | ; | ||
| 75 | ; Input: DS:SI points to a CR terminated string | ||
| 76 | ; Output: carry flag is set if no room | ||
| 77 | ; otherwise name is added to environment | ||
| 78 | ; | ||
| 79 | ADD_NAME_TO_ENVIRONMENT: | ||
| 80 | CALL GETARG | ||
| 81 | JZ DISP_ENV | ||
| 82 | ; | ||
| 83 | ; check if line contains exactly one equals sign | ||
| 84 | ; | ||
| 85 | XOR BX,BX ;= COUNT IS 0 | ||
| 86 | PUSH SI ;SAVE POINTER TO BEGINNING OF LINE | ||
| 87 | EQLP: | ||
| 88 | LODSB ;GET A CHAR | ||
| 89 | CMP AL,13 ;IF CR WE'RE ALL DONE | ||
| 90 | JZ QUEQ | ||
| 91 | CMP AL,"=" ;LOOK FOR = SIGN | ||
| 92 | JNZ EQLP ;NOT THERE, GET NEXT CHAR | ||
| 93 | INC BL ;OTHERWISE INCREMENT EQ COUNT | ||
| 94 | CMP BYTE PTR [SI],13 ;LOOK FOR CR FOLLOWING = SIGN | ||
| 95 | JNZ EQLP | ||
| 96 | INC BH ;SET BH=1 MEANS NO PARAMETERS | ||
| 97 | JMP EQLP ;AND LOOK FOR MORE | ||
| 98 | QUEQ: | ||
| 99 | POP SI ;RESTORE BEGINNING OF LINE | ||
| 100 | DEC BL ;ZERO FLAG MEANS ONLY ONE EQ | ||
| 101 | JZ ONEQ ;GOOD LINE | ||
| 102 | MOV DX,OFFSET TRANGROUP:SYNTMES | ||
| 103 | JMP CERROR | ||
| 104 | |||
| 105 | ONEQ: | ||
| 106 | PUSH BX | ||
| 107 | CALL DELETE_NAME_IN_ENVIRONMENT | ||
| 108 | POP BX | ||
| 109 | DEC BH | ||
| 110 | retz | ||
| 111 | |||
| 112 | CALL SCAN_DOUBLE_NULL | ||
| 113 | CALL MOVE_NAME | ||
| 114 | ADD_NAME: | ||
| 115 | LODSB | ||
| 116 | CMP AL,13 | ||
| 117 | retz | ||
| 118 | CALL STORE_CHAR | ||
| 119 | JMP ADD_NAME | ||
| 120 | |||
| 121 | DISP_ENV: | ||
| 122 | MOV DS,[RESSEG] | ||
| 123 | ASSUME DS:RESGROUP | ||
| 124 | MOV DS,[ENVIRSEG] | ||
| 125 | ASSUME DS:NOTHING | ||
| 126 | XOR SI,SI | ||
| 127 | PENVLP: | ||
| 128 | CMP BYTE PTR [SI],0 | ||
| 129 | retz | ||
| 130 | |||
| 131 | MOV DX,SI | ||
| 132 | CALL ZPRINT | ||
| 133 | CALL CRLF2 | ||
| 134 | PENVLP2: | ||
| 135 | LODSB | ||
| 136 | OR AL,AL | ||
| 137 | JNZ PENVLP2 | ||
| 138 | JMP PENVLP | ||
| 139 | |||
| 140 | ASSUME DS:TRANGROUP | ||
| 141 | DELETE_PATH: | ||
| 142 | MOV SI,OFFSET TRANGROUP:PATH_TEXT | ||
| 143 | JMP SHORT DELETE_NAME_IN_environment | ||
| 144 | |||
| 145 | DELETE_PROMPT: | ||
| 146 | MOV SI,OFFSET TRANGROUP:PROMPT_TEXT | ||
| 147 | |||
| 148 | DELETE_NAME_IN_environment: | ||
| 149 | ; | ||
| 150 | ; Input: DS:SI points to a "=" terminated string | ||
| 151 | ; Output: carry flag is set if name not found | ||
| 152 | ; otherwise name is deleted | ||
| 153 | ; | ||
| 154 | PUSH SI | ||
| 155 | PUSH DS | ||
| 156 | CALL FIND ; ES:DI POINTS TO NAME | ||
| 157 | JC DEL1 | ||
| 158 | MOV SI,DI ; SAVE IT | ||
| 159 | CALL SCASB2 ; SCAN FOR THE NUL | ||
| 160 | XCHG SI,DI | ||
| 161 | CALL GETENVSIZ | ||
| 162 | SUB CX,SI | ||
| 163 | PUSH ES | ||
| 164 | POP DS ; ES:DI POINTS TO NAME, DS:SI POINTS TO NEXT NAME | ||
| 165 | REP MOVSB ; DELETE THE NAME | ||
| 166 | DEL1: | ||
| 167 | POP DS | ||
| 168 | POP SI | ||
| 169 | return | ||
| 170 | |||
| 171 | FIND_PATH: | ||
| 172 | MOV SI,OFFSET TRANGROUP:PATH_TEXT | ||
| 173 | JMP SHORT FIND_NAME_IN_environment | ||
| 174 | |||
| 175 | FIND_PROMPT: | ||
| 176 | MOV SI,OFFSET TRANGROUP:PROMPT_TEXT | ||
| 177 | |||
| 178 | FIND_NAME_IN_environment: | ||
| 179 | ; | ||
| 180 | ; Input: DS:SI points to a "=" terminated string | ||
| 181 | ; Output: ES:DI points to the arguments in the environment | ||
| 182 | ; zero is set if name not found | ||
| 183 | ; carry flag is set if name not valid format | ||
| 184 | ; | ||
| 185 | CALL FIND ; FIND THE NAME | ||
| 186 | retc ; CARRY MEANS NOT FOUND | ||
| 187 | JMP SCASB1 ; SCAN FOR = SIGN | ||
| 188 | ; | ||
| 189 | ; On return of FIND1, ES:DI points to beginning of name | ||
| 190 | ; | ||
| 191 | FIND: | ||
| 192 | CLD | ||
| 193 | CALL COUNT0 ; CX = LENGTH OF NAME | ||
| 194 | MOV ES,[RESSEG] | ||
| 195 | ASSUME ES:RESGROUP | ||
| 196 | MOV ES,[ENVIRSEG] | ||
| 197 | ASSUME ES:NOTHING | ||
| 198 | XOR DI,DI | ||
| 199 | FIND1: | ||
| 200 | PUSH CX | ||
| 201 | PUSH SI | ||
| 202 | PUSH DI | ||
| 203 | FIND11: | ||
| 204 | LODSB | ||
| 205 | |||
| 206 | IF KANJI | ||
| 207 | CALL TESTKANJ | ||
| 208 | JZ NOTKANJ3 | ||
| 209 | DEC SI | ||
| 210 | LODSW | ||
| 211 | INC DI | ||
| 212 | INC DI | ||
| 213 | CMP AX,ES:[DI-2] | ||
| 214 | JNZ FIND12 | ||
| 215 | DEC CX | ||
| 216 | LOOP FIND11 | ||
| 217 | JMP SHORT FIND12 | ||
| 218 | |||
| 219 | NOTKANJ3: | ||
| 220 | ENDIF | ||
| 221 | |||
| 222 | CALL UPCONV | ||
| 223 | INC DI | ||
| 224 | CMP AL,ES:[DI-1] | ||
| 225 | JNZ FIND12 | ||
| 226 | LOOP FIND11 | ||
| 227 | FIND12: | ||
| 228 | POP DI | ||
| 229 | POP SI | ||
| 230 | POP CX | ||
| 231 | retz | ||
| 232 | PUSH CX | ||
| 233 | CALL SCASB2 ; SCAN FOR A NUL | ||
| 234 | POP CX | ||
| 235 | CMP BYTE PTR ES:[DI],0 | ||
| 236 | JNZ FIND1 | ||
| 237 | STC ; INDICATE NOT FOUND | ||
| 238 | return | ||
| 239 | |||
| 240 | COUNT0: | ||
| 241 | PUSH DS | ||
| 242 | POP ES | ||
| 243 | MOV DI,SI | ||
| 244 | |||
| 245 | COUNT1: | ||
| 246 | PUSH DI ; COUNT NUMBER OF CHARS UNTIL "=" | ||
| 247 | CALL SCASB1 | ||
| 248 | JMP SHORT COUNTX | ||
| 249 | COUNT2: | ||
| 250 | PUSH DI ; COUNT NUMBER OF CHARS UNTIL NUL | ||
| 251 | CALL SCASB2 | ||
| 252 | COUNTX: | ||
| 253 | POP CX | ||
| 254 | SUB DI,CX | ||
| 255 | XCHG DI,CX | ||
| 256 | return | ||
| 257 | |||
| 258 | MOVE_NAME: | ||
| 259 | CMP BYTE PTR DS:[SI],13 | ||
| 260 | retz | ||
| 261 | LODSB | ||
| 262 | |||
| 263 | IF KANJI | ||
| 264 | CALL TESTKANJ | ||
| 265 | JZ NOTKANJ1 | ||
| 266 | CALL STORE_CHAR | ||
| 267 | LODSB | ||
| 268 | CALL STORE_CHAR | ||
| 269 | JMP SHORT MOVE_NAME | ||
| 270 | |||
| 271 | NOTKANJ1: | ||
| 272 | ENDIF | ||
| 273 | |||
| 274 | CALL UPCONV | ||
| 275 | CALL STORE_CHAR | ||
| 276 | CMP AL,"=" | ||
| 277 | JNZ MOVE_NAME | ||
| 278 | return | ||
| 279 | |||
| 280 | GETARG: | ||
| 281 | MOV SI,80H | ||
| 282 | LODSB | ||
| 283 | OR AL,AL | ||
| 284 | retz | ||
| 285 | CALL SCANOFF | ||
| 286 | CMP AL,13 | ||
| 287 | return | ||
| 288 | |||
| 289 | SCAN_DOUBLE_NULL: | ||
| 290 | MOV ES,[RESSEG] | ||
| 291 | ASSUME ES:RESGROUP | ||
| 292 | MOV ES,[ENVIRSEG] | ||
| 293 | ASSUME ES:NOTHING | ||
| 294 | XOR DI,DI | ||
| 295 | SDN1: | ||
| 296 | CALL SCASB2 | ||
| 297 | CMP BYTE PTR ES:[DI],0 | ||
| 298 | JNZ SDN1 | ||
| 299 | return | ||
| 300 | |||
| 301 | SCASB1: | ||
| 302 | MOV AL,"=" ; SCAN FOR AN = | ||
| 303 | JMP SHORT SCASBX | ||
| 304 | SCASB2: | ||
| 305 | XOR AL,AL ; SCAN FOR A NUL | ||
| 306 | SCASBX: | ||
| 307 | MOV CX,100H | ||
| 308 | REPNZ SCASB | ||
| 309 | return | ||
| 310 | |||
| 311 | IF KANJI | ||
| 312 | TESTKANJ: | ||
| 313 | CMP AL,81H | ||
| 314 | JB NOTLEAD | ||
| 315 | CMP AL,9FH | ||
| 316 | JBE ISLEAD | ||
| 317 | CMP AL,0E0H | ||
| 318 | JB NOTLEAD | ||
| 319 | CMP AL,0FCH | ||
| 320 | JBE ISLEAD | ||
| 321 | NOTLEAD: | ||
| 322 | PUSH AX | ||
| 323 | XOR AX,AX ;Set zero | ||
| 324 | POP AX | ||
| 325 | return | ||
| 326 | |||
| 327 | ISLEAD: | ||
| 328 | PUSH AX | ||
| 329 | XOR AX,AX ;Set zero | ||
| 330 | INC AX ;Reset zero | ||
| 331 | POP AX | ||
| 332 | return | ||
| 333 | ENDIF | ||
| 334 | |||
| 335 | UPCONV: | ||
| 336 | CMP AL,"a" | ||
| 337 | JB RET22C | ||
| 338 | CMP AL,"z" | ||
| 339 | JA RET22C | ||
| 340 | SUB AL,20H ; Lower-case changed to upper-case | ||
| 341 | RET22C: | ||
| 342 | CALL DWORD PTR CS:[INTERNATVARS.Map_call] | ||
| 343 | return | ||
| 344 | ; | ||
| 345 | ; STORE A CHAR IN environment, GROWING IT IF NECESSARY | ||
| 346 | ; | ||
| 347 | STORE_CHAR: | ||
| 348 | PUSH CX | ||
| 349 | PUSH BX | ||
| 350 | CALL GETENVSIZ | ||
| 351 | MOV BX,CX | ||
| 352 | SUB BX,2 ; SAVE ROOM FOR DOUBLE NULL | ||
| 353 | CMP DI,BX | ||
| 354 | JB STORE1 | ||
| 355 | |||
| 356 | PUSH AX | ||
| 357 | PUSH CX | ||
| 358 | PUSH BX ; Save Size of environment | ||
| 359 | CALL FREE_TPA | ||
| 360 | POP BX | ||
| 361 | ADD BX,2 ; Recover true environment size | ||
| 362 | MOV CL,4 | ||
| 363 | SHR BX,CL ; Convert back to paragraphs | ||
| 364 | INC BX ; Try to grow environment by one para | ||
| 365 | MOV AH,SETBLOCK | ||
| 366 | INT int_command | ||
| 367 | PUSHF | ||
| 368 | PUSH ES | ||
| 369 | MOV ES,[RESSEG] | ||
| 370 | CALL ALLOC_TPA | ||
| 371 | POP ES | ||
| 372 | POPF | ||
| 373 | POP CX | ||
| 374 | POP AX | ||
| 375 | JNC STORE1 | ||
| 376 | MOV DX,OFFSET TRANGROUP:ENVERR | ||
| 377 | JMP CERROR | ||
| 378 | STORE1: | ||
| 379 | STOSB | ||
| 380 | MOV WORD PTR ES:[DI],0 ; NULL IS AT END | ||
| 381 | POP BX | ||
| 382 | POP CX | ||
| 383 | return | ||
| 384 | |||
| 385 | GETENVSIZ: | ||
| 386 | ;Get size of environment in bytes, rounded up to paragraph boundry | ||
| 387 | ;ES has environment segment | ||
| 388 | ;Size returned in CX, all other registers preserved | ||
| 389 | |||
| 390 | PUSH ES | ||
| 391 | PUSH AX | ||
| 392 | MOV AX,ES | ||
| 393 | DEC AX ;Point at arena | ||
| 394 | MOV ES,AX | ||
| 395 | MOV AX,ES:[arena_size] | ||
| 396 | MOV CL,4 | ||
| 397 | SHL AX,CL ;Convert to bytes | ||
| 398 | MOV CX,AX | ||
| 399 | POP AX | ||
| 400 | POP ES | ||
| 401 | return | ||
| 402 | |||
| 403 | PRINT_DRIVE: | ||
| 404 | MOV AH,GET_DEFAULT_DRIVE | ||
| 405 | INT int_command | ||
| 406 | ADD AL,"A" | ||
| 407 | JMP OUT | ||
| 408 | |||
| 409 | ASSUME DS:TRANGROUP,ES:TRANGROUP | ||
| 410 | PWD: | ||
| 411 | CALL PRINT_DIRECTORY | ||
| 412 | CALL CRLF2 | ||
| 413 | return | ||
| 414 | |||
| 415 | PRINT_DEFAULT_DIRECTORY: | ||
| 416 | MOV BYTE PTR DS:[FCB],0 | ||
| 417 | PRINT_DIRECTORY: | ||
| 418 | MOV DL,DS:[FCB] | ||
| 419 | MOV AL,DL | ||
| 420 | ADD AL,'@' | ||
| 421 | CMP AL,'@' | ||
| 422 | JNZ GOTDRIVE | ||
| 423 | ADD AL,[CURDRV] | ||
| 424 | INC AL | ||
| 425 | GOTDRIVE: | ||
| 426 | PUSH AX | ||
| 427 | MOV SI,OFFSET TRANGROUP:PWDBUF+3 | ||
| 428 | MOV AH,CURRENT_DIR | ||
| 429 | INT int_command | ||
| 430 | JNC DPBISOK | ||
| 431 | PUSH CS | ||
| 432 | POP DS | ||
| 433 | JMP DRVBAD | ||
| 434 | DPBISOK: | ||
| 435 | MOV DI,OFFSET TRANGROUP:PWDBUF | ||
| 436 | MOV DX,DI | ||
| 437 | POP AX | ||
| 438 | MOV AH,DRVCHAR | ||
| 439 | STOSW | ||
| 440 | MOV AL,[DIRCHAR] | ||
| 441 | STOSB | ||
| 442 | JMP ZPRINT | ||
| 443 | |||
| 444 | $EXIT: | ||
| 445 | PUSH ES | ||
| 446 | MOV ES,[RESSEG] | ||
| 447 | ASSUME ES:RESGROUP | ||
| 448 | MOV AX,[PARENT] | ||
| 449 | MOV WORD PTR ES:[PDB_Parent_PID],AX | ||
| 450 | |||
| 451 | IF IBM | ||
| 452 | CMP [PERMCOM],0 | ||
| 453 | JNZ NORESETVEC ;Don't reset the vector if a PERMCOM | ||
| 454 | LDS DX,DWORD PTR ES:[SYS_CALL] | ||
| 455 | ASSUME DS:NOTHING | ||
| 456 | MOV AX,(SET_INTERRUPT_VECTOR SHL 8) + INT_COMMAND | ||
| 457 | INT int_command | ||
| 458 | NORESETVEC: | ||
| 459 | ENDIF | ||
| 460 | |||
| 461 | POP ES | ||
| 462 | ASSUME ES:TRANGROUP | ||
| 463 | MOV ES,[TPA] | ||
| 464 | MOV AH,DEALLOC | ||
| 465 | INT int_command ; Now running in "free" space | ||
| 466 | MOV AX,(EXIT SHL 8) | ||
| 467 | INT int_command | ||
| 468 | |||
| 469 | CTTY: | ||
| 470 | CALL SETPATH ; Get spec | ||
| 471 | MOV AX,(OPEN SHL 8) OR 2 ; Read and write | ||
| 472 | INT int_command ; Open new device | ||
| 473 | JC ISBADDEV | ||
| 474 | MOV BX,AX | ||
| 475 | MOV AX,IOCTL SHL 8 | ||
| 476 | INT int_command | ||
| 477 | TEST DL,80H | ||
| 478 | JNZ DEVISOK | ||
| 479 | MOV AH,CLOSE ; Close initial handle | ||
| 480 | INT int_command | ||
| 481 | ISBADDEV: | ||
| 482 | MOV DX,OFFSET TRANGROUP:BADDEV | ||
| 483 | CALL PRINT | ||
| 484 | JMP RESRET | ||
| 485 | |||
| 486 | DEVISOK: | ||
| 487 | XOR DH,DH | ||
| 488 | OR DL,3 ; Make sure has CON attributes | ||
| 489 | MOV AX,(IOCTL SHL 8) OR 1 | ||
| 490 | INT int_command | ||
| 491 | PUSH BX ; Save handle | ||
| 492 | MOV CX,3 | ||
| 493 | XOR BX,BX | ||
| 494 | ICLLOOP: ; Close basic handles | ||
| 495 | MOV AH,CLOSE | ||
| 496 | INT int_command | ||
| 497 | INC BX | ||
| 498 | LOOP ICLLOOP | ||
| 499 | POP BX ; Get handle | ||
| 500 | MOV AH,XDUP | ||
| 501 | INT int_command ; Dup it to 0 | ||
| 502 | MOV AH,XDUP | ||
| 503 | INT int_command ; Dup to 1 | ||
| 504 | MOV AH,XDUP | ||
| 505 | INT int_command ; Dup to 2 | ||
| 506 | MOV AH,CLOSE ; Close initial handle | ||
| 507 | INT int_command | ||
| 508 | RESRET: | ||
| 509 | MOV DS,[RESSEG] | ||
| 510 | ASSUME DS:RESGROUP | ||
| 511 | PUSH DS | ||
| 512 | MOV AX,WORD PTR DS:[PDB_JFN_Table] ; Get new 0 and 1 | ||
| 513 | MOV [IO_SAVE],AX | ||
| 514 | MOV AX,OFFSET RESGROUP:LODCOM1 | ||
| 515 | PUSH AX | ||
| 516 | ZMMMM PROC FAR | ||
| 517 | RET ; Force header to be checked | ||
| 518 | ZMMMM ENDP | ||
| 519 | |||
| 520 | TRANCODE ENDS | ||
| 521 | END | ||
| 522 | |||