home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 12 / tricks / attribut.mod < prev    next >
Text File  |  1990-09-27  |  2KB  |  72 lines

  1. (*-------------------------------------------------------*)
  2. (*                    Attribut.MOD                       *)
  3. (*    Modul zum Wechseln des Hintergrundattributes für   *)
  4. (*       Hercules, CGA und EGA in Fitted Modula-2        *)
  5. (*             (C) 1990 toolbox & J. Braun               *)
  6. (*-------------------------------------------------------*)
  7. IMPLEMENTATION MODULE Attribut;
  8.  
  9. FROM SYSTEM IMPORT ASSEMBLER;
  10. FROM System IMPORT Trap, AX, BX;
  11.  
  12. PROCEDURE BackgroundMode (flash: BOOLEAN);
  13. CONST
  14.   cga      = 0;
  15.   hercmono = 1;
  16.   egavga   = 2;
  17. TYPE
  18.   Registers = RECORD
  19.                CASE b: BOOLEAN OF
  20.                  TRUE:  w: CARDINAL;
  21.                | FALSE: l, h: CHAR;
  22.                END;
  23.   END;
  24. VAR
  25.   RegAX,
  26.   RegBX: Registers;
  27.   gd   : INTEGER;
  28.   hires,
  29.   p    : CHAR;
  30.   port : CARDINAL;
  31.  
  32. BEGIN
  33.   RegAX.h := CHR(15); AX := RegAX.w;
  34.   Trap(10H);
  35.   RegAX.w := AX;
  36.   IF RegAX.l = CHR(7) THEN gd := hercmono
  37.   ELSE
  38.     ASM
  39.         PUSH DS
  40.         XOR  DX, DX
  41.         MOV  DS, DX
  42.         MOV  BX, 04A8H
  43.         MOV  DX, DS:[BX]
  44.         MOV  @hires, DX
  45.         POP  DS
  46.      END;
  47.      IF hires > CHR(0) THEN gd := egavga
  48.                        ELSE gd := cga; END;
  49.   END;
  50.   IF gd = hercmono THEN port := 3B8H
  51.                    ELSE port := 3D8H; END;
  52.   IF gd < egavga THEN
  53.     IF flash = FALSE THEN p := CHR(09H)
  54.                      ELSE p := CHR(29H); END;
  55.     ASM
  56.       MOV  DX, @port
  57.       MOV  AX, @p
  58.       OUT  DX, AX
  59.     END
  60.   ELSE
  61.     RegAX.w := 1003H;
  62.     AX := RegAX.w;
  63.     IF flash = FALSE THEN RegBX.l := CHR(0)
  64.                      ELSE RegBX.l := CHR(1); END;
  65.     BX := RegBX.w;
  66.     Trap(10H);
  67.   END;
  68. END BackgroundMode;
  69. END Attribut.
  70. (*-------------------------------------------------------*)
  71. (*                  Ende von Attribut.MOD                *)
  72.