home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / dosutils / more500.arj / MORE.ASM next >
Encoding:
Assembly Source File  |  1992-02-04  |  25.9 KB  |  1,003 lines

  1. ;        Disassembly of file :MORE.COM
  2. ;
  3. ;        Define common ASCII control codes.
  4. ;
  5. HT       EQU   9
  6. LF       EQU   10
  7. FF       EQU   12
  8. CR       EQU   13
  9. EOF      EQU   26
  10. ;
  11. ;        Define MSDOS/PCDOS functions.
  12. ;
  13. _CONOUT  EQU   2
  14. _DRCINE  EQU   8
  15. _GETVER  EQU   30H
  16. _CLOSEH  EQU   3EH
  17. _READH   EQU   3FH
  18. _WRITEH  EQU   40H
  19. _XDUP    EQU   45H              ;DUPLICATE A FILE HANDLE
  20. _EXIT    EQU   4CH
  21. ;
  22. ;      Macro to generate MSDOS/PCDOS calls.
  23. ;
  24. MSDOS    MACRO  name
  25.          IFDEF  &name
  26.          MOV    AH,&name
  27.          ENDIF
  28.          INT    21H
  29.          ENDM
  30. ;
  31. ;
  32. ;
  33. Code_Seg SEGMENT PUBLIC
  34. ;
  35.          ASSUME CS:Code_Seg,DS:Code_Seg
  36.          ORG   00100H
  37. L0100H:  CALL  L03AAH  
  38.          JNC   L010CH  
  39.          CALL  L04A5H  
  40.          MSDOS _EXIT             ;Terminate a process.
  41. L010CH:  CALL  L0239H  
  42.          JNC   L0115H  
  43.          MSDOS _EXIT             ;Terminate a process.
  44. L0115H:  PUSH  DS
  45.          MOV   AX,0040H
  46.          MOV   DS,AX
  47.          MOV   AL,DS:BYTE PTR [0084H]
  48.          POP   DS
  49.          OR    AL,AL
  50.          JNZ   L0125H  
  51.          MOV   AL,18H
  52. L0125H:  MOV   BYTE PTR [L0297H],AL
  53.          MOV   AX,440CH
  54.          MOV   BX,0002H
  55.          MOV   CX,037FH
  56.          LEA   DX,WORD PTR [L029BH]
  57.          MSDOS
  58.          JC    L0149H  
  59.          LEA   DI,WORD PTR [L029BH]
  60.          CMP   BYTE PTR [DI]+6,1
  61.          JNZ   L0149H  
  62.          MOV   AX,WORD PTR [DI]+16
  63.          MOV   BYTE PTR [L0297H],AL
  64. L0149H:  MOV   AH,0FH
  65.          INT   10H               ;Display control interupt.
  66.          MOV   BYTE PTR [L0298H],AH
  67.          XOR   BX,BX
  68.          MSDOS _XDUP             ;Duplicate a file handle.
  69.          MOV   BP,AX
  70.          MSDOS _CLOSEH           ;Close a file handle.
  71.          MOV   BX,0002H
  72.          MSDOS _XDUP             ;Duplicate a file handle.
  73.          MOV   CX,WORD PTR [L0B32H]
  74.          MOV   DX,0B30H
  75.          MOV   BX,0001H
  76.          MSDOS _WRITEH           ;Write to file/device.
  77. L0172H:  CLD                     ;Set forward direction flag.
  78.          MOV   DX,0B3AH
  79.          MOV   CX,1000H
  80.          MOV   BX,BP
  81.          MSDOS _READH            ;Read from file/device.
  82.          OR    AX,AX
  83.          JNZ   L0185H  
  84. L0183H:  INT   20H
  85. L0185H:  MOV   CX,AX
  86.          MOV   SI,DX
  87. L0189H:  LODSB                   ;Load AL with byt at (SI)+-.
  88.          CMP   AL,EOF
  89.          JZ    L0183H  
  90.          CMP   AL,CR
  91.          JNZ   L0199H  
  92.          MOV   BYTE PTR [L029AH],1
  93.          JMP   SHORT L01E5H  
  94. L0199H:  CMP   AL,LF
  95.          JNZ   L01A3H  
  96.          INC   BYTE PTR [L0299H]
  97.          JMP   SHORT L01E5H  
  98. L01A3H:  CMP   AL,8
  99.          JNZ   L01B4H  
  100.          CMP   BYTE PTR [L029AH],1
  101.          JZ    L01E5H  
  102.          DEC   BYTE PTR [L029AH]
  103.          JMP   SHORT L01E5H  
  104. L01B4H:  CMP   AL,HT
  105.          JNZ   L01CAH  
  106.          MOV   AH,BYTE PTR [L029AH]
  107.          ADD   AH,7
  108.          AND   AH,0F8H
  109.          INC   AH
  110.          MOV   BYTE PTR [L029AH],AH
  111.          JMP   SHORT L01E5H  
  112. L01CAH:  CMP   AL,7
  113.          JZ    L01E5H  
  114.          INC   BYTE PTR [L029AH]
  115.          MOV   AH,BYTE PTR [L029AH]
  116.          CMP   AH,BYTE PTR [L0298H]
  117.          JBE   L01E5H  
  118.          INC   BYTE PTR [L0299H]
  119.          MOV   BYTE PTR [L029AH],1
  120. L01E5H:  MOV   DL,AL
  121.          MSDOS _CONOUT           ;Display character in (DL).
  122.          MOV   AH,BYTE PTR [L0299H]
  123.          CMP   AH,BYTE PTR [L0297H]
  124.          JC    L0230H  
  125.          PUSH  BP
  126.          PUSH  SI
  127.          PUSH  CX
  128.          MOV   AX,0002H
  129.          MOV   BX,0002H
  130.          XOR   CX,CX
  131.          MOV   DL,0
  132.          MOV   DH,0FFH
  133.          CALL  L04A5H  
  134.          MOV   AH,0CH
  135.          MOV   AL,8
  136.          MSDOS
  137.          CMP   AL,0
  138.          JNZ   L0215H  
  139.          MSDOS _DRCINE           ;Read keyboard char into (AL).
  140. L0215H:  MOV   CX,WORD PTR [L0B38H]
  141.          MOV   DX,0B34H
  142.          MOV   BX,0002H
  143.          MSDOS _WRITEH           ;Write to file/device.
  144.          POP   CX
  145.          POP   SI
  146.          POP   BP
  147.          MOV   BYTE PTR [L029AH],1
  148.          MOV   BYTE PTR [L0299H],1
  149. L0230H:  DEC   CX
  150.          JZ    L0236H  
  151.          JMP   L0189H  
  152. L0236H:  JMP   L0172H  
  153. ;
  154. L0239H:  MOV   SI,0080H
  155.          MOV   CL,BYTE PTR [SI]
  156.          XOR   CH,CH
  157.          JCXZ  L0295H            ;Jump if CX=0.
  158.          INC   SI
  159.          XOR   AX,AX
  160. L0245H:  LODSB                   ;Load AL with byt at (SI)+-.
  161.          CMP   AL,'/'
  162.          JZ    L0254H  
  163.          CMP   AL,' '
  164.          JZ    L0250H  
  165.          INC   AH
  166. L0250H:  LOOP  L0245H            ;Dec CX, loop if CX<>0.
  167.          JMP   SHORT L0260H  
  168. L0254H:  JCXZ  L0264H            ;Jump if CX=0.
  169.          CMP   BYTE PTR [SI],'?'
  170.          JZ    L0279H  
  171.          INC   SI
  172.          INC   AH
  173.          LOOP  L0245H            ;Dec CX, loop if CX<>0.
  174. L0260H:  OR    AH,AH
  175.          JZ    L0295H  
  176. L0264H:  MOV   AX,0003H
  177.          MOV   BX,0002H
  178.          XOR   CX,CX
  179.          MOV   DL,0
  180.          MOV   DH,0FFH
  181.          CALL  L04A5H  
  182.          MOV   AX,0001H
  183.          STC                     ;Set the carry flag.
  184.          JMP   SHORT L0296H  
  185. L0279H:  MOV   AX,012CH
  186.          MOV   BX,0001H
  187.          XOR   CX,CX
  188.          MOV   DL,0
  189.          MOV   DH,0FFH
  190. L0285H:  CALL  L04A5H  
  191.          CMP   AX,0130H
  192.          JZ    L0290H  
  193.          INC   AX
  194.          JMP   SHORT L0285H  
  195. L0290H:  XOR   AL,AL
  196.          STC                     ;Set the carry flag.
  197.          JMP   SHORT L0296H  
  198. L0295H:  CLC                     ;Clear the carry flag.
  199. L0296H:  RET
  200. L0297H:  DB    19H
  201. L0298H:  DB    50H
  202. L0299H:  DB    1
  203. L029AH:  DB    1
  204. L029BH:  DB    0,0,0EH,0,0,0
  205.          DB    0,0,0,0,0,0
  206.          DB    0,0,0,0,0,0
  207. L02ADH:  DB    0,0
  208. L02AFH:  DB    0,0
  209. L02B1H:  DB    0,0
  210. L02B3H:  DB    0,0
  211. L02B5H:  DB    0,0
  212. L02B7H:  DB    0,0,0FFH,0FFH,0FFH,0FFH
  213. L02BDH:  DB    0,0
  214. L02BFH:  DB    0,0
  215. L02C1H:  DB    0,0
  216. L02C3H:  DB    0,0,0FFH,0FFH,0FFH,0FFH
  217. L02C9H:  DB    0,0
  218. L02CBH:  DB    0,0
  219. L02CDH:  DB    0,0
  220. L02CFH:  DB    0,0,0FFH,0FFH,0FFH,0FFH
  221. L02D5H:  DB    0FFH,0FFH
  222. L02D7H:  DB    0FFH,0FFH
  223. L02D9H:  DB    0,0,0,0,0FFH,0FFH
  224.          DB    0FFH,0FFH
  225. L02E1H:  DB    0,0
  226. L02E3H:  DB    0,0
  227. L02E5H:  DB    0,0
  228. L02E7H:  DB    0
  229. L02E8H:  DB    0DH,0AH
  230. L02EAH:  DB    0
  231. L02EBH:  DB    0,0
  232. L02EDH:  DB    0,0
  233. L02EFH:  DB    0AH,0
  234. L02F1H:  DB    '$$$$$$$'
  235. L02F8H:  DB    '$$$$$$$$$$$$$$$$'
  236.          DB    '$$$$$$$$$$$$$$$$'
  237.          DB    '$$$$$$$$$$$$$$$$'
  238.          DB    '$$$$$$$$$'
  239. L0331H:  DB    '$MS DOS Version 5.00 (C)Copyright 1981-1991 Microsoft Corp Licensed Material - Property of Microsoft All rights reserved '
  240. ;
  241. L03AAH:  PUSH  AX
  242.          PUSH  BX
  243.          PUSH  DX
  244.          PUSH  ES
  245.          PUSH  DI
  246.          XOR   CX,CX
  247.          MOV   ES,CX
  248.          XOR   DI,DI
  249.          MOV   AX,122EH
  250. L03B8H:  MOV   DL,0
  251.          INT   2FH
  252.          MOV   WORD PTR [L02B7H],ES
  253. L03C0H:  MOV   WORD PTR [L02B5H],DI
  254.          MOV   AX,122EH
  255.          MOV   DL,2
  256.          INT   2FH
  257.          MOV   WORD PTR [L02BFH],ES
  258.          MOV   WORD PTR [L02BDH],DI
  259. L03D3H:  MOV   AX,122EH
  260.          MOV   DL,4
  261. L03D8H:  INT   2FH
  262.          MOV   WORD PTR [L02CFH],ES
  263. L03DEH:  MOV   WORD PTR [L02CDH],DI
  264.          MOV   AX,122EH
  265.          MOV   DL,6
  266.          INT   2FH
  267.          MOV   WORD PTR [L02B3H],ES
  268.          MOV   WORD PTR [L02B1H],DI
  269.          CALL  L098EH  
  270.          MOV   WORD PTR [L02AFH],ES
  271.          MOV   WORD PTR [L02ADH],DI
  272.          MOV   WORD PTR [L02CBH],ES
  273. L0400H:  MOV   WORD PTR [L02C9H],DI
  274.          CALL  L09AFH  
  275.          MOV   WORD PTR [L02C3H],ES
  276.          MOV   WORD PTR [L02C1H],DI
  277.          MOV   AX,122EH
  278.          MOV   DL,8
  279.          INT   2FH
  280.          MOV   WORD PTR [L02D7H],ES
  281.          MOV   WORD PTR [L02D5H],DI
  282.          MOV   WORD PTR [L02E8H],0A0DH
  283.          MOV   BYTE PTR [L0331H],24H
  284.          MOV   WORD PTR [L02EDH],0000H
  285.          MOV   WORD PTR [L02EFH],000AH
  286.          CALL  L0B25H  
  287.          MOV   WORD PTR [L02D9H],DI
  288.          CALL  L0455H  
  289.          CALL  L046DH  
  290.          PUSH  CX
  291.          CALL  L0480H  
  292.          JC    L0450H  
  293.          POP   CX
  294.          POP   DI
  295.          POP   ES
  296.          POP   DX
  297.          POP   BX
  298.          POP   AX
  299.          JMP   SHORT L0454H  
  300. L0450H:  ADD   SP,0CH
  301.          STC                     ;Set the carry flag.
  302. L0454H:  RET
  303. ;
  304. L0455H:  PUSH  AX
  305.          PUSH  SI
  306.          PUSH  DS
  307.          MOV   AX,6300H
  308.          MSDOS
  309.          PUSH  DS
  310.          POP   ES
  311.          POP   DS
  312.          JC    L046AH  
  313.          MOV   WORD PTR [L02E1H],SI
  314.          MOV   WORD PTR [L02E3H],ES
  315. L046AH:  POP   SI
  316.          POP   AX
  317.          RET
  318. ;
  319. L046DH:  MOV   AX,4400H
  320.          MOV   BX,0001H
  321.          XOR   DX,DX
  322.          MSDOS
  323.          OR    DH,1
  324.          MOV   AX,4401H  ;I/O control for devices.
  325.          MSDOS
  326.          RET
  327. ;
  328. L0480H:  MSDOS _GETVER           ;Get DOS version number.
  329.          CMP   AX,05H
  330.          JNZ   L048CH  
  331.          CLC                     ;Clear the carry flag.
  332.          JMP   SHORT L04A4H  
  333. L048CH:  CMP   AX,02H
  334.          JNC   L0496H  
  335.          MOV   BX,0FFFFH
  336.          JMP   SHORT L0499H  
  337. L0496H:  MOV   BX,0002H
  338. L0499H:  MOV   AX,0001H
  339.          MOV   CX,0000H
  340.          MOV   DL,0
  341.          MOV   DH,0FFH
  342.          STC                     ;Set the carry flag.
  343. L04A4H:  RET
  344. ;
  345. L04A5H:  PUSH  AX
  346.          PUSH  BX
  347.          PUSH  CX
  348.          PUSH  BP
  349.          PUSH  DI
  350.          PUSH  ES
  351.          PUSH  DX
  352.          MOV   BP,CX
  353.          MOV   WORD PTR [L02E5H],BX
  354.          MOV   BYTE PTR [L02EAH],DH
  355.          CALL  L0771H  
  356.          OR    CX,CX
  357.          JZ    L04D9H  
  358.          OR    BP,BP
  359.          JNZ   L04C6H  
  360.          CALL  L04EAH  
  361.          JMP   SHORT L04C9H  
  362. L04C6H:  CALL  L0679H  
  363. L04C9H:  JC    L04D3H  
  364.          POP   DX
  365.          CALL  L05D4H  
  366.          POP   ES
  367.          POP   DI
  368.          JMP   SHORT L04D7H  
  369. L04D3H:  ADD   SP,6
  370.          STC                     ;Set the carry flag.
  371. L04D7H:  JMP   SHORT L04DDH  
  372. L04D9H:  POP   ES
  373.          POP   DI
  374.          POP   DX
  375.          STC                     ;Set the carry flag.
  376. L04DDH:  JC    L04E5H  
  377.          POP   BP
  378.          POP   CX
  379.          POP   BX
  380.          POP   AX
  381.          JMP   SHORT L04E9H  
  382. L04E5H:  ADD   SP,8
  383.          STC                     ;Set the carry flag.
  384. L04E9H:  RET
  385. ;
  386. L04EAH:  PUSH  AX
  387.          PUSH  BX
  388.          PUSH  DX
  389.          MOV   BX,WORD PTR [L02E5H]
  390.          CMP   BX,-1
  391.          JNZ   L04FBH  
  392.          CALL  L0525H  
  393.          JMP   SHORT L04FEH  
  394. L04FBH:  CALL  L0575H  
  395. L04FEH:  JNC   L050FH  
  396. L0500H:  MOV   AH,59H
  397. L0502H:  MOV   BX,0000H
  398.          MSDOS
  399.          XOR   AH,AH
  400.          ADD   SP,6
  401.          STC                     ;Set the carry flag.
  402.          JMP   SHORT L051FH  
  403. L050FH:  CMP   BX,-1
  404.          JZ    L051FH  
  405.          CMP   AX,CX
  406.          JZ    L051FH  
  407.          CALL  L05CBH  
  408.          ADD   SP,6
  409.          STC                     ;Set the carry flag.
  410. L051FH:  JC    L0524H  
  411.          POP   DX
  412.          POP   BX
  413.          POP   AX
  414. L0524H:  RET
  415. ;
  416. L0525H:  PUSH  DS
  417.          PUSH  ES
  418.          POP   DS
  419.          CMP   CX,1
  420.          JNZ   L0548H  
  421.          MOV   AH,2
  422.          MOV   DL,BYTE PTR ES:[DI]
  423.          MSDOS
  424.          POP   DS
  425.          MOV   AL,DL
  426.          CALL  L05EBH  
  427.          PUSH  DS
  428.          PUSH  ES
  429.          POP   DS
  430.          JNC   L0546H  
  431.          MOV   DL,BYTE PTR ES:[DI]+1
  432.          MSDOS
  433.          CLC                     ;Clear the carry flag.
  434. L0546H:  JMP   SHORT L0557H  
  435. L0548H:  MOV   AH,2
  436. L054AH:  OR    CX,CX
  437.          JZ    L0557H  
  438.          MOV   DL,BYTE PTR ES:[DI]
  439.          MSDOS
  440.          INC   DI
  441.          DEC   CX
  442.          JNZ   L054AH  
  443. L0557H:  CLC                     ;Clear the carry flag.
  444.          POP   DS
  445.          RET
  446. ;
  447. L055AH:  PUSH  DI
  448.          PUSH  AX
  449.          PUSH  ES
  450.          PUSH  BX
  451.          MOV   DI,DX
  452.          PUSH  DS
  453.          POP   ES
  454.          MOV   BX,CX
  455.          MOV   AL,1AH
  456.          CLD                     ;Set forward direction flag.
  457.          REPNZ SCASB             ;Scan (DI)+- for byt in AL.
  458.          JNZ   L056EH  
  459.          SUB   BX,CX
  460.          DEC   BX
  461. L056EH:  MOV   CX,BX
  462.          POP   BX
  463.          POP   ES
  464.          POP   AX
  465.          POP   DI
  466.          RET
  467. ;
  468. L0575H:  XOR   AX,AX
  469.          OR    CX,CX
  470.          JZ    L05CAH  
  471.          PUSH  DS
  472.          PUSH  ES
  473.          POP   DS
  474.          MOV   AH,40H
  475.          MOV   DX,DI
  476.          CMP   CX,1
  477.          JNZ   L05AFH  
  478.          MSDOS
  479.          POP   DS
  480.          PUSH  AX
  481.          MOV   AL,BYTE PTR ES:[DI]
  482.          CALL  L05EBH  
  483.          POP   AX
  484.          PUSH  DS
  485.          PUSH  ES
  486.          POP   DS
  487.          JNC   L059DH  
  488.          CLC                     ;Clear the carry flag.
  489.          MOV   AH,40H
  490.          INC   DX
  491.          MSDOS
  492. L059DH:  PUSHF                   ;Push flag register.
  493.          CMP   BYTE PTR ES:[DI],EOF
  494.          JNZ   L05A6H  
  495.          MOV   AX,CX
  496. L05A6H:  JMP   SHORT L05A9H  
  497. ;
  498. L05A8H:  IRET                    ;Return from interupt.
  499. L05A9H:  PUSH  CS
  500.          CALL  L05A8H  
  501.          JMP   SHORT L05C9H  
  502. L05AFH:  PUSH  BP
  503.          PUSH  CX
  504.          CALL  L055AH  
  505.          MOV   BP,CX
  506.          POP   CX
  507.          MSDOS
  508.          JNC   L05BDH  
  509.          JMP   SHORT L05C8H  
  510. L05BDH:  CMP   CX,AX
  511.          JZ    L05C8H  
  512.          CMP   BP,AX
  513.          CLC                     ;Clear the carry flag.
  514.          JNZ   L05C8H  
  515.          MOV   AX,CX
  516. L05C8H:  POP   BP
  517. L05C9H:  POP   DS
  518. L05CAH:  RET
  519. ;
  520. L05CBH:  MOV   AX,0027H
  521.          MOV   BX,0004H
  522.          MOV   CH,1
  523.          RET
  524. ;
  525. L05D4H:  CMP   DH,0FFH
  526.          JZ    L05EAH  
  527.          TEST  DH,80H
  528.          JNZ   L05EAH  
  529.          PUSH  DS
  530.          POP   ES
  531.          LEA   DI,WORD PTR [L02E8H]
  532.          MOV   CX,0002H
  533.          CALL  L04EAH  
  534. L05EAH:  RET
  535. ;
  536. L05EBH:  PUSH  ES
  537.          PUSH  DI
  538.          LES   DI,DWORD PTR [L02E1H];Load ES:DI with 32b pointer.
  539.          OR    DI,DI
  540.          JZ    L060CH  
  541. L05F5H:  CMP   WORD PTR ES:[DI],0
  542.          CLC                     ;Clear the carry flag.
  543.          JZ    L060CH  
  544.          CMP   AL,BYTE PTR ES:[DI]
  545.          JC    L0608H  
  546.          CMP   AL,BYTE PTR ES:[DI]+1
  547.          JA    L0608H  
  548.          STC                     ;Set the carry flag.
  549. L0608H:  INC   DI
  550.          INC   DI
  551.          JMP   SHORT L05F5H  
  552. L060CH:  POP   DI
  553.          POP   ES
  554.          RET
  555. ;
  556. L060FH:  POP   WORD PTR [l02EBH]
  557.          XOR   BX,BX
  558.          XCHG  AX,BX
  559.          XCHG  AX,DX
  560. L0617H:  DIV   WORD PTR [l02EFH]
  561.          XCHG  AX,BX
  562.          DIV   WORD PTR [L02EFH]
  563.          CMP   DX,HT
  564.          JBE   L062AH  
  565.          ADD   DL,37H
  566.          JMP   SHORT L062DH  
  567. L062AH:  ADD   DL,30H
  568. L062DH:  PUSH  DX
  569.          INC   CX
  570.          OR    AX,AX
  571.          JNZ   L0637H  
  572.          OR    BX,BX
  573.          JZ    L0670H  
  574. L0637H:  CMP   CX,3
  575.          JNZ   L0649H  
  576.          CMP   BYTE PTR [SI]+10,','
  577.          JNZ   L0647H  
  578.          PUSH  WORD PTR [L02F8H]
  579.          INC   CX
  580. L0647H:  JMP   SHORT L066BH  
  581. L0649H:  CMP   CX,6
  582.          JNZ   L065BH  
  583.          CMP   BYTE PTR [SI]+10,','
  584.          JNZ   L0659H  
  585.          PUSH  WORD PTR [L02F8H]
  586.          INC   CX
  587. L0659H:  JMP   SHORT L066BH  
  588. L065BH:  CMP   CX,HT
  589.          JNZ   L066BH  
  590.          CMP   BYTE PTR [SI]+10,','
  591.          JNZ   L066BH  
  592.          PUSH  WORD PTR [L02F8H]
  593.          INC   CX
  594. L066BH:  XCHG  AX,BX
  595.          XOR   DX,DX
  596.          JMP   SHORT L0617H  
  597. L0670H:  XOR   DX,DX
  598.          XOR   AX,AX
  599.          PUSH  WORD PTR [L02EBH]
  600.          RET
  601. ;
  602. L0679H:  XOR   DX,DX
  603.          OR    CX,CX
  604.          JZ    L06A0H  
  605.          MOV   AH,25H
  606.          MOV   AL,0
  607. L0683H:  CMP   BYTE PTR ES:[DI],AH
  608.          JNZ   L0692H  
  609.          CMP   BYTE PTR ES:[DI]+1,AH
  610.          JZ    L0692H  
  611.          CMP   AL,AH
  612.          JNZ   L06A0H  
  613. L0692H:  MOV   AL,BYTE PTR ES:[DI]
  614.          CALL  L05EBH  
  615.          JNC   L069BH  
  616.          INC   DI
  617. L069BH:  INC   DI
  618.          INC   DX
  619.          DEC   CX
  620.          JNZ   L0683H  
  621. L06A0H:  PUSH  SI
  622.          XCHG  CX,DX
  623.          OR    BP,BP
  624.          JZ    L06DAH  
  625.          DEC   BP
  626.          CMP   WORD PTR [L02EDH],0
  627.          JNZ   L06DAH  
  628. L06AFH:  MOV   AL,BYTE PTR [SI]+6
  629.          ADD   AL,30H
  630.          CMP   AL,BYTE PTR ES:[DI]+1
  631.          JNZ   L06BCH  
  632.          JMP   SHORT L06DAH  
  633. L06BCH:  CMP   AL,'0'
  634.          JNZ   L06C4H  
  635.          OR    DX,DX
  636.          JZ    L06C8H  
  637. L06C4H:  ADD   SI,WORD PTR [SI]
  638.          JMP   SHORT L06AFH  
  639. L06C8H:  CMP   BYTE PTR [L02EAH],0FFH
  640.          JNZ   L06D7H  
  641.          INC   DX
  642.          INC   DX
  643.          DEC   CX
  644.          DEC   CX
  645.          DEC   DI
  646.          DEC   DI
  647.          JMP   SHORT L06DAH  
  648. L06D7H:  MOV   DX,0FFFFH
  649. L06DAH:  PUSH  DI
  650.          SUB   DI,CX
  651.          CALL  L04EAH  
  652.          POP   DI
  653.          POP   CX
  654.          JNC   L06E7H  
  655.          JMP   SHORT L073DH  
  656.          NOP
  657. L06E7H:  PUSH  CX
  658.          MOV   CX,DX
  659.          CMP   BYTE PTR [SI]+6,0
  660.          JZ    L06FDH  
  661.          OR    CX,CX
  662.          JZ    L06FAH  
  663.          DEC   CX
  664.          DEC   CX
  665.          INC   DI
  666.          INC   DI
  667.          JMP   SHORT L06FBH  
  668. L06FAH:  POP   SI
  669. L06FBH:  JMP   SHORT L070DH  
  670. L06FDH:  OR    CX,CX
  671.          JNZ   L0704H  
  672.          POP   SI
  673.          JMP   SHORT L070DH  
  674. L0704H:  CMP   CX,-1
  675.          JNZ   L070BH  
  676.          XOR   CX,CX
  677. L070BH:  OR    DI,DI
  678. L070DH:  JZ    L073DH  
  679.          PUSH  BP
  680.          PUSH  DI
  681.          PUSH  ES
  682.          PUSH  CX
  683.          XOR   CX,CX
  684.          CMP   WORD PTR [L02EDH],0
  685.          JNZ   L0721H  
  686.          CALL  L0899H  
  687.          JMP   SHORT L0724H  
  688. L0721H:  CALL  L0744H  
  689. L0724H:  JC    L072DH  
  690.          POP   CX
  691.          POP   ES
  692.          POP   DI
  693.          POP   BP
  694.          POP   SI
  695.          JMP   SHORT L0731H  
  696. L072DH:  ADD   SP,0AH
  697.          STC                     ;Set the carry flag.
  698. L0731H:  CMP   WORD PTR [L02EDH],0
  699.          JNZ   L073DH  
  700.          JC    L073DH  
  701.          JMP   L0679H  
  702. L073DH:  MOV   WORD PTR [L02EDH],0000H
  703.          RET
  704. ;
  705. L0744H:  XOR   DX,DX
  706.          MOV   AX,WORD PTR [L02EDH]
  707.          MOV   WORD PTR [L02EFH],000AH
  708.          CALL  L060FH  
  709. L0752H:  POP   AX
  710.          MOV   BYTE PTR [BX]+02F1H,AL
  711.          INC   BX
  712.          CMP   BX,'@'
  713.          JNZ   L0760H  
  714.          CALL  L0958H  
  715. L0760H:  DEC   CL
  716.          JNZ   L0752H  
  717.          MOV   AX,0A0DH
  718.          MOV   WORD PTR [BX]+02F1H,AX
  719.          INC   BX
  720.          INC   BX
  721.          CALL  L0958H  
  722.          RET
  723. ;
  724. L0771H:  PUSH  SI
  725.          PUSH  BX
  726.          XOR   SI,SI
  727.          XOR   CX,CX
  728. L0777H:  CMP   DH,0FFH
  729.          JNZ   L0784H  
  730.          MOV   DI,WORD PTR [SI]+02D9H
  731.          MOV   BX,DI
  732.          JMP   SHORT L07A9H  
  733. L0784H:  TEST  DH,2
  734.          JZ    L0791H  
  735.          LES   DI,DWORD PTR [SI]+02BDH;Load ES:DI with 32b pointer.
  736.          MOV   BX,ES
  737.          JMP   SHORT L07A9H  
  738. L0791H:  CMP   AX,13H
  739.          JC    L07A3H  
  740.          CMP   AX,27H
  741.          JA    L07A3H  
  742.          LES   DI,DWORD PTR [SI]+02C9H;Load ES:DI with 32b pointer.
  743.          MOV   BX,ES
  744.          JMP   SHORT L07A9H  
  745. L07A3H:  LES   DI,DWORD PTR [SI]+02ADH;Load ES:DI with 32b pointer.
  746.          MOV   BX,ES
  747. L07A9H:  CMP   BX,-1
  748.          JNZ   L07C4H  
  749.          CMP   DH,0FFH
  750.          JNZ   L07B6H  
  751.          STC                     ;Set the carry flag.
  752.          JMP   SHORT L07C2H  
  753. L07B6H:  MOV   WORD PTR [L02EDH],AX
  754.          MOV   AX,0FFFFH
  755.          MOV   BP,0001H
  756.          XOR   SI,SI
  757.          CLC                     ;Clear the carry flag.
  758. L07C2H:  JMP   SHORT L07D0H  
  759. L07C4H:  CMP   BX,0
  760.          JZ    L07CCH  
  761.          CALL  L0820H  
  762. L07CCH:  ADD   SI,4
  763.          CLC                     ;Clear the carry flag.
  764. L07D0H:  JC    L07D8H  
  765.          OR    CX,CX
  766.          JNZ   L07D8H  
  767.          JMP   SHORT L0777H  
  768. L07D8H:  PUSHF                   ;Push flag register.
  769.          CMP   DH,1
  770.          JNZ   L0807H  
  771.          PUSH  DX
  772.          PUSH  BP
  773.          PUSH  CX
  774.          PUSH  ES
  775.          PUSH  DI
  776.          PUSH  AX
  777.          MOV   AX,0500H
  778.          INT   2FH
  779.          CMP   AL,0FFH
  780.          POP   AX
  781.          JNZ   L07F7H  
  782.          MOV   BX,AX
  783.          MOV   AX,0502H
  784.          INT   2FH
  785.          JMP   SHORT L07F8H  
  786. L07F7H:  STC                     ;Set the carry flag.
  787. L07F8H:  JNC   L07FFH  
  788.          POP   DI
  789.          POP   ES
  790.          POP   CX
  791.          JMP   SHORT L0805H  
  792. L07FFH:  ADD   SP,6
  793.          CALL  L0811H  
  794. L0805H:  POP   BP
  795.          POP   DX
  796. L0807H:  JMP   SHORT L080AH  
  797. ;
  798. L0809H:  IRET                    ;Return from interupt.
  799. L080AH:  PUSH  CS
  800.          CALL  L0809H  
  801.          POP   BX
  802.          POP   SI
  803.          RET
  804. ;
  805. L0811H:  PUSH  DI
  806.          PUSH  AX
  807.          MOV   CX,0FFFFH
  808.          XOR   AL,AL
  809.          REPNZ SCASB             ;Scan (DI)+- for byt in AL.
  810.          NOT   CX
  811.          DEC   CX
  812.          POP   AX
  813.          POP   DI
  814.          RET
  815. ;
  816. L0820H:  CMP   BX,1
  817.          JNZ   L0842H  
  818.          CMP   WORD PTR [L02D5H],-1
  819.          JZ    L0842H  
  820.          CMP   AX,0FFFFH
  821.          JNZ   L083CH  
  822.          PUSH  AX
  823.          MOV   AX,WORD PTR [L02EDH]
  824.          CALL  DWORD PTR [L02D5H]
  825.          POP   AX
  826.          JMP   SHORT L0840H  
  827. L083CH:  CALL  DWORD PTR [L02D5H]
  828. L0840H:  JMP   SHORT L085CH  
  829. L0842H:  XOR   CX,CX
  830.          CMP   DH,0FFH
  831.          JZ    L084FH  
  832.          MOV   CL,BYTE PTR ES:[DI]+3
  833.          JMP   SHORT L0858H  
  834. L084FH:  CMP   BYTE PTR CS:[DI],DH
  835.          JNZ   L0858H  
  836.          MOV   CL,BYTE PTR CS:[DI]+3
  837. L0858H:  ADD   DI,4
  838.          STC                     ;Set the carry flag.
  839. L085CH:  JNC   L088BH  
  840.          CLC                     ;Clear the carry flag.
  841. L085FH:  OR    CX,CX
  842.          JZ    L087CH  
  843.          CMP   DH,0FFH
  844.          JZ    L086DH  
  845.          CMP   AX,WORD PTR ES:[DI]
  846.          JMP   SHORT L0870H  
  847. L086DH:  CMP   AX,WORD PTR CS:[DI]
  848. L0870H:  JNZ   L0874H  
  849.          JMP   SHORT L087DH  
  850. L0874H:  DEC   CX
  851.          JZ    L087CH  
  852.          ADD   DI,4
  853.          JMP   SHORT L085FH  
  854. L087CH:  STC                     ;Set the carry flag.
  855. L087DH:  JC    L088BH  
  856.          CMP   DH,0FFH
  857.          CLC                     ;Clear the carry flag.
  858.          JNZ   L0887H  
  859.          PUSH  CS
  860.          POP   ES
  861. L0887H:  ADD   DI,WORD PTR ES:[DI]+2
  862. L088BH:  JC    L0893H  
  863.          XOR   CH,CH
  864.          MOV   CL,BYTE PTR ES:[DI]
  865.          INC   DI
  866. L0893H:  MOV   BYTE PTR [L02E7H],0
  867.          RET
  868. ;
  869. L0899H:  XOR   BX,BX
  870.          CMP   BYTE PTR [SI]+6,0
  871.          JNZ   L08B2H  
  872.          MOV   WORD PTR [BX]+02F1H,2D20H
  873.          INC   BX
  874.          INC   BX
  875.          MOV   BYTE PTR [BX]+02F1H,20H
  876.          INC   BX
  877.          CALL  L0958H  
  878. L08B2H:  POP   BP
  879.          XOR   BX,BX
  880.          XOR   DX,DX
  881.          MOV   BYTE PTR [L02E7H],CL
  882.          MOV   AL,BYTE PTR [SI]+9
  883.          CMP   AL,CL
  884.          JBE   L08E0H  
  885.          SUB   AL,CL
  886.          MOV   DH,AL
  887.          TEST  BYTE PTR [SI]+7,80H
  888.          JZ    L08E0H  
  889. L08CCH:  MOV   AL,BYTE PTR [SI]+10
  890.          MOV   BYTE PTR [BX]+02F1H,AL
  891.          INC   BX
  892.          CMP   BX,'@'
  893.          JNZ   L08DCH  
  894.          CALL  L0958H  
  895. L08DCH:  DEC   DH
  896.          JNZ   L08CCH  
  897. L08E0H:  CMP   BYTE PTR [SI]+8,0
  898.          JZ    L08F3H  
  899.          CMP   BYTE PTR [SI]+8,CL
  900.          JNC   L08F3H  
  901.          SUB   CL,BYTE PTR [SI]+8
  902.          MOV   DL,CL
  903.          MOV   CL,BYTE PTR [SI]+8
  904. L08F3H:  OR    CX,CX
  905.          JZ    L091BH  
  906. L08F7H:  TEST  BYTE PTR [SI]+7,0FH
  907.          JNZ   L0909H  
  908.          TEST  BYTE PTR [SI]+7,10H
  909.          JZ    L0909H  
  910.          MOV   AL,BYTE PTR ES:[DI]
  911.          INC   DI
  912.          JMP   SHORT L090AH  
  913. L0909H:  POP   AX
  914. L090AH:  MOV   BYTE PTR [BX]+02F1H,AL
  915.          INC   BX
  916.          CMP   BX,'@'
  917.          JNZ   L0917H  
  918.          CALL  L0958H  
  919. L0917H:  DEC   CL
  920.          JNZ   L08F7H  
  921. L091BH:  TEST  BYTE PTR [SI]+7,80H
  922.          JNZ   L0939H  
  923.          OR    DH,DH
  924.          JZ    L0939H  
  925. L0925H:  MOV   AL,BYTE PTR [SI]+10
  926.          MOV   BYTE PTR [BX]+02F1H,AL
  927.          INC   BX
  928.          CMP   BX,'@'
  929.          JNZ   L0935H  
  930.          CALL  L0958H  
  931. L0935H:  DEC   DH
  932.          JNZ   L0925H  
  933. L0939H:  TEST  BYTE PTR [SI]+7,0FH
  934.          JNZ   L0947H  
  935.          TEST  BYTE PTR [SI]+7,10H
  936.          JZ    L0947H  
  937.          JMP   SHORT L0953H  
  938. L0947H:  OR    DL,DL
  939.          JZ    L0953H  
  940. L094BH:  POP   WORD PTR [L02EBH]
  941.          DEC   DL
  942.          JNZ   L094BH  
  943. L0953H:  CALL  L0958H  
  944.          PUSH  BP
  945.          RET
  946. ;
  947. L0958H:  PUSH  CX
  948.          PUSH  ES
  949.          PUSH  DI
  950.          PUSH  DS
  951.          POP   ES
  952.          MOV   CX,BX
  953.          XOR   BX,BX
  954.          LEA   DI,WORD PTR [L02F1H]
  955.          CALL  L04EAH  
  956.          JC    L096FH  
  957.          POP   DI
  958.          POP   ES
  959.          POP   CX
  960.          JMP   SHORT L0973H  
  961. L096FH:  ADD   SP,6
  962.          STC                     ;Set the carry flag.
  963. L0973H:  RET
  964. L0974H:  DB    1,5,0,1,0FFH,0FFH
  965.          DB    4,0,11H,45H,78H,74H
  966.          DB    65H,6EH,64H,65H,64H,20H
  967.          DB    45H,72H,72H,6FH,72H,20H
  968.          DB    25H,31H
  969. ;
  970. L098EH:  DB    0EH,7,8DH,3EH,74H,9
  971.          DB    83H,0C1H,20H,0C3H,2,5
  972.          DB    0,1,0FFH,0FFH,4,0
  973.          DB    0EH,50H,61H,72H,73H,65H
  974.          DB    20H,45H,72H,72H,6FH,72H
  975. L09ACH:  DB    20H,25H,31H
  976. ;
  977. L09AFH:  DB    0EH,7,8DH,3EH,98H,9
  978.          DB    83H,0C1H,1DH,0C3H,0FFH,5
  979.          DB    0,8,1,0,20H,0
  980.          DB    2,0,34H,0,3,0
  981.          DB    3BH,0,2CH,1,5CH,0
  982.          DB    2DH,1,82H,0,2EH,1
  983.          DB    9EH,0,2FH,1,0B2H,0
  984.          DB    30H,1,0FCH,0,17H
  985.          DB    'Incorrect DOS version',CR,LF,LF
  986.          DB    '-- More --$'
  987.          DB    'Too many arguments in command line',CR,LF
  988.          DB    29H,'Displays output one screen at a time.',CR,LF,CR,LF
  989.          DB    1FH,'MORE < [drive:][path]filename',CR,LF
  990.          DB    17H,'command-name | MORE',CR,LF,CR,LF
  991.          DB    4DH,'  [drive:][path]filename  Specifies a file to display one screen at a time.',CR,LF
  992.          DB    4FH,'  command-name            Specifies a command whose output will be displayed.',CR,LF
  993. ;
  994. L0B25H:  DB    0EH,7,8DH,'>',0B9H
  995.          DB    HT,81H,0C1H,'r',1
  996.          DB    0C3H
  997. L0B30H:  DB    CR,LF
  998. L0B32H:  DB    2,0
  999. L0B34H:  DB    CR,LF,CR,LF
  1000. L0B38H:  DB    4,0                       ;end of file .....
  1001. Code_Seg ENDS
  1002.          END   L0100H  
  1003.