| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- (* Release 3.10 *)
- (*-------------------------------------------------------------------------*
- * *
- * GRAPHI.DEF - Modula-2 graphics functions requiring IOPL *
- * *
- * COPYRIGHT (C) 1987..1992 Clarion Software Corporation. *
- * All Rights Reserved *
- * *
- *--------------------------------------------------------------------------*)
- (*# call(o_a_copy=>off) *)
- (*# call(near_call=>off,
- seg_name=>GRAPH_IOPL,
- iopl=>on) *)
- (*# data(near_ptr=>off) *)
- (*%F _fdata *)
- (*# data(seg_name => null) *)
- (*%E *)
- (*# check(stack=>off,
- index=>off,
- range=>off,
- overflow=>off,
- nil_ptr=>off) *)
- (*# module(implementation=>off) *)
- DEFINITION MODULE GraphI; (* IOPL graphics routines *)
- IMPORT Vio;
- CONST
- BitMapSize = 38400; (* Size of Vga bit plane *)
- MaxBitMap = 3;
- TYPE
- BitMapBuffer = ARRAY[0..BitMapSize-1] OF BYTE;
- VGABuffer = ARRAY[0..MaxBitMap] OF POINTER TO BitMapBuffer;
- VAR
- Buffer : VGABuffer; (* used for EGA/VGA screen saving *)
- VideoSel : CARDINAL; (* Base address OF VGA graphics memory *)
- IsCGA : BOOLEAN; (* TRUE is CGA, FALSE if EGA/VGA *)
- Virtual : BOOLEAN; (* Write to buffer instead of screen *)
- GraphM : BOOLEAN;
- G_Plot : PROCEDURE(CARDINAL, CARDINAL, CARDINAL);
- G_Point : PROCEDURE(CARDINAL, CARDINAL): CARDINAL;
- G_HLine : PROCEDURE(CARDINAL, CARDINAL, CARDINAL, CARDINAL);
- VAR
- CurMode : Vio.MODEINFO;
- G_TextMode: PROCEDURE();
- G_GraphMode: PROCEDURE();
- TYPE
- BS = SET OF [0..7];
- (*# save, data(volatile=>on) *)
- BP = POINTER TO BS;
- (*# restore *)
- BMP = POINTER TO BitMapBuffer;
- CGABuff = ARRAY[0..3FFFH] OF BYTE;
- CGABuffPtr = POINTER TO CGABuff;
- A1 = ARRAY [0..0] OF SHORTCARD;
- A26 = ARRAY [0..25] OF SHORTCARD;
- VAR
- CBuffer : CGABuff; (* used for CGA screen saving *)
- (*# save,
- call( reg_param=>(dx,ax),
- reg_saved=>(dx,ax,bx,cx,si,di,es,ds,st1,st2),
- inline=>on )
- *)
- INLINE PROCEDURE Out (p:CARDINAL;v:SHORTCARD)=A1(0EEH);
- (*# call(reg_param=>(es,di,si,dx,cx),reg_saved=>(ds,bx,st1,st2), inline=>on) *)
- INLINE PROCEDURE GRCopy(dest, source: FarADDRESS; Words : CARDINAL)
- =A26(1EH, 8EH, 0DAH, 8BH, 0D7H, 0F7H, 0C7H, 1H, 0, 74H, 2H, 0A4H, 49H,
- 0D1H, 0E9H, 0F3H, 0A5H, 13H, 0C9H, 0F3H, 0A4H, 08BH, 0C2H, 08CH,
- 0C2H, 01FH);
- (*# restore *)
- PROCEDURE SaveScreen;
- PROCEDURE RestoreScreen();
- PROCEDURE EGAPlot( x,y,c : CARDINAL); (* Also VGA *)
- PROCEDURE EGAPoint(x,y:CARDINAL) : CARDINAL; (* Also VGA *)
- PROCEDURE EGAHLine ( x,y,x2 : CARDINAL; c:CARDINAL ); (* Also VGA *)
- PROCEDURE SaveCGAScreen;
- PROCEDURE RestoreCGAScreen();
- PROCEDURE CGAPlot(x,y:CARDINAL;c:CARDINAL);
- PROCEDURE CGAPoint(x,y:CARDINAL) : CARDINAL;
- PROCEDURE CGAHLine ( x,y,x2 : CARDINAL; c:CARDINAL );
- PROCEDURE Plot( x,y,c : CARDINAL); (* CGA/EGA/VGA *)
- PROCEDURE HLine ( x,y,x2 : CARDINAL; c:CARDINAL ); (* CGA/EGA/VGA *)
- PROCEDURE Line(x1,y1,x2,y2: CARDINAL; c: CARDINAL);
- PROCEDURE Disc(x0,y0,r: CARDINAL; c: CARDINAL);
- PROCEDURE Circle(x0,y0,r: CARDINAL; c: CARDINAL);
- PROCEDURE Polygon(n: CARDINAL; px,py: ARRAY OF CARDINAL; c: CARDINAL);
- END GraphI.
|