記事閲覧

− 野ざらし言 −

4514 MemoMenu.def (v 1.00)

文太 2018/09/14(Fri) 13:58 [4506]へのコメント
 副産物です。割とちゃちゃちゃとできた。しかし、どんどんずれていく。
 「これ、欲しい」と思ったときは、なかなかのアイディアじゃないかとか
思ったのけど、しょぼいな、、、。
 メモをYメニューで見せてくれます。これだけ。

 hist workという自前ヒストリーバッファに文字列をため込み(メニューの内容)、
それをラインバッファに送っておいてから、また自前バッファにYメニューを作り
直して、自前バッファのサイズを抑えています。これを思いついたときは、ちょっと
嬉しかった。(最初は、自前を2つ作っていた。1600*2なので馬鹿にならないなぁ
とか思ってました)。
 strlen2は、実は作りこんであります。(ムダに)色んな情報がでる、当時つき
合ってくれたkonnoさんに感謝。

 "22行*68桁<>19行*78桁" とメッセージに入れてありますが、この程度のサイズの
メモだと思ってください。桁数が小さければ、いちおうそれなりの行数は出ると思い
ます。モバだどどうなるの? 行数が少ないので。
 Vzのメニューには、もちろん、サイズとか画面書き換えとかの制約があるはず
です。が、モバでのテストはやってません。

 (めざらさん、コメントいただければ嬉しいですが、ご無理をなさらないように。
konnoさんのところとどっちにしよう? と思ったけど、いちおう前後の繋がりと、
マクロは「野ざらし」、という大まかなルールだったと思うので、こちらに上げ
させていただきます。UOMですから、問題なしです。<- cf. DOM)


=== MemoMenu (v 1.00) by B ===; Memo displayed on Ymenu
・行ブロックで起動。メニューにそれが出ます。重要事項の参照用マクロです。
・一画面のメニューの制限(Vz)は80字X20行程度。その程度に制限されています。
・一度記憶されたら、それを何度も見せる。消えない。もちろん、マクロ自体がマクロ
 バッファから消えたら、消えるよ。
・新規登録したい場合には、シフトで一度、バッファをクリア。
・ほとんど常に複数ファイルを往復してるのだけど、その往復操作がヘタなので。

* M
50 ^^ "MemoMenu"

	?.
	&10 p=r, 	;hist work -> Ymenu buf (data going thru linebuf)

	; --- SHIFT -> prep for new memo (del buff)
	(ks&1)? { p.0-, &m("Buff cleared. Now, ready for new items.") .}

	(p.0==0) ?? >c	;simply exec!  You want to see the memo, again.


	; --- initial check
	(mb==1)?? { &m("line block, please!") .}
	(xc<0)?   { &m("up -> down, only.") .}
	(xc>25)?  { &m("vertically too long!") .}	; ??? improvise!

&s
	; --- make workfile (nul)
	#k #B
	mx[+, #R "nul" #m (s)? 'y' mx],
	#i

	; --- del empty line, first, on nul file
	ps[=pr,
	#56 "\n\n" #m "\n" #m "AY"
:d	#57 (r)? >d
	ps],

	; --- clean up
	ps[=pr,
	#56 "\x ^[\s\t]+" #m "" #m "AY"
	#56 "\x [\s\t ]+$$" #m "" #m "AY"
;	#56 "\x ^" #m " " #m "AY"
	ps],

	; --- check the max length
	#^ #<
	l-,
:f	#> (lx>l)? l=lx,		;<l> max length
	#d 
	(r<0)? >g ? >f
	
:g	(l>80)? { &m("sorry! too ugly.") . }
	l--,				;<l> adjusted

	; --- check lines
	#_ #e v=ln,			;<v> line
	(l*v>1500)? { &m("too big. 22行*68桁<>19行*78桁.") . }

	; --- prep for get strings
	#_
	#s #<

	; --- get strings loop (hist work)
	ps[=p,
:a
	#b #> #G
	#< #s (r)? >b
	#<
	>a

:b	ps],
	mx[+, #C mx],			;close nul workfile

	; --- strlen2 (upto 2 nulls)
	si=p, ax=p..-1,		;return <ax> or (r)
	&i("$(56,33,DB,39,1C,74,06,46,48,74,10,EB,F6,8B,FE,47,5B,2B,F3,8B)$
	    $(DE,46,8B,C6,40,EB,01,F9,C3)")

	; --- move strings in <p> to linebuffer, w/o size info (p..-1)
	#] n=pn..-27,			;linebuffer
	&Sm(n,p,ax)

	; --- Ymenu in <p> (hist work) from <n> (linebuf)
	&01				;-- measurements
	&02 &Sm(p,r,20)			;send dummy macro (+menu header)
	p.16=l+2,			;longest string = menu width (f), 
	p.17=h,				;item num (4)
	k=2+h*2, p..7=8+k+j,		;n..7 menu size (c0),
	p[,
	p+=20, (k){ p.0-, p++, }	;nulls for rest of header
	&Sc(p,"MEMO") p=r+1,		;title
	&Sm(p,n,j)			;items after title
	p],
	&d
:c	rr[=p, &* rr], .		;exec!

01:	j=n, h-, l-,			;measure longest item,item num,all len(*)
  :a	&Sn(j) (l<r)? l=r,		;longest string <l>
	(r)? { j+=r++, h++, >a }	;num of items <h>
	j-=n,				;all the length <j>

02:	(3+$)."$(1,a,0,ff,ff,0)!01(r)$(0,e1,c0,0,f,4,0,ff)"

10:	(5+$)."$(40,06)$[1600]"

*

関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)

- 4456.第二の置換 - めざら 18/08/10-00:36

返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

おなまえ :
Eメール :
タイトル :
メッセージ: 通常モード(推奨)  整形モード(非推奨)  preモード(空白再現)
※ プログラムコード等を含まない場合は,できるだけ通常モードをご利用ください。

参照先 :
暗証キー: (英数字で8文字以内) プレビューなし


- 以下のフォームから自分の投稿記事を修正・削除することができます -

処理 記事No. 暗証キー