[HOME]  [リストへもどる]
一括表示

  十分割ジャンプマクロの更新 - konno 20/10/21-22:51 No.9864
  ┣ Re: 十分割ジャンプマクロの更新 - としき 20/10/29-19:28 No.9870
  ┃┣ Re^2: 十分割ジャンプマクロの更新 - めざら 20/11/01-18:53 No.9873
  ┃┃┣ Re^3: 十分割ジャンプマクロの更新 - konno 20/11/03-01:42 No.9878
  ┃┃┃┗ Re^4: 十分割ジャンプマクロの更新 - めざら 20/11/03-07:36 No.9879
  ┃┃┃ ┗ Re^5: 十分割ジャンプマクロの更新 - konno 20/11/04-00:57 No.9886
  ┃┃┃  ┗ Re^6: 十分割ジャンプマクロの更新 - めざら 20/11/06-22:26 No.9895
  ┃┃┃   ┗ Re^7: 十分割ジャンプ、ロング計算マクロ - konno 20/11/07-00:46 No.9896
  ┃┃┃    ┗ Re^8: 十分割ジャンプ、ロング計算マクロ - めざら 20/11/07-08:58 No.9898
  ┃┃┃     ┗ Re^9: 十分割ジャンプ、ロング計算マクロ - konno 20/11/07-20:56 No.9902
  ┃┃┃      ┗ 十分割ジャンプの完成形のヒントは原点にあった - konno 20/11/08-15:56 No.9906
  ┃┃┃       ┗ Re: 十分割ジャンプ、1/1000 にしてみたら - konno 20/11/09-20:15 No.9910
  ┃┃┗ Re^3: 十分割ジャンプマクロの更新 - としき 20/11/03-13:21 No.9881
  ┃┃ ┗ Re^4: 十分割ジャンプマクロの更新 - めざら 20/11/03-16:05 No.9885
  ┃┃  ┗ Re^5: 十分割ジャンプマクロの更新 - としき 20/11/04-23:29 No.9890
  ┃┃   ┗ Re^6: 十分割ジャンプマクロの更新 - めざら 20/11/06-07:06 No.9892
  ┃┃    ┗ Re^7: 十分割ジャンプマクロの更新 - としき 20/11/06-19:44 No.9894
  ┃┃     ┗ Re^8: 十分割ジャンプマクロの更新 - めざら 20/11/07-09:19 No.9899
  ┃┃      ┗ Re^9: 十分割ジャンプマクロの更新 - としき 20/11/07-11:35 No.9901
  ┃┗ Re^2: 十分割ジャンプマクロの更新 - konno 20/11/03-01:12 No.9876
  ┃ ┗ Re^3: 十分割ジャンプマクロの更新 - としき 20/11/03-13:21 No.9882
  ┃  ┗ Re^4: 十分割ジャンプマクロに適した式は? - konno 20/11/06-00:07 No.9891
  ┃   ┗ Re^5: 十分割ジャンプマクロに適した式は? - としき 20/11/06-19:44 No.9893
  ┃    ┗ Re^6: 十分割ジャンプマクロに適した式は? - konno 20/11/07-01:12 No.9897
  ┃     ┗ Re^7: 十分割ジャンプマクロに適した式は? - としき 20/11/07-11:35 No.9900
  ┃      ┗ Re^8: 十分割ジャンプマクロに適した式は? - としき 20/11/07-22:46 No.9903
  ┃       ┣ Re^9: 十分割ジャンプマクロに適した式は? - konno 20/11/07-23:14 No.9904
  ┃       ┃┗ Re^10: 十分割ジャンプマクロに適した式は? - としき 20/11/08-23:59 No.9908
  ┃       ┃ ┗ Re^11: 十分割ジャンプマクロに適した式は? - konno 20/11/09-01:41 No.9909
  ┃       ┃  ┗ Re^12: 十分割ジャンプマクロに適した式は? - としき 20/11/19-23:15 No.9921
  ┃       ┃   ┗ Re^13: それぞれの事情 - konno 20/11/20-00:12 No.9923
  ┃       ┃    ┗ Re^14: それぞれの事情 - としき 20/11/20-01:06 No.9925
  ┃       ┃     ┗ Re^15: それぞれの事情 - konno 20/11/22-23:48 No.9926
  ┃       ┗ Re^9: 十分割ジャンプマクロに適した式は? - めざら 20/11/07-23:40 No.9905
  ┣ 十分割ジャンプマクロ JUMP10.def Ver0.4 - konno 20/11/08-16:04 No.9907
  ┗ 十分割ジャンプ JUMP10.def Ver0.5 - konno 20/11/09-21:15 No.9911

(9864) 9864十分割ジャンプマクロの更新  投稿者:konno   2020/10/21(水) 22:51
   コメント数 3

#9857 以降で話題にしていた十分割ジャンプマクロの問題点が解消出来たのでアップします。
オリジナルVZでも動作しますが基本的には高橋版系用です。


=== JUMP_10.def === H_oka,DANNY,wanama,konno 100/10分割ジャンプ,行番号付

;=== JUMP_10.def === H_oka,DANNY,wanama 100/10分割ジャンプ,行番号付
;17079/17177  H岡  その3:ファイル十分割地点へジャンプ ;(15)  00/10/31
;どんな大きなファイルでも、十分の一刻みで、正確に、ファイル内のお望みの地点へ着地してくれます。
;※ 高橋版系以外のVZ は、&Ld が使えないため不正確です。実用ファイルサイズも約2M までです。
;[ESC]+0 なら1〜99入力 百分割ジャンプ/100 以上なら行番号ジャンプ
;使用している汎用変数:n,p,i		Ver0.3  2020-10-21

*M

80 [ESC]0 "きっちり十分割ジャンプ:巨大ファイル対応版"
	?.
	n=r,					; ★[ESC]+数字を n に
	(n==0)?>j				; ★[ESC]+0 なら1〜99入力へ
#if tVZ
	n=n*10, pw.1='0', >t			;高橋版以降
#endif
	&s #_ i[, i=ln, 
	(i<0)?{i=(-i/(-i/7))+1,n=(-ln/i)*n, &#J(n) >A}  ;32767行以上に対応
	n=(ln/10)*n, &#J(n) 			;めざら資源の VZ Macro FAQ から
:A	i], &d >q
;17200/17467  和生  RE:RE*4:その3:ファイル十分割地点へジャ;(15) 00/11/16
:j						; ★[ESC]+0 なら1〜99入力 百分割ジャンプ
	&g("",-9) n=r, &Cr (n==-1)?.			;-9:Line No. /[ESC]etc.
	&Sn(pw)(r>2)?{ &s &#J(n) #e &d #m >q.}	;100 以上なら行番号ジャンプ 65534行まで
#ifn tVZ
	&s #_ n=(ln/100)*n, &#J(n) &d >q.	;百分割ジャンプ   VZ Macro FAQ から
#endif
	n=pw.0&$f*10+pw.1&$f,			;n:%
	(pw.1)??pw.1='0',			;着地微調整
:t	p126+wa,				;p:mark0,
	#] &Tz(wa) p..0=ax, p..1=dx,		;ファイルサイズ DANNY
	&Id(p,100) &Im(p,n) &Ia(p,r*n/100)	;r:mod revise
	#U (ax+$8000<$80c8 && dx==0)?>q ;.	;200 byte
:u	ds[+, #]
#if kVZ
	(300){ #d (r)?{} (pw.1-pq..133.11)??{} }   ;status chr, kvz,ovz:.11
#else
	(-1){ #d (r)?{} (pw.1-pq..133.10)??{} }   ;status chr, tvz:.10
#endif
	ds],
:q
;	&m("Jump to %d",n) ;&w(40)   ;.
	&m("") 
	&d .

*


このマクロ中で、VZは32767行以上は数値がマイナスになってしまうので
	(i<0)?{i=(-i/(-i/7))+1,n=(-ln/i)*n, &#J(n) >A}  ;32767行以上に対応
の行で 32767行以上に対応させてみたんですが

	i=(-i/(-i/7))+1,

この変な計算は誤差を少なくするための苦肉の策です。(^^;
何かうまいやり方無いですかね。


      - No.9864 -    このTreeへ           [リストへもどる] pre

(9864) 9870Re: 十分割ジャンプマクロの更新  投稿者:としき   2020/10/29(木) 19:28
参照先:http://toshiki.la.coocan.jp/
    9864 番 konno さんへのコメント    コメント数 2

> 	i=(-i/(-i/7))+1,
> この変な計算は誤差を少なくするための苦肉の策です。(^^;

ごめんなさい、これでなぜ誤差が少なくなるのかが私にはわかりません。
これが理解できれば

> 何かうまいやり方無いですかね。

うまいかどうかは別にして、他の方法を提案できるかもしれないんですがね。
よろしければ、説明していただけないでしょうか。

      - No.9870 -    このTreeへ    コメント元:9864 へ [リストへもどる] pre

(9864) 9873Re^2: 十分割ジャンプマクロの更新  投稿者:めざら   2020/11/01(日) 18:53
参照先:http://mezala.la.coocan.jp/
    9870 番 としき さんへのコメント    コメント数 2

> > 	i=(-i/(-i/7))+1,
> > この変な計算は誤差を少なくするための苦肉の策です。(^^;

この式だと,定数にしても一緒ですよね?

i==-70      (70/(70/7))+1        → 8
i==-700     (700/(700/7))+1      → 8
i==-7000    (7000/(7000/7))+1    → 8
i==-28000   (28000/(28000/7))+1  → 8

      - No.9873 -    このTreeへ    コメント元:9870 へ [リストへもどる] pre

(9864) 9878Re^3: 十分割ジャンプマクロの更新  投稿者:konno   2020/11/03(火) 01:42
    9873 番 めざら さんへのコメント    コメント数 1

> > > 	i=(-i/(-i/7))+1,
> 
> この式だと,定数にしても一緒ですよね?
> 
> i==-70      (70/(70/7))+1        → 8
> i==-700     (700/(700/7))+1      → 8
> i==-7000    (7000/(7000/7))+1    → 8
> i==-28000   (28000/(28000/7))+1  → 8

ああ、ほんとだ!!

私は本当に計算が苦手なので、適当にやっていました。(^^;

	i=(-i/(-i/7))+1,
これは
	i=8,
と同じなんですね。ということは

	(i<0)?{i=(-i/(-i/7))+1,n=(-ln/i)*n, &#J(n) >A}  ;32767行以上に対応
この式は
	(i<0)?{n=(-ln/8)*n, &#J(n) >A}  ;32767行以上に対応

こんなに簡素になるんですね。(@.@)
ありがとうございます。m(__)m


      - No.9878 -    このTreeへ    コメント元:9873 へ [リストへもどる] pre

(9864) 9879Re^4: 十分割ジャンプマクロの更新  投稿者:めざら   2020/11/03(火) 07:36
参照先:http://mezala.la.coocan.jp/
    9878 番 konno さんへのコメント    コメント数 1

いやいやいやいや。
助言ではなくて,ツッコミですよ。

としきさんの疑問とたぶん同じだと思うのですが,知りたいことは「なぜ,この式なのか。」です。
ここに論理的な理解が及ばないから,そこが知りたいという素朴な理由です。

ふつう,16ビットで負の値を正に直したいときは $8000 を加算してやると思うのです。
このケースでそれが適用できるかどうかは別の話になりますけどね。

試行錯誤というのは,まぁ論理で攻めてる雰囲気が薄いですが,よくありますよね。
ただ,なぜ誤差が少なくなるのか?という評価になると,多少の検証が必要かと思います。

まぁ,十分割位置ジャンプなら「だいたい」で構わないわけですが…。
わたしなんざ,$8000行を超えるテキストに対応しないって仕様でやってますし。

      - No.9879 -    このTreeへ    コメント元:9878 へ [リストへもどる] soft

(9864) 9886Re^5: 十分割ジャンプマクロの更新  投稿者:konno   2020/11/04(水) 00:57
    9879 番 めざら さんへのコメント    コメント数 1

> いやいやいやいや。
> 助言ではなくて,ツッコミですよ。

はい、的確な解答で突っ込んでいただき、ありがたいです。m(__)m

> としきさんの疑問とたぶん同じだと思うのですが,知りたいことは「なぜ,この式なのか。」です。
> ここに論理的な理解が及ばないから,そこが知りたいという素朴な理由です。

最近は特に論理的に考えるということが出来なくなっているみたいで
こんな風にして見たらどうだろう、という極めていい加減なことをやっていました。

> ふつう,16ビットで負の値を正に直したいときは $8000 を加算してやると思うのです。
> このケースでそれが適用できるかどうかは別の話になりますけどね。

私は$8000を超えるとマイナスになるというのがどうにも飲み込めなくて
一番わかっていない分野かもしれません。(^^;
これが分かればビット演算でもスイスイできそうな気はしますね。

> 試行錯誤というのは,まぁ論理で攻めてる雰囲気が薄いですが,よくありますよね。
> ただ,なぜ誤差が少なくなるのか?という評価になると,多少の検証が必要かと思います。

マイナスの時に、1/10 だと非常に誤差が大きくなってしまうので、数字を変えてみて
1/8 が誤差が少ないなと感じたわけです。

> まぁ,十分割位置ジャンプなら「だいたい」で構わないわけですが…。
> わたしなんざ,$8000行を超えるテキストに対応しないって仕様でやってますし。

VZの仕様がそうなっているのを、今回改めて確認出来て、不満を持ちました。
せめてマクロの関数くらいロング対応に出来なかったのかなぁと。
私にスキルがあれば、スイッチで切り替えて実現したいものなんですが・・・
今はもう出がらしみたいで何にも出来そうもないですね。


      - No.9886 -    このTreeへ    コメント元:9879 へ [リストへもどる] soft

(9864) 9895Re^6: 十分割ジャンプマクロの更新  投稿者:めざら   2020/11/06(金) 22:26
参照先:http://mezala.la.coocan.jp/
    9886 番 konno さんへのコメント    コメント数 1

> せめてマクロの関数くらいロング対応に出来なかったのかなぁと。

v1.6 以降であれば,普通にロング演算子を使えるわけですから,

= t = by H_ear
#if 0
ジャンプのテスト
#endif
* mad for vz!
1 ^\ "" ?.
	&g("n/10")
	(r<1)?{ #^ . }
	(r>9)?{ #_ . }
	&s n=r,
	&m("Jump to %d/10",n)
	&> p=r, &Im(p,0)
	#_ &Ia(p,ln) &Im(p,n) &Id(p,10)
	&#J(p..0)
	&m("")
	&d #] .

0:	; ---- buffer ----
	(3+$)."$[4]"
*

ふつうに出来るのではないかと思うのですが……

      - No.9895 -    このTreeへ    コメント元:9886 へ [リストへもどる] pre

(9864) 9896Re^7: 十分割ジャンプ、ロング計算マクロ  投稿者:konno   2020/11/07(土) 00:46
    9895 番 めざら さんへのコメント    コメント数 1

> ジャンプのテスト

す、凄い、オリジナルVZでもキチンと高精度で動いています!!
えーと、どうやっているんだろう。

> 	#_ &Ia(p,ln) &Im(p,n) &Id(p,10)

ファイル末尾に飛んで、ln の最大行数をロングで1/10にしているんですね。
行数分割でこんなに精度よく分割できるとは、思っていませんでした。

ファイルサイズでロング計算だとオリジナルVZでは暴走してしまうんですが
行数での計算なら大丈夫みたいですね。

ln を使っているので、65535行を超えるファイルは駄目ですね。
だいたい2M以上のファイルでは使えないですが、暴走しないのは安心です。
VZ自体がロング行数対応だったら無制限だったのに、そこが残念です。

これ、いただきます。ありがとうございます。


      - No.9896 -    このTreeへ    コメント元:9895 へ [リストへもどる] pre

(9864) 9898Re^8: 十分割ジャンプ、ロング計算マクロ  投稿者:めざら   2020/11/07(土) 08:58
参照先:http://mezala.la.coocan.jp/
    9896 番 konno さんへのコメント    コメント数 1

> ファイルサイズでロング計算だとオリジナルVZでは暴走してしまうんですが

製品版でも高橋版でも一定の条件を満たせば暴走の発生/回避の問題は同じですね。

#_ &Ia(p,ln) &Im(p,n) &Id(p,10)

これは計算の順序が重要で,先に1/10を求めるのではなく,lnにnを掛けます。
通常ありえないと思いますが,割った結果がショート整数に収まらないと暴走するから。
結果的にその方が誤差も少なくなるはずです。


> ln を使っているので、65535行を超えるファイルは駄目ですね。

「仕様」ですね。
そもそも,そんな巨大なファイルを開いて末尾へ飛んで行数を取得するような
効率の悪すぎる仕様のマクロを使うことがそもそも…と思います。
まぁ,どのような仕様にしようが,行番号ジャンプの制限はそこまでではないでしょうか。
末尾に飛んで,行番号を取得して,(A)一旦1行目に戻って,さらに #e で戻り値がなければ,
取得した値に65536を足して,(Aに戻る)…これじゃきりがないですよ。

> VZ自体がロング行数対応だったら無制限だったのに、そこが残念です。

金野版で拡張しますか?

      - No.9898 -    このTreeへ    コメント元:9896 へ [リストへもどる] soft

(9864) 9902Re^9: 十分割ジャンプ、ロング計算マクロ  投稿者:konno   2020/11/07(土) 20:56
    9898 番 めざら さんへのコメント    コメント数 1

> これは計算の順序が重要で,先に1/10を求めるのではなく,lnにnを掛けます。
> 通常ありえないと思いますが,割った結果がショート整数に収まらないと暴走するから。

元の数値が2バイト整数なら全く問題ないように思います。
試したところではオリジナルVZで、3,276,798 までのロング除算が出来るようです。

xxxxxx.x09   3,276,798  のファイルで正常に計算できているように見える
XXXXXX.X08   3,276,800  のファイルで暴走

> そもそも,そんな巨大なファイルを開いて末尾へ飛んで行数を取得するような
> 効率の悪すぎる仕様のマクロを使うことがそもそも…と思います。

VTDOS環境では一瞬ですね。0.1秒とかそんなレベル?
なのでサイズは気にならなくなりました。

> 末尾に飛んで,行番号を取得して,(A)一旦1行目に戻って,さらに #e で戻り値がなければ,
> 取得した値に65536を足して,(Aに戻る)…これじゃきりがないですよ。

なるほど、そのように計算するわけですか。参考になります。
そのうち試してみたいですね。

> > VZ自体がロング行数対応だったら無制限だったのに、そこが残念です。
> 金野版で拡張しますか?

久しぶりにVZのソースを眺めてみましたが、全くわかりませんでした。(;_;)


      - No.9902 -    このTreeへ    コメント元:9898 へ [リストへもどる] pre

(9864) 9906十分割ジャンプの完成形のヒントは原点にあった  投稿者:konno   2020/11/08(日) 15:56
    9902 番 konno さんへのコメント    コメント数 1

十分割ジャンプは、DC15のH岡さんのマクロが元祖だと思います。
今回めざらさんのロング演算のマクロに触発されて、ファイルサイズで出来ないかと
原点に戻ってみました。
当時のH岡さんの書き込みを転載してしまいます。
無断転載ごめんなさい。m(__)m


> 17079/17080 xxxxxxxx  H岡             その3:ファイル十分割地点へジャンプ
> (15)   00/10/31 20:01

 皆さん、こんにちは。

 どんな大きなファイルでも、十分の一刻みで、正確に、ファイル内のお望み
の地点へ着地してくれます。

=== JUMP_10.def === m(_H_)m
* M
89^\"きっちり十分割ジャンプ:巨大ファイル対応版"
    ?.
    mx+, &g("Jump n/10") mx-, n=r, (n<0||n>10)?.;0≦n≦10
    &s #_ #> &Le(pr,wa+82) &Ia(pr,cp-2)         ;wa+82=head lptr
    &Im(pr,n) &Id(pr,10)                        ;ファイルサイズをn/10分割
    &Sp(pf,"%s ->%lx",wa+146,pr..0,pr..1)       ;pf=拡張タグ情報
    dn[-, #O #e #m dn], ky1,                    ;カーソル行=画面上端+1行
    &m("Jump to %d/10",n) &d #] &b(2)
*
======


今回の改造のきっかけは、#O でジャンプが、SHADOW.DEF で問題になったからですが
このファイルサイズを求める方式は &Tz に置き換えていて、今まで試していませんでした。
このルーチンはVZのバージョンに依存してないようです。

    &s #_ #> &Le(pr,wa+82) &Ia(pr,cp-2)         ;wa+82=head lptr

ファイルの末尾に飛んで、wa+82 + cp-2 でファイルサイズが得られるようです。

    &Im(pr,n) &Id(pr,10)                        ;ファイルサイズをn/10分割

DC15 17120より
>  wa+82 は、今読み込んでいる巨大ファイルがテキストバッファから溢れてし
>まった冒頭部分のサイズを示しています。ファイル末尾の cp-2 は、テキスト
> バッファに納まっているファイル部分のサイズを示しています。したがって、
> これら2つの数値の合計がファイルサイズになります。
> 
>                                                        H岡 m(_H_)m


ここで、ファイルサイズを1〜9倍してから1/10にしていますが

	&Id(pr,10) &Im(pr,n)

先に除算することで、&Id の限界をギリギリまで使えると考えました。
これで試したところではオリジナルVZで、3,276,798 までのロング除算が出来るようです。

xxxxxx.x09   3,276,798  のファイルで正常に計算できているように見える
XXXXXX.X08   3,276,800  のファイルで暴走

そこでH岡さんと、めざらさんと、DANNYさんのマクロを悪魔合体。(^^;
これで試すと、dx の値が $32 以上で暴走するようなので、このようにしました。

	&s #_ #> &Le(p,wa+82)			;wa+82 + cp-2 = ファイルサイズ
	&Ia(p,cp-2) ax=p..0,dx=p..1, &d		;ロング加算 wa+82=head lptr
	(dx>=$32)?{&m("3.2M サイズオーバーです").} ; 3,276,800以上はoVZ暴走

tVZ以前なら、3.2M以上で「3.2M サイズオーバーです」と表示して終了
暴走することはありません。(^_^)
行数方式だと約2Mまでしか使えないので、3.2Mまで使えるのはうれしいです。

tVZ以降なら暴走はしませんが、11M以上?のファイルでは挙動不審になるような?
そこで、tVZ以降は

	&Tz(wa) p..0=ax, p..1=dx,		;tVZファイルサイズ DANNY

このルーチンにしたら問題なく動作します。
これで現在考えられる範囲ではベストのジャンプマクロが完成しました。
マクロは別レスでアップします。


      - No.9906 -    このTreeへ    コメント元:9902 へ [リストへもどる] pre

(9864) 9910Re: 十分割ジャンプ、1/1000 にしてみたら  投稿者:konno   2020/11/09(月) 20:15
    9906 番 konno さんへのコメント

> 先に除算することで、&Id の限界をギリギリまで使えると考えました。
> これで試したところではオリジナルVZで、3,276,798 までのロング除算が出来るようです。

すみません、嘘を書いていました。m(__)m
実際の計算は、1/10 ではなく、1/100 でやっていました。

>	i10, &Id(pr,10*i) &Im(pr,n*i)	; 1/10と1/100 共用のため

1/10 の計算だと、327,678 を超えると暴走します。

それで閃いたんですが、だったら、1/1000 なら、32M まで出来るのでは?
で、やってみたら、出来ました。\(^^)/ ヤッタ-

xxxxxxxx.x01   11,375,571  のファイルで正常に動作しているように見える
xxxxxxxx.x00   11,734,237  手持ちの最大のファイルで動作不定

11.7M のファイルは私の環境ではVZの編集限界を超えているようなので
他の問題で動作不定になっている可能性もあります。
少なくとも、11.3M までは正常動作するので、実用上無制限と言えそうです。

試しに乗算を先にしてどうなるか見てみました。

    &Im(pr,n*i)					;ロング乗算 * 100〜900
    &Id(pr,10*i)				;ロング除算  1/1000

これだと、11.3M のファイルで、30% までは正常で、40% 以上で動作不定になりました。
11.3M * 400倍でロング乗算がオーバーフローしたようです。
やっぱり先に除算することで、&Id の制限を含めて最大限に使えるようです。
1/1000 固定だと小さいファイルでうまく動かないのでサイズで倍率を変えます。

修正したH岡さんのマクロを再掲します。


=== JUMP_10.def === m(_H_)m
* M
89^\"きっちり十分割ジャンプ:巨大ファイル対応版"
    ?.
    mx+, &g("Jump n/10") mx-, n=r, (n<0||n>10)?.;0≦n≦10
    &s #_ #> &Le(pr,wa+82) 			;wa+82 + cp-2 = ファイルサイズ
    &Ia(pr,cp-2)        			;ロング加算 wa+82=head lptr
    ax=pr..0,dx=pr..1,i100,(dx==0&&ax<$7000)?i1, ;ファイルサイズで倍率調整
;    &d &m("%x %x %d",ax,dx,i) .		;dx確認用
    &Id(pr,10*i)				;ロング除算 ★先に除算 1/1000
    &Im(pr,n*i)					;ロング乗算
    &Sp(pf,"%s ->%lx",wa+146,pr..0,pr..1)       ;pf=拡張タグ情報
    dn[-, #O #e #m dn], ky1,                    ;カーソル行=画面上端+1行
    &d &m("Jump to %d/10",n) &d #] &b(2)
;    &d &m("%x %x %d",ax,dx,i) .		;dx確認用
*


      - No.9910 -    このTreeへ    コメント元:9906 へ [リストへもどる] pre

(9864) 9881Re^3: 十分割ジャンプマクロの更新  投稿者:としき   2020/11/03(火) 13:21
参照先:http://toshiki.la.coocan.jp/
    9873 番 めざら さんへのコメント    コメント数 1

> この式だと,定数にしても一緒ですよね?

ただ、Vzは整数演算ですよね。
割り切れない値、例えば69とか71だった場合、どうなるのでしょうか。
もしかしてkonnoさん、そういう値でいくつか試してみて、誤差が少なくなると誤解
してしまったとか。

      - No.9881 -    このTreeへ    コメント元:9873 へ [リストへもどる] soft

(9864) 9885Re^4: 十分割ジャンプマクロの更新  投稿者:めざら   2020/11/03(火) 16:05
参照先:http://mezala.la.coocan.jp/
    9881 番 としき さんへのコメント    コメント数 1

話を元に戻させてもらうと,十分割位置の値となれば,元の数が大きいほど
…と言っても,符号なし($8000未満)での話ですが…誤差が少ないですよね。
で,十分割位置ジャンプが望まれるということは,それなりに大きなファイルのはず。
10行未満の誤差って,無視してもいいと思うのですが,気になりますか?
100行未満のテキストだと誤差が大きくなるけれど,そんなテキストでは無意味かと。

そんなに厳密な結果を求めてないと思うのですが,そう思うのはワタシだけかな(^^;
より厳密を求めるなら,10倍(100倍でも結果は同じ)にして誤差を減らすでしょう。
1/10を求める前に,ln に(n/10の)nを掛けてから10で割ってもいいわけですが。

そもそも,「元の計算式 i=(-i/(-i/10)),」という意図を測りかねてまして。
符号つきのときだけ誤差が大きくなる……何故だろう……
      - No.9885 -    このTreeへ    コメント元:9881 へ [リストへもどる] soft

(9864) 9890Re^5: 十分割ジャンプマクロの更新  投稿者:としき   2020/11/04(水) 23:29
参照先:http://toshiki.la.coocan.jp/
    9885 番 めざら さんへのコメント    コメント数 1

> そんなに厳密な結果を求めてないと思うのですが,そう思うのはワタシだけかな(^^;

私は、性格的に、厳密な結果を求めてしまいそう。
それはともかく。
konnoさんは、何らかの基準と比較して、誤差が大きいと感じていると思うのです。
ところが、私には、その比較対象がわからない。
だから、その、比較の基準がわかれば、もしかしたらアドバイスができるかも、と
思ったわけです。
まぁ、要するに

> そもそも,「元の計算式 i=(-i/(-i/10)),」という意図を測りかねてまして。

私にもこいつがわかっていない、ということです。

i=(-i/(-i/10))
 
この式だと,定数にしても一緒ですよね?

i==-70      (70/(70/10))        → 10
i==-700     (700/(700/10))      → 10
i==-7000    (7000/(7000/10))    → 10
i==-28000   (28000/(28000/10))  → 10
      - No.9890 -    このTreeへ    コメント元:9885 へ [リストへもどる] pre

(9864) 9892Re^6: 十分割ジャンプマクロの更新  投稿者:めざら   2020/11/06(金) 07:06
参照先:http://mezala.la.coocan.jp/
    9890 番 としき さんへのコメント    コメント数 1

厳密な結果を求めてしまいそうな性格の方は,ファイルの特定比例位置に飛ぶのに
行番号という空行すら含む数値を用いることに違和感を感じませんか?

例えば,行番号で5/10の位置に移動したときに,ステータスラインの位置表示が
50%ちょうどを示すとは限らないわけですよね。

よく考えるのは,wa+78 にセットされる eofp(EOF lptr)を使うというものです。
これを使うと,行番号を使うときのようにファイルの末尾に一旦飛んで最大値を
取得する必要がないので劇的に高速なうえ,ロングポインタなので計算が楽。
konnoさんが悩むような負数を意識する必要はありません。

pに4バイトのローカルバッファを確保し,nはn/10を&g()で取得しておきます。
&Le(p,wa+78) &Im(p,n) &Id(p,10) &Le(wa+126,p) #U

これだけ。

ただし,wa+78にeofpが入るタイミングや条件がよくわからない。
大きなファイルはいいけど,小ささファイルだと0のままだったりする。
だから0だったら普通に行番号ジャンプに切り替えるとかにすれはいいのかな……
あるいは「仕様」で,「ジャンプする必要はありません」とメッセージ。(笑)
      - No.9892 -    このTreeへ    コメント元:9890 へ [リストへもどる] soft

(9864) 9894Re^7: 十分割ジャンプマクロの更新  投稿者:としき   2020/11/06(金) 19:44
参照先:http://toshiki.la.coocan.jp/
    9892 番 めざら さんへのコメント    コメント数 1

> 厳密な結果を求めてしまいそうな性格の方は,ファイルの特定比例位置に飛ぶのに
> 行番号という空行すら含む数値を用いることに違和感を感じませんか?

これは、私にとっては、仕様の問題。
行番号で××に飛ぶ、という仕様であれば空行ありの数値で全く違和感なし。
そうではなく、ファイルサイズで××、ということであれば逆に、行番号でどこそこ、
ということに対して違和感発生。

面倒な方向で考えて見ると、やっぱり素直にロング演算。
もし演算にバグがあるというなら、自前で倍精度整数のルーチンを組んでみる、とか。
入力と出力がそれぞれ一つずつなら、アセンブラでもいいかも。

      - No.9894 -    このTreeへ    コメント元:9892 へ [リストへもどる] soft

(9864) 9899Re^8: 十分割ジャンプマクロの更新  投稿者:めざら   2020/11/07(土) 09:19
参照先:http://mezala.la.coocan.jp/
    9894 番 としき さんへのコメント    コメント数 1

仕様がすべての原点ですね,確かに。

>行番号で××に飛ぶ、という仕様であれば空行ありの数値で全く違和感なし。

行番号ジャンプマクロなら当然そうですね。
ただ,n/10位置ジャンプマクロは目的の行が存在するわけではない。
きっちりn/10の位置に何らかのセクション開始がある固定行文書なら別ですが。

なので,多少の誤差は「仕様」のうちなんじゃないかと思います。
ファイルを開いている人間は総行数なんてご存知ないわけですから,
ジャンプした後でステータスラインの%位置を見ることで大まかな判断をします。
だから,そこがあまりずれてない方が少し安心な気がしますね。

としきさんの考える仕様と論理的コーディングの意味は全く正しいと思いますよ。
「作る側」の考え方としては,たぶんそれしかないし,逸脱するのは余計なお世話。

ただ,自分は使う中で「ちょっとした違和感」が有るのではないかな,と思った次第です。
マクロって,痒いところに手が届くから楽しいのかな…って。
      - No.9899 -    このTreeへ    コメント元:9894 へ [リストへもどる] soft

(9864) 9901Re^9: 十分割ジャンプマクロの更新  投稿者:としき   2020/11/07(土) 11:35
参照先:http://toshiki.la.coocan.jp/
    9899 番 めざら さんへのコメント

> なので,多少の誤差は「仕様」のうちなんじゃないかと思います。

私も全くそう思うんですが、利用者によって、その「多少」の範囲が異なることが
多くて。

> マクロって,痒いところに手が届くから楽しいのかな…って。

そうそう、これはありますよね。

      - No.9901 -    このTreeへ    コメント元:9899 へ [リストへもどる] soft

(9864) 9876Re^2: 十分割ジャンプマクロの更新  投稿者:konno   2020/11/03(火) 01:12
    9870 番 としき さんへのコメント    コメント数 1

> > 	i=(-i/(-i/7))+1,
> 
> ごめんなさい、これでなぜ誤差が少なくなるのかが私にはわかりません。
> これが理解できれば
> うまいかどうかは別にして、他の方法を提案できるかもしれないんですがね。
> よろしければ、説明していただけないでしょうか。

 i=(-i/(-i/10)),

これが元の計算式なんですが、i がマイナスになると、ジャンプ先も
かなりマイナスになってしまうんです。
10で割るところを試行錯誤して7にしたら誤差が少なくなったというだけです。
私は計算が苦手なので自分でもよくわからない式になってしまいました。(^^;

と思ったら、めざらさんから助言が。(++;

      - No.9876 -    このTreeへ    コメント元:9870 へ [リストへもどる] pre

(9864) 9882Re^3: 十分割ジャンプマクロの更新  投稿者:としき   2020/11/03(火) 13:21
参照先:http://toshiki.la.coocan.jp/
    9876 番 konno さんへのコメント    コメント数 1

>  i=(-i/(-i/10)),
> これが元の計算式なんですが、i がマイナスになると、ジャンプ先も
> かなりマイナスになってしまうんです。
> 10で割るところを試行錯誤して7にしたら誤差が少なくなったというだけです。

i はマイナスにはなってはいけないんですか。
やっぱりよく理解できないので、追加で質問。
プラスの値のときはいいや、例えば、i がいくつの時にはいくつになって欲しい、
という一覧のようなものを出していただけませんか?
要は、入力と出力の対照表というか。

入力  → 出力の希望値
    -2 →
  -500 →
 -1000 →
 -8000 →
-16000 →
-32000 →

このくらいあればいいかな。
これだけあれば、希望する値と実際に得られた値から、そこそこ誤差が評価できると
思います。

      - No.9882 -    このTreeへ    コメント元:9876 へ [リストへもどる] pre

(9864) 9891Re^4: 十分割ジャンプマクロに適した式は?  投稿者:konno   2020/11/06(金) 00:07
    9882 番 としき さんへのコメント    コメント数 1

> 入力  → 出力の希望値
>     -2 →
>   -500 →
>  -1000 →
>  -8000 →
> -16000 →
> -32000 →

あのう、十分割マクロなので、10%〜90%まで、1〜9しか入力しないのです。
この数字は意味が分からないので、十分割前提でやらさせてもらいます。

dc13-05.log   1,459,244 約1.4Mのファイルでテスト
37917行あります。-27619

	  1/10 		  1/8
	%  行	%  行
---------------------------------------
10%	 7%  2761	 9%  3452
20%	14%  5522	18%  6904
30%	22%  8283	27% 10356 
40%	29% 11044	36% 13808
50%	36% 13805	46% 17260
60%	44% 16566	54% 20712
70%	51% 19327	63% 24164
80%	58% 22088	72% 27616
90%	65% 24849	82% 31068


fgaldc_010407_0851.log   1,726,897 約1.7Mのファイルでテスト
43108行あります。-22428

	  1/10 		  1/8		  1/5
	%  行	%  行	%  行
------------------------------------------------
10%	 5%  2241	 6%  2803	 9%  4485
20%	 9%  4484	12%  5606	19%  8970
30%	14%  6726	17%  8409	28% 13455
40%	19%  8968	23% 11212	38% 17940
50%	23% 11210	29% 14015	47% 22425
60%	28% 13452	35% 16818	58% 26910
70%	33% 15694	41% 19621	75% 31395
80%	38% 17936	47% 22424	84% 35880
90%	42% 20178	53% 25227	93% 40365


どうですか、大分違うでしょう。
大きい(行数が多い)ほど誤差が多いので、1/5 も試してみました。

私がやりたかったのは、このように、1/8〜1/5 を可変したかったのでした。
ログかソースかなど、テキストの内容によって傾向も変わります。
良い案がありましたら是非ご教授を。m(__)m


      - No.9891 -    このTreeへ    コメント元:9882 へ [リストへもどる] pre

(9864) 9893Re^5: 十分割ジャンプマクロに適した式は?  投稿者:としき   2020/11/06(金) 19:44
参照先:http://toshiki.la.coocan.jp/
    9891 番 konno さんへのコメント    コメント数 1

> あのう、十分割マクロなので、10%〜90%まで、1〜9しか入力しないのです。
> この数字は意味が分からないので、十分割前提でやらさせてもらいます。

ごめんなさい。ここはちょっと私に誤解がありました。
私、i って、飛び先の行番号が入っていると思い込んでいたんですよ。
その上のコードに i=ln, ってあるのを見落としていました。

ただ、ここでやっぱり疑問。
この

> ;32767行以上に対応

というコードで求めたいのは、i なんでしょうか。それとも n ?


> dc13-05.log   1,459,244 約1.4Mのファイルでテスト
> 37917行あります。-27619

> fgaldc_010407_0851.log   1,726,897 約1.7Mのファイルでテスト
> 43108行あります。-22428

いろいろと試した結果として、10よりも8のほうが精度が高そう、というのは理解
できました。で、それは最終結果ですよね。
私がもしかしたら提案できるかも、というのは、途中の部分。
すなわち、#9864でkonnoさんが

> この変な計算は誤差を少なくするための苦肉の策です。(^^;
> 何かうまいやり方無いですかね。

とおっしゃるので、途中経過の部分で誤差を減らせるかも、と考えたわけです。
つまり、最終結果で誤差を減らすために、途中の部分の i とか n とかが重要では
ないか、と愚考するしだい。
ということで、いくつかの(いろんな)i に対して、欲しい i なり n なりの値を
提示していただければ、それにあうような式なりロジックなりをでっち上げることが
できる *かもしれない* 、ということです。

なので、いくつかの(多くの)i(または ln かも)に対する、欲しい値を提供して
いただけますでしょうか。
なにとぞよろしくお願いいたします。

      - No.9893 -    このTreeへ    コメント元:9891 へ [リストへもどる] pre

(9864) 9897Re^6: 十分割ジャンプマクロに適した式は?  投稿者:konno   2020/11/07(土) 01:12
    9893 番 としき さんへのコメント    コメント数 1

> なので、いくつかの(多くの)i(または ln かも)に対する、欲しい値を提供して
> いただけますでしょうか。

前回の一覧の意味がやっと分かりました。

> 入力  → 出力の希望値
>     -2 →
>   -500 →
>  -1000 →
>  -8000 →
> -16000 →
> -32000 →

この数値で出力の希望値というのとはちょっと違いますが、自分なりに分岐でやってみました。

	&s #_ i[, i=ln,
	(i>=0)?{n=(ln/10)*n,>A}
	(i>-4400)?{n=(-ln/1)*n,>A}		;32767行以上に対応
	(i>-9800)?{n=(-ln/2)*n,>A}
	(i>-14600)?{n=(-ln/3)*n,>A}
	(i>-19000)?{n=(-ln/4)*n,>A}
	(i>-22000)?{n=(-ln/5)*n,>A}
	(i>-26000)?n=(-ln/8)*n,
:A	&#J(n) 
	&d &m("%d %d %d",i,n,j)
	i], &d .

大体ですがこんな感じです。
数字は実際のファイルの行数から近い数字にしています。いい加減ですが。

この多重分岐を、一行の式でまとめたいという希望でした。

めざらさんがロング計算で高精度のものを作ってくれたので、こちらは頭の体操と言うことで。


      - No.9897 -    このTreeへ    コメント元:9893 へ [リストへもどる] pre

(9864) 9900Re^7: 十分割ジャンプマクロに適した式は?  投稿者:としき   2020/11/07(土) 11:35
参照先:http://toshiki.la.coocan.jp/
    9897 番 konno さんへのコメント    コメント数 1

> この多重分岐を、一行の式でまとめたいという希望でした。

めざらさんのものほどかっこよくはありませんが、とりあえず、65500行程度までは
対応できていると思えるルーチンが以下。

(i<0)?{n=(32767/10-i/10)*n, &#J(n) >A} ;32767行以上に対応

あぁ、謎のマジックナンバーが発生している。
私のところでは古いVzを引っ張り出すのが面倒なんで、実際の動作確認は行って
いません。なので、うまく行かなかったらごめんなさい。
      - No.9900 -    このTreeへ    コメント元:9897 へ [リストへもどる] soft

(9864) 9903Re^8: 十分割ジャンプマクロに適した式は?  投稿者:としき   2020/11/07(土) 22:46
参照先:http://toshiki.la.coocan.jp/
    9900 番 としき さんへのコメント    コメント数 2

としきさん、定数が間違っていますよ。

誤:
> (i<0)?{n=(32767/10-i/10)*n, &#J(n) >A} ;32767行以上に対応


(i<0)?{n=(6554+i/10)*n, &#J(n) >A} ;32767行以上に対応

おっと、定数だけでなく、符号も間違ってやがる。
どうも、脳みそが腐っていたようです。単に眠かっただけかも。
      - No.9903 -    このTreeへ    コメント元:9900 へ [リストへもどる] soft

(9864) 9904Re^9: 十分割ジャンプマクロに適した式は?  投稿者:konno   2020/11/07(土) 23:14
    9903 番 としき さんへのコメント    コメント数 1

> 誤:
> > (i<0)?{n=(32767/10-i/10)*n, &#J(n) >A} ;32767行以上に対応
>
> 正
> c(i<0)?{n=(6554+i/10)*n, &#J(n) >A} ;32767行以上に対応

としきさん、ありがとうございます。
初め上手く動かないなぁ、と思ったら、修正版が出ていたのですね。
凄い! どのサイズのファイルでも高精度にジャンプします!!

> おっと、定数だけでなく、符号も間違ってやがる。
> どうも、脳みそが腐っていたようです。単に眠かっただけかも。

#(出すのが)早すぎたんだ。
 短けぇゆめだったなぁ・・・(某アニメ風です、ごめんなさい)

私は符号付の論理的なことはまるきりダメみたいなので
このままゴックンします。m(__)m

ロング計算に比べた利点は、暴走しないことですね。(^_^)
と思ったけど、暴走するのはサイズ方式だった。m(__)m

      - No.9904 -    このTreeへ    コメント元:9903 へ [リストへもどる] soft

(9864) 9908Re^10: 十分割ジャンプマクロに適した式は?  投稿者:としき   2020/11/08(日) 23:59
参照先:http://toshiki.la.coocan.jp/
    9904 番 konno さんへのコメント    コメント数 1

> 初め上手く動かないなぁ、と思ったら、修正版が出ていたのですね。
> 凄い! どのサイズのファイルでも高精度にジャンプします!!

入力と出力のペアがわかれば式を立てるのはそれほど難しくないはずですが、
常用していないマクロなんで、ロジックを追いかける羽目になってしまいました。
もしkonnoさんがコードではなく数値で具体例を提供してくれれば、もう少し早く
正確なコードを出せたかも。
私も、何が必要かということをわかりやすく提示できていないのも悪いのですが。
ということで、掲示板スクリプトのほうでも、どういう出力を希望しているのに
どういう結果が出ているのかということをきちんとわかりやすく書いていただければ、
私またはそれ以外の方からアドバイスがあるかもしれません。


> 私は符号付の論理的なことはまるきりダメみたいなので

それはそれでそれなりに理解できます。
であるならばなおさら、他の人を頼っていただきたい、というか。

> このままゴックンします。m(__)m

#チコの実というの。とっても栄養があるのよ(違)

      - No.9908 -    このTreeへ    コメント元:9904 へ [リストへもどる] soft

(9864) 9909Re^11: 十分割ジャンプマクロに適した式は?  投稿者:konno   2020/11/09(月) 01:41
    9908 番 としき さんへのコメント    コメント数 1

> もしkonnoさんがコードではなく数値で具体例を提供してくれれば、もう少し早く
> 正確なコードを出せたかも。

私は計算ものが苦手なので、何が問題かが直ぐに理解できないようです。年のせい?

> ということで、掲示板スクリプトのほうでも、どういう出力を希望しているのに
> どういう結果が出ているのかということをきちんとわかりやすく書いていただければ、
> 私またはそれ以外の方からアドバイスがあるかもしれません。

これは多分他でバグっている影響を受けている気がするので、また見てみます。

> #チコの実というの。とっても栄養があるのよ(違)

う、酸っぱい・・・って、違う! クコの実じゃあ
しばらくだまされてしまいました。(^^;
チコちゃんに叱られるぅ。


      - No.9909 -    このTreeへ    コメント元:9908 へ [リストへもどる] soft

(9864) 9921Re^12: 十分割ジャンプマクロに適した式は?  投稿者:としき   2020/11/19(木) 23:15
参照先:http://toshiki.la.coocan.jp/
    9909 番 konno さんへのコメント    コメント数 1

> これは多分他でバグっている影響を受けている気がするので、また見てみます。

なぜ「他でバグっている」と思われたのでしょうか。
その根拠は?

      - No.9921 -    このTreeへ    コメント元:9909 へ [リストへもどる] soft

(9864) 9923Re^13: それぞれの事情  投稿者:konno   2020/11/20(金) 00:12
    9921 番 としき さんへのコメント    コメント数 1

> なぜ「他でバグっている」と思われたのでしょうか。
> その根拠は?

根拠はありません。(^^;
数値がそもそも正常なルーチンと比べておかしいのです。
何度も見直しているのにわからないので、色々考えてしまうのです。
もっとも、今まで何度も見直してやっと記述ミスに気が付いたことは何度も。(^^;
行き詰ったら一旦放置して他の事をやるほうがドツボにはまりにくいかと。(^^;


      - No.9923 -    このTreeへ    コメント元:9921 へ [リストへもどる] soft

(9864) 9925Re^14: それぞれの事情  投稿者:としき   2020/11/20(金) 01:06
参照先:http://toshiki.la.coocan.jp/
    9923 番 konno さんへのコメント    コメント数 1

> 数値がそもそも正常なルーチンと比べておかしいのです。

前にも書いたかと思いますが、期待される値がいくつで、でも実際に出力される
値がいくつか、ということを、こちらに書いていただくわけには行きませんか。
それによっては、私からアドバイスできることもあるかもしれません。
できれば、複数のサンプルというか手がかりがあれば、解決する可能性はそれだけ
高くなるかもしれません。

そして、それで解決しない場合は、最後の手段の一つ手前の手段、というのも、
一応、私の中では用意されていたりするのですが。
      - No.9925 -    このTreeへ    コメント元:9923 へ [リストへもどる] soft

(9864) 9926Re^15: それぞれの事情  投稿者:konno   2020/11/22(日) 23:48
    9925 番 としき さんへのコメント

> 前にも書いたかと思いますが、期待される値がいくつで、でも実際に出力される
> 値がいくつか、ということを、こちらに書いていただくわけには行きませんか。

実は今はとしきさんのルーチンではない方に変えてしまっているんです。
色々あって、直ぐには対応できないと思います。


      - No.9926 -    このTreeへ    コメント元:9925 へ [リストへもどる] soft

(9864) 9905Re^9: 十分割ジャンプマクロに適した式は?  投稿者:めざら   2020/11/07(土) 23:40
参照先:http://mezala.la.coocan.jp/
    9903 番 としき さんへのコメント

> (i<0)?{n=(6554+i/10)*n, &#J(n) >A} ;32767行以上に対応

! なるほど,この手があったか。
双方早々に1/10にする誤差を回収。
切上げと切捨てのバランスが絶妙。

      - No.9905 -    このTreeへ    コメント元:9903 へ [リストへもどる] soft

(9864) 9907十分割ジャンプマクロ JUMP10.def Ver0.4  投稿者:konno   2020/11/08(日) 16:04
    9864 番 konno さんへのコメント

現在考えられる範囲ではベストのジャンプマクロが完成しましたのでアップします。
マクロの改造ポイントの説明は、#9906 にあります。


=== JUMP10.def === 
;	 H岡,DANNY,和生,めざら,konno 100/10分割ジャンプ,行番号付
;元ネタ 17079/17177  H岡  その3:ファイル十分割地点へジャンプ ;(15)  00/10/31
;どんな大きなファイルでも、十分の一刻みで、正確に、ファイル内のお望みの地点へ着地してくれます。
;※ 高橋版系以外のVZ は、&Ld の制限で実用ファイルサイズは3.2M までです。
;[ESC]+0 なら1〜99入力 百分割ジャンプ/100 以上なら行番号ジャンプ
;使用している汎用変数:n,p		Ver0.4  2020-11-08

*M

80 [ESC]0 "きっちり十分割ジャンプ:巨大ファイル対応版"
	?.
	n=r,					;[ESC]+数字を n に
	(n==0)?>J				;[ESC]+0 なら1〜99入力へ
	n=n*10, pw.1='0', >T			;1〜9は十分割ジャンプ
:J						;[ESC]+0 なら1〜99入力 百分割ジャンプ
	&g("",-9) n=r, &Cr (n==-1)?.			;-9:Line No. /[ESC]etc.
	&Sn(pw)(r>2)?{ &#J(n)  &d  >q.}		;100 以上なら行番号ジャンプ 65534行まで
	n=pw.0&$f*10+pw.1&$f,			;n:%
	(pw.1)??pw.1='0',			;着地微調整
:T	p126+wa, #]				;p:mark0,wa+126
#if tVZ
	&Tz(wa) p..0=ax, p..1=dx,		;tVZファイルサイズ DANNY
#else						;oVZは3.2Mまで
	&Im(p,0)				;pをクリア
	&s #_ #> &Le(p,wa+82)			;wa+82 + cp-2 = ファイルサイズ
	&Ia(p,cp-2) ax=p..0,dx=p..1, &d		;ロング加算 wa+82=head lptr
	(dx>=$32)?{&m("3.2M サイズオーバーです").} ; 3,276,800以上はoVZ暴走
#endif
	&Id(p,100) &Im(p,n) &Ia(p,r*n/100)	;r:mod revise
	#U (ax+$8000<$80c8 && dx==0)?>q 	;200 byte
:u	ds[+, #]
#if kVZ
	(50){#d (r)?{}(pw.1-pq..133.11)??{}}   ;status chr, kvz,ovz:.11
#else
	(50){#d (r)?{} (pw.1-pq..133.10)??{} }   ;status chr, tvz:.10
#endif
	ds],
:q	&d &m("Jump to %d%",n) ;&w(40)   ;.
;	&m("") 
	.

*


Ver0.4  2020-11-08	H岡さんと和生さんとめざらさんとDANNYさんのマクロを悪魔合体。(^^;
Ver0.3  2020-10-21	32767行以上に対応?  (^^;
Ver0.2  2020-09-00	まぼろし〜? (^^;
Ver0.1  2006-11-09	H岡さんと和生さんとDANNYさんのマクロを悪魔合体。(^^;

      - No.9907 -    このTreeへ    コメント元:9864 へ [リストへもどる] pre

(9864) 9911十分割ジャンプ JUMP10.def Ver0.5  投稿者:konno   2020/11/09(月) 21:15
    9864 番 konno さんへのコメント

現在考えられる範囲ではモアベターなジャンプマクロが完成しましたのでアップします。
マクロの改造ポイントの説明は、#9910 にあります。
日替わりじゃぁ。(^^;

Ver0.5  2020-11-09	oVZで 11.3M まで使用可能に、全てのVZに対応
VZEXはステータスラインのアドレスが全然違うようなので分岐させています。


=== JUMP10.def ===
;	 H岡,DANNY,和生,めざら,konno 100/10分割ジャンプ,行番号付
;元ネタ 17079/17177  H岡  その3:ファイル十分割地点へジャンプ ;(15)  00/10/31
;どんな大きなファイルでも、十分の一刻みで、正確に、ファイル内のお望みの地点へ着地してくれます。
;※ 高橋版系以外のVZ は、実用ファイルサイズは11.3M までです。それ以上は不定
;[ESC]+0 なら1〜99入力 百分割ジャンプ/100 以上なら行番号ジャンプ
;使用している汎用変数:n,p,i		Ver0.5  2020-11-09

*M

80 [ESC]0 "きっちり十分割ジャンプ:巨大ファイル対応版"
	?.
	n=r,					;[ESC]+数字を n に
	(n==0)?>J				;[ESC]+0 なら1〜99入力へ
	n=n*10, pw.1='0', >T			;1〜9は十分割ジャンプ
:J						;[ESC]+0 なら1〜99入力 百分割ジャンプ
	&g("",-9) n=r, &Cr (n==-1)?.			;-9:Line No. /[ESC]etc.
	&Sn(pw)(r>2)?{ &#J(n) >q .}		;100 以上なら行番号ジャンプ 65534行まで
	n=pw.0&$f*10+pw.1&$f,			;n:%
	(pw.1)??pw.1='0',			;着地微調整
:T	p126+wa, #]				;p:mark0,wa+126
#if tVZ
	&Tz(wa) p..0=ax, p..1=dx,		;tVZファイルサイズ DANNY
#else						;oVZは11Mまで
	&Im(p,0)				;pをクリア
	&s #_ #> &Le(p,wa+82)			;wa+82 + cp-2 = ファイルサイズ
	&Ia(p,cp-2) ax=p..0,dx=p..1,		;ロング加算 wa+82=head lptr
#endif
	i10,(dx==0&&ax<$7000)?i1, 		;ファイルサイズで倍率調整
	&Id(p,100*i) &Im(p,n*i) &Ia(p,r*n/100)	;r:mod revise
	i-, #U (ax+$8000<$80c8 && dx==0)?>q 	;200 byte
	(pc..1=='XE')?{#d >q }			;VZEXはstatusの位置が違う?
	ds[+, #] i-,				;ステータス画面更新
	p10+pq..133,				;%の手前の数字位置
	(p.1=='%')?p9+pq..133,			;VZTの場合
	(100){ #d i++, (r)?{} (pw.1-p.1)??{} }	;一致するまでカーソル進める
	ds],
:q	&d &m("%s Jump to %d%",pc,n) ;&w(40)
;	&m("") 
	.
*

Ver0.5  2020-11-09	oVZで 11.3M まで使用可能に、全てのVZに対応
Ver0.4  2020-11-08	oVZで 3.2M まで使用可能に、H岡さんと和生さんとめざらさんとDANNYさんのマクロを合体。(^^;
Ver0.3  2020-10-21	32767行以上に対応?  (^^;
Ver0.2  		まぼろし〜? (^^;
Ver0.1  2006-11-09	H岡さんと和生さんとDANNYさんのマクロを泥縄合体。(^^;

      - No.9911 -    このTreeへ    コメント元:9864 へ [リストへもどる] pre