;***************************************************************
;*							       *
;*	SETMUNU.COM (TownsMENU用設定変更コマンド)	       *
;*							       *
;*			1990/12/28  Ver1.0                     *
;*			1991/04/04  Ver1.1		       *
;*				Programmed by H.Yamashita      *
;*		 					       *
;***************************************************************

	.8086

CODE	segment
	assume	cs:CODE,ds:CODE,ss:CODE
	org	100H

MAIN:	jmp	MAIN0

;*
;*       WORK AREA
;*
DTMENU:
WCARD	db	13 dup(?)	;ワイルドカード文字列
R386DRV	db	1  dup(?)	;RUN386.EXE起動ドライブ番号
CHGFLG	db	1  dup(?)	;変更フラグ
	db	1  dup(?)	;
I_WMOD	db	1  dup(?)	;ワイルドカード・詳細情報フラグ
DSPMOD	db	1  dup(?)	;表示モードフラグ
SRTMOD	db	1  dup(?)	;表示順フラグ
	db	1  dup(?)	;CRTC非初期化フラグ
TMENDRV	db	1  dup(?)	;TMENU.EXP起動ドライブ番号
DTMENUE:

R386SYS	db	1  dup(?)	;RUN386.EXEのドライブ名 
TMENSYS	db	1  dup(?)	;TMENU.EXPのドライブ名
T_OASYS	db	1  dup(?)	;T_OAK.EXEのドライブ名
RDRVSYS db	1  dup(?)	;DRIVE_R.IMGのドライブ名

ERRFLG	db	1  dup(?)	;ERRORLEVEL

;*
;*        DEFINE CONSTANT
;*
CMD	equ	81H		;コマンドパラメータオフセット
CMDLEN	equ	80H		;最大コマンドパラメータ長
DTOFST	equ	DTMENU-DTMENUE	;ワークブロックサイズ

;*
;*	  PROGRAM AREA
;*
MAIN0:	mov	ax,0000H	;es:bxに共通テーブルポインタの
	int	0D9H		;アドレスを取得
	lea	bx,DTOFST[bx]	;->ポインタの調整
	push	bx
	push	es
	lea	di,DTMENU	;
	mov	cx,DTMENUE-DTMENU	;
LP0:	mov	dl,ES:[BX]	;共通テーブルからワークエリアに
	mov	[di],dl		;初期データの転送
	inc	di		;（ＴownsＭＥＮＵ画面設定関係）
	inc	bx		;
	loop	LP0		;
	
MAIN1:	mov	dl,es:0016H	;
	mov	R386SYS,dl	;
	mov	dl,es:0031H	;共通テーブルからワークエリアに
	mov	TMENSYS,dl	;初期データの転送
	mov	dl,es:003EH	;（システムドライブ名関係）
	mov	T_OASYS,dl	;
	mov	dl,es:0007H	;
	mov	RDRVSYS,dl	;

MAIN2:	mov	si,CMD		;コマンドラインパラメータの
	mov	bh,00H		;ポインタ取得
	mov	bl,ds:CMDLEN		;
	mov	byte ptr [bx+si],00H	;
	cmp	byte ptr [si],00H	;
	jne	LP1		;
	mov	al,01H		;パラメ−タがない時
	mov	ERRFLG,al	; ERRORLEVEL=1
		
LP1:	mov	al,[si]		;
	cmp	al,00H		;コマンドラインパラメータの
	je	MAIN5		;文字をチェックし、"-"か"/"
	cmp	al,20H		;であれば、オプションチェッ
	je	L1		;ク・設定ルーチン(GETPARA)を
	cmp	al,'-'		;呼び出す
	je	GETPARA		;
	cmp	al,'/'		;
	je	GETPARA		;
	jmp	ERROR1		;
L1:	inc	si		;
	jmp	LP1		;
	
MAIN5:	pop	es		;設定データを共通テーブルに
	pop	bx		;書き込む
	lea	si,DTMENU	;（ＴownsＭＥＮＵ画面設定関係）
	mov	cx,DTMENUE-DTMENU	;
LP5:	mov	dl,[si]		;
	mov	es:[bx],dl	;
	inc	si		;
	inc	bx		;
	loop	LP5		;
	
	mov	dl,R386SYS	;設定データを共通テーブルに
	mov	es:0016H,dl	;書き込む
	mov	dl,TMENSYS	;（システムドライブ名関係）
	mov	es:0031H,dl	;
	mov	dl,T_OASYS	;
	mov	es:003EH,dl	;
	mov	dl,RDRVSYS	;
	mov	es:0007H,dl	;
	
MAIN6:	mov	al,ERRFLG	;プログラムの終了
	mov	ah,4CH		;
	int	21H		      ;
	
ERROR1:	mov	al,0FFH		;パラメータ入力エラー
	mov	ERRFLG,al	; ERRORLEVEL=255
ERROR2:	pop	es		;
	pop	bx		;
	jmp	MAIN6		;
	
GETPARA:
	inc	si
	mov	al,[si]
	and	al,11011111B	;小文字−＞大文字コード変換
	cmp	al,'D'
	je	DMODE		;
	cmp	al,'S'		;オプションスイッチによる
	je	SMODE		;分岐処理
	cmp	al,'I'		;(siがパラメータのポインタ)
	je	IMODE		;
	cmp	al,'W'		;
	je	WMODE		;
	cmp	al,'F'		;
	je	FNAME		;
	cmp	al,'Y'		;
	jne	GP0		;
	jmp	YMODE		;
GP0:	cmp	al,'R'		;
	jne	GP1		;
	jmp	RMODE		;
GP1:	cmp	al,'T'		;
	jne	GP2		;
	jmp	TMODE		;
GP2:	jmp	ERROR1		;
	
DMODE:	inc	si		;Dオプション処理
	mov	al,[si]		;（表示モード指定）
	sub	al,30H		;
	cmp	al,01H		;
	ja	ERROR1		;
	mov	DSPMOD,al	;
	jmp	L1

SMODE:	inc	si		;sオプション処理
	mov	al,[si]		;（表示順指定）
	sub	al,30H		;
	cmp	al,02H		;
	ja	ERROR1		;
	mov	cl,al		;
	mov	al,02H		;
	shl	al,cl		;
	mov	SRTMOD,al	;
	jmp	L1

IMODE:	inc	si		;Iオプション処理
	mov	al,[si]		;（詳細情報表示指定）
	sub	al,30H		;
	cmp	al,03H		;
	ja	ERROR1		;
	and	I_WMOD,11110000B
	or	I_WMOD,al	;
	jmp	L1

WMODE:	inc	si		;Wオプション処理
	mov	al,[si]		;（ワイルドカードの
	sub	al,30H		;　有効指定）
	cmp	al,01H		;
	jbe	W0		;
	jmp	ERROR1		;
W0:	mov	cl,7		;
	shl	al,cl		;
	and	I_WMOD,01111111B
	or	I_WMOD,al
	jmp	L1

FNAME:	inc	si		;Fオプション処理
	lea	di,WCARD	;（ワイルドカード
	mov	cl,0		;　文字列指定）
FLP:	cmp	cl,13		;
	jb	F0		;
	jmp	ERROR1		;
F0:	mov	al,[si]		;
	cmp	al,00H		;
	jne	F1		;
	jmp	MAIN5		;
F1:	cmp	al,20H		;
	jne	F2		;
	jmp	L1		;
F2:	mov	[di],al		;
	inc	si		;
	inc	di		;
	inc	cl		;
	jmp	FLP		;

YMODE:	inc	si		;Yオプション処理
	mov	al,[si]		;（システムドライブ指定）
	and	al,11011111B	;
	   mov	R386SYS,al	;
	mov	TMENSYS,al	;
	mov	T_OASYS,al	;
	sub	al,41H		;
	cmp	al,17		;
	jbe	Y0		;
	jmp	ERROR1		;
Y0:	mov	R386DRV,al	;
	mov	TMENDRV,al	;
	jmp	L1

RMODE:	inc	si		;Rオプション処理
	mov	al,[si]		;（RUN386.exeドライブ指定）
	and	al,11011111B	;
	mov	R386SYS,al	;
	sub	al,41H		;
	cmp	al,17		;
	jbe	R0		;
	jmp	ERROR1		;
R0:	mov	R386DRV,al	;
	jmp	  L1

TMODE:	inc	si		;Tオプション処理
	mov	al,[si]		;（メニュー他のドライブ指定）
	and	al,11011111B	;
	mov	TMENSYS,al	;
	sub	al,41H		;
	cmp	al,17		;
	jbe	T0		;
	jmp	ERROR1		;
T0:	mov	TMENDRV,al	;
	jmp	L1

CODE	ends	

	end	MAIN

