Created
October 10, 2010 01:12
-
-
Save anonymous/618808 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#packopt name "bookreader6" | |
#packopt type 1 | |
#include "hspext.as" | |
#module | |
#defcfunc cell int page_cur ,int screenID | |
gsel screenID ; カレントバッファが移動してしまうので注意! | |
// cls 4 | |
noteget file ,page_cur ; ファイル名を1行読み出し。 | |
celload file ,screenID,0 ; バッファへ読み込み。 | |
if (stat != screenID) { | |
dialog file +" が ID"+screenID +" に読み込まれませんでした。",0 | |
} | |
return stat | |
#defcfunc gz double x ,double y ,int screenID | |
; 画面縦横比の保持。 | |
xr = double(ginfo(20)) / double(x) ; MAINSIZEX を使えない。 ゼロになる。 | |
yr = double(ginfo(21)) / double(y) ; MAINSIZEY を以下同上。 | |
if (xr < yr) { ; 倍率の低い方を採用。 | |
rate = xr | |
} else { | |
rate = yr | |
} | |
// dialog "front" | |
gzoom (x*rate),(y*rate) ,screenID ,0,0,x,y ,1 ; screenIDからカレントへ書き込み。 | |
// dialog "rear" | |
return 0 | |
#defcfunc cnvpath var str0 | |
string = strtrim( str0 ,0 ,'\"') | |
return string | |
#global | |
#const OK (1) | |
#const NON (0) | |
#const MAIN (0) | |
#const WORK (1) | |
#const SINGLE (2) | |
#const TWINS (1) | |
#const LEFTP (1) | |
#const RIGHTP (2) | |
#const LRP (LEFTP + RIGHTP) | |
way=1 ; 読み取り方向(1と-1で表現)。 | |
; デスクトップXYサイズを読む。 | |
MAINSIZEX = ginfo(20) | |
MAINSIZEY = ginfo(21) | |
randomize | |
bgscr MAIN ,MAINSIZEX,MAINSIZEY ,0,0,0 ,MAINSIZEX,MAINSIZEY | |
buffer WORK ,MAINSIZEX*6,MAINSIZEY*6 ,0 | |
sysfont | |
gmode 0 | |
gsel MAIN | |
sdim current,4096 | |
color 0,0,0 : mes dir_cur | |
mes ">>> " + dir_cmdline | |
current = dir_cmdline | |
current = cnvpath( current) | |
if (current == "") { | |
selfolder current,"Select the directory." | |
if (stat !=0) { | |
dialog "ディレクトリを選べませんでした。",1,"dir-select" | |
end | |
} | |
} else { | |
dialog current ,0 ,"NO LIFE ,NO DIR." | |
} | |
mes ">> " + current | |
chdir current | |
sdim files,8192 | |
dirlist files,"*.*" ; カレントディレクトリの取得 | |
notesel files ; 変数files をメモリノート指定。 | |
MAXPAGE = noteinfo(0) ; 行数取得。 | |
page_cur=0 ; メモリノート位置 | |
sdim file,1024 | |
; 読めないファイルは末尾から削除。 | |
for i,MAXPAGE-1,-1 ,-1 | |
// wait 1 | |
noteget file ,i ; ファイル名を1行読み出し。 | |
; 拡張子取り出し。 | |
exp = getpath(file,18) | |
if (exp != ".jpg") & (exp != ".gif") & (exp != ".bmp") & (exp != ".ico") { | |
mes file +" をリストから削除します。 " | |
notedel i | |
} | |
next | |
MAXPAGE = notemax ; noteinfo(0) と同じ効果。 | |
loadedflag = NON | |
pageflag = NON | |
repeat | |
pos 0,0 | |
// redraw 0 | |
color rnd(128),rnd(128),rnd(128):boxf ; 背景ランダム塗り。 | |
if (loadedflag == NON) { | |
*@ | |
i=cell( page_cur ,WORK) ; 読み込み部分の関数(defcfunc)化。 左辺がないとエラーになる。 | |
x = ginfo(12) ; バッファのXYサイズを読む。 | |
y = ginfo(13) | |
if (x >1007712) { | |
dialog "x の大きさがおかしい。 x:"+x | |
goto *@back | |
} | |
} | |
layout = 0 | |
if (x<=y) { ; 縦長画像だったら。 | |
;読み方向で読み順を変える。 | |
if (way==1) { ; 順読み。 | |
; ページ数が割り切れない(アライメント不良)場合はスキップ。 | |
if (page_cur\2 == 1) : goto *@forward | |
gsel MAIN : pos (MAINSIZEX/2),0 : i=gz( x*2 ,y ,WORK) ; R | |
layout += RIGHTP ; ページ配置したらチェック。 | |
color 0x4f,0x4f,0xff : mes " OK-right no:"+page_cur+" x:"+x+" y:"+y | |
; L | |
page_cur += way | |
if (MAXPAGE <= page_cur) { ; EOFが | |
gsel MAIN : pos 0,0 | |
color 0xff,0x0f,0x0f : mes "EOF-over:"+page_cur | |
page_cur -= way | |
loadedflag = NON | |
pageflag = SINGLE | |
goto *inkeyS | |
} | |
i=cell( page_cur ,WORK) ; 読み込み部分の関数(defcfunc)化。 左辺がないとエラーになる。 | |
x = ginfo(12) : y = ginfo(13) ; バッファのXYサイズを読む。 | |
*@ | |
if (x<=y) { | |
gsel MAIN : pos 0,0 | |
i=gz( x*2 ,y ,WORK) ; ここでバグる??? | |
layout += LEFTP | |
loadedflag=NON | |
if (layout == LRP) { | |
pageflag = TWINS | |
} else { | |
pageflag = SINGLE | |
} | |
color 0xaf,0xaf,0xff : mes " OK-left no:"+page_cur+" x:"+x+" y:"+y | |
} else { | |
gsel MAIN : pos 0,0 | |
page_cur -= way | |
loadedflag=NON | |
pageflag = SINGLE | |
color 0xff,0x0f,0x0f : mes "\nBAD-left"+page_cur | |
} | |
} else { ; 逆読み。 | |
; ページ数が割り切れる(アライメント不良)場合はスキップ。 | |
if (page_cur\2 == 0) : goto *@forward | |
gsel MAIN : pos 0,0 : i=gz( x*2 ,y ,WORK) ; L | |
layout += LEFTP ; ページ配置したらチェック。 | |
color 0x2f,0x2f,0xff : mes " OK-left no:"+page_cur+" x:"+x+" y:"+y | |
; R | |
page_cur += way | |
i=cell( page_cur ,WORK) ; 読み込み部分の関数(defcfunc)化。 左辺がないとエラーになる。 | |
x = ginfo(12) : y = ginfo(13) ; バッファのXYサイズを読む。 | |
*@ | |
if (x<=y) { | |
gsel MAIN : pos (MAINSIZEX/2),0 : i=gz( x*2 ,y ,WORK) | |
layout += RIGHTP | |
loadedflag=NON | |
if (layout == LRP) { | |
pageflag = TWINS | |
} else { | |
pageflag = SINGLE | |
} | |
color 0xaf,0xaf,0xff : mes "OK-right no:"+page_cur+" x:"+x+" y:"+y | |
} else { | |
gsel MAIN : pos (MAINSIZEX/2),0 | |
page_cur -= way | |
loadedflag=NON | |
pageflag = SINGLE | |
color 0xff,0x0f,0x0f : mes "\nBAD-right:"+page_cur+" x:"+x+" y:"+y | |
} | |
} | |
} else { ; 横長画像だったら。 | |
; メイン画面切り替え。 | |
gsel MAIN : pos 0,0 : i = gz( x ,y ,WORK) ; この3命令で1セット。 | |
color 0x0f,0x0f,0xff : mes " single no:"+page_cur+" x:"+x+" y:"+y | |
loadedflag = NON | |
pageflag = SINGLE | |
} | |
// redraw 1 | |
*inkeyS | |
wait 5 | |
getkey key_for,37 ; 左カーソル入力チェック。 | |
getkey key_back,39 ; 右カーソル | |
getkey key_top,36 ; home キー | |
getkey key_last,35 ; end キー | |
getkey key_shift,16 ; SHIFTキー | |
getkey key_ctrl,17 ; Controlキー | |
getkey key_esc,27 ; ESCキー | |
step=1 | |
if (key_shift) { | |
step=10 | |
loadedflag = NON | |
} | |
if (key_ctrl) { | |
step=5 | |
loadedflag = NON | |
} | |
if (key_shift && key_ctrl) { | |
step=20 | |
loadedflag = NON | |
} | |
if (key_for && (page_cur < (MAXPAGE-step) )) { | |
if (way == 1) : page_cur+=step | |
if (way == -1) { | |
page_cur+=(step+0) | |
way=1 | |
if (pageflag == TWINS) : page_cur +=1 | |
} | |
} | |
if (key_back && (page_cur > (step-1) )) { | |
if (way == -1) :page_cur-=step | |
if (way == 1) { | |
page_cur-=(step+0) | |
way=-1 | |
if (pageflag == TWINS) : page_cur -=1 | |
} | |
} | |
if (key_top) { | |
page_cur=0 | |
way=1 | |
loadedflag = NON | |
} | |
if (key_last) { | |
page_cur = MAXPAGE-1 | |
way=-1 | |
loadedflag = NON | |
} | |
if (key_esc) : break | |
if ( (key_for | key_back | key_top | key_last) == 0 ) : goto *inkeyS | |
loop | |
mes "ende" | |
end | |
; | |
; | |
; | |
; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment