diff options
Diffstat (limited to 'engines/mortevielle/outtext.h')
-rw-r--r-- | engines/mortevielle/outtext.h | 205 |
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 */ + } + } |