home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.update.uu.se
/
ftp.update.uu.se.2014.03.zip
/
ftp.update.uu.se
/
pub
/
rainbow
/
msdos
/
decus
/
RB140
/
grlib03a.arj
/
FGLIB.ASM
< prev
next >
Wrap
Assembly Source File
|
1988-12-19
|
21KB
|
963 lines
PAGE ,132
TITLE FGLIB.ASM
;*************************************************************
; Microsoft fortran interface into GRLIB *
; (Computer Innovations C Graphics library) *
;*************************************************************
;
; This is really a interface between the LARGE Fortran and
; small C model.
;
; Fortran Parameters are passed by far reference, left to right
;
; C parameters are passed right to left; arrays & strings by
; near reference, integers & chars by value.
;
include asmc.h
SEGEND CODE
SEGDEF DATA
EXTRN f_col:BYTE, f_style:BYTE, f_type:BYTE
EXTRN l_col:BYTE, l_type:BYTE, l_wid:BYTE
EXTRN m_col:BYTE, m_sca:BYTE, m_type:BYTE
EXTRN t_col:BYTE, t_dir:BYTE, t_font:BYTE
EXTRN t_sca:BYTE, ws_number:BYTE, ws_wmo:BYTE
public F_WORK_BUF_
ARRAY DW ?
ARRAY4 DW ?
BLUE DW ?
CENTRX DW ?
CENTRY DW ?
CHAR DW ?
COUNT DW ?
ENDDEG DW ?
GREEN DW ?
INDEX DW ?
RADIUS DW ?
RED DW ?
STARTD DW ?
X DW ?
XEND DW ?
XSTART DW ?
Y DW ?
YEND DW ?
YSTART DW ?
ZERO DW 0
F_WORK_BUF_ LABEL BYTE ;external name
STRING LABEL BYTE ;ASCIZ local copy
WORK DW 2048 DUP(?) ;for circles etc
SEGEND DATA
SEGDEF CODE
Extrn a_wmode:NEAR, arc:NEAR, bar:NEAR, circle:NEAR
Extrn color:NEAR, ltext:NEAR, g_off:NEAR, g_on:NEAR
Extrn openws:NEAR, closews:NEAR, point:NEAR, polyfill:NEAR
Extrn polyline:NEAR, polymark:NEAR, rectangle:NEAR
Extrn rq_locator:NEAR, segment_:NEAR, gtext:NEAR
Extrn rd_cell:NEAR, wr_cell:NEAR, rd_plane:NEAR, wr_plane:NEAR
Extrn save_ws:NEAR, restore_ws:NEAR, ld_font:NEAR, kill_gr:NEAR
PUBLIC GRARC, GRBAR, GRCIRC, GRCLOS, GRCOLR, GRFCOL
PUBLIC GRFSTY, GRFTYP, GRGON, GRGOFF, GRGTXT, GRHSCR
PUBLIC GRLCOL, GRLTYP, GRLWID, GRMCOL, GRMSCA, GRMTYP
PUBLIC GROPEN, GRPFIL, GRPLIN, GRPMAR, GRPOIN, GRRECT
PUBLIC GRRQLO, GRSEGM, GRTCOL, GRTDIR, GRTEXT, GRTFON
PUBLIC GRTSCA, GRVSCR, GRWMOD, GRRCEL, GRWCEL, GRRPLN
PUBLIC GRWPLN, GRSAVE, GRREST, GRLFNT, GRLFNT, GRKILL
;make a local ASCIZ copy of string
;ES:SI must point to source
;CX must contain count
movc PROC NEAR
PUSH DS
PUSH ES
POP DS ;DS=ES
POP ES ;ES=DS
LEA DI, STRING
REP MOVSB
MOV AL,0 ;add ASCIZ terminator
STOSB
PUSH DS
PUSH ES
POP DS ;DS=ES
POP ES ;ES=DS
RET
movc ENDP
;***********************************
;* SUBROUTINE GROPEN()
;***********************************
GROPEN PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].0AH
MOV AX,ES:[BX]
MOV INDEX,AX
LES BX,[BP].06H
MOV AX,ES:[BX]
PUSH AX
MOV AX,INDEX
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL openws ;open workstation
ADD SP,4 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GROPEN ENDP
;***********************************
;* SUBROUTINE GRLFNT()
;***********************************
GRLFNT PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].0EH
MOV AX,ES:[BX]
MOV INDEX,AX
LES SI,[BP].0AH ;character string addr
LES BX,[BP].06H ;count
MOV CX,ES:[BX]
CALL movc
LEA AX, STRING
PUSH AX
MOV AX,INDEX
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL ld_font
ADD SP,4 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRLFNT ENDP
;***********************************
;* SUBROUTINE GRKILL()
;***********************************
GRKILL PROC FAR
PUSH BP
MOV BP,SP
PUSH DS ;call with ES set to DS
POP ES
CALL kill_gr ;turn Graphics ON
MOV SP,BP
POP BP
RET
GRKILL ENDP
;***********************************
;* SUBROUTINE GRGON()
;***********************************
GRGON PROC FAR
PUSH BP
MOV BP,SP
PUSH DS ;call with ES set to DS
POP ES
CALL g_on ;turn Graphics ON
MOV SP,BP
POP BP
RET
GRGON ENDP
;***********************************
;* SUBROUTINE GRCIRC()
;***********************************
GRCIRC PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].0EH ;p1
MOV AX,ES:[BX]
MOV CENTRX,AX
LES BX,[BP].0AH ;p2
MOV AX,ES:[BX]
MOV CENTRY,AX
LES BX,[BP].06H ;p3
MOV AX,ES:[BX]
MOV RADIUS,AX
MOV AX,RADIUS
PUSH AX
MOV AX,CENTRY
PUSH AX
MOV AX,CENTRX
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL circle
ADD SP,6 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRCIRC ENDP
;***********************************
;* SUBROUTINE GRARC()
;***********************************
GRARC PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].16H
MOV AX,ES:[BX]
MOV CENTRX,AX
LES BX,[BP].12H
MOV AX,ES:[BX]
MOV CENTRY,AX
LES BX,[BP].0EH
MOV AX,ES:[BX]
MOV RADIUS,AX
LES BX,[BP].0AH
MOV AX,ES:[BX]
MOV STARTD,AX
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV ENDDEG,AX
MOV AX,ENDDEG
PUSH AX
MOV AX,STARTD
PUSH AX
MOV AX,RADIUS
PUSH AX
MOV AX,CENTRY
PUSH AX
MOV AX,CENTRX
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL arc
ADD SP,10 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRARC ENDP
;***********************************
;* SUBROUTINE GRSEGM()
;***********************************
GRSEGM PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].16H
MOV AX,ES:[BX]
MOV CENTRX,AX
LES BX,[BP].12H
MOV AX,ES:[BX]
MOV CENTRY,AX
LES BX,[BP].0EH
MOV AX,ES:[BX]
MOV RADIUS,AX
LES BX,[BP].0AH
MOV AX,ES:[BX]
MOV STARTD,AX
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV ENDDEG,AX
MOV AX,ENDDEG
PUSH AX
MOV AX,STARTD
PUSH AX
MOV AX,RADIUS
PUSH AX
MOV AX,CENTRY
PUSH AX
MOV AX,CENTRX
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL segment_
ADD SP,10 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRSEGM ENDP
;***********************************
;* SUBROUTINE GRCOLR()
;***********************************
GRCOLR PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].12H
MOV AX,ES:[BX]
MOV INDEX,AX
LES BX,[BP].0EH
MOV AX,ES:[BX]
MOV RED,AX
LES BX,[BP].0AH
MOV AX,ES:[BX]
MOV GREEN,AX
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BLUE,AX
MOV AX,BLUE
PUSH AX
MOV AX,GREEN
PUSH AX
MOV AX,RED
PUSH AX
MOV AX,INDEX
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL color
ADD SP,8 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRCOLR ENDP
;***********************************
;* SUBROUTINE GRBAR()
;***********************************
GRBAR PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
PUSH BX
PUSH DS ;call with ES set to DS
POP ES
CALL bar
ADD SP,2 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRBAR ENDP
;***********************************
;* SUBROUTINE GRPLIN()
;***********************************
GRPLIN PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].0AH
MOV AX,ES:[BX]
MOV COUNT,AX
LES BX,[BP].06H
MOV ARRAY,BX
MOV AX,ARRAY
PUSH AX
MOV AX,COUNT
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL polyline
ADD SP,4 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRPLIN ENDP
;***********************************
;* SUBROUTINE GRPMAR()
;***********************************
GRPMAR PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].0AH
MOV AX,ES:[BX]
MOV COUNT,AX
LES BX,[BP].06H
MOV ARRAY,BX
MOV AX,ARRAY
PUSH AX
MOV AX,COUNT
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL polymark
ADD SP,4 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRPMAR ENDP
;***********************************
;* SUBROUTINE GRPFIL()
;***********************************
GRPFIL PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].0AH
MOV AX,ES:[BX]
MOV COUNT,AX
LES BX,[BP].06H
MOV ARRAY,BX
MOV AX,ARRAY
PUSH AX
MOV AX,COUNT
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL polyfill
ADD SP,4 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRPFIL ENDP
;***********************************
;* SUBROUTINE GRGTXT()
;***********************************
GRGTXT PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].12H
MOV AX,ES:[BX]
MOV X,AX
LES BX,[BP].0EH
MOV AX,ES:[BX]
MOV Y,AX
LES SI,[BP].0AH ;character string addr
LES BX,[BP].06H ;count
MOV CX,ES:[BX]
CALL movc
LEA AX, STRING
PUSH AX
MOV AX,Y
PUSH AX
MOV AX,X
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL gtext
ADD SP,6 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRGTXT ENDP
;***********************************
;* SUBROUTINE GRTEXT()
;***********************************
GRTEXT PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].12H
MOV AX,ES:[BX]
MOV X,AX
LES BX,[BP].0EH
MOV AX,ES:[BX]
MOV Y,AX
LES SI,[BP].0AH
LES BX,[BP].06H
MOV CX,ES:[BX]
CALL movc
LEA AX, STRING
PUSH AX
MOV AX,Y
PUSH AX
MOV AX,X
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL ltext
ADD SP,6 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRTEXT ENDP
;***********************************
;* SUBROUTINE GRRQLO()
;***********************************
GRRQLO PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].16H
MOV AX,ES:[BX]
MOV XSTART,AX
LES BX,[BP].12H
MOV AX,ES:[BX]
MOV YSTART,AX
LES BX,[BP].0EH
MOV AX,ES:[BX]
MOV CHAR,AX
LES BX,[BP].0AH
MOV AX,ES:[BX]
MOV XEND,AX
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV YEND,AX
MOV AX,YEND
PUSH AX
MOV AX,XEND
PUSH AX
MOV AX,CHAR
PUSH AX
MOV AX,YSTART
PUSH AX
MOV AX,XSTART
PUSH AX
MOV AX,ZERO
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL rq_locator
ADD SP,12 ;C convention remove params from stack
LES BX,[BP].0EH
MOV AX,CHAR
MOV ES:[BX],AL
LES BX,[BP].0AH
MOV AX,XEND
MOV ES:[BX],AX
LES BX,[BP].06H
MOV AX,YEND
MOV ES:[BX],AX
MOV SP,BP
POP BP
RET
GRRQLO ENDP
;***********************************
;* SUBROUTINE GRVSCR()
;***********************************
GRVSCR PROC FAR
; PUSH BP
; MOV BP,SP
; MOV SP,BP
; POP BP
RET
GRVSCR ENDP
;***********************************
;* SUBROUTINE GRHSCR()
;***********************************
GRHSCR PROC FAR
; PUSH BP
; MOV BP,SP
; MOV SP,BP
; POP BP
RET
GRHSCR ENDP
;***********************************
;* SUBROUTINE GRPOIN()
;***********************************
GRPOIN PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].0AH
MOV AX,ES:[BX]
MOV X,AX
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV Y,AX
MOV AX,Y
PUSH AX
MOV AX,X
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL point
ADD SP,4 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRPOIN ENDP
;***********************************
;* SUBROUTINE GRRECT()
;***********************************
GRRECT PROC FAR
PUSH BP
MOV BP,SP
LES AX,[BP].06H
MOV ARRAY4,AX
MOV AX,ARRAY4
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL rectangle
ADD SP,2 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRRECT ENDP
;***********************************
;* SUBROUTINE GRTSCA()
;***********************************
GRTSCA PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR t_sca,AL
MOV SP,BP
POP BP
RET
GRTSCA ENDP
;***********************************
;* SUBROUTINE GRCLOS()
;***********************************
GRCLOS PROC FAR
PUSH BP
MOV BP,SP
PUSH DS ;call with ES set to DS
POP ES
CALL closews
MOV SP,BP
POP BP
RET
GRCLOS ENDP
;***********************************
;* SUBROUTINE GRGOFF()
;***********************************
GRGOFF PROC FAR
PUSH BP
MOV BP,SP
PUSH DS ;call with ES set to DS
POP ES
CALL g_off
MOV SP,BP
POP BP
RET
GRGOFF ENDP
;***********************************
;* SUBROUTINE GRTDIR()
;***********************************
GRTDIR PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR t_dir,AL
MOV SP,BP
POP BP
RET
GRTDIR ENDP
;***********************************
;* SUBROUTINE GRFCOL()
;***********************************
GRFCOL PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR f_col,AL
MOV SP,BP
POP BP
RET
GRFCOL ENDP
;***********************************
;* SUBROUTINE GRFSTY()
;***********************************
GRFSTY PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR f_style,AL
MOV SP,BP
POP BP
RET
GRFSTY ENDP
;***********************************
;* SUBROUTINE GRFTYP()
;***********************************
GRFTYP PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR f_type,AL
MOV SP,BP
POP BP
RET
GRFTYP ENDP
;***********************************
;* SUBROUTINE GRLCOL()
;***********************************
GRLCOL PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR l_col,AL
MOV SP,BP
POP BP
RET
GRLCOL ENDP
;***********************************
;* SUBROUTINE GRLTYP()
;***********************************
GRLTYP PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR l_type,AL
MOV SP,BP
POP BP
RET
GRLTYP ENDP
;***********************************
;* SUBROUTINE GRLWID()
;***********************************
GRLWID PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR l_wid,AL
MOV SP,BP
POP BP
RET
GRLWID ENDP
;***********************************
;* SUBROUTINE GRMCOL()
;***********************************
GRMCOL PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR m_col,AL
MOV SP,BP
POP BP
RET
GRMCOL ENDP
;***********************************
;* SUBROUTINE GRMSCA()
;***********************************
GRMSCA PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR m_sca,AL
MOV SP,BP
POP BP
RET
GRMSCA ENDP
;***********************************
;* SUBROUTINE GRMTYP()
;***********************************
GRMTYP PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR m_type,AL
MOV SP,BP
POP BP
RET
GRMTYP ENDP
;***********************************
;* SUBROUTINE GRWMOD()
;***********************************
GRWMOD PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR ws_wmo,AL
PUSH DS ;call with ES set to DS
POP ES
CALL a_wmode
MOV SP,BP
POP BP
RET
GRWMOD ENDP
;***********************************
;* SUBROUTINE GRTCOL()
;***********************************
GRTCOL PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR t_col,AL
MOV SP,BP
POP BP
RET
GRTCOL ENDP
;***********************************
;* SUBROUTINE GRTFON()
;***********************************
GRTFON PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
MOV BYTE PTR t_font,AL
MOV SP,BP
POP BP
RET
GRTFON ENDP
;***********************************
;* SUBROUTINE GRRCEL()
;***********************************
GRRCEL PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
PUSH BX
PUSH DS ;call with ES set to DS
POP ES
CALL rd_cell
ADD SP,2 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRRCEL ENDP
;***********************************
;* SUBROUTINE GRWCEL()
;***********************************
GRWCEL PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
PUSH BX
PUSH DS ;call with ES set to DS
POP ES
CALL wr_cell
ADD SP,2 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRWCEL ENDP
;***********************************
;* SUBROUTINE GRRPLN()
;***********************************
GRRPLN PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
PUSH BX
PUSH DS ;call with ES set to DS
POP ES
CALL rd_plane
ADD SP,2 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRRPLN ENDP
;***********************************
;* SUBROUTINE GRWPLN()
;***********************************
GRWPLN PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
PUSH BX
PUSH DS ;call with ES set to DS
POP ES
CALL wr_plane
ADD SP,2 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRWPLN ENDP
;***********************************
;* SUBROUTINE GRSAVE()
;***********************************
GRSAVE PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL save_ws
ADD SP,2 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRSAVE ENDP
;***********************************
;* SUBROUTINE GRREST()
;***********************************
GRREST PROC FAR
PUSH BP
MOV BP,SP
LES BX,[BP].06H
MOV AX,ES:[BX]
PUSH AX
PUSH DS ;call with ES set to DS
POP ES
CALL restore_ws
ADD SP,2 ;C convention remove params from stack
MOV SP,BP
POP BP
RET
GRREST ENDP
include epilogue.h
END