home *** CD-ROM | disk | FTP | other *** search
- /* EDITOR.C
- Editor für TXL-Interpreter
- (c) 1991 Elmar Warken
- */
-
- #include <stdlib.h>
- #include <dos.h>
- #include <mem.h>
- #include <conio.h>
- #include <string.h>
- #include <stdio.h>
- #include <ctype.h>
- #include <alloc.h>
- #include "interp.h"
- #include "macros.c"
- #include "windows.h"
-
- /* Benötigte Globalvariablen */
- extern PRGZEILE *FirstLine;
- extern PRGZEILE *ActLine;
- extern char *LinePos;
- extern int Steuer;
- extern char ScanBuffer[ZEILENLAENGE];
-
- extern TOKBEF TokBefDesc[];
-
- extern struct windowdata *FirstWindow;
- extern int WindowCounter;
-
- char *TESTER="rt";
-
- typedef struct asciiz {
- char *Zeile;
- struct asciiz *Next,*Prev;
- } ASCIIZEILE;
-
- typedef struct editordata
- {
- ASCIIZEILE *First,*FirstView,*Act,*BlockBegin,*BlockEnd;
- /**** erte gesamt, erste sichtbare, Cursorzeile, BlockMarkierung ***/
-
- int cx,cy,ax,ay;/*** Cursorposition, erste Spalte ***/
- int insert,TXL; /*** TXL : handelt es sich die aktuelle Programmdatei ? ***/
- int m1x,m1y,m2x,m2y; /*** Blockmarkierungen Anfang und Ende :
- /*** Zeile und Spalte ***/
- char name[50];
- } EditorData;
-
- void ShowEditor(EditorData *ED)
- {
- ASCIIZEILE *line;
- char x1,y1,breite,hoehe,col;
- int startx,starty;
- char status[50]; /** Statuszeile **/
-
- int i,inversx1,inversx2,teilinvers;
-
- line=ED->Act;
- col=FirstWindow->BackCol;
- x1=FirstWindow->x1+1;
- y1=FirstWindow->y1+1;
- breite=FirstWindow->x2-x1-1;
- hoehe=FirstWindow->y2-y1-1;
-
- startx=ED->ax;
- if (ED->cx > ED->ax+breite-1) startx=ED->cx-breite+1;
- else if (ED->cx < ED->ax) startx=ED->cx-1;
- if (startx==0) startx=1;
-
- starty=ED->ay;
- if (ED->cy > ED->ay+hoehe-1) starty=ED->cy-hoehe+1;
- else if (ED->cy < ED->ay) starty=ED->cy-1;
- if (starty==0) starty=1;
-
- ED->ay=starty;
- ED->ax=startx;
-
- for (i=1; i<=ED->cy-starty; line=line->Prev, i++);
-
- for (i=1; (i<=FirstWindow->Hoehe-2) && (line!=NULL); line=line->Next, i++)
- {
- SET_POS(x1,y1+i-1);
-
- if ((ED->m1y < starty+i-1) && (ED->m2y > starty+i-1))
- {
- col=FirstWindow->BackCol+16;
- teilinvers=0;
- }
- else
- { /** Blockmarkierung berechnen **/
- inversx1=x1; inversx2=x1+FirstWindow->Breite-1;
- col=FirstWindow->BackCol;
- teilinvers=0;
- if (ED->m2y == starty+i-1)
- { inversx2=x1+ED->m2x-startx; teilinvers=1; }
- if (ED->m1y == starty+i-1)
- { inversx1=x1+ED->m1x-startx; teilinvers=1; }
- if ((inversx2<x1) || (inversx1>FirstWindow->Breite-1))
- teilinvers=0;
- else
- {
- if (inversx1<x1) inversx1=x1;
- if (inversx2>x1+FirstWindow->Breite-3) inversx2=x1+FirstWindow->Breite-3;
- }
- }
- if ((ED->ax-1) > strlen(line->Zeile))
- WR_STRMAX("",col,FirstWindow->Breite-2);
- else
- {
- WR_STRMAX((line->Zeile)+ED->ax-1,col,FirstWindow->Breite-2);
- if (teilinvers)
- {
- SET_POS(inversx1,y1+i-1);
- WR_ASTR(inversx2-inversx1+1,FirstWindow->BackCol+16);
- }
- }
- }
- /* Auffüllen der restlichen Zeilen */
- for (; i<=FirstWindow->Hoehe-2 ; i++)
- {
- SET_POS(x1,y1+i-1);
- WR_STRMAX("",col,FirstWindow->Breite-2);
- }
- gotoxy(x1+ED->cx-ED->ax,y1+ED->cy-ED->ay);
- sprintf(status," Zeile %d, Spalte %d ",ED->cy,ED->cx);
- if (ED->insert) strcat(status," INS ");
- else strcat(status," ");
- TopBottomFirstWin(ED->name,status);
- }
-
- char *GetTXLStr(PRGZEILE *FromStr) /* reserviert auch neuen Speicher */
- {
- char NewStr[300], *LINE, *ExactSpace;
-
- LINE=FromStr->Zeile;
- strcpy(NewStr,"");
-
- if (*LINE) {
- sprintf(NewStr,"%03d %s ",FromStr->LineNumber,
- TokBefDesc[(*LINE-TOKMIN)&0xff].Befehl);
- LINE++;
- if (*LINE) strcat(NewStr,LINE);
- }
- ExactSpace=malloc(strlen(NewStr)+1);
- return(strcpy(ExactSpace,NewStr));
- }
-
- char workline[300];
- char *altline;
- int fkeys[50];
- int gosub_position; /* Zwischenspeicher für aufgerufenes Unterprogramm */
- int ppc; /* soll Programm von Präprozessor bearbeitet werden ? */
-
- int StoreWorkLine(EditorData *ED)
- {
- if (altline) {
- free(altline); /* wenn != NULL */
- altline=NULL;
- }
- if ((ED->Act->Zeile=malloc(strlen(workline)+1))==NULL)
- {
- Message(" Speicherplatz voll.");
- return(FALSE);
- }
- strcpy(ED->Act->Zeile,workline);
- return(OK);
- }
-
- void LoadWorkLine(EditorData *ED)
- {
- strcpy(workline,ED->Act->Zeile);
- altline=ED->Act->Zeile;
- ED->Act->Zeile=workline;
- }
-
- int InsertLine(EditorData *ED)
- {
- ASCIIZEILE *neu;
- char *NeueZeile;
-
- ED->cy++;
- if (altline) free(altline); /* wenn != NULL */
- ED->Act->Zeile=malloc(ED->cx);
- strncpy(ED->Act->Zeile,workline,ED->cx-1);
- ED->Act->Zeile[ED->cx-1]=0;
- if (((neu=malloc(sizeof(ASCIIZEILE)))==NULL) || coreleft()<512)
- {
- Message(" Speicherplatz voll.");
- return(FALSE);
- }
- altline=NULL;
- neu->Prev=ED->Act;
- neu->Next=ED->Act->Next;
- ED->Act->Next=neu;
- neu->Next->Prev=neu;
- strcpy(workline,&workline[ED->cx-1]);
- ED->Act=neu;
- ED->Act->Zeile=workline;
- ED->cx=1;
- return(OK);
- }
-
- void EditorInsert(EditorData *ED, char *str, int max)
- {
- char *work,*c,i=1;
- int verschieb=strlen(str);
-
- if (verschieb>max) verschieb=max;
- if (strlen(workline)+strlen(str)<300)
- {
- memmove(&workline[ED->cx+verschieb-1],&workline[ED->cx-1],strlen(workline)-ED->cx+2);
- c=str;
- work=&workline[ED->cx-1];
- while (*c && (i++<=max)) *work++=*c++;
- ED->cx+=strlen(str);
- }
- }
-
- void SaveFile(char *name, EditorData *ED)
- {
- FILE *f;
- ASCIIZEILE *akt;
-
- akt=ED->First;
- if ((f=fopen(name,"wt"))==NULL)
- {
- Message(" Fehler beim Öffnen der Datei. ");
- return;
- }
- while (akt && akt->Zeile)
- {
- if ( ( fputs(akt->Zeile,f)==EOF) ||
- ( fputs("\n",f) ==EOF) )
- {
- if (*akt->Zeile)
- {
- Message(" Fehler beim Schreiben der Datei. ");
- return;
- }
- else fputs("\n",f);
- }
-
- akt=akt->Next;
- }
- fclose(f);
- }
-
- int _EditorAction(EditorData *ED, int fNum, char zeichen)
- {
- StoreWorkLine(ED);
- EditorAction(ED,fNum,zeichen);
- LoadWorkLine(ED);
- }
-
- int EditorAction(EditorData *ED, int fNum, char zeichen)
- {
- int i,aktlen=strlen(workline);
- ASCIIZEILE *neu,*blockhelp;
- char dateiname[60],help,buffer[300];
- FILE *f;
- int Return=OK;
-
- LoadWorkLine(ED);
- switch(fNum)
- {
- case 0 : if (aktlen<300)
- {
- if (ED->insert) memmove(&workline[ED->cx],&workline[ED->cx-1],aktlen-ED->cx+2);
- else if (aktlen<=ED->cx)
- workline[ED->cx]=0;
- workline[ED->cx-1]=(char)zeichen; ED->cx++;
- aktlen=strlen(workline);
- } break;
- case 4 : ED->cx--; break;
- case 6 : ED->cx++; break;
- case 9 :
- case 8 : if (ED->cy>1) {
- ED->cy--;
- StoreWorkLine(ED);
- ED->Act=ED->Act->Prev;
- if (fNum==9)
- for (i=2; (i<=FirstWindow->Hoehe-3) && ED->Act->Prev; i++)
- { ED->Act=ED->Act->Prev; ED->cy--; }
- LoadWorkLine(ED);
- }
- break;
- case 2 :
- case 3 : if (ED->Act->Next) {
- ED->cy++;
- StoreWorkLine(ED);
- ED->Act=ED->Act->Next;
- if (fNum==3)
- for (i=2; (i<=FirstWindow->Hoehe-3) && ED->Act->Next; i++)
- { ED->Act=ED->Act->Next; ED->cy++; }
- LoadWorkLine(ED);
- }
- break;
- case 25 : ED->cy=1;
- StoreWorkLine(ED);
- ED->Act=ED->First;
- LoadWorkLine(ED);
- break;
- case 26 : StoreWorkLine(ED);
- while (ED->Act->Next)
- { ED->Act=ED->Act->Next; ED->cy++; }
- LoadWorkLine(ED);
- break;
- case 7 : ED->cx=1; break;
- case 1 : ED->cx=aktlen+1; break;
- case 11 : if ((aktlen>0) && (ED->cx<=aktlen))
- memmove(&workline[ED->cx-1],&workline[ED->cx],aktlen-ED->cx+2);
- else if (ED->Act->Next)
- {
- strcat(workline,ED->Act->Next->Zeile);
- free(ED->Act->Next->Zeile);
- ED->Act->Next=ED->Act->Next->Next;
- ED->Act->Next->Prev=ED->Act;
- }
- break;
- case 10 : ED->insert=!ED->insert; break;
- case 13 : Return=InsertLine(ED);
- aktlen=strlen(workline);
- break;
- case 12 : if ((aktlen>0) && (ED->cx>1)) {
- memmove(&workline[ED->cx-2],&workline[ED->cx-1],aktlen-ED->cx+2);
- ED->cx--;
- }
- break;
- case 14 : strcpy(workline,"");
- if (ED->Act->Next) {
- if (altline) free(altline);
- ED->Act->Prev->Next=ED->Act->Next;
- ED->Act->Next->Prev=ED->Act->Prev;
- neu=ED->Act->Next;
- free(ED->Act);
- ED->Act=neu;
- strcpy(workline,ED->Act->Zeile);
- altline=ED->Act->Zeile;
- ED->Act->Zeile=workline;
- }
- break;
- case 15 : if (ED->cx>1)
- {
- if (isalpha(workline[ED->cx]))
- while (isalpha(workline[ED->cx-2]) && ED->cx>1)
- ED->cx--;
- while (!isalpha(workline[ED->cx-2]) && ED->cx>1)
- ED->cx--;
- while (isalpha(workline[ED->cx-2]) && ED->cx>1)
- ED->cx--;
- } break;
- case 16 : if (ED->cx<aktlen)
- {
- if (isalpha(workline[ED->cx-1]))
- while (isalpha(workline[ED->cx]) && ED->cx<aktlen)
- ED->cx++;
- while (!isalpha(workline[ED->cx]) && ED->cx<aktlen)
- ED->cx++;
- ED->cx++;
- } break;
- case 17 :
- case 18 : if (fNum==17) {
- ED->BlockBegin=ED->Act;
- ED->m1x=ED->cx;
- ED->m1y=ED->cy;
- } else
- { ED->BlockEnd=ED->Act;
- ED->m2x=ED->cx;
- ED->m2y=ED->cy;
- }
- if (ED->m1y>ED->m2y) ED->m2y=ED->m1y;
- if ((ED->m1y==ED->m2y) && (ED->m1x>ED->m2x))
- ED->m2x=ED->m1x;
- break;
- case 19 : /*** Copy Block **/
-
- if (ED->m1y==ED->m2y)
- { /* Sonderfall : Anfang und Ende in einer Zeile */
- EditorInsert(ED,&ED->BlockBegin->Zeile[ED->m1x-1],ED->m2x-ED->m1x+1);
- break;
- }
- EditorInsert(ED,&ED->BlockBegin->Zeile[ED->m1x-1],300);
- _EditorAction(ED,13,0); /** Return **/
- blockhelp=ED->BlockBegin->Next;
- for (i=ED->m1y+1; i<ED->m2y; i++)
- {
- EditorInsert(ED,blockhelp->Zeile,300);
- _EditorAction(ED,13,0); /** Return **/
- blockhelp=blockhelp->Next;
- }
- EditorInsert(ED,blockhelp->Zeile,ED->m2x);
- break;
- case 20 : /** DelBlock **/
- ED->cy=ED->m1y; /** Cursor an Blockposition setzen **/
- StoreWorkLine(ED);
- ED->Act=ED->BlockBegin;
- ED->cx=ED->m1x;
- LoadWorkLine(ED);
-
- if (ED->m1y==ED->m2y)
- { /* Sonderfall : Anfang und Ende in einer Zeile */
- memmove(&workline[ED->m1x-1],&workline[ED->m2x],ED->m2x-ED->m1x+2);
- ED->BlockBegin=ED->BlockEnd=NULL;
- ED->m1x=ED->m2x=ED->m1y=ED->m2y=0;
- break;
- }
-
- workline[ED->cx-1]=0; /** löschen **/
- _EditorAction(ED,2,0);
- for (i=ED->m1y+1; i<ED->m2y; i++)
- _EditorAction(ED,14,0); /** Ctrl-Y simulieren **/
- memmove(&workline[0],&workline[ED->m2x],strlen(workline)-ED->m2x+2);
-
- _EditorAction(ED,8,0); /** 1 Zeile hoch **/
- _EditorAction(ED,1,0); /** und mit nächster verbinden. **/
- _EditorAction(ED,11,0);
-
- ED->BlockBegin=ED->BlockEnd=NULL;
- ED->m1x=ED->m2x=ED->m1y=ED->m2y=0;
-
- break;
- case 21 : /** Move Block **/
- _EditorAction(ED,19,0);
- _EditorAction(ED,20,0);
- break;
- case 22 : /** Datei als Block einlesen **/
- WinReadStr(" Dateiname : ",dateiname,60);
-
- if ((f=fopen(dateiname,"rt"))==NULL)
- {
- Message(" Fehler beim Öffnen der Datei. ");
- return(FALSE);
- }
- _EditorAction(ED,17,0); /* Blockanfang markieren */
- while ((!feof(f)) && (fgets(buffer,300,f)))
- {
- if (buffer[strlen(buffer)-1]=='\n')
- buffer[strlen(buffer)-1]=0; /** "\n" löschen **/
- EditorInsert(ED,buffer,300);
- _EditorAction(ED,18,0); /* Blockende vorläufig markieren */
- if (_EditorAction(ED,13,0)==FALSE)
- {
- fclose(f);
- return(FALSE);
- }
- }
- fclose(f);
-
- break;
- case 24 : /** Block als Datei speichern **/
- WinReadStr(" Dateiname : ",dateiname,60);
-
- ED->cy=ED->m1y; /** Cursor an Blockposition setzen **/
- StoreWorkLine(ED);
- ED->Act=ED->BlockBegin;
- ED->cx=ED->m1x;
- LoadWorkLine(ED);
-
- if ((f=fopen(dateiname,"wt"))==NULL)
- {
- Message(" Fehler beim Öffnen der Datei. ");
- return(FALSE);
- }
-
- if (ED->m1y==ED->m2y)
- { /* Sonderfall : Anfang und Ende in einer Zeile */
- help=workline[ED->m2x];
- workline[ED->m2x]=0;
- if ( (fputs(&workline[ED->m1x-1],f)==EOF) ||
- (fputs("\n",f)==EOF))
- {
- Message(" Fehler beim Schreiben der Datei. ");
- return(FALSE);
- }
-
- workline[ED->m2x]=help;
- fclose(f);
- break;
- }
-
- fputs(&workline[ED->cx-1],f);
- fputs("\n",f);
- _EditorAction(ED,2,0);
- for (i=ED->m1y+1; i<ED->m2y; i++)
- {
- fputs(workline,f);
- fputs("\n",f);
- _EditorAction(ED,2,0);
- }
- help=workline[ED->m2x];
- workline[ED->m2x]=0;
- fputs(workline,f);
- fputs("\n",f);
- workline[ED->m2x]=help;
- fclose(f);
-
- break;
- case 23 : SaveFile(ED->name,ED); break;
- case 31 : do {
- help=getch();
- if (help==0) {
- help=getch();
- switch(help)
- {
- case 75 : MoveWindow(-1,0); break;
- case 77 : MoveWindow( 1,0); break;
- case 72 : MoveWindow(0,-1); break;
- case 80 : MoveWindow(0, 1); break;
- }
- }
- } while (help != 27); break;
- case 30 : do {
- help=getch();
- if (help==0) {
- help=getch();
- switch(help)
- {
- case 75 : ResizeWindow(-1,0); break;
- case 77 : ResizeWindow( 1,0); break;
- case 72 : ResizeWindow(0,-1); break;
- case 80 : ResizeWindow(0, 1); break;
- }
- }
- } while (help != 27); break;
- case 32 : NewKoorWindow(1,1,80,25); break;
- }
- aktlen=strlen(workline);
- if (!ED->cx) ED->cx=1;
- if (ED->cy<1) ED->cy=1;
- if (ED->cx>aktlen+1) ED->cx=aktlen+1;
- StoreWorkLine(ED);
- return(Return);
- }
-
- void EditorProc(EditorData *ED)
- {
- int c,extended,i;
-
- gosub_position=0;
- ppc=0;
- do
- {
- c=getch();
- if (!c)
- {
- extended=getch();
- switch(extended)
- {
- case 75 : EditorAction(ED,4,0); break;
- case 77 : EditorAction(ED,6,0); break;
- case 73 : EditorAction(ED,9,0); break;
- case 72 : EditorAction(ED,8,0); break;
- case 80 : EditorAction(ED,2,0); break;
- case 81 : EditorAction(ED,3,0); break;
- case 71 : EditorAction(ED,7,0); break;
- case 79 : EditorAction(ED,1,0); break;
- case 83 : EditorAction(ED,11,0); break;
- case 82 : EditorAction(ED,10,0); break;
- case 115 :EditorAction(ED,15,0); break;
- case 116 :EditorAction(ED,16,0); break;
- case 132 :EditorAction(ED,25,0); break;
- case 118 :EditorAction(ED,26,0); break;
- case 19 :EditorAction(ED,30,0); break;
- case 50 :EditorAction(ED,31,0); break;
- case 44 :EditorAction(ED,32,0); break;
-
-
- /*** Tastenbelegung von 76 Tasten ( F1-F10 und "F11 bis F76") ***/
- /*** F11-F20 : Shift-Fx, F21-F30 : Ctrl-Fx, F31-F40 : Alt-Fx ***/
- /*** F41-F50 : Alt-1 bis Alt-0 ***/
-
- default : if ((extended>58) && (extended<69))
- {
- if (fkeys[extended-59])
- if ((gosub_position=fkeys[extended-59])!=0)
- c=27; /** Simulation von <ESC> **/
- }
- else if ((extended>83) && (extended<114))
- {
- if (fkeys[extended-74])
- if ((gosub_position=fkeys[extended-74])!=0)
- c=27;
- }
- else if ((extended>119) && (extended<130))
- {
- if (fkeys[extended-80])
- if ((gosub_position=fkeys[extended-80])!=0)
- c=27;
- }
- }
- } else { /*** Zeichen ohne Extended Code ***/
- switch(c)
- {
- case 13 : EditorAction(ED,13,0); break;
- case 8 : EditorAction(ED,12,0); break;
- case 27 : break;
- case 25 : EditorAction(ED,14,0); break;
- case 2 : EditorAction(ED,17,0); break;
- case 5 : EditorAction(ED,18,0); break;
- case 3 : EditorAction(ED,19,0); break;
- case 4 : EditorAction(ED,20,0); break;
- case 22 : EditorAction(ED,21,0); break;
- case 18 : EditorAction(ED,22,0); break;
- case 23 : EditorAction(ED,24,0); break;
- case 19 : EditorAction(ED,23,0); break;
- case 20 : EditorAction(ED,23,0); /** Ctrl-T : Präprozessor **/
- ppc=1;
- c=27; break;
- default : if (c>27) EditorAction(ED,0,c); break;
- }
- }
- ShowEditor(ED);
- } while(c!=27); /** bis ESC gedrückt wurde. **/
- }
-
- void GetTXLProg(EditorData *ED)
- {
- PRGZEILE *TXL;
- ASCIIZEILE *ASCII,*neu;
-
- ASCII=malloc(sizeof(*ASCII));
- ASCII->Next=NULL; ASCII->Prev=NULL;
- ASCII->Zeile=NULL;
- ED->First=ED->Act=ED->FirstView=ASCII;
-
- if ((TXL = FirstLine) != NULL) {
- while (TXL) {
- ASCII->Zeile=GetTXLStr(TXL);
- if (TXL)
- {
- neu=malloc(sizeof(*neu));
- ASCII->Next=neu;
- neu->Prev=ASCII;
- neu->Zeile=NULL;
- neu->Next=NULL;
- ASCII=neu;
- TXL = TXL->NextZeile;
- } else ASCII->Next=NULL;
- }
- }
- strcpy(ED->name,"AKTUELL.TXL");
- }
-
- void ClearEditor(EditorData *ED)
- {
- ASCIIZEILE *akt,*next;
-
- akt=ED->First;
- while (akt)
- {
- if (akt->Zeile)
- free(akt->Zeile);
- next=akt->Next;
- free(akt);
- akt=next;
- }
- }
-
- int LoadFile(char *name, EditorData *ED)
- {
- PRGZEILE *TXL;
- ASCIIZEILE *ASCII,*neu;
- FILE *f;
- char s[300];
-
- ASCII=malloc(sizeof(*ASCII));
- ASCII->Next=NULL;
- ASCII->Prev=NULL;
- ASCII->Zeile=NULL;
- ED->First=ED->Act=ED->FirstView=ASCII;
-
- if ((f=fopen(name,"rt"))==NULL)
- {
- strcpy(ED->name,name);
- return(OK);
- }
-
- while (!feof(f) && ((fgets(s,300,f))!=NULL))
- {
- if (s[strlen(s)-1]=='\n')
- s[strlen(s)-1]=0; /** "\n" löschen **/
- if ((ASCII->Zeile=malloc(strlen(s)+1))==NULL)
- {
- ClearEditor(ED);
- Message(" Nicht genügend Speicherplatz. ");
- return(FALSE);
- }
-
- strcpy(ASCII->Zeile,s);
- if (!feof(f))
- {
- if ((neu=malloc(sizeof(*neu)))==FALSE)
- {
- ClearEditor(ED);
- Message(" Nicht genügend Speicherplatz. ");
- return(FALSE);
- }
- ASCII->Next=neu;
- neu->Prev=ASCII;
- neu->Zeile=NULL;
- neu->Next=NULL;
- ASCII=neu;
- }
- else
- ASCII->Next=NULL;
- }
- fclose(f);
- strcpy(ED->name,name);
- return(OK);
- }
-
- EditorData Editor[10]; /** Editoren 0 bis 9 **/
-
- int cinitedit(void) /** initialisiert einen Editor im obersten Fenster **/
- {
- long num;
- char *loadname;
-
- if (!GetIntegerParam(&num))
- { serror(" Editornummer erwartet. "); return(FALSE); }
-
- Editor[num].cx=Editor[num].cy=1; Editor[num].ay=Editor[num].ax=1;
- Editor[num].insert=1; Editor[num].BlockBegin=Editor[num].BlockEnd=NULL;
- Editor[num].m1x=Editor[num].m2x=Editor[num].m2y=Editor[num].m1y=0;
-
- if (GetStringParam(&loadname))
- {
- if (LoadFile(loadname,&Editor[num])==FALSE)
- {
- CloseFirstWindow();
- serror(" Fehler beim Laden der Datei! ");
- return(FALSE);
- }
- Editor[num].TXL=0;
- }
- else
- { GetTXLProg(&Editor[num]); Editor[num].TXL=1; }
-
- ShowEditor(&Editor[num]);
- return(OK);
- }
-
- int cendedit(void) /** Schließt Editor **/
- /** Der Editor muß im obersten Fenster sein. **/
- {
- long num;
-
- if (!GetIntegerParam(&num))
- { serror(" Editornummer erwartet. "); return(FALSE); }
-
- CloseFirstWindow();
- if (Editor[num].TXL)
- {
- SaveFile(Editor[num].name,&Editor[num]);
- SetFileName(Editor[num].name);
- ReadProg();
- }
- ClearEditor(&Editor[num]);
- return(OK);
- }
-
- int cshoweditor(void)
- {
- long num;
-
- if (!GetIntegerParam(&num))
- { serror(" Editornummer erwartet. "); return(FALSE); }
-
- ShowEditor(&Editor[num]);
- return(OK);
- }
-
- int ceditorproc(void) /** Tastatureingabe **/
- {
- long num;
-
- if (!GetIntegerParam(&num))
- { serror(" Editornummer erwartet. "); return(FALSE); }
-
- do
- {
- ShowEditor(&Editor[num]);
- EditorProc(&Editor[num]);
- } while ((gosub_position) && dogosub(gosub_position));
-
- return(OK);
- }
-
- int cneuedit(void)
- {
- EditorData DATA;
- char CX,CY,*loadname;
- int TXL; /** wird TXL-Programm bearbeitet? ***/
-
- CX=wherex(); CY=wherey();
- OpenWindow(4,3,76,23,36,33,66,33);
-
- DATA.cx=DATA.cy=1; DATA.ay=DATA.ax=1;
- DATA.insert=1;
- DATA.BlockBegin=DATA.BlockEnd=NULL;
- DATA.m1x=DATA.m2x=DATA.m2y=DATA.m1y=0;
-
- if (GetStringParam(&loadname))
- {
- if (LoadFile(loadname,&DATA)==FALSE)
- {
- CloseFirstWindow();
- serror(" Fehler beim Laden der Datei! ");
- return(FALSE);
- }
- TXL=0;
- }
- else
- { GetTXLProg(&DATA); TXL=1; }
-
- do
- {
- ShowEditor(&DATA);
- EditorProc(&DATA);
- } while ((gosub_position) && dogosub(gosub_position));
-
- CloseFirstWindow();
- gotoxy(CX,CY);
- if (ppc)
- {
- /*** in TXL-Programm umwandeln ***/
- TransformFile(DATA.name,"AKTUELL.TXL");
- SetFileName("AKTUELL.TXL"); ReadProg(); /** Einlesen in Programmspeicher **/
- }
- else if (TXL)
- {
- /** automat. Speichern, wenn aktuelles TXL-Prog. bearbeitet wird **/
- SaveFile(DATA.name,&DATA);
- SetFileName(DATA.name); ReadProg(); /** Einlesen in Programmspeicher **/
- }
- ClearEditor(&DATA);
-
- return(OK);
- }
-
- int csetfkey(void)
- {
- long taste,zeile;
-
- if (!GetIntegerParam(&taste))
- { serror(" Funktionstastennummer erwartet! "); return(FALSE); }
- if (!GetIntegerParam(&zeile))
- { serror(" Zeilennummer erwartet! "); return(FALSE); }
-
- if ((taste<51) && (taste>0))
- fkeys[taste-1]=zeile;
- return(OK);
- }
-
- int csetlinebuf(void)
- {
- Scan();
- strcpy(workline,ScanBuffer);
-
- return(OK);
- }
-
- int cinsertstring(void)
- {
- long EditorNummer;
- char *strp;
-
- if (GetIntegerParam(&EditorNummer) &&
- GetStringParam(&strp) )
- {
- LoadWorkLine(&Editor[EditorNummer]);
- EditorInsert(&Editor[EditorNummer],strp,300);
- StoreWorkLine(&Editor[EditorNummer]);
- return(OK);
- }
- serror(" Parameterfehler bei InsertString! ");
- return(FALSE);
- }
-
- int cedfunction(void)
- {
- long EditorNr,FuncNr,Char;
-
- if ((GetIntegerParam(&EditorNr)==OK) &&
- (GetIntegerParam(&FuncNr)==OK) &&
- (GetIntegerParam(&Char)==OK))
- {
- EditorAction(&Editor[EditorNr],FuncNr,Char);
- return(OK);
- }
- serror(" Parameterfehler bei EditorFunktion! ");
- return(FALSE);
- }
-
- int cGetEdString(void)
- {
- char *strp;
- long EditorNummer;
-
- if (GetIntegerParam(&EditorNummer) &&
- GetStrVarParam(&strp))
- {
- LoadWorkLine(&Editor[EditorNummer]);
- SetVarStr(ScanBuffer,workline);
- StoreWorkLine(&Editor[EditorNummer]);
- return(OK);
- } else
- {
- serror(" Nur Stringvariable bei GetEditorString erlaubt.");
- return(FALSE);
- }
- }
-
- /* Parameter in TXL : Stringvariable, Editornummer (für Cursorposition) */
- int cGetEdWord(void)
- {
- char *strp,*namep,work2[300];
- long EditorNummer;
-
- if (GetIntegerParam(&EditorNummer) &&
- GetVarNameParam(&namep) )
- {
- LoadWorkLine(&Editor[EditorNummer]);
- strcpy(work2,&workline[Editor[EditorNummer].cx-1]);
- StoreWorkLine(&Editor[EditorNummer]);
- strp=work2;
- while (isalpha(*strp))
- strp++;
- *strp=0;
- SetVarStr(namep,work2);
- } else
- {
- serror(" Parameterfehler bei GetEditorWord.");
- return(FALSE);
- }
- return(OK);
- }
-