(* 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.