=== Tra_TAG.def v16 ===
; V16k02 2018-10-04 konno
* M
;60 ^\ "TAG"
60 ^[F10] "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,
;-------------------------------------------------------------------------
#] #? (r)?. wa..19.2-, ;行を lfb に取り込む
&So(wa..18,":\") (r)??{ ;フルパスが書いてない
&Ss(pq..148+2) si=r,
di=pq..134+100, i-, i[, &> i],
(r!=-1)?{ r=si+1, >C } ;行頭からもLFNが取得出来ないときは
; r=si+1, >C ;} ;★LFNが取得出来なくても進む
dn[-, #60 dn], ;通常の #60
&m("0 ng %s",di) ;▼
>C ;★LFNが取得出来なくても進む
f"",(r)?>61 >B ;取得できなければ LZH 処理
}
:A si=r-1, di=pq..134+100, i3, ;フルパス部分を di へ取り出し
:C di[, &> di],
f=di, ;(r==-1)?{ #> #d >E }
r=si+i, ;-->r=lbf内のフルパス末尾adr
&09 ;-->pa=拡張行番号情報
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",pf) ;●
.
: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)$"(*<>?:| =;+,")
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],
01: ;--- ファイル存在チェック ---
;<-- r=0:Exists,
; e=255:最終判定,
(e<11)?e255, ;LFN でも使えない文字なら最終判定
di.i-,
&Sn(di) r--, (di.r=='\')?di.r=0,
ax$7143, bx-, dx=di,
:F &i($21) ;ファイル存在チェック
(ax==$7100)?{ ;LFN に対応してなければ最終判定
ax$4300, e255, >F
}
(r)
02: ;--- メニュー処理 ---
;--> pf
&m("%70s",pf)
!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
}
.
}
: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)",pa+1)
#O &?("%s ->%s",wa+146,pa+1) #m
&d
.
}
&m("ただいまジャンプ中(%lu行)",ax,dx)
#^ 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 =
=== Tra_TAG.def v16 ===
; V16k04 konno改
;2018-10-04 03 ディレクトリ&LFN不具合対応
;2018-12-04 04 バッファ溢れ不具合対策 コンソールのみ
* 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,
;-------------------------------------------------------------------------
#] #? #> #< &x(255) ;バッファ溢れ対策 行の長さ255以上?
(cd!=$d&&wn==0)?{&x(254)#m#e}#< ;コンソールなら改行挿入
#] #? (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("0 ng %s",di) ;▼
>C ;★LFNが取得出来なくても進む
; f"",(r)?>61 >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
}
.
}
: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 =