home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 1: Collection A
/
17Bit_Collection_A.iso
/
files
/
1024.dms
/
1024.adf
/
TextPlus
/
SrcE.lzh
/
SrcE
/
buchstabeE.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-08-10
|
25KB
|
884 lines
/*
* buchstabeE.c © by Martin Steppler
*/
struct Gadget ArrowGads[2], VertSlider;
struct Image Image3;
extern InitSlider();
Buchstabe(c)
UBYTE c;
{
int len=0, i, r, st, st2, e, e2=FALSE, e3, bloflag=0;
i=SL(s,z); st=SC(s,z,i);
if(i-st < x) { /* x größer string */
spg1: if(!(c==32 && (stil==0 || stil==4 || stil==6))) {
BelAend(s,z,st,x+st,i);
for(len=i;len<x+st-1; len++) a[s] [z] [len]=32;
a[s] [z] [len++] = c; a[s] [z] [len] = EOS;
r=Testen(stil);
if(!((!r && !stil) || oflag)) {
if(x==MAX && ein==FALSE) {
if(a[s] [s] [x+r-2]<9) {
len=stil; if(!len) len=8; a[s] [z] [x+r-2] = len;
}
else SpeicherStil(x+st-1, ++st, r);
}
else SpeicherStil(x+st-1, ++st, r);
}
}
if(x==MAX && ein==TRUE) {
if(spe) {
if(c!=32) { i=x+st; bloflag=5; goto spg2; }
x=MIX; YZPlus();
x=0; return();
}
if(c!=32) {
for(len=x+st-1; len>=0;len--) {
if(a[s] [z] [len] == 32) {
x = len+2-st; break;
}
}
}
if(x>MAX || len<0 || x<MIX) x=MAX;
e=s; e2=z; Flagge = 256; CarRet();
if(ausri>LINKS) { e3=s; i=z; s=e; z=e2; meld=2; y--;
st=Ausrichtung(ausri); meld=FALSE;
if(st) SonderDruck(y, SL(s,z), 0);
else NormalDruck(y, SL(s,z), 0);
s=e3; z=i; y++;
}
if(c==32) x=0;
}
}
else if(ein==TRUE) { /* x im string */
if(i-st==MAX) { /* Zeile voll */
spg2: e=x; e2=st;
for(len=i-1; len>=0; len--) {
if(a[s] [z] [len] <9) e2--;
if(a[s] [z] [len] == 32) {
x = len+2-e2; break;
}
}
if(x>MAX ||len<0) { Flagge=501; x=e; } /* voll ohne space */
else if(x>e) Flagge=e; /* Crsr vor Wort */
else Flagge = e-x+501; /* Crsr im Wort */
if(!zpe && !spe) { /* zum erstenmal */
yabbadabba: e2=CarRet(); if(meld==TRUE) return(0);
zpe=z; spe=s+1;
if(e2) YZMinus();
i=SL(s,z); st=SC(s,z,i);
if(i-st<x || bloflag==5) { bloflag=0; goto spg1; }
}
else { /* nicht zum erstenmal */
len=SL(--spe,zpe); st2=SC(spe,zpe,len);
if(i-st-x+1+len-st2>MAX) { meld=FALSE; goto yabbadabba; }
r=e=e3=meld=0;
if(st) { e=x; x=MAX; Testen(stil); x=e; e=0;
if(a[spe] [zpe] [0] != letztes && a[spe] [zpe] [0] <9)
e3=a[spe] [zpe] [0];
else if(a[spe] [zpe] [0] >8 && letztes !=8) {
e3=8; meld=1; st2++;
}
else if(a[spe] [zpe] [0] == letztes) e=1;
else if(a[spe] [zpe] [0] >8 && letztes == 8) {
e3=9;
}
r=Testen(stil);
}
st2+=(st-r); if(r) { meld++; st2++; } if(e) st2--;
BelAend(spe,zpe,st2,len-e+i-x-r+2+meld,len);
for(e2=len; e2>=0; e2--)
a[spe] [zpe] [e2+i-e-x-r+2+meld] = a[spe] [zpe] [e2];
if(r) {
a[spe] [zpe] [0] = letztes;
if(meld==2) { meld=1; len++; }
if(e3<9 && !e) a[spe] [zpe] [i+meld-x-r+2] = e3;
}
else if(!e && e3==8) {
a[spe] [zpe] [i-x-r+2] = e3; len++; meld=FALSE;
}
a[spe] [zpe] [i+meld-x-r+1] = 32;
len+=(i-e-x-r+2+meld);
for(e2=i-1; e2>=x+r-1; e2--)
a[spe] [zpe] [e2-x-r+1+meld] = a[s] [z] [e2];
meld=FALSE;
if(x>off && (x-MAX1<off)) {
SetAPen(RP, 0);
RectFill(RP, ((x-off)*8-8), y*8-8, RRAND, y*8-1);
SetAPen(RP, 1);
}
for(e2=x+r-2; e2>=0; e2--) {
if(a[s] [z] [e2] < 9) r--;
else if(a[s] [z] [e2] == 32) x--;
else break;
}
a[s] [z] [x+r-1] = EOS;
if(x+r-1!=i) BelAend(s, z, r, x+r-1, i);
i=x+r-1; st=r;
s=spe; z=zpe; y++; x=((e3=Flagge)>500) ? (Flagge-499):(Flagge+1);
Flagge=FALSE; e=(x>MAX) ? TRUE:FALSE; x-=e;
e2 = (bloflag==5) ? TRUE:FALSE; bloflag=0;
if(st2) SonderDruck(y, len, 0);
else NormalDruck(y, len, 0);
if(!e) x--;
if(e2) { spe=zpe=0; goto spg3; }
if(e3<500) { YZMinus(); spe++; if(i-st<x) goto spg1; }
else { spe=zpe=0; i=len; st=st2; }
}
}
r=Testen(stil);
BelAend(s,z,st,i+1,i);
if(r) {
if(a[s] [z] [x+r-2] <9) {
if(!((a[s] [z] [x+r-2]==8&&!stil)||a[s] [z] [x+r-2]==stil))
r--;
}
}
if(i>x-1+r) {
for(len=i; len>x-1+r; len--) a[s] [z] [len] = a[s] [z] [len-1];
}
a[s] [z] [x-1+r] = c; a[s] [z] [i+1] = EOS;
st=StilPruefungII(i+1, st);
if(meld==100) return();
if(x<=off) { SText(); meld=FALSE; }
else if(x-MAX1+1>=off) { x++; SText(); x--; meld=FALSE; }
else if(st) SonderDruck(y, SL(s,z), x);
else {
a[s] [z] +=(x-1-off);
NormalDruck(y, SL(s,z), x-1-off );
a[s] [z] -=(x-1-off);
}
spg3: ;
}
else { /* im string und ein == FALSE */
r = Testen(stil);
a[s] [z] [x-1+r] = c;
StilPruefung(i, r, st);
}
}
StilPruefung(i, r, st)
int i, r, st;
{
int len=stil;
if(!((!r && !stil) || oflag)) {
if(!len) len=8;
if(r) {
if(a[s] [z] [x+r-2] < 9) a[s] [z] [x+r-2] = len;
else SpeicherStil(i++, ++st, r++);
}
else SpeicherStil(i++, ++st, r++);
if(i-st>x) {
if(a[s] [z] [x+r] > 8) {
stil=letztes; x++; SpeicherStil(i,++st,r); stil=len; x--;
if(stil==8) stil=0;
}
}
}
}
BelAend(ss, zz, st, neu, alt) /* BelegungAendern */
int ss, zz, st, neu, alt;
{
UBYTE *buf;
if(!(buf = (UBYTE *) AllocMem(neu+2, MEMF_CLEAR)))
SpeicherMangel();
strcpy(buf, a[ss] [zz]);
if(!a[ss] [zz] [0]) alt=0;
FreeMem(a[ss] [zz], alt+2);
a[ss] [zz] = buf;
a[ss] [zz] [neu+1] = st;
}
ErstBelAend(ss, zz, st, neu, e, f) /* BelegungAendern & ErstBel */
int ss, zz, st, neu, e, f;
{
if(!(a[ss] [zz] = (UBYTE *) AllocMem(neu+2, MEMF_CLEAR)))
SpeicherMangel();
strcpy(a[ss] [zz], a[e] [f]);
a[ss] [zz] [neu+1] = st;
}
ErstBel(ss, zz) /* ErstBelegung */
int ss, zz;
{
if(!(a[ss] [zz] = (UBYTE *) AllocMem(2, MEMF_CLEAR)))
SpeicherMangel();
a[ss] [zz] [0] = a[ss] [zz] [1] = EOS;
}
StilPruefungII(i, st)
int i, st;
{
int len=0, r;
r=Testen(stil);
if(!((!r && !stil) || oflag)) {
SpeicherStil(i, ++st, r++);
if(i+1-st>x) {
if(a[s] [z] [x+r] > 8) {
len=stil; stil=letztes; if(!stil) stil=8; x++;
SpeicherStil(i+1,++st,r); stil=len; x--;
}
}
}
return(st);
}
SText() /* Schnelltext */
{
int yalt=y, salt=s, zalt=z;
if(y>MIY) CrsrTop();
FastText();
if(!meld || (meld && y>yalt)) y=yalt;
s=salt; z=zalt;
}
NeueGroesse()
{
MAY=(Fenster->Height-15)/8;
YKOD=MAY*8-1;
y=MIY;
Image3.Height = VertSlider.Height = Fenster->Height-41-27;
ArrowGads[0].TopEdge = Fenster->Height-27;
ArrowGads[1].TopEdge = Fenster->Height-18;
RefreshGList(&VertSlider, Fenster, NULL, -1);
InitSlider(&VertSlider);
SetAPen(RP, 0);
RectFill(RP, 0, 32, RRAND, Fenster->GZZHeight);
SetAPen(RP, 1);
SText(); ZSDisplay();
}
NormalDruck(yk, ln, xk)
int yk, ln, xk;
{
if(x<=off) { off=( x /MAX1 )*OFF1; SText(); }
else if(x-MAX1>=off) { off=((x-MAX1)/OFF1+1)*OFF1; SText(); }
else if(ln>off) {
if(stil) StilAus();
if(blo) { if(blo==2 || (blo>2 && BloPruef())) SetAPen(RP, ROT); }
if(off) a[s] [z] += off;
Move(RP, xk*8, yk*8-2);
if(ln<off+MAX1) Text(RP, a[s] [z], ln-off);
else Text(RP, a[s] [z], MAX1-1);
if(off) a[s] [z] -= off;
if(blo) SetAPen(RP, WEISS);
if(stil) StilAn();
}
}
Cursor(n)
int n;
{
static int xalt, yalt, nalt;
if(n==2) { nalt=n; xalt=x; yalt=y; }
else if(!((xalt==(x-off-1)*8) && (yalt=y*8-2) && (n==nalt))) {
SetAPen(RP, 3); /* 0 Aus 1 An */
SetDrMd(RP, INVERSVID|COMPLEMENT);
if(!(!n && !nalt)) {
if(!n||(n && n==nalt)) {
Move(RP, xalt, yalt);
Text(RP, " ", 1);
}
if(n) {
xalt=(x-off-1)*8; yalt=y*8-2;
Move(RP, xalt, yalt);
Text(RP, " ", 1);
}
nalt=n;
SetAPen(RP, 1);
SetDrMd(RP, JAM2);
}
}
}
FastText()
{
int len, ab=0, brel;
SetAPen(RP, 0);
RectFill(RP, 0, 32, RRAND, YKOD+2);
SetAPen(RP, 1);
meld=FALSE; y=MIY;
if(blo==2 || blo==6 || blo==4) {
if(blo==4) blo=2;
if((brel=BloRel(blo))<MAY-MIY && brel>0 && blo==2) ab=1; /* hi ru sp*/
else if(brel>0) ab=(blo==2) ? 2:3; /* hin runter / hoch */
else if(brel<0) { ab=4; brel*=(-1); } /* hin hoch sprung */
else ab=5;
blo=0;
}
for(len=0; len<=MAY-MIY; len++) {
if(ab) {
if((ab==2&&len==MAY-MIY)||(ab==3&&!len)||(ab==1&&len>=brel)
||(ab==4&&len<=brel)||ab==5) SetDrMd(RP, COMPLEMENT);
}
Rolling();
if(ab) SetDrMd(RP, JAM2);
if(len<MAY-MIY) YZPlus();
if(meld == TRUE) { sprintf(str, "%s", buffer); break; }
}
if(ab) blo=2;
if(meld==TRUE) { sprintf(buffer, "%s", str); }
}
SonderDruck(len, ii, pos)
int len, ii, pos;
{
int q,p,i,r;
if(x<=off) { off=( x /MAX1 )*OFF1; SText(); }
else if(x-MAX1>=off) { off=((x-MAX1)/OFF1+1)*OFF1; SText(); }
else if(ii>off) {
i = SC(s,z,ii);
if(i==1 && a[s] [z] [0]<9) {
p=stil; stil=a[s] [z] [0]; if(stil==8) stil=0;
StilAn(); if(pos) pos-=(off+1); stil=0;
a[s] [z] += (pos+1);
NormalDruck(len, ii-(pos+1), pos);
stil=p; StilAn(); a[s] [z] -= (pos+1);
}
else {
if(blo) {
if(blo==2 || (blo>2 && BloPruef())) SetAPen(RP, ROT);
}
p=stil; stil=i=q=0; buffer[i] = EOS;
if(pos || off) {
if(off && !pos) { q=x; x=off+1; }
r=Testen(stil); pos=x+r-1; stil=letztes;
if(q) { x=q; q=0; }
else q=x-1-off;
}
for(r=pos; r<=ii-1; r++) {
if(a[s] [z] [r] <9) {
if(i) {
buffer[i] = EOS;
TeilAusdruck(q,len,i);
q+=i; i=0;
}
stil = a[s] [z] [r]; if(stil==8) stil=0;
}
else buffer[i++] = a[s] [z] [r];
if(r==ii-1) {
buffer[i]=EOS; TeilAusdruck(q, len, i);
}
}
StilAus(); stil=p; StilAn(); buffer[0] = EOS;
if(blo) SetAPen(RP, WEISS);
}
}
}
TeilAusdruck(q, len, lenbuf)
int q, len, lenbuf;
{
StilAn();
Move(RP, q*8, len*8-2);
Text(RP, buffer, lenbuf);
}
BloRel(mode) /* entfernen wir uns von der Blockmarkierung ? */
int mode;
{
static int altcpos = 0;
int bpos = (bas*(SEITE+1)+baz), cpos = (s*(SEITE+1)+z), rtwert=FALSE;
if(cpos==bpos && !mode) rtwert=1;
else if(cpos>bpos) {
if(cpos<altcpos) rtwert=cpos-bpos; /* hin */
}
else {
if(cpos>altcpos) rtwert=bpos-cpos; /* hin */
else if(mode==6 && bpos-cpos<MAY-MIY) rtwert=cpos-bpos; /* phasensprung */
}
altcpos=cpos; if(mode==2) altcpos+=MAY-MIY;
return(rtwert);
}
CrsrTop()
{
int len;
for(len=y;len>MIY;len--)
YZMinus();
}
CrsrHoch()
{
int len, fahne = FALSE, altblo=0;
if(blo==2) { blo=0; altblo=1; }
for(len=0; len<MAY-MIY; len++)
{
y=MIY+1;
YZMinus();
if(meld==TRUE) {
fahne = TRUE;
meld = FALSE;
break;
}
}
y=MIY; if(altblo) blo=6;
FastText(); if(altblo) blo=0;
CrsrTop(); if(altblo) blo=2;
if(fahne == TRUE) {
meld = TRUE;
sprintf(buffer, "%s", FehlerText[0]);
}
}
CrsrBot()
{
int len;
for(len=y;len<MAY;len++) {
YZPlus();
if(meld == TRUE)
break;
}
}
Hochrollen()
{
if(blo==2) {
if(BloRel(0)) {
if(--z<0) { z=SEITE; s--; } blo=0;
SetAPen(RP, 0); RectFill(RP, 0, y*8-8, RRAND, y*8-1);
SetAPen(RP, 1); Rolling();
blo=2; if(++z>SEITE) { z=0; s++; }
}
}
ScrollRaster(RP, 0, 8, 0, 32, RRAND, YKOD); /* 632 */
Rolling(); /* MAY */
}
Runterrollen()
{
if(blo==2) {
if(BloRel(0)) {
if(++z>SEITE) { z=0; s++; } blo=0;
SetAPen(RP, 0); RectFill(RP, 0, y*8-8, RRAND, y*8-1);
SetAPen(RP, 1); Rolling();
blo=2; if(--z<0) { z=SEITE; s--; }
}
}
ScrollRaster(RP, 0, -8, 0, 32, RRAND, YKOD); /* 632 */
Rolling();
}
Rollen()
{
ScrollRaster(RP, 0, -8, 0, (y-1)*8, RRAND, YKOD);
Rolling();
}
Rolling()
{
int i;
if(i=SL(s,z)) {
if(a[s] [z] [i+1]) SonderDruck(y, i, 0);
else NormalDruck(y, i, 0);
}
}
ZeileLoeschen()
{
int xalt=x;
if(ze==z && se==s) {
x=1;
RestLoeschen(0);
x=xalt;
}
else
BSpaceII();
}
BloPruef()
{
if(bas<s && s<bes)
return(TRUE);
if(bas==s && baz<=z) {
if(bes>s)
return(TRUE);
if(bes==s && bez>=z)
return(TRUE);
}
if(bes==s && bez>=z && bas<s)
return(TRUE);
return(FALSE);
}
RestLoeschen(exmeld)
int exmeld;
{
int len,r,i=SL(s,z);
r=Testen(stil); a[s] [z] [x+r-1] = EOS;
if((len=x+r-1)>0) {
for(len=x+r-2;len>0;len--){
if(a[s] [z] [len] == 32) a[s] [z] [len] = EOS;
else if(a[s] [z] [len] <9) { r--; a[s] [z] [len] = EOS; }
else break;
}
len++;
}
BelAend(s, z, r, len, i);
if(exmeld!=500) {
SetAPen(RP, 0);
RectFill(RP, ((x-off)*8-8), y*8-8, RRAND, y*8-1);
SetAPen(RP, 1);
}
}
CarRet()
{
int len, r, i, e=FALSE, st, exmeld=meld;
if((MAS-se+SEITE-ze)>0) {
i=SL(s,z); st=SC(s,z,i);
meld=2; BlockEinfuegen(s,z,s,z); meld=FALSE;
if(i-st>=x) {
RestLoeschen(exmeld); len=0;
}
else len=1;
if(++z>SEITE) { z=0; s++; }
if(len) {
a[s] [z] [0] = EOS;
BelAend(s,z, 0, 0, i);
}
else {
r=Testen(stil); st=e=0;
if(letztes!=0 && letztes!=8) { st=e=1; a[s] [z] [0] = letztes; }
for(len=x+r-1; len<=i-1; len++, st++) {
if(a[s] [z] [len] <9) e++;
a[s] [z] [st] = a[s] [z] [len];
}
a[s] [z] [st] = EOS;
BelAend(s, z, e, st, i);
}
if(exmeld==500) return();
e=FALSE;
if(Flagge) {
if(Flagge==256) StrEnde();
else if(Flagge>500) x=Flagge-499;
else { x=Flagge+1; e=TRUE; }
Flagge=0;
}
else x=1;
if(x<=off) { off=(x/MAX1)*OFF1; if(++y>MAY) y=MAY; SText(); }
else {
if(++y>MAY) { y=MAY; Hochrollen(); }
Rollen();
}
if(x!=1) x--;
meld=FALSE;
}
else {
sprintf(buffer, "%s", FehlerText[2]);
meld = TRUE;
}
return(e);
}
BSpace()
{
int len, r, i, st, rs=0, rz, st2,e=0;
UBYTE buf[512];
if(s==0 && z==0 && x==1) {
sprintf(buffer, "%s", FehlerText[0]);
meld = TRUE;
}
else {
i=SL(s,z); st=SC(s,z,i);
if(x>1) {
if(i-st>=x-1) {
if(i-st==x-1) { x--; r=Testen(stil); x++;
for(len=x+r-3; len>=0; len--) {
if(a[s] [z] [len]<9) { rs++; st--; }
else if(a[s] [z] [len] == 32) rs++;
else break;
}
a[s] [z] [i-1-rs] = EOS;
}
else {
r=Testen(stil);
if(r>1) { if(a[s] [z] [x+r-2]<9 && a[s] [z] [x+r-4]<9) {
r--; st--; rs=1; }}
if(r && !rs) { if(a[s] [z] [x+r-2]<9) r--; }
for(len=x+r-1; len<=i; len++)
a[s] [z] [len-1-rs] = a[s] [z] [len];
}
BelAend(s, z, st, i-1-rs, i);
if(meld==100) return();
i=i-1-rs; if((len=i-st-off)<0) len =0;
SetAPen(RP, 0);
RectFill(RP,len*8,y*8-8,RRAND,y*8-1);
SetAPen(RP, 1);
if(--x<=off) { SText(); meld=FALSE; }
else if(i-st>x-1) {
if(st) SonderDruck(y, SL(s,z), x);
else {
a[s] [z] +=(x-1-off);
NormalDruck(y, SL(s,z), x-1-off );
a[s] [z] -=(x-1-off);
}
}
}
else XMinus();
}
else {
rz=z-1; rs=s; spe=zpe=0;
if(rz<0) { rz=SEITE; rs--; }
len=SL(rs,rz); st2=SC(rs,rz,len);
if(i-st+len-st2<=MAX) {
if(st2) {
SchnellTest(rs,rz,len-st2);
if(a[s] [z] [0] >8 && letztes!=8) e=1;
}
x=len-st2+1; strcpy(buf, a[rs] [rz]);
if(!(a[rs] [rz] = (UBYTE *) AllocMem(i+len+e+2, MEMF_CLEAR)))
SpeicherMangel();
strcpy(a[rs] [rz], buf);
a[rs] [rz] [i+len+e+1] = st2+st+e;
if(e) a[rs] [rz] [len] = 8;
for(r=0; r<=i; r++) a[rs] [rz] [r+len+e] = a[s] [z] [r];
if(x<=off) { off=( x /MAX1 )*OFF1; SText(); }
else if(x-MAX1>=off) { off=((x-MAX1)/OFF1+1)*OFF1; SText(); }
BSpaceII();
s=rs; z=rz;
if(--y<MIY) {
y=MIY;
Runterrollen();
}
else Rolling();
}
}
}
}
BSpaceII()
{
int i, r, rz, rs;
rz=z; rs=s; i=y;
meld=2; BlockLoeschen(s,z,s,z); meld=FALSE;
if(blo>2) {
if(BloPruef()) {
if(bas==bes && baz==bez) blo=0; /* Block gelöscht */
else {
if(--bez<0) { bez=SEITE; bes--; }
}
}
else if(s<bas || (s==bas && z<baz)) {
if(--baz<0) { baz=SEITE; bas--; }
if(--bez<0) { bez=SEITE; bes--; }
}
}
if(y<MAY) CrsrBot();
ScrollRaster(RP, 0, 8, 0, i*8-8, RRAND, YKOD);
if(meld == FALSE) Rolling();
z=rz; s=rs; y=i; meld=FALSE;
}
BlockSchieben(n)
int n;
{
int i, olds=s, oldz=z, oldMAX = MAX;
MAX=ABSMAX;
FOREVER {
meld=100; s=bas; z=baz;
if((!n || n==2) && x==MAX) break;
else if((n==1 || n==3) && x==MIX) break;
FOREVER {
if(!n || n==2) { /* Block nach rechts verschieben */
if((i=SL(s,z))-SC(s,z,i)<MAX) {
Buchstabe((UBYTE *)' ');
}
}
else if(n==1 || n==3) { /* Block nach links verschieben */
if((i=SL(s,z))-SC(s,z,i)>=x-1) BSpace();
}
if(s==bes && z==bez) break;
if(++z>SEITE) { z=0; s++; }
}
if(!n || n==2) {
meld=FALSE; XPlus();
if(n==2 && tab[x-off-1] == '1') break;
else if(!n) break;
}
else {
meld=FALSE; XMinus();
if(n==3 && tab[x-off-1] == '1') break;
else if(n==1) break;
}
}
s=olds; z=oldz; MAX = oldMAX; if(x>MAX) x=MAX;
SText(); ZSDisplay(); meld=FALSE;
}
JumpWord(n)
int n;
{
int i, st, len=0, r, durch=0;
if(n) {
FOREVER {
st=SC(s,z,(i=SL(s,z)));
if(x<=off) { off=( x /MAX1 )*OFF1; SText(); }
else if(x-MAX1>=off) { off=((x-MAX1)/OFF1+1)*OFF1; SText(); }
if(x==MIX && x==i-st && durch) break;
durch=1;
if(x>=i-st) { r=0;
if(y==MAY) r=1;
YZPlus(); if(meld) break;
if(r) {
st=s; i=z;
for(len=1; len<=(MAY-MIY)/2; len++) {
YZPlus(); if(meld) { meld=0; break; }
}
s=st; z=i; y=MAY-len+1;
}
x=MIX; len=1; continue;
}
if(a[s] [z] [x+Testen(stil)-1] == 32) len=1;
else if(len) break;
do {
XPlus(); if(a[s] [z] [x+(r=Testen(stil))-1] == 32) len=1;
} while(x<i-st && !(a[s] [z] [x+r-1] != 32 && len));
if(a[s] [z] [x+r-1] != 32 && len) break;
}
}
else {
FOREVER {
st=SC(s,z,(i=SL(s,z)));
if(x>i-st) { x=i-st; if(x==MIX) break; if(!x) x=MIX; }
if(x==MIX) { r=0;
if(y==MIY) r=1;
YZMinus(); if(meld) break;
if(r) {
st=s; i=z;
for(len=1; len<=(MAY-MIY)/2; len++) {
YZMinus(); if(meld) { meld=0; break; }
}
s=st; z=i; y=MIY+len-1;
}
st=SC(s,z,(i=SL(s,z))); if(!(x=i-st)) { x=MIX; r=2; }
if(x-MAX1>=off) { off=((x-MAX1)/OFF1+1)*OFF1; SText(); }
len=1; if(r==2) continue; if(x==MIX) break;
}
do {
XMinus(); if(a[s] [z] [x+(r=Testen(stil))-1] != 32) len=1;
} while(x>MIX && !(a[s] [z] [x+r-1] == 32 && len));
if(a[s] [z] [x+r-1] == 32 && len) { XPlus(); break; }
else if(x==MIX && a[s] [z] [x+r-1] !=32) break;
}
}
}
CDel(n)
int n;
{
int i, st, len, r=0, e, durch=1;
if(n==2) { /* Alles links vom Crsr löschen */
for(len=x; len>MIX; len--) BSpace();
}
else {
st=SC(s,z,(i=SL(s,z)));
if(x<=i-st) {
r=Testen(stil);
if(n==1 || (!n && a[s] [z] [x+r-1] != 32)) {
if(x>MIX) {
x--; r=Testen(stil); x++;
if(!(a[s] [z] [x+r-2] == 32 && !n)) {
if(a[s] [z] [x+r-2] != 32 && (e=a[s] [z] [x+Testen(stil)-1]) != 32) n=0;
if(e!=32) e=0;
for(len=x; len>MIX; len--) {
BSpace();
if(--x<MIX) { x++; break; }
else {
r=Testen(stil);
if(a[s] [z] [x+r-1] == 32 ) {
if(--x<MIX || e) { if(e==33) e++; x+=2; }
else {
r=Testen(stil); x+=2;
if(a[s] [z] [x+r-3] != 32) break;
}
}
else {
x++;
if(e==32) e++;
else if(e==34) break;
}
}
}
}
}
}
if(n!=1) {
st=SC(s,z,(i=SL(s,z)));
r=Testen(stil); e=1;
if(!n && a[s] [z] [x+r-1] == 32) { e=durch=0; }
for(len=x, r=0; len<=i-st; len++) {
if(n) {
if(a[s] [z] [x+Testen(stil)-1] != 32) break;
}
Del();
if(!n) {
if(a[s] [z] [x+Testen(stil)-1] != 32) e=1;
else if(e) r=1;
if(r && e) {
if(len>i-st-2) break;
else {
if(durch==2) break;
x++; r=Testen(stil); x--;
if(a[s] [z] [x+r] != 32) {
if(durch) durch=2;
else break;
}
r=1;
}
}
}
}
}
}
else if(n==1 && i-st>MIX) {
r=st; x=MIX;
for(len=i-st; len>=MIX; len--) {
if(a[s] [z] [len+r-1] <9) r--;
if(a[s] [z] [len+r-1] == 32) { x=len; break; }
}
for(len=x; len<=i-st; len++) Del();
}
}
}
Del()
{
int i, r, len, rs=0, st;
i=SL(s,z); st=SC(s,z,i);
if(i-st>=x) {
r=Testen(stil);
if(i-st==x) {
for(len=x+r-2; len>=0; len--) {
if(a[s] [z] [len]<9) { rs++; st--; }
else if(a[s] [z] [len] == 32) rs++;
else break;
}
a[s] [z] [i-1-rs] = EOS;
}
else {
if(r) { if(a[s] [z] [x+r-2]<9 && a[s] [z] [x+r]<9) { st--; rs=1; }}
for(len=x+r; len<=i; len++) a[s] [z] [len-1-rs] = a[s] [z] [len];
}
BelAend(s, z, st, i-1-rs, i);
i=i-1-rs; if((len=i-st-off)<0) len =0;
SetAPen(RP, 0);
RectFill(RP,len*8,y*8-8,RRAND,y*8-1);
SetAPen(RP, 1);
if(i-st>=x || x<=off) {
if(st) SonderDruck(y, SL(s,z), x);
else {
a[s] [z] +=(x-1-off);
NormalDruck(y, SL(s,z), x-1-off);
a[s] [z] -=(x-1-off);
}
}
}
}
StrEnde()
{
x=SL(s,z); x=x-SC(s,z,x)+1;
if(x>MAX) x=MAX;
if(x<MIX) x=MIX;
}
SL(b,c)
int b,c;
{
return((!a[b] [c] [0]) ? 0:strlen(a[b] [c]));
}
SC(b,c,d)
int b,c,d;
{
return(a[b] [c] [d+1]);
}