home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************
- * ....................................... *
- * . . *
- * . TOOLBOX - INTERPRETER . *
- * . TESTPROGRAMM FÜR WINDOWS-FUNKTIONEN . *
- * . TXL.C . *
- * . M.Beising, K.Bauer & TOOLBOX . *
- * ....................................... *
- *************************************************************************/
-
- #include <windows.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include <math.h>
- #include "txl.h"
- #include "global.h"
- #include "helpid.h"
-
- BOOL txlInit( hInstance )
- HANDLE hInstance;
- {
- PWNDCLASS ptxlClass;
- LoadString( hInstance, IDSNAME, (LPSTR)szAppName, 10 );
- LoadString( hInstance, IDSABOUT, (LPSTR)szAbout, 10 );
- MessageLength = LoadString( hInstance, IDSTITLE, (LPSTR)szMessage,20 );
-
- ptxlClass = (PWNDCLASS)LocalAlloc( LPTR, sizeof(WNDCLASS) );
- ptxlClass->hCursor = LoadCursor( NULL, IDC_ARROW );
- ptxlClass->hIcon = LoadIcon( hInstance, MAKEINTRESOURCE(TXLICON) );
- ptxlClass->lpszMenuName = (LPSTR)NULL;
- ptxlClass->lpszClassName = (LPSTR)szAppName;
- ptxlClass->hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
- ptxlClass->hInstance = hInstance;
- ptxlClass->style = CS_HREDRAW | CS_VREDRAW;
- ptxlClass->lpfnWndProc = txlWndProc;
- ptxlClass->cbClsExtra = 0;
- ptxlClass->cbWndExtra = 0;
-
- if (!RegisterClass( (LPWNDCLASS)ptxlClass ) )
- return FALSE;
- LocalFree( (HANDLE)ptxlClass );
- return TRUE;
- }
-
-
- int PASCAL WinMain( hInstance, hPrevInstance, lpszCmdLine, cmdShow )
- HANDLE hInstance, hPrevInstance;
- LPSTR lpszCmdLine;
- int cmdShow;
- {
- MSG msg;
- HWND hWnd;
- HMENU hMenu;
- HANDLE hAccelTable;
-
- if (!hPrevInstance) {
- if (!txlInit( hInstance ))
- return FALSE;
- }
- else {
- GetInstanceData( hPrevInstance, (PSTR)szAppName, 10 );
- GetInstanceData( hPrevInstance, (PSTR)szAbout, 10 );
- GetInstanceData( hPrevInstance, (PSTR)szMessage, 20 );
- GetInstanceData( hPrevInstance, (PSTR)&MessageLength, sizeof(int) );
- }
- hInst = hInstance;
- hWnd = CreateWindow((LPSTR)szAppName,
- (LPSTR)szMessage,
- WS_OVERLAPPEDWINDOW |WS_CLIPCHILDREN,
- wX,
- wY,
- wW,
- wH,
- (HWND)NULL,
- (HMENU) LoadMenu(hInstance,(PSTR)"theMenu"),
- (HANDLE)hInstance,
- (LPSTR)NULL
- );
- hWndglob=hWnd;
- ShowWindow( hWnd, cmdShow );
- GetClientRect(hWnd,(LPRECT)&rect);
-
- hWndEdit = CreateWindow((LPSTR)"Edit",
- (LPSTR)NULL,
- WS_CHILD | ES_MULTILINE | ES_AUTOVSCROLL |
- ES_AUTOHSCROLL | WS_VSCROLL | WS_HSCROLL,
- 0,
- 0,
- rect.right,
- rect.bottom,
- (HWND)hWnd,
- (HMENU)NULL,
- (HANDLE)hInstance,
- (LPSTR)NULL
- );
- lpprocAbout = MakeProcInstance( (FARPROC)About, hInstance );
- hMenu = GetSystemMenu(hWnd, FALSE);
- ChangeMenu(hMenu, 0, NULL, 999, MF_APPEND | MF_SEPARATOR);
- ChangeMenu(hMenu, 0, (LPSTR)szAbout, IDSABOUT, MF_APPEND | MF_STRING);
-
- MakeHelpPathName(szHelpFileName);
- hHelpCursor = LoadCursor(hInst,"HelpCursor");
-
- UpdateWindow( hWnd );
- SetFocus(hWnd);
-
- hAccelTable = LoadAccelerators( hInst, (LPSTR)"theAcc");
-
- while (TRUE)
- {
- if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
- {
- if(msg.message==WM_QUIT)
- break;
- if (TranslateAccelerator(hWnd, hAccelTable, (LPMSG) &msg) ==0 )
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- } else
- if(RUNBREAK)
- {
- if(WaitLine==NULL)
- {
- ActLine = FirstLine;
- HideCaret(hWndglob);
- ForCnt=0;
- }
- else
- ActLine = WaitLine;
- DoProgram ();
- }
- }
- return msg.wParam;
- }
-
-
- long FAR PASCAL txlWndProc( hWnd, message, wParam, lParam )
- HWND hWnd;
- unsigned message;
- WORD wParam;
- LONG lParam;
- {
- HDC hDC;
- PAINTSTRUCT ps;
- HANDLE hmenu;
- WORD wFormat;
- DWORD dwHelpContextId;
- int i;
- hmenu = GetMenu(hWnd);
- switch (message)
- {
-
- case WM_CHAR:
- if(Edit) break;
-
- if(RUNBREAK && wParam==0x1b)
- {
- RUNBREAK=FALSE;
- WaitLine=NULL;
- break;
- } else if(RUNBREAK)
- break;
- switch(wParam)
- {
- case '\r': if(!Readcnt) break;
- ResetError();
- ForCnt=0;
- *NewLine.Zeile='\0';
- InterAct ();
- memset(ReadBuffer,'\0',255);
- PRINTF(">");
- x=tm.tmMaxCharWidth+6;
- Readcnt=0;
- break;
- case '\b':
- if(!Readcnt)
- {
- Readcnt=0;
- ReadBuffer[0]='>';
- Piep();
- }
- else
- ReadBuffer[--Readcnt]='\0';
-
- default: if(wParam >= ' ' && Readcnt<255)
- ReadBuffer[Readcnt++] = wParam;
- x=(ReadBuffer[0]!= '>' ? (tm.tmMaxCharWidth+6):0);
- Zeile-=(tm.tmHeight+2);
- if(Zeile<0)Zeile=0;
- PRINTF(ReadBuffer);
- break;
- }
- break;
- case WM_CREATE :
- BLACK=RGB(0,0,0);
- BLAU=RGB(0,0,255);
- GRUEN=RGB(0,255,0);
- TURKIS=RGB(0,255,255);
- ROT=RGB(255,0,0);
- VIOLETT=RGB(255,0,255);
- GELB=RGB(255,255,0);
- WEISS=RGB(255,255,255);
- GRAU=RGB(128,128,128);
- hGrauBrush=CreateSolidBrush(GRAU);
- hWeissBrush=CreateSolidBrush(WEISS);
- hBlackBrush=CreateSolidBrush(BLACK);
- hBlauBrush=CreateSolidBrush(BLAU);
- hGruenBrush=CreateSolidBrush(GRUEN);
- hTurkisBrush=CreateSolidBrush(TURKIS);
- hRedBrush=CreateSolidBrush(ROT);
- hViolettBrush=CreateSolidBrush(VIOLETT);
- hGelbBrush=CreateSolidBrush(GELB);
- hGrauPen=CreatePen(0,1,GRAU);
- hWeissPen=CreatePen(0,1,WEISS);
- hBlackPen=CreatePen(0,1,BLACK);
- hBlauPen=CreatePen(0,1,BLAU);
- hGruenPen=CreatePen(0,1,GRUEN);
- hTurkisPen=CreatePen(0,1,TURKIS);
- hRedPen=CreatePen(0,1,ROT);
- hViolettPen=CreatePen(0,1,VIOLETT);
- hGelbPen=CreatePen(0,1,GELB);
- FirstLine=NULL;
- ActLine=NULL;
- FirstVar=NULL;
- SetFileName ("work.txl");
- break;
- case WM_SIZE :
- GetClientRect(hWnd,(LPRECT)&rect);
- MoveWindow(hWndEdit,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
- Zeile = 0;
- return DefWindowProc( hWnd, message, wParam, lParam );
- break;
- case WM_INITMENU:
- if (bHelp)
- {
- SetCursor(hHelpCursor);
- return TRUE;
- }
- if (wParam == hmenu)
- {
-
- (Mono) ? CheckMenuItem(hmenu,MN_MONO,MF_CHECKED) :
- CheckMenuItem(hmenu,MN_MONO,MF_UNCHECKED);
- (TXW4) ? CheckMenuItem(hmenu,MN_KURSIV,MF_CHECKED) :
- CheckMenuItem(hmenu,MN_KURSIV,MF_UNCHECKED);
- (TXW3) ? CheckMenuItem(hmenu,MN_UNTERS,MF_CHECKED) :
- CheckMenuItem(hmenu,MN_UNTERS,MF_UNCHECKED);
- (TYW3) ? CheckMenuItem(hmenu,MN_DURCHG,MF_CHECKED) :
- CheckMenuItem(hmenu,MN_DURCHG,MF_UNCHECKED);
- for (ini = 0;ini<8;ini++)
- (TXW1==ini) ? CheckMenuItem(hmenu,(ini+126),MF_CHECKED) :
- CheckMenuItem(hmenu,(ini+126),MF_UNCHECKED);
- CheckMenuItem(hmenu,MW_NORMAL,MF_UNCHECKED);
- CheckMenuItem(hmenu,MW_HEAVY,MF_UNCHECKED);
- if(TYW2==500)
- CheckMenuItem(hmenu,MW_NORMAL,MF_CHECKED);
- if(TYW2==600)
- CheckMenuItem(hmenu,MW_HEAVY,MF_CHECKED);
- for (ini = 8;ini<55;ini++)
- switch(ini)
- {
- case 9:
- case 11:
- case 17:
- case 23:
- case 25:
- case 31:
- case 33:
- case 34:
- case 41:
- case 43:
- case 46:
- case 47:
- case 49:
- case 51:
- case 53:
- case 55:
- break;
- default:
- (TXW2==ini) ? CheckMenuItem(hmenu,(ini),MF_CHECKED) :
- CheckMenuItem(hmenu,(ini),MF_UNCHECKED);
- break;
- }
-
- OpenClipboard(hWnd);
- wFormat = 0;
- while ((wFormat = EnumClipboardFormats(wFormat)) != 0 && wFormat != CF_TEXT);
- (wFormat == CF_TEXT ? (EnableMenuItem(hmenu,MN_PASTE,MF_ENABLED)):
- (EnableMenuItem(hmenu,MN_PASTE,MF_GRAYED)));
- CloseClipboard();
-
- if(Edit)
- {
- for(icnt=MN_UNDO;icnt<=MN_WERSETZE;icnt++)
- EnableMenuItem(hmenu,(WORD)icnt,MF_ENABLED);
- for(icnt=MN_EDITOR;icnt<=MN_RUN;icnt++)
- EnableMenuItem(hmenu,(WORD)icnt,MF_GRAYED);
- }
- else
- {
- for(icnt=MN_UNDO;icnt<=MN_WERSETZE;icnt++)
- EnableMenuItem(hmenu,(WORD)icnt,MF_GRAYED);
- for(icnt=MN_EDITOR;icnt<=MN_RUN;icnt++)
- EnableMenuItem(hmenu,(WORD)icnt,MF_ENABLED);
- }
-
- (Drucker ? (EnableMenuItem(hmenu,MN_SCREEN,MF_ENABLED)):
- (EnableMenuItem(hmenu,MN_SCREEN,MF_GRAYED)));
- }
- break;
-
- case WM_COMMAND:
-
- i=0;
- if(!bHelp && wParam == MN_HELP)
- {
- ReadBuffer[Readcnt] = '\0';
-
- for (i==0;i < (TOKMAX-TOKMIN-1);i++)
- if(strcmpi(ReadBuffer,&TokBefDesc[i].Befehl[0])==0)
- break;
- if(i>=(TOKMAX-TOKMIN-1)) i=0;
- else
- {
- i+=100;
- bHelp=TRUE;
- }
- }
-
- if (bHelp) {
- dwHelpContextId =
- (i > 99) ? (DWORD) i :
- (wParam == MN_HELP) ? (DWORD) HELPID_MENU_HELP :
- (wParam == MN_RUN) ? (DWORD) HELPID_MENU_RUN :
- (wParam == MN_LOAD) ? (DWORD) HELPID_MENU_LOAD :
- (wParam == MN_SAVE) ? (DWORD) HELPID_MENU_SAVE :
- (wParam == MN_LIST) ? (DWORD) HELPID_MENU_LIST :
- (wParam == MN_TYPESET) ? (DWORD) HELPID_MENU_TYPE :
- (wParam == MN_CLS) ? (DWORD) HELPID_MENU_CLS :
- (wParam == MN_MONO) ? (DWORD) HELPID_MENU_MONO :
- (wParam == MN_EDITOR) ? (DWORD) HELPID_MENU_EDITOR :
- (wParam == MN_INTERPR) ? (DWORD) HELPID_MENU_INTERPR:
- (wParam == MN_UNDO) ? (DWORD) HELPID_MENU_UNDO :
- (wParam == MN_CUT) ? (DWORD) HELPID_MENU_CUT :
- (wParam == MN_COPY) ? (DWORD) HELPID_MENU_COPY :
- (wParam == MN_PASTE) ? (DWORD) HELPID_MENU_PASTE :
- (wParam == MN_CLEAR) ? (DWORD) HELPID_MENU_CLEAR :
- (wParam == MN_SELECT) ? (DWORD) HELPID_MENU_SELECT :
- (wParam == MN_ELOAD) ? (DWORD) HELPID_MENU_ELOAD :
- (wParam == MN_ESAVE) ? (DWORD) HELPID_MENU_ESAVE :
- (wParam == MN_SEARCH) ? (DWORD) HELPID_MENU_SEARCH :
- (wParam == MN_WSEARCH) ? (DWORD) HELPID_MENU_WSEARCH :
- (wParam == MN_ERSETZE) ? (DWORD) HELPID_MENU_ERSETZE :
- (wParam == MN_WERSETZE) ? (DWORD) HELPID_MENU_WERSETZE :
- (DWORD) 0L;
-
- if (!dwHelpContextId)
- dwHelpContextId = (DWORD)HELPID_MENU_HELP;
- bHelp = FALSE;
- WinHelp(hWnd,szHelpFileName,HELP_CONTEXT,dwHelpContextId);
- break;
- }
-
- menuecommand(hWnd,wParam);
- break;
- case WM_SYSCOMMAND:
- switch (wParam)
- {
- case IDSABOUT:
- DialogBox( hInst, MAKEINTRESOURCE(ABOUTBOX), hWnd, lpprocAbout );
- break;
- default:
- return DefWindowProc( hWnd, message, wParam, lParam );
- }
- break;
- case WM_LBUTTONDOWN:
- if (bHelp)
- {
- bHelp = FALSE;
- WinHelp( hWnd, szHelpFileName, HELP_CONTEXT,
- (DWORD) HELPID_MENU_HELP );
- break;
- }
-
- return (DefWindowProc(hWnd, message, wParam, lParam));
-
-
- case WM_NCLBUTTONDOWN:
- if (bHelp) {
- dwHelpContextId = (DWORD)HELPID_MENU_HELP;
- bHelp = FALSE;
- WinHelp(hWnd,szHelpFileName,HELP_CONTEXT,dwHelpContextId);
- break;
- }
-
- return (DefWindowProc(hWnd, message, wParam, lParam));
- case WM_KEYDOWN:
- if(Anfang)
- {
- ccls();
- PRINTF(">");
- x=tm.tmMaxCharWidth+6;
- Zeile=0;
- Anfang=FALSE;
- }
- if (wParam == VK_F1) {
- if (GetKeyState(VK_SHIFT)<0) {
- bHelp = TRUE;
- SetCursor(hHelpCursor);
- return (DefWindowProc(hWnd, message, wParam, lParam));
- }
- else {
- WinHelp(hWnd,szHelpFileName,HELP_INDEX,0L);
- }
- }
-
- else if (wParam == VK_ESCAPE && bHelp) {
- bHelp = FALSE;
- SetCursor((HCURSOR)GetClassWord(hWnd,GCW_HCURSOR));
- }
- break;
-
- case WM_SETCURSOR:
- if (bHelp) {
- SetCursor(hHelpCursor);
- break;
- }
- return (DefWindowProc(hWnd, message, wParam, lParam));
- break;
-
- case WM_ENTERIDLE:
- if ((wParam == MSGF_MENU) && (GetKeyState(VK_F1) & 0x8000)) {
- bHelp = TRUE;
- PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0L);
- }
- break;
-
- case WM_DESTROY:
- cscreen();
- cneu();
- DeleteObject(hBlackBrush);
- DeleteObject(hBlauBrush);
- DeleteObject(hGruenBrush);
- DeleteObject(hTurkisBrush);
- DeleteObject(hRedBrush);
- DeleteObject(hViolettBrush);
- DeleteObject(hGelbBrush);
- DeleteObject(hWeissBrush);
- DeleteObject(hGrauBrush);
-
- DeleteObject(hBlackPen);
- DeleteObject(hBlauPen);
- DeleteObject(hGruenPen);
- DeleteObject(hTurkisPen);
- DeleteObject(hRedPen);
- DeleteObject(hViolettPen);
- DeleteObject(hGelbPen);
- DeleteObject(hWeissPen);
- DeleteObject(hGrauPen);
- if(bCaret)
- DestroyCaret();
- WinHelp(hWnd,szHelpFileName,HELP_QUIT,0L);
- PostQuitMessage( 0 );
- break;
-
- case WM_PAINT:
- if(Drucker)
- break;
- BeginPaint( hWnd, (LPPAINTSTRUCT)&ps );
- Zeile=0;
- if(Anfang)
- {
- txlBitmap(hWnd,ps.hdc);
- GetTextMetrics(ps.hdc,(LPTEXTMETRIC)&tm);
- CreateCaret(hWnd,1,tm.tmAveCharWidth,tm.tmHeight);
- bCaret=TRUE;
- ShowCaret(hWnd);
- }
- EndPaint( hWnd, (LPPAINTSTRUCT)&ps );
- if(!Edit) {
- if(Readcnt)
- PRINTF(ReadBuffer);
- else
- {
- x=0;
- Zeile=0;
- PRINTF(">");
- }
- Zeile-=(tm.tmHeight+2);
- }
- break;
- case WM_SETFOCUS:
- if(!Edit)
- ErzeugeCursor(hWnd);
- else SetFocus(hWndEdit);
- break;
- case WM_KILLFOCUS:
- if(bCaret)
- {
- DestroyCaret();
- bCaret=FALSE;
- }
- default:
- return DefWindowProc( hWnd, message, wParam, lParam );
- break;
- }
- return(0L);
- }
-
- void txlBitmap(HWND hWnd,HDC hDC)
- {
- HDC hcDC;
- hBitmap = LoadBitmap(hInst,(LPSTR)"toolbox");
- hcDC = CreateCompatibleDC(hDC);
-
- hOldBitmap = SelectObject(hcDC,hBitmap);
- SetStretchBltMode(hDC,WHITEONBLACK);
- SetTextColor(hDC,GELB);
- SetBkColor(hDC,ROT);
- StretchBlt(hDC,100,10,72,72,hcDC,0,0,72,72,SRCCOPY);
- SetTextColor(hDC,GRUEN);
- SetBkColor(hDC,BLAU);
- StretchBlt(hDC,200,55,72,72,hcDC,0,0,72,72,SRCCOPY);
- SetTextColor(hDC,VIOLETT);
- SetBkColor(hDC,GELB);
- StretchBlt(hDC,300,100,72,72,hcDC,0,0,72,72,SRCCOPY);
-
- DeleteObject(SelectObject(hcDC,hOldBitmap));
- DeleteDC(hcDC);
- }
-
- void InterAct ()
- {
- char Ausgabe[30];
- LinePos = ReadBuffer;
- SkipChar ();
- Scan ();
-
- if (Steuer == ZIFFER) {
- NewLine.LineNumber = atoi (ScanBuffer);
- ActLine = 

- if (MakeToken () == OK)
- InsIntLine ();
- else {
- sprintf (Ausgabe,"%s %03d %s ","# Zeile",
- NewLine.LineNumber,"ist gel÷scht! #");
-
- PRINTF (Ausgabe);
- DelLine (NewLine.LineNumber);
- }
- }
- else {
- ActLine = 

- SkipChar ();
- LinePos = ReadBuffer;
- if (MakeToken () == OK) {
- LinePos = ActLine->Zeile;
- InterpLine ();
- }
- else {
- sprintf (ReadBuffer,"# Befehl <%s> unbekannt #",ScanBuffer);
- serror (ReadBuffer);
- }
- }
- }
-
- int InterpLine ()
- {
- int i,error;
- i = 0xff & *LinePos;
- if ((i >= TOKMIN) && (i <= TOKMAX)) {
- LinePos++;
- SkipChar ();
- error = TokBefDesc[i-TOKMIN].function ();
- }
- else {
- serror ("# Unbekannter Befehl! #");
- error = FALSE;
- }
- return (error);
- }
-
- int DoProgram ()
- {
- int error = TRUE;
- if(!RUNBREAK)
- {
- SetCursor(LoadCursor(NULL,IDC_WAIT));
- SetCursorPos(100,30);
- ForCnt=0;
- }
- while (ActLine && error && !TreeError)
- {
- LinePos = ActLine->Zeile;
- GetNextLine = TRUE;
- error = InterpLine ();
- if (GetNextLine)
- ActLine = ActLine->NextZeile;
- WaitLine = ActLine;
- if (IntError || RUNBREAK)
- break;
- }
- if(!RUNBREAK)
- SetCursor(LoadCursor(NULL,IDC_ARROW));
- if(!ActLine) RUNBREAK=FALSE;
- return (error);
- }
-
- int MakeToken ()
- {
- int i,j;
- int LineSym;
- char *TokLine;
- TokLine = ActLine->Zeile;
- if (Scan () == UNEOL)
- return (ERROR_1);
- if (TestBefehl(&i) == 0) {
- *TokLine++ = i + TOKMIN;
- *TokLine = '\0';
- if (TokBefDesc[i].CopyRest) {
- strcat (TokLine,LinePos);
- return (OK);
- }
- else
- for (LineSym = TokBefDesc[i].ParaCount;
- LineSym ; LineSym--) {
- if (Scan () == SCANOK)
- if (TestBefehl(&i) == 0) {
- *TokLine++ = i + TOKMIN;
- *TokLine = '\0';
- }
- else {
- strcat (TokLine,ScanBuffer);
- TokLine = strchr (TokLine,'\0');
- }
- else
- return (ERROR_1);
- }
- }
- else
- return (ERROR_1);
- return (OK);
- }
-
- int TestBefehl (int *Befehl)
- {
- int i,j;
-
- for (i = 0;
- (TokBefDesc[i].function != NULL) &&
- ((j = strcmp(TokBefDesc[i].Befehl,ScanBuffer)) != 0)
- ; i++) {
- }
- *Befehl = i;
- return (j);
- }
-
- void InsIntLine ()
- {
- PRGZEILE *NewLine;
- PRGZEILE *InsZeile;
-
- NewLine = (PRGZEILE NEAR *)LocalAlloc (LPTR,sizeof(PRGZEILE));
- if (NewLine == NULL) {
- PRINTF ("#### Kein Speicherplatz mehr vorhanden! ####");
- return;
- }
-
- if (!FirstLine) {
- FirstLine = NewLine;
- NewLine->LineNumber = ActLine->LineNumber;
- strcpy (NewLine->Zeile,ActLine->Zeile);
- NewLine->NextZeile = NULL;
- NewLine->PrevZeile = NULL;
- return;
- }
-
- if (FindInsPos(ActLine->LineNumber,&InsZeile)) {
- strcpy (InsZeile->Zeile,ActLine->Zeile);
- LocalFree ((LOCALHANDLE)NewLine);
- }
- else {
- NewLine->LineNumber = ActLine->LineNumber;
- strcpy (NewLine->Zeile,ActLine->Zeile);
- if ((InsZeile == FirstLine) &&
- (InsZeile->LineNumber < NewLine->LineNumber)) {
- NewLine->NextZeile = NULL;
- NewLine->PrevZeile = InsZeile;
- InsZeile->NextZeile = NewLine;
- return;
- }
-
- if (InsZeile->NextZeile) {
- NewLine->NextZeile = InsZeile;
- NewLine->PrevZeile = InsZeile->PrevZeile;
-
- if (InsZeile->PrevZeile)
- InsZeile->PrevZeile->NextZeile = NewLine;
- else
- FirstLine = NewLine;
- InsZeile->PrevZeile = NewLine;
- }
- else {
- NewLine->NextZeile = NULL;
- NewLine->PrevZeile = InsZeile;
- InsZeile->NextZeile = NewLine;
- }
- }
- }
-
- int FindInsPos (LineNumber,InsPos)
- int LineNumber;
- PRGZEILE **InsPos;
- {
- PRGZEILE *FindZeile,*LastLine;
-
- FindZeile = FirstLine;
-
- while ((FindZeile != NULL) &&
- (FindZeile->LineNumber < LineNumber)) {
- LastLine = FindZeile;
- FindZeile = FindZeile->NextZeile;
- }
- if (!FindZeile)
- FindZeile = LastLine;
-
- if (FindZeile->LineNumber == LineNumber) {
- *InsPos = FindZeile;
- return (TRUE);
- }
- else {
- *InsPos = FindZeile;
- return (FALSE);
- }
- }
-
- int
- DelLine (int LineNumber)
- {
- PRGZEILE *InsPos;
- if (FindInsPos (LineNumber,&InsPos)) {
- if ((InsPos->NextZeile == NULL) &&
- (InsPos->PrevZeile == NULL))
- FirstLine = NULL;
- else
- if (InsPos == FirstLine) {
- FirstLine = InsPos->NextZeile;
- InsPos->NextZeile->PrevZeile = NULL;
- }
- else {
- if (InsPos->NextZeile == NULL)
- InsPos->PrevZeile->NextZeile = NULL;
- else {
- InsPos->PrevZeile->NextZeile = InsPos->NextZeile;
- InsPos->NextZeile->PrevZeile = InsPos->PrevZeile;
- }
- }
- LocalFree ((LOCALHANDLE)InsPos);
- return (TRUE);
- }
- else
- return (FALSE);
- }
-
- /* SCANNER */
-
- int Scan ()
- {
- int test;
- char *buffer;
-
- GetChar ();
- SkipSpace ();
-
- if ((test = isalpha(Charakter)) != FALSE)
- test = ALPHA;
- else
- if ((test = isdigit (Charakter)) != FALSE)
- test = ZIFFER;
- else
- test = Charakter;
-
- switch (test) {
- case ALPHA :
- Steuer = ALPHA;
- GetBezeichner (ScanBuffer);
- NoSkipChar ();
- break;
- case ZIFFER :
- GetZahl (ScanBuffer);
- NoSkipChar ();
- break;
- case '"' :
- GetString (ScanBuffer);
- if(IntError)
- Steuer = EOLCHAR;
- else
- Steuer = STRING;
- break;
- case '?' :
- case '(' :
- case ')' :
- case '=' :
- case '<' :
- case '>' :
- case '/' :
- case '*' :
- case '+' :
- case '-' :
- ScanBuffer[0] = Charakter;
- ScanBuffer[1] = '\0';
- Steuer = SONDER;
- break;
- case ',':
- Steuer = TRENNER;
- break;
- case ';':
- ScanBuffer[0] = Charakter;
- ScanBuffer[1] = '\0';
- Steuer = EOLCHAR;
- break;
- case EOLFEHLER:
- return (UNEOL);
- default :
- Steuer = UNKNOWN;
- fatal_error ("# Ungⁿltiges Zeichen gefunden! #");
- return (INVCHAR);
- }
-
- return (SCANOK);
- }
-
- void SkipSpace ()
- {
- while (Charakter == SPACE)
- GetChar (); /* Leerzeichen ueberlesen */
- }
-
- void GetChar ()
- {
- if (NeedNext == TRUE)
- GetNextChar ();
- else
- NeedNext = TRUE;
- }
-
- void GetNextChar ()
-
- {
- if (*LinePos != '\0') {
- Charakter = *LinePos++;
- }
- else
- Charakter = EOLFEHLER;
- }
-
- void GetBezeichner (char *buffer)
- {
- int count = 0;
-
- while ((Charakter == '$') || (isalpha (Charakter) || isdigit (Charakter)) &&
- (Charakter != ';') && (count++ < NAMLEN))
- {
- *buffer++ = Charakter;
- GetChar ();
- }
- *buffer = '\0';
- }
-
- void GetZahl (char *buffer)
- {
- int count = 0;
- Steuer=ZIFFER;
- while (((Charakter == '.') || isdigit (Charakter)) &&
- (count++ < NAMLEN))
- {
- if (Charakter == '.') Steuer = FLONUM;
- *buffer++ = Charakter;
- GetChar ();
- }
- *buffer = '\0';
- }
-
- void GetString (char *buffer)
- {
- int count = 0;
-
- GetChar ();
-
- while ( (Charakter != '"') &&
- (count++ < ZEILENLAENGE))
- {
- *buffer++ = Charakter;
- GetChar ();
- *buffer = '\0';
- if (Charakter == EOLFEHLER) {
- fatal_error ("Stringende lΣ▀t sich nicht finden!");
- break;
- }
- }
- GetChar ();
- }
-
- void GetGeklammert (char *buffer)
- {
- int count = 0;
- int nextkl;
- nextkl=1;
- while ((nextkl) && (count++ < 200))
- {
- *buffer++ = Charakter;
- GetChar ();
- if(Charakter == '(') nextkl++;
- if(Charakter == ')') nextkl--;
- if (Charakter == EOLFEHLER)
- fatal_error ("Rechte Klammer nicht gefunden! ");
-
- }
- *buffer++ = Charakter;
- *buffer = '\0';
- GetChar ();
- }
-
- void
- NoSkipChar ()
- {
- NeedNext = FALSE;
- }
-
- void
- SkipChar ()
- {
- NeedNext = TRUE;
- }
-
- int cset(void)
- {
- VAR Variable;
-
- Scan ();
- if (Steuer == ALPHA) {
- strcpy (Variable.VarName,ScanBuffer);
- Scan ();
- if ((Steuer == SONDER) && (*ScanBuffer == '=')) {
- SetVar (&Variable,VARIABLE);
- }
- else
- serror ("# Zuweisung erwartet! #");
- }
- else
- serror ("# Variablenname erwartet! #");
-
- return (OK);
- }
-
- int cwtitle()
- {
- Scan();
- if (Steuer == STRING)
- SetWindowText(hWndglob,ScanBuffer);
- else
- SetWindowText(hWndglob,szMessage);
- return (OK);
- }
-
- int KlammerTok()
- {
- int Error,cnt,vcnt;
- cnt=vcnt=0;
- Error = Scan();
-
- if((Steuer == SONDER) && (*ScanBuffer == '?'))
- return (63);
- if((Steuer == SONDER) && (*ScanBuffer == '('))
- {
- do
- {
- SkipChar();
- Error = Scan();
-
- if((Steuer == SONDER) && (*ScanBuffer == ')')) break;
-
- switch(Steuer)
- {
- case ALPHA:
- break;
- case TRENNER:
- break;
- case ZIFFER:
- break;
- case EOLCHAR:
- default:
- Error = UNEOL;
- break;
- }
- if(Steuer==ZIFFER || Steuer==ALPHA)
- {
- vcnt++;
- switch(vcnt)
- {
- case 1: if(Steuer == ALPHA) XW1 = ReadInt(ScanBuffer);
- else
- XW1 = atoi(ScanBuffer);
- /* Hier könnte ^ jeweils auch LinePos=ScanBuffer an
- CalcExpression() und somit Formeln als Parameter
- übergeben werden.
- z.B. bei ellipse (x*pi+4,etc......);
- */
- break;
- case 2: if(Steuer == ALPHA) YW1 = ReadInt(ScanBuffer);
- else
- YW1 = atoi(ScanBuffer);
- break;
- case 3: if(Steuer == ALPHA) XW2 = ReadInt(ScanBuffer);
- else
- XW2 = atoi(ScanBuffer);
- break;
- case 4: if(Steuer == ALPHA) YW2 = ReadInt(ScanBuffer);
- else
- YW2 = atoi(ScanBuffer);
- break;
- case 5: if(Steuer == ALPHA) XW3 = ReadInt(ScanBuffer);
- else
- XW3 = atoi(ScanBuffer);
- break;
- case 6: if(Steuer == ALPHA) YW3 = ReadInt(ScanBuffer);
- else
- YW3 = atoi(ScanBuffer);
- break;
- case 7: if(Steuer == ALPHA) XW4 = ReadInt(ScanBuffer);
- else
- XW4 = atoi(ScanBuffer);
- break;
- case 8: if(Steuer == ALPHA) YW4 = ReadInt(ScanBuffer);
- else
- YW4 = atoi(ScanBuffer);
- break;
- case 9: if(Steuer == ALPHA) TOutP = ReadInt(ScanBuffer);
- else
- TOutP = atoi(ScanBuffer);
- break;
- case 10: if(Steuer == ALPHA) TCliP = ReadInt(ScanBuffer);
- else
- TCliP = atoi(ScanBuffer);
- break;
- case 11: if(Steuer == ALPHA) TQual = ReadInt(ScanBuffer);
- else
- TQual = atoi(ScanBuffer);
- break;
- case 12: if(Steuer == ALPHA) oem = ReadInt(ScanBuffer);
- else
- oem = atoi(ScanBuffer);
- (oem != 0 ? (oem == 2 ? 2 : 255) : 0);
- break;
- case 13: if(Steuer == ALPHA) TESCP = ReadInt(ScanBuffer);
- else
- TESCP = atoi(ScanBuffer);
- break;
- case 14: if(Steuer == ALPHA) TORIENT = ReadInt(ScanBuffer);
- else
- TORIENT = atoi(ScanBuffer);
- break;
- }
- }
- } while(Error != UNEOL);
-
- }
-
- return (IntError ? FALSE : vcnt);
- }
-
- void Paramtozeichne(int was,int hole)
- {
- if(KlammerTok()==hole)
- Zeichne(was); else
- fatal_error ("# PARAMETER-ERROR #");
- }
-
-
- HDC GetPrinterDC()
- {
- char szPrinter[64];
- char *szDevice,*szDriver,*szOutput;
- GetProfileString("windows","device","",szPrinter,64);
- if((szDevice = strtok(szPrinter,",")) &&
- (szDriver = strtok(NULL, ", ")) &&
- (szOutput = strtok(NULL, ", ")))
- return CreateDC(szDriver,szDevice,szOutput,NULL);
- return 0;
- }
-
- int csetprint()
- {
- if((hPrnDC=GetPrinterDC())==NULL)
- {
- serror("# DRUCKER-INIT-ERROR #");
- return(ERROR);
- }
-
- if(Escape(hPrnDC,STARTDOC,sizeof szMessage - 1,szMessage,NULL) > 0)
- Drucker=TRUE;
- else
- {
- serror("# DRUCKER-OUTPUT-ERROR #");
- return(ERROR);
- }
- return(OK);
- }
-
- int cscreen()
- {
- if(Drucker)
- {
- if(Escape(hPrnDC,NEWFRAME,0,NULL,NULL) > 0)
- Escape(hPrnDC,ENDDOC,0,NULL,NULL);
- DeleteDC(hPrnDC);
- Drucker=FALSE;
- }
- }
-
- void makefont()
- {
- int Art,TFamily;
- Art = (TXW1 >= 0 && TXW1 < 8) ? TXW1 : 0;
- mF.lfHeight = TXW2;
- mF.lfWidth = TYW1;
- mF.lfEscapement = TESCP;
- mF.lfOrientation = TORIENT;
- mF.lfWeight = TYW2;
- mF.lfItalic = TXW4;
- mF.lfUnderline = TXW3;
- mF.lfStrikeOut = TYW3;
- mF.lfCharSet = oem;
- switch(TQual)
- {
- default:
- case 0: mF.lfQuality = DEFAULT_QUALITY; break;
- case 1: mF.lfQuality = DRAFT_QUALITY; break;
- case 2: mF.lfQuality = PROOF_QUALITY; break;
- }
- switch(TOutP)
- {
- default:
- case 0: mF.lfOutPrecision = OUT_DEFAULT_PRECIS; break;
- case 1: mF.lfOutPrecision = OUT_CHARACTER_PRECIS; break;
- case 2: mF.lfOutPrecision = OUT_STRING_PRECIS; break;
- case 3: mF.lfOutPrecision = OUT_STROKE_PRECIS; break;
- }
- switch(TCliP)
- {
- default:
- case 0: mF.lfClipPrecision = CLIP_DEFAULT_PRECIS; break;
- case 1: mF.lfClipPrecision = CLIP_CHARACTER_PRECIS; break;
- case 2: mF.lfClipPrecision = CLIP_STROKE_PRECIS; break;
- }
-
- TFamily=TFam / 10;
-
- switch(TFamily)
- {
- default:
- case 1: mF.lfPitchAndFamily = DEFAULT_PITCH; break;
- case 2: mF.lfPitchAndFamily = FIXED_PITCH; break;
- case 3: mF.lfPitchAndFamily = VARIABLE_PITCH; break;
- }
-
- TFamily=TFam % 10;
-
- switch(TFamily)
- {
- default:
- case 0: mF.lfPitchAndFamily |= FF_DONTCARE; break;
- case 1: mF.lfPitchAndFamily |= FF_DECORATIVE; break;
- case 2: mF.lfPitchAndFamily |= FF_MODERN; break;
- case 3: mF.lfPitchAndFamily |= FF_ROMAN; break;
- case 4: mF.lfPitchAndFamily |= FF_SCRIPT; break;
- case 5: mF.lfPitchAndFamily |= FF_SWISS; break;
- }
- strcpy(mF.lfFaceName,MFONT[Art]);
- FontChange=TRUE;
- }
-
- int ctexttype()
- {
- int Menge;
- Menge=KlammerTok();
- if (Menge==63)
- {
- PRINTF("Anzahl der Parameter 1 - 14 m÷glich <!!Vorsicht!!> bei P. 13-14");
- PRINTF("(Art,Hch,Br,Fat,U.st,D.gst,Kurs,Fam,OutP,Clip,Qual,OEM,ESC,ORIENT)");
- return(OK);
- } else
-
- if(Menge > 0 && Menge < 15)
- {
- switch(Menge)
- {
- case 14:
- case 13:
- case 12: TFam=YW4;
- case 11:
- case 10:
- case 9 :
- case 8 :
- case 7 : TXW4=XW4;
- case 6 : TYW3=YW3;
- case 5 : TXW3=XW3;
- case 4 : TYW2=YW2;
- case 3 : TXW2=XW2;
- case 2 : TYW1=YW1;
- case 1 : TXW1=XW1;
- default:
- break;
- }
- makefont();
- }
- else
- {
- FontChange=FALSE;
- TextCol = -1;
- Backgrd = 15;
- if(bCaret)
- {
- DestroyCaret();
- bCaret = FALSE;
- }
- }
- return(OK);
- }
- int clocate()
- {
- if(KlammerTok()== 2)
- {
- x=XW1;
- Zeile=YW1;
- locate=TRUE;
- }
- return(OK);
- }
-
- int cllist()
- {
- /* Programm darf nicht länger sein als Druckerseite
- Ergänzung in Funktion TEXTZEILE(...) if(Drucker && Zeile >= YPage)
- dann neue Seite..... YPage=GetDeviceCaps(hPrnDC,VERTRES)
- */
- csetprint();
- clist();
- cscreen();
- }
- int ctextcol()
- {
- TextCol= (KlammerTok()==1) ? XW1 : -1;
- return (OK);
- }
- int cpencolor()
- {
- Pen = (KlammerTok()==1) ? XW1 : 0;
- return (OK);
- }
-
- int ccolor()
- {
- Brush= (KlammerTok()==1) ? XW1 : 0;
- return (OK);
- }
-
- int cbackgrd()
- {
- Backgrd= (KlammerTok()==1) ? XW1 : 15;
- return (OK);
- }
-
- int cviereck()
- {
- Paramtozeichne(9,8);
- return(OK);
- }
-
- int crectline()
- {
- Paramtozeichne(10,4);
- return(OK);
- }
-
-
-
- int crectangle()
- {
- Paramtozeichne(1,4);
- return(OK);
- }
-
- int croundrect()
- {
- Paramtozeichne(3,6);
- return(OK);
- }
-
- int cellipse()
- {
- Paramtozeichne(2,4);
- return(OK);
- }
-
- int cpie()
- {
- Paramtozeichne(6,8);
- return(OK);
- }
-
- int carc()
- {
- Paramtozeichne(4,8);
- return(OK);
- }
-
- int cpolyline()
- {
- Paramtozeichne(7,8);
- return(OK);
- }
-
- int clineto()
- {
- Paramtozeichne(0,4);
- return(OK);
- }
- int cflodfil()
- {
- Paramtozeichne(8,3);
- return(OK);
- }
- int csetpxl()
- {
- Paramtozeichne(5,3);
- return(OK);
- }
-
-
- int cmove()
- {
- if(KlammerTok()== 4)
- MoveWindow(hWndglob,XW1,YW1,XW2,YW2,TRUE);
- else
- MoveWindow(hWndglob,wX,wY,wW,wH,TRUE);
- return(OK);
- }
-
- int cinput()
- {
- VAR Variable;
-
- Scan();
- if (Steuer == STRING)
- {
- sprintf (Questr,"%s",ScanBuffer);
- Scan();
- } else strcpy(Questr," Zahl eingeben :");
-
- if (Steuer == ALPHA)
- {
- strcpy (Variable.VarName,ScanBuffer);
- lpProcTextBox = MakeProcInstance(Input, hInst);
- DialogBox(hInst,"TextBox",hWndglob,lpProcTextBox);
- FreeProcInstance(lpProcTextBox);
- Variable.VarType = FLONUM;
- SetVar(&Variable,INPUT);
- SetCursor(LoadCursor(NULL,IDC_WAIT));
- return (OK);
- } else
- {
-
- PRINTF ("# Variablen-Name ? #");
- return (FALSE);
- }
- }
-
- int cinline()
- {
- VAR Variable;
-
- Scan();
- if (Steuer == STRING)
- {
- sprintf (Questr,"%s",ScanBuffer);
- Scan();
- } else strcpy(Questr," Text eingeben :");
-
- if (Steuer == ALPHA)
- {
- strcpy (Variable.VarName,ScanBuffer);
- lpProcTextBox = MakeProcInstance(Input, hInst);
- DialogBox(hInst,"TextBox",hWndglob,lpProcTextBox);
- FreeProcInstance(lpProcTextBox);
- Variable.VarType = STRING;
- SetVar(&Variable,INLINE);
- SetCursor(LoadCursor(NULL,IDC_WAIT));
- return (OK);
- } else
- {
-
- PRINTF ("# Variablen-Name ? #");
- return (FALSE);
- }
- }
- int ccursor(void)
- {
- Scan();
- if(strcmp(ScanBuffer,"off") == 0)
- HideCaret(hWndglob);
- else
- if(strcmp(ScanBuffer,"on") == 0)
- ShowCaret(hWndglob);
- }
- int cdruck(void)
- {
- char *such;
- int Error;
- memset(PrintBuf,'\0',ZEILENLAENGE-1);
- Mehr=(strchr(LinePos,',')) ? TRUE : FALSE;
- Scan();
-
- if(Steuer != EOLCHAR)
- {
- do {
- switch (Steuer) {
- case EOLCHAR:
- Mehr=FALSE;
- break;
- case STRING:
- if(!Mehr || !PrintBuf[0])
- sprintf (PrintBuf,"%s",ScanBuffer);
- else strcat(PrintBuf,ScanBuffer);
- break;
- case ZIFFER:
- if(!Mehr || !PrintBuf[0])
- sprintf (PrintBuf,"%s",ScanBuffer);
- else strcat(PrintBuf,ScanBuffer);
- break;
- case ALPHA:
- PrintVar (ScanBuffer);
- break;
- case TRENNER:
- Mehr= TRUE;
- break;
- case SONDER:
- if(*ScanBuffer == '(')
- {
- GetGeklammert (Questr);
- if(IntError) return ERROR_1;
- such=LinePos;
- LinePos=Questr;
- if (CalcExpression (&Variable) == ERROR_1)
- {
- serror ("# CalcExpr. Fehler! #");
- return (OK);
- }
- sprintf(IntegerZahl,"%-18.6f",
- Variable.VarWert.variable.Flotype);
- Nullenweg();
- LinePos=such;
- if(!Mehr || !PrintBuf[0])
- strcpy (PrintBuf,IntegerZahl);
- else strcat(PrintBuf,IntegerZahl);
-
- }
- break;
- default :
- serror ("# Nicht druckbarer Ausdruck! #");
- return (OK);
- break;
- }
- Error=Scan();
-
- } while (Error != UNEOL && Steuer != EOLCHAR);
- PRINTF(PrintBuf);
- }
- return (OK);
- }
- int messagebox()
- {
- PrMsgBox=TRUE;
- return cdruck();
- }
-
- int cgoto(void)
- {
- int error,LineNumber;
-
- Scan ();
- if ((Steuer == ZIFFER) && FirstLine) {
- LineNumber = atoi (ScanBuffer);
- if (FindInsPos (LineNumber,&ActLine)) {
- ActLine = ActLine->PrevZeile;
- GetNextLine = FALSE;
- return (OK);
- }
- else {
-
- PRINTF ("# Sprungziel nicht gefunden! #");
- return (FALSE);
- }
- }
- else
- {
-
- PRINTF ("# Kein Programm im Speicher! #");
- }
- return (OK);
- }
-
- int cwhile()
- {
- int i;
- if(ActLine->NextZeile!=NULL)
- forcalc[ForCnt].Goto = ActLine->NextZeile;
- else
- {
- serror("# WHILE without WEND #");
- return(ERROR_1);
- }
-
- if((forcalc[ForCnt].whilestr = (char NEAR *)LocalAlloc (LPTR,81*sizeof(char)))==NULL)
- {
- serror("# kein Speicher mehr #");
- return(ERROR_1);
- } else i=0;
-
- while((forcalc[ForCnt].whilestr[i]=LinePos[i]) && i < 81) i++;
-
- if (CalcExpression (&Variable) == ERROR_1) return (ERROR_1);
- else i=1;
-
- if (Variable.VarWert.variable.Flotype <= 0.0)
- do
- switch(ActLine->NextZeile->Zeile[0])
- {
- case (char)TOKWHILE: i++; break;
- case (char)TOKWEND: i--; break;
- }
- while((ActLine=ActLine->NextZeile)!=NULL && i);
-
- if(ForCnt < 11)
- ForCnt++;
- else serror ("# too many while while.... #");
- return (OK);
- }
-
- int cwend()
- {
- PRGZEILE *NEXT;
-
- if(ForCnt && forcalc[ForCnt-1].whilestr != NULL)
- {
- NEXT= ActLine;
- GetNextLine = FALSE;
- LinePos=forcalc[ForCnt-1].whilestr;
- if (CalcExpression (&Variable) == ERROR_1) return (ERROR_1);
-
- if(Variable.VarWert.variable.Flotype > 0.0)
- ActLine = forcalc[ForCnt-1].Goto;
- else
- {
- if(ForCnt)ForCnt--;
- LocalFree ((LOCALHANDLE)(forcalc[ForCnt].whilestr));
- ActLine = NEXT->NextZeile;
- }
- } else serror ("# WEND WITHOUT WHILE #");
- return (OK);
- }
-
- int cfor()
- {
- int error;
- unsigned char *Nuntius;
- BOOL STEP;
- STEP = FALSE;
- PrintBuf[0]='\0';
- if(ActLine->NextZeile!=NULL)
- forcalc[ForCnt].Goto = ActLine->NextZeile;
- else
- {
- serror("# FOR without NEXT #");
- return(ERROR_1);
- }
- Scan();
- if(Steuer != ALPHA)
- {
- serror ("# for ? #");
- return(ERROR_1);
- }
- strcpy (Variable.VarName,ScanBuffer);
- Scan();
- if(Steuer != SONDER && (*ScanBuffer != '='))
- {
- serror ("# Zuweisung ? #");
- return(ERROR_1);
- }
- Scan();
- do
- {
- strcat(PrintBuf,ScanBuffer);
- error = Scan();
- } while(strcmp(ScanBuffer,"downto") != 0 &&
- strcmp(ScanBuffer,"to") != 0 && error !=UNEOL);
-
- if(strcmp("to",ScanBuffer) != 0)
- {
- if( strcmp(ScanBuffer,"downto") != 0)
- {
- serror ("# TO expect #");
- return(ERROR_1);
- }
- }
- if(strcmp(ScanBuffer,"downto") == 0)
- forcalc[ForCnt].step = -1.0;
- else
- forcalc[ForCnt].step = 1.0;
- Nuntius=LinePos;
- LinePos = PrintBuf;
- SetVar (&Variable,FORNEXT);
- memset(PrintBuf,'\0',ZEILENLAENGE-1);
- LinePos=Nuntius;
- Scan();
- Scan();
- while(strcmp(ScanBuffer,"step") != 0 && error !=UNEOL)
- {
- strcat(PrintBuf,ScanBuffer);
- error = Scan();
- if(strcmp("step",ScanBuffer) == 0) STEP =TRUE;
- }
- Nuntius=LinePos;
- LinePos = PrintBuf;
- if (CalcExpression (&Variable) == ERROR_1) return (ERROR_1);
- forcalc[ForCnt].toY = Variable.VarWert.variable.Flotype;
-
- if(STEP)
- {
- LinePos=Nuntius;
- if (CalcExpression (&Variable) == ERROR_1) return (ERROR_1);
- forcalc[ForCnt].step = Variable.VarWert.variable.Flotype;
- }
-
- if(ForCnt < 11)
- ForCnt++;
- else serror ("# too many FOR FOR.... #");
-
- return (OK);
- }
-
- int cnext()
- {
- VAR *Variable;
- PRGZEILE *NEXT;
-
- if(forcalc[ForCnt-1].forX != NULL)
- {
- NEXT= ActLine;
- GetNextLine = FALSE;
- Variable = forcalc[ForCnt-1].forX;
-
- if((forcalc[ForCnt-1].step > 0.0 &&
- Variable->VarWert.variable.Flotype < forcalc[ForCnt-1].toY) ||
- (forcalc[ForCnt-1].step < 0.0 &&
- Variable->VarWert.variable.Flotype > forcalc[ForCnt-1].toY))
- {
- Variable->VarWert.variable.Flotype += forcalc[ForCnt-1].step;
- ActLine = forcalc[ForCnt-1].Goto;
- } else
- {
- if(ForCnt) ForCnt--;
- ActLine = NEXT->NextZeile;
- }
- } else serror ("# NEXT WITHOUT FOR #");
- return (OK);
- }
-
- int cif()
- {
- int result = OK;
- if (CmpVar ()) {
- ActLine = ActLine->NextZeile;
- LinePos = ActLine->Zeile;
- result = InterpLine ();
- ActLine = ActLine->NextZeile;
- }
- else
- {
- if (ActLine->NextZeile)
- ActLine = ActLine->NextZeile;
- else
- serror ("# Kein Else-Zweig vorhanden! #");
- }
- return (result);
- }
-
- int ccls()
- {
- HDC hDC;
- HideCaret(hWndglob);
- Zeile = 0;
- hDC = GetDC(hWndglob);
- Rectangle(hDC,rect.left-1,rect.top-1,rect.right+1,rect.bottom+1);
- ReleaseDC(hWndglob,hDC);
- ShowCaret(hWndglob);
- return (OK);
- }
-
- int cbeep()
- {
- Piep();
- return OK;
- }
-
-
- /* Funktion 'MessageBeep' gehört normalerweise zu Windows
- , macht aber noch Probleme! Daher Ersatzfunktion "Piep".
- Sollte in neueren SDK-Versionen die "MessageBeep()"-
- Funktion fehlerfrei sein, empfiehlt es sich, sie gegen
- die "direkte" Piep-Routine auszutauschen!!!!!!!!!!! */
-
- Piep()
- {
- _asm
- {
- push ax
- push bx
- mov al, 182
- out 43h, al
-
- mov ax, 6833 ;beliebiger Tonwert
- out 42h, al ;low-Byte an Timer-Counter
- mov al, ah ;high-Byte übertragen
- out 42h, al ;an Timer-Counter übertragen
- in al, 61h ;Lautsprecher-Kontroll-Bit einlesen
- or al, 11b ;unteren Bits schalten Zustand ON
- out 61h, al ;Lautsprecher einschalten
- mov bx, 0
- mov ax, 0
-
- warte:
- inc bl
- cmp bl, 255h ;erster Zähler der dreistufigen Warteschleife
- jne warte
-
- sub bl, bl
- inc bh
- cmp bh, 255 ;zweiter Zähler
- jne warte
-
- sub bl, bl
- sub bh, bh
- inc al
- cmp al, 25 ;dritter Zähler
- jne warte
-
- in al, 61h
- and al,11111100b
- out 61h, al ;Lautsprecher ausschalten
- pop bx
- pop ax
- }
- }
-
- int cplay(void)
- {
- register int a;
- long i,ii;
- if(KlammerTok()== 3)
- {
- OpenSound();
- ii = (long)XW2;
- ii *= 100;
- SetVoiceSound(1,MAKELONG(YW1,XW1),32767);
-
- StartSound();
-
- for (i=0;i < ii;i++)
- a=i; /* damit's nicht weg - optimiert wird */
-
- StopSound();
-
- CloseSound();
- }
- else
- fatal_error ("# PARAMETER-ERROR #");
-
- return OK;
- }
-
- int creadclp(void)
- {
- char VStatus;
-
- Scan();
- if(Steuer==ALPHA && !ScanBuffer[1])
- {
- VStatus=ScanBuffer[0];
- Scan();
-
- if(Steuer==TRENNER)
- Scan();
-
- if(Steuer==ALPHA)
- {
- Textstr[0] = '\0';
-
- readclipbrd(hWndglob,FALSE);
- if(Textstr[0])
- {
- strcpy (Variable.VarName,ScanBuffer);
-
- if(VStatus=='S'|| VStatus=='s')
- {
- Variable.VarType = STRING;
- SetVar(&Variable,INLINE);
- } else
- {
- Variable.VarType = FLONUM;
- SetVar(&Variable,INPUT);
- }
- }
-
- }
- else serror("# Variablenname ? #");
- }
- else serror("# Variablenstatus ? #");
- return OK;
- }
-
- int cwritclp(void)
- {
- Scan();
- if(Steuer==ALPHA)
- {
- Mehr=FALSE;
- PrintBuf[0]='\0';
- PrintVar (ScanBuffer);
- if(!IntError)
- writeclipbrd(hWndglob,PrintBuf);
- } else
- if(Steuer==STRING)
- {
- writeclipbrd(hWndglob,ScanBuffer);
- }
- else serror("# Wert ? #");
- return OK;
- }
-
- void Spaces(int i)
- {
- int j=0;
- i--;
- j = strlen((char *)TokBefDesc[i].Befehl);
- while(j++ < 14)
- (j < 2 || j > 13 ? (strcat(Questr," ")):(strcat(Questr,".")));
- }
-
- int ccommands()
- {
- int i=0;
- memset(Questr,'\0',ZEILENLAENGE-1);
- ccls();
- PRINTF("COMMANDS :");
- do {
- if(!(*Questr))
- strcpy(Questr,(char *)TokBefDesc[i++].Befehl);
- Spaces(i);
-
- while(!Questr[78])
- {
- strcat(Questr,(char *)TokBefDesc[i++].Befehl);
- Spaces(i);
- }
- if(Questr[0] > '.')
- PRINTF(Questr);
- memset(Questr,'\0',ZEILENLAENGE-1);
-
- }
- while(i < (TOKMAX-TOKMIN-1));
- PRINTF("Befehl<F1> ? Hilfe ? ");
- return(OK);
- }
-
- int crunb()
- {
- if (FirstLine)
- RUNBREAK=TRUE;
- else
- PRINTF ("# Kein Programm im Speicher! #");
-
- return (OK);
- }
- int crun()
- {
- if (FirstLine)
- {
- ActLine = FirstLine;
- HideCaret(hWndglob);
- DoProgram ();
- }
- else
- PRINTF ("# Kein Programm im Speicher! #");
- return (OK);
- }
-
- int cende ()
- {
- PRINTF ("+ Normales Programmende +");
- if(RUNBREAK) RUNBREAK=FALSE;
- return (FALSE);
- }
-
- int cexit ()
- {
- if(MessageBox(hWndglob,(LPSTR) "Wollen Sie den Interpreter verlassen ?",
- (LPSTR)"* ENDE *",
- MB_OKCANCEL | MB_ICONEXCLAMATION)==IDOK)
- SendMessage(hWndglob,WM_DESTROY,0,0L);
- return (OK);
- }
-
- int cmerke ()
- {
-
- return (OK);
- }
-
- int clist ()
- {
- PRGZEILE *FindZeile;
- char *Line;
- if ((FindZeile = FirstLine) != NULL) {
-
- PRINTF ("******* Aktuelles Programm auflisten: ********");
- PRINTF (FileName);
- while ( FindZeile) {
- ShowLine (FindZeile);
- FindZeile = FindZeile->NextZeile;
- }
- PRINTF ("******* Ende des aktuellen Programms! ********");
- }
-
- return (TRUE);
- }
-
- void Waehlbox()
- {
- lpOpenDlg = MakeProcInstance((FARPROC) OpenDlg, hInst);
- DialogBox(hInst, "Open", hWndglob, lpOpenDlg);
- FreeProcInstance(lpOpenDlg);
- }
-
- int cload ()
- {
- Scan();
- if (Steuer == STRING)
- {
- SetFileName (ScanBuffer);
- ReadProg ();
- }
- else
- {
- Waehlbox();
- if(LoadFile) ReadProg ();
- }
- return (OK);
- }
-
-
- int csave ()
- {
-
- Scan();
- if (Steuer == STRING) {
- SetFileName (ScanBuffer);
- WriteProg ();
- }
- else
- serror ("# Kein Filename angegeben! #");
- return (OK);
- }
-
-
- int cneu ()
- {
- ClearVar();
- ClearProg ();
- return (OK);
- }
-
- void fatal_error (char *FehlerMeldung)
- {
- TextCol = -1;
- PRINTF (FehlerMeldung);
- IntError = TRUE;
- }
-
- void serror(char *FehlerMeldung)
- {
- TextCol = -1;
- PRINTF (FehlerMeldung);
- IntError = TRUE;
- }
-
- void ResetError ()
- {
- IntError = FALSE;
- }
-
- int ReadProg ()
- {
- PRGZEILE NewLine;
- FILE *FilePointer;
- char ReadBuffer[255];
- char ausgabe[30];
- char *FName;
-
- if ((FName = GetFileName()) != NULL) {
- fio = OpenFile((LPSTR)FName,(LPOFSTRUCT)&fileInfo,OF_READ);
-
- if ((FilePointer = fdopen(fio,"rb")) == NULL) {
- fatal_error (" Datei konnte nicht ge÷ffnet werden! ");
- return (ERROR_1);
- }
- }
- else {
- fatal_error (" Ungⁿltiger Dateiname! ");
- return (ERROR_1);
- }
- cneu ();
- strcpy(ausgabe,"Lade Datei : ");
- strcat(ausgabe,FName);
- PRINTF (ausgabe);
-
- while (ReadFileLine (FilePointer,ReadBuffer)) {
- if (strlen (ReadBuffer) > 3) {
- LinePos = ReadBuffer;
- SkipChar ();
- Scan ();
- if (Steuer == ZIFFER) {
- NewLine.LineNumber = atoi (ScanBuffer);
- ActLine = 

- if (MakeToken () == OK)
- InsIntLine ();
- else {
-
- PRINTF ("### Ungⁿltiger Befehl gefunden! ###");
- return (ERROR_1);
- }
- }
- else {
- fatal_error ("Fehler beim Einlesen der Datei! ");
- return (FALSE);
- }
- }
- }
- fclose (FilePointer);
- return (OK);
- }
-
- int ReadFileLine (FilePointer,BufPointer)
- FILE *FilePointer;
- char BufPointer[];
- {
- char zeichen;
- char *ReadPointer;
- ReadPointer = BufPointer;
-
- do {
- zeichen = *ReadPointer++ = fgetc (FilePointer);
- } while ((zeichen != LF)&&(zeichen != '\r') && (zeichen != EOF));
-
- *(--ReadPointer) = '\0';
-
- if ((zeichen == EOF) && (ReadPointer == BufPointer))
- return (FALSE);
- else
- return (TRUE);
- }
-
- int WriteProg ()
- {
- PRGZEILE *FindZeile;
- FILE *FilePointer;
- char ausgabe[30];
- char WriteBuffer[255];
- char *FName;
- char *Line;
-
- if ((FName = GetFileName()) != NULL) {
- strcpy(ausgabe,"Save Datei : ");
- strcat(ausgabe,FName);
- PRINTF (ausgabe);
- fio = OpenFile((LPSTR)FName,(LPOFSTRUCT)&fileInfo,OF_CREATE | OF_WRITE );
-
- if ((FilePointer = fdopen (fio,"w+b")) == NULL) {
- fatal_error (" Datei konnte nicht ge÷ffnet werden! ");
- return (ERROR_1);
- }
- }
- else {
- fatal_error (" Ungⁿltiger Dateiname! ");
- return (ERROR_1);
- }
-
-
- if ((FindZeile = FirstLine) != NULL) {
- while ( FindZeile) {
- Line = FindZeile->Zeile;
- if (*Line) {
- sprintf (WriteBuffer,"%03d %s ",
- FindZeile->LineNumber,
- TokBefDesc[(*Line-TOKMIN)&0xff].Befehl
- );
- fprintf (FilePointer,"%s",WriteBuffer);
- Line++;
- if (*Line)
- {
- sprintf (WriteBuffer,"%s\r\n",Line);
- fprintf (FilePointer,"%s",WriteBuffer);
- } else if(WriteBuffer[0])
- {
- strcpy(WriteBuffer,"\r\n");
- fprintf (FilePointer,"%s",WriteBuffer);
- }
-
- }
- FindZeile = FindZeile->NextZeile;
- }
- }
- fclose(FilePointer);
- return (OK);
- }
-
-
- void SetFileName (char *FName)
- {
- strcpy (FileName,FName);
- }
-
- char *GetFileName ()
- {
- return (FileName);
- }
-
- void ShowLine (PRGZEILE *FindZeile)
- {
- char *Line;
- char Ausgabe[255];
-
- Line = FindZeile->Zeile;
- if (*Line)
- {
- sprintf (Ausgabe,"%03d %s ",
- FindZeile->LineNumber,
- TokBefDesc[(*Line-TOKMIN)&0xff].Befehl);
- if(*Line != ';') Line++;
- if (*Line) strcat(Ausgabe,Line);
- PRINTF (Ausgabe);
- }
- }
-
- VAR *IsVariable (char *Name)
- {
- VAR *i;
-
- for (i = FirstVar;
- i && (strcmp(Name,i->VarName) != 0);
- i = i->NextVar);
-
- return (i);
- }
-
- int SetVar (VAR *Wert,BOOL Input)
- {
- VAR *Variable;
- VAR Value;
-
- if(Input == INPUT)
- {
- strcpy(Value.VarName,Wert->VarName);
- Value.VarWert.variable.Flotype = atof(Textstr);
- Value.VarType = FLONUM;
- } else
- if(Input == INLINE)
- {
- strcpy(Value.VarName,Wert->VarName);
- strcpy(ScanBuffer,Textstr);
- Value.VarType = STRING;
- }
- else if (CalcExpression (&Value) == ERROR_1) return (ERROR_1);
-
- if ((Variable = IsVariable (Wert->VarName)) != NULL)
- {
-
- if (Variable->VarType != Value.VarType)
- {
- serror("# falscher Variablentyp #");
- return (FALSE);
- }
-
- if (Variable->VarType==STRING)
- LocalFree ((LOCALHANDLE)(Variable->VarWert.variable.text));
- SetValue (&Variable->VarWert,&Value.VarWert,Value.VarType);
- if(Input == FORNEXT) forcalc[ForCnt].forX = Variable;
- return (OK);
- }
-
- if (( Variable =(VAR NEAR *) LocalAlloc(LPTR,sizeof(VAR))) == NULL) {
- PRINTF ("# Kein Speicherplatz mehr fⁿr die Variable! #");
- return (FALSE);
- }
-
- strcpy (Variable->VarName,Wert->VarName);
- Variable->VarType = Value.VarType;
- SetValue (&Variable->VarWert,&Value.VarWert,Value.VarType);
- Variable->NextVar = FirstVar;
- FirstVar = Variable;
- if(Input == FORNEXT) forcalc[ForCnt].forX = FirstVar;
- return (OK);
- }
-
- void SetValue (NewVar,Wert,Type)
- VARDEF *NewVar,*Wert;
- unsigned char Type;
- {
-
- switch (Type) {
- case ZIFFER:
- NewVar->variable.integer = Wert->variable.integer;
- break;
- case FLONUM:
- NewVar->variable.Flotype = Wert->variable.Flotype;
- break;
- case ALPHA:
- NewVar->variable.zeichen = Wert->variable.zeichen;
- break;
- case STRING:
- NewVar->variable.text = (unsigned char NEAR *)LocalAlloc (LPTR,
- (strlen(ScanBuffer)+1)*sizeof(char));
- if (NewVar->variable.text== NULL)
- serror ("#### Kein Speicherplatz mehr vorhanden! ####");
- else
- strcpy(NewVar->variable.text,ScanBuffer);
- break;
- default:
- serror ("# Variablenzuweisung fⁿr diesen Typ nicht implementiert! #");
- break;
- }
-
- }
- int MsgBox(char *Questr)
- {
- WORD Options;
- Options=0x0000;
- if(Questr[0] == '*') Options |= MB_ICONASTERISK;
- else
- if(Questr[0] == 'H') Options |= MB_ICONHAND;
- else
- if(Questr[0] == '?') Options |= MB_ICONQUESTION;
- else
- if(Questr[0] == '!') Options |= MB_ICONEXCLAMATION;
- Questr[0] = ' ';
- if(Questr[1] == 'Y') Options |= MB_YESNO;
- else
- if(Questr[1] == 'C') Options |= MB_OKCANCEL;
- else
- if(Questr[1] == 'R') Options |= MB_RETRYCANCEL;
- Questr[1] = ' ';
- return (MessageBox(hWndglob,(LPSTR) Questr,(LPSTR) "* ACHTUNG *",Options));
- }
-
- int CmpVar ()
- {
- unsigned char *Nuntius;
- Nuntius=LinePos;
- Scan ();
- if (Steuer == STRING)
- {
- what = MsgBox(ScanBuffer);
- if (what==IDYES || what==IDOK) return TRUE;
- else return FALSE;
- }
- LinePos=Nuntius;
- if (CalcExpression (&Variable) == ERROR_1) serror ("# if Fehler #");;
- if (Variable.VarWert.variable.Flotype <= 0.0)
- return FALSE;
- else return TRUE;
-
- }
-
- void Nullenweg()
- {
- int ncnt;
-
- ncnt=19;
- while(IntegerZahl[ncnt--]!= '.')
- {
- if(IntegerZahl[ncnt]> '0') break;
- if(IntegerZahl[ncnt]=='.')
- {
- IntegerZahl[ncnt]=' ';
- break;
- }
- if(IntegerZahl[ncnt]=='0')
- IntegerZahl[ncnt]=' ';
- }
- IntegerZahl[ncnt+1]='\0';
- }
-
- void PrintVar (char *Name)
- {
- VAR *Variable;
- if ((Variable = IsVariable (Name)) != NULL) {
- switch (Variable->VarType) {
- case ZIFFER:
- sprintf(IntegerZahl,"%-10i",Variable->VarWert.variable.integer);
- if(!Mehr || !PrintBuf[0]) sprintf (PrintBuf,"%10s",IntegerZahl);
- else strcat(PrintBuf,IntegerZahl);
- break;
-
- case FLONUM:
- sprintf(IntegerZahl,"%-18.6f",
- Variable->VarWert.variable.Flotype);
- Nullenweg();
- if(!Mehr || !PrintBuf[0]) sprintf (PrintBuf,"%s",IntegerZahl);
- else strcat(PrintBuf,IntegerZahl);
- break;
- case STRING:
- if(!Mehr || !PrintBuf[0])
- strcpy (PrintBuf,Variable->VarWert.variable.text);
- else strcat(PrintBuf,Variable->VarWert.variable.text);
- break;
- default:
-
- PRINTF ("# Variablen dieses Typs k÷nnen nicht gedruckt werden! #");
- break;
- }
- }
- else {
- char buffer[40];
- sprintf (buffer,"# Variable <%s> unbekannt! #",Name);
- fatal_error (buffer);
- }
- }
- int ReadInt (char *Name)
- {
- int wert;
- VAR *Variable;
- if ((Variable = IsVariable (Name)) != NULL)
- {
- switch (Variable->VarType)
- {
- case ZIFFER:
- wert=Variable->VarWert.variable.integer;
- break;
-
- case FLONUM:
- wert=(int)Variable->VarWert.variable.Flotype;
- break;
- case STRING:
- break;
- default:
-
- PRINTF ("# Variablen dieses Typs k÷nnen nicht gedruckt werden! #");
- break;
- }
- return wert;
- }
- else {
- char buffer[40];
- sprintf (buffer,"# Variable <%s> unbekannt! #",Name);
- fatal_error (buffer);
- return (FALSE);
- }
-
- }
-
-
- int CalcExpression (VAR *Result)
- {
- PTNODE FTree;
- unsigned char *Formel;
-
- Formel=LinePos;
- Scan();
- if(Steuer == EOLCHAR) return (ERROR_1);
-
- if(Steuer==STRING)
- {
- /* String - Addition/Bearbeitung hier implementieren
- und in den Scanbuffer schreiben */
-
- Result->VarType=STRING;
- return (OK);
- }
-
- FTree = CreateTree(Formel,&ErrPos,&ErrNr);
- if(ErrPos != -1)
- {
- switch(ErrNr)
- {
- case 0: PRINTF("# Klammer nicht zu #"); break;
- case 1: PRINTF("# Klammer nicht auf #"); break;
- case 2: PRINTF("# Fehler beim Einlesen #"); break;
- case 3: PRINTF("# unerwartetes Ende #"); break;
- case 4: PRINTF("# Zeichen falsch #"); break;
- case 5: PRINTF("# Variable nicht initialisiert #"); break;
- case 6: PRINTF("# Zeichen falsch #"); break;
- case 7: PRINTF("# Falscher Variablentyp #"); break;
- default: PRINTF("# undefinierter Fehler #"); break;
- }
- return (ERROR_1);
- }
- else
- {
- Result->VarWert.variable.Flotype = (double) Calc(&FTree);
- Result->VarType=FLONUM;
- DelTree(&FTree);
- }
- return (OK);
- }
-
- void ClearProg ()
- {
- PRGZEILE *Memory;
-
- ActLine = FirstLine;
-
- while (ActLine) {
- Memory = ActLine;
- ActLine = ActLine->NextZeile;
- LocalFree ((LOCALHANDLE)Memory);
- }
-
- FirstLine = ActLine = NULL;
-
- }
- void ClearVar()
- {
- VAR *Memory;
- while (FirstVar) {
- Memory = FirstVar;
- if(Memory->VarType == STRING)
- LocalFree ((LOCALHANDLE)(Memory->VarWert.variable.text));
- FirstVar = FirstVar->NextVar;
- LocalFree ((LOCALHANDLE)Memory);
- }
- FirstVar = NULL;
- }
-
- void Carret(unsigned char *String)
- {
- Leerstring[0]=(String[0]=='>') ? '>' : ' ';
- }
-
- void ErzeugeCursor(HWND hWnd)
- {
- CreateCaret(hWnd,1,tm.tmAveCharWidth,tm.tmHeight);
- bCaret=TRUE;
- ShowCaret(hWnd);
- }
-
- void TEXTZEILE(HDC hDC,unsigned char *String)
- {
- if(FontChange)
- {
- newFont = CreateFontIndirect((LPLOGFONT) &mF);
- oldFont = SelectObject(hDC,newFont);
- HideCaret(hWndglob);
- if(bCaret) DestroyCaret();
- GetTextMetrics(hDC,(LPTEXTMETRIC)&tm);
- ErzeugeCursor(hWndglob);
- }
- else if(!bCaret)
- {
- GetTextMetrics(hDC,(LPTEXTMETRIC)&tm);
- ErzeugeCursor(hWndglob);
- }
-
- if(!Drucker && !locate)
- {
- HideCaret(hWndglob);
- if(!Mono)
- SetTextColor(hDC,VIOLETT);
- Carret(String);
- TextOut(hDC,(short)0,(short)Zeile,(LPSTR)Leerstring,(short)80);
- }
-
- if(!Mono && !Drucker)
- switch(String[0])
- {
- case '>':
- SetTextColor(hDC,VIOLETT);
- break;
- case '#':
- SetTextColor(hDC,ROT);
- break;
- case '*':
- SetTextColor(hDC,GRUEN);
- break;
- case '+':
- SetTextColor(hDC,BLACK);
- break;
- default:
- SetTextColor(hDC,BLAU);
- break;
- }
- if(!Mono) {
- if(TextCol >= 0)
- SetTextColor(hDC,SetRGBColor(TextCol));
-
- if(Backgrd != 15)
- SetBkColor(hDC,SetRGBColor(Backgrd));
- }
- TextOut(hDC,(short)x,(short)Zeile,(LPSTR)String,(short)strlen(String));
-
- if(!locate)
- {
- dwTextlen=GetTextExtent(hDC,(LPSTR)String,strlen(String));
- pt=MAKEPOINT(dwTextlen);
- LPtoDP(hDC,&pt,2);
- SetCaretPos(x+pt.x,Zeile);
- ShowCaret(hWndglob);
- }
-
- Zeile+=(tm.tmHeight+2);
-
- if(!Drucker && Zeile >= rect.bottom-(tm.tmHeight+2))
- {
- Zeile=0;
- if(!Mono && !Drucker)
- SetTextColor(hDC,VIOLETT);
- Carret(String);
- TextOut(hDC,(short)0,(short)Zeile,(LPSTR)Leerstring,(short)80);
- } /* else if(Drucker && Zeile > Blattgroesse...... */
-
- if(FontChange)
- {
- SelectObject(hDC,oldFont);
- DeleteObject(newFont);
- }
- x=0;
- locate=FALSE;
- }
-
- void PRINTF(unsigned char *String)
- {
- HDC hDC;
- if(Edit) return;
- if(PrMsgBox)
- {
- PrMsgBox=FALSE;
- what = MsgBox(String);
- return;
- }
-
- if(!Drucker)
- hDC = GetDC(hWndglob);
- else
- hDC = hPrnDC;
- TEXTZEILE(hDC,String);
- if(!Drucker)
- ReleaseDC(hWndglob,hDC);
- }
- DWORD SetRGBColor(int XW2)
- {
- DWORD FARBE;
- if(Mono) return (DWORD) 0;
- else
- switch(XW2)
- {
- case 9:
- case 1: FARBE = BLAU; break;
- case 10:
- case 2: FARBE = GRUEN; break;
- case 11:
- case 3: FARBE = TURKIS; break;
- case 4:
- case 6:
- case 12: FARBE = ROT; break;
- case 13:
- case 5: FARBE = VIOLETT; break;
- case 15:
- case 7: FARBE = WEISS; break;
- case 14: FARBE = GELB; break;
- case 8:
- default: FARBE = BLACK; break;
- }
- return FARBE;
- }
- void Zeichne(int was)
- {
- HDC hDC;
-
-
- if(!Drucker)
- {
- hDC = GetDC(hWndglob);
- switch(Brush)
- {
- case 1:
- case 9: FARBBRUSH=hBlauBrush; break;
- case 2:
- case 10: FARBBRUSH=hGruenBrush; break;
- case 3:
- case 11: FARBBRUSH=hTurkisBrush; break;
- case 4 :
- case 6 :
- case 12: FARBBRUSH=hRedBrush; break;
- case 7 : FARBBRUSH=hGrauBrush; break;
- case 5:
- case 13: FARBBRUSH=hViolettBrush; break;
- case 14: FARBBRUSH=hGelbBrush; break;
- case 15: FARBBRUSH=hWeissBrush; break;
- default:
- case 0:
- case 8: FARBBRUSH=hBlackBrush; break;
- }
-
- hOldBrush=SelectObject(hDC,FARBBRUSH);
-
- switch(Pen)
- {
- case 1:
- case 9: FARBPEN=hBlauPen; break;
- case 2:
- case 10: FARBPEN=hGruenPen; break;
- case 3:
- case 11: FARBPEN=hTurkisPen; break;
- case 4 :
- case 6 :
- case 12: FARBPEN=hRedPen; break;
- case 7 : FARBPEN=hGrauPen; break;
- case 5:
- case 13: FARBPEN=hViolettPen; break;
- case 14: FARBPEN=hGelbPen; break;
- case 15: FARBPEN=hWeissPen; break;
- default:
- case 0:
- case 8: FARBPEN=hBlackPen; break;
- }
- hOldPen=SelectObject(hDC,FARBPEN);
- }
- else hDC = hPrnDC;
-
- switch(was)
- {
- case 0:
- /* da der DC immer neu erstellt wird müßten für moveto(x,y)
- Variablen verwaltet werden...........
- */
- MoveTo(hDC,XW1,YW1);
- LineTo(hDC,XW2,YW2);
- break;
- case 1:
- Rectangle(hDC,XW1,YW1,XW2,YW2);
- break;
- case 2:
- Ellipse(hDC,XW1,YW1,XW2,YW2);
- break;
- case 3:
- RoundRect(hDC,XW1,YW1,XW2,YW2,XW3,YW3);
- break;
- case 4:
- Arc(hDC,XW1,YW1,XW2,YW2,XW3,YW3,XW4,YW4);
- break;
-
- case 5: SetPixel(hDC,XW1,YW1,SetRGBColor(XW2));
- /* Variable = GetPixel in Funktion einbauen */
- break;
- case 6:
- Pie(hDC,XW1,YW1,XW2,YW2,XW3,YW3,XW4,YW4);
- break;
- case 7:
- MoveTo(hDC,XW1,YW1);
- LineTo(hDC,XW2,YW2);
- LineTo(hDC,XW3,YW3);
- LineTo(hDC,XW4,YW4);
- break;
- case 8:
- switch(XW2)
- {
- case 1:
- case 9: FLOODFARBE=BLAU; break;
- case 2:
- case 10: FLOODFARBE=GRUEN; break;
- case 3:
- case 11: FLOODFARBE=TURKIS; break;
- case 4 :
- case 6 :
- case 12: FLOODFARBE=ROT; break;
- case 7 : FLOODFARBE=GRAU; break;
- case 5:
- case 13: FLOODFARBE=VIOLETT; break;
- case 14: FLOODFARBE=GELB; break;
- case 15: FLOODFARBE=WEISS; break;
- default:
- case 0:
- case 8: FLOODFARBE=BLACK; break;
- }
- FloodFill(hDC,XW1,YW1,FLOODFARBE);
- break;
- case 9:
- MoveTo(hDC,XW1,YW1);
- LineTo(hDC,XW2,YW2);
- LineTo(hDC,XW3,YW3);
- LineTo(hDC,XW4,YW4);
- LineTo(hDC,XW1,YW1);
- break;
- case 10:
- MoveTo(hDC,XW1,YW1);
- LineTo(hDC,XW2,YW1);
- LineTo(hDC,XW2,YW2);
- LineTo(hDC,XW1,YW2);
- LineTo(hDC,XW1,YW1);
- break;
- }
-
- if(!Drucker)
- {
- SelectObject(hDC,hOldPen);
- SelectObject(hDC,hOldBrush);
- ReleaseDC(hWndglob,hDC);
- }
- }