home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / advos2 / ch09 / tryqfn.asm < prev    next >
Encoding:
Assembly Source File  |  1988-12-12  |  3.8 KB  |  135 lines

  1.         title   TRYQFN -- QFN demo
  2.         page    55,132
  3.     .286
  4.  
  5. ; TRYQFN.ASM --- Interactive demo of QFN routine (OS/2 version)
  6. ; Copyright (C) 1988 Ray Duncan
  7. ;
  8. ; Build:    MASM TRYQFN;
  9. ;        MASM QFN;
  10. ;        LINK TRYQFN+QFN,,,OS2,TRYQFN.DEF;
  11. ;
  12. ; Usage:    TRYQFN
  13.  
  14. cr      equ     0dh             ; ASCII carriage return
  15. lf      equ     0ah             ; ASCII line feed
  16.  
  17. stdin   equ     0               ; standard input handle
  18. stdout  equ     1               ; standard output handle
  19. stderr  equ     2               ; standard error handle
  20.  
  21.     extrn    DosRead:far    ; OS/2 API functions
  22.     extrn    DosWrite:far
  23.         extrn    DosExit:far
  24.  
  25. DGROUP  group   _DATA
  26.  
  27. _DATA   segment word public 'DATA'
  28.  
  29. ibuff   db      80 dup (0)      ; input buffer
  30. ibuff_len equ    $-ibuff
  31.  
  32. rlen    dw    0        ; length from DosRead
  33. wlen    dw    0        ; length from DosWrite
  34.  
  35. msg1    db      cr,lf,lf        
  36.         db      'Enter filename:        '
  37. msg1_len equ $-msg1
  38.  
  39. msg2    db      cr,lf
  40.         db      'The full pathname is:  '
  41. msg2_len equ $-msg2
  42.  
  43. msg3    db      cr,lf
  44.         db      'Bad filename!'
  45. msg3_len equ $-msg3
  46.  
  47. _DATA   ends
  48.  
  49.  
  50. _TEXT   segment word public 'CODE'
  51.  
  52.         extrn   qfn:near
  53.  
  54.         assume  cs:_TEXT,ds:DGROUP
  55.  
  56. main    proc    near
  57.                                 
  58.     push    ds        ; set ES = DGROUP too
  59.         pop    es
  60.  
  61. main1:                          ; display prompt...
  62.     push    stdout        ; standard output handle
  63.         push    ds        ; address of message
  64.         push    offset DGROUP:msg1
  65.         push    msg1_len    ; length of message
  66.         push    ds            ; receives bytes written
  67.         push    offset DGROUP:wlen
  68.     call    DosWrite        ; transfer to OS/2
  69.  
  70.                                 ; get a filename...
  71.     push    stdin        ; standard input handle
  72.         push    ds        ; input buffer address
  73.         push    offset DGROUP:ibuff
  74.         push    ibuff_len    ; length of input buffer
  75.         push    ds            ; receives actual length
  76.         push    offset DGROUP:rlen
  77.         call    DosRead        ; transfer to OS/2
  78.  
  79.     mov    ax,rlen        ; anything entered?
  80.         cmp     ax,2        ; anything entered?
  81.         je      main3           ; empty line, exit
  82.  
  83.                                 ; call QFN routine to
  84.                                 ; validate and qualify
  85.                                 ; the filename...
  86.  
  87.         sub     ax,2         ; AX=length (remove CR-LF)
  88.                                 ; DS:SI = addr of filename
  89.         mov     si,offset DGROUP:ibuff
  90.         call    qfn             ; go qualify filename
  91.         jc      main2           ; jump if bad filename
  92.     mov    cx,ax        ; save length
  93.  
  94.                                 ; first display title...
  95.     push    stdout        ; standard output handle
  96.         push    ds        ; message address
  97.         push    offset DGROUP:msg2
  98.         push    msg2_len         ; message length
  99.     push    ds            ; receives bytes written
  100.         push    offset DGROUP:wlen
  101.     call    DosWrite        ; transfer to OS/2
  102.  
  103.                 ; display qualified filename
  104.         push    stdout        ; standard output handle
  105.         push    ds        ; address of filename
  106.         push    si
  107.         push    cx        ; length of filename
  108.         push    ds            ; receives bytes written
  109.         push    offset DGROUP:wlen
  110.         call    DosWrite    ; transfer to OS/2
  111.  
  112.         jmp     main1           ; get another filename
  113.  
  114. main2:                          ; display error message...
  115.     push    stdout        ; standard output handle
  116.         push    ds        ; message address
  117.         push    offset DGROUP:msg3
  118.     push    msg3_len    ; message length
  119.         push    ds            ; receives bytes written
  120.         push    offset DGROUP:wlen
  121.         call    DosWrite    ; transfer to OS/2
  122.  
  123.         jmp     main1           ; get another filename
  124.                 
  125. main3:  push    1        ; terminate with 
  126.     push    0        ; return code = 0
  127.         call    DosExit        ; transfer to OS/2
  128.  
  129. main    endp
  130.         
  131. _TEXT   ends
  132.  
  133.         end     main
  134.  
  135.