Annotation of ntddk/src/vdd/dosioctl/dosapp/dosapp.asm, revision 1.1.1.1

1.1       root        1:         name    @filename
                      2: ;*--------------------------------------------------------------------*
                      3: ;
                      4: ;       DOSAPP
                      5: ;
                      6: ;   This DOS application opens a character mode device driver
                      7: ;   (DOSDRV00), and issues an IOCTL read to the device. It then
                      8: ;   displays the DWORD value it read from the IOCTL.
                      9: ;
                     10: ;*--------------------------------------------------------------------*
                     11: 
                     12:         include dosapp.inc
                     13:         include xio.inc
                     14:         include isvbop.inc
                     15: 
                     16: ;*--------------------------------------------------------------------*
                     17: ;
                     18: ;       DATA
                     19: ;
                     20: ;*--------------------------------------------------------------------*
                     21: 
                     22: _DATA   segment word public 'DATA'
                     23: 
                     24: 
                     25: DriverName db  "DOSDRV00",0
                     26: 
                     27: hDriver dw      ?
                     28: errret  dw      ?
                     29: DriverInfo dd   ?
                     30: 
                     31: infmsg  db      'IOCTL Read returns: '
                     32: infmsgx dd      2 dup (?)
                     33:         db      cr,lf
                     34: infmsgl equ     $-infmsg
                     35: 
                     36: errmsg  db      'Open failed, Error='
                     37: errmsgx dd      ?
                     38:         db      cr,lf
                     39: errmsgl equ     $-errmsg
                     40: 
                     41: _DATA   ends
                     42: 
                     43: 
                     44: _TEXT   segment word public 'CODE'
                     45:         assume cs:_TEXT,ds:_DATA,es:_DATA
                     46: 
                     47: ;*--------------------------------------------------------------------*
                     48: ;
                     49: ;       MAIN procedure
                     50: ;
                     51: ;*--------------------------------------------------------------------*
                     52: 
                     53: @filename proc  far
                     54:         mov     ax, _DATA                   ;get addressibility
                     55:         mov     ds, ax
                     56:         mov     es, ax
                     57: 
                     58:         mov     ah, DOSOPENFILE
                     59:         mov     al, 00010010b               ;r/w, deny all
                     60:         mov     dx, OFFSET DriverName
                     61:         int     21h                         ;open device
                     62:         jc      opfail
                     63:         mov     hDriver, ax                 ;save handle
                     64: 
                     65:         mov     ah, DOSIOCTL
                     66:         mov     al, 2                       ;IOCTL read
                     67:         mov     bx, hDriver
                     68:         mov     cx, 4                       ;# of bytes
                     69:         mov     dx, offset DriverInfo
                     70:         int     21h                         ;issue IOCTL to device
                     71: 
                     72:         hxtrans DriverInfo, infmsgx, 4      ;make DWORD ASCII
                     73:         Writel  infmsg                      ;output to console
                     74: 
                     75:         mov     ah, DOSCLOSEFILE
                     76:         mov     bx, hDriver
                     77:         int     21h                         ;close the driver
                     78:         jmp     exit
                     79: 
                     80: opfail:
                     81:         mov     errret, ax
                     82:         hxtrans errret, errmsgx, 2
                     83:         Writel  errmsg                      ;write msg if open failed
                     84: 
                     85: exit:
                     86:         mov     ax,4c00h
                     87:         int     21h
                     88: 
                     89: @filename endp
                     90: 
                     91: 
                     92: 
                     93: ;*--------------------------------------------------------------------*
                     94: ;
                     95: ;       hextrans
                     96: ;
                     97: ;       This subroutine formats hex values into ASCII
                     98: ;
                     99: ;       ENTRY:
                    100: ;               CX    = size in bytes of operand
                    101: ;               DS:SI-> input hex value (in memory)
                    102: ;               ES:DI-> output area
                    103: ;
                    104: ;       USES:
                    105: ;               AX, SI, DI
                    106: ;*--------------------------------------------------------------------*
                    107: 
                    108: hextrans proc    near
                    109: 
                    110:         push    bx
                    111:         push    cx
                    112: 
                    113:         cmp     cx, 0           ; must be higher
                    114:         jna     hextexit        ; nope
                    115:         add     si, cx          ; point to end of value
                    116:         dec     si              ; now pointing at last byte
                    117: hext1:
                    118:         push    cx
                    119:         lodsb                   ; get hex byte
                    120:         sub     si, 2           ; make this a decrement
                    121: 
                    122:         mov     bx, ax          ; save for next nibble
                    123:         mov     cx, 4           ; isolate next four bits
                    124:         shr     ax, cl          ; get top nibble
                    125: 
                    126:         cvt_nibble              ; make it ascii
                    127:         stosb                   ; save it in destination
                    128:         mov     ax, bx          ; retrieve original byte
                    129:         cvt_nibble              ; make it ascii
                    130:         stosb                   ; save it in destination
                    131:         pop     cx
                    132:         loop    hext1
                    133: 
                    134: hextexit:
                    135:         pop     cx
                    136:         pop     bx
                    137:         ret                     ; back to caller
                    138: 
                    139: hextrans endp
                    140: 
                    141: _TEXT   ends
                    142: 
                    143:         end     @filename

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.