home *** CD-ROM | disk | FTP | other *** search
- C Acorn Archimedes specific code
- C 17 February 1994 version 1.00
- C
- C*GRSY00 -- initialize font definition
- C+
- SUBROUTINE GRSY00
- C
- C This routine must be called once in order to initialize the tables
- C defining the symbol numbers to be used for ASCII characters in each
- C font, and to read the character digitization from a file.
- C
- C Arguments: none.
- C
- C Implicit input:
- C The file with name specified in environment variable PGPLOT_FONT
- C is read, if it is available.
- C This is a binary file containing two arrays INDEX and BUFFER.
- C The digitization of each symbol occupies a number of words in
- C the INTEGER*2 array BUFFER; the start of the digitization
- C for symbol number N is in BUFFER(INDEX(N)), where INDEX is an
- C integer array of 3000 elements. Not all symbols 1...3000 have
- C a representation; if INDEX(N) = 0, the symbol is undefined.
- C
- * PGPLOT uses the Hershey symbols for two `primitive' operations:
- * graph markers and text. The Hershey symbol set includes several
- * hundred different symbols in a digitized form that allows them to
- * be drawn with a series of vectors (polylines).
- *
- * The digital representation of all the symbols is stored in common
- * block /GRSYMB/. This is read from a disk file at run time. The
- * name of the disk file is specified in environment variable
- * PGPLOT_FONT.
- *
- * Modules:
- *
- * GRSY00 -- initialize font definition
- * GRSYDS -- decode character string into list of symbol numbers
- * GRSYMK -- convert marker number into symbol number
- * GRSYXD -- obtain the polyline representation of a given symbol
- *
- * PGPLOT calls these routines as follows:
- *
- * Routine Called by
- *
- * GRSY00 GROPEN
- * GRSYDS GRTEXT, GRLEN
- * GRSYMK GRMKER,
- * GRSYXD GRTEXT, GRLEN, GRMKER
- ***********************************************************************
- C--
- C (2-Jan-1984)
- C 22-Jul-1984 - revise to use DATA statements [TJP].
- C 5-Jan-1985 - make missing font file non-fatal [TJP].
- C 9-Feb-1988 - change default file name to Unix name; overridden
- C by environment variable PGPLOT_FONT [TJP].
- C 29-Nov-1990 - move font assignment to GRSYMK.
- C-----------------------------------------------------------------------
- CHARACTER*(*) ARCHI
- PARAMETER (ARCHI='<PGPLOT_FONT>')
- INTEGER BUFFER(13500)
- INTEGER FNTFIL, IER, INDEX(3000), NC1, NC2, NC3
- INTEGER L
- COMMON /GRSYMB/ NC1, NC2, INDEX, BUFFER
- CHARACTER*128 FF
- C
- C Read the font file. If an I/O error occurs, it is ignored; the
- C effect will be that all symbols will be undefined (treated as
- C blank spaces).
- C
- CALL GRGLUN(FNTFIL)
- OPEN (UNIT=FNTFIL, FILE=ARCHI, FORM='UNFORMATTED',
- 2 STATUS='OLD', IOSTAT=IER)
- IF (IER.EQ.0) READ (UNIT=FNTFIL, IOSTAT=IER)
- 1 NC1,NC2,NC3,INDEX,BUFFER
- IF (IER.EQ.0) CLOSE (UNIT=FNTFIL, IOSTAT=IER)
- CALL GRFLUN(FNTFIL)
- IF (IER.NE.0) CALL GRWARN('Unable to read font file: '//ARCHI)
- RETURN
- END
- C*GRDATE -- get date and time as character string Archimedes
- C+
- SUBROUTINE GRDATE(CDATE, LDATE)
- CHARACTER CDATE*(*), TEMP*18, FORM*22
- INTEGER LDATE,IREGS(0:7),ITIME(2)
- DATA FORM(1:21)/'%DY-%M3-19%YR %24:%MI'/FORM(22:22)/?H00/
- C
- C Return the current date and time, in format 'dd-Mmm-yyyy hh:mm'.
- C To receive the whole string, the CDATE should be declared
- C CHARACTER*17.
- C
- C Arguments:
- C CDATE : receives date and time, truncated or extended with
- C blanks as necessary.
- C L : receives the number of characters in STRING, excluding
- C trailing blanks. This will always be 17, unless the length
- C of the string supplied is shorter.
- C--
- C 1989-Mar-17 - [AFT]
- C-----------------------------------------------------------------------
- ITIME(1) = 3
- CALL OSWORD(14,ITIME)
- IREGS(0)=LOC(ITIME)
- IREGS(1)=LOCC(TEMP)
- IREGS(2)=18
- IREGS(3)=LOCC(FORM)
- CALL SWIF77(?IC1,IREGS,IFLAG)
- CDATE=TEMP(1:17)
- LDATE=17
- RETURN
- END
- C*GRFLUN -- free a Fortran logical unit number
- C+
- SUBROUTINE GRFLUN(LUN)
- INTEGER LUN
- C
- C Free a Fortran logical unit number allocated by GRGLUN. [This version
- C is pretty stupid; GRGLUN allocates units starting at 81, and GRFLUN
- C does not free units.]
- C
- C Arguments:
- C LUN : the logical unit number to free.
- C--
- C 25-Nov-1988
- C-----------------------------------------------------------------------
- RETURN
- END
-
- C*GRGCOM -- read with prompt from user's terminal
- C+
- INTEGER FUNCTION GRGCOM(CREAD, CPROM, LREAD)
- CHARACTER CREAD*(*), CPROM*(*)
- INTEGER LREAD
- C
- C Issue prompt and read a line from the user's terminal; in VMS,
- C this is equivalent to LIB$GET_COMMAND.
- C
- C Arguments:
- C CREAD : (output) receives the string read from the terminal.
- C CPROM : (input) prompt string.
- C LREAD : (output) length of CREAD.
- C
- C Returns:
- C GRGCOM : 1 if successful, 0 if an error occurs (e.g., end of file).
- C--
- C 1989-Mar-29
- C-----------------------------------------------------------------------
- INTEGER IER
- C---
- 11 FORMAT(A)
- C---
- GRGCOM = 0
- LREAD = 0
- WRITE (*, 101, IOSTAT=IER) CPROM
- 101 FORMAT(1X,A,' ',$)
- IF (IER.EQ.0) READ (*, 11, IOSTAT=IER) CREAD
- IF (IER.EQ.0) GRGCOM = 1
- LREAD = LNBLNK(CREAD)
- RETURN
- END
- C*********
- C*GRMSG -- issue message to user
- C+
- SUBROUTINE GRMSG (TEXT)
- CHARACTER*(*) TEXT
- C
- C Display a message on standard error.
- C
- C Argument:
- C TEXT (input): text of message to be printed (the string
- C may not be blank).
- C--
- C 1991-Jul-27 - From SUN version [AFT]
- C-----------------------------------------------------------------------
- INTEGER I
- C
- I = LNBLNK(TEXT)
- IF(I.GT.0) WRITE (*, '(1X,A)') TEXT(1:I)
- END
- C*GRGENV -- get value of PGPLOT environment parameter
- C+
- SUBROUTINE GRGENV(CNAME, CVALUE, LVALUE)
- CHARACTER CNAME*(*), CVALUE*(*)
- INTEGER LVALUE
- C
- C Return the value of a PGPLOT environment parameter.
- C
- C Arguments:
- C CNAME : (input) the name of the parameter to evaluate.
- C CVALUE : receives the value of the parameter, truncated or extended
- C with blanks as necessary. If the parameter is undefined,
- C a blank string is returned.
- C LVALUE : receives the number of characters in CVALUE, excluding
- C trailing blanks. If the parameter is undefined, zero is
- C returned.
- C--
- C 1990-Mar-19 - [AFT]
- C-----------------------------------------------------------------------
- C
- CHARACTER*64 CTIN,CTOUT
- INTEGER I, LTMP,IREGS(0:7)
- LOGICAL SWIF77
- C
- CTIN = 'PGPLOT_'//CNAME
- LTMP = INDEX(CTIN,' ')
- IF(LTMP.EQ.0) LTMP=LEN(CTIN)-1
- CTIN(LTMP:LTMP)=CHAR(0)
- IREGS(0)=LOCC(CTIN)
- IREGS(1)=LOCC(CTOUT)
- IREGS(2)=64
- IREGS(3)=0
- IREGS(4)=0
- IF(SWIF77(?I23,IREGS,IFLAG)) THEN
- LVALUE = 0
- ELSE
- LVALUE = IREGS(2)
- CVALUE = CTOUT(1:LVALUE)
- ENDIF
- RETURN
- END
- C*GRGLUN -- get a Fortran logical unit number
- C+
- SUBROUTINE GRGLUN(LUN)
- INTEGER LUN
- C
- C Get an unused Fortran logical unit number.
- C Returns a Logical Unit Number that is not currently opened.
- C After GRGLUN is called, the unit should be opened to reserve
- C the unit number for future calls. Once a unit is closed, it
- C becomes free and another call to GRGLUN could return the same
- C number. Also, GRGLUN will not return a number in the range 1-9
- C as older software will often use these units without warning.
- C
- C Arguments:
- C LUN : receives the logical unit number, or -1 on error.
- C--
- C 12-Feb-1989 [AFT/TJP].
- C-----------------------------------------------------------------------
- INTEGER I
- LOGICAL QOPEN
- C---
- DO 10 I=10,60
- INQUIRE (UNIT=I, OPENED=QOPEN)
- IF (.NOT.QOPEN) THEN
- LUN = I
- RETURN
- ENDIF
- 10 CONTINUE
- CALL GRWARN('GRGLUN: out of units.')
- LUN = -1
- RETURN
- END
- C*GRGMSG -- print system message
- C+
- SUBROUTINE GRGMSG (ISTAT)
- INTEGER ISTAT
- C
- C This routine obtains the text of the VMS system message corresponding
- C to code ISTAT, and displays it using routine GRWARN. On non-VMS
- C systems, it just displays the error number.
- C
- C Argument:
- C ISTAT (input): 32-bit system message code.
- C--
- C 1989-Mar-29
- C-----------------------------------------------------------------------
- CHARACTER CBUF*10
- C
- WRITE (CBUF, 101) ISTAT
- 101 FORMAT(I10)
- CALL GRWARN('system message number: '//CBUF)
- END
- C*GRLGTR -- translate logical name
- C+
- SUBROUTINE GRLGTR (CNAME)
- CHARACTER CNAME*(*)
- C
- C Recursive translation of a logical name.
- C Up to 20 levels of equivalencing can be handled.
- C This is used in the parsing of device specifications in the
- C VMS implementation of PGPLOT. In other implementations, it may
- C be replaced by a null routine.
- C
- C Argument:
- C CNAME (input/output): initially contains the name to be
- C inspected. If an equivalence is found it will be replaced
- C with the new name. If not, the old name will be left there. The
- C escape sequence at the beginning of process-permanent file
- C names is deleted and the '_' character at the beginning of
- C device names is left in place.
- C--
- C 18-Feb-1988
- C-----------------------------------------------------------------------
- RETURN
- END
- C*GROPTX -- open output text file
- C+
- INTEGER FUNCTION GROPTX (UNIT, NAME, DEFNAM, MODE)
- INTEGER UNIT,MODE
- CHARACTER*(*) NAME, DEFNAM
- C
- C Input:
- C UNIT : Fortran unit number to use
- C NAME : name of file to create
- C DEFNAM : default file name (used to fill in missing fields for VMS)
- C MODE : 0 for input, 1 for output
- C
- C Returns:
- C 0 => success; any other value => error.
- C
- C 1994-Oct-04 - found routine needs 4 parameters, nfc objected [DJC]
- C-----------------------------------------------------------------------
- INTEGER IER
- IF(MODE.EQ.1) THEN
- OPEN (UNIT=UNIT, FILE=NAME, STATUS='NEW', IOSTAT=IER)
- ELSE
- OPEN (UNIT=UNIT, FILE=NAME, STATUS='OLD', IOSTAT=IER)
- ENDIF
- GROPTX = IER
- C-----------------------------------------------------------------------
- RETURN
- END
- C*GRPROM -- prompt user before clearing screen
- C+
- SUBROUTINE GRPROM
- C
- C Display "Type <RETURN> for next page: " and wait for the user to
- C type <CR> before proceeding.
- C
- C Arguments:
- C none
- C--
- C 1989-Mar-29
- C-----------------------------------------------------------------------
- INTEGER IER
- CHARACTER CMESS*14
- C---
- 11 FORMAT(A)
- C---
- WRITE(*,101,IOSTAT=IER) CHAR(7)//'Type <RETURN> for next page: '
- 101 FORMAT(1X,A,$)
- IF (IER.EQ.0) READ (*, 11, IOSTAT=IER) CMESS
- RETURN
- END
- C*GRQUIT -- report a fatal error and abort execution
- C+
- SUBROUTINE GRQUIT (CTEXT)
- CHARACTER CTEXT*(*)
- C
- C Report a fatal error (via GRWARN) and exit with fatal status; a
- C traceback is generated unless the program is linked /NOTRACE.
- C
- C Argument:
- C CTEXT (input): text of message to be sent to GRWARN.
- C--
- C 18-Feb-1988
- C-----------------------------------------------------------------------
- CALL GRWARN(CTEXT)
- STOP 'Fatal error in PGPLOT library'
- END
- C*GRTRML -- get name of user's terminal
- C+
- SUBROUTINE GRTRML(CTERM, LTERM)
- CHARACTER CTERM*(*)
- INTEGER LTERM
- C
- C Return the device name of the user's terminal, if any.
- C
- C Arguments:
- C CTERM : receives the terminal name, truncated or extended with
- C blanks as necessary.
- C LTERM : receives the number of characters in CTERM, excluding
- C trailing blanks. If there is not attached terminal,
- C zero is returned.
- C--
- C 1989-Nov-08
- C-----------------------------------------------------------------------
- CTERM = 'Archimedes'
- LTERM = 10
- RETURN
- END
- C*GRTTER -- test whether device is user's terminal
- C+
- SUBROUTINE GRTTER(CDEV, QSAME)
- CHARACTER CDEV*(*)
- LOGICAL QSAME
- C
- C Return a logical flag indicating whether the supplied device
- C name is a name for the user's controlling terminal or not.
- C (Some PGPLOT programs wish to take special action if they are
- C plotting on the user's terminal.)
- C
- C Arguments:
- C CDEV : (input) the device name to be tested.
- C QSAME : (output) .TRUE. is CDEV contains a valid name for the
- C user's terminal; .FALSE. otherwise.
- C--
- C 18-Feb-1988
- C-----------------------------------------------------------------------
- CHARACTER CTERM*64
- INTEGER LTERM
- C
- CALL GRTRML(CTERM, LTERM)
- QSAME = (CDEV.EQ.CTERM(:LTERM))
- END
- C*GRUSER -- get user name
- C+
- SUBROUTINE GRUSER(CUSER, LUSER)
- CHARACTER CUSER*(*)
- INTEGER LUSER
- C
- C Return the name of the user running the program.
- C
- C Arguments:
- C CUSER : receives user name, truncated or extended with
- C blanks as necessary.
- C LUSER : receives the number of characters in VALUE, excluding
- C trailing blanks.
- C--
- C 1989-Mar-19 - [AFT]
- C-----------------------------------------------------------------------
- C
- CALL GRGENV('USER', CUSER, LUSER)
- RETURN
- END
- C*GRWARN -- issue warning message to user
- C+
- SUBROUTINE GRWARN (CTEXT)
- CHARACTER CTEXT*(*)
- C
- C Report a warning message on standard error, with prefix "%PGPLOT, ".
- C It is assumed that Fortran unit 0 is attached to stderr.
- C
- C Argument:
- C CTEXT (input): text of message to be printed (the string
- C may not be blank).
- C--
- C 18-Feb-1988
- C-----------------------------------------------------------------------
- INTEGER I
- C
- I = LNBLNK(CTEXT)
- IF(I.GT.0) WRITE (*,*) ' %PGPLOT, ',CTEXT(1:I)
- RETURN
- END
-