You are on page 1of 7

\ 0baseappname 0pggroup 0pglow 0pgmax ÿÿ TRA

NSFOR A baseappname:="TRANSFOR
";
pggroup:=50;
pglow:=1;
pgmax:=32;
// +----------------------------------+
// | powered by mViewer GX2 Prime 1.0 |
// | by Xavier (Critor) Andreani |
// | licence: GPLv2 |
// +----------------------------------+
// generated on TI-Planet :
// https://tiplanet.org/gxprime

pghigh:=pglow;

cleanNum2Str(num,ref)
BEGIN
LOCAL str:=STRING(num);
LOCAL i:=INSTRING(str,".");
IF i>0 THEN
str:=MID(str,1,i-1);
END;
i:=1+FLOOR(LOG(ref));
WHILE DIM(str)<i DO
str:="0"+str;
END;
RETURN str;
END;

range(mini,maxi)
BEGIN
I F m i n i `"m a x i T H E N
RETURN cleanNum2Str(mini,pgmax)+"_"+cleanNum2St
r(maxi,pgmax);
ELSE
RETURN cleanNum2Str(mini,pgmax);
END;
END;

OpenFile(pagenum)
begin
LOCAL posit;
LOCAL lastpagenum=0;
LOCAL pagetot=pgmax;
LOCAL sw:=320,sh:=240; // screen
LOCAL w,h;
LOCAL mx0,my0,mx1,my1,mx,my; // mouse coords
LOCAL is,ig,ms; // mouse mode
LOCAL x,y,d,ld;
LOCAL ss,sf,spu,spd;
LOCAL ssu,ssd,ssl,ssr;
LOCAL z,zp,zmin,zmax,zold,zw,zh,z0; // zoom
LOCAL tk;
LOCAL td;
LOCAL ts;
LOCAL tt;
LOCAL i,dsh,dsv,dh,wh;
// help grob coordinates
LOCAL strh3=16,strh2=14,strh1=12,yt=1;
LOCAL x0=100, x1=0;
LOCAL x5=sw-5-x0-1;
LOCAL x2=x1+(x5-x1)*5/9;
LOCAL x3=x1+(x2-x1)/4,x4=x2+(x5-x2)/3;
DIMGROB_P(G1,sw,sh); // offscreen grob
DIMGROB_P(G3,x5,3+strh3+strh2+5*strh1); // help grob
// render help grob
RECT_P(G3,x1,0,x5-1,strh3+strh2+5*strh1+2,0,#FFFFFF
h);
RECT_P(G3,x1+1,0,x5-2,strh3+strh2,0,#FFFFFFh);
TEXTOUT_P("mViewer GX2 1.0",G3,x1+3,0,3);yt:=strh3-s
trh2;TEXTOUT_P("(TI-Planet.org)",G3,x2,yt,2);yt:=strh3;
TEXTOUT_P("http://tiplanet.org/gxprime",G3,x1+3,yt,2,#
FFh);yt:=yt+strh2+2;
TEXTOUT_P("*/",G3,x1+2,yt,1);TEXTOUT_P("zoom in/out
",G3,x3,yt,1);TEXTOUT_P("Home",G3,x2,yt,1);TEXTOUT_P("
zoom 1:1",G3,x4,yt,1);yt:=yt+strh1;
TEXTOUT_P("+-",G3,x1+2,yt,1);TEXTOUT_P("next/prev p
age",G3,x3,yt,1);TEXTOUT_P("0",G3,x2,yt,1);TEXTOUT_P("z
oom fit",G3,x4,yt,1);yt:=yt+strh1;
TEXTOUT_P(CHAR(8853)+CHAR(8855),G3,x1+2,yt,1);TE
XTOUT_P("progressive scroll",G3,x3,yt,1);TEXTOUT_P(CHA
R(9742),G3,x2,yt,1);TEXTOUT_P("screen scroll",G3,x4,yt,1)
;yt:=yt+strh1;
TEXTOUT_P("Num",G3,x1+2,yt,1);TEXTOUT_P("go to #pa
ge",G3,x3,yt,1);TEXTOUT_P("5",G3,x2,yt,1);TEXTOUT_P("ce
nter",G3,x4,yt,1);yt:=yt+strh1;
TEXTOUT_P("Help",G3,x1+2,yt,1);TEXTOUT_P("hide box
",G3,x3,yt,1);TEXTOUT_P("Esc",G3,x2,yt,1);TEXTOUT_P("qu
it",G3,x4,yt,1);yt:=yt+strh1;
REPEAT
IF pagenum<0 THEN pagenum:=1; END;
IF pagenum>pgmax THEN pagenum:=pgmax; END;
I F p a g e n u m `"l a s t p a g e n u m T H E N
G2:=AFiles(AFiles(pagenum-pglow+1));
w:=GROBW_P(G2);h:=GROBH_P(G2);
mx0:=0;my0:=0;mx1:=0;my1:=0;mx:=0;my:=0; // mo
use coords
is:=0;ig:=0;ms:=0; // mouse mode
x:=0;y:=0;d:=0;ld:=0;
ss:=1;sf:=0;spu:=1.01;spd:=1.1;
ssu:=1;ssd:=1;ssl:=1;ssr:=1;
z:=1;zp:=1.01;zmin:=MIN(MIN(sw/w,sh/h),1);zmax:
=4;zold:=1;zw:=w;zh:=h;z0:=0; // zoom
tk:={7,2,8,12};
td:={0,0,0,0};
ts:={1,1,1,1};
tt:={0,0,0,0};
dsh:=0;dsv:=0;dh:=0;wh=0;
lastpagenum:=pagenum;
END;
tt:={0,0,0,0};
dsh:=0;dsv:=0;
// touch events
mx:=MOUSE(0);my:=MOUSE(1);ms:=MOUSE(4);
IF ms=2 THEN // drag
IF NOT ig THEN ig:=1;mx0:=MOUSE(2);my0:=MOU
SE(3); END;
IF mx>mx0 THEN tt(1):=tt(1)+(mx-mx0)/z; ELSE tt(
3):=tt(3)+(mx0-mx)/z; END;
IF my>my0 THEN tt(2):=tt(2)+(my-my0)/z; ELSE tt(
4):=tt(4)+(my0-my)/z; END;
mx0:=mx;my0:=my;dsh:=1;dsv:=1;
ELSE
ig:=0;
END;
IF ms=3 THEN // stretch
IF is THEN
z:=z0*(((mx-mx1)^2+(my-my1)^2)/((mx1-mx0)^2
+(my1-my0)^2))^(1/2);
dsh:=1;dsv:=1;
ELSE
is:=1; mx1:=mx0; my1:=my0; mx0:=mx; my0:=m
y; z0:=z;
END;
ELSE
is:=0;
END;
// one time key events
IF ISKEYDOWN(11) OR ISKEYDOWN(3) OR ISKEYDOW
N(45) OR ISKEYDOWN(50) OR ISKEYDOWN(32) OR ISKEYDO
WN(37) OR ISKEYDOWN(42) OR ISKEYDOWN(33) OR ISKEY
DOWN(43) OR ISKEYDOWN(34) OR ISKEYDOWN(39) OR ISK
EYDOWN(44) THEN
LOCAL lastpage:=pagenum;
IF ISKEYDOWN(3) AND wh THEN dh:=NOT dh; END
; // help
// navigate pages
IF ISKEYDOWN(11) and wh THEN
LOCAL nextpage:=pagenum;
INPUT(nextpage,"Go to page ...","#","(1-"+clea
nNum2Str(pgmax,pgmax)+")",pagenum);
IF nextpage<1 THEN nextpage:=1; END;
IF nextpage>pgmax THEN nextpage:=pgmax; E
ND;
pagenum:=nextpage;
WHILE ISKEYDOWN(4) DO END;
END;
IF pagenum>lastpage OR (ISKEYDOWN(50) and wh
and pagenum<pgmax) THEN
IF ISKEYDOWN(50) THEN pagenum:=pagenum+
1; END;
IF pagenum>pghigh THEN
WHILE pghigh+pggroup<pagenum DO pghigh
:=pghigh+pggroup; END;
STARTAPP(baseappname+range(pghigh+1,mi
n(pgmax,pghigh+pggroup)));
RETURN;
END;
END;
IF pagenum<lastpage OR (ISKEYDOWN(45) and wh
and pagenum>1) THEN
IF ISKEYDOWN(45) THEN pagenum:=pagenum-1
; END;
IF pagenum<pglow THEN
WHILE pglow-pggroup>pagenum DO pglow:=
pglow-pggroup; END;
STARTAPP(baseappname+range(pglow-pggr
oup,pglow-1));
RETURN;
END;
END;
// screen scroll
IF ISKEYDOWN(32) OR ISKEYDOWN(37) OR ISKEY
DOWN(42) THEN tt(1):=sw/z*wh; dsh:=1; END;
IF ISKEYDOWN(34) OR ISKEYDOWN(39) OR ISKEY
DOWN(44) THEN tt(3):=sw/z*wh; dsh:=1; END;
IF ISKEYDOWN(32) OR ISKEYDOWN(33) OR ISKEY
DOWN(34) THEN tt(2):=sh/z*wh; dsv:=1; END;
IF ISKEYDOWN(42) OR ISKEYDOWN(43) OR ISKEY
DOWN(44) THEN tt(4):=sh/z*wh; dsv:=1; END;
IF wh THEN wh:=0; END;
ELSE
wh:=1;
END;
// progressive/continuous key events
// zoom keys
IF ISKEYDOWN(38) THEN
x:=(w-sw/z)/2;
y:=(h-sh/z)/2;
END;
IF ISKEYDOWN(40) THEN z:=z*zp; END;
IF ISKEYDOWN(35) THEN z:=z/zp; END;
IF ISKEYDOWN(5) THEN z:=1; END;
IF ISKEYDOWN(47) THEN z:=zmin; END;
IF z>zmax THEN z:=zmax; END;
IF z<zmin THEN z:=zmin; END;
IF z<1 and zold>1 or z>1 and zold<1 THEN z:=1; END
;
IF z<zold or z>zold THEN zw:=w*z; zh:=h*z; x:=x+sw/
2/zold-sw/2/z; y:=y+sh/2/zold-sh/2/z; zold:=z; dsh:=1; dsv:=
1; END;
// scrolling
FOR i FROM 1 TO 4 DO
IF ISKEYDOWN(tk(i)) THEN
IF i MOD 2=1 THEN dsh:=1; ELSE dsv:=1; END;
td(i):=1;
ts(i):=MAX(ts(i)*spu,1);
tt(i):=tt(i)+MAX(ts(i)/z,1);
ELSE
ts(i):=MAX(ts(i)/spd,1);
IF ts(i)>1 THEN
IF i MOD 2=1 THEN dsh:=1; ELSE dsv:=1; E
ND;
END;
END;
END;
x:=MAX(MIN(x-tt(1)+tt(3),w-sw/z),0); y:=MAX(MIN(y-t
t(2)+tt(4),h-sh/z),0); // repos image correctly
BLIT_P(G1,-FP(x)*z,-FP(y)*z,sw+(CEILING(x+sw/z)-(x
+sw/z))*z,sh+(CEILING(y+sh/z)-(y+sh/z))*z,G2,FLOOR(x),FL
OOR(y),CEILING(x+sw/z),CEILING(y+sh/z)); // disp img
// clean borders for images smaller than screen
IF zw<sw THEN RECT_P(G1,zw+1,0,sw-1,sh-1,#FFFFF
Fh,#FFFFFFh); END;
IF zw>sw and dsh THEN
RECT_P(G1,0,sh-1,sw-5,sh-5,0,#FFFFFFh);
RECT_P(G1,2+(sw-9)*x/w,sh-3,2+(sw-9)*x/w+(sw-9
)*sw/zw,sh-3,0,0);
END;
IF zh<sh THEN RECT_P(G1,0,zh+1,sw-1,sh-1,#FFFFF
Fh,#FFFFFFh); END;
IF zh>sh and dsv THEN
RECT_P(G1,sw-1,0,sw-5,sh-5,0,#FFFFFFh);
RECT_P(G1,sw-3,2+(sh-9)*y/h,sw-3,2+(sh-9)*y/h+(
sh-9)*sh/h/z,0,0);
END;
IF(dh) THEN BLIT_P(G1,x0,1,G3); END;
BLIT_P(G0,0,0,sw,sh,G1,0,0,sw,sh);
UNTIL ISKEYDOWN(4);
END;

//----------------------------
// START FUNCTION
//----------------------------

View "Help",START()
begin
pghigh:=pglow+SIZE(AFiles())-2;
OpenFile(pglow);
startview(6,1);
end;

Plot() begin
OpenFile(pglow);
end;

PlotSetup() begin
Plot();
end;

You might also like