* M 20 ^\ "" ?. &s q=$-30, Sn[,Sn+, #R &?("%s%s.def",pi,uu) #m Sn], (s)?{'n' #[ &d &m("%s.def not found",uu).} #< g="\* H", &01 (r)?>Z #x #b mi[, mi-, (6){&o(0)} #> ;mn_? の準備 l=lx-12, c-, ;横幅 l , アイテム数 c :A #g (cd=='*') ? >B &o(0) #> c++, >A :B &o(0) &o(0) mi], ;メニューの最後 Ex[, Ex-, #k Ex], #C &d ;メニューをテキストスタックに dz=kz, p=kp-2, ll=p..0, ;メニューのバイト数 ll q-=ll, ;メニューを作る cs 内のオフセット p-=ll+1, ;メニューの先頭オフセット p p.0=l, p.1=c, ;横幅とアイテム数を書き込んで dz=cz, &03 ;cs のコードと kz のメニューを交換 bx=q, si=q+6, dx-, &04 ;メニューの表示 &03 ;cs のコードと kz のメニューを交換 3(p) ;テキストスタックを戻す :Z #? 01: ;* Help部検索ルーチン Ew[, Ew+, mp[, ps[, ps=pa, #F &?("\n%s*",g) #m ps], #c mp], Ew], (r<0)?{#C &d &m("help %s not found",g) (1).} (0) 03: ;cz:q から ll バイトを、kz:p から ll バイトと交換する si=q, di=p, cx=ll/2, ax=kz, &i(3+$)."$(06,8E,C0,26,8B,05,A5,89,44,FE,E2,F7,07,C3)" ; ;start: ; push es ; mov es, ax ;ls1: ; mov ax, es:[di] ; movsw ; mov [si-2], ax ; loop ls1 ;exit: ; pop es ; ret ; 04: ;popupmenu を呼ぶ(bx, si は cs に在る) ;--> ; BX :menu record ptr ; SI :menu title ; DL,DH :window top-left (0:use refloc) ;<-- ; r == 0: ; AL :select item No. ; AH :select by... 0=CR, 1=Direct key ; r == 1: (AH=0FFh) ; AL :-1=escape, 0=ack CR, else illegual key ax=pq+42,di=pv+138,di=di..0-21,di+=di..0+2,&i(6+$)(r). "$(95,2E,C6,46,00,10,FF,D7,2E,C6,46,00,01,C3)" ; ;MAC_GET equ 00000001b ;MAC_MENU equ 00010000b ; ;start: ; xchg ax, bp ; mov byte ptr cs:[bp], MAC_MENU ; call di ; mov byte ptr cs:[bp], MAC_GET ;exit: ; ret ; *