亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? choice.asm

?? Dos6.0
?? ASM
字號:
;   Created by Ericst on 5/14/92.
;   Modified by Ericst on 8/25/92 to use 1 for first choice instead of 0
;   Modified by Ericst on 8/31/92 to change /T syntax from /Tnn,c to /Tc,nn
;       to be consistent with select-boot timeout syntax
;       Also fixed bug 1018 (timeout doesn't work with 12 seconds.
;
;   CHOICE [/c choices] [/N] [/S] [/T:c,nn] [text]
;	/c[:]choices	Specifies allowable response keys.  The
;			default is "yn".  Keys are not case sensitive
;			unless /S is specified.  If choices are specified
;			more than once, no error is generated and the last
;			set of choices are used.
;	/N		Causes CHOICE to Not display choices (and ?) at the end of
;			the string, enclosed in square brackets.
;	/S		Case sensitive.  Default is case insensitive.
;       /T[:]c,nn       Timeout after nn seconds and take choice c.
;			c must be in choices. If c is not
;			in choices an error message is displayed.
;	text		Specifies a string to be displayed.  If no text
;			is specified, only the choices are displayed (unless
;			/N is specified).  The string can be enclosed in
;			quotes ("), or may simply be terminated by end of
;			the line, or by a switch.
;
;    When one of the choices is entered, the index of the choice is
;    returned in ERRORLEVEL, where 1 means the first letter in choices
;    was pressed, 2 means the second, and so on.  CHOICE beeps if any
;    choice other than those in choices is specified. CHOICE returns 255
;    if a problem is encountered (bad arg, etc.), or if user
;    runs with /? switch.  No control-break handler is provided, so
;    user pressing control-c results in errorlevel 0.

.MODEL tiny
.code
org	100h
public	start
start:
	jmp begin
include  choice.inc
begin:
	cld				; force string ops to be forward.
; ************************************************************************
; ***	Verify MS-DOS version is 4.0 or later			       ***
; ************************************************************************
	mov	al,01h			; version number, not OEM flag
	mov	ah,30h			; Get Version Function
	int	21h
	cmp	al, 3			; This program requires 4.0 or later
	jg     GetTable

WrongVersion:
	 strout  BADVERMSG
	 mov	al, ERROREXIT
	 jmp	ChoiceDone

; ************************************************************************
; ***	Get Upper Case Table address/bias			       ***
; ************************************************************************
GetTable:
	push	es
	mov	ax,GETUPPERTABLE
        mov     bx,-1                   ; current code page
        mov     cx,5                    ; size of info for upper case table
        mov     dx,bx                   ; current country id
        push    cs

	mov	di,offset UCaseTbl ; point at buffer for table
        int     21h
                                        ; assume no error
        inc     di                      ; point at start of table
        les     di,[di]                 ; load table address
        mov     bx,es:[di]              ; load table size
        mov     ax,256                  ; compute table size bias
        sub     ax,bx
	mov	UCaseTblBias,ax 	; save it for later
	add	di,2			; Shift UcaseTbl Address so that
	mov	word ptr UCaseTbl,di	; it is at UCaseTbl (instead of
	mov	word ptr UCaseTbl+2,es	; UCaseTbl + 1; before shift, UCaseTbl
	pop	es			; points to table ID which is always 2).

;  ********************************************************************
;  ***	 Parse command line					    ***
;  ***	 Set Show=FALSE if /N,					    ***
;  ***	 Set Choices to choices from /C, if specified		    ***
;  ***	 Set CaseSense=True if /S				    ***
;  ***	 Set TimeOut=<secs>&TimeOutDefault=char to timeout too if   ***
;  ***	     /T is specified					    ***
;  ***	 Set PROMPT to user specified prompt, if specified.	    ***
;  ********************************************************************
	 mov	si,081h 	      ; Offset of command line in PSP
; While !(end of line) do
Parse1:
	 lodsb			      ; get first char
	 cmp	al, CR		      ; end of line?
	 je	ParseDone	      ; if so, Exit parse loop
	 cmp	al, SWITCHCHAR	      ; is it a switch?
	 je	IsSwitch
	 cmp	al, Blank	      ; if blank, ignore
	 je	Parse1
	 cmp	al, Tab 	      ; if tab, ignore
	 je	Parse1
					; Prompt: parse it off
	 mov	di, offset PROMPT	; di points to prompt
	 cmp	BYTE PTR [di], NUL	; Prompt already specified?
	 jne	MultPromptErr
					; Set dl depending on Quoted or not.
	 cmp	al, QUOTE		; Terminator for Quoted String: CR and
	 jne	NoQuote 		; QUOTE (set dl to QUOTE).
	 mov	dl, QUOTE
	 jmp	prompt1
NoQuote:
	 mov	dl, SWITCHCHAR		; Terminator for unquoted String:CR and
	 stosb				; SWITCHCHAR (set dl to SWITCHCHAR)
;  Repeat
Prompt1:
	 mov	al, [si]		; want SI to point to term if we exit
	 cmp	al, CR			; End of line? If so, leave si pointing
	 je	Parse1			;    at it. No need to increment.
	 cmp	al, dl			; If an end-quote we'll need to inc
	 je	Terminator		;
	 stosb				; save the char.
	 inc	si			; get next char
	 jmp	Prompt1
; Until (terminator char found)

Terminator:				; encountered end-quote or switch char
	 cmp	al, SWITCHCHAR		; if a switch leave si pointing to it.
	 je	Parse1			; If a quote, si should point to next
	 inc	si			;     character after the quote.
	 jmp	Parse1			; parse next field.

MultPromptErr:
	strout	 MULTPROMPTERRMSG
	strout	 SYNTAXMSG
	mov	al, ERROREXIT
	jmp	ChoiceDone

IsSwitch:			  ; Case Switch of:
	 lodsb			  ; get switch char
	 call ToUpper		  ; Case Switch of:
	 cmp	al,HELPSWITCH	  ; /?
	 je	IsHelpSwitch
	 cmp	al,CHOICESWITCH   ; /c choices
	 je	IsChoiceSwitch
	 cmp	al,DISPLAYSWITCH  ; /N
	 je	IsDisplaySwitch
         cmp    al,TIMEOUTSWITCH  ; /Tc,nn
	 je	IsTimeoutSwitch
	 cmp	al,CASESWITCH	  ; /S
	 je	IsCaseSwitch

	 strout BADSWITCHMSG	 ; invalid switch
	 strout SYNTAXMSG
	 mov	al, ERROREXIT
	 jmp	ChoiceDone	  ; End CASE switch.

IsHelpSwitch:			  ; /?
	 strout  HELPMSG0
	 strout  SYNTAXMSG
	 strout  HELPMSG1
	 mov	al, ERROREXIT
	 jmp	ChoiceDone

IsChoiceSwitch: 		  ; Set of choices, get them.
	 mov	di, offset choices
GetChoices:
	 mov	al, [si]
	 cmp	al, CHOICESDELIM     ; expect choicedelim or first choice
	 jne	ChoiceSw1
	 inc	si
	 mov	al, [si]

ChoiceSw1:
	 cmp	al, BLANK
	 je	ChoiceSwDone
	 cmp	al, TAB
	 je	ChoiceSwDone
	 cmp	al, CR
	 je	ChoiceSwDone
	 cmp	al, SWITCHCHAR
	 je	ChoiceSwDone
	 stosb			  ; save choice
	 inc	si		  ; loop until switch or delim found.
	 mov	al, [si]
	 jmp	ChoiceSw1	  ; get next choice.

ChoiceSwDone:			  ; Have all choices now.
	 mov	al, NUL 	  ; mark end in case of 1 char choice.
	 mov	[di],al
	 cmp	di, offset choices ; At least 1 choice specified?
	 jne	Parse1
	 strout  NEEDCHOICE	  ; No choices specified.
	 mov	al, ERROREXIT
	 jmp	ChoiceDone

IsDisplaySwitch:		  ; Display options Switch
	 mov	Show, FALSE
	 jmp	Parse1

IsTimeoutSwitch:		  ; Timeout Switch
         mov    al, [si]          ; in form /T[:]c,n[n]
	 cmp	al, TIMEDELIM
         jne    GetDefChar
         inc    si                ; skip over ':'
         mov    al, [si]

GetDefChar:
         cmp    al, CR                ; whitespace & Switch not allowed
         je     BadTimeOut
         cmp    al, SWITCHCHAR
         je     BadTimeOut
         cmp    al, Blank
         je     BadTimeOut
         cmp    al, Tab
         je     BadTimeOut
	 mov	TimeOutDefault, al   ; save default char
	 inc	si
	 mov	al, [si]
         cmp    al, TIMEDEFDELIM  ;   Delim for timeout?
         jne    BadTimeOut
         inc    si                ;   skip over delim
	 mov	al, [si]
	 cmp	al, '0' 	  ;   Ensure it's a digit
	 jb	BadTimeOut
	 cmp	al, '9'
         ja     BadTimeOut
	 and	ax, 0fh 	  ;   Conver to binary
	 mov	TimeOut, al	  ;   save (incase 1 digit)
	 inc	si		  ;   Check for another digit
         mov    al, [si]
         cmp    al, '0'
         jb     Parse1            ;   Not part of timeout switch
	 cmp	al, '9'
         ja     Parse1            ;   Not part of timeout switch
         mov    al,TimeOut
	 mov	dx, 10		  ;   num=1st dig *10 + 2nd dig
         mul    dl
         mov    bl, [si]
         and    bl, 0fh
         add    al, bl
         mov    TimeOut, al       ; save timeout
         inc    si
         jmp    Parse1

BadTimeOut:
	 strout  BADTIMEOUTMSG
	 mov	al, ERROREXIT
	 jmp	ChoiceDone

IsCaseSwitch:			   ; Case Sensitive Switch
	 mov	CaseSense,TRUE
	 jmp	Parse1

ParseDone:

;  ********************************************************************
;  ***	Done Parsing Command Line. Unless specified otherwise,	    ***
;  ***	convert choices and default to Upper Case		    ***
;  ********************************************************************
	cmp [CaseSense],TRUE	   ;  If CaseSense is set, skip upper casing
	je DoneUpCasing

	mov al, TimeOutDefault	; Convert Timeout Default to upper case
	call ToUpper
	mov TimeOutDefault, al
	mov si, offset Choices	 ; Now convert the choices to upcase
ChoiceUCase1:
	cmp BYTE PTR [si], NUL
	je  DoneUpCasing
	mov al, [si]
	call ToUpper
	mov [si], al
	inc si
	jmp ChoiceUCase1

DoneUpCasing:
;  ********************************************************************
;  *** if /t (timeout) was specified, verify specified default is   ***
;  *** in Choices						    ***
;  ********************************************************************
	mov di, offset Choices
	mov cx, MAXPROMPT	    ; search entire buffer (it is 0 filled)
	mov al, TimeOutDefault
	repnz scasb
	jz TimeOutValid
	strout	BADTIMEOUTCHARMSG   ; char not in choices.
	mov    al, ERROREXIT
	jmp    ChoiceDone

TimeOutValid:
;  ********************************************************************
;  ***	Display prompt, if any					    ***
;  ***	if /N (No Display Choices) was not specified, display	    ***
;  ***	choices with leading space if any prompt), enclosed in [],  ***
;  ***	separated by commas, followed by '?'			    ***
;  ********************************************************************
	strout	 prompt
	cmp	[Show],TRUE	      ; /N not specified
	jne	PromptDone
	mov	di, offset Choices
;	putchr	BLANK
	putchr	CHOICEBEG	    ; display leading [
ChoiceOut:
	putchr	[di]
	inc	di
	cmp	BYTE PTR [di], NUL  ; more?
	je	Choice20
	putchr	CHOICEDELIM
	jmp	ChoiceOut

Choice20:
	putchr	CHOICEEND	    ; put on final ]?
	putchr	QUESTION

PromptDone:

;  ********************************************************************
;  ***	 If TimeOut specified, wait for timeout or keypress and     ***
;  ***	     set Key to timeout default value if timeout occurs.    ***
;  ********************************************************************
	cmp TimeOut, 0
	je  TimeOutDone

	mov ah, 2ch	    ; Get Start Seconds
	int 21h
	mov LastSecs, dh

CheckKeyPress:
	mov ah, 0bh	    ; check for keypress
	int 21h
	and ax, 0001h
	or ax,0
	jnz TimeOutDone     ; key was pressed

TimeOutLoop1:
	mov ah, 2ch	    ; Get Seconds
	int 21h
	cmp [LastSecs], dh
	je CheckKeyPress
	mov LastSecs,dh
	dec TimeOut		; second elapsed
	jnz CheckKeyPress	; check for another key
	mov al, TimeOutDefault	; Timed out. simulate reading of char
	jmp GetKey01
TimeOutDone:

;  ********************************************************************
;  ***	  If no TimeOut occurred, THEN				    ***
;  ***	      LOOP						    ***
;  ***		 wait for keypress.				    ***
;  ***		 if key is not valid print BEL char & set Key=0	    ***
;  ***	      UNTIL key !=0					    ***
;  ***	  ENDIF 						    ***
;  ********************************************************************
GetKey0:
	    getchr
GetKey01:				; Jump here if Timed Out
	    mov di, offset CHOICES	; search for key in choices

GetKey1:    cmp [CaseSense], TRUE	; Unless CaseSense, convert to ucase
	    je	GetKey2
	    call ToUpper		; convert to al upper case
GetKey2:
	    cmp BYTE PTR [di], NUL
	    je	Badkey
	    scasb
	    je	GotKey
	    jmp GetKey2
Badkey:
	    putchr BEL
	    jmp GetKey0

GotKey:
	    putchr  al
	    putchr  CR
	    putchr  LF
	    sub di, offset choices	; convert to offset
	    mov ax, di

;  ********************************************************************
;  ***	Exit (offset of Key in Choices) 			    ***
;  ********************************************************************

ChoiceDone:
	    mov ah, 04Ch
	    int 21h	; Exit

;  ********************************************************************
;  ***	MyStrOut
;  ***	Input Args:    bx address of string
;  ***	Destroys:      nothing
;  ***	Returns:       nothing
;  ********************************************************************

MyStrOut PROC USES ax di dx
    mov     ah, 02h		    ; Display Char function. Can't use 09
				    ; because we need to print $'s.
    xor     di,di		    ; di is offset of chars to print
MyStrOutLoop1:
    mov     dl, [bx+di]
    cmp     dl, NUL
    je	    MyStrOutDone
    int     21h
    inc     di
    jmp     MyStrOutLoop1
MyStrOutDone:
    ret
MyStrOut ENDP

;  ********************************************************************
;  ***	ToUpper converts charcter in al to upper case		    ***
;  ***	For extended characters, uses uppercase table		    ***
;  ***	Call with:						    ***
;  ***	    al = char to uppcase				    ***
;  ***	destroys: ah & converts al to uppercase 		    ***
;  ********************************************************************
ToUpper PROC uses bx di es
	cmp al,'a'
	jb  ToUpperDone
	cmp al,'z'
	ja  NotAlpha
	sub al, 20h	; convert to uppercase
	jmp ToUpperDone
NotAlpha:
	cmp	al,80h			; if DL is extended char, get mapping
	jb	ToUpperDone		; AL not extended char
	les	di,dword ptr UCaseTbl	   ; get the table
	mov	bx, ax
	xor	bh,bh
	sub	bx, UCaseTblBias	; get the index
	mov	al,es:[di+bx]		; get the char

ToUpperDone:
	ret
ToUpper ENDP

END  start

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区久久| 亚洲免费观看高清在线观看| 国产成人午夜电影网| 国产日韩欧美一区二区三区综合 | 久久国产精品露脸对白| 欧美不卡视频一区| 国产激情精品久久久第一区二区| 日韩一区二区电影网| 国产裸体歌舞团一区二区| 国产精品网站在线观看| 国产精品一二二区| 国产精品超碰97尤物18| 欧美亚洲国产怡红院影院| 亚洲va欧美va天堂v国产综合| 日韩一二三区视频| 国产69精品久久99不卡| 一区二区在线观看免费| 91精品中文字幕一区二区三区| 亚洲午夜精品一区二区三区他趣| 偷拍一区二区三区| 久久精品亚洲国产奇米99| 一本色道久久综合狠狠躁的推荐| 日韩高清不卡一区二区| 欧美日韩免费在线视频| 精品一区二区三区久久| 国产精品素人视频| 波多野结衣精品在线| 亚洲福利视频一区| 久久色中文字幕| 国产剧情在线观看一区二区| 亚洲免费视频成人| 日本精品视频一区二区| 久久电影国产免费久久电影| 综合亚洲深深色噜噜狠狠网站| 91精品国产欧美一区二区18| 粉嫩在线一区二区三区视频| 亚洲国产精品久久人人爱| 久久亚洲欧美国产精品乐播| 在线影视一区二区三区| 国内成+人亚洲+欧美+综合在线| 国产成人av自拍| 亚洲综合无码一区二区| 2欧美一区二区三区在线观看视频| 91美女片黄在线观看| 亚洲精品国产一区二区精华液 | 国产精品免费久久久久| 欧美精品久久久久久久多人混战 | 久久久久高清精品| 欧美性受xxxx黑人xyx| 国产在线不卡一卡二卡三卡四卡| 国产性做久久久久久| 欧美三级中文字| 欧美一区国产二区| 久久草av在线| 欧美刺激午夜性久久久久久久| 99精品视频在线免费观看| 奇米精品一区二区三区四区| 久久久亚洲高清| 8v天堂国产在线一区二区| 波多野结衣中文一区| 一区二区三区日韩精品视频| 精品第一国产综合精品aⅴ| 欧美影视一区二区三区| 日韩和欧美的一区| 亚洲欧美日韩精品久久久久| 欧美日韩不卡一区| 麻豆精品新av中文字幕| 久久久久久久久久久久久女国产乱| 欧洲亚洲精品在线| 成人午夜激情在线| 亚洲午夜在线观看视频在线| 欧美一级高清片| 国产一区激情在线| 日韩一二在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美一区二区三区在线观看视频| 99在线精品一区二区三区| 午夜在线电影亚洲一区| 久久这里都是精品| 日韩区在线观看| 91麻豆精品91久久久久同性| 欧美性大战久久久久久久 | 91精品一区二区三区在线观看| 91蜜桃传媒精品久久久一区二区| 成人性视频免费网站| 3d动漫精品啪啪一区二区竹菊| 国产一区在线不卡| 一个色妞综合视频在线观看| 国产精品久久久久久亚洲伦| 国产视频亚洲色图| 欧美色图激情小说| 日本高清不卡一区| 国产一区二区久久| 一级女性全黄久久生活片免费| 日韩码欧中文字| 精品1区2区在线观看| 日韩欧美卡一卡二| 日韩色视频在线观看| 色女孩综合影院| 国产高清精品在线| 日本在线观看不卡视频| 亚洲成人av中文| 国产精品久久久久久久岛一牛影视| 国产网红主播福利一区二区| 久久久噜噜噜久久中文字幕色伊伊| 精品美女一区二区| 精品1区2区在线观看| 久久色.com| 欧美精彩视频一区二区三区| 国产精品久久久久久久久免费相片 | 色婷婷香蕉在线一区二区| 99久久精品国产精品久久| 卡一卡二国产精品| 精彩视频一区二区| 国产精品一区二区在线看| 国产福利不卡视频| 成人免费观看视频| 91在线免费视频观看| 色婷婷av久久久久久久| 成人免费视频国产在线观看| 精品系列免费在线观看| 国产在线精品视频| 成人午夜又粗又硬又大| 精品在线一区二区| 国产精品白丝av| 国模无码大尺度一区二区三区| 国产九色精品成人porny | 成人av小说网| 亚洲一区二区精品视频| 国产精品成人免费在线| 国产日韩欧美高清| 精品成a人在线观看| 欧美一级午夜免费电影| 欧美不卡一区二区三区| 69堂精品视频| 日韩视频免费观看高清在线视频| 欧美日韩美女一区二区| 日韩欧美高清在线| 国产日韩欧美电影| 欧美α欧美αv大片| 国产日韩精品一区| 亚洲欧美日韩一区| 午夜av一区二区三区| 亚洲一区二区三区四区在线| 亚洲精品亚洲人成人网 | 日本不卡视频在线观看| 国内精品免费在线观看| 久久成人免费网站| 老司机一区二区| 成人激情动漫在线观看| 欧美在线观看视频在线| 日韩免费福利电影在线观看| 日韩精品一区二区三区视频| 91精品国产91久久久久久一区二区 | 欧美亚洲国产一区在线观看网站| 亚洲国产视频直播| 热久久国产精品| 麻豆国产一区二区| 成人国产一区二区三区精品| 99久久精品一区二区| 欧美日韩视频在线一区二区| 久久久高清一区二区三区| 久久久一区二区三区| 久久色在线视频| 亚洲国产精品黑人久久久| 国产日产欧美精品一区二区三区| 一区二区三区在线影院| 九九精品视频在线看| 日本韩国精品在线| 26uuu欧美| 亚洲一区二区美女| 日本不卡视频在线观看| 国模娜娜一区二区三区| 欧美综合在线视频| 制服丝袜国产精品| 精品嫩草影院久久| 亚洲综合色视频| 麻豆国产精品777777在线| 99re热这里只有精品免费视频| 欧美在线一二三四区| 欧美人伦禁忌dvd放荡欲情| 欧美激情综合五月色丁香小说| 午夜一区二区三区视频| 成人国产精品视频| 日韩情涩欧美日韩视频| 国产iv一区二区三区| 欧美一区日本一区韩国一区| 亚洲另类在线视频| 日韩av不卡一区二区| 91亚洲国产成人精品一区二三 | 久久久蜜桃精品| 日产国产高清一区二区三区| 91免费观看在线| 国产网红主播福利一区二区| 男女性色大片免费观看一区二区| 日本精品一区二区三区高清 | 91久久精品日日躁夜夜躁欧美| 国产亚洲综合性久久久影院| 免费不卡在线视频| 欧美日韩在线亚洲一区蜜芽|