home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 2
/
FreeSoftwareCollection2pd199x-jp.img
/
ms_dos
/
vzfm
/
src
/
inq.asm
next >
Wrap
Assembly Source File
|
1990-06-14
|
5KB
|
223 lines
page 60,120
title バッチ処理用問い合わせコマンド
;
; INQ version 1.3
;
; バッチ処理用問い合わせコマンド(INQuiry/enquiry)
;
; 書式:inq [-d] [プロンプト] [<文字列> ・・・]
; ※-dが指定されたときは英字の大文字と小文字を区別する
; ※プロンプトは、『"』または『'』で囲む。
; ※文字列は複数指定できる。文字列、及びプロンプトの間は空白
; またはタブで区切る。
;
; 使用システム:FM16β(他システムでも可)
;
; 使用OS:MS-DOS version 3.1(2.xx でも可)
;
; 作成者:とくさん
;
; 作成日:1986年10月7日(version 1.0)
;
; 更新日:1987年10月17日(version 1.3)
;
;
CR equ 0dh ; 復帰コード
LF equ 0ah ; 改行コード
TAB equ 09h ; タブコード
SPC equ 20h ; 空白コード
DOS equ 21h ; ファンクションコール
DSP equ 29h ; コンソール直接出力
ENVADR equ 0d90h ; 環境変数アドレス
ENVSIZ equ 0d83h ; 環境領域のサイズのアドレス
ENVCHR equ 'C' ; 入力文字変数
code segment
assume cs:code,ds:code,es:code
;
; パラメータエリア
;
org 80h
args label byte
org 100h
;
; INQメインルーチン
;
jmp short inq_main
set_flag db 0
set_ofs dw ?
set_seg dw ?
inq_main:
call get_env
xor bl,bl
mov si,offset args+1
call skipspc
cmp al,'-'
je chk_dif
cmp al,'/'
jne chkprompt
chk_dif:
lodsb
and al,0dfh
cmp al,'D'
jne no_dif
mov bl,0ffh
call skipspc
jmp short chkprompt
no_dif:
dec si
dec si
jmp short check_init
chkprompt:
cmp al,'"'
je out_prompt
cmp al,''''
je out_prompt
cmp al,CR
je inq_error_exit
check_init:
dec si
mov di,si
or bl,bl
jnz check
call upper_case
check:
mov si,di
xor cl,cl
call getch
mov ch,al
check_loop:
lodsb
cmp al,CR
jne check_1
jmp short check
check_1:
cmp al,SPC
je check_3
cmp al,TAB
je check_3
check_2:
cmp al,ch
jne check_loop
jmp short inq_normal_exit
check_3:
inc cl
call skipspc
jmp short check_2
inq_error_exit:
call getch
mov cl,al
jmp inq_exit
inq_normal_exit:
mov al,ch
cmp al,20h
jb inq_exit
int DSP
inq_exit:
mov al,CR
int DSP
mov al,LF
int DSP
mov al,cl ; リターンコードをセット
mov ah,4ch
int DOS ; MSーDOSに戻る
;
; プロンプトの表示
;
out_prompt:
mov dl,al
out_prompt_loop:
lodsb
cmp al,dl
je out_prompt_exit
cmp al,CR
je inq_error_exit
int DSP
jmp short out_prompt_loop
out_prompt_exit:
call skipspc
cmp al,CR
je short inq_error_exit
jmp short check_init
;
; 空白の読み飛ばし
;
skipspc proc near
lodsb
cmp al,SPC
je skipspc
cmp al,TAB
je skipspc
ret
skipspc endp
;
; 英小文字を大文字に変換
;
upper_case proc near
push si
upper_loop:
lodsb
cmp al,CR
je upper_end
cmp al,'a'
jb upper_loop
cmp al,'z'
ja upper_loop
sub al,20h
mov [si-1],al
jmp upper_loop
upper_end:
pop si
ret
upper_case endp
;
; キーの入力
;
getch proc near
mov ax,0700h
int DOS
or bl,bl
jnz getch_end
cmp al,'a'
jb getch_end
cmp al,'z'
ja getch_end
sub al,20h
getch_end:
ret
getch endp
save_ss dw ?
save_sp dw ?
dummy db 'EXIT',CR
get_env proc near
push es
push ds
mov save_ss,ss
mov save_sp,sp
mov si,dummy
int 2eh
mov sp,cs:save_sp
mov ss,cs:save_ss
mov cs:env_seg,ds
mov si,ENV_ADR
mov cx,[ENV_SIZ]
shl cx,4
code ends
end inq