aboutsummaryrefslogtreecommitdiff
path: root/engines/mortevielle/outtext.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mortevielle/outtext.h')
-rw-r--r--engines/mortevielle/outtext.h205
1 files changed, 205 insertions, 0 deletions
diff --git a/engines/mortevielle/outtext.h b/engines/mortevielle/outtext.h
new file mode 100644
index 0000000000..5bd4fd2809
--- /dev/null
+++ b/engines/mortevielle/outtext.h
@@ -0,0 +1,205 @@
+str255 delig;
+const array<0,31,byte> tabdr
+ = {{ 32, 101, 115, 97, 114, 105, 110,
+ 117, 116, 111, 108, 13, 100, 99,
+ 112, 109, 46, 118, 130, 39, 102,
+ 98, 44, 113, 104, 103, 33, 76,
+ 85, 106, 30, 31 }};
+
+
+const array<0,31,byte> tab30
+ = {{ 69, 67, 74, 138, 133, 120, 77, 122,
+ 121, 68, 65, 63, 73, 80, 83, 82,
+ 156, 45, 58, 79, 49, 86, 78, 84,
+ 71, 81, 64, 66, 135, 34, 136, 91 }};
+
+
+
+const array<0,31,byte> tab31
+ = {{ 93, 47, 48, 53, 50, 70, 124, 75,
+ 72, 147, 140, 150, 151, 57, 56, 51,
+ 107, 139, 55, 89, 131, 37, 54, 88,
+ 119, 0, 0, 0, 0, 0, 0, 0 }};
+
+void deline( integer num , phrase& l , integer& tl );
+
+static void cinq_huit( char& c, integer& ind, byte& pt, boolean& the_end)
+ {
+ const array<0,31,char> rap
+ = {{ ',', ':', '@', '!', '?', '-', '‡',
+ ' ', '…', 'ƒ', '‚', 'Š', 'ˆ', '/',
+ '‹', 'Œ', '¢', '\47', '“', '"', '—',
+ '–', '0', '1', '2', '3', '4', '5',
+ '6', '7', '8', '9'}};
+ integer oct,ocd;
+
+ /* 5-8 */
+ oct=t_mot[ind];
+ oct=(cardinal)(oct << (16-pt)) >> (16-pt);
+ if (pt<6)
+ {
+ ind=ind+1;
+ oct=oct << (5-pt);
+ pt=pt+11;
+ oct=oct | ((cardinal)t_mot[ind] >> pt);
+ }
+ else
+ {
+ pt=pt-5;
+ oct=(cardinal)oct >> pt;
+ }
+
+ switch (oct) {
+ case 11 : {
+ c= '$';
+ the_end= true;
+ }
+ break;
+ case 30:case 31 : {
+ ocd=t_mot[ind];
+ ocd=(cardinal)(ocd << (16-pt)) >> (16-pt);
+ if (pt<6)
+ {
+ ind=ind+1;
+ ocd=ocd << (5-pt);
+ pt=pt+11;
+ ocd=ocd | ((cardinal)t_mot[ind] >> pt);
+ }
+ else
+ {
+ pt=pt-5;
+ ocd=(cardinal)ocd >> pt;
+ }
+ if (oct==30) c=chr(tab30[ocd]);
+ else c=chr(tab31[ocd]);
+ if (c=='\0')
+ {
+ the_end=true;
+ c='#';
+ }
+ }
+ break;
+ default: c=chr(tabdr[oct]);
+ }
+ } /* 5-8 */
+
+void deline( integer num , phrase& l , integer& tl )
+ {
+ integer i,j,ts;
+ char let;
+ byte ps, k;
+ boolean the_end;
+
+ /* DETEX */
+ /*debug(' => DeLine');*/
+ delig="";
+ ts= t_rec[num].indis;
+ ps= t_rec[num].point;
+ i=ts;
+ tl=1;
+ j=1;
+ k=ps;
+ the_end=false;
+ do {
+ cinq_huit(let,i,k, the_end);
+ l[j]=let;
+ if (j<254) delig=delig+let;
+ j=j+1;
+ } while (!the_end);
+ tl=j-1;
+ if (tl<255) delig=copy(delig,1,tl-1); /* enleve le $ */
+ } /* DETEX */
+
+
+void afftex( phrase ch, integer x,integer y,integer dx,integer dy, integer typ);
+
+
+static integer l_motsuiv(integer p, phrase& ch, integer& tab)
+ {
+ integer c;
+
+ integer l_motsuiv_result;
+ c=p;
+ while (! (set::of(' ','$','@', eos).has(ch[p]))) p=p+1;
+ l_motsuiv_result=tab*(p-c);
+ return l_motsuiv_result;
+ }
+
+void afftex( phrase ch, integer x,integer y,integer dx,integer dy, integer typ)
+ {
+ boolean the_end;
+ char touch;
+ integer xf,yf;
+ integer xc,yc;
+ integer tab, p;
+ varying_string<255> s;
+ integer i,j,nt;
+
+
+/* debug(' .. Afftex');*/
+ putxy(x,y);
+ if (res==1) tab=10; else tab=6;
+ dx= dx * 6;
+ dy= dy * 6;
+ xc= x;
+ yc= y;
+ xf= x+dx;
+ yf= y+dy;
+ p= 1;
+ the_end=(ch[p]=='$');
+ s="";
+ while (! the_end)
+ {
+ switch (ch[p]) {
+ case '@' : {
+ writeg(s,typ);
+ s="";
+ p=p+1;
+ xc=x;
+ yc=yc+6;
+ putxy(xc,yc);
+ }
+ break;
+ case ' ' : {
+ s=s+' ';
+ xc=xc+tab;
+ p=p+1;
+ if (l_motsuiv(p, ch, tab)+xc > xf)
+ {
+ writeg(s,typ);
+ s="";
+ xc=x;
+ yc=yc+6;
+ if (yc>yf)
+ {
+ do {; } while (!keypressed());
+ i=y;
+ do {
+ j=x;
+ do {
+ putxy(j,i);
+ writeg(" ",0);
+ j=j+6;
+ } while (!(j>xf));
+ i=i+6;
+ } while (!(i>yf));
+ yc=y;
+ }
+ putxy(xc,yc);
+ }
+ }
+ break;
+ case '$' : {
+ the_end= true;
+ writeg(s,typ);
+ }
+ break;
+ default:
+ {
+ s=s+ch[p];
+ p=p+1;
+ xc=xc+tab;
+ }
+ } /* case */
+ }
+ }