=============================== EJUMP.DEF(v0.8) =============================== 各種言語の特徴的な行(例:関数先頭)を一覧表示し、ジャンプします。 通常は編集中のファイルの拡張子を見て、対象言語を判断しています。 SHIFT 実行することにより対象言語を選択することが出来ます。 実行には VZ1.6 と VWX が必要です。 [Usage] 1. A>vz +[\path\]ejupm.def *.c ; マクロ組み込み 2. [CTRL]+'\' ; C/C++ 関数一覧作成 1995/05/14 T.Kumagai =============================================================================== ;=== 検索状況 === ;拡張子 --- 言語 --- ---- ↓この行を検索する --- .C C/C++ "\x ^[a-zA-Z:][a-zA-Z_0-9\s\t:\*&]*(" .P PASCAL "\x ^[\t\s]*procedure|^[\t\s]*function|^program" .ASM MASM "\x ^[\s\t]*[a-zA-Z_0-9@]+:|[Pp][Rr][Oo][Cc]" .DEF VZ MACRO "\x ^[:*0-9]" .BAS MPC 816 "\n\*" .DOC VZ DOC "\x ^[\s\t ]*[■◇●§《【]|^[0-9]*\." * Macro 80 ^\ "関数ジャンプ" ?. &> (r)? . ; 前処理 m,w,e,h,v,d,o,g,n 設定、モード設定 &01 ; 拡張子チェック -> d.0 &s (ks&1)? { ; SHIFT 実行なら検索文字列設定 &10 a=r, ; r = 何番目の検索文字列を使うか? (a<0)? >Q d.0=a, } &50 ; d.0 の内容で検索&ジャンプ :Q &90 ; 後処理(モード設定を戻す) &d . ;------------------------------------------------------------------------------ ;前処理 ;[設定] ; m: 関数検索上限値 ; w: 画面表示最大桁数 ; e: 編集中ファイル番号 ; h: 編集中行番号 ; v: 分割先のファイル番号(なければ -1) ; d: 記憶データ ; o,g: 検索データリスト ; n: 検索データリスト数 ; ;[OUT] 0: 正常終了 ; 1: VWX がない ; 2: オープンしているファイルが多すぎる ;------------------------------------------------------------------------------ 00: (vw==0)? {&m( "VWX が必要です" )(1).} (wc>=tc)? {&m( "オープンしているファイル数が多すぎます" )(2).} d=4+$,>>"$(0)$[4]" ; d[0] = 選択検索文字列番号 00: m=97, ; m = 関数検索上限値 w=wx*3/4, ; w = 画面表示最大桁数 e=wn, ; e = 編集中ファイル番号 h=ln, ; h = 編集中行番号 (wt) ?{#W v=wn, #W} ?{v=-1,} ; v = 分割先のファイル番号(なければ -1) d.1=mi, mi-, ; d[1] = 挿入モード d.2=mp, mp=2, ; d[2] = 検索モード d.3=Ei, Ei-, ; d[3] = オートインデント off o=4+$,>>"$[24]" ; o = {"title0", "title1", ・・・} 00: g=4+$,>>"$[24]" ; g = {"string0","string1",・・・} 00: n-, ;=============================================== z..n=".C", ; .C と .CPP は一致 .H には一致せず(T^T) o..n="C/C++", g..n="\x ^[a-zA-Z:][a-zA-Z_0-9\s\t:\*&]*(", n++, ;----------------------------------------------- z..n=".P", ; .P .PAS o..n="PASCAL", g..n="\x ^[\t\s]*procedure|^[\t\s]*function|^program", n++, ;----------------------------------------------- z..n=".ASM", o..n="MASM", g..n="\x ^[\s\t]*[a-zA-Z_0-9@]+:|[Pp][Rr][Oo][Cc]", n++, ;----------------------------------------------- z..n=".DEF", o..n="VZ MACRO", g..n="\x ^[:*0-9]", n++, ;----------------------------------------------- z..n=".BAS", o..n="MPC 816", g..n="\n\*", n++, ;----------------------------------------------- z..n=".DOC", o..n="VZ DOC", g..n="\x ^[\s\t ]*[■◇●§《【]|^[0-9]*\.", n++, ;=============================================== (0). ; 上限のチェックは手抜き ;------------------------------------------------------------------------------ 01: ; 拡張子判別 --> d.0 i-, :A &SO(nm,z..i) (r!=0)? {d.0=i, .} ; 一致するのが見つかった i++, (iA . ;------------------------------------------------------------------------------ 90: ; 設定復元 mi=d.1, ; d[1] = 挿入モード mp=d.2, ; d[2] = 検索モード Ei=d.3, ; d[3] = オートインデント off . ;------------------------------------------------------------------------------ 10: ; 検索文字列を選択させる &11 i-,l-,k=8, :A p=o..i, q=g..i, ; "・・・"\n"・・・"\n ...のリストを作成する #n &?("%s",q) j=0, &20 #< #d &?("%-14s $$At",p) #> #d i++, (iA p="【対象言語】───《検索文字列》", u=d.0, w[=38, &30 ; 上記リストの内容でメニューを作成し実行 w], i=r, #C (i). ;------------------------------------------------------------------------------ 11: ; 作業ファイルオープン(作業ファイル番号 -> t) sn[-, #N "fjump.tmp" #m mr=-1, sn], we=250, t=wn, . ;------------------------------------------------------------------------------ 20: ; カーソル行を "・・・" の形式にする。終了時カーソルは行末 ; w=幅、k=タブカラム数、j=補正値 #> "@" ; 番兵セット #< '"' j++, :A #s &21 #c (vr!=1 || lx>=w+j-2)? >B c=cd, (c == $09)? {#g (k-(lx-j)%k){" "} >A} (c == '"')? {"$$" j++, #d>A} (c == '$')? {"$$$$$$" j+=3, #d>A} &m("変な文字を検索してしまいました")&d&t :B #> #h ; 番兵消す #< &x(w+j-2) #l '"' . ;------------------------------------------------------------------------------ 21: ; "・・・" エスケープ文字検索セット ps="\x [\t$"$]|@$",. ; どうもうまく行かない・・・ ;------------------------------------------------------------------------------ 30: ; "・・・"\n"・・・"\n ...のリストよりメニューを作成実行(戻り値選択番号) ; e=編集中だったファイル p=タイトル w=幅 n=リスト数 u=何番目 "*" #^#< "== tempmenu.def ==" #m "*M" #m "1 $"TEMPMENU$"" #m " !01 (r) ." #m "*P" #m &?("1 $"%s$",%d,%d,0,%d",p,w,n,u) #m P(0) &#T(e) ; 編集ファイル表示復元 (v != -1) {#W &#T(v) #W} ; 分割先ファイル表示復元 mp[,mp=d.2, ; 検索モード復元 (fb)? &m("上限値 %d を越えました",m) ? &m("%d",n) &d &* i=r, &s &Zd("TEMPMENU") ; マクロを実行後メモリから削除 mp], &#T(t) (i). ;------------------------------------------------------------------------------ ; d.0 の内容でオープンされている全てのファイルを検索しリスト作成 ; n: リスト数 ; f: 現在処理中のファイル ; u: 何番目の項目(未定-1) 50: &11 n-,f-,u=-1, :A f++, (f>wc)? >B (f==t)? >A ; リスト用のファイル? &60 ; 1ファイル分リスト作成(f) (r)? >B ?>A :B ;&d&t &#T(t) a=d.0, p=o..a, (u==-1)? {u=n-1,} &30 i=r, ; 選択 (i>=0)? { ;&d&t #e &#c(i+1) #> #a &n b=r, ; a:ファイル番号 b:行 #a &n a=r, #C &#T(a) #< &y(0) &#J(b) ; &y(wy/3) }?{ &#T(t) #C &#T(e) } . ;------------------------------------------------------------------------------ ; d.0 の内容でファイル(f)を検索しリスト作成(t) 60: &#T(f) k=ht, ; タブカラム数記憶 a=d.0, q=g..a, ; 検索文字列 -> q mr[, x=lx, y=ly, l=ln, #^#< #n #P #< "//// " #> " ////" ; ファイル名取得 fa-, j=0, &61 #y fb-, >A :A ;&d&t ps=q, #c (r<0)? >B #> (n>=m)? { ; 関数上限値チェック &#T(t) "$"$at--- MORE ---$",fc" #m ; MORE は選択させない(fcはダミー) n++, &#T(f) fb+, >B }?{ &m("%d",n); fa+, j=0, &61 } >A :B &x(x) &y(y) &#J(l) mr], (fb) . ;------------------------------------------------------------------------------ 61: ; テンポラリファイルにリスト登録 fa: - ファイル + 普通 a=wn, b=ln, (u==-1 && (a>e || a==e && b>h))? u=n-1, n++, #k &#T(t) #i (fa)? {"." j++,} &20 ";" &?("%d %d",a,b) #<#d (fa)?? "$5" #>#d &#T(f) . *