mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-19 08:06:42 +00:00
206 lines
5.9 KiB
C
206 lines
5.9 KiB
C
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 */
|
||
}
|
||
}
|