home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / ms_dos / vzfm / src / inq.asm next >
Assembly Source File  |  1990-06-14  |  5KB  |  223 lines

  1.         page    60,120
  2.         title   バッチ処理用問い合わせコマンド
  3. ;
  4. ;       INQ      version 1.3
  5. ;
  6. ;       バッチ処理用問い合わせコマンド(INQuiry/enquiry)
  7. ;
  8. ;    書式:inq [-d] [プロンプト] [<文字列> ・・・]
  9. ;        ※-dが指定されたときは英字の大文字と小文字を区別する
  10. ;        ※プロンプトは、『"』または『'』で囲む。
  11. ;        ※文字列は複数指定できる。文字列、及びプロンプトの間は空白
  12. ;         またはタブで区切る。
  13. ;
  14. ;       使用システム:FM16β(他システムでも可)
  15. ;
  16. ;       使用OS:MS-DOS version 3.1(2.xx でも可)
  17. ;
  18. ;       作成者:とくさん
  19. ;
  20. ;       作成日:1986年10月7日(version 1.0)
  21. ;
  22. ;    更新日:1987年10月17日(version 1.3)
  23. ;
  24. ;
  25. CR      equ     0dh                     ; 復帰コード
  26. LF      equ     0ah                     ; 改行コード
  27. TAB     equ     09h                     ; タブコード
  28. SPC     equ     20h                     ; 空白コード
  29. DOS     equ     21h                     ; ファンクションコール
  30. DSP     equ     29h                     ; コンソール直接出力
  31. ENVADR    equ    0d90h            ; 環境変数アドレス
  32. ENVSIZ    equ    0d83h            ; 環境領域のサイズのアドレス
  33. ENVCHR    equ    'C'            ; 入力文字変数
  34.  
  35. code    segment
  36.         assume  cs:code,ds:code,es:code
  37. ;
  38. ;       パラメータエリア
  39. ;
  40.         org     80h
  41.  
  42. args            label   byte
  43.  
  44.                 org     100h
  45. ;
  46. ;       INQメインルーチン
  47. ;
  48.  
  49.         jmp    short inq_main
  50.  
  51. set_flag    db    0
  52. set_ofs        dw    ?
  53. set_seg        dw    ?
  54.  
  55. inq_main:
  56.                 call    get_env
  57.                 xor    bl,bl
  58.                 mov     si,offset args+1
  59.                 call    skipspc
  60.                 cmp    al,'-'
  61.                 je    chk_dif
  62.                 cmp    al,'/'
  63.                 jne    chkprompt
  64. chk_dif:
  65.         lodsb
  66.         and    al,0dfh
  67.         cmp    al,'D'
  68.         jne    no_dif
  69.         mov    bl,0ffh
  70.         call    skipspc
  71.         jmp    short chkprompt
  72. no_dif:
  73.         dec    si
  74.         dec    si
  75.         jmp    short check_init
  76. chkprompt:
  77.                 cmp     al,'"'
  78.                 je      out_prompt
  79.                 cmp     al,''''
  80.                 je      out_prompt
  81.                 cmp     al,CR
  82.                 je      inq_error_exit
  83. check_init:
  84.                 dec     si
  85.                 mov     di,si
  86.         or    bl,bl
  87.         jnz    check
  88.         call    upper_case
  89. check:
  90.                 mov     si,di
  91.                 xor     cl,cl
  92.                 call    getch
  93.                 mov     ch,al
  94. check_loop:
  95.                 lodsb
  96.                 cmp     al,CR
  97.                 jne     check_1
  98.                 jmp     short check
  99. check_1:
  100.                 cmp     al,SPC
  101.                 je      check_3
  102.         cmp    al,TAB
  103.         je    check_3
  104. check_2:
  105.                 cmp     al,ch
  106.                 jne     check_loop
  107.                 jmp     short inq_normal_exit
  108. check_3:
  109.                 inc     cl
  110.                 call    skipspc
  111.                 jmp     short check_2
  112. inq_error_exit:
  113.                 call    getch
  114.                 mov     cl,al
  115.                 jmp     inq_exit
  116. inq_normal_exit:
  117.                 mov     al,ch
  118.                 cmp     al,20h
  119.                 jb      inq_exit
  120.                 int     DSP
  121. inq_exit:
  122.                 mov     al,CR
  123.                 int     DSP
  124.                 mov     al,LF
  125.                 int     DSP
  126.                 mov     al,cl           ; リターンコードをセット
  127.                 mov     ah,4ch
  128.                 int     DOS             ; MSーDOSに戻る
  129. ;
  130. ; プロンプトの表示
  131. ;
  132. out_prompt:
  133.                 mov     dl,al
  134. out_prompt_loop:
  135.                 lodsb
  136.                 cmp     al,dl
  137.                 je      out_prompt_exit
  138.                 cmp     al,CR
  139.                 je      inq_error_exit
  140.                 int     DSP
  141.                 jmp     short out_prompt_loop
  142. out_prompt_exit:
  143.                 call    skipspc
  144.                 cmp     al,CR
  145.                 je      short inq_error_exit
  146.                 jmp     short check_init
  147. ;
  148. ; 空白の読み飛ばし
  149. ;
  150. skipspc         proc    near
  151.  
  152.                 lodsb
  153.                 cmp     al,SPC
  154.                 je      skipspc
  155.                 cmp     al,TAB
  156.                 je      skipspc
  157.                 ret
  158.  
  159. skipspc         endp
  160. ;
  161. ; 英小文字を大文字に変換
  162. ;
  163. upper_case    proc    near
  164.  
  165.         push    si
  166. upper_loop:
  167.         lodsb
  168.         cmp    al,CR
  169.         je    upper_end
  170.         cmp    al,'a'
  171.         jb    upper_loop
  172.         cmp    al,'z'
  173.         ja    upper_loop
  174.         sub    al,20h
  175.         mov    [si-1],al
  176.         jmp    upper_loop
  177. upper_end:
  178.         pop    si
  179.         ret
  180.         
  181. upper_case    endp
  182. ;
  183. ; キーの入力
  184. ;
  185. getch           proc    near
  186.  
  187.                 mov     ax,0700h
  188.                 int     DOS
  189.                 or    bl,bl
  190.                 jnz    getch_end
  191.                 cmp    al,'a'
  192.                 jb    getch_end
  193.                 cmp    al,'z'
  194.                 ja    getch_end
  195.                 sub    al,20h
  196. getch_end:
  197.                 ret
  198.  
  199. getch           endp
  200.  
  201. save_ss        dw    ?
  202. save_sp        dw    ?
  203. dummy        db    'EXIT',CR
  204.  
  205. get_env        proc    near
  206.  
  207.         push    es
  208.         push    ds
  209.         mov    save_ss,ss
  210.         mov    save_sp,sp
  211.         mov    si,dummy
  212.         int    2eh
  213.         mov    sp,cs:save_sp
  214.         mov    ss,cs:save_ss
  215.         mov    cs:env_seg,ds
  216.         mov    si,ENV_ADR
  217.         mov    cx,[ENV_SIZ]
  218.         shl    cx,4
  219.         
  220. code            ends
  221.  
  222.                 end     inq
  223.