=== Tra_TAG.def v16 === ; V16k06 konno改 2022-08-26 ;2022-08-26 k06 バッファ溢れ対策とタグジャンプ失敗の要因を改善 ;2018-12-24 k05 cd を ct に変更、各種改行に対応 ;2018-12-04 k04 バッファ溢れ不具合対策 コンソールのみ ;2018-10-04 k03 ディレクトリ&LFN不具合対応 v02として#test66 にUP ;2018-10-04 k02 v16ベース ;★LFNが取得出来なくても進む ;2008-02-15 k01 v12を改造、拡張子判定で ".asm" 追加。拡張子無しのファイルにジャンプ * M ;60 ^\ "TAG" 60 "TAG" ?. ;------- ファイラー移行拡張子 (%A) --------------------------------------- a".com .exe .dic .obj .lib .lzh .jpg .gif .ico .zip .pif .lnk", ;------- start コマンド拡張子 (%B) --------------------------------------- b".xls .ppt .mdb", ;------- メニュー選択拡張子  (%C) --------------------------------------- ; c".htm .pas", c".htm .pas .asm .inc", ;------- m=0:wgrep, m=1:ygrep, (%D) -------------------------------------- m0, ;m1, ;------------------------------------------------------------------------- (wn==0)??>l ;コンソールの時バッファ溢れ対策 (wa..19-wa..18 <330)?>l ;行の長さ330以内ならスルー &s #< i0, :x #x i=i+we,(i < 330)?>x ;カーソルを330超えるまで進める #e #d #m #e &d #< ;330以内で改行挿入 :l #] #? (r)?. wa..19.2-, ;行を lfb に取り込む &So(wa..18,":\") (r)??{ ;フルパスが書いてない &Ss(pq..148+2) si=r, ;lbuf di=pq..134+100, i-, i[, &> i], ;tmpbuf (r!=-1)?{ r=si+1, >C } ;行頭からもLFNが取得出来ないときは r=si+1, >C ;★LFNが取得出来なくても進む dn[-, #60 dn], ;通常の #60 &m("#60 %s",di) ;▼ ; . >C ;★LFNが取得出来なくても進む ; f"",(r)?>61 >B ;取得できなければ LZH 処理 f"",(r)?. >B ;取得できなければ LZH 処理 } :A si=r-1, di=pq..134+100, i3, ;フルパス部分を di へ取り出し :C ; &m("-0 ng %s",di) ;▼ ;&w(120) di[, &> di], f=di, ;(r==-1)?{ #> #d >E } r=si+i, ;-->r=lbf内のフルパス末尾adr &09 ;-->pa=拡張行番号情報 &m("09 i=%d %s",i,wa+146) ; &t &w(120) ax$7160, cx+, si=di, di=pq..149, ; &i($21) (ax==$7100 || r)?di=si, &i($21) (ax==$7100)?di=si, &s #k (w=wn)?#X mr255,#i mb+, ;起動行を console に貼り付けて ps[=pr, #56 "$"" #m "" #m 'Y' #56 &?("\i %s",si) #m ;ファイル名部分をSFNに置換 &?("%s ",di) #m 'Y' ps], mb-, #60 e=r, ;TAG情報取得して ux[+, #y ux], (w)?#X &d ;後始末 #> #d (e)?{ ;ディレクトリ対応 &06 (r)? >E &m("1 ng %s",pf) ;▼ ; f"",(r)?>61 >B ;取得できなければ LZH 処理 . } :B ;- 拡張子判断 - &Sy(pf) (r&2)?{ :a &So(a,cx) (r)?{ ;ファイラー移行拡張子 e=r, &Sn(cx) (e.r==32 || e.r==0)?{ &03 . } a=e+1, >a } :b &So(b,cx) (r)?{ ; start コマンド拡張子 e=r, &Sn(cx) (e.r==32 || e.r==0)?{ &07 . } b=e+1, >b } :c &So(c,cx) (r)?{ ;メニュー選択拡張子 e=r, &Sn(cx) (e.r==32 || e.r==0)?{ &02 . } c=e+1, >c } } &04 ;--- テキストとしてオープン --- &m("2 ok %s",wa+146) ;● . :E ;- オープン出来ない - &m("%s オープンできません",f) &b(2) 00: ;--- LFN対応 #60 ---- ;<-- r=0:Exists, -1:non, si[, &Sc(di,si,i) :A (si.i=='"')?{ si++, >A } ; &f(si.i,"$(9,d)$"(*<>?:/| =[];+,") ; &f(si.i,"$(9,d)$"(*<>?:| =;+,") ; / ディレクトリ&LFN対応 e=r, (si.i)??e-, (e>=0)?{ ;ファイル不可文字なら一旦存在判定 &> (r)??>Z ;存在すればr=0を返す } (e==255)?{ di.i-, (-1) >Z } ;存在しなければr=-1を返す di.i=si.i, i++, >A :Z si], &m("00 i=%d %70s",i,wa+146) ;&w(60) 01: ;--- ファイル存在チェック --- ;<-- r=0:Exists, ; e=255:最終判定, (e<11)?e255, ;LFN でも使えない文字なら最終判定 di.i-, &Sn(di) r--, (r>=254)?{&m("%d",r)&t} (di.r=='\')?di.r=0, ax$7143, bx-, dx=di, :F &i($21) ;ファイル存在チェック (ax==$7100)?{ ;LFN に対応してなければ最終判定 ax$4300, e255, >F } (r) &m("01 i=%d %70s",i,wa+146) ;&w(60) 02: ;--- メニュー処理 --- ;--> pf &m("02 %70s",wa+146) ;&w(120) !01 (r==0)?{ ;start &07 . } (r==1)?{ ;filer &03 . } (r==2)?{ ;open &04 . } 03: ;--- ファイラーへ移行 --- ;--> pf,bx #O bx.0[=0, &?("%s",pf) #m bx.0=0], &Sc(pn..-38,pf) #U 04: ;--- テキストとしてオープン --- ;--> pf r=pf, &08 (r==1)?{ :S ;- メニュー処理その2 - &m("maybe binary : %60s",pf) !01 (r==0)?{ ;start &07 . } (r==1)?{ ;filer &03 . } (r==2)?{ ;open ; >O ;★★k06 タグジャンプ失敗はここ? #O &?("%s ->%s",f,pa+1) #m . ;★★k06 これに差し替えたらOKに } . } :O &Sf(pf,' ') (r)?{ p=r, si=p+2, } ?{ &Sn(pf) si=p=pf+r, } &> q=pf, pf[=pr, p.0[=0, #O &?("%s",q) p.0=0], #m pf], (s)?{ &b(2) . } (pa.0==1)?{ &m("ただいまジャンプ中 %s(->%s)",wa+146,pa+1) ; &w(60) ; #O &?("%s ->%s",wa+146,pa+1) #m #O &?("%s ->%s",pf,pa+1) #m &d . } &m("ただいまジャンプ中 %s (%lu行)",wa+146,ax,dx) ; &w(60) &d #^ dn[-, :L ;- long行番号へジャンプ - (dx)?{ dx--, &#J(-1) (ln-0~)??{ #> #d >L } (0) }? &#J(ax) &m("") #? &d dn], 05: ;--- Long 値を取得 --- &i(3+$)."$ $(33,C0,99,33,C9,BF,0A,00,8B,D8,AC,2C,30,3C,09,77)$ $(0F,8A,C8,8B,C2,F7,E7,93,F7,E7,03,C1,13,D3,EB,E8)$ $(8B,C3,C3)" 06: ;--- ディレクトリとしてオープン --- ;--> di ax$4300, bx-, dx=di, &i($21) ;ファイル存在チェック (r)?{ (1) . } #O &?("%s",di) #m (0) 07: ;--- start コマンド --- ;--> pf #E &?("Start %s",pf) #m #[ 08: ;--- chk binary --- ;--> r=ファイル名 ;<-- r=-1:non file, 1:binary ax[,bx[,cx[,dx[,di[, dx=r, ax$3d00, &i($21) (r)?{ (-1)>Z } ;open dx=pq..149, bx=ax, cx=250, ax$3f00, &i($21) ;read bx[, di=dx,cx=ax, &i("$(32,C0,F2,AE,F7,D9,C3)") (r) ;scan ZERO bx], ax$3E00, &i($21) ;close :Z di],dx],cx],bx],ax], 09: ;--- 拡張行番号情報 --- ;<--pa.0 db 0:normal, 1:cp, 2:env, ; .1 dd string p[=r+1, pa.0-, (p..0=='>-')?{ pa.0=1, p+=1, i-, :a i++, r=p.i, &10 ?{ pa.i=p.i, >a } pa.i-, } (p..0=='-[')?pa.0=2, p], 10: ;--- 16進? --- (r)>!{ 1>h 2>h 3>h 4>h 5>h 6>h 7>h 8>h 9>h 0>h A>h B>h C>h D>h E>h F>h a>h b>h c>h d>h e>h f>h } (0) .:h (1) 61 ^^ "LZH" (s)?. &s &#M(4) ky[, &20 f=r, ;-->f=検索文字 (f)??{ &m("変数 m を正しく設定してください") >Z } mp[,ps[=pr, #F &?("%s",f) #m #r ps],mp], (r)?{ r-,>e } r=pq..149, &23 ;-->r=行バッファ取得アドレス (r==-1)?{ r+, >e } &21 (r==-1)?{ r2, >e } p=r, ;-->p=圧縮ファイル名 &#U(4) r=pq..149+121, &23 (r==-1)?{ r+, >e } &22 (r==-1)?{ r3, >e } q=r, &Sn(q) l=q+r+1, ;-->q=ファイル名 &Ss(l) l=r, ; l=行数 #E &?("miel -l -na %s +%s -ej -j%s",p,q,l) #m #[ :Z &#U(4) ky],&d . :e ;- エラー表示 - &#U(4) #> #d &#M(4) (r)>?{ ("タグ情報/書庫ファイル情報行が見つかりません") ("カーソル行が取得できません") ("書庫ファイル情報行の不備です( ^QP でジャンプ )") ("タグファイル情報行の不備です") } &m("%d %s %s",r,mg..0,p) >Z 20: ;--- 書庫ファイル情報検索文字 --- r-, (m==0)?{ r"\i ------------------[", } (m==1)?{ r"\i /* 書庫ファイル ", } (r) 21: ;--- 書庫ファイル情報行を分析 --- ;-->r=取得バッファ p[=r, (m==0)?{ &SO(p," << ") (r)?p=r+4, ?{ r=-1, >Z } &SO(p,"]") (r)?r.0-, ?{ r=-1, >Z } } (m==1)?{ &SO(p,"ル ") (r)?p=r+3, ?{ r=-1, >Z } &SO(p," */") (r)?r.0-, ?{ r=-1, >Z } } r=p, :Z (r) p], 22: ;--- タグファイル行を分析 --- ;-->r=取得バッファ p[=r, &SO(p," ") (r)?r.0-, ?{ r=-1, >Z } &SO(r+1,":") (r)?r.0-, ?{ r=-1, >Z } r=p, :Z (r) p], 23: ;--- カーソル行の(論理)行頭から 120 文字を r へ取得 --- ;-->r=取得バッファ ;<--r=-1:Err, p[=r, (mr==$80)?{#? &s }?#28 ;#28 は ViewMode では使えない (r)?{ r=-1, >Z } ;#? #28 --> r==-1:lbfが一杯などのエラー wa..19.2-, ; &Sc(p,wa..18,120) r=p, &Sc(p,wa..18,200) r=p, :Z (r) p], * P 01 "",7,3 "Start" "Filer" "Open" * = End of Tra_TAG.def =