;GifView.as
;ホームページ素材閲覧ツール
; 指定されたフォルダ以下のgifファイルをフォルダごとにまとめてウェブブラウザに
; 表示させます。
; 「次」ボタンをクリックすると、次のフォルダの表示に移ります。
; ウィンドウが消えたら終わりです。
; 起動方法は3通りあります。
; ・ダブルクリックで起動すると、フォルダ選択ダイアログが表示されます。
; ・exeファイルまたはそのショートカットにドラッグ&ドロップ
; ドラッグ&ドロップするのは、フォルダでもgifファイルでもかまいません。
; ・関連づけ(gifファイルまたはフォルダまたは両方に)
; 初めて実行したとき、テキスト形式のGifview.iniが作成されます。
; ブラウザのウィンドウ幅・文字の横幅・本体のウィンドウ位置が指定できます。
#include "Exforce.as"
#define MAX_BUF 96000
#define MAX_PART_BUF 2000 ;htmlのtable 1行分のバッファ(
から
まで)
#define MAX_PATH 261
#define MAX_CMDLINE 521
#define FILE_NAME "GifView"
#define MAX_NEST 15 ;repeatネスト最大値
#define NUM_INI 4 ;iniファイルデータ数
sdim keyword,64,NUM_INI
keyword="BrowserWidth","CharacterWidth","WindowX","WindowY"
sdim coment,80,NUM_INI
coment="ファイル名1文字の横幅のドット数","ブラウザの横幅のドット数"
coment.2="ウィンドウ位置X座標","ウィンドウ位置Y座標"
dim aflg,NUM_INI
dim ini,NUM_INI
dup wid,ini.0: dup chrwid,ini.1: dup winpx,ini.2: dup winpy,ini.3
sdim abuf,32000,MAX_NEST
sdim folder,MAX_PATH,MAX_NEST
sdim fronta,64,2: fronta="非最前面","最前面"
dim idx,MAX_NEST
dim amax,MAX_NEST
sdim buf1,MAX_PART_BUF+1
sdim buf2,MAX_PART_BUF+1
sdim instdir,MAX_PATH
sdim fn,MAX_PATH
sdim arg,MAX_CMDLINE
sdim tdir,MAX_PATH+8
;sdim tbuf,MAX_BUF+1 ;iniファイル読み込みの後で定義している
sdim s,MAX_PATH
sdim t,MAX_PATH*3
sdim u,MAX_PATH
title "GifView"
exist exedir+"\\GifView.exe"
if strsize<0 { instdir=curdir } else { instdir=exedir }
wid=620: chrwid=9: winpx=0: winpy=0
;Gifview.iniの読み込み
s=instdir+"\\GifView.ini"
gosub *l_readIni
;フォルダ
nest=0
if cmdline!="" {
arg=cmdline
extract s,arg,2 ;拡張子→s
extract t,s,7 ;小文字にする→t
if t==".gif": extract arg,arg,5 ;親フォルダ→arg
}
else {
;引数がないとき
seldir "gifファイルのあるフォルダを選択してください"
if stat: dialog "キャンセルまたはエラー": end
arg=refstr
}
strlen l,arg: if l>(MAX_PATH-1): dialog "引数が長すぎます\n"+arg: end
;ウィンドウ
screen 0,130,64,,winpx,winpy: gsel 0,1
objsize 130,32: button "次",*l_next: enable 0,0
button "",*l_noFront: objprm 1,fronta.0: enable 1,0
onexit *l_exit
u="": nest=0: dispflg=1: folder.nest=arg: gosub *l_disp
gosub *l_dirRecursive
;終了時処理
*l_exit
ginfo 2: winpx=prmx: winpy=prmy
fn=instdir+"\\GifView.ini"
gosub *l_writeIni
end
*l_dirRecursive
s=folder.nest+"\\*.*": dirlist abuf.nest,s,5
strlen l,abuf.nest: if l>MAX_BUF: dialog "MAX_BUFが足りません l="+l: end
notesel abuf.nest: notedel 0: notedel 0 ;「.」「..」の削除
notemax amax.nest
;dialog "dir max="+amax.nest+" s="+s,3: if stat==7: end
if amax.nest<=0: return
;folder.nestが空でないとき
idx.nest=0
*l_loop
noteget s,idx.nest: s=folder.nest+"\\"+s
nest++
if nest>=MAX_NEST { dialog "フォルダが深すぎます": end }
folder.nest=s: gosub *l_disp
gosub *l_dirRecursive ;再帰呼び出し!!
nest--: notesel abuf.nest
idx.nest++: if idx.nest\n\n"
tbuf+="\n"+t+"
\n"
strlen lb,tbuf
t=dir+"\\*.gif": dirlist buf,t
strlen l,buf: if l>MAX_BUF: dialog "MAX_BUFが足りません l="+l: end
notesel buf: notemax max
;dialog "gif max="+max+" t="+t,3: if stat==7: end
if max>0 {
chdir dir: tw=wid: firstflg=1
repeat max
noteget s,cnt: strlen l3,s: pw=l3*chrwid
u=dir+"\\"+s
exist u: if strsize<0: dialog "not found "+u: end
bload u,t,10: wpeek c,t,6: if c>pw: pw=c
if tw+pw+2>wid {
if firstflg { firstflg=0 }
else { gosub *l_addBuf }
tw=2
buf1="\n": strlen l1,buf1
buf2="
\n": strlen l2,buf2
}
tw+=pw+2
t=""+s+" | \n"
strlen l,t: l1+=l
if l1>MAX_PART_BUF { dialog "MAX_PART_BUFが足りません l1="+l1: end }
buf1+=t
t=" | \n"
strlen l,t: l2+=l
if l2>MAX_PART_BUF { dialog "MAX_PART_BUFが足りません l2="+l2: end }
buf2+=t
loop
gosub *l_addBuf
tbuf+="