|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 49408 (0xc100) Types: TextFile Names: »VDIBND.PAS«
└─⟦4fbcde1e4⟧ Bits:30003931/GEM_Development-A.imd Disketter indleveret af Steffen Jensen (Piccolo/Piccoline) └─⟦this⟧ »VDIBND.PAS«
(*****************************************************************) (** File Name : VDIBND.PAS **) (** **) (** Modified for Turbo Pascal **) (** **) (** Comments : All these language bindings **) (** use array's relative to 0. **) (** **) (** Author : Athol M Foden **) (** History : Feb 1985 **) (** Last Modified : 12 February 1986 **) (** Digital Research Inc. **) (** **) (*****************************************************************) (* reuires gempcon.i, gemptype.i, gempvar.i *) (*****************************************************************) PROCEDURE GVDI (VAR gptsout : ptsout_ARRAY; VAR gintout : intout_ARRAY; VAR gptsin : ptsin_ARRAY; VAR gintin : intin_ARRAY; VAR gcontrl : contrl_ARRAY); CONST VDIinterruptVector = $EF; VDImagicConstant = $0473; TYPE ADDRESS = ^BYTE; VAR parameterBlock : RECORD controlArray : ADDRESS; inputParameterArray : ADDRESS; inputPointCoordinateArray : ADDRESS; outputParameterArray : ADDRESS; outputPointCoordinateArray : ADDRESS; END (* RECORD *); registers : RECORD ax, bx, cx, dx, bp, si, di, ds, es, flags : INTEGER; END (* RECORD *); BEGIN (* GVDI *) parameterBlock.controlArray := ADDR(gcontrl); parameterBlock.inputParameterArray := ADDR(gintin); parameterBlock.inputPointCoordinateArray := ADDR(gptsin); parameterBlock.outputParameterArray := ADDR(gintout); parameterBlock.outputPointCoordinateArray := ADDR(gptsout); registers.cx := VDImagicConstant; registers.ds := SEG(parameterBlock); registers.dx := OFS(parameterBlock); swint(VDIinterruptvector, registers); END (* GVDI *); (**************************************************************) (* general (and only) call to GEM VDI *) FUNCTION gemvdif(opcode, handle : INTEGER) : INTEGER; BEGIN contrlÆ0Å := opcode; contrlÆ6Å := handle; (* in gempcall - gdos interrupt*) GVDI(ptsout, intout, ptsin, intin, contrl); gemvdif := intoutÆ0Å; END; (********************************************************************) (*** CONTROL FUNCTIONS ***) (*****************************************************************) (** open workstation **) FUNCTION v_opnwk (workin : intin_ARRAY; VAR handle : INTEGER; VAR workout : ARRAY_57) : INTEGER; VAR i : INTEGER; BEGIN FOR i:=0 TO intin_max DO intinÆiÅ := workinÆiÅ; contrlÆ1Å := 0; contrlÆ3Å := 11; v_opnwk := gemvdif(1,handle); (* opcode = 1 *) handle := contrlÆ6Å; FOR i:=0 TO 44 DO workoutÆiÅ := intoutÆiÅ; FOR i:=0 TO 11 DO workoutÆi + 44Å := ptsoutÆiÅ; END; (****************************************************************) (** close workstation **) FUNCTION v_clswk (handle : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; v_clswk := gemvdif(2,handle); END; (*****************************************************************) (** open virtual workstation **) FUNCTION v_opnvwk (workin : intin_ARRAY; VAR handle : INTEGER; VAR workout : ARRAY_57) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; (* no of input vertices *) contrlÆ3Å := 11; (* length of intin *) FOR i:=0 TO intin_max DO intinÆiÅ := workinÆiÅ; v_opnvwk := gemvdif(100,handle); (* handle from previously opened screen device *) handle := contrlÆ6Å; FOR i:=0 TO 44 DO workoutÆiÅ := intoutÆiÅ; FOR i:=0 TO 11 DO workoutÆi + 44Å := ptsoutÆiÅ; END; (****************************************************************) (** close virtual workstation **) FUNCTION v_clsvwk (handle : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; v_clsvwk := gemvdif(101,handle); END; (*****************************************************************) (** clear workstation **) FUNCTION v_clrwk (handle : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; v_clrwk := gemvdif(3,handle); END; (******************************************************************) (** update workstation **) FUNCTION v_updwk ( handle : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; v_updwk := gemvdif(4,handle); END; (**************************************************************************) (** Load extra fonts into memory - caller must free up some memory space **) FUNCTION vst_load_fonts(handle, select : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; intinÆ0Å := select; vst_load_fonts := gemvdif(119,handle); END; (********************************************************************) (** Unload those extra fonts **) FUNCTION vst_unload_fonts(handle, select : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; intinÆ0Å := select; vst_unload_fonts := gemvdif(120,handle); END; (**************************************************************************) (** set clipping rectangle **) FUNCTION vs_clip (handle : INTEGER; clipflag : INTEGER; pxyarray : ARRAY_4) : INTEGER; VAR i: INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ3Å := 1; intinÆ0Å := clipflag; FOR i:=0 TO 3 DO ptsinÆiÅ := pxyarrayÆiÅ; vs_clip := gemvdif(129,handle); END; (************************) (** OUTPUT FUNCTIONS **) (***************************************************************) (** polyline **) FUNCTION v_pline (handle, count : INTEGER; pxyarray : ptsin_ARRAY) : INTEGER; VAR i, n : INTEGER; BEGIN contrlÆ1Å := count; (* number of vertices to follow *) contrlÆ3Å := 0; n := count * 2 - 1; (* twice as many numbers as there are coords *) FOR i:=0 TO n DO ptsinÆiÅ := pxyarrayÆiÅ; v_pline := gemvdif(6,handle); END; (****************************************************************) (** polymarker **) FUNCTION v_pmarker (handle, count : INTEGER; pxyarray : ptsin_ARRAY) : INTEGER; VAR i, n : INTEGER; BEGIN contrlÆ1Å := count; (* number of markers *) contrlÆ3Å := 0; n := count * 2 - 1; FOR i:=0 TO n DO ptsinÆiÅ := pxyarrayÆiÅ; v_pmarker := gemvdif(7,handle); END; (**************************************************************) (** text **) FUNCTION v_gtext (handle, x, y : INTEGER; chstring : CharString) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 1; contrlÆ3Å := LEN(chstring); ptsinÆ0Å := x; ptsinÆ1Å := y; FOR i:=1 TO LEN(chstring) DO intinÆi- 1Å := ORD(chstringÆiÅ); intinÆLEN(chstring)Å := 0; v_gtext := gemvdif(8,handle); END; (***************************************************************) (** filled area **) FUNCTION v_fillarea(handle, count : INTEGER; pxyarray : ptsin_ARRAY) : INTEGER; VAR i, n : INTEGER; BEGIN contrlÆ1Å := count; contrlÆ3Å := 0; n := count * 2 - 1; FOR i:=0 TO n DO ptsinÆiÅ := pxyarrayÆiÅ; v_fillarea := gemvdif(9,handle); END; (**************************************************************) (** cell array **) FUNCTION v_cellarray (handle : INTEGER; pxyarray : ARRAY_4; rowlength, elused, numrows, wrtmode : INTEGER; colorlen : INTEGER; colarray : intin_ARRAY) : INTEGER; VAR i, j : INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ3Å := colorlen; contrlÆ7Å := rowlength; contrlÆ8Å := elused; contrlÆ9Å := numrows; contrlÆ10Å := wrtmode; FOR i:=0 TO 3 DO ptsinÆiÅ := pxyarrayÆiÅ; j := colorlen - 1 ; FOR i:=0 TO j DO intinÆiÅ := colarrayÆiÅ; v_cellarray := gemvdif(10,handle); END; (***************************************************************) (** contour fill **) FUNCTION v_contour (handle, x, y, index : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 1; contrlÆ3Å := 1; ptsinÆ0Å := x; ptsinÆ1Å := y; intinÆ0Å := index; v_contour := gemvdif(103,handle); END; (***********************************************************) (** fill rectangle **) FUNCTION vr_recfl(handle : INTEGER; pxyarray : ARRAY_4) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ3Å := 0; FOR i:=0 TO 3 DO ptsinÆiÅ := pxyarrayÆiÅ; vr_recfl := gemvdif(114,handle); END; (*****************) (** GDP 's **) (****************************************************************) (** gdp - bar **) FUNCTION v_bar (handle : INTEGER; pxyarray : ARRAY_4) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ3Å := 0; contrlÆ5Å := 1; FOR i:=0 TO 3 DO ptsinÆiÅ := pxyarrayÆiÅ; v_bar := gemvdif(11,handle); END; (****************************************************************) (** GDP - arc **) FUNCTION v_arc (handle, x, y, radius, begang, endang : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 4; contrlÆ3Å := 2; contrlÆ5Å := 3; intinÆ0Å := begang; intinÆ1Å := endang; ptsinÆ0Å := x; ptsinÆ1Å := y; ptsinÆ6Å := radius; v_arc := gemvdif(11,handle); END; (********************************************************************) (** GDP - pieslice **) FUNCTION v_pieslice (handle, x, y, radius, begang, endang : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 4; contrlÆ3Å := 2; contrlÆ5Å := 3; intinÆ0Å := begang; intinÆ1Å := endang; ptsinÆ0Å := x; ptsinÆ1Å := y; ptsinÆ6Å := radius; v_pieslice := gemvdif(11,handle); END; (**********************************************************************) (** GDP - circle **) FUNCTION v_circle (handle, x, y, radius : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 3; contrlÆ3Å := 0; contrlÆ5Å := 4; contrlÆ6Å := handle; ptsinÆ0Å := x; ptsinÆ1Å := y; ptsinÆ4Å := radius; v_circle := gemvdif(11,handle); END; (********************************************************************) (** GDP - elliptical arc **) FUNCTION v_ellarc (handle, x, y, xradius, yradius, begang, endang : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ3Å := 2; contrlÆ5Å := 6; intinÆ0Å := begang; intinÆ1Å := endang; ptsinÆ0Å := x; ptsinÆ1Å := y; ptsinÆ2Å := xradius; ptsinÆ3Å := yradius; v_ellarc := gemvdif(11,handle); END; (*****************************************************************) (** GDP - elliptical pie **) FUNCTION v_ellpie (handle, x, y, xradius, yradius, begang, endang : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ3Å := 2; contrlÆ5Å := 7; intinÆ0Å := begang; intinÆ1Å := endang; ptsinÆ0Å := x; ptsinÆ1Å := y; ptsinÆ2Å := xradius; ptsinÆ3Å := yradius; v_ellpie := gemvdif(11,handle); END; (*****************************************************************) (** GDP - Ellipse **) FUNCTION v_ellipse (handle, x, y, xradius, yradius : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ3Å := 0; contrlÆ5Å := 5; ptsinÆ0Å := x; ptsinÆ1Å := y; ptsinÆ2Å := xradius; ptsinÆ3Å := yradius; v_ellipse := gemvdif(11,handle); END; (****************************************************************) (** GDP rounded rectangle **) FUNCTION v_rbox (handle : INTEGER; xyarray : ARRAY_4) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ3Å := 0; contrlÆ5Å := 8; FOR i:=0 TO 3 DO ptsinÆiÅ := xyarrayÆiÅ; v_rbox := gemvdif(11,handle); END; (****************************************************************) (** GDP Filled rounded rectangle **) FUNCTION v_rfbox (handle : INTEGER; xyarray : ARRAY_4) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ3Å := 0; contrlÆ5Å := 9; FOR i:=0 TO 3 DO ptsinÆiÅ := xyarrayÆiÅ; v_rfbox := gemvdif(11,handle); END; (**************************************************************) (** Justified graphics text **) FUNCTION v_justified(handle, x, y, jlength : INTEGER; gstring : CharString; wordspace, charspace : INTEGER) : INTEGER; VAR i: INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ3Å := LEN(gstring) + 2; FOR i:=1 TO LEN(gstring) DO intinÆi+1Å := ORD(gstringÆiÅ); intinÆLEN(gstring)Å := 0; intinÆ0Å := wordspace; intinÆ1Å := charspace; ptsinÆ0Å := x; ptsinÆ1Å := y; ptsinÆ2Å := jlength; v_justified := gemvdif(10,handle); END; (*******************************) (*** SET ATTRIBUTE FUNCTIONS ***) (**********************************************************) (** general set routine, called by many procedures below **) FUNCTION genset(opcode, handle, param : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; intinÆ0Å := param; genset := gemvdif(opcode,handle); (* return value suggested *) END; (***************************************************************) (** set writing mode **) FUNCTION vswr_mode (handle, mode : INTEGER) : INTEGER; BEGIN vswr_mode := genset(32,handle,mode); END; (**************************************************************) (** set color representation **) FUNCTION vs_color (handle, index : INTEGER; rgbin : ARRAY_3) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 4; intinÆ0Å := index; intinÆ1Å := rgbinÆ0Å; intinÆ2Å := rgbinÆ1Å; intinÆ3Å := rgbinÆ2Å; vs_color := gemvdif(14,handle); END; (***********************************************************) (** set polyline line type **) FUNCTION vsl_type ( handle, style : INTEGER) : INTEGER; BEGIN vsl_type := genset(15,handle,style); END; (***********************************************************) (** set user defined line style pattern **) FUNCTION vsl_udsty (handle, pattern : INTEGER) : INTEGER; BEGIN vsl_udsty := genset(113,handle,pattern); END; (**********************************************************) (** set polyline linewidth **) FUNCTION vsl_width (handle, width : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 1; contrlÆ3Å := 0; ptsinÆ0Å := width; ptsinÆ1Å := 0; vsl_width := gemvdif(16,handle); vsl_width := ptsoutÆ0Å; END; (***********************************************************) (** set polyline color index **) FUNCTION vsl_color (handle, colindex : INTEGER) : INTEGER; BEGIN vsl_color := genset(17,handle,colindex); END; (*************************************************************) (** set polyline end style **) FUNCTION vsl_ends (handle, begstyle, endstyle : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 2; intinÆ0Å := begstyle; intinÆ1Å := endstyle; vsl_ends := gemvdif(108,handle); END; (**************************************************************) (** set polymarker type **) FUNCTION vsm_type (handle, symbol : INTEGER) : INTEGER; BEGIN vsm_type := genset(18,handle,symbol); END; (***************************************************************) (** set polymarker height **) FUNCTION vsm_height (handle, height : INTEGER) : INTEGER; BEGIN contrlÆ0Å := 19; contrlÆ1Å := 1; contrlÆ3Å := 0; contrlÆ6Å := handle; ptsinÆ0Å := 0; ptsinÆ1Å := height; vsm_height := gemvdif(19,handle); vsm_height := ptsoutÆ1Å; END; (*************************************************************) (** set polymarker color index **) FUNCTION vsm_color (handle, colindex : INTEGER) : INTEGER; BEGIN vsm_color := genset(20,handle,colindex); END; (***************************************************************) (** set character height, absolute mode **) FUNCTION vst_height (handle, height : INTEGER; VAR charwidth, charheight, cellwidth, cellheight : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 1; contrlÆ3Å := 0; ptsinÆ0Å := 0; ptsinÆ1Å := height; vst_height := gemvdif(12,handle); charwidth := ptsoutÆ0Å; charheight := ptsoutÆ1Å; cellwidth := ptsoutÆ2Å; cellheight := ptsoutÆ3Å; END; (**********************************************************************) (** set character cell height, points mode **) FUNCTION vst_point (handle, point : INTEGER; VAR charwidth, charheight, cellwidth, cellheight : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; intinÆ0Å := point; vst_point := gemvdif(107,handle); charwidth := ptsoutÆ0Å; charheight := ptsoutÆ1Å; cellwidth := ptsoutÆ2Å; cellheight := ptsoutÆ3Å; END; (*********************************************************************) (** set text character baseline vector - rotation **) FUNCTION vst_rotation (handle, angle : INTEGER) : INTEGER; BEGIN vst_rotation := genset(13,handle,angle); END; (******************************************************************) (** set text font **) FUNCTION vst_font (handle, font : INTEGER) : INTEGER; BEGIN vst_font := genset(21,handle,font); END; (******************************************************************) (** set text color **) FUNCTION vst_color (handle, colindex : INTEGER) : INTEGER; BEGIN vst_color := genset(22,handle,colindex); END; (*****************************************************************) (** set text special effects **) FUNCTION vst_effects (handle, effects : INTEGER) : INTEGER; BEGIN vst_effects := genset(106,handle,effects); END; (****************************************************************) (** set graphics text alignment **) FUNCTION vst_alignment (handle, horin, vertin : INTEGER; VAR horout, vertout : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 2; intinÆ0Å := horin; intinÆ1Å := vertin; vst_alignment := gemvdif(39,handle); horout := intoutÆ0Å; vertout := intoutÆ1Å; END; (*****************************************************************) (** set fill interior style **) FUNCTION vsf_interior (handle, style : INTEGER) : INTEGER; BEGIN vsf_interior := genset(23,handle,style); END; (****************************************************************) (** set fill style index **) FUNCTION vsf_style (handle, styleindex : INTEGER) : INTEGER; BEGIN vsf_style := genset(24,handle,styleindex); END; (***************************************************************) (** set fill color index **) FUNCTION vsf_color ( handle, colorindex : INTEGER) : INTEGER; BEGIN vsf_color := genset(25,handle,colorindex); END; (****************************************************************) (** set fill perimeter visibility **) FUNCTION vsf_perimeter (handle, pervis : INTEGER) : INTEGER; BEGIN vsf_perimeter := genset(104,handle,pervis); END; (********************************************************************) (** Exchange fill pattern **) FUNCTION vsf_udpat (handle : INTEGER; pfillpat, poldfpat : gempoint) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; contrlÆ7Å := pfillpat.hi; contrlÆ8Å := pfillpat.lo; contrlÆ9Å := poldfpat.hi; contrlÆ10Å := poldfpat.lo; vsf_udpat := gemvdif(112,handle); END; (***********************) (***** RASTOR OPS ******) (****************************************************************) (** Copy rastor , Opaque **) FUNCTION vro_cpyfm (handle, wrmode : INTEGER; pxyarray : ARRAY_8; psrcMFDB, pdesMFDB : MFDB) : INTEGER; VAR i : INTEGER; gtemp1, gtemp2 : gempoint; sm, dm : MFDB; BEGIN contrlÆ1Å := 4; contrlÆ3Å := 1; (* ensure MFDB is local to get right segment address *) sm := psrcMFDB; gtemp1.gp := ADDR(sm); (* long address *) contrlÆ7Å := gtemp1.hi; (* offset of MFDB *) contrlÆ8Å := gtemp1.lo; (* segemnt of MFDB *) dm := pdesMFDB; gtemp2.gp := ADDR(dm); contrlÆ9Å := gtemp2.hi; contrlÆ10Å := gtemp2.lo; intinÆ0Å := wrmode; (* logic operation write mode *) FOR i:=0 TO 7 DO ptsinÆiÅ := pxyarrayÆiÅ; vro_cpyfm := gemvdif(109,handle); END; (****************************************************************) (** Copy rastor , Transparent **) FUNCTION vrt_cpyfm (handle, wrmode : INTEGER; pxyarray : ARRAY_8; psrcMFDB, pdesMFDB : MFDB; color1, color0 : INTEGER) : INTEGER; VAR i : INTEGER; gemp1, gemp2 : gempoint; sm, dm : MFDB; BEGIN contrlÆ1Å := 4; contrlÆ3Å := 3; sm := psrcMFDB; (* local MFDB *) gemp1.gp := ADDR(sm); contrlÆ7Å := gemp1.hi; (* hi order word of address ptr *) contrlÆ8Å := gemp1.lo; (* lo order word *) dm := pdesMFDB; gemp2.gp := ADDR(dm); contrlÆ9Å := gemp2.hi; contrlÆ10Å := gemp2.lo; intinÆ0Å := wrmode; (* logic operation write mode *) intinÆ1Å := color1; intinÆ2Å := color0; FOR i:=0 TO 7 DO ptsinÆiÅ := pxyarrayÆiÅ; vrt_cpyfm := gemvdif(121,handle); END; (*************************************************************) (** Transform Form **) FUNCTION vr_trn_fm (handle : INTEGER; psrcMFDB, pdesMFDB : MFDB) : INTEGER; VAR gemp1, gemp2 : gempoint; sm, dm : MFDB; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; sm := psrcMFDB; gemp1.gp := ADDR(sm); contrlÆ7Å := gemp1.hi; contrlÆ8Å := gemp1.lo; dm := pdesMFDB; gemp2.gp := ADDR(dm); contrlÆ9Å := gemp2.hi; contrlÆ10Å := gemp2.lo; vr_trn_fm := gemvdif(110,handle); END; (*************************) (**** INPUT FUNCTIONS ****) (*********************************************************************) (** Set Input Mode **) FUNCTION vsin_mode (handle, devtype, mode : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 2; intinÆ0Å := devtype; intinÆ1Å := mode; vsin_mode := gemvdif(33,handle); vsin_mode := intoutÆ0Å; END; (************************************************************************) (** Input locator, request mode **) (**********************************) FUNCTION vrq_locator (handle, x, y : INTEGER; VAR xout, yout : INTEGER; VAR term : CHAR) : INTEGER; BEGIN contrlÆ1Å := 1; contrlÆ3Å := 0; ptsinÆ0Å := x; ptsinÆ1Å := y; vrq_locator := gemvdif(28,handle); xout := ptsoutÆ0Å; yout := ptsoutÆ1Å; term := CHR(intoutÆ0Å); (* return single byte character *) END; (******************************************************************) (** Input Locator , Sample mode **) FUNCTION vsm_locator (handle, x, y : INTEGER; VAR xout, yout, term, coorchg, keypress : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 1; contrlÆ3Å := 0; ptsinÆ0Å := x; ptsinÆ1Å := y; vsm_locator := gemvdif(28,handle); xout := ptsoutÆ0Å; yout := ptsoutÆ1Å; term := intoutÆ0Å; coorchg := contrlÆ2Å; keypress := contrlÆ4Å; END; (********************************************************************) (** Input Valuator, Request Mode **) FUNCTION vrq_valuator (handle, valin : INTEGER; VAR valout : INTEGER; VAR term : CHAR) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; intinÆ0Å := valin; vrq_valuator := gemvdif(29,handle); valout := intoutÆ0Å; term := CHR(intoutÆ1Å); END; (*******************************************************************) (** Input Valuator, Sample Mode **) (* check this !!!*) FUNCTION vsm_valuator (handle, valin : INTEGER; VAR valout : INTEGER; VAR term : CHAR; VAR status : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; intinÆ0Å := valin; vsm_valuator := gemvdif(29,handle); valout := intoutÆ0Å; status := contrlÆ4Å; term := CHR(intoutÆ1Å); END; (*****************************************************************) (** Input Choice, request Mode **) FUNCTION vrq_choice (handle: INTEGER; VAR choice : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; intinÆ0Å := choice; vrq_choice := gemvdif(30,handle); choice := intoutÆ0Å; END; (*******************************************************************) (** Input Choice, Sample Mode **) FUNCTION vsm_choice (handle : INTEGER; VAR choice, status : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; vsm_choice := gemvdif(30,handle); choice := intoutÆ0Å; status := contrlÆ4Å; END; (******************************************************************) (** Input String, Request Mode **) FUNCTION vrq_string (handle, maxlen, echomode, echox, echoy : INTEGER; VAR instring : CharString) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 1; contrlÆ3Å := 2; intinÆ0Å := 0-maxlen; (* force standard keyboard input *) intinÆ1Å := echomode; ptsinÆ0Å := echox; ptsinÆ1Å := echoy; vrq_string := gemvdif(31,handle); instring := ''; (* null string *) FOR i:=1 TO contrlÆ4Å DO instring := CONCAT(instring,CHR(intoutÆi-1Å)); (* into string char form *) END; (****************************************************************) (** Input String, Sample Mode **) FUNCTION vsm_string (handle, maxlen, echomode, echox, echoy : INTEGER; VAR instring : CharString; VAR status : INTEGER) : INTEGER; VAR I : INTEGER; BEGIN contrlÆ1Å := 1; contrlÆ3Å := 2; intinÆ0Å := 0-maxlen; (* force standard keyboard input *) intinÆ1Å := echomode; ptsinÆ0Å := echox; ptsinÆ1Å := echoy; vsm_string := gemvdif(31,handle); instring := ''; (* null string *) FOR i:=1 TO contrlÆ4Å DO instring := CONCAT(instring,CHR(intoutÆi-1Å)); (* into string char form *) status := contrlÆ4Å; END; (*******************************************************************) (** Set Moose Form **) FUNCTION vsc_form (handle : INTEGER; pcurform : ARRAY_37) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 37; FOR i:=0 TO 36 DO intinÆiÅ := pcurformÆiÅ; vsc_form := gemvdif(111,handle); END; (********************************************************************) (** Exchange Mouse Movement Vector **) FUNCTION vex_motv (handle : INTEGER; pusrcode : gempoint; VAR psavcode : gempoint) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; contrlÆ7Å := pusrcode.hi; (* check this !!*) contrlÆ8Å := pusrcode.lo; vex_motv := gemvdif(126,handle); psavcode.hi := contrlÆ9Å; psavcode.lo := contrlÆ10Å; END; (****************************************************************) (*** show graphic cursor ****) FUNCTION v_show_c (handle, reset : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; intinÆ0Å := reset; v_show_c := gemvdif(122,handle); END; (*******************************************************) (** hide graphic cursor **) FUNCTION v_hide_c (handle : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; v_hide_c := gemvdif(123,handle); END; (********************************************************************) (** Exchange Button Change Vector **) FUNCTION vex_butv (handle : INTEGER; pusrcode : gempoint; VAR psavcode : gempoint) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; contrlÆ7Å := pusrcode.hi; (* CHECK THIS *) contrlÆ8Å := pusrcode.lo; vex_butv := gemvdif(125,handle); psavcode.hi := contrlÆ8Å; psavcode.lo := contrlÆ9Å; END; (**********************************************************************) (** Exchange Cursor Change Vector **) FUNCTION vex_curv (handle : INTEGER; pusrcode : gempoint; VAR psavcode : gempoint) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; contrlÆ7Å := pusrcode.hi; (* CHECK THIS *) contrlÆ8Å := pusrcode.lo; vex_curv := gemvdif(127,handle); psavcode.hi := contrlÆ8Å; psavcode.lo := contrlÆ9Å; END; (***********************************************************************) (** Sample Keyboard State Information **) FUNCTION vq_key_s (handle : INTEGER; VAR pstatus : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; vq_key_s := gemvdif(128,handle); pstatus := intoutÆ0Å; END; (********************************************************************) (** Sample Mouse Button State **) FUNCTION vq_mouse (handle : INTEGER; VAR pstatus, x, y : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; vq_mouse := gemvdif(124,handle); pstatus := intoutÆ0Å; x := ptsoutÆ0Å; y := ptsoutÆ1Å; END; (********************************************************************) (** Exchange Timer Interrupt Vector **) FUNCTION vex_timv (handle : INTEGER; timaddr : gempoint; VAR otimaddr : gempoint; VAR timconv : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; contrlÆ7Å := timaddr.hi; (* CHECK THIS *) contrlÆ8Å := timaddr.lo; vex_timv := gemvdif(118,handle); otimaddr.hi := contrlÆ9Å; otimaddr.lo := contrlÆ10Å; timconv := intoutÆ0Å; END; (*********************************************************************) (**** INQUIRE FUNCTIONS *******) (**********************************************************************) (** Extended Inquire Function **) FUNCTION vq_extend (handle, owflag : INTEGER; VAR workout : ARRAY_57) : INTEGER; VAR i: INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; intinÆ0Å := owflag; vq_extend := gemvdif(102,handle); FOR i:=0 TO 44 DO workoutÆiÅ := intoutÆiÅ; FOR i:=45 TO 56 DO workoutÆiÅ := ptsoutÆi-45Å; END; (*********************************************************************) (** Inquire color representation **) FUNCTION vq_color (handle, colorindex, setflag : INTEGER; VAR rgb : ARRAY_3) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 2; intinÆ0Å := colorindex; intinÆ1Å := setflag; vq_color := gemvdif(26,handle); FOR i:=0 TO 2 DO rgbÆiÅ := intoutÆiÅ; END; (********************************************************) (** Inquire polyline attributes *) FUNCTION vql_attributes (handle :INTEGER; VAR attrib : ARRAY_4) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; vql_attributes := gemvdif(35,handle); FOR i:=0 TO 2 DO attribÆiÅ := intoutÆiÅ; attribÆ3Å := ptsoutÆ0Å; END; (*********************************************************) (** Inquire polymarker attributes **) FUNCTION vqm_attributes (handle :INTEGER; VAR attrib : ARRAY_4) : INTEGER; VAR I : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; vqm_attributes := gemvdif(36,handle); FOR i:= 0 TO 2 DO attribÆiÅ := intoutÆiÅ; attribÆ3Å := ptsoutÆ0Å; END; (***********************************************************) (** Inquire fill area attributes **) FUNCTION vqf_attributes (handle :INTEGER; VAR attrib : ARRAY_4) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; vqf_attributes := gemvdif(37,handle); FOR i:=0 TO 3 DO attribÆiÅ := intoutÆiÅ; (* what about fill perim status **) END; (******************************************************************) (** Inquire current Graphic text attributes **) FUNCTION vqt_attributes (handle :INTEGER; VAR attrib : ARRAY_10) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; vqt_attributes := gemvdif(38,handle); FOR i:=0 TO 5 DO attribÆiÅ := intoutÆiÅ; FOR i:=6 TO 9 DO attribÆiÅ := ptsoutÆi-6Å; END; (*******************************************************************) (** Inquire Text Extent **) FUNCTION vqt_extent (handle : INTEGER; chstring: CharString; VAR extent : ARRAY_8) : INTEGER; VAR I : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := LEN(chstring); FOR i:=1 TO LEN(chstring) DO intinÆi-1Å := ORD(chstringÆiÅ); intinÆLEN(chstring)Å := 0; vqt_extent := gemvdif(116,handle); FOR i:=0 TO 7 DO extentÆiÅ := ptsoutÆiÅ; END; (**********************************************************************) (** Inquire character cell width **) FUNCTION vqt_width (handle : INTEGER; character : CHAR; VAR cellwidth, leftdelta, rightdelta : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; intinÆ0Å := ORD(character); vqt_width := gemvdif(117,handle); cellwidth := ptsoutÆ0Å; leftdelta := ptsoutÆ2Å; rightdelta := ptsoutÆ4Å; END; (********************************************************************) (*** Inquire font name and index **) FUNCTION vqt_name (handle, elementnum : INTEGER; VAR name : CharString) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; intinÆ0Å := elementnum; vqt_name := gemvdif(130,handle); name := ''; (* initialize string to null *) FOR i:=1 TO 32 DO name := CONCAT(name,CHR(intoutÆiÅ)); END; (**********************************************************************) (** Inquire Cell Array **) FUNCTION vq_cellarray (handle : INTEGER; pxyarray : ARRAY_4; rowlen, numrows : INTEGER; VAR elused, rowsused, status : INTEGER; VAR colarray : intout_ARRAY) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ7Å := rowlen; contrlÆ8Å := numrows; FOR i:=0 TO 3 DO ptsinÆiÅ := pxyarrayÆiÅ; vq_cellarray := gemvdif(27,handle); elused := contrlÆ9Å; rowsused := contrlÆ10Å; status := contrlÆ11Å; FOR i:=0 TO intout_max DO colarrayÆiÅ := intoutÆiÅ; END; (**********************************************************************) (** Inquire Input Mode **) FUNCTION vqn_mode (handle :INTEGER; VAR inputmode : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; vqn_mode := gemvdif(115,handle); inputmode := intoutÆ0Å; END; (********************************************************************) (** Inquire Current Font Information **) FUNCTION vqt_fontinfo (handle : INTEGER; VAR minADE, maxADE : INTEGER; VAR distances : ARRAY_4; VAR maxwidth : INTEGER; effects : ARRAY_3) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; vqt_fontinfo := gemvdif(131,handle); minADE := intoutÆ0Å; maxADE := intoutÆ1Å; distancesÆ0Å := ptsoutÆ1Å; distancesÆ1Å := ptsoutÆ3Å; distancesÆ2Å := ptsoutÆ5Å; distancesÆ3Å := ptsoutÆ7Å; maxwidth := ptsoutÆ0Å; effectsÆ0Å := ptsoutÆ2Å; effectsÆ1Å := ptsoutÆ4Å; effectsÆ2Å := ptsoutÆ6Å; END; (*********************) (****** ESCAPES *****) (********************************************************************) (** escape : inquire addressable alpha char cells **) FUNCTION vq_chcells (handle : INTEGER; VAR rows, columns : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; contrlÆ5Å := 1; vq_chcells := gemvdif(5,handle); rows := intoutÆ0Å; columns := intoutÆ1Å; END; (************************************************************) (*** general escape routine..called by many of those below **) FUNCTION genescape (fid, handle : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; contrlÆ5Å := fid; (* function id *) genescape := gemvdif(5,handle); END; (**************************************************************) FUNCTION v_exit_cur (handle : INTEGER) : INTEGER; BEGIN v_exit_cur := genescape(2,handle); END; FUNCTION v_enter_cur (handle : INTEGER) : INTEGER; BEGIN v_enter_cur := genescape(3,handle); END; FUNCTION v_curup (handle : INTEGER) : INTEGER; BEGIN v_curup := genescape(4,handle); END; FUNCTION v_curdown (handle : INTEGER) : INTEGER; BEGIN v_curdown := genescape(5,handle); END; FUNCTION v_curright (handle : INTEGER) : INTEGER; BEGIN v_curright := genescape(6,handle); END; FUNCTION v_curleft (handle : INTEGER) : INTEGER; BEGIN v_curleft := genescape(7,handle); END; FUNCTION v_curhome (handle : INTEGER) : INTEGER; BEGIN v_curhome := genescape(8,handle); END; FUNCTION v_eeos (handle : INTEGER) : INTEGER; BEGIN v_eeos := genescape(9,handle); END; FUNCTION v_eeol (handle : INTEGER) : INTEGER; BEGIN v_eeol := genescape(10,handle); END; (*******************************************************************) (** direct alpha cursor address **) FUNCTION vs_curaddress (handle, row, column : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 2; contrlÆ5Å := 11; intinÆ0Å := row; intinÆ1Å := column; vs_curaddress := gemvdif(5,handle); END; (**************************************************************) (** output cursor addressable text **) FUNCTION v_curtext (handle : INTEGER; chstring : CharString) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := LEN(chstring); contrlÆ5Å := 12; FOR i:=1 TO LEN(chstring) DO intinÆi- 1Å := ORD(chstringÆiÅ); intinÆLEN(chstring)Å := 0; v_curtext := gemvdif(5,handle); END; (**************************************************************) FUNCTION v_rvon (handle : INTEGER) : INTEGER; BEGIN v_rvon := genescape(13,handle); END; FUNCTION v_rvoff (handle : INTEGER) : INTEGER; BEGIN v_rvoff := genescape(14,handle); END; (***************************************************************) (** inquire current alpha cursor address **) FUNCTION vq_curaddress (handle : INTEGER; VAR row, column : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; contrlÆ5Å := 15; vq_curaddress := gemvdif(5,handle); row := intoutÆ0Å; column := intoutÆ1Å; END; (**************************************************************) (** inquire tablet status **) FUNCTION vq_tabstatus (handle : INTEGER; VAR status : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; contrlÆ5Å := 16; vq_tabstatus := gemvdif(5,handle); status := intoutÆ0Å; END; (***************************************************************) (** Hard Copy **) FUNCTION v_hardcopy (handle : INTEGER) : INTEGER; BEGIN v_hardcopy := genescape(17,handle); END; (******************************************************************) (** place a graphic cursor at the specifeid location **) FUNCTION v_dspcur (handle, x, y : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 1; contrlÆ3Å := 0; contrlÆ5Å := 18; ptsinÆ0Å := x; ptsinÆ1Å := y; v_dspcur := gemvdif(5,handle); END; (**************************************************************) FUNCTION v_rmcur (handle : INTEGER) : INTEGER; BEGIN v_rmcur := genescape(19,handle); END; (**************************************************************) (*** Form advance **) FUNCTION v_form_adv(handle : INTEGER) : INTEGER; BEGIN v_form_adv := genescape(20,handle); END; (**************************************************************) (** Output Window **) FUNCTION v_output_window(handle : INTEGER; xyarray : ARRAY_4) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 2; contrlÆ3Å := 0; contrlÆ5Å := 21; FOR i:=0 TO 3 DO ptsinÆiÅ := xyarrayÆiÅ; v_output_window := gemvdif(5,handle); END; (***************************************************************) (** Clear display list **) FUNCTION v_clear_display_list (handle : INTEGER) : INTEGER; BEGIN v_clear_display_list := genescape(22,handle); END; (**************************************************************) (** selection of IBM color palette 0 = red,green,yelllow 1=cyan,blue,magenta *) FUNCTION vs_palette(handle, palette : INTEGER) : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 1; contrlÆ5Å := 60; intinÆ0Å := palette; vs_palette := gemvdif(5,handle); END; (**************************************************************) (** Inquire Palette Film Types **) FUNCTION vqp_films(handle : INTEGER; VAR filmnames : CharString) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; contrlÆ5Å := 91; vqp_films := gemvdif(5,handle); filmnames := ''; FOR i:=0 TO 127 DO filmnames := CONCAT(filmnames,CHR(intoutÆiÅ)); END; (**************************************************************) (** Inquire Palette Driver State **) FUNCTION vqp_state (handle : INTEGER; VAR port, filmname, lightness, interlace, planes : INTEGER; VAR indexes : ARRAY_16) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 0; contrlÆ5Å := 92; vqp_state := gemvdif(5,handle); port := intoutÆ0Å; filmname := intoutÆ1Å; lightness := intoutÆ2Å; interlace := intoutÆ3Å; planes := intoutÆ4Å; FOR i:=0 TO 15 DO indexesÆiÅ := intoutÆi+5Å; END; (*****************************************************************) (** Set Palette Driver State **) FUNCTION vsp_state (handle : INTEGER; port, filmname, lightness, interlace, planes : INTEGER; indexes : ARRAY_16) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := 20; contrlÆ5Å := 93; contrlÆ6Å := 93; intinÆ0Å := port; intinÆ1Å := filmname; intinÆ2Å := lightness; intinÆ3Å := interlace; intinÆ4Å := planes; FOR i:=0 TO 15 DO intinÆi+4Å := indexesÆiÅ; (* CHECK *) vsp_state := gemvdif(5,handle); END; (*************************************************************) (** Save Palette Driver State **) FUNCTION vsp_save (handle : INTEGER) : INTEGER; BEGIN vsp_save := genescape(94, handle); END; (**************************************************************) (** suppress polaroid palette messages **) FUNCTION vsp_message (handle : INTEGER) : INTEGER; BEGIN vsp_message := genescape(95,handle); END; (**************************************************************) (** Palette Error Inquiries **) FUNCTION vqp_error (handle : INTEGER) : INTEGER; BEGIN vqp_error := genescape(96,handle); END; (*******************************************************************) (*** write gsx metafile ***) FUNCTION v_write_meta (handle, numintin : INTEGER; intin : intin_ARRAY; numptsin : INTEGER; ptsin : ptsin_ARRAY) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := numptsin; contrlÆ3Å := numintin; contrlÆ5Å := 99; contrlÆ6Å := handle; v_write_meta := gemvdif(5,handle); (* CHECK *) END; (******************************************************************) (** change gsx metafile filename from gsxfile.gsx **) FUNCTION vm_filename (handle : INTEGER; filename : CharString) : INTEGER; VAR i : INTEGER; BEGIN contrlÆ1Å := 0; contrlÆ3Å := LEN(filename); contrlÆ5Å := 100; FOR i:=1 TO LEN(filename) DO intinÆi- 1Å := ORD(filenameÆiÅ); intinÆLEN(filename)Å := 0; vm_filename := gemvdif(5,handle); END; (********************************************************************)