======== flback.def v0.01 (C) Jan. 2000 by くらと ======== * M 80 "filer back & forth" (s-3)?. p[, &00 r+, &01 (r)??. bx=ax, &10 ; add path ax=$4200, cx=dx-, &i($21) ; move ptr at head &25 (r || p.0=='*')? &26 ; clear mark ax=$3E00, &i($21) ; close p], 81 @[<--] "back" (s-3)?. p[, &00 r-, &01 (r)??. bx=ax, &10 ; add path :A ax=$4200, cx=dx-, &i($21) ; move ptr at head &25 (r)??{ ; find mark '*' (p.0-'*')?? >Z ; case of 1st path marked &Sn(p) cx=dx=$ffff, dx-=r+2, ax=$4201, &i($21) dx="*", cx=1, ax=$4000, &i($21) ; mark last path >A } &26 ; clear mark &Sn(p) cx=dx=$ffff, dx-=r+2, ax=$4201, &i($21) &30 (r)? >Z ; get path before marked path &83 &10 ; add path :Z ax=$3E00, &i($21) ; close p], 82 @[-->] "forth" (s-3)?. p[, &00 r-, &01 (r)??. bx=ax, &25 (r==0 && p.0-'*')? >Z ; find mark '*' &26 ; clear mark &30 &30 (r)? >Z ; get next path of marked path &83 :Z ax=$3E00, &i($21) ; close p], 83: &Sn(p) cx=dx=$ffff, dx-=r+1, ax=$4201, &i($21) dx="*", cx=1, ax=$4000, &i($21) ; mark &e("#]") #] &s #P &?("%s",p+1) &d #m ; <<< path buffer >>> 0: p=3+$,. "$[64]" ; <<< open "flback[12].$$$" >>> ; return 0 if error 1: r[, &Sc(p,pq) &Sy(p) &Sp(bx,"flback%d.$$$$$$",fl.25+1) dx=p, &r (0] && r<32767/32)? >A ; if r, create new file sometimes ax=$3D02, &i($21) ; if not, read & write open :A (r)?{ ax=$3C00, cx=2, &i($21) (r)? } ; create ; <<< add path >>> ; return 0 if added 10: ; 現在のパスと最後に記録されたパスが同じでなければ追加 &20 &Sx(p+1,fl+34) (r)?{ &Sc(p," ") &Sa(p,fl+34) &Sa(p,"$(0D,0A)") dx=p, cx=r-dx, ax=$4000, &i($21) ; write (0) } ; <<< get path recorded last >>> 20: &30 (r)?. ; no path recorded :A ((p.0)[) &30 (r)?? { 0], >A } p.0=0], ; <<< find mark '*' >>> ; return 0 if not found or 1st path marked 25: p.0-, cx=1, dx=p, &31 (r)?. ; no path recorded (p.0-'*')?? { ?. } ; 1st path marked, return 0 :A &30 (r)?. ; move pointer to next line dx=p, &31 (r)?. (p.0-'*')? >A ; marked line? ; <<< clear mark '*' >>> 26: cx=dx=$ffff, ax=$4201, &i($21) dx=" ", cx=1, ax=$4000, &i($21) ; clear current '*' cx=dx=$ffff, ax=$4201, &i($21) (1) ; <<< get path >>> ; return 1 if could not get 30: dx=p, cx=1, :A &> (r)?? { ; read (dx.0-$0d)? { dx++, >A } &> (r)?? { (dx.0-) . } ; read $0A & success } (1) ; error 31: ax=$3F00, &i($21) (r | ax!) ; read 1 byte * ======== end of flback.def ======== << バージョン履歴 >> v0.01 Jan. 8 '00 とりあえず一通り動作版 "flback.$$$" の掃除は &r でごまかし