aboutsummaryrefslogtreecommitdiff
path: root/engines/mortevielle/alert.h
diff options
context:
space:
mode:
authorEugene Sandulenko2011-12-23 19:02:50 +0000
committerStrangerke2012-04-06 08:18:12 +0200
commit816e53c1f87365cb351fe3dbdf4a8636954d1773 (patch)
tree7e6cdc9ebb3a5e83d461695651677f21997a4ec1 /engines/mortevielle/alert.h
parent8c57c71e3a81edf03905b549c70599ab5247f969 (diff)
downloadscummvm-rg350-816e53c1f87365cb351fe3dbdf4a8636954d1773.tar.gz
scummvm-rg350-816e53c1f87365cb351fe3dbdf4a8636954d1773.tar.bz2
scummvm-rg350-816e53c1f87365cb351fe3dbdf4a8636954d1773.zip
MORTEVIELLE: Initial ptoc output
Diffstat (limited to 'engines/mortevielle/alert.h')
-rw-r--r--engines/mortevielle/alert.h214
1 files changed, 214 insertions, 0 deletions
diff --git a/engines/mortevielle/alert.h b/engines/mortevielle/alert.h
new file mode 100644
index 0000000000..c3a45fe529
--- /dev/null
+++ b/engines/mortevielle/alert.h
@@ -0,0 +1,214 @@
+/* overlay */ integer do_alert(str255 str_, integer n);
+
+
+const integer nligne = 7;
+const matrix<1,2,1,3,integer> coord
+ = {{ {{150, 72, 103}},
+ {{143, 107, 183}} }};
+
+
+
+static void decod(str255 s, integer& nbc,integer& nbl,integer& col, str255& c, str30& cs)
+ {
+ integer i,k;
+ boolean v;
+
+ val(s[2],nbc,i);
+ c= "";
+ nbl= 0; i= 5; k= 0;
+ v=true; col=0;
+
+ while (s[i]!=']')
+ {
+ c=c+s[i];
+ if ((s[i]=='|') || (s[i+1]==']'))
+ {
+ if (k>col) col=k;
+ k= 0;
+ nbl=nbl+1;
+ }
+ else if (s[i]!=' ') v=false;
+ i=i+1;
+ k=k+1;
+ }
+ if (v) {
+ c="";
+ col=20;
+ }
+ else {
+ c=c+']';
+ col=col+6;
+ }
+ i=i+1;
+ cs=copy(s,i,30);
+ if (res==2) col= col*6;
+ else col= col*10;
+ }
+
+
+
+static void posit(integer ji, integer& coldep, integer& esp)
+ {
+ putxy(coldep + (40+esp) *pred(integer,ji),98);
+ }
+
+
+
+static void fait_boite(integer lidep,integer nli,integer tx)
+ {
+ integer x,y,xx,yy;
+
+ if (tx>640) tx=640;
+ x= 320- ((cardinal)tx >> 1);
+ y=pred(integer,lidep) << 3;
+ xx=x+ tx;
+ yy=y + (nli << 3);
+ box(15,gd,x,y,xx,yy,255);
+ box(0,gd,x,y+2,xx,y+4,255);
+ box(0,gd,x,yy-4,xx,yy-2,255);
+ }
+
+
+
+static void fait_choix(str30 c, integer& coldep, integer& nbcase, array<1,2,varying_string<3> >& s, integer& esp)
+ {
+ integer i,l,x;
+ char ch;
+
+ i=1;
+ x=coldep;
+ for( l=1; l <= nbcase; l ++)
+ {
+ s[l]="";
+ do {
+ i=i+1;
+ ch=c[i];
+ s[l]=s[l]+ch;
+ } while (!(c[i+1]==']'));
+ i=i+2;
+ while (length(s[l])<3) s[l]=s[l]+' ';
+ putxy(x,98);
+ writeg(string(' ')+s[l]+' ',0);
+ x= x+esp+40;
+ }
+ }
+
+ integer do_alert(str255 str_, integer n)
+{
+ integer coldep,esp,i,l,nbcase,quoi,ix;
+ str255 st, chaine;
+ matrix<1,2,1,2,integer> limit;
+ char c,dumi;
+ array<1,2,varying_string<3> > s;
+ integer cx,cy,cd,nbcol,nblig;
+ boolean touch,newaff,test,test1,test2,test3,dum;
+ str30 cas;
+
+
+ /*debug('** do_alert **');*/
+ integer do_alert_result;
+ hide_mouse();
+ while (keypressed()) input >> kbd >> dumi;
+ clic=false;
+ decod(str_,nbcase,nblig,nbcol,chaine,cas);
+ sauvecr(50,succ(integer,nligne) << 4);
+
+ i=0;
+ if (chaine=="")
+ {
+ fait_boite(10,5,nbcol);
+ }
+ else
+ {
+ fait_boite(8,7,nbcol);
+ i=0;
+ ywhere=70;
+ do {
+ cx= 320;
+ st= "";
+ while (! (set::of('\174','\135', eos).has(chaine[i+1])))
+ {
+ i=i+1;
+ st=st+chaine[i];
+ if (res==2) cx=cx-3;
+ else cx=cx-5;
+ }
+ putxy(cx,ywhere);
+ ywhere=ywhere+6;
+ writeg(st,4);
+ i=i+1;
+ } while (!(chaine[i]==']'));
+ }
+ if (nbcase==1) esp= nbcol- 40;
+ else esp= (cardinal)(nbcol-nbcase*40) >> 1;
+ coldep=320-((cardinal)nbcol >> 1)+((cardinal)esp >> 1);
+ fait_choix(cas, coldep, nbcase, s, esp);
+ limit[1][1]=((cardinal)(coldep) >> 1)*res;
+ limit[1][2]=limit[1][1]+40;
+ if (nbcase==1)
+ {
+ limit[2][1]=limit[2][2];
+ }
+ else
+ {
+ limit[2][1]=((cardinal)(320+((cardinal)esp >> 1)) >> 1)*res;
+ limit[2][2]=(limit[2][1])+40;
+ }
+ show_mouse();
+ quoi=0;
+ dum=false;
+ do {
+ dumi='\377';
+ mov_mouse(dum,dumi);
+ cx= x_s;
+ cy= y_s;
+ test=(cy>95) && (cy<105);
+ newaff=false;
+ if (test)
+ {
+ test1=(cx>limit[1][1]) && (cx<limit[1][2]);
+ test2=test1;
+ if (nbcase>1) test2= test1 || ((cx>limit[2][1]) && (cx<limit[2][2]));
+ if (test2)
+ {
+ newaff=true;
+ if (test1) ix=1;
+ else ix=2;
+ if (ix!=quoi)
+ {
+ hide_mouse();
+ if (quoi!=0)
+ {
+ posit(quoi, coldep, esp);
+ writeg(string(' ')+s[quoi]+' ',0);
+ }
+ posit(ix, coldep, esp);
+ writeg(string(' ')+s[ix]+' ',1);
+ quoi=ix;
+ show_mouse();
+ }
+ }
+ }
+ if ((quoi!=0) && ! newaff)
+ {
+ hide_mouse();
+ posit(quoi, coldep, esp);
+ writeg(string(' ')+s[quoi]+' ',0);
+ quoi=0;
+ show_mouse();
+ }
+ test3=(cy>95) && (cy<105) && (((cx>limit[1][1]) && (cx<limit[1][2]))
+ || ((cx>limit[2][1]) && (cx<limit[2][2])));
+ } while (!clic);
+ clic=false;
+ hide_mouse();
+ if (! test3) {
+ quoi=n;
+ posit(n, coldep, esp);
+ writeg(string(' ')+s[n]+' ',1);
+ }
+ charecr(50,succ(integer,nligne) << 4);
+ show_mouse();
+ do_alert_result=quoi;
+ return do_alert_result;
+}