GR_DEMO.MOD 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. MODULE GR_Demo;
  2. (* GR_xxxx demonstration:
  3. Test code for Ellipses - Normalized Coordinates
  4. Use all aspect ratios, with hardware (EGA/VGA) colours in DefaultAspect
  5. and RBG colours in others. *)
  6. FROM GR_Hardware IMPORT VideoConfig, GetVideoConfig, SetVideoMode,
  7. CGA_Adapter, EGA_Adapter, VGA_Adapter, HGC_Adapter,
  8. CGA_Mode_4, EGA_Mode_16, VGA_Mode_18,
  9. HGC_Graphics_Mode;
  10. FROM GR_Attributes IMPORT AspectSetting, DefaultAspect, GetWriteMode,
  11. MaxYAspect, SetBgColour, SetColour,
  12. SetRGBBgColour, SetRGBColour,
  13. SetNDCClipRect, SetNDCAspect, SetWriteMode,
  14. WriteMode, xorMode,
  15. White, Red, LightBlue, Yellow, Black;
  16. FROM GR_Primitives IMPORT ClearDisplay, EllipseNDC, LineNDC;
  17. FROM InOut IMPORT WriteString, WriteLn, WriteCard;
  18. FROM Terminal IMPORT GetKeyStroke;
  19. VAR
  20. vinfo : VideoConfig;
  21. oldMode,
  22. fg, bg : CARDINAL;
  23. ok : BOOLEAN;
  24. ch : CHAR;
  25. x1, y1,
  26. x2, y2 : REAL;
  27. a : AspectSetting;
  28. BEGIN
  29. GetVideoConfig(vinfo);
  30. oldMode := vinfo.mode;
  31. IF vinfo.adapter = CGA_Adapter THEN
  32. ok := SetVideoMode(CGA_Mode_4);
  33. WriteString("set CGA"); WriteLn;
  34. ELSIF vinfo.adapter = EGA_Adapter THEN
  35. ok := SetVideoMode(EGA_Mode_16);
  36. WriteString("set EGA"); WriteLn;
  37. ELSIF vinfo.adapter = VGA_Adapter THEN
  38. ok := SetVideoMode(VGA_Mode_18);
  39. WriteString("set VGA"); WriteLn;
  40. ELSIF vinfo.adapter = HGC_Adapter THEN
  41. ok := SetVideoMode(HGC_Graphics_Mode);
  42. WriteString("set HGC"); WriteLn;
  43. ELSE
  44. WriteString("Graph error : unsupported video adapter.");
  45. WriteLn;
  46. HALT;
  47. END;
  48. GetVideoConfig(vinfo);
  49. FOR a := DefaultAspect TO MaxYAspect DO
  50. IF a = DefaultAspect THEN
  51. SetBgColour(Red);
  52. ELSE
  53. SetRGBBgColour(0.5, 0.0, 0.0); (* red - >0.75,0.0,0.0 is pink? *)
  54. END;
  55. SetNDCAspect(a);
  56. SetNDCClipRect(0.0, 0.0, 1.0, 1.0);
  57. ClearDisplay;
  58. EllipseNDC(-0.1, -0.1, 1.1, 1.1);
  59. EllipseNDC( 0.0, 0.0, 1.0, 1.0);
  60. EllipseNDC( 0.2, 0.2, 0.8, 0.8);
  61. x1 := 0.3; y1 := 0.3;
  62. x2 := 0.7; y2 := 0.7;
  63. SetNDCClipRect(x1, y1, x2, y2);
  64. IF a = DefaultAspect THEN
  65. SetColour(Yellow);
  66. ELSE
  67. SetRGBColour(1.0, 1.0, 0.0); (* yellow *)
  68. END;
  69. LineNDC(x1, y1, x2, y1);
  70. LineNDC(x2, y1, x2, y2);
  71. LineNDC(x2, y2, x1, y2);
  72. LineNDC(x1, y2, x1, y1);
  73. IF a = DefaultAspect THEN
  74. SetColour(LightBlue);
  75. ELSE
  76. SetRGBColour(0.0, 0.0, 1.0); (* (light) blue *)
  77. END;
  78. EllipseNDC(0.25, 0.25, 0.75, 0.75);
  79. EllipseNDC(0.3, 0.3, 0.7, 0.7);
  80. IF a = DefaultAspect THEN
  81. SetColour(White);
  82. ELSE
  83. SetRGBColour(1.0, 1.0, 1.0); (* white *)
  84. END;
  85. EllipseNDC(0.4, 0.1, 0.6, 0.9);
  86. GetKeyStroke(ch); (* wait for user to input *)
  87. IF a = DefaultAspect THEN
  88. SetBgColour(Black);
  89. ELSE
  90. SetRGBBgColour(0.0, 0.0, 0.0); (* black *)
  91. END;
  92. SetNDCClipRect(0.0, 0.0, 1.0, 1.0);
  93. ClearDisplay;
  94. END; (* FOR *)
  95. ok := SetVideoMode(oldMode); (* return to text mode 3 *)
  96. END GR_Demo.