Farba Research FORTRAN-to-Assembler Example

;"VGAXXX_M.MSF"     ("MACSFOR.LIB" FORTRAN-CALLABLE LIBRARY SUBROUTINES)

;$ABSTRACT
;   VGAXXX_M -- A collection of MULTIPLE subroutines for graphics manipulation.

;$DESCRIPTION
;   The VGAXXX_M library module contains a set of subroutines for performing
;graphics functions.

;$AUTHOR
;   Written by  E. Nicholas Cupery  19 DEC 88

;$MODIFICATION_HISTORY
;   03 JUN 92  ENC  ADDED CALL TO "NOCTRLC" IN VGA_INIT_M

;$VERSION
;   v1.1

;$CALLING_SEQUENCE
;   CALL VGA_INIT_M           	(STATUS,ADAPTYP,MONITYP,MONOFLAG,BIOSTYP)
;   CALL VGA_MODE_M		(MODECOD,MONOTOP,MONOBOT,STATUS,HRES,VRES,NCLRS)
;   CALL VGA_LOAD_1_COLOR_DAC_M 	(DACNUM,REDVAL,GRNVAL,BLUVAL)
;   CALL VGA_SET_DEFAULTS_M		()
;   CALL VGA_SET_COLOR_M		(COLOR)
;   CALL VGA_SET_BAK_COLOR_M		(COLOR)
;   CALL VGA_SET_BLINK_M		(YESNO)
;   CALL VGA_SET_CHAR_SIZE_M    	(SIZECODE,STATUS)
;   CALL VGA_SET_CHAR_ORI_M		(ORICODE,STATUS)
;   CALL VGA_SET_STRING_DIR_M		(DIRCODE,STATUS)
;   CALL VGA_DRAW_DOT_M			(X1,Y1)
;   CALL VGA_DRAW_LINE_M		(X1,Y1,X2,Y2)
;   CALL VGA_DRAW_RECT_M		(X1,Y1,X2,Y2)
;   CALL VGA_FILL_RECT_M		(X1,Y1,X2,Y2)
;   CALL VGA_DRAW_DIAMOND_M		(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_DIAMOND_HALF_TOP_M 	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_DIAMOND_HALF_LEFT_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_DIAMOND_HALF_BOTTOM_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_DIAMOND_HALF_RIGHT_M 	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_DIAMOND_QTR_UR_M 	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_DIAMOND_QTR_UL_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_DIAMOND_QTR_LL_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_DIAMOND_QTR_LR_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_DIAMOND_M		(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_DIAMOND_M		(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_DIAMOND_HALF_TOP_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_DIAMOND_HALF_LEFT_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_DIAMOND_HALF_BOTTOM_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_DIAMOND_HALF_RIGHT_M 	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_DIAMOND_QTR_UR_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_DIAMOND_QTR_UL_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_DIAMOND_QTR_LL_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_DIAMOND_QTR_LR_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_CIRCLE_M		(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_CIRCLE_HALF_TOP_M 	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_CIRCLE_HALF_LEFT_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_CIRCLE_HALF_BOTTOM_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_CIRCLE_HALF_RIGHT_M 	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_CIRCLE_QTR_UR_M 	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_CIRCLE_QTR_UL_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_CIRCLE_QTR_LL_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_CIRCLE_QTR_LR_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_CIRCLE_M		(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_CIRCLE_M		(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_CIRCLE_HALF_TOP_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_CIRCLE_HALF_LEFT_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_CIRCLE_HALF_BOTTOM_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_CIRCLE_HALF_RIGHT_M 	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_CIRCLE_QTR_UR_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_CIRCLE_QTR_UL_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_CIRCLE_QTR_LL_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_FILL_CIRCLE_QTR_LR_M	(XCENTER,YCENTER,RADIUS)
;   CALL VGA_DRAW_ELLIPSE_M		(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_DRAW_ELLIPSE_HALF_TOP_M 	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_DRAW_ELLIPSE_HALF_LEFT_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_DRAW_ELLIPSE_HALF_BOTTOM_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_DRAW_ELLIPSE_HALF_RIGHT_M 	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_DRAW_ELLIPSE_QTR_UR_M 	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_DRAW_ELLIPSE_QTR_UL_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_DRAW_ELLIPSE_QTR_LL_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_DRAW_ELLIPSE_QTR_LR_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_FILL_ELLIPSE_M		(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_FILL_ELLIPSE_M		(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_FILL_ELLIPSE_HALF_TOP_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_FILL_ELLIPSE_HALF_LEFT_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_FILL_ELLIPSE_HALF_BOTTOM_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_FILL_ELLIPSE_HALF_RIGHT_M 	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_FILL_ELLIPSE_QTR_UR_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_FILL_ELLIPSE_QTR_UL_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_FILL_ELLIPSE_QTR_LL_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_FILL_ELLIPSE_QTR_LR_M	(XCENTER,YCENTER,XRADIUS,YRADIUS)
;   CALL VGA_DRAW_CHAR_M		(X1,Y1,CHARBYTE)
;   CALL VGA_DRAW_STRING_M		(X1,Y1,STRING,STRLEN)
;   CALL VGA_DRAW_STRINGZ_M		(X1,Y1,STRINGZ)
;   CALL VGA_DRAW_STRINGT_M		(X1,Y1,STRINGT)
;   CALL VGA_RESTORE_M			(ZEROFLAG)

;$INPUT_ARGUMENTS
;   ADAPTYP  -- Video adapter type-code                  	[INTEGER*2]
;   BIOSTYP  -- Actual BIOS non-mono video subsystem type-code	[INTEGER*2]
;   BLUVAL   -- Blue color value for color DAC (0-63)           [INTEGER*2]
;   CHARBYTE -- A byte containing an ASCII character-code       [BYTE]
;   COLOR    -- Color-number (7,15,255 max, depending on mode)  [INTEGER*2]
;   DACNUM   -- Color Digital-to-Analog Converter number (0-255)[INTEGER*2]
;   DIRCODE  -- String direction-code (0=across;1=down;2=up)    [INTEGER*2]
;   GRNVAL   -- Green color value for color DAC (0-63)          [INTEGER*2]
;   MODECOD  -- Mode type-code (for "VGA_MODE_M" only)		[INTEGER*2]
;   MONITYP  -- Video monitor type-code                  	[INTEGER*2]
;   MONOBOT  -- Bottom scan-line for mono cursor (VGA_MODE_M)   [INTEGER*2]
;   MONOFLAG -- "Monochrome system allowed" flag (0=NO) 	[INTEGER*2]
;   MONOTOP  -- Top scan-line for mono cursor (for VGA_MODE_M)  [INTEGER*2]
;   ORICODE  -- Text orientation-code (0=normal;1=faceup;2=down)[INTEGER*2]
;   RADIUS   -- Radius length of graphic objects                [INTEGER*2]
;   REDVAL   -- Red color value for color DAC (0-63)            [INTEGER*2]
;   SIZECODE -- Text size-code (0=small;1=normal;2=lrge;3=xlrge)[INTEGER*2]
;   STRING   -- Byte array of ASCII characters                  [BYTE ARRAY]
;   STRINGT  -- Byte array of ASCIT characters (ends in Tilde)	[BYTE ARRAY]
;   STRINGZ  -- Byte array of ASCIZ characters                  [BYTE ARRAY]
;   STRLEN   -- String length in bytes                          [INTEGER*2]
;   X1       -- Starting x-coordinate                           [INTEGER*2]
;   X2       -- Ending x-coordinate                             [INTEGER*2]
;   XCENTER  -- X-coordinate of center of graphic objects       [INTEGER*2]
;   XRADIUS  -- Horizontal radius of ellipse			[INTEGER*2]
;   Y1       -- Starting y-coordinate                           [INTEGER*2]
;   Y2       -- Ending y-coordinate                             [INTEGER*2]
;   YCENTER  -- Y-coordinate of center of graphic objects       [INTEGER*2]
;   YESNO    -- Yes/No flag (0 = no ; anything else = yes)      [INTEGER*2]
;   YRADIUS  -- Vertical radius of ellipse			[INTEGER*2]
;   ZEROFLAG -- Flag to cause exit restoration of slashed zero	[INTEGER*2]

;$OUTPUT_ARGUMENTS
;   STATUS -- Final status from subroutine call          	[INTEGER*2]
;             0 = Success
;        = See individual subroutine descriptions
;
;   HRES     -- Horizontal resolution (from VGA_MODE_M)		[INTEGER*2]
;   MONOFLAG -- "Monochrome system also available" flag  	[INTEGER*2]
;   NCLRS    -- Number of displayable colors (from VGA_MODE_M)  [INTEGER*2]
;   VRES     -- Vertical resolution (from VGA_MODE_M)		[INTEGER*2]
;
;$END_SECTION

        PUBLIC  VGA_INIT_M              	;MAKE THIS (FAR) ROUTINE GLOBAL
        PUBLIC  VGA_MODE_M              	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_LOAD_1_COLOR_DAC_M		;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_SET_DEFAULTS_M      	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_SET_COLOR_M         	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_SET_BAK_COLOR_M     	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_SET_BLINK_M         	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_SET_CHAR_SIZE_M     	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_SET_CHAR_ORI_M      	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_SET_STRING_DIR_M    	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_DOT_M          	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_LINE_M         	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_RECT_M         	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_RECT_M  		;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_DIAMOND_M      	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_DIAMOND_M		;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_DIAMOND_HALF_TOP_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_DIAMOND_HALF_LEFT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_DIAMOND_HALF_BOTTOM_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_DIAMOND_HALF_RIGHT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_DIAMOND_QTR_UR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_DIAMOND_QTR_UL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_DIAMOND_QTR_LL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_DIAMOND_QTR_LR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_DIAMOND_M		;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_DIAMOND_HALF_TOP_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_DIAMOND_HALF_LEFT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_DIAMOND_HALF_BOTTOM_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_DIAMOND_HALF_RIGHT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_DIAMOND_QTR_UR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_DIAMOND_QTR_UL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_DIAMOND_QTR_LL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_DIAMOND_QTR_LR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_CIRCLE_M		;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_CIRCLE_HALF_TOP_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_CIRCLE_HALF_LEFT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_CIRCLE_HALF_BOTTOM_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_CIRCLE_HALF_RIGHT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_CIRCLE_QTR_UR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_CIRCLE_QTR_UL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_CIRCLE_QTR_LL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_CIRCLE_QTR_LR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_CIRCLE_M		;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_CIRCLE_HALF_TOP_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_CIRCLE_HALF_LEFT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_CIRCLE_HALF_BOTTOM_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_CIRCLE_HALF_RIGHT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_CIRCLE_QTR_UR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_CIRCLE_QTR_UL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_CIRCLE_QTR_LL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_CIRCLE_QTR_LR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_ELLIPSE_M		;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_ELLIPSE_HALF_TOP_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_ELLIPSE_HALF_LEFT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_ELLIPSE_HALF_BOTTOM_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_ELLIPSE_HALF_RIGHT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_ELLIPSE_QTR_UR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_ELLIPSE_QTR_UL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_ELLIPSE_QTR_LL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_ELLIPSE_QTR_LR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_ELLIPSE_M		;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_ELLIPSE_HALF_TOP_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_ELLIPSE_HALF_LEFT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_ELLIPSE_HALF_BOTTOM_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_ELLIPSE_HALF_RIGHT_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_ELLIPSE_QTR_UR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_ELLIPSE_QTR_UL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_ELLIPSE_QTR_LL_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_FILL_ELLIPSE_QTR_LR_M	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_CHAR_M         	;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_STRING_M  		;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_STRINGZ_M  		;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_DRAW_STRINGT_M  		;MAKE THIS (FAR) ROUTINE GLOBAL
	PUBLIC	VGA_RESTORE_M           	;MAKE THIS (FAR) ROUTINE GLOBAL

	EXTRN	VGA_INIT$:NEAR			;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_MODE$:NEAR			;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_SET_DEFAULTS$:NEAR		;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_SET_COLOR$:NEAR		;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_SET_BAK_COLOR$:NEAR		;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_SET_BLINK$:NEAR		;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_SET_CHAR_SIZE$:NEAR 	;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_SET_CHAR_ORI$:NEAR  	;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_SET_STRING_DIR$:NEAR	;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_DRAW_DOT$:NEAR		;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_DRAW_LINE$:NEAR		;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_DRAW_RECT$:NEAR		;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_FILL_RECT$:NEAR 		;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_DRAW_DIAMOND$:NEAR		;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_DRAW_DIAMOND_HALF_TOP$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_DIAMOND_HALF_LEFT$:NEAR   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_DIAMOND_HALF_BOTTOM$:NEAR ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_DIAMOND_HALF_RIGHT$:NEAR  ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_DIAMOND_QTR_UR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_DIAMOND_QTR_UL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_DIAMOND_QTR_LL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_DIAMOND_QTR_LR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_DIAMOND$:NEAR	           ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_DIAMOND_HALF_TOP$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_DIAMOND_HALF_LEFT$:NEAR   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_DIAMOND_HALF_BOTTOM$:NEAR ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_DIAMOND_HALF_RIGHT$:NEAR  ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_DIAMOND_QTR_UR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_DIAMOND_QTR_UL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_DIAMOND_QTR_LL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_DIAMOND_QTR_LR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_CIRCLE$:NEAR		   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_CIRCLE_HALF_TOP$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_CIRCLE_HALF_LEFT$:NEAR    ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_CIRCLE_HALF_BOTTOM$:NEAR  ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_CIRCLE_HALF_RIGHT$:NEAR   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_CIRCLE_QTR_UR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_CIRCLE_QTR_UL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_CIRCLE_QTR_LL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_CIRCLE_QTR_LR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_CIRCLE$:NEAR	           ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_CIRCLE_HALF_TOP$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_CIRCLE_HALF_LEFT$:NEAR    ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_CIRCLE_HALF_BOTTOM$:NEAR  ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_CIRCLE_HALF_RIGHT$:NEAR   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_CIRCLE_QTR_UR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_CIRCLE_QTR_UL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_CIRCLE_QTR_LL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_CIRCLE_QTR_LR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_ELLIPSE$:NEAR		   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_ELLIPSE_HALF_TOP$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_ELLIPSE_HALF_LEFT$:NEAR   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_ELLIPSE_HALF_BOTTOM$:NEAR ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_ELLIPSE_HALF_RIGHT$:NEAR  ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_ELLIPSE_QTR_UR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_ELLIPSE_QTR_UL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_ELLIPSE_QTR_LL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_ELLIPSE_QTR_LR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_ELLIPSE$:NEAR	           ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_ELLIPSE_HALF_TOP$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_ELLIPSE_HALF_LEFT$:NEAR   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_ELLIPSE_HALF_BOTTOM$:NEAR ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_ELLIPSE_HALF_RIGHT$:NEAR  ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_ELLIPSE_QTR_UR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_ELLIPSE_QTR_UL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_ELLIPSE_QTR_LL$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_FILL_ELLIPSE_QTR_LR$:NEAR	   ;NEAR MACUSER.LIB SUBROUTINE
	EXTRN	VGA_DRAW_CHAR$:NEAR		;NEAR SUBROUTINE IN MACUSER.LIB
        EXTRN   VGA_DRAW_STRING$:NEAR   	;NEAR SUBROUTINE IN MACUSER.LIB
        EXTRN   VGA_DRAW_STRINGZ$:NEAR  	;NEAR SUBROUTINE IN MACUSER.LIB
        EXTRN   VGA_DRAW_STRINGT$:NEAR  	;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	VGA_RESTORE$:NEAR		;NEAR SUBROUTINE IN MACUSER.LIB
	EXTRN	NOCTRLC:NEAR			;NEAR SUBROUTINE IN MACUSER.LIB



        ARG1OF1 EQU     [BP+06]         ;STACK OFFSET TO ARGUMENT #1 IF 1 ARG

        ARG1OF2 EQU     [BP+10]         ;STACK OFFSET TO ARGUMENT #1 IF 2 ARGS
        ARG2OF2 EQU     [BP+06]         ;STACK OFFSET TO ARGUMENT #2 IF 2 ARGS

        ARG1OF3 EQU     [BP+14]         ;STACK OFFSET TO ARGUMENT #1 IF 3 ARGS
        ARG2OF3 EQU     [BP+10]         ;STACK OFFSET TO ARGUMENT #2 IF 3 ARGS
        ARG3OF3 EQU     [BP+06]         ;STACK OFFSET TO ARGUMENT #3 IF 3 ARGS

        ARG1OF4 EQU     [BP+18]         ;STACK OFFSET TO ARGUMENT #1 IF 4 ARGS
        ARG2OF4 EQU     [BP+14]         ;STACK OFFSET TO ARGUMENT #2 IF 4 ARGS
        ARG3OF4 EQU     [BP+10]         ;STACK OFFSET TO ARGUMENT #3 IF 4 ARGS
        ARG4OF4 EQU     [BP+06]         ;STACK OFFSET TO ARGUMENT #4 IF 4 ARGS

        ARG1OF5 EQU	[BP+22]         ;STACK OFFSET TO ARGUMENT #1 IF 5 ARGS
        ARG2OF5 EQU     [BP+18]         ;STACK OFFSET TO ARGUMENT #2 IF 5 ARGS
        ARG3OF5 EQU     [BP+14]         ;STACK OFFSET TO ARGUMENT #3 IF 5 ARGS
        ARG4OF5 EQU     [BP+10]         ;STACK OFFSET TO ARGUMENT #4 IF 5 ARGS
        ARG5OF5 EQU     [BP+06]         ;STACK OFFSET TO ARGUMENT #5 IF 5 ARGS

	ARG10F6 EQU     [BP+26]		;STACK OFFSET TO ARGUMENT #1 IF 6 ARGS
        ARG2OF6 EQU	[BP+22]         ;STACK OFFSET TO ARGUMENT #2 IF 6 ARGS
        ARG3OF6 EQU     [BP+18]         ;STACK OFFSET TO ARGUMENT #3 IF 6 ARGS
        ARG4OF6 EQU     [BP+14]         ;STACK OFFSET TO ARGUMENT #4 IF 6 ARGS
        ARG5OF6 EQU     [BP+10]         ;STACK OFFSET TO ARGUMENT #5 IF 6 ARGS
        ARG6OF6 EQU     [BP+06]         ;STACK OFFSET TO ARGUMENT #6 IF 6 ARGS

        ARG1OF7 EQU	[BP+30]         ;STACK OFFSET TO ARGUMENT #1 IF 7 ARGS
        ARG2OF7 EQU	[BP+26]         ;STACK OFFSET TO ARGUMENT #2 IF 7 ARGS
        ARG3OF7 EQU	[BP+22]         ;STACK OFFSET TO ARGUMENT #3 IF 7 ARGS
        ARG4OF7 EQU     [BP+18]         ;STACK OFFSET TO ARGUMENT #4 IF 7 ARGS
        ARG5OF7 EQU     [BP+14]         ;STACK OFFSET TO ARGUMENT #5 IF 7 ARGS
        ARG6OF7 EQU     [BP+10]         ;STACK OFFSET TO ARGUMENT #6 IF 7 ARGS
        ARG7OF7 EQU     [BP+06]         ;STACK OFFSET TO ARGUMENT #7 IF 7 ARGS


DATSEG	SEGMENT PARA PUBLIC 'DATA'	;DEFINE DATA-SEGMENT NAMED "DATSEG"
;
;
DATSEG	ENDS				;END OF DATA-SEGMENT NAMED "DATSEG"


CODSEG  SEGMENT PARA PUBLIC 'CODE'      ;DEFINE CODE-SEGMENT NAMED "CODSEG"
        ASSUME  CS:CODSEG,DS:DATSEG,ES:NOTHING

;$LOCAL_VARIABLES
;$END_SECTION

;$EXTERNAL_ROUTINES
;$END_SECTION




;   CALL VGA_INIT_M (STATUS,ADAPTYP,MONITYP,MONOFLAG,BIOSTYP)
;
VGA_INIT_M  		PROC  FAR       ;BEGIN FAR PROCEDURE

	CALL	NOCTRLC			;STOMP OUT CONTROL-Cs
        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG4OF5		;POINT TO MONO-ALLOWED VARIABLE
	MOV	CX,ES:[DI]		;LOAD MONO-ALLOWED FLAG FOR VGA_INIT$
	OR	CL,CH			;MAKE SURE FLAG IS IN LOW BYTE

	CALL	VGA_INIT$		;INITIALIZE THE VGA GRAPHICS SUBSYSTEM
	LES	DI,ARG1OF5		;POINT TO CALLER'S STATUS VARIABLE
	MOV	ES:[DI],AX		;STORE VGA_INIT$ STATUS FOR CALLER
	
	LES	DI,ARG2OF5		;POINT TO ADAPTER-TYPE VARIABLE
	MOV	DL,BH			;SAVE MONITOR-TYPE
	MOV	BH,0			;CLEAR HIGH-BYTE OF ADAPTER-TYPE
	MOV	ES:[DI],BX		;STORE ADAPTER-TYPE FOR CALLER

	LES	DI,ARG3OF5		;POINT TO MONITOR-TYPE VARIABLE
	MOV	DH,0			;CLEAR HIGH-BYTE OF MONITOR-TYPE
	MOV	ES:[DI],DX		;STORE MONITOR-TYPE FOR CALLER

	LES	DI,ARG4OF5		;POINT TO MONO-AVAILABLE VARIABLE
	MOV	DL,CH			;SAVE BIOS VIDEO-TYPE CODE
	MOV	CH,0			;CLEAR HIGH-BYTE OF MONO-FLAG
	MOV	ES:[DI],CX		;STORE MONO-AVAILABLE FLAG FOR CALLER

	LES	DI,ARG5OF5		;POINT TO BIOS VIDEO-TYPE VARIABLE
	MOV	DH,0			;CLEAR HIGH-BYTE OF BIOS VIDEO-TYPE
	MOV	ES:[DI],DX		;STORE BIOS VIDEO-TYPE FOR CALLER

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     20                      ;RETURN TO CALLER & CLEAR STACK

VGA_INIT_M		ENDP            ;END OF PROCEDURE





;   CALL VGA_MODE_M (MODECOD,MONOTOP,MONOBOT,STATUS,HRES,VRES,NCLRS)
;
VGA_MODE_M  		PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF7		;POINT TO MODE-CODE
	MOV	AX,ES:[DI]		;FETCH THE MODE-CODE

	LES	DI,ARG2OF7		;POINT TO TOP SCAN-LINE
	MOV	CX,ES:[DI]		;FETCH THE TOP MONO CURSOR SCAN-LINE
	MOV	BH,CL			;STORE IT FOR VGA_MODE$

	LES	DI,ARG3OF7		;POINT TO BOTTOM SCAN-LINE
	MOV	CX,ES:[DI]		;FETCH THE BOTTOM MONO CURSOR SCAN-LINE
	MOV	BL,CL			;STORE IT FOR VGA_MODE$

	CALL	VGA_MODE$		;SET THE DESIRED OPERATING MODE

	LES	DI,ARG4OF7		;POINT TO CALLER'S STATUS VARIABLE
	MOV	ES:[DI],DX		;STORE RETURN STATUS FOR CALLER

	LES	DI,ARG5OF7		;POINT TO CALLER'S HOR-RES VARIABLE
	MOV	ES:[DI],AX		;STORE HORIZONTAL RESOLUTION FOR CALLER

	LES	DI,ARG6OF7		;POINT TO CALLER'S VERT-RES VARIABLE
	MOV	ES:[DI],BX		;STORE VERTICAL RESOLUTION FOR CALLER

	LES	DI,ARG7OF7		;POINT TO CALLER'S COLOR-COUNT VARIABLE
	MOV	ES:[DI],CX		;STORE RETURN # OF COLORS FOR CALLER

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     28                      ;RETURN TO CALLER & CLEAR STACK

VGA_MODE_M		ENDP            ;END OF PROCEDURE





;   CALL VGA_LOAD_1_COLOR_DAC_M (DACNUM,REDVAL,GRNVAL,BLUVAL)
;
VGA_LOAD_1_COLOR_DAC_M	PROC	FAR	;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF4		;POINT TO DAC REGISTER NUMBER
	MOV	BX,ES:[DI]		;FETCH IT
	LES	DI,ARG2OF4		;POINT TO RED COLOR VALUE
	MOV	DH,ES:[DI]		;FETCH IT
	LES	DI,ARG3OF4		;POINT TO GREEN COLOR VALUE
	MOV	CH,ES:[DI]		;FETCH IT
	LES	DI,ARG4OF4		;POINT TO BLUE COLOR VALUE
	MOV	CL,ES:[DI]		;FETCH IT
	
	MOV	AH,10h			;"PALLETTE/COLORS" FUNCTION
	MOV	AL,10h			;"SET ONE COLOR DAC"
	INT	10h			;EXECUTE VIDEO BIOS FUNCTION-CALL

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     16                      ;RETURN TO CALLER & CLEAR STACK

VGA_LOAD_1_COLOR_DAC_M	ENDP            ;END OF PROCEDURE






;   CALL VGA_SET_DEFAULTS_M ()
;
VGA_SET_DEFAULTS_M	PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	CALL	VGA_SET_DEFAULTS$	;SET ALL DRAWING DEFAULTS

	POP	DS			;RESTORE DS
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET                             ;RETURN TO CALLER

VGA_SET_DEFAULTS_M	ENDP            ;END OF PROCEDURE





;   CALL VGA_SET_COLOR_M	(COLOR)
;
VGA_SET_COLOR_M 	PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF1		;POINT TO COLOR
	MOV	BX,ES:[DI]		;FETCH THE COLOR

	CALL	VGA_SET_COLOR$		;SET THE DRAWING COLOR

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     4                       ;RETURN TO CALLER & CLEAR STACK

VGA_SET_COLOR_M		ENDP            ;END OF PROCEDURE





;   CALL VGA_SET_BAK_COLOR_M (COLOR)
;
VGA_SET_BAK_COLOR_M	PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF1		;POINT TO COLOR
	MOV	BX,ES:[DI]		;FETCH THE COLOR

	CALL	VGA_SET_BAK_COLOR$	;SET THE BACKGROUND COLOR

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     4                       ;RETURN TO CALLER & CLEAR STACK

VGA_SET_BAK_COLOR_M	ENDP            ;END OF PROCEDURE





;   CALL VGA_SET_BLINK_M (YESNO)
;
VGA_SET_BLINK_M		PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF1		;POINT TO BLINK-FLAG
	MOV	BX,ES:[DI]		;FETCH THE BLINK-FLAG

	CALL	VGA_SET_BLINK$		;SET THE BLINK-FLAG

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     4                       ;RETURN TO CALLER & CLEAR STACK

VGA_SET_BLINK_M		ENDP            ;END OF PROCEDURE





;   CALL VGA_SET_CHAR_SIZE_M (SIZECODE,STATUS)
;
VGA_SET_CHAR_SIZE_M	PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF2		;POINT TO CHARACTER SIZE-CODE
	MOV	BX,ES:[DI]		;FETCH THE SIZE-CODE

	CALL	VGA_SET_CHAR_SIZE$	;SET THE CHARACTER-SIZE
	XOR	AX,AX			;ASSUME NO ERROR OCCURRED
	JNC	SIZEOK			;BR IF NO ERROR
	DEC	AX			;CHANGE STATUS TO -1

SIZEOK:	LES	DI,ARG2OF2		;POINT TO CALLER'S STATUS VARIABLE
	MOV	ES:[DI],AX		;STORE STATUS FOR CALLER

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     8                       ;RETURN TO CALLER & CLEAR STACK

VGA_SET_CHAR_SIZE_M	ENDP            ;END OF PROCEDURE





;   CALL VGA_SET_CHAR_ORI_M (ORICODE,STATUS)
;
VGA_SET_CHAR_ORI_M	PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF2		;POINT TO ORIENTATION-CODE
	MOV	BX,ES:[DI]		;FETCH THE ORIENTATION-CODE

	CALL	VGA_SET_CHAR_ORI$	;SET THE TEXT CHARACTER ORIENTATION
	XOR	AX,AX			;ASSUME NO ERROR OCCURRED
	JNC	ORIOK			;BR IF NO ERROR
	DEC	AX			;CHANGE STATUS TO -1

ORIOK:	LES	DI,ARG2OF2		;POINT TO CALLER'S STATUS VARIABLE
	MOV	ES:[DI],AX		;STORE STATUS FOR CALLER

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     8                       ;RETURN TO CALLER & CLEAR STACK

VGA_SET_CHAR_ORI_M	ENDP            ;END OF PROCEDURE





;   CALL VGA_SET_STRING_DIR_M (DIRCODE,STATUS)
;
VGA_SET_STRING_DIR_M	PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF2		;POINT TO DIRECTION-CODE
	MOV	BX,ES:[DI]		;FETCH THE DIRECTION-CODE

	CALL	VGA_SET_STRING_DIR$	;SET THE STRING DRAWING DIRECTION
	XOR	AX,AX			;ASSUME NO ERROR OCCURRED
	JNC	DIROK			;BR IF NO ERROR
	DEC	AX			;CHANGE STATUS TO -1

DIROK:	LES	DI,ARG2OF2		;POINT TO CALLER'S STATUS VARIABLE
	MOV	ES:[DI],AX		;STORE STATUS FOR CALLER

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     8                       ;RETURN TO CALLER & CLEAR STACK

VGA_SET_STRING_DIR_M	ENDP            ;END OF PROCEDURE





;   CALL VGA_DRAW_DOT_M	(X1,Y1)
;
VGA_DRAW_DOT_M 		PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF2		;POINT TO X-COORDINATE
	MOV	AX,ES:[DI]		;FETCH THE X-COORDINATE

	LES	DI,ARG2OF2		;POINT TO Y-COORDINATE
	MOV	SI,ES:[DI]		;FETCH THE Y-COORDINATE

	CALL	VGA_DRAW_DOT$		;DRAW THE DOT

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     8                       ;RETURN TO CALLER & CLEAR STACK

VGA_DRAW_DOT_M		ENDP            ;END OF PROCEDURE





;   CALL VGA_DRAW_LINE_M (X1,Y1,X2,Y2)
;
VGA_DRAW_LINE_M		PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF4		;POINT TO STARTING X-COORDINATE
	MOV	AX,ES:[DI]		;FETCH THE STARTING X-COORDINATE
	LES	DI,ARG2OF4		;POINT TO STARTING Y-COORDINATE
	MOV	SI,ES:[DI]		;FETCH THE STARTING Y-COORDINATE
	LES	DI,ARG3OF4		;POINT TO ENDING X-COORDINATE
	MOV	DX,ES:[DI]		;FETCH THE ENDING X-COORDINATE
	LES	DI,ARG4OF4		;POINT TO ENDING Y-COORDINATE
	MOV	DI,ES:[DI]		;FETCH THE ENDING Y-COORDINATE

	CALL	VGA_DRAW_LINE$		;DRAW THE LINE

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     16                      ;RETURN TO CALLER & CLEAR STACK

VGA_DRAW_LINE_M		ENDP            ;END OF PROCEDURE





;   CALL VGA_DRAW_RECT_M (X1,Y1,X2,Y2)
;
VGA_DRAW_RECT_M 	PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF4		;POINT TO STARTING X-COORDINATE
	MOV	AX,ES:[DI]		;FETCH THE STARTING X-COORDINATE
	LES	DI,ARG2OF4		;POINT TO STARTING Y-COORDINATE
	MOV	SI,ES:[DI]		;FETCH THE STARTING Y-COORDINATE
	LES	DI,ARG3OF4		;POINT TO ENDING X-COORDINATE
	MOV	DX,ES:[DI]		;FETCH THE ENDING X-COORDINATE
	LES	DI,ARG4OF4		;POINT TO ENDING Y-COORDINATE
	MOV	DI,ES:[DI]		;FETCH THE ENDING Y-COORDINATE

	CALL	VGA_DRAW_RECT$		;DRAW THE RECTANGLE

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     16                      ;RETURN TO CALLER & CLEAR STACK

VGA_DRAW_RECT_M		ENDP            ;END OF PROCEDURE





;   CALL VGA_FILL_RECT_M	(X1,Y1,X2,Y2)
;
VGA_FILL_RECT_M		PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF4		;POINT TO STARTING X-COORDINATE
	MOV	AX,ES:[DI]		;FETCH THE STARTING X-COORDINATE
	LES	DI,ARG2OF4		;POINT TO STARTING Y-COORDINATE
	MOV	SI,ES:[DI]		;FETCH THE STARTING Y-COORDINATE
	LES	DI,ARG3OF4		;POINT TO ENDING X-COORDINATE
	MOV	DX,ES:[DI]		;FETCH THE ENDING X-COORDINATE
	LES	DI,ARG4OF4		;POINT TO ENDING Y-COORDINATE
	MOV	DI,ES:[DI]		;FETCH THE ENDING Y-COORDINATE

	CALL	VGA_FILL_RECT$		;DRAW THE FILLED RECTANGLE

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     16                      ;RETURN TO CALLER & CLEAR STACK

VGA_FILL_RECT_M		ENDP            ;END OF PROCEDURE


VGA_DRAW_DIAMOND_M		PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_DIAMOND$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_DIAMOND_M		ENDP                   ;END OF PROCEDURE

VGA_DRAW_DIAMOND_HALF_TOP_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_DIAMOND_HALF_TOP$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_DIAMOND_HALF_TOP_M	ENDP                   ;END OF PROCEDURE

VGA_DRAW_DIAMOND_HALF_LEFT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_DIAMOND_HALF_LEFT$ ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_DIAMOND_HALF_LEFT_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_DIAMOND_HALF_BOTTOM_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_DIAMOND_HALF_BOTTOM$ ;HANDLER
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_DIAMOND_HALF_BOTTOM_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_DIAMOND_HALF_RIGHT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_DIAMOND_HALF_RIGHT$  ;HANDLER
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_DIAMOND_HALF_RIGHT_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_DIAMOND_QTR_UR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_DIAMOND_QTR_UR$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_DIAMOND_QTR_UR_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_DIAMOND_QTR_UL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_DIAMOND_QTR_UL$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_DIAMOND_QTR_UL_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_DIAMOND_QTR_LL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_DIAMOND_QTR_LL$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_DIAMOND_QTR_LL_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_DIAMOND_QTR_LR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_DIAMOND_QTR_LR$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_DIAMOND_QTR_LR_M	ENDP		       ;END OF PROCEDURE


VGA_FILL_DIAMOND_M		PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_DIAMOND$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_DIAMOND_M		ENDP                   ;END OF PROCEDURE

VGA_FILL_DIAMOND_HALF_TOP_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_DIAMOND_HALF_TOP$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_DIAMOND_HALF_TOP_M	ENDP                   ;END OF PROCEDURE

VGA_FILL_DIAMOND_HALF_LEFT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_DIAMOND_HALF_LEFT$ ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_DIAMOND_HALF_LEFT_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_DIAMOND_HALF_BOTTOM_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_DIAMOND_HALF_BOTTOM$ ;HANDLER
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_DIAMOND_HALF_BOTTOM_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_DIAMOND_HALF_RIGHT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_DIAMOND_HALF_RIGHT$  ;HANDLER
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_DIAMOND_HALF_RIGHT_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_DIAMOND_QTR_UR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_DIAMOND_QTR_UR$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_DIAMOND_QTR_UR_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_DIAMOND_QTR_UL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_DIAMOND_QTR_UL$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_DIAMOND_QTR_UL_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_DIAMOND_QTR_LL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_DIAMOND_QTR_LL$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_DIAMOND_QTR_LL_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_DIAMOND_QTR_LR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_DIAMOND_QTR_LR$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_DIAMOND_QTR_LR_M	ENDP		       ;END OF PROCEDURE




VGA_DRAW_CIRCLE_M		PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_CIRCLE$   ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_CIRCLE_M		ENDP                   ;END OF PROCEDURE

VGA_DRAW_CIRCLE_HALF_TOP_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_CIRCLE_HALF_TOP$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_CIRCLE_HALF_TOP_M	ENDP                   ;END OF PROCEDURE

VGA_DRAW_CIRCLE_HALF_LEFT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_CIRCLE_HALF_LEFT$ ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_CIRCLE_HALF_LEFT_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_CIRCLE_HALF_BOTTOM_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_CIRCLE_HALF_BOTTOM$ ;HANDLER
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_CIRCLE_HALF_BOTTOM_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_CIRCLE_HALF_RIGHT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_CIRCLE_HALF_RIGHT$  ;HANDLER
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_CIRCLE_HALF_RIGHT_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_CIRCLE_QTR_UR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_CIRCLE_QTR_UR$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_CIRCLE_QTR_UR_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_CIRCLE_QTR_UL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_CIRCLE_QTR_UL$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_CIRCLE_QTR_UL_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_CIRCLE_QTR_LL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_CIRCLE_QTR_LL$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_CIRCLE_QTR_LL_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_CIRCLE_QTR_LR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_CIRCLE_QTR_LR$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_DRAW_CIRCLE_QTR_LR_M	ENDP		       ;END OF PROCEDURE


VGA_FILL_CIRCLE_M		PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_CIRCLE$   ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_CIRCLE_M		ENDP                   ;END OF PROCEDURE

VGA_FILL_CIRCLE_HALF_TOP_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_CIRCLE_HALF_TOP$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_CIRCLE_HALF_TOP_M	ENDP                   ;END OF PROCEDURE

VGA_FILL_CIRCLE_HALF_LEFT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_CIRCLE_HALF_LEFT$ ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_CIRCLE_HALF_LEFT_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_CIRCLE_HALF_BOTTOM_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_CIRCLE_HALF_BOTTOM$ ;HANDLER
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_CIRCLE_HALF_BOTTOM_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_CIRCLE_HALF_RIGHT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_CIRCLE_HALF_RIGHT$  ;HANDLER
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_CIRCLE_HALF_RIGHT_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_CIRCLE_QTR_UR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_CIRCLE_QTR_UR$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_CIRCLE_QTR_UR_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_CIRCLE_QTR_UL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_CIRCLE_QTR_UL$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_CIRCLE_QTR_UL_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_CIRCLE_QTR_LL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_CIRCLE_QTR_LL$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_CIRCLE_QTR_LL_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_CIRCLE_QTR_LR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_CIRCLE_QTR_LR$  ;HANDLER ADDRESS
	JMP     VGA_THREE_ARGS	                       ;USE COMMON 3-ARG ROUTINE
VGA_FILL_CIRCLE_QTR_LR_M	ENDP		       ;END OF PROCEDURE




VGA_DRAW_ELLIPSE_M		PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_ELLIPSE$  ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_DRAW_ELLIPSE_M		ENDP                   ;END OF PROCEDURE

VGA_DRAW_ELLIPSE_HALF_TOP_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_ELLIPSE_HALF_TOP$  ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_DRAW_ELLIPSE_HALF_TOP_M	ENDP                   ;END OF PROCEDURE

VGA_DRAW_ELLIPSE_HALF_LEFT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_ELLIPSE_HALF_LEFT$ ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_DRAW_ELLIPSE_HALF_LEFT_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_ELLIPSE_HALF_BOTTOM_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_ELLIPSE_HALF_BOTTOM$ ;HANDLER
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_DRAW_ELLIPSE_HALF_BOTTOM_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_ELLIPSE_HALF_RIGHT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_ELLIPSE_HALF_RIGHT$  ;HANDLER
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_DRAW_ELLIPSE_HALF_RIGHT_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_ELLIPSE_QTR_UR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_ELLIPSE_QTR_UR$  ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_DRAW_ELLIPSE_QTR_UR_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_ELLIPSE_QTR_UL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_ELLIPSE_QTR_UL$  ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_DRAW_ELLIPSE_QTR_UL_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_ELLIPSE_QTR_LL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_ELLIPSE_QTR_LL$  ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_DRAW_ELLIPSE_QTR_LL_M	ENDP		       ;END OF PROCEDURE

VGA_DRAW_ELLIPSE_QTR_LR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_DRAW_ELLIPSE_QTR_LR$  ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_DRAW_ELLIPSE_QTR_LR_M	ENDP		       ;END OF PROCEDURE


VGA_FILL_ELLIPSE_M		PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_ELLIPSE$   ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_FILL_ELLIPSE_M		ENDP                   ;END OF PROCEDURE

VGA_FILL_ELLIPSE_HALF_TOP_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_ELLIPSE_HALF_TOP$  ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_FILL_ELLIPSE_HALF_TOP_M	ENDP                   ;END OF PROCEDURE

VGA_FILL_ELLIPSE_HALF_LEFT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_ELLIPSE_HALF_LEFT$ ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_FILL_ELLIPSE_HALF_LEFT_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_ELLIPSE_HALF_BOTTOM_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_ELLIPSE_HALF_BOTTOM$ ;HANDLER
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_FILL_ELLIPSE_HALF_BOTTOM_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_ELLIPSE_HALF_RIGHT_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_ELLIPSE_HALF_RIGHT$  ;HANDLER
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_FILL_ELLIPSE_HALF_RIGHT_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_ELLIPSE_QTR_UR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_ELLIPSE_QTR_UR$  ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_FILL_ELLIPSE_QTR_UR_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_ELLIPSE_QTR_UL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_ELLIPSE_QTR_UL$  ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_FILL_ELLIPSE_QTR_UL_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_ELLIPSE_QTR_LL_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_ELLIPSE_QTR_LL$  ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_FILL_ELLIPSE_QTR_LL_M	ENDP		       ;END OF PROCEDURE

VGA_FILL_ELLIPSE_QTR_LR_M	PROC  FAR              ;BEGIN FAR PROCEDURE
	MOV	BX,  OFFSET  CODSEG:VGA_FILL_ELLIPSE_QTR_LR$  ;HANDLER ADDRESS
	JMP     VGA_FOUR_ARGS	                       ;USE COMMON 4-ARG ROUTINE
VGA_FILL_ELLIPSE_QTR_LR_M	ENDP		       ;END OF PROCEDURE




;   CALL VGA_DRAW_CHAR_M (X1,Y1,CHARBYTE)
;
VGA_DRAW_CHAR_M		PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF3		;POINT TO X-COORDINATE
	MOV	AX,ES:[DI]		;FETCH THE X-COORDINATE
	LES	DI,ARG2OF3		;POINT TO Y-COORDINATE
	MOV	SI,ES:[DI]		;FETCH THE Y-COORDINATE
	LES	DI,ARG3OF3		;POINT TO CHARACTER TO DRAW
	MOV	CL,ES:[DI]		;FETCH THE CHARACTER

	CALL	VGA_DRAW_CHAR$		;DRAW THE CHARACTER

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     12                      ;RETURN TO CALLER & CLEAR STACK

VGA_DRAW_CHAR_M		ENDP            ;END OF PROCEDURE





;   CALL VGA_DRAW_STRING_M	(X1,Y1,STRING,STRLEN)
;
VGA_DRAW_STRING_M	PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF4		;POINT TO X-COORDINATE
	MOV	AX,ES:[DI]		;FETCH THE X-COORDINATE
	LES	DI,ARG2OF4		;POINT TO Y-COORDINATE
	MOV	SI,ES:[DI]		;FETCH THE Y-COORDINATE
	LES	DI,ARG4OF4		;POINT TO CHARACTER-COUNT
	MOV	CL,ES:[DI]		;FETCH THE CHARACTER-COUNT
	LES	DI,ARG3OF4		;POINT ES:DI TO THE CHARACTER-STRING

	CALL	VGA_DRAW_STRING$	;DRAW THE CHARACTER-STRING

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     16                      ;RETURN TO CALLER & CLEAR STACK

VGA_DRAW_STRING_M	ENDP            ;END OF PROCEDURE





;   CALL VGA_DRAW_STRINGZ_M	(X1,Y1,STRINGZ)
;
VGA_DRAW_STRINGZ_M	PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF3		;POINT TO X-COORDINATE
	MOV	AX,ES:[DI]		;FETCH THE X-COORDINATE
	LES	DI,ARG2OF3		;POINT TO Y-COORDINATE
	MOV	SI,ES:[DI]		;FETCH THE Y-COORDINATE
	LES	DI,ARG3OF3		;POINT TO THE ASCIZ CHARACTER-STRING

	CALL	VGA_DRAW_STRINGZ$	;DRAW THE ASCIZ CHARACTER-STRING

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     12                      ;RETURN TO CALLER & CLEAR STACK

VGA_DRAW_STRINGZ_M	ENDP            ;END OF PROCEDURE





;   CALL VGA_DRAW_STRINGT_M	(X1,Y1,STRINGT)
;
VGA_DRAW_STRINGT_M	PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF3		;POINT TO X-COORDINATE
	MOV	AX,ES:[DI]		;FETCH THE X-COORDINATE
	LES	DI,ARG2OF3		;POINT TO Y-COORDINATE
	MOV	SI,ES:[DI]		;FETCH THE Y-COORDINATE
	LES	DI,ARG3OF3		;POINT TO THE ASCIT CHARACTER-STRING

	CALL	VGA_DRAW_STRINGT$	;DRAW THE ASCIZ CHARACTER-STRING

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     12                      ;RETURN TO CALLER & CLEAR STACK

VGA_DRAW_STRINGT_M	ENDP            ;END OF PROCEDURE





;   CALL VGA_RESTORE_M (ZEROFLAG)
;
VGA_RESTORE_M  		PROC  FAR       ;BEGIN FAR PROCEDURE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF1		;POINT TO CALLER'S "SLASHED-ZERO" FLAG
	MOV	AX,ES:[DI]		;LOAD SLASHED-ZERO FLAG FOR VGA_RESTORE$
	CALL	VGA_RESTORE$		;RESTORE PREVIOUS VIDEO CONDITIONS

        POP     DS                      ;RESTORE DS
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RET     4                       ;RETURN TO CALLER & CLEAR STACK

VGA_RESTORE_M		ENDP            ;END OF PROCEDURE


;LOCAL GENERIC SUBROUTINE TO HANDLE 3-ARGUMENT CALLS
;CAUTION: ALWAYS PUTS ARGUMENTS 1,2,3 IN AX,SI,DX RESPECTIVELY)
;CAUTION: ALWAYS JUMPS TO NEAR ADDRESS HELD IN REGISTER BX
;
VGA_THREE_ARGS	PROC	NEAR	        ;GENERIC 3-ARGUMENT ROUTINE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF3		;POINT TO CENTER X-COORDINATE
	MOV	AX,ES:[DI]		;FETCH THE CENTER X-COORDINATE
	LES	DI,ARG2OF3		;POINT TO CENTER Y-COORDINATE
	MOV	SI,ES:[DI]		;FETCH THE CENTER Y-COORDINATE
	LES	DI,ARG3OF3		;POINT TO RADIUS
	MOV	DX,ES:[DI]		;FETCH THE RADIUS

	CALL	BX			;CALL THE APPROPRIATE HANDLER ROUTINE

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RETF    12                      ;RETURN TO CALLER & CLEAR STACK

VGA_THREE_ARGS	ENDP			;END OF LOCAL GENERIC 3-ARG PROCEDURE




;LOCAL GENERIC SUBROUTINE TO HANDLE 4-ARGUMENT CALLS
;CAUTION: ALWAYS PUTS ARGUMENTS 1,2,3,4 IN AX,SI,DX,DI RESPECTIVELY
;CAUTION: ALWAYS JUMPS TO NEAR ADDRESS HELD IN REGISTER BX
;
VGA_FOUR_ARGS	PROC	NEAR	        ;GENERIC 4-ARGUMENT ROUTINE

        PUSH    BP                      ;SAVE CALLER'S BASE-POINTER
        MOV     BP,SP                   ;SET MY STACK FRAME-POINTER
        PUSH    SI                      ;SAVE SI
	PUSH	DI			;SAVE DI
        PUSH    DS                      ;SAVE DS
	MOV	AX,DATSEG		;FARBA-LOCAL DATA-SEGMENT ADDRESS
	MOV	DS,AX			;POINT TO IT WITH DS

	LES	DI,ARG1OF4		;POINT TO CENTER X-COORDINATE
	MOV	AX,ES:[DI]		;FETCH THE CENTER X-COORDINATE
	LES	DI,ARG2OF4		;POINT TO CENTER Y-COORDINATE
	MOV	SI,ES:[DI]		;FETCH THE CENTER Y-COORDINATE
	LES	DI,ARG3OF4		;POINT TO X-RADIUS
	MOV	DX,ES:[DI]		;FETCH THE X-RADIUS
	LES	DI,ARG4OF4		;POINT TO Y-RADIUS
	MOV	DI,ES:[DI]		;FETCH THE Y-RADIUS

	CALL	BX			;CALL THE APPROPRIATE HANDLER ROUTINE

        POP     DS                      ;RESTORE DS
	POP	DI			;RESTORE DI
        POP     SI                      ;RESTORE SI
        POP     BP                      ;RESTORE CALLER'S BASE-POINTER
        RETF    16                      ;RETURN TO CALLER & CLEAR STACK

VGA_FOUR_ARGS	ENDP			;END OF LOCAL GENERIC 4-ARG PROCEDURE



CODSEG  ENDS                            ;END OF CODE-SEGMENT
;
;END OF LIBRARY MODULE "VGAXXX_M.MSF"
        END                             ;END OF ENTIRE SOURCE MODULE

Farba Products WORK