home *** CD-ROM | disk | FTP | other *** search
- (*========================================================*)
- (* APPGEN.PAS *)
- (* (C) 1993 Peter Fliesges & DMV-Verlag *)
- (* *)
- (* Einfacher Applikationsgenerator fⁿr TPW/BPW *)
- (* Compiler: Turbo Pascal fⁿr Windows, Borland Pascal 7.0 *)
- (*========================================================*)
-
- PROGRAM AppGen;
- USES
- {$IFDEF VER70} (* Borland Pascal 7.0 *)
- OWindows, WinProcs, OStdDlgs,
- ODialogs, WinTypes, Strings, BWCC;
- {$ELSE} (* Turbo Pascal fⁿr Windows *)
- WObjects, WinTypes, WinProcs, Strings, StdDlgs, BWCC;
- {$ENDIF}
-
- {$R APPGEN.RES}
-
- CONST
- id_Start = 100; (* Button *)
- id_Accept = 101;
- id_Ende = 102;
- id_About = 103;
-
- id_CBMitRahmen = 200; (* CheckBox *)
- id_CBGefuellt = 201;
-
- id_LBSource = 300; (* ListBox *)
- id_LBDest = 301;
-
- id_AppName = 400; (* Stat. Text *)
- id_ProgName = 401;
- id_AccTable = 402;
- id_ObjName = 403;
-
- TYPE
- tAppGen = OBJECT(tApplication)
- PROCEDURE InitMainWindow; VIRTUAL;
- END;
-
- pAppGenWindow = ^tAppGenWindow;
- tAppGenWindow = OBJECT(tDlgWindow)
- (* Objektfelder: *)
- cbMitRahmen, cbGefuellt : pCheckBox;
- lbSource, lbDest : pListbox;
- edAppName, edProgName,
- edAccTable, edObjName : pEdit;
-
- (* Methoden: *)
- CONSTRUCTOR Init(aParent: pWindowsObject;
- aTitle : pChar);
- FUNCTION GetClassName: pChar; VIRTUAL;
- PROCEDURE GetWindowClass(VAR aWndClass: tWndClass);
- VIRTUAL;
- PROCEDURE SetUpWindow; VIRTUAL;
- PROCEDURE Quit(VAR Msg: tMessage);
- VIRTUAL id_First + id_Ende;
- PROCEDURE wmCommand(VAR Msg: tMessage);
- VIRTUAL wm_First + wm_Command;
- PROCEDURE About(VAR Msg: tMessage);
- VIRTUAL id_First + id_About;
- PROCEDURE Accept(VAR Msg: tMessage);
- VIRTUAL id_First + id_Accept;
- PROCEDURE Start;
- PROCEDURE FillLBSource;
- PROCEDURE lbDestAddItem;
- FUNCTION OpenFile : BOOLEAN;
- PROCEDURE Kopf;
- PROCEDURE Mitte;
- PROCEDURE Fuss;
- PROCEDURE FillMethod(ProcName : pChar);
- PROCEDURE ObjTitle(Name : pChar);
- END;
-
- VAR
- f, f2 : Text;
- ProgName,
- ParentName,
- AccTable,
- AppName,
- ObjName : ARRAY[0..32] OF CHAR;
- SWMCount : ARRAY[0..3] OF CHAR;
- WMCount : INTEGER;
-
-
- (*========================================================*)
- (* Implementierung des Objekts tAppGenWindow *)
- (*========================================================*)
-
- CONSTRUCTOR tAppGenWindow.Init(aParent: pWindowsObject;
- aTitle : pChar);
- BEGIN
- tDlgWindow.Init(aParent, aTitle);
- New(cbMitRahmen, InitResource(@Self, id_CBMitRahmen ));
- New(cbGefuellt, InitResource(@Self, id_CBGefuellt ));
- New(lbSource, InitResource(@Self, id_LBSource ));
- New(lbDest, InitResource(@Self, id_LBDest ));
- New(edAppName, InitResource(@Self, id_AppName, 32));
- New(edProgName, InitResource(@Self, id_ProgName, 8));
- New(edAccTable, InitResource(@Self, id_AccTable, 32));
- New(edObjName, InitResource(@Self, id_ObjName, 32));
- END;
-
-
- FUNCTION tAppGenWindow.GetClassName: pChar;
- BEGIN (* Bei BorDlg gibt es kein Icon! *)
- GetClassName := 'BorDlgWin';
- END;
-
- PROCEDURE tAppGenWindow.GetWindowClass(
- VAR aWndClass: tWndClass);
- BEGIN
- tDlgWindow.GetWindowClass(aWndClass);
- aWndClass.hIcon := LoadIcon(hInstance, 'AppGenIcon');
- END;
-
- PROCEDURE tAppGenWindow.SetUpWindow;
- BEGIN
- tDlgWindow.SetUpWindow;
- FillLBSource;
-
- StrCopy(AppName, 'MyApp');
- edAppName^.SetText(AppName);
- StrCopy(ProgName, 'MyProg');
- edProgName^.SetText(ProgName);
- StrCopy(AccTable, '');
- edAccTable^.SetText(AccTable);
- StrCopy(ObjName, 'tMyWindow');
- edObjName^.SetText(ObjName);
- StrCopy(ParentName, 'tWindow');
-
- cbMitRahmen^.SetCheck(1);
- EnableWindow(GetDlgItem(hWindow, id_Start), FALSE);
- END;
-
- PROCEDURE tAppGenWindow.Quit(VAR Msg: tMessage);
- BEGIN
- (* PostQuitMessage(0); Absturz, wenn nach ProgStart *)
- (* direkt Ende betΣtigt wird! Daher: *)
- Halt(0);
- END;
-
- PROCEDURE tAppGenWindow.wmCommand(VAR Msg: tMessage);
- BEGIN
- IF Msg.wParam = id_Start THEN Start;
- IF Msg.lParamHi = cbn_DblClk THEN lbDestAddItem;
- tDlgWindow.wmCommand(Msg);
- END;
-
- PROCEDURE tAppGenWindow.About(VAR Msg: tMessage);
- BEGIN
- Application^.ExecDialog(New(pDialog,
- Init(@Self, 'About')));
- END;
-
- PROCEDURE tAppGenWindow.Accept(VAR Msg: tMessage);
- VAR
- s, s1 : ARRAY[0..255] OF CHAR;
- found : BOOLEAN;
- i : INTEGER;
- BEGIN
- lbSource^.GetSelString(s, 255);
- found := FALSE;
- IF lbDest^.GetCount > 0 THEN BEGIN
- i := 0;
- REPEAT
- lbDest^.GetString(s1, i);
- IF StrComp(s1, s) = 0 THEN found := TRUE;
- Inc(i);
- UNTIL (i>=lbDest^.GetCount) OR (StrComp(s1, s) = 0);
- END;
-
- IF found THEN
- lbDest^.DeleteString(i - 1)
- ELSE
- lbDest^.AddString(s);
-
- IF lbDest^.GetCount > 0 THEN
- EnableWindow(GetDlgItem(hWindow, id_Start), TRUE)
- ELSE
- EnableWindow(GetDlgItem(hWindow, id_Start), FALSE);
- END;
-
- PROCEDURE tAppGenWindow.Start;
- VAR
- OldCursor : WORD;
- Msg : tMsg;
- BEGIN
- OldCursor := SetClassWord(hWindow, gcw_hCursor,
- LoadCursor(0, idc_Wait));
- EnableWindow(GetDlgItem(hWindow,id_Start), FALSE);
- edProgName^.GetText(ProgName, 8);
-
- IF OpenFile THEN BEGIN
- edAppName^.GetText(AppName, 32);
- edAccTable^.GetText(AccTable, 32);
- edObjName^.GetText(ObjName, 32);
-
- IF cbMitRahmen^.GetCheck = bf_Checked THEN Kopf
- ELSE BEGIN
- Application^.ExecDialog(New(pInputDialog, Init(@Self,
- '', 'Vorfahr:', ParentName, SizeOf(ParentName))));
- END;
- Mitte;
- IF cbMitRahmen^.GetCheck = bf_Checked THEN Fuss;
- Close(f);
- Close(f2);
- END;
- EnableWindow(GetDlgItem(hWindow, id_Start), TRUE);
- SetClassWord(hWindow, gcw_hCursor, OldCursor);
- SetCursor(OldCursor);
- END;
-
- PROCEDURE tAppGenWindow.FillLBSource;
- VAR
- i : INTEGER;
- s : ARRAY[0..255] OF CHAR;
- BEGIN
- i := 1;
- (* Soviele Strings laden, wie vorhanden *)
- WHILE LoadString(hInstance, i, s, SizeOf(s)) > 0 DO BEGIN
- lbSource^.AddString(s);
- Inc(i);
- END;
- lbSource^.SetSelIndex(0);
- END;
-
- PROCEDURE tAppGenWindow.lbDestAddItem;
- VAR
- s, s1 : ARRAY[0..255] OF CHAR;
- found : BOOLEAN;
- i : INTEGER;
- BEGIN
- IF GetFocus = lbSource^.hWindow THEN BEGIN
- lbSource^.GetSelString(s, 255);
- found := FALSE;
- IF lbDest^.GetCount > 0 THEN BEGIN
- i := 0;
- REPEAT
- lbDest^.GetString(s1, i);
- IF StrComp(s1, s) = 0 THEN found := TRUE;
- Inc(i);
- UNTIL (i>=lbDest^.GetCount) OR (StrComp(s1, s) = 0);
- END;
-
- IF found THEN
- lbDest^.DeleteString(i - 1)
- ELSE
- lbDest^.AddString(s);
- END;
-
- IF GetFocus = lbDest^.hWindow THEN BEGIN
- lbDest^.DeleteString(lbDest^.GetSelIndex)
- END;
-
- IF lbDest^.GetCount > 0 THEN
- EnableWindow(GetDlgItem(hWindow, id_Start), TRUE)
- ELSE
- EnableWindow(GetDlgItem(hWindow, id_Start), FALSE);
- END;
-
- FUNCTION tAppGenWindow.OpenFile: BOOLEAN;
- VAR
- b : BOOLEAN;
- s : ARRAY[0..80] OF CHAR;
- BEGIN
- b := TRUE;
- StrCopy(s, ProgName);
- StrCat(s, '.Pas');
- Assign(f, s);
- {$I-}
- Reset(f);
- {$I+}
- IF IOResult = 0 THEN
- IF BWCCMessageBox(0, #13#10'Datei existiert bereits!' +
- #13#10'▄berschreiben?','Achtung',
- mb_YesNo OR mb_IconExclamation OR
- mb_DefButton2) = idNo THEN
- b := FALSE;
- IF b THEN BEGIN
- ReWrite(f);
- OpenFile := TRUE;
- END ELSE
- OpenFile := FALSE;
-
- Assign(f2, 'APPGEN.DAT');
- {$I-}
- Reset(f2);
- {$I+}
- IF IOResult <> 0 THEN
- BWCCMessageBox(0, 'Datei AppGen.Dat nicht gefunden!',
- 'Fehler',
- mb_OK OR mb_IconExclamation);
- END;
-
- PROCEDURE tAppGenWindow.Kopf;
- VAR
- p : pChar;
- s : ARRAY[0..80] OF CHAR;
- i,
- ErrPos : INTEGER; (* ErrPos: Fⁿr Val() *)
- BEGIN
- Reset(f2);
- WHILE (NOT EoF(f2)) AND (StrPos(s, '[Kopf]') = NIL) DO
- ReadLn(f2, s);
- ReadLn(f2, s);
- WHILE (NOT EoF(f2)) AND (s[0] <> '[') DO BEGIN
- WriteLn(f, s);
- ReadLn(f2, s);
- END;
- WriteLn(f);
- WriteLn(f, 'PROGRAM ', ProgName, ';'#13#10);
- WriteLn(f, 'USES');
- {$IFDEF VER70}
- WriteLn(f, ' OWindows, WinProcs, OStdDlgs,');
- WriteLn(f, ' ODialogs, WinTypes, Strings, BWCC;'#13#10);
- {$ELSE}
- WriteLn(f, ' WObjects, WinTypes, WinProcs, Strings, ' +
- ' StdDlgs, BWCC;'#13#10);
- {$ENDIF}
- WriteLn(f, '{$R APPGEN.RES}'#13#10);
- WriteLn(f, 'CONST');
- WriteLn(f, ' AppName : pChar = ''', AppName, ''';');
-
- edAccTable^.GetText(s, 5);
- IF StrLen(s) > 0 THEN
- IF Application^.ExecDialog(New(pInputDialog,
- Init(@Self, 'Eingabe',
- 'Anzahl Botschaftsantwortmethoden',
- SWMCount, SizeOf(SWMCount)))) = id_OK THEN BEGIN
- WriteLn(f);
- Val(SWMCount, WMCount, ErrPos);
- FOR i := 1 TO WMCount DO BEGIN
- Str(i, s);
- Write(f, ' id_WM', s);
- Str(i + 200:3, s);
- WriteLn(f, #9, ' = ', s, ';');
- END;
- END;
-
- WriteLn(f, #13#10'TYPE');
- WriteLn(f, ' t', AppName, ' = OBJECT(tApplication)');
- WriteLn(f, ' (* Objektfelder *)'#13#10);
- WriteLn(f, ' (* Methoden *)');
- WriteLn(f, ' PROCEDURE InitMainWindow; VIRTUAL;');
- edAccTable^.GetText(s, 5);
- IF StrLen(s) > 0 THEN
- WriteLn(f, ' PROCEDURE InitInstance; VIRTUAL;');
- WriteLn(f, ' END;');
- END;
-
- PROCEDURE tAppGenWindow.Mitte;
- VAR
- i, j : INTEGER;
- p1, p2, p3 : pChar;
- s, s2, s3 : ARRAY[0..255] OF CHAR;
- BEGIN
- WITH lbDest^ DO BEGIN
- WriteLn(f);
- IF cbMitRahmen^.GetCheck = bf_UnChecked THEN
- WriteLn(f, 'TYPE');
- WriteLn(f, ' p', ObjName + 1, ' = ^', ObjName, ';');
- WriteLn(f, ' ', ObjName,' = OBJECT(', ParentName, ')');
- WriteLn(f, ' (* Objektfelder *)'#13#10);
- WriteLn(f, ' (* Methoden *)');
-
- FOR i := 0 TO GetCount - 1 DO BEGIN
- GetString(s, i);
- WriteLn(f, ' ', s);
- END;
-
- IF WMCount > 0 THEN
- WriteLn(f);
- FOR i := 1 TO WMCount DO BEGIN
- Str(i, s);
- WriteLn(f, ' PROCEDURE wm', s,
- '(VAR Msg: tMessage);');
- WriteLn(f, ' VIRTUAL cm_First + id_WM', s, ';')
- END;
-
- WriteLn(f, ' END;');
-
- ObjTitle(ObjName);
-
- FOR i := 0 TO GetCount - 1 DO BEGIN
- GetString(s, i);
-
- FillChar(s2, SizeOf(s2), #0); (* Initialisieren *)
- FillChar(s3, SizeOf(s3), #0);
-
- p1 := StrPos(s, ' ');
- p2 := StrPos(s, ')');
- p3 := StrPos(s, ';');
-
- StrMove(s2, s, p1 - s);
- StrCat(s2, ' ');
- StrCat(s2, ObjName);
- StrCat(s2, '.');
- IF p2 = NIL THEN
- StrMove(s3, p1 + 1, p3 - p1)
- ELSE
- StrMove(s3, p1 + 1, p2 - p1 + 1);
- StrCat(s2, s3);
- WriteLn(f, s2);
-
- WriteLn(f, 'BEGIN');
- IF cbGefuellt^.GetCheck = bf_Checked THEN BEGIN
- StrCopy(s3, '[');
- j := 0;
- REPEAT
- Move(s[j], s3[j+1], 1);
- Inc(j);
- UNTIL (s[j] = ';') OR (s[j] = '(') OR (s[j] = ':');
- s3[j+1] := ']';
- s3[j+2] := #0;
- FillMethod(s3);
- END;
- Write(f, 'END; (* ');
-
- j := 0;
- REPEAT
- Write(f, s2[j]);
- Inc(j);
- UNTIL (s2[j] = ';') OR (s2[j] = '(') OR (s2[j] = ':');
- WriteLn(f, ' *)'#13#10#13#10);
- END;
-
- IF WMCount > 0 THEN
- WriteLn(f);
- FOR j := 1 TO WMCount DO BEGIN
- Str(j, s);
- WriteLn(f, 'PROCEDURE ', ObjName, '.wm', s,
- '(VAR Msg: tMessage);');
- WriteLn(f, 'BEGIN');
- WriteLn(f, 'END; (* PROCEDURE ', ObjName, '.wm',
- s, ' *)'#13#10#13#10);
- END;
- END;
- END;
-
- PROCEDURE tAppGenWindow.Fuss;
- VAR
- s : ARRAY[0..80] OF CHAR;
- BEGIN
- StrCopy(s, 't');
- StrCat(s, AppName);
- ObjTitle(s);
- WriteLn(f, 'PROCEDURE ', s, '.InitMainWindow;');
- WriteLn(f, 'BEGIN');
- WriteLn(f, ' MainWindow := New(p', ObjName + 1,
- ', Init(NIL, AppName));');
- WriteLn(f, 'END;'#13#10);
-
- edAccTable^.GetText(s, 20);
- IF StrLen(s) > 0 THEN BEGIN
- WriteLn(f, #13#10'PROCEDURE t', AppName,
- '.InitInstance;');
- WriteLn(f, 'BEGIN');
- WriteLn(f, ' tApplication.InitInstance;');
- WriteLn(f, ' hAccTable := (LoadAccelerators(hInstance,'
- + '''', s,'''));');
- WriteLn(f, 'END;'#13#10);
- END;
-
- WriteLn(f, #13#10'VAR'#13#10' ', AppName, ' : t',
- AppName, ';');
- WriteLn(f, ' LibHdl : tHandle;'#13#10);
- WriteLn(f, 'BEGIN');
- WriteLn(f, ' LibHdl := LoadLibrary(''WORKLIB2.DLL'');');
- WriteLn(f, ' ', AppName, '.Init(AppName);');
- WriteLn(f, ' ', AppName, '.Run;');
- WriteLn(f, ' ', AppName, '.Done;');
- WriteLn(f, ' FreeLibrary(LibHdl);');
- WriteLn(f, 'END.');
- END;
-
- PROCEDURE tAppGenWindow.FillMethod(ProcName: pChar);
- VAR
- s : ARRAY[0..80] OF CHAR;
- BEGIN
- Reset(f2);
- WHILE (NOT EoF(f2)) AND (StrPos(s, ProcName) = NIL) DO
- ReadLn(f2, s);
- ReadLn(f2, s);
- WHILE (NOT EoF(f2)) AND (s[0] <> '[') DO BEGIN
- WriteLn(f, s);
- ReadLn(f2, s);
- END;
- END;
-
- PROCEDURE tAppGenWindow.ObjTitle(Name : pChar);
- VAR
- s, s1 : ARRAY[0..60] OF CHAR;
- BEGIN
- s[0] := '(';
- s[1] := '*';
- s[58] := '*';
- s[59] := ')';
- s[60] := #0;
- FillChar(s[2], 56, '=');
- WriteLn(f, #13#10#13#10, s);
- FillChar(s[2], 56, ' ');
- StrCopy(s1, 'Methoden des Objekts ');
- StrCat(s1, Name);
- Move(s1, s[4], StrLen(s1));
- WriteLn(f, s);
- FillChar(s[2], 56, '=');
- WriteLn(f, s, #13#10#13#10);
- END;
-
- (* ====================================================== *)
- (* Applikation initialisieren *)
- (* ====================================================== *)
-
- PROCEDURE tAppGen.InitMainWindow;
- BEGIN
- MainWindow := New(pAppGenWindow, Init(NIL, 'AppGenDlg'));
- END;
-
- VAR
- App : tAppGen;
- LibHdl: tHandle;
-
- BEGIN
- LibHdl := LoadLibrary('WORKLIB2.DLL');
- (* Nachdem die Library einmal eingebunden ist, k÷nnte *)
- (* man hier auf den Aufruf verzichten, aber beim nΣch- *)
- (* sten Neustart wundert man sich! *)
- App.Init('AppGen');
- App.Run;
- App.Done;
- FreeLibrary(LibHdl);
- END.
-
- (*========================================================*)
- (* Ende von APPGEN.PAS *)
-
-