GRAPHI.DEF 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * GRAPHI.DEF - Modula-2 graphics functions requiring IOPL *
  5. * *
  6. * COPYRIGHT (C) 1987..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. (*# call(o_a_copy=>off) *)
  11. (*# call(near_call=>off,
  12. seg_name=>GRAPH_IOPL,
  13. iopl=>on) *)
  14. (*# data(near_ptr=>off) *)
  15. (*%F _fdata *)
  16. (*# data(seg_name => null) *)
  17. (*%E *)
  18. (*# check(stack=>off,
  19. index=>off,
  20. range=>off,
  21. overflow=>off,
  22. nil_ptr=>off) *)
  23. (*# module(implementation=>off) *)
  24. DEFINITION MODULE GraphI; (* IOPL graphics routines *)
  25. IMPORT Vio;
  26. CONST
  27. BitMapSize = 38400; (* Size of Vga bit plane *)
  28. MaxBitMap = 3;
  29. TYPE
  30. BitMapBuffer = ARRAY[0..BitMapSize-1] OF BYTE;
  31. VGABuffer = ARRAY[0..MaxBitMap] OF POINTER TO BitMapBuffer;
  32. VAR
  33. Buffer : VGABuffer; (* used for EGA/VGA screen saving *)
  34. VideoSel : CARDINAL; (* Base address OF VGA graphics memory *)
  35. IsCGA : BOOLEAN; (* TRUE is CGA, FALSE if EGA/VGA *)
  36. Virtual : BOOLEAN; (* Write to buffer instead of screen *)
  37. GraphM : BOOLEAN;
  38. G_Plot : PROCEDURE(CARDINAL, CARDINAL, CARDINAL);
  39. G_Point : PROCEDURE(CARDINAL, CARDINAL): CARDINAL;
  40. G_HLine : PROCEDURE(CARDINAL, CARDINAL, CARDINAL, CARDINAL);
  41. VAR
  42. CurMode : Vio.MODEINFO;
  43. G_TextMode: PROCEDURE();
  44. G_GraphMode: PROCEDURE();
  45. TYPE
  46. BS = SET OF [0..7];
  47. (*# save, data(volatile=>on) *)
  48. BP = POINTER TO BS;
  49. (*# restore *)
  50. BMP = POINTER TO BitMapBuffer;
  51. CGABuff = ARRAY[0..3FFFH] OF BYTE;
  52. CGABuffPtr = POINTER TO CGABuff;
  53. A1 = ARRAY [0..0] OF SHORTCARD;
  54. A26 = ARRAY [0..25] OF SHORTCARD;
  55. VAR
  56. CBuffer : CGABuff; (* used for CGA screen saving *)
  57. (*# save,
  58. call( reg_param=>(dx,ax),
  59. reg_saved=>(dx,ax,bx,cx,si,di,es,ds,st1,st2),
  60. inline=>on )
  61. *)
  62. INLINE PROCEDURE Out (p:CARDINAL;v:SHORTCARD)=A1(0EEH);
  63. (*# call(reg_param=>(es,di,si,dx,cx),reg_saved=>(ds,bx,st1,st2), inline=>on) *)
  64. INLINE PROCEDURE GRCopy(dest, source: FarADDRESS; Words : CARDINAL)
  65. =A26(1EH, 8EH, 0DAH, 8BH, 0D7H, 0F7H, 0C7H, 1H, 0, 74H, 2H, 0A4H, 49H,
  66. 0D1H, 0E9H, 0F3H, 0A5H, 13H, 0C9H, 0F3H, 0A4H, 08BH, 0C2H, 08CH,
  67. 0C2H, 01FH);
  68. (*# restore *)
  69. PROCEDURE SaveScreen;
  70. PROCEDURE RestoreScreen();
  71. PROCEDURE EGAPlot( x,y,c : CARDINAL); (* Also VGA *)
  72. PROCEDURE EGAPoint(x,y:CARDINAL) : CARDINAL; (* Also VGA *)
  73. PROCEDURE EGAHLine ( x,y,x2 : CARDINAL; c:CARDINAL ); (* Also VGA *)
  74. PROCEDURE SaveCGAScreen;
  75. PROCEDURE RestoreCGAScreen();
  76. PROCEDURE CGAPlot(x,y:CARDINAL;c:CARDINAL);
  77. PROCEDURE CGAPoint(x,y:CARDINAL) : CARDINAL;
  78. PROCEDURE CGAHLine ( x,y,x2 : CARDINAL; c:CARDINAL );
  79. PROCEDURE Plot( x,y,c : CARDINAL); (* CGA/EGA/VGA *)
  80. PROCEDURE HLine ( x,y,x2 : CARDINAL; c:CARDINAL ); (* CGA/EGA/VGA *)
  81. PROCEDURE Line(x1,y1,x2,y2: CARDINAL; c: CARDINAL);
  82. PROCEDURE Disc(x0,y0,r: CARDINAL; c: CARDINAL);
  83. PROCEDURE Circle(x0,y0,r: CARDINAL; c: CARDINAL);
  84. PROCEDURE Polygon(n: CARDINAL; px,py: ARRAY OF CARDINAL; c: CARDINAL);
  85. END GraphI.
  86.