Skip to content

Instantly share code, notes, and snippets.

Created October 10, 2010 01:12
Show Gist options
  • Save anonymous/618808 to your computer and use it in GitHub Desktop.
Save anonymous/618808 to your computer and use it in GitHub Desktop.
#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