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
/
miscE.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-08-06
|
15KB
|
530 lines
/*
* miscE.c © by Martin Steppler
*/
struct Device *ConsoleDevice = NULL;
struct IOStdReq ConsoleMsg;
extern void ReleaseFileSelect();
char *BriefText[] = {
"LETTER", "ASCII ", "AUT", " "
};
#define OFFSET 431
#define KLOTZ 10240
DeadKeyConvert(Message, KeyBuffer, BufferSize, KeyMap)
struct IntuiMessage *Message;
UBYTE *KeyBuffer;
int BufferSize;
struct KeyMap *KeyMap;
{
static struct InputEvent InputEvent =
{
NULL, /* struct InputEvent *ie_NextEvent; */
IECLASS_RAWKEY, /* UBYTE ie_Class; */
0, /* UBYTE ie_SubClass; */
0, /* UWORD ie_Code; */
0 /* UWORD ie_Qualifier; */
/* union */
/* { */
/* struct */
/* { */
/* WORD ie_x; */
/* WORD ie_y; */
/* } ie_xy; */
/* APTR ie_addr; */
/* } ie_position; */
/* struct timeval ie_TimeStamp; */
};
if (Message->Class != RAWKEY) return(-2);
if (Message->Code & IECODE_UP_PREFIX) return(0);
InputEvent.ie_Code = Message->Code;
InputEvent.ie_Qualifier = Message->Qualifier;
InputEvent.ie_position.ie_addr = (APTR)*(Message->IAddress);
return(RawKeyConvert(&InputEvent, KeyBuffer, BufferSize, KeyMap));
}
OpenReadConsole()
{
if (OpenDevice("console.device", -1L, &ConsoleMsg, 0) != 0)
return(-1);
ConsoleDevice = (struct Device *)ConsoleMsg.io_Device;
return(0);
}
Meldung()
{
UBYTE string[80];
StilAus();
strcpy(string, " ");
Move(RP, 6, 20);
Text(RP, string, strlen(string));
Move(RP, 6, 20);
Text(RP, buffer, strlen(buffer));
sprintf(buffer, "PGE %-3d LIN %-3d COL %-3d", s+1, z+1, x);
Move(RP, OFFSET, 20);
Text(RP, buffer, strlen(buffer));
if(ein==TRUE) ein=FALSE; else ein=TRUE;
StilAn();
Einfuegen();
}
Brief()
{
br++;
if(br==2) br=0;
ZSDisplay();
MenueUeberwachung(3);
}
Auto()
{
au++; if(au==2) au=0; ZSDisplay();
MenueUeberwachung(3);
}
Backup()
{
if(++bak==2) bak=0; MenueUeberwachung(3);
if(bak) sprintf(buffer, "Backup mode switched ON!");
else sprintf(buffer, "Backup mode switched OFF!");
}
NamenSetzen(FName)
UBYTE *FName;
{
UBYTE string[80];
StilAus();
strcpy(string, " ");
Move(RP, 6, 9);
Text(RP, string, strlen(string));
Move(RP, 6, 9);
Text(RP, FName, strlen(FName));
strcpy(titel, FName);
StilAn();
}
Einfuegen()
{
StilAus();
if(ein==FALSE) {
sprintf(buffer, "INS %s %s LN %-5d", BriefText[au+2],
BriefText[br], s*(SEITE+1)+z+1);
ein = TRUE;
}
else {
sprintf(buffer, " %s %s LN %-5d", BriefText[au+2],
BriefText[br],s*(SEITE+1)+z+1);
ein = FALSE;
}
Move(RP, OFFSET, 9);
Text(RP, buffer, strlen(buffer));
StilAn();
MenueUeberwachung(3);
}
LadeConfig(fn)
char *fn;
{
struct FileHandle *handle;
int ende = FALSE, x1, ln, trans, zaehler=0, alt, weiter=FALSE, durch=FALSE;
UBYTE buf[256];
if(!(handle=Open(fn,MODE_OLDFILE))) return(FALSE);
FOREVER {
if(ende) break;
if((ln = Read(handle,buffer,GROESSE))<GROESSE) {
Close(handle); ende=TRUE;
}
trans = ln; ln=0;
hops: if(weiter) {
FOREVER {
if(ln==trans) break;
if(buffer[ln++] == LF) { weiter=FALSE; break; }
}
if(ln==trans) continue;
}
if(zaehler<3 || zaehler==9) { zaehler++; weiter=TRUE; goto hops; }
if(zaehler<=18 && !durch ) x1=0;
alt=zaehler;
do {
if((buf[x1++] = buffer[ln++]) == 32) {
buf[--x1] = EOS; zaehler++;
}
} while(ln<trans && zaehler==alt);
durch=FALSE;
if(zaehler>alt) {
switch(zaehler) {
case 4:
if((MAX=atoin(buf))>ABSMAX) MAX=ABSMAX; else if(MAX<10) MAX=10;
break; /* Textbreite */
case 5:
if((SEITE=atoin(buf)-1)>71) SEITE=71; else if(SEITE<9) SEITE=9;
break; /* Seitenlänge */
case 6:
ein = (atoin(buf)) ? FALSE:TRUE;
break; /* Einfügen Modus */
case 7:
br = (atoin(buf)) ? FALSE:TRUE;
break; /* Brief Modus */
case 8:
au = (atoin(buf)) ? FALSE:TRUE;
break; /* Auto-Trenn Modus */
case 9:
if((schrift=atoin(buf))<0 || schrift>3) schrift=1;
break; /* Druck Modus */
case 11:
if((zg3=atoin(buf))<0) zg3=0;
break; /* linker Rand */
case 12:
if((zg4=atoin(buf))<zg3) zg4=zg3+1;
break; /* rechter Rand */
case 13:
if((zg5=atoin(buf))>72) zg5=72; else if(zg5<10) zg5=10;
break; /* Papierlänge */
case 14:
znum = (atoin(buf)) ? 4:5;
break; /* Zeilennummerierung */
case 15:
snum = (atoin(buf)) ? FALSE:TRUE;
break; /* Seitennummerierung */
case 16:
bak = (atoin(buf)) ? TRUE:FALSE;
break; /* Backup */
case 17:
iconx = atoin(buf);
break; /* Iconify x-Koordinate */
case 18:
icony = atoin(buf);
break; /* Iconify y-Koordinate */
case 22:
if(strlen(buf)==77) strcpy(tab,buf);
break; /* Tabulator */
}
weiter=TRUE; goto hops;
}
else durch=TRUE;
}
return(TRUE);
}
Laden(fn) /* fn = Filename */
char *fn;
{
struct FileHandle *handle;
register int ln, s1=se, x1=0, z1=ze;
int trans = KLOTZ-1, zaehler=0, flaggy=FALSE, st=0, txp=FALSE;
UBYTE *Buf;
if((ln=strlen(fn))>=4) { /* File im Briefformat <- `.txp` - Endung */
if((fn[ln-1]==80||fn[ln-1]==112)&&(fn[ln-2]==120||fn[ln-2]==88)&&
(fn[ln-3]==84||fn[ln-3]==116)&&fn[ln-4]==46) txp=TRUE;
}
if(!br && !txp) { strcat(fn, ".txp"); txp=TRUE; }
if(!(handle=Open(fn,MODE_OLDFILE)))
{
sprintf(buffer, "Can't open %s!", fn); strcpy(str,buffer);
Meldung();
return(FALSE);
}
if(!(Buf = (UBYTE *)AllocMem(KLOTZ, MEMF_CLEAR))) {
Close(handle); return(FALSE);
}
FOREVER {
if((ln = Read(handle,Buf,KLOTZ))<KLOTZ) {
trans = ln-1;
if(!ln) { /* EOF */
Close(handle);
break;
}
}
zaehler += trans+1; /* Textlänge mitzählen */
ln = 0;
lab1: do {
if((buffer[x1++] = Buf[ln++]) <=9) {
if(buffer[x1-1]<9) st++; /* Steuercode im Text */
else { x1--; /* TAB im Text */
/* if(x1 & 8) { buffer[x1++] = 32; } */
if(x1<MAX+st) {
do {
buffer[x1++] = 32;
} while((x1 & 15) && x1<MAX+st);
}
}
}
} while(x1<MAX+st && Buf[ln-1]!=LF && ln<=trans);
if(Buf[ln-1]==LF || x1==MAX+st || trans<KLOTZ-1) {
if(Buf[ln-1]==LF) --x1;
while(x1 && buffer[x1-1] == 32) x1--; /* Rand-Spaces weg damit */
buffer[x1] = EOS; /* LineFeed oder Zeilenende */
if(x1==MAX+st) { /* LineFeed und Zeilenende */
if(ln<KLOTZ) { if(Buf[ln]==LF) ln++; }
}
if(!(a[s1] [z1] = (UBYTE *)AllocMem(x1+2, MEMF_CLEAR))) {
flaggy=TRUE; Close(handle); SpeicherMangel();
break; /* Out of memory */
}
strcpy(a[s1] [z1], buffer);
a[s1] [z1] [x1+1] = (txp==TRUE) ? st : 0; /* Steuercodes abspei. */
if(ln>trans && trans<KLOTZ-1) { Close(handle); break; } /* EOF */
x1=st=0; z1++;
if(s1==MAS && z1>sei) {
z1=sei; flaggy=TRUE; Close(handle);
break;
}
if(z1>SEITE) {
z1=0;
if(++s1>MAS) {
s1=MAS; z1=SEITE; flaggy=TRUE; Close(handle);
break;
}
}
if(ln>trans) continue; /* Weiter von disk lesen */
goto lab1;
} /* else Weiter von disk lesen */
}
FreeMem(Buf, KLOTZ);
se = s1; ze = z1;
if(flaggy == TRUE) {
if(blo)
sprintf(buffer, "Out of memory! Block-length: %d!", zaehler);
else
sprintf(buffer, "Out of memory! Text-length: %d!",zaehler);
}
else {
if(blo)
sprintf(str, "Length: %d End of block:", zaehler);
else
sprintf(buffer, "Length: %d End: page %d line %d!",
zaehler, se+1, ze+1);
}
if(!blo || flaggy) { strcpy(str, buffer); Meldung(); }
return(TRUE);
}
XPlus()
{
if((++x)>MAX) {
x=MIX; Flagge = TRUE+off; off=0;
YZPlus();
Flagge=spe=zpe= FALSE;
}
else if(x-MAX1==off) {
off+=OFF1; SText(); meld=FALSE;
}
}
YZPlus()
{
int len=0;
y++;
if(++z>SEITE) {
z = 0;
if(++s>MAS) {
s=MAS; z=SEITE; y--;
if(Flagge >= TRUE) x = MAX;
if(Flagge > TRUE) off=Flagge-1;
sprintf(buffer, "%s", FehlerText[2]);
meld = TRUE;
}
if(s>se) {
s = se; z = ze; y=y-1;
if(Flagge >= TRUE) x = MAX;
if(Flagge > TRUE) off=Flagge-1;
sprintf(buffer, "%s", FehlerText[1]);
meld = TRUE;
}
}
if(s==se){
if(z>ze) {
z = ze; y-- ;
if(Flagge >= TRUE) x = MAX;
if(Flagge > TRUE) off=Flagge-1;
sprintf(buffer, "%s", FehlerText[1]);
meld = TRUE;
}
}
if(Flagge>TRUE && x==MIX) {
if(y>MAY) y=MAY; Flagge=FALSE; SText(); meld=FALSE;
}
if(y>MAY) {
y = MAY; Hochrollen();
}
else if(blo==2) {
if(BloRel(0)) { y--; if(--z<0) { z=SEITE; s--; } len=1; blo=0; }
SetAPen(RP, 0); RectFill(RP, 0, y*8-8, RRAND, y*8-1);
SetAPen(RP, 1);
Rolling();
if(len) { y++; blo=2; if(++z>SEITE) { z=0; s++; } }
}
}
XMinus()
{
if(--x<MIX) {
x=MAX;
if(MAX>=MAX1) off=((MAX-MAX1)/OFF1+1)*OFF1;
Flagge = TRUE+off;
YZMinus();
Flagge=spe=zpe=FALSE;
}
else if(x==off) {
off-=OFF1; SText(); meld=FALSE;
}
}
YZMinus()
{
int len=0;
y--;
if(--z<0) {
z = SEITE;
if(--s<0) {
s=0; z=0; y=MIY;
if(Flagge>=TRUE) { x=MIX; off=0; }
sprintf(buffer,"%s", FehlerText[0]);
meld = TRUE;
}
}
if(Flagge>TRUE && x==MAX) {
if(y<MIY) y=MIY; Flagge=FALSE; SText(); meld=FALSE;
}
if(y<MIY) {
y=MIY;
Runterrollen();
}
else if(blo==2) {
if(BloRel(0)) { y++; if(++z>SEITE) { z=0; s++; } len=1; blo=0; }
SetAPen(RP, 0); RectFill(RP, 0, y*8-8, RRAND, y*8-1);
SetAPen(RP, 1);
Rolling();
if(len) { y--; blo=2; if(--z<0) { z=SEITE; s--; } }
}
}
TitelZeile()
{
int h, var;
SetAPen(RP, 1);
Move(RP, 0, 30);
Draw(RP, 640, 30);
for(h = 2; h <= 79; h++) {
var = (h-1) * 8;
if(h==10||h==20||h==30||h==40||h==50||h==60||h==70) {
Move(RP, var, 24);
Draw(RP, var, 30);
}
else {
if(h==5||h==15||h==25||h==35||h==45||h==55||h==65||h==75) {
Move(RP, var, 26);
Draw(RP, var, 30);
}
else {
Move(RP, var, 27);
Draw(RP, var, 30);
}
}
}
}
Tabulator(ganz,var,yk)
int ganz, var, yk;
{
if(ganz==TRUE) {
for(var=0; var<=77; var++) {
if(tab[var]=='1') {
Move(RP, (var*8)+1, 25); Draw(RP, (var*8)+5, 25);
Move(RP, (var*8)+3, 26); Draw(RP, (var*8)+3, 28);
}
}
}
else {
var = var/8; if(var<0) var=0; if(var>77) var=77;
if(yk>30 || ganz==2) {
yk = yk/8+1; if(yk<MIY) yk=MIY; if(yk>MAY) yk=MAY;
if(ganz!=2) x=var+off+1;
if(yk>y) {
for(ganz=y; ganz<yk; ganz++) YZPlus();
}
else if(y>yk) {
for(ganz=y; ganz>yk; ganz--) YZMinus();
}
ZSDisplay(); /* y=yk */
}
else {
if(tab[var]=='1') {
tab[var]='0';
SetAPen(RP, 0);
RectFill(RP, (var*8)+1,25, (var*8)+5, 28);
SetAPen(RP, 1);
}
else {
tab[var]='1';
Move(RP, (var*8)+1, 25); Draw(RP, (var*8)+5, 25);
Move(RP, (var*8)+3, 26); Draw(RP, (var*8)+3, 28);
}
}
}
}
ZSDisplay()
{
StilAus();
sprintf(buffer, "PGE %-3d LIN %-3d COL %-3d", s+1, z+1, x);
Move(RP, OFFSET, 20);
Text(RP, buffer, strlen(buffer));
sprintf(buffer, " ");
Move(RP, 6, 20);
Text(RP, buffer, strlen(buffer));
if(ein==TRUE) ein=FALSE; else ein=TRUE;
StilAn();
Einfuegen();
}
Schluss()
{
register int si, zi;
int i;
if(se>=0) {
for(si=0; si<=se; si++) {
for(zi=0; zi<=SEITE; zi++) {
FreeMem(a[si] [zi], SL(si,zi)+2);
if(si==se && zi==ze) break;
}
}
}
ReleaseFileSelect();
if(Fenster->MenuStrip && icfy) ClearMenuStrip(Fenster, &Menus[0]);
if(Fenster) CloseWindow(Fenster);
if(Scheibe && icfy) CloseScreen(Scheibe);
if(ConsoleDevice) CloseDevice(&ConsoleMsg);
if(DosBase) CloseLibrary(DosBase);
if(GfxBase) CloseLibrary(GfxBase);
if(IntuitionBase) CloseLibrary(IntuitionBase);
}
Oeffnen()
{
if(!(IntuitionBase=(struct IntuitionBase *)
OpenLibrary("intuition.library",INTUITION_REV)))
Und_tschuess("Can't open intuition-library!\n");
if(!(GfxBase=(struct GfxBase *)
OpenLibrary("graphics.library",GRAPHICS_REV)))
Und_tschuess("Can't open graphics-library!\n");
if(!(DosBase=(struct DosLibrary *) OpenLibrary("dos.library",0)))
Und_tschuess("Can't open dos-library!\n");
if(OpenReadConsole() != 0)
Und_tschuess("Can't open console.device!\n");
return(TRUE);
}
Und_tschuess(bye)
char *bye;
{
if(DosBase) CloseLibrary(DosBase);
if(GfxBase) CloseLibrary(GfxBase);
if(IntuitionBase) CloseLibrary(IntuitionBase);
printf(bye);
exit(FALSE);
}