home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / batch / library / batutl2 / answer.asm next >
Assembly Source File  |  1988-04-20  |  3KB  |  141 lines

  1. TITLE    ANSWER    2-3-86    [4-15-88]
  2. ;Toad Hall Disassembly
  3. ;Didn't get very far in the documentation on this one.
  4.  
  5. .RADIX    16
  6. LF    EQU    0AH
  7. CR    EQU    0DH
  8. ;
  9. ;INITIAL VALUES :    CS:IP    0000:0100
  10. ;            SS:SP    0000:FFFF
  11. CodeSeg    SEGMENT
  12.     ASSUME DS:CodeSeg,SS:CodeSeg,CS:CodeSeg,ES:CodeSeg
  13.     ORG    100H
  14.  
  15. Answer    proc
  16.     MOV    SI,80H            ;PSP cmd line
  17.     LODSB                ;snarf length byte
  18.     AND    AX,7FH            ;mask
  19.     JZ    L0117            ;zero, no cmd line
  20.     MOV    DI,AX            ;length 
  21.     ADD    DI,SI            ;point into cmd line
  22.     MOV    BYTE PTR [DI],'$'    ;stuff terminating $
  23.     MOV    DX,SI            ;command line
  24.     INC    DX            ;bump past length byte
  25.     MOV    AH,9            ;print string
  26.     INT    21
  27. L0117:    MOV    DX,OFFSET kbdbuf_1D3    ;keyboard input buffer
  28.     MOV    AH,0AH            ;buffered kbd input
  29.     INT    21
  30.     CALL    L01A0
  31.     MOV    CX,BX
  32.     MOV    ES,AX
  33.     XOR    DI,DI
  34.     XOR    AL,AL            ;scan for a 0
  35.     CLD                ;insure fwd
  36. Lup12A:    REPNZ    SCASB
  37.     JNZ    Endit_16C
  38.     CMP    AL,ES:[DI]
  39.     JZ    L0171
  40.     MOV    DX,DI
  41.     MOV    BP,CX
  42.     MOV    SI,OFFSET LOGO        ;compare with our logo
  43.     MOV    CX,7            ;7 bytes
  44.     REPZ    CMPSB
  45.     JZ    L0147            ;didn't find a match
  46.      MOV    DI,DX            ;refresh DI
  47.      MOV    CX,BP
  48.      JMP    SHORT    Lup12A        ;reloop
  49.  
  50. L0147:    MOV    CX,51H            ;scan for 51H bytes
  51.     REPNZ    SCASB
  52.     JNZ    Endit_16C        ;die, Errorlevel 1
  53.     MOV    SI,DI
  54.     MOV    DI,DX
  55.     MOV    CX,ES
  56.     MOV    DS,CX
  57.     MOV    CX,BX
  58.     SUB    CX,SI
  59. Lup15A:    LODSB
  60.     AND    AL,AL
  61.     JZ    L0171
  62. Lup15F:    STOSB
  63.     LOOP    Lup164
  64.     JMP    SHORT    Endit_16C    ;die, errorlevel 1
  65.  
  66. Lup164:    LODSB
  67.     AND    AL,AL
  68.     JNZ    Lup15F
  69.     STOSB
  70.     LOOP    Lup15A
  71. Endit_16C:
  72.     MOV    AX,4C01H        ;Exit, Errorlevel 1
  73.     INT    21
  74.  
  75. L0171:    MOV    BYTE PTR ES:[DI],0
  76.     MOV    AX,CS
  77.     MOV    DS,AX
  78.     MOV    AL,blen_1D4
  79.     XOR    AH,AH
  80.     ADD    AX,8
  81.     ADD    AX,DI
  82.     CMP    AX,BX
  83.     JNB    Endit_16C        ;die, Errorlevel 1
  84.     MOV    SI,OFFSET LOGO        ;'ASK=VERSION...'
  85.     MOV    CX,7            ;move 7 bytes
  86.     REPZ    MOVSB
  87.     MOV    SI,OFFSET buff_1D5
  88.     MOV    CL,blen_1D4        ;length byte
  89.     REPZ    MOVSB            ;move the buffer
  90.     XOR    AX,AX            ;terminate with 0
  91.     STOSW
  92.     MOV    AX,4C00H        ;Terminate, no error
  93.     INT    21
  94. Answer    endp
  95.  
  96.  
  97. ;L01A0      L011E CC
  98. L01A0    proc    near
  99.     PUSH    ES
  100.     MOV    AX,CS
  101.     MOV    ES,AX
  102.     ASSUME    ES:CodeSeg
  103.  
  104.     MOV    AX,ES:14H
  105.     MOV    ES,AX
  106.     ASSUME    ES:Nothing
  107.  
  108.     MOV    AX,ES:2CH
  109.     AND    AX,AX
  110.     JNZ    L01C0
  111.      MOV    AX,ES
  112.      DEC    AX
  113.      MOV    ES,AX
  114.      ADD    AX,ES:3
  115. ;     ADD    AX,2
  116.      inc    ax
  117.      inc    ax
  118. L01C0:    DEC    AX
  119.     MOV    ES,AX
  120.     INC    AX
  121.     MOV    BX,ES:3
  122.     SHL    BX,1
  123.     SHL    BX,1
  124.     SHL    BX,1
  125.     SHL    BX,1
  126.     POP    ES
  127.     RET
  128. L01A0    endp
  129.  
  130. ;L01D3      L0117 DI
  131. kbdbuf_1D3    DB    50H
  132. ;L01D4      L0179 DR  L0192 DR
  133. blen_1D4    DB    0
  134. ;L01D5      L018F DI
  135. buff_1D5    DB    50H DUP(0)
  136. ;L0225      L0137 DI  L0187 DI
  137. LOGO    DB    'ANSWER=VER 1.00'
  138.     CodeSeg    ENDS
  139. ;
  140. END    Answer
  141.