home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* ASMDLG.PAS *)
- (* (c) 1993 te-wi Verlag, München *)
- (* ------------------------------------------------------ *)
- PROGRAM AsmDlg;
-
- {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+,Y+}
- {$M 16384,0,655360}
-
- USES Objects, Drivers, Views, Menus, MsgBox, Dialogs, App;
-
- CONST
- cmAbout = 101;
- cmTest = 102;
-
- (* ------------------------------------------------------ *)
-
- FUNCTION AsmOptDlg : pDialog;
- (* Da es jede Menge CheckBoxen und RadioButtons gibt, wurde
- bei der Vergabe der Shortcuts eingespart. Der Dialog
- sollte jedoch auch ohne Maus zu bedienen sein. Aus diesem
- Grund sind die RadioButtons mit Labels versehen, über
- die die entsprechenden Felder angewählt werden können.
- Die Checkboxen können über die Shortcuts manipuliert werden.
-
- Die Z-Ordnung bleibt unberührt: mit Tab kann der Anwedner
- die Felder wechseln. Aus Gründen der Anwenderfreundlichkeit
- sollten die mit [Tab] anzuwählenden Checkboxen abgesetzt werden.
-
- Die Reihenfolge der an den Dialog zu übergebenden Daten hängt
- ebenfalls von der Z-Ordnung (also der Reihenfolge der Subviews
- im Dialog) ab.
- *)
- VAR
- D : pDialog;
- C : pView;
- R : tRect;
- BEGIN
- R.Assign(0, 0, 75, 22);
- D := New(pDialog, Init(R, 'Assembly Options'));
-
- WITH D^ DO BEGIN
- Options := Options OR ofCentered;
-
- R.Assign(3, 3, 30, 5);
- C := New(pRadioButtons, Init(R,
- NewSItem('Alphabetic (/a)',
- NewSItem('Source Code (/s)',
- NIL))));
- Insert(C);
- R.Assign(2, 2, 20, 3);
- Insert(New(pLabel, Init(R, 'Segment ~O~rdering', C)));
-
- R.Assign(3, 7, 30, 10);
- C := New(pRadioButtons, Init(R,
- NewSItem('Full (/zi)',
- NewSItem('Line Numbers (/zd)',
- NewSItem('None (/zn)',
- NIL)))));
- Insert(C);
- R.Assign(2, 6, 22, 7);
- Insert(New(pLabel, Init(R, '~D~ebug Information', C)));
-
- R.Assign(3, 11, 30, 12);
- Insert(New(pCheckBoxes, Init(R,
- NewSItem('~C~ross Reference (/c)',
- NIL))));
-
- R.Assign(3, 14, 30, 17);
- C := New(pRadioButtons, Init(R,
- NewSItem('None 0 (/w0)',
- NewSItem('Level 1 (/w1)',
- NewSItem('Level 2 (/w2)',
- NIL)))));
- Insert(C);
- R.Assign(2, 13, 22, 14);
- Insert(New(pLabel, Init(R, '~W~arning Level', C)));
-
- R.Assign(33, 3, 72, 5);
- C := New(pRadioButtons, Init(R,
- NewSItem('Emulated (/e)',
- NewSItem('Real (/r)',
- NIL))));
- Insert(C);
- R.Assign(32, 2, 50, 3);
- Insert(New(pLabel, Init(R, '~F~loating Point', C)));
-
- R.Assign(33, 7, 72, 9);
- C := New(pRadioButtons, Init(R,
- NewSItem('Normal (/l)',
- NewSItem('Expanded (/la)',
- NIL))));
- Insert(C);
- R.Assign(32, 6, 50, 7);
- Insert(New(pLabel, Init(R, '~L~isting', C)));
- R.Assign(33, 9, 72, 12);
- Insert(New(pCheckBoxes, Init(R,
- NewSITem('No Symbol ~t~ables (/n)',
- NewSItem('Source line ~w~ith error (/z)',
- NewSItem('~I~nclude false conditionals (/x)',
- NIL))))));
-
- R.Assign(33, 14, 72, 18);
- C := New(pRadioButtons, Init(R,
- NewSItem('Standard (/os)',
- NewSItem('Standard with overlays (/o)',
- NewSItem('Phar Lap (/op)',
- NewSItem('IBM (/oi)',
- NIL))))));
- Insert(C);
- R.Assign(32, 13, 52, 14);
- Insert(New(pLabel, Init(R, 'Code ~G~eneration', C)));
-
- R.Assign(33, 19, 72, 21);
- Insert(New(pCheckBoxes, Init(R,
- NewSItem('Check for CS o~v~errides (/p)',
- NewSItem('Suppress OBJ ~r~ecords (/q)',
- NIL)))));
-
- R.Assign(4, 19, 14, 21);
- Insert(New(pButton, Init(R, 'O~k~', cmOk, bfDefault)));
- Inc(R.A.X, 12); Inc(R.B.X, 12);
- Insert(New(pButton, Init(R, '~C~ancel', cmCancel, bfNormal)));
-
- END;
- AsmOptDlg := D;
- END;
-
- (* -------- Assembler Options Data Transfer ------------- *)
-
- TYPE
- AsmOptRec = RECORD
- SegOrder : WORD;
- (* Alphabetic (/a) *)
- (* Source Code (/s) *)
-
- DebugInfo : WORD;
- (* Full (/zi) *)
- (* Line Numbers (/zd) *)
- (* None (/zn) *)
-
- CrossRef : WORD;
- (* Cross Reference (/c) *)
-
- Warnings : WORD;
- (* None 0 (/w0) *)
- (* Level 1 (/w1) *)
- (* Level 2 (/w2) *)
-
- Floating : WORD;
- (* Emulated (/e) *)
- (* Real (/r) *)
-
- Listing : WORD;
- (* Normal (/l) *)
- (* Expanded (/la) *)
-
- ListErr : WORD;
- (* No Symbol tables (/n) *)
- (* Source line with error (/z) *)
- (* Include false conditionals (/x) *)
-
- Code : WORD;
- (* Standard (/os) *)
- (* Standard with overlays (/o) *)
- (* Phar Lap (/op) *)
- (* IBM (/oi) *)
-
- Special : WORD;
- (* Check for CS overrides (/p) *)
- (* Suppress OBJ records (/q) *)
- END;
-
- (* --- Main Application Object -------------------------- *)
-
-
- TYPE
- tMyApp = OBJECT (tApplication)
- PROCEDURE InitMenuBar; VIRTUAL;
- PROCEDURE HandleEvent(VAR Event : tEvent); VIRTUAL;
- PRIVATE
- PROCEDURE DoTest;
- END;
-
- (* Utils *)
-
- FUNCTION HexByte(b : BYTE) : STRING;
- CONST
- H : ARRAY [0..15] OF CHAR = '0123456789ABCDEF';
- BEGIN
- HexByte[0] := #2;
- HexByte[1] := H[b DIV 16];
- HexByte[2] := H[b MOD 16];
- END;
-
- FUNCTION HexWord(w : WORD) : STRING;
- BEGIN
- HexWord := HexByte(w DIV 256) + HexByte(w MOD 256);
- END;
-
- FUNCTION Li2Str(Li : LONGINT) : STRING;
- VAR
- L : RECORD Hi, Lo : WORD; END ABSOLUTE Li;
- BEGIN
- Li2Str := HexWord(L.Lo) + HexWord(L.Hi);
- END;
- (* ----- *)
- PROCEDURE tMyApp.DoTest;
- VAR
- Data : AsmOptRec;
- S : STRING;
- BEGIN
- S := 'MASM /t';
- (* /t = always supress messages when no warnigs *)
- WITH Data DO BEGIN
- SegOrder := $00000000; (* 1 *)
- DebugInfo := $00000000; (* 2 *)
- CrossRef := $00000000; (* 3 *)
- Warnings := $00000000; (* 4 *)
- Floating := $00000000; (* 5 *)
- Listing := $00000000; (* 6 *)
- ListErr := $00000000; (* 7 *)
- Code := $00000000; (* 8 *)
- Special := $00000000; (* 9 *)
- END;
- ExecuteDialog(AsmOptDlg, @Data);
- WITH Data DO BEGIN
- IF SegOrder = 0 THEN S := S + ' /a' ELSE S := S + ' /s';
- CASE DebugInfo OF
- 0 : S := S + ' /zi';
- 1 : S := S + ' /zd';
- 2 : S := S + ' /zn';
- END;
- IF CrossRef = 1 THEN S := S + ' /c';
- CASE Warnings OF
- 0 : S := S + ' /w0';
- 1 : S := S + ' /w1';
- 2 : S := S + ' /w2';
- END;
- IF Floating = 0 THEN S := S + ' /e' ELSE S := S + ' /r';
- IF Listing = 0 THEN S := S + ' /l' ELSE S := S + ' /la';
- IF (ListErr AND 1) = 1 THEN S := S + ' /n';
- IF (ListErr AND 2) = 2 THEN S := S + ' /z';
- IF (ListErr AND 4) = 4 THEN S := S + ' /x';
- CASE Code OF
- 0 : S := S + ' /os';
- 1 : S := S + ' /o';
- 2 : S := S + ' /op';
- 3 : S := S + ' /oi';
- END;
- IF (Special AND 1) = 1 THEN S := S + ' /p';
- IF (Special AND 2) = 2 THEN S := S + ' /q';
- END;
- MessageBox(S, NIL, mfInformation + mfOkButton);
- END;
-
- PROCEDURE tMyApp.InitMenuBar;
- VAR
- R : tRect;
- BEGIN
- GetExtent(R);
- R.B.Y := R.A.Y + 1;
- MenuBar := New(pMenuBar, Init(R, NewMenu(
- NewSubMenu('~≡~', hcNoContext, NewMenu(
- NewItem('~T~est', '', kbNoKey, cmTest, hcNoContext,
- NewItem('~A~bout', '', kbNoKey, cmAbout, hcNoContext,
- NIL))),
- NIL))));
- END;
-
- PROCEDURE tMyApp.HandleEvent(VAR Event : tEvent);
- BEGIN
- inherited HandleEvent(Event);
-
- IF Event.What = evCommand THEN BEGIN
- CASE Event.Command OF
- cmTest : BEGIN
- DoTest;
- END;
- cmAbout : BEGIN
- MessageBox(#3'Turbo Vision Application',
- NIL, mfInformation OR mfOkButton);
- END;
- ELSE
- Exit;
- END;
- ClearEvent(Event);
- END;
- END;
-
- VAR
- anApp : tMyApp;
-
- BEGIN
- anApp.Init;
- anApp.Run;
- anApp.Done;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von ASMDLG.PAS *)
-