;"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