home *** CD-ROM | disk | FTP | other *** search
- {$A+,B-,D-,E-,F-,G-,I-,L+,N-,O-,P-,Q-,R-,S-,T-,V-,X-}
- {$M 16384,0,655360}
- (*===================================================================*)
- (* GRAFOVR.PAS *)
- (* (C) 1993 te-wi Verlag *)
- (*-------------------------------------------------------------------*)
- (* Demo- und Testprogramm für Grafiktreiber und -Fonts im Overlay. *)
- (*===================================================================*)
-
- PROGRAM GraphicsDemoWithOverlays;
-
- USES
- Overlay, Dos, Crt, Graph, BGIOvr;
-
- {$O BGIDrv} {$O TRIP_} {$O LITT_} {$O SANS_} {$O GOTH_} {$O SIMP_}
- {$O EURO_} {$O LCOM_} {$O BOLD_} {$O SCRI_} {$O TSCR_}
-
- VAR
- result, (* Checkvariable für Kontrollen *)
- gd, gm, (* Treiber/Modus für InitGraph *)
- x1, x2, XMax, (* für Koordinatenberechnungen *)
- CtrX, CtrY, (* für Koordinatenberechnungen *)
- xr, xl, (* für Koordinatenberechnungen *)
- MaxX, MaxY : INTEGER; (* für Koordinatenberechnungen *)
- i : BYTE; (* Laufvariable für Fonts *)
- s1, s2 : STRING; (* für Meldungen (OutTextXY) *)
- FDir : DirStr; (* Directory (für FSplit) *)
- FName : NameStr; (* Dateiname (für FSplit) *)
- FExt : ExtStr; (* Dateiendung (für FSplit) *)
-
- PROCEDURE PressAKey;
- VAR
- ch: CHAR;
- BEGIN
- ch := #0;
- REPEAT
- ch := ReadKey;
- UNTIL ch <> #0;
- END;
-
- PROCEDURE BoxMessage(s: STRING);
- VAR
- col: WORD;
- BEGIN
- col := GetColor;
- SetTextJustify(CenterText, CenterText);
- SetTextStyle(DefaultFont, HorizDir, 1);
- SetFillStyle(SolidFill, LightGray);
- Bar(MaxX - 24 - TextWidth(s), MaxY - 19, MaxX - 17, MaxY - 7);
- Rectangle(MaxX - 25 - TextWidth(s), MaxY - 19, MaxX - 17, MaxY - 7);
- SetColor(Black);
- Line(MaxX - 24 - TextWidth(s), MaxY - 7, MaxX - 17, MaxY - 7);
- Line(MaxX - 17, MaxY - 19, MaxX - 17, MaxY - 7);
- SetColor(Black);
- OutTextXY(MaxX - 40, MaxY - 12, s);
- SetColor(col);
- END;
-
- BEGIN
- FSplit(ParamStr(0), FDir, FName, FExt);(* Overlay mit Programm- *)
- OvrInit(FDir + FName + '.OVR'); (* verzeichnis u. -Namen *)
- (* externes Overlay ??? *)
- IF OvrResult = -2 THEN OvrInit(ParamStr(0)); (* angehängt! *)
- OvrInitEMS; (* Overlays im EMS *)
- IF OvrResult < -4 THEN OvrResult := 0; (* Kein EMS ist kein Fehler *)
- IF OvrResult <> 0 THEN (* Fehler: Ende mit Message *)
- BEGIN
- WriteLn('Overlay-Fehler: ', OvrResult);
- ReadLn;
- Halt;
- END;
- DetectGraph(gd, gm); (* Grafiktreiber ermitteln *)
- result := LoadDriver(gd); (* ... vor InitGraph laden *)
- IF result < 0 THEN (* Fehler!!! *)
- BEGIN
- WriteLn('Grafik-Overlay-Fehler Nummer ', result);
- Halt;
- END;
- Str(MemAvail DIV 1024, s1); (* freien Heap holen *)
- Str(OvrGetBuf DIV 1024, s2); (* Overlay-Größe holen *)
- InitGraph(gd, gm, ''); (* und jetzt erst initial. *)
- OvrMinimalBuf; (* Puffer verkleinern *)
- CheckSnow := FALSE; (* und ab hier das normale *)
- DirectVideo := TRUE; (* Programm ... *)
- result := GraphResult;
- IF result < 0 THEN BEGIN
- WriteLn(^G, GraphErrorMsg(result));
- Halt;
- END;
- MaxX := GetMaxX + 1; CtrX := MaxX DIV 2;
- MaxY := GetMaxY + 1; CtrY := MaxY DIV 2;
- SetTextStyle(SmallFont, HorizDir, 4);
- SetTextJustify(LeftText, BottomText);
- OutTextXY(10, MaxX DIV 40, 'Initialisierungswerte:');
- SetTextJustify(RightText, BottomText);
- OutTextXY(MaxX - CtrX DIV 4 - 5,
- MaxX DIV 40 + 20 , s2 + ' Kbytes Overlayspeicher belegt');
- OutTextXY(MaxX - CtrX DIV 4 - 5, MaxX DIV 40,
- s1 + ' Kbytes Heap frei');
- SetTextJustify(RightText, BottomText);
- SetTextStyle(DefaultFont, HorizDir, 1);
- BoxMessage('Taste');
- PressAKey;
- SetFillStyle(SolidFill, DarkGray);
- Bar(0,0, MaxX, MaxY);
- SetBkColor(Black);
- SetFillStyle(SolidFill, Red);
- Bar(CtrX DIV 4, 0, MaxX - CtrX DIV 4, CtrY * 2 - 1);
- IF MaxX > 320 THEN
- SetLineStyle(SolidLn, 0, ThickWidth);
- Circle(CtrX, CtrY, CtrY);
- SetFillStyle(XHatchFill, LightBlue);
- PieSlice(CtrX, CtrY, 0, 90, CtrY);
- SetFillStyle(HatchFill, LightBlue);
- PieSlice(CtrX, CtrY, 90, 180, CtrY);
- SetFillStyle(CloseDotFill, LightCyan);
- PieSlice(CtrX, CtrY, 180, 270, CtrY);
- SetFillStyle(WideDotFill, Cyan);
- PieSlice(CtrX, CtrY, 270, 360, CtrY);
- SetColor(LightGray);
- Rectangle(CtrX DIV 4, 0, MaxX - CtrX DIV 4, CtrY * 2 - 1);
- SetColor(White);
- SetLineStyle(SolidLn, 0, NormWidth);
- Line(CtrX DIV 4, CtrY, MaxX - (CtrX DIV 4), CtrY);
- Line(CtrX , 0, CtrX, MaxY);
- XMax := MaxX DIV 4;
- FOR i := 0 TO GetMaxColor DO BEGIN
- xr := MaxX - XMax DIV 2 - 2;
- xl := (XMax DIV 2 + (XMax DIV (Succ(GetMaxColor) DIV 4)
- * i) * 6 DIV 8) + 2;
- IF xl > xr THEN xl := xr;
- SetFillStyle(SolidFill, i);
- SetColor(White);
- Bar(xl, CtrY DIV 2, xr, CtrY);
- IF GetMaxColor <= 15 THEN Rectangle(xl, CtrY DIV 2, xr, CtrY);
- END;
- FOR i := 0 TO 11 DO BEGIN
- SetFillStyle(i, White);
- Bar((XMax DIV 2 + (XMax DIV 8 * i) * 2) + 2,
- CtrY, (MaxX - (CtrX DIV 4) - 2), MaxY - CtrY DIV 2);
- Rectangle((XMax DIV 2 + (XMax DIV 8 * i) * 2) + 2,
- CtrY, (MaxX - (CtrX DIV 4) - 2),
- MaxY - CtrY DIV 2);
- END;
- SetTextStyle(SmallFont, VertDir, 4);
- SetTextJustify(LeftText, BottomText);
- SetColor(LightCyan);
- OutTextXY(GetMaxX - 12, GetMaxY - 50, '(C) 1993 te-wi Verlag');
- SetColor(White);
- Str(MemAvail DIV 1024, s1);
- SetTextStyle(SmallFont, HorizDir, 4);
- SetTextJustify(RightText, BottomText);
- OutTextXY(MaxX - CtrX DIV 4 - 5, MaxX DIV 40,
- s1 + ' Kbytes Heap frei');
- Str(OvrGetBuf DIV 1024, s2);
- OutTextXY(MaxX - CtrX DIV 4 - 5,
- MaxX DIV 40 + 20 , s2 + ' Kbytes Overlayspeicher belegt');
- BoxMessage('Taste');
- FOR i := 0 TO 10 DO
- BEGIN
- SetColor(White);
- SetUserCharSize(1, 3, 1, 3);
- SetTextStyle(i, HorizDir, UserCharSize);
- SetFillStyle(InterleaveFill, DarkGray);
- Bar(CtrX - 84, MaxY - MaxY DIV 6 - 16,
- CtrX + 84, MaxY - MaxY DIV 6 + 16);
- Rectangle(CtrX - 84, MaxY - MaxY DIV 6 - 16,
- CtrX + 84, MaxY - MaxY DIV 6 + 16);
- SetTextJustify(CenterText, CenterText);
- OutTextXY(CtrX, MaxY - MaxY DIV 6, GetModeName(gm));
- IF i = 10 THEN BoxMessage('Ende!');
- PressAKey;
- END;
- CloseGraph;
- END.
-
- (*===================================================================*)
-