home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / grafik / svgatest.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-05-09  |  3.3 KB  |  121 lines

  1. {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V-,X-}
  2. {$M 16384,0,655360}
  3. (*===================================================================*)
  4. (*                            SVGATEST.PAS                           *)
  5. (*                 (C) 1993 te-wi Verlag, München                    *)
  6. (*           Demo für 800*600-Grafik in Borland Pascal 7.0           *)
  7. (*===================================================================*)
  8.  
  9. PROGRAM SVGATest; (* Demo für SVGA 800 * 600 *)
  10. USES              (* siehe auch GRAPHERG.PAS *)
  11.   DOS, Crt, Graph;
  12.  
  13. CONST
  14.   SVGADriverPtr: Pointer = NIL;
  15. VAR
  16.   FileBuffer   : ARRAY[0..5526] OF BYTE;
  17.   (* MUSS GLOBAL DEFINIERT SEIN, RATEN SIE EINMAL, WARUM! *)
  18.  
  19. FUNCTION DetectSVGA: BYTE;
  20. TYPE
  21.   SVGAType = RECORD
  22.     n: STRING[11];
  23.     C: BYTE;
  24.   END;
  25. CONST
  26.   CardNum = 11;
  27.   SVGACards: ARRAY[1..CardNum] OF SVGAType = (
  28.   (n: 'TSENG';     C: $29), (n: 'PARADISE';  C: $58),
  29.   (n: 'WESTERN';   C: $58), (n: 'TRIDENT';   C: $5B),
  30.   (n: 'OAK';       C: $52), (n: 'V7';        C: $62),
  31.   (n: 'GENOA';     C: $79), (n: 'TECMAR';    C: $16),
  32.   (n: '761295520'; C: $54), (n: 'AWARD';     C: $58),
  33.   (n: 'SIGMA';     C: $29)); (* hier erweitern ! *)
  34.  
  35. VAR
  36.   Regs: Registers;
  37.   BIOS: ARRAY[0..254] OF CHAR ABSOLUTE $C000:$0000;
  38.   s   : ARRAY[0..254] OF CHAR;
  39.   i   : INTEGER;
  40. BEGIN
  41.   DetectSVGA := $FF;
  42.   Regs.AX := $1A00;
  43.   Intr($10, Regs);
  44.   IF Regs.AL = $1A THEN BEGIN
  45.     Regs.AX := $6F00;
  46.     Regs.BX := $0000;
  47.     Intr($10, Regs);
  48.     IF Regs.BX = $5637 (* 'V7' *) THEN BEGIN
  49.        DetectSVGA := $62;
  50.        Exit;
  51.     END;
  52.   END;
  53.   Move(BIOS, s, 255);
  54.   FOR i := 0 TO 254 DO s[i] := UpCase(s[i]);
  55.   FOR i := 1 TO CardNum DO WITH SVGACards[i] DO BEGIN
  56.     IF Pos(n, s) > 0 THEN BEGIN
  57.       DetectSVGA := c;
  58.       Exit;
  59.     END;
  60.   END;     
  61. END;
  62.  
  63. FUNCTION PatchDriver(PathToDriver: STRING; SVGAInit: BYTE): INTEGER;
  64. VAR
  65.   f         : FILE;
  66.   fName     : STRING;
  67. BEGIN
  68.   PatchDriver := 0;
  69.   IF PathToDriver <> '' THEN
  70.     fName := PathToDriver + '\SVGA.BGI'
  71.   ELSE fName := 'SVGA.BGI';
  72.   IF Pos('\\', fName) > 0 THEN
  73.     Delete(fName, Pos('\\', fName), 1);
  74.   Assign(f, fName);
  75.   {$I-}
  76.   Reset(f, 1);
  77.   IF IOResult <> 0 THEN BEGIN
  78.     PatchDriver := grFileNotFound;
  79.     Exit;
  80.   END;
  81.   {$I+}
  82.   IF FileSize(f) <> 5527 THEN BEGIN
  83.     PatchDriver := grInvalidDriver;
  84.     Exit;
  85.   END;
  86.   BlockRead(f, FileBuffer, 5527);
  87.   Close(f);
  88.   FileBuffer[$431]  := SVGAInit;
  89.   FileBuffer[$1030] := SVGAInit;
  90.   SVGADriverPtr := @FileBuffer;
  91. END;
  92.  
  93. VAR
  94.   result,
  95.   gd, gm      : INTEGER;
  96.   SVGAInit    : BYTE;
  97.   PathToDriver: STRING;
  98. BEGIN
  99.   DetectGraph(gd, gm);
  100.   PathToDriver := GetEnv('BGIPATH');
  101.   IF gd = VGA THEN BEGIN
  102.     SVGAInit := DetectSVGA;
  103.     IF SVGAInit <> $FF THEN BEGIN
  104.       result := PatchDriver(PathToDriver, SVGAInit);
  105.       IF result = 0 THEN BEGIN
  106. { 1. }  gd := InstallUserDriver('SVGA', SVGADriverPtr);
  107. { 2. }  gd := RegisterBGIDriver(SVGADriverPtr);
  108. { 3. }  gd := 16; (* User-Treiber sind immer die Nummer 16! *)
  109.         gm := 0;  (* Im Treiber arbeitet nur Mode 0 richtig *)
  110.       END;
  111.     END; 
  112.   END;
  113.   InitGraph(gd, gm, PathToDriver);
  114.   SetTextJustify(CenterText, CenterText);
  115.   OutTextXY(GetMaxX DIV 2, GetMaxY DIV 2, GetModeName(gm));
  116.   REPEAT UNTIL KeyPressed;
  117.   RestoreCrtMode;
  118. END.
  119.  
  120. (*===================================================================*)
  121.