タイトル | : TwoFname.def |
投稿日 | : 2023/03/17(金) 21:50 |
投稿者 | : 文太 | 番 号 | : 10636 10634 番 konno さんへのコメント コメント数 2 |
konnoさん 見つけました。Yメニューです。アルツ予防(なつかひ)に、そのまま 貼っておきます。 LFN対応は、がんばってください。 ち、ちがう、電卓の話なんだ、、、。 和生さ〜〜〜ん。 === Twofname.def ===;a lot from 和生氏, 96/7/17, <nifty:FGALPK/MES/14/18037> #if0 フルパスファイル名と行番号をYメニューで表示(機能としてはそれだけ)。 分割画面では、上と左窓の情報は常に上の行に表示。 #endif *Macro 50 ^^ "Twofname" ?. w-, ;<w> (wt%2)? {#W w+,} ;wt 02 3 4 5 wsplit (wt)? {i=2, &00 &01 (0)} ;<i> u l L R ? {i=1, &00} (w)? #W #] ;lbuf -> textbuf ; m=n=pn..-26, ;<m><n>lbuf, ダミーマクロを作る m=n=pq..148, ;<m><n>lbuf, ダミーマクロを作る &02 &Sm(m,r,20) ;m からメニュー幅まで m.16=l+4, ;<l>メニュー幅(f) m.17=i, ;アイテム数 (1 or 2) k=(i+1)*2, ;<k>アイテム種用空白 m..7=(k+4)+b, ;<b>m..7 メニューサイズ(c0)▲ +8? m+=20, (k){m.0-,m++,} ;アイテム種用空白 n.19=-1, ;カーソルなし &Sc(m," FULL PATH FILENAMES ") ;タイトル m=r+1, &Sc(m,pa) ;タイトルの後にアイテム (i>1)? {m=r+1, &Sc(m,pr)} ;▲ ; rr[=pn..-26, &* rr], ;実行 rr[=pq..148, &* rr], ;実行 00:; -- upper/left -> pa &Sp(pa,"%s -%u",wa+146,wa.10) ;wa.10 == ln &Sl(pa) &Sn(pa) l=b=r+1, ;<b>size(文字列長+null1つ) 01:; -- lower/right -> pr &Sp(pr,"%s -%u",wb+146,wb.10) &Sl(pr) &Sn(pr) b+=r+1, (r>l)? l=r, 02:; -- ymenu header (3+$)."$(1,a,0,ff,ff,0)!01(r)$(0,e1,84,0,f,2)";0,0 ; ^^^^ ^ ^★ ここはマクロ中で書換 * ; * si,ze,width,items,0,-1 *ここまで10bytes ----- 和生氏,96/7/17, <nifty:FGALPK/MES/14/18037> ----- =T *m 80^\""?. &01 m=pn..-27, ;ダミーマクロを作る &02 &Sm(m,r,20) ;m からメニュー幅まで m.16=l, ;長い ps をメニュー幅(f) m.17=i, ;ps の数をアイテム数 (4) k=i++*2, m..7=j+k+8, ;m..7 メニューサイズ(c0) m+=20,(k){m.0-,m++,} ;アイテム種用空白 &Sc(m,"PS") m=r+1, ;タイトル &Sm(m,ps,j) ;タイトルの後にアイテム rr[=pn..-27, &* rr], ;実行 1: j=ps,i-,l-, ;ps を測る :a &Sn(j)(l<r)?l=r, ;一番長い ps の文字列 (r)?{j+=r++,i++,>a} ;文字列がいくつあるか j=j-ps, ;全体の長さ 2: (3+$)."$(1,a,0,ff,ff,0)!01(r)$(0,e1,c0,0,f,4)";0,0 ; ^^^^ ^ ^★ ここはマクロ中で書換 * 【from mes14_#11710 by Yushi】 》 ローカルマクロ 02: で、定義した文字列を分解して説明すると 》 $(1) グローバルマクロ1番を表す。 》 $(a,0) グローバルマクロのサイズを表す。 》 a,0 で 10 bytes を表す。次のキー定義から、グローバルマクロ終 》 了の $(0) まで、数えたら 10 bytes 》 $(ff,ff) グローバルマクロの起動キー2つ分 》 $ff は未設定という意味 》 $(0) マクロタイトル 》 文字列+ $(0) なのですが、タイトルを省略した形 》 !01 メニューの1番を呼びだす 》 サイズ情報に基づいて次の項目から順にサーチしていく 》 次を メニュー1番のように細工すれば、ちゃんと騙されてくれる 》 (r) 返り値を内部レジスタに入れる。 》 親マクロに返った時、内部レジスタの値が、r に代入されるから 》 こうしておかないと、親マクロに返った時 r が破壊されてしまう 》 $(0) グローバルマクロの終了を表す . と同じ意味 》 このおかげで、親マクロに帰っていく 》 $(e1) メニュー1番を表す数値 》 $(c0,0) メニューのサイズ 192 bytes を表す。 ★ 》 用意したバッファの全体が 256 bytes なので、適当に設定 》 $(f) メニューの横幅 16 ★ 》 $(4) アイテム数 ★ 》 ; 0,0 このマクロを読み込むと、文字列の終端 " が $(0) になり、 》 その後に、マクロの終了を表す $(0) が付くので、わざわざ定義 》 しない。2 bytes お得。合わせて 20 bytes 》 この文字列の理解が重要。 》 》 &z 関数を使うと、読み込んだマクロの先頭が rr に代入される。&* は、ポインタ 》 rr からマクロを実行して、帰ってくる。それなら、rr にマクロバッファとは、ま 》 るで違うが、 マクロにしか見えない場所を代入して、&* で呼び出したらどうなる 》 か。ちゃんと実行してくれました。(^_^) #R 格納されたメニューヘッダ [E1][1F]・[0F][02]・・・・・・==MENU==・menu1・menu2・・・・・・ | +-+ | | 2parameters+(items+1)*2 | | | + アイテム数 | | +横幅 | +バイト数 +メニュー番号 ($E0+n)
- No.10636 一括表示へ - コメント元:10634 一括表示へ - [ 返信 ] [引用無し] pre