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}
- (*===================================================================*)
- (* SVGATEST.PAS *)
- (* (C) 1993 te-wi Verlag, München *)
- (* Demo für 800*600-Grafik in Borland Pascal 7.0 *)
- (*===================================================================*)
-
- PROGRAM SVGATest; (* Demo für SVGA 800 * 600 *)
- USES (* siehe auch GRAPHERG.PAS *)
- DOS, Crt, Graph;
-
- CONST
- SVGADriverPtr: Pointer = NIL;
- VAR
- FileBuffer : ARRAY[0..5526] OF BYTE;
- (* MUSS GLOBAL DEFINIERT SEIN, RATEN SIE EINMAL, WARUM! *)
-
- FUNCTION DetectSVGA: BYTE;
- TYPE
- SVGAType = RECORD
- n: STRING[11];
- C: BYTE;
- END;
- CONST
- CardNum = 11;
- SVGACards: ARRAY[1..CardNum] OF SVGAType = (
- (n: 'TSENG'; C: $29), (n: 'PARADISE'; C: $58),
- (n: 'WESTERN'; C: $58), (n: 'TRIDENT'; C: $5B),
- (n: 'OAK'; C: $52), (n: 'V7'; C: $62),
- (n: 'GENOA'; C: $79), (n: 'TECMAR'; C: $16),
- (n: '761295520'; C: $54), (n: 'AWARD'; C: $58),
- (n: 'SIGMA'; C: $29)); (* hier erweitern ! *)
-
- VAR
- Regs: Registers;
- BIOS: ARRAY[0..254] OF CHAR ABSOLUTE $C000:$0000;
- s : ARRAY[0..254] OF CHAR;
- i : INTEGER;
- BEGIN
- DetectSVGA := $FF;
- Regs.AX := $1A00;
- Intr($10, Regs);
- IF Regs.AL = $1A THEN BEGIN
- Regs.AX := $6F00;
- Regs.BX := $0000;
- Intr($10, Regs);
- IF Regs.BX = $5637 (* 'V7' *) THEN BEGIN
- DetectSVGA := $62;
- Exit;
- END;
- END;
- Move(BIOS, s, 255);
- FOR i := 0 TO 254 DO s[i] := UpCase(s[i]);
- FOR i := 1 TO CardNum DO WITH SVGACards[i] DO BEGIN
- IF Pos(n, s) > 0 THEN BEGIN
- DetectSVGA := c;
- Exit;
- END;
- END;
- END;
-
- FUNCTION PatchDriver(PathToDriver: STRING; SVGAInit: BYTE): INTEGER;
- VAR
- f : FILE;
- fName : STRING;
- BEGIN
- PatchDriver := 0;
- IF PathToDriver <> '' THEN
- fName := PathToDriver + '\SVGA.BGI'
- ELSE fName := 'SVGA.BGI';
- IF Pos('\\', fName) > 0 THEN
- Delete(fName, Pos('\\', fName), 1);
- Assign(f, fName);
- {$I-}
- Reset(f, 1);
- IF IOResult <> 0 THEN BEGIN
- PatchDriver := grFileNotFound;
- Exit;
- END;
- {$I+}
- IF FileSize(f) <> 5527 THEN BEGIN
- PatchDriver := grInvalidDriver;
- Exit;
- END;
- BlockRead(f, FileBuffer, 5527);
- Close(f);
- FileBuffer[$431] := SVGAInit;
- FileBuffer[$1030] := SVGAInit;
- SVGADriverPtr := @FileBuffer;
- END;
-
- VAR
- result,
- gd, gm : INTEGER;
- SVGAInit : BYTE;
- PathToDriver: STRING;
- BEGIN
- DetectGraph(gd, gm);
- PathToDriver := GetEnv('BGIPATH');
- IF gd = VGA THEN BEGIN
- SVGAInit := DetectSVGA;
- IF SVGAInit <> $FF THEN BEGIN
- result := PatchDriver(PathToDriver, SVGAInit);
- IF result = 0 THEN BEGIN
- { 1. } gd := InstallUserDriver('SVGA', SVGADriverPtr);
- { 2. } gd := RegisterBGIDriver(SVGADriverPtr);
- { 3. } gd := 16; (* User-Treiber sind immer die Nummer 16! *)
- gm := 0; (* Im Treiber arbeitet nur Mode 0 richtig *)
- END;
- END;
- END;
- InitGraph(gd, gm, PathToDriver);
- SetTextJustify(CenterText, CenterText);
- OutTextXY(GetMaxX DIV 2, GetMaxY DIV 2, GetModeName(gm));
- REPEAT UNTIL KeyPressed;
- RestoreCrtMode;
- END.
-
- (*===================================================================*)
-