Subroutines

  1. Subroutines: Descriptions in program numerical order
  2. Subroutines: Descriptions in program subject order
  3. Subroutines: Descriptions in alphabetical order

7. Subroutines: descriptions in program numerical order

SummaryGeneral purpose routines HELP_SIMDEM ... provide help
IMAGES ... display gallery of images
GKS001 ... definition of line and symbol types
PALETT ... definition of colours
PCPLOT ... definition of fill styles
GKSVF3 ... definition of arrows/lines/boxes
NAGSUB ... NAG library substitute routines
simdem01Display messages PUTADV ... advice
PUTCAU ... caution
PUTFAT ... fatal
PUTMES ... multi-line text display
PUTWAR ... warning
PUTTXT ... text
simdem02Get double precision values GETR01 ... get 1 unrestricted value
GETR02 ... get 2 unrestricted values
GETR03 ... get 3 unrestricted values
GETRM1 ... get X where A =< x =< B (A and B must be initialised)
GETD01 ... get 1 unrestricted value (must be initialised)
GETD02 ... get 2 unrestricted values (must be initialised)
GETD03 ... get 3 unrestricted values (must be initialised)
GETDGE ... get X where X >= A (must be initialised)
GETDLE ... get X where X =< A (must be initialised)
GETDG2 ... get X =< Y (must be initialised)
GETDG3 ... get X =< Y =< Z (must be initialised)
GETDM1 ... get x where A =< X =< B (must be initialised)
simdem03Get integer values GETI01 ... get 1 integer i
GETIGT ... get 1 integer i > A
GETILT ... get 1 integer i < B
GETIM1 ... get 1 integer A =< i =< B
GETJ01 ... get 1 integer i (must be initialised)
GETJGE ... get 1 integer i >= A (must be initialised)
GETJLE ... get 1 integer i =< A (must be initialised)
GETJM1 ... get 1 integer A =< i =< B (must be initialised)
simdem04Get text strings GETSTR ... get a text string from the user (default supplied)
GETTXT ... get a text string from the user (default = ?)
simdem05Get a logical variable GETL01 ... get a logical variable
simdem06Select from a simple list box LISTBX ... select from a simple list box
simdem07Display sequential calculations LIST01 ... scrolling table with reverse communication
LIST02 ... scrolling table
SLEEP1 ... impose a delay
simdem08Display a simple table TABLE1 ... scrolling table with coloured lines
simdem09Plot 1 function GKS001 ... plot 1 function
simdem10Plot 4 functions GKS004 ... plot 4 functions
simdem11Editing double precision variables EDITD1 ... editing a double precision array
simdem12Editing integers EDITI1 ... editing an integer array
simdem13Editing text EDITTX ... editing a text array
simdem14Display data values VIEWIT ... matrix as a numerical table
simdem15Display progress of calculations REVPRO ... review progress
GETTMP ... get a temporary file name
DELEET ... delete a file
OPENER ... open a Simdem file
CLOSER ... close a Simdem file
WRITER ... write to a Simdem file
simdem16Display ASCII text files VIEWER ... view a file
simdem17Display text pages PATCH1 ... view text (comprehensive)
PATCH2 ... view text (simplified)
simdem18Select from a title page and menu TITLE1 ... select from a title page and menu
simdem19Select from a question and answer window ANSWER ... select from a question and answer window
simdem20Select from a tabbing list box TBOX01 ... select from a tabbing list box
simdem21Plot 4 (x,y) transforms GKST04 ... plot 4 (x,y) transforms
simdem22Plot surfaces and contours SURD2S ... plot surfaces and contours
simdem23Plot curves in space SPACE0 ... plot curves in space
simdem24Plot a vector field GKSVF1 ... plot a vector field
simdem25Plot error bars GKSEB4 ... plot error bars
simdem26Display or file a matrix DSPLAY ... display or file a matrix
simdem27Display a coloured table TABLE2 ... display a coloured table
simdem28Display a background window WINDOW ... display a background window
simdem29Get a text string LINEIN ... get a text string
simdem30Display title page and tutorial TITLES ... display a title with menu
TUTOR1 ... display a tutorial
simdem31Get n integers GETI0N ... get n integers
simdem32Get n double precision values GETR0N ... get n double precison values
FORM25 ... return a variable as CHARACTER (LEN = 25)
simdem33Get n strings GETS0N ... get n character strings
simdem34Get n logicals GETL0N ... get n logicals
simdem35Get n variables (any type) GET00N ... get n arbitrary values
simdem36Select from button boxes BBOX01 ... select from normal buttons
HBOX01 ... select from horizontal buttons
VBOX01 ... select from vertical buttons
simdem37Select from ganged radio/tick boxes RBOX01 ... select from ganged radio/tick boxes
simdem38Display interactive calculations TABLE4 ... display interactive calculations
simdem39Display Wait Calculations in progress WAITER ... display Wait ... Calculations in progress
simdem40Configure the Simfit DLLs CONFIG ... configure the Simfit DLLs
simdem41Get a vector from the user VEC1IN ... get a vector
TRIM80 ... trim a long filename
simdem42Get a matrix from the user MATTIN ... get a matrix
simdem43Get a matrix from the clipboard ATTRIB ... get file attributes
GETNOU ... get an unopened Simdem unit
simdem44Select from simfit file selection control OFILES ... select using the Simfit file-selection control
GETFIL ... select using the Windows file-selection control
FSERCH ... search for a file
INFOFL ... display status of a file
simdem45Print a text file FPRINT ... print a text file
simdem46Plot n data sets SMPLOT ... plot n data sets
DELTMP ... delete temporary files
simdem47Plot a pie chart PCPLOT ... plot a pie chart
simdem48Plot a bar chart BCPLOT ... plot a bar chart
simdem49Plot as boxes and whiskers BWPLOT ... plot as boxes and whiskers
simdem50Plot as bars/symbols plus error bars EBPLOT ... plot as bars/symbols plus error bars
simdem51Get DLL signatures SCCLIB ... get signatures for salflibc.dll
DLLCLR ... get signatures for w_clearwin.dll
DLLGRA ... get signatures for w_graphics.dll
DLLMEN ... get signatures for w_menus.dll
simdem52Get a colour from the palette PALETT ... get a colour from the palette
simdem53Plot a 2D scatter plus labels LBPLOT ... plot a 2D scatter plus labels
simdem54Plot sample cumulative plus best-fit cdf CDPLOT ... plot sample cumulative plus best-fit cdf
simdem55Plot sample histogram plus best-fit pdf PDPLOT ... plot sample histogram plus best-fit pdf
simdem56Plot a histogram with error bars HIST01 ... plot a histogram with error bars
simdem57Plot a dendrogram with threshold DGPLOT ... plot a dendrogram with threshold
simdem58Select from a scrolling check box CHKBOX ... select from 1-dimensional scrolling check boxes
RBOXES ... select from 2-dimensional scrolling check boxes
simdem59Select one or multiple files MFILES ... select one or multiple files
TRIM60 ... trim a long filename
simdem60Select from a comprehensive list box LSTBOX ... select from a comprehensive list box
simdem61Plot half-normal and normal scores HNPLOT ... plot half-normal and normal scores
simdem62Plot bivariate normal confidence ellipses ELIPS1 ... plot bivariate normal confidence ellipses
NAGSUB ... NAG library substitute routines
simdem63Plot rows and columns from a matrix MTPLOT ... plot rows and columns from a matrix
simdem64Plot parametric curve r = r(theta) RTPLOT ... plot a parametric curve r = r(theta)
simdem65Select files to view/open/copy/paste VUOPEN ... select a file to view/open/copy/paste
AUX256 ... full path to a Simdem auxiliary file
simdem66Matrices read/write procedures MAT2IN ... read a data matrix from a file
ISITMF ... check if a file is a Simfit matrix file
MATOUT ... write a matrix to a file
simdem67Matrices editing and transforming MATTRN ... matrix editing and transforming
simdem68Matrices defaults of arbitrary size MAT3IN ... comprehensive control to read-in data matrices
MAT4IN ... comprehensive control to use/edit data matrices
CHOP80 ... truncates titles to left-most 80 characters
simdem69Plot a vector field with labels GKSVF3 ... plot a vector field with labels
simdem70Plot SUMMARY of subroutines GKS012 ... plot up to 12 data sets
GKST12 ... plot up to 12 transformed data sets
GKSCB4 ... plot error bars (no advanced options)
GKSHB4 ... plot horizontal error bars
TSPLOT ... plot time series data
SBPLOT ... plot a stacked bar chart
XFONTS ... plot the Simfit font substitution maps
RESDEF ... restore Simfit plotting defaults
EDITPS ... edit PostScript files and make collages
DBPLOT ... plot with LHS and RHS axes (a double plot)
GSTYLE ... define/retrieve plot configuration parameters (all)
GRFLGL ... define/retrieve plot configuration parameters (advanced)
GKSLGL ... define/retrieve plot configuration parameters (simple)
SYMCFG ... define/retrieve plot symbols, lines, colours
LABCFG ... define/retrieve plot labels, fill styles, colours
DEFKEY ... define/retrieve character configuration keys
TSIZES ... define/retrieve font sizes
DEFLAB ... define/retrieve arrays of labels or character keys
NSTEPS ... define/retrieve groups of data points to be omitted
CLOCK1 ... returns current clock time in seconds
SPACE6 ... plot 3D space curves

Back to Subroutines or Menu


8. Subroutines: Descriptions in program subject order

SummaryGeneral purpose routines HELP_SIMDEM ... provide help
IMAGES ... display gallery of images
GKS001 ... definition of line and symbol types
PALETT ... definition of colours
PCPLOT ... definition of fill styles
GKSVF3 ... definition of arrows/lines/boxes
NAGSUB ... NAG library substitute routines
simdem01Display messages PUTADV ... advice
PUTCAU ... caution
PUTFAT ... fatal
PUTMES ... multi-line text display
PUTWAR ... warning
PUTTXT ... text
simdem07Display sequential calculations LIST01 ... scrolling table with reverse communication
LIST02 ... scrolling table
SLEEP1 ... impose a delay
simdem08Display a simple table TABLE1 ... scrolling table with coloured lines
simdem14Display data values VIEWIT ... matrix as a numerical table
simdem15Display progress of calculations REVPRO ... review progress
GETTMP ... get a temporary file name
DELEET ... delete a file
OPENER ... open a Simdem file
CLOSER ... close a Simdem file
WRITER ... write to a Simdem file
simdem16Display ASCII text files VIEWER ... view a file
simdem17Display text pages PATCH1 ... view text (comprehensive)
PATCH2 ... view text (simplified)
simdem26Display or file a matrix DSPLAY ... display or file a matrix
simdem27Display a coloured table TABLE2 ... display a coloured table
simdem28Display a background window WINDOW ... display a background window
simdem30Display title page and tutorial TITLES ... display a title with menu
TUTOR1 ... display a tutorial
simdem38Display interactive calculations TABLE4 ... display interactive calculations
simdem39Display Wait Calculations in progress WAITER ... display Wait ... Calculations in progress
simdem29Get a text string LINEIN ... get a text string
simdem31Get n integers GETI0N ... get n integers
simdem32Get n double precision values GETR0N ... get n double precison values
FORM25 ... return a variable as CHARACTER (LEN = 25)
simdem33Get n strings GETS0N ... get n character strings
simdem34Get n logicals GETL0N ... get n logicals
simdem35Get n variables (any type) GET00N ... get n arbitrary values
simdem02Get double precision values GETR01 ... get 1 unrestricted value
GETR02 ... get 2 unrestricted values
GETR03 ... get 3 unrestricted values
GETRM1 ... get X where A =< x =< B (A and B must be initialised)
GETD01 ... get 1 unrestricted value (must be initialised)
GETD02 ... get 2 unrestricted values (must be initialised)
GETD03 ... get 3 unrestricted values (must be initialised)
GETDGE ... get X where X >= A (must be initialised)
GETDLE ... get X where X =< A (must be initialised)
GETDG2 ... get X =< Y (must be initialised)
GETDG3 ... get X =< Y =< Z (must be initialised)
GETDM1 ... get x where A =< X =< B (must be initialised)
simdem03Get integer values GETI01 ... get 1 integer i
GETIGT ... get 1 integer i > A
GETILT ... get 1 integer i < B
GETIM1 ... get 1 integer A =< i =< B
GETJ01 ... get 1 integer i (must be initialised)
GETJGE ... get 1 integer i >= A (must be initialised)
GETJLE ... get 1 integer i =< A (must be initialised)
GETJM1 ... get 1 integer A =< i =< B (must be initialised)
simdem04Get text strings GETSTR ... get a text string from the user (default supplied)
GETTXT ... get a text string from the user (default = ?)
simdem05Get a logical variable GETL01 ... get a logical variable
simdem41Get a vector from the user VEC1IN ... get a vector
TRIM80 ... trim a long filename
simdem42Get a matrix from the user MATTIN ... get a matrix
simdem43Get a matrix from the clipboard ATTRIB ... get file attributes
GETNOU ... get an unopened Simdem unit
simdem51Get DLL signatures SCCLIB ... get signatures for salflibc.dll
DLLCLR ... get signatures for w_clearwin.dll
DLLGRA ... get signatures for w_graphics.dll
DLLMEN ... get signatures for w_menus.dll
simdem52Get a colour from the palette PALETT ... get a colour from the palette
simdem06Select from a simple list box LISTBX ... select from a simple list box
simdem18Select from a title page and menu TITLE1 ... select from a title page and menu
simdem19Select from a question and answer window ANSWER ... select from a question and answer window
simdem20Select from a tabbing list box TBOX01 ... select from a tabbing list box
simdem36Select from button boxes BBOX01 ... select from normal buttons
HBOX01 ... select from horizontal buttons
VBOX01 ... select from vertical buttons
simdem37Select from ganged radio/tick boxes RBOX01 ... select from ganged radio/tick boxes
simdem58Select from a scrolling check box CHKBOX ... select from 1-dimensional scrolling check boxes
RBOXES ... select from 2-dimensional scrolling check boxes
simdem59Select one or multiple files MFILES ... select one or multiple files
TRIM60 ... trim a long filename
simdem60Select from a comprehensive list box LSTBOX ... select from a comprehensive list box
simdem65Select files to view/open/copy/paste VUOPEN ... select a file to view/open/copy/paste
AUX256 ... full path to a Simdem auxiliary file
simdem44Select from simfit file selection control OFILES ... select using the Simfit file-selection control
GETFIL ... select using the Windows file-selection control
FSERCH ... search for a file
INFOFL ... display status of a file
simdem11Editing double precision variables EDITD1 ... editing a double precision array
simdem12Editing integers EDITI1 ... editing an integer array
simdem13Editing text EDITTX ... editing a text array
simdem09Plot 1 function GKS001 ... plot 1 function
simdem10Plot 4 functions GKS004 ... plot 4 functions
simdem21Plot 4 (x,y) transforms GKST04 ... plot 4 (x,y) transforms
simdem22Plot surfaces and contours SURD2S ... plot surfaces and contours
simdem23Plot curves in space SPACE0 ... plot curves in space
simdem24Plot a vector field GKSVF1 ... plot a vector field
simdem25Plot error bars GKSEB4 ... plot error bars
simdem46Plot n data sets SMPLOT ... plot n data sets
DELTMP ... delete temporary files
simdem47Plot a pie chart PCPLOT ... plot a pie chart
simdem48Plot a bar chart BCPLOT ... plot a bar chart
simdem49Plot as boxes and whiskers BWPLOT ... plot as boxes and whiskers
simdem50Plot as bars/symbols plus error bars EBPLOT ... plot as bars/symbols plus error bars
simdem53Plot a 2D scatter plus labels LBPLOT ... plot a 2D scatter plus labels
simdem54Plot sample cumulative plus best-fit cdf CDPLOT ... plot sample cumulative plus best-fit cdf
simdem55Plot sample histogram plus best-fit pdf PDPLOT ... plot sample histogram plus best-fit pdf
simdem56Plot a histogram with error bars HIST01 ... plot a histogram with error bars
simdem57Plot a dendrogram with threshold DGPLOT ... plot a dendrogram with threshold
simdem61Plot half-normal and normal scores HNPLOT ... plot half-normal and normal scores
simdem62Plot bivariate normal confidence ellipses ELIPS1 ... plot bivariate normal confidence ellipses
NAGSUB ... NAG library substitute routines
simdem63Plot rows and columns from a matrix MTPLOT ... plot rows and columns from a matrix
simdem64Plot parametric curve r = r(theta) RTPLOT ... plot a parametric curve r = r(theta)
simdem69Plot a vector field with labels GKSVF3 ... plot a vector field with labels
simdem70Plot SUMMARY of subroutines GKS012 ... plot up to 12 data sets
GKST12 ... plot up to 12 transformed data sets
GKSCB4 ... plot error bars (no advanced options)
GKSHB4 ... plot horizontal error bars
TSPLOT ... plot time series data
SBPLOT ... plot a stacked bar chart
XFONTS ... plot the Simfit font substitution maps
RESDEF ... restore Simfit plotting defaults
EDITPS ... edit PostScript files and make collages
DBPLOT ... plot with LHS and RHS axes (a double plot)
GSTYLE ... define/retrieve plot configuration parameters (all)
GRFLGL ... define/retrieve plot configuration parameters (advanced)
GKSLGL ... define/retrieve plot configuration parameters (simple)
SYMCFG ... define/retrieve plot symbols, lines, colours
LABCFG ... define/retrieve plot labels, fill styles, colours
DEFKEY ... define/retrieve character configuration keys
TSIZES ... define/retrieve font sizes
DEFLAB ... define/retrieve arrays of labels or character keys
NSTEPS ... define/retrieve groups of data points to be omitted
CLOCK1 ... returns current clock time in seconds
SPACE6 ... plot 3D space curves
simdem40Configure the Simfit DLLs CONFIG ... configure the Simfit DLLs
simdem45Print a text file FPRINT ... print a text file
simdem66Matrices read/write procedures MAT2IN ... read a data matrix from a file
ISITMF ... check if a file is a Simfit matrix file
MATOUT ... write a matrix to a file
simdem67Matrices editing and transforming MATTRN ... matrix editing and transforming
simdem68Matrices defaults of arbitrary size MAT3IN ... comprehensive control to read-in data matrices
MAT4IN ... comprehensive control to use/edit data matrices
CHOP80 ... truncates titles to left-most 80 characters

Back to Subroutines or Menu


9. Subroutines: Descriptions in alphabetical order

Help
HELP_SIMDEM ... provide help
IMAGES ... display gallery of images
PALETT ... definition of colours
GKS001 ... definition of line and symbol types
GKSVF3 ... definition of arrows/lines/boxes
PCPLOT ... definition of fill styles
NAGSUB ... NAG library substitute routines
Subroutines
ANSWER ... select from a question and answer window
ATTRIB ... get file attributes
AUX256 ... full path to a Simdem auxiliary file
BBOX01 ... select from normal buttons
BCPLOT ... plot a bar chart
BWPLOT ... plot as boxes and whiskers
CDPLOT ... plot sample cumulative plus best-fit cdf
CHKBOX ... select from 1-dimensional scrolling check boxes
CHOP80 ... truncates titles to left-most 80 characters
CLOCK1 ... return current clock time in seconds
CLOSER ... close a Simdem file
CONFIG ... configure the Simfit DLLs
DBPLOT ... plot with LHS and RHS axes (a double plot)
DEFKEY ... define/retrieve character configuration keys
DEFLAB ... define/retrieve arrays of labels or character keys
DELEET ... delete a file
DELTMP ... delete temporary files
DGPLOT ... plot a dendrogram with threshold
DLLCLR ... get signatures for w_clearwin.dll
DLLGRA ... get signatures for w_graphics.dll
DLLMEN ... get signatures for w_menus.dll
DSPLAY ... display or file a matrix
EBPLOT ... plot as bars/symbols plus error bars
EDITD1 ... editing a double precision array
EDITI1 ... editing an integer array
EDITPS ... edit PostScript files and make collages
EDITTX ... editing a text array
ELIPS1 ... plot bivariate normal confidence ellipses
FORM25 ... return a variable as CHARACTER (LEN = 25)
FPRINT ... print a text file
FSERCH ... search for a file
GET00N ... get n arbitrary values
GETD01 ... get 1 unrestricted value (must be initialised)
GETD02 ... get 2 unrestricted values (must be initialised)
GETD03 ... get 3 unrestricted values (must be initialised)
GETDGE ... get X where X >= A (must be initialised)
GETDLE ... get X where X =< A (must be initialised)
GETDG2 ... get X =< Y (must be initialised)
GETDG3 ... get X =< Y =< Z (must be initialised)
GETDM1 ... get x where A =< X =< B (must be initialised)
GETFIL ... select using the Windows file-selection control
GETI01 ... get 1 integer i
GETI0N ... get n integers
GETIGT ... get 1 integer i > A
GETILT ... get 1 integer i < B
GETIM1 ... get 1 integer A =< i =< B
GETJ01 ... get 1 integer i (must be initialised)
GETJGE ... get 1 integer i >= A (must be initialised)
GETJLE ... get 1 integer i =< A (must be initialised)
GETJM1 ... get 1 integer A =< i =< B (must be initialised)
GETL01 ... get a logical variable
GETL0N ... get n logicals
GETNOU ... get an unopened Simdem unit
GETR01 ... get 1 unrestricted value
GETR02 ... get 2 unrestricted values
GETR03 ... get 3 unrestricted values
GETR0N ... get n double precison values
GETRM1 ... get X where A =< x =< B (A and B must be initialised)
GETS0N ... get n character strings
GETSTR ... get a text string from the user (default supplied)
GETTMP ... get a temporary file name
GETTXT ... get a text string from the user (default = ?)
GKS001 ... plot 1 function
GKS004 ... plot 4 functions
GKS012 ... plot up to 12 data sets
GKSEB4 ... plot error bars
GKSCB4 ... plot error bars (no advanced options)
GKSHB4 ... plot horizontal error bars
GKSLGL ... define/retrieve plot configuration parameters (simple)
GKST04 ... plot 4 (x,y) transforms
GKST12 ... plot up to 12 transformed data sets
GKSVF1 ... plot a vector field
GKSVF3 ... plot a vector field with labels
GRFLGL ... define/retrieve plot configuration parameters (advanced)
GSTYLE ... define/retrieve plot configuration parameters (all)
HBOX01 ... select from horizontal buttons
HIST01 ... plot a histogram with error bars
HNPLOT ... plot half-normal and normal scores
INFOFL ... display status of a file
ISITMF ... check if a file is a Simfit matrix file
LABCFG ... define/retrieve plot labels, fill styles, colours
LBPLOT ... plot a 2D scatter plus labels
LINEIN ... get a text string
LISTBX ... select from a simple list box
LIST01 ... scrolling table with reverse communication
LIST02 ... scrolling table
LSTBOX ... select from a comprehensive list box
MAT2IN ... read a data matrix from a file
MAT3IN ... comprehensive control to read-in data matrices
MAT4IN ... comprehensive control to use/edit data matrices
MATOUT ... write a matrix to a file
MATTIN ... get a matrix
MATTRN ... matrix editing and transforming
MFILES ... select one or multiple files
MTPLOT ... plot rows and columns from a matrix
NAGSUB ... NAG library substitute routines
NSTEPS ... define/retrieve groups of data points to be omitted
OFILES ... select using the Simfit file-selection control
OPENER ... open a Simdem file
PATCH1 ... view text (comprehensive)
PATCH2 ... view text (simplified)
PALETT ... get a colour from the palette
PCPLOT ... plot a pie chart
PDPLOT ... plot sample histogram plus best-fit pdf
PUTADV ... advice
PUTCAU ... caution
PUTFAT ... fatal
PUTMES ... multi-line text display
PUTWAR ... warning
PUTTXT ... text
RBOX01 ... select from ganged radio/tick boxes
RBOXES ... select from 2-dimensional scrolling check boxes
RESDEF ... restore Simfit plotting defaults
REVPRO ... review progress
RTPLOT ... plot a parametric curve r = r(theta)
SBPLOT ... plot a stacked bar chart
SCCLIB ... get signatures for salflibc.dll
SLEEP1 ... impose a delay
SMPLOT ... plot n data sets
SPACE0 ... plot curves in space (simple)
SPACE6 ... plot curves in space (advanced)
SURD2S ... plot surfaces and contours
SYMCFG ... define/retrieve plot symbols, lines, colours
TABLE1 ... scrolling table with coloured lines
TABLE2 ... display a coloured table
TABLE4 ... display interactive calculations
TBOX01 ... select from a tabbing list box
TITLE1 ... select from a title page and menu
TITLES ... display a title with menu
TRIM60 ... trim a long filename
TRIM80 ... trim a long filename
TSIZES ... define/retrieve font sizes
TSPLOT ... plot time series data
TUTOR1 ... display a tutorial
VBOX01 ... select from vertical buttons
VEC1IN ... get a vector
VIEWIT ... matrix as a numerical table
VIEWER ... view a file
VUOPEN ... select a file to view/open/copy/paste
WAITER ... display Wait ... Calculations in progress
WINDOW ... display a background window
WRITER ... write to a Simdem file
XFONTS ... plot the Simfit font substitution maps

Back to Subroutines or Menu


Summary

SUBROUTINES: HELP_SIMDEM, IMAGES

The Simdem library contains a set of routines that users can call from anywhere in a Fortran program. Because of this restriction, most of the windows created by Simdem controls are in the form of dialogue windows that must be closed before program operation can continue. There are no nested windows or child windows and very few places where users can minimise down to the taskbar. This is intentional, and is to allow users the freedom to call routines in any sequence. There are no undo options to navigate backwards.

The routines are all in standard Fortran, and none of the arguments require any knowledge about the Windows API. All that is taken care of behind the scenes, which spares users the necessity of having to learn anything about the intricacies of traditional Windows programming.

It is important to stress that the library uses a very strict form for subroutine arguments; they are in order of integer, double precision, character, then logical, and within each type they are in alphabetical order. Also, the declarations start each sub-argument list on a new line for clarity.

The convention to be used is to give the subroutine or function with calling sequence followed by a brief description of the arguments and the associated intents. Simdem users should note that this document will only describe the routines that are actually demonstrated by program simdem.exe, and programs simdem01 to simdem70, and there are many more routines that users can call if they care to scan the Simdem source codes.

As introductory examples consider the Simdem help and image display subroutines.

      SUBROUTINE HELP_SIMDEM (REQUEST)
      CHARACTER (LEN = *), INTENT (IN) :: REQUEST
 
REQUEST: Character string dictating which subsection of the help
         program to run. For instance REQUEST = 'simdem' gives access
         to the full help program, while other arguments display the
         corresponding sections, e.g. 'simdem01' to 'simdem70' show
         the source codes for program simdem01 through to simdem70.

      SUBROUTINE IMAGES (ISEND)
      INTEGER, INTENT (IN): ISEND
 
ISEND: Dictates which of the nine or so pages of the gallery to display, while
       ISEND = 0 displays the whole gallery of plotting styles.

Back to Subroutines or Menu


Display messages

Note that the simple messaging routines PUTADV, PUTCAU, PUTFAT, and PUTWAR can on rare occasions cause problems if users try to construct multi-window displays, particularly involving graphics. In such circumstances it is advisable to manage without the distinctive colour schemes used for these messages, and simply call the Windows message box function by adding an X_ prefix, as in X_PUTADV, X_PUTCAU, X_PUTFAT, AND X_PUTWAR.

      SUBROUTINE PUTADV (MESSAGE)
      CHARACTER (LEN = *), INTENT (IN) :: MESSAGE
 
MESSAGE: Character string giving general advice on a grey background.

      SUBROUTINE PUTCAU (MESSAGE)
      CHARACTER (LEN = *), INTENT (IN) :: MESSAGE
 
MESSAGE: Character string giving cautionary advice on a blue background.

      SUBROUTINE PUTFAT (MESSAGE)
      CHARACTER (LEN = *), INTENT (IN) :: MESSAGE
 
MESSAGE: Character string giving a fatal error message on a black background.

      SUBROUTINE PUTMES (N, &
                         TEXT)
      INTEGER,             INTENT (IN) :: N
      CHARACTER (LEN = *), INTENT (IN) :: TEXT(N)
 
   N: Number of lines of text.
TEXT: Character array with message.
      Note that if N is greater than 1, the first line will be in bold text so,
      for longer messages, it is best to make the second line a blank line.

      SUBROUTINE PUTWAR (MESSAGE)
      CHARACTER (LEN = *), INTENT (IN) :: MESSAGE
 
MESSAGE: Character string giving a non-fatal warning message on a red background.

      SUBROUTINE PUTTXT (MESSAGE)
      CHARACTER (LEN = *), INTENT (IN) :: MESSAGE
 
MESSAGE: Character string displaying an arbitrary line of text.

Back to Subroutines or Menu


Display Sequential calculations

SUBROUTINES: LIST01, LIST02, SLEEP1

It should be noted that the critical INPUT arguments for LINE are not case sensitive and there is another routine, LIST02, that does not involve reverse communication, and where LINE is an INPUT (IN) argument.

LIST01 should be used where the reverse communication is valuable, as in monitoring iterative procedures like fitting differential equations, otherwise LIST02 should be used.

      SUBROUTINE LIST01 (LINE)
      CHARACTER (LEN = *), INTENT (INOUT) :: LINE
 
LINE: If LINE = 'OPEN' on entry then open a window for output.
      If LINE = 'CLOSE' on entry then close down the window.
      If LINE = 'STATUS' on entry LINE is returned as 'OPEN' or 'CLOSE'.
      If LINE = 'NOPEN' on entry LINE is returned as 0 if not connected
                or 1 if connected for writing.
      Otherwise LINE is used as the next line in a scrolling table,
      unless the user stops the table before output is completed
      when LINE is returned as 'CLOSE'.

      SUBROUTINE SLEEP1 (DELAY)
      INTEGER, INTENT (IN) :: DELAY
 
DELAY: Number of seconds to stop operation and free-up the CPU

Back to Subroutines or Menu


Display a simple table

It should be noted that the critical INPUT arguments 'OPEN' and 'CLOSE' are not case sensitive.

      SUBROUTINE TABLE1 (ICOLOR, &
                         LINE)
      INTEGER,             INTENT (IN) :: ICOLOR
      CHARACTER (LEN = *), INTENT (IN) :: LINE
 
ICOLOR: When called the first time ICOLOR sets the background colour.
        When called subsequently ICOLOR sets the colour of the line.
        ICOLOR = 15 ... white
        ICOLOR = 0  ... black
        ICOLOR = 1  ... blue
        ICOLOR = 4  ... red
  LINE: if LINE = 'OPEN' on entry then open a window for output.
        if LINE = 'CLOSE' on entry then close down the window.
        Otherwise LINE is used as the next line in a scrolling table.

Back to Subroutines or Menu


Display data values

      SUBROUTINE VIEWIT (NCOLS, NRMAX, NROWS, NTYPE, &
                         A, &
                         TITLE)
      INTEGER,             INTENT (IN) :: NCOLS, NRMAX, NROWS, NTYPE
      DOUBLE PRECISION,    INTENT (IN) :: A(NRMAX,NCOLS)
      CHARACTER (LEN = *), INTENT (IN) :: TITLE
 
NCOLS: Number of columns.
NRMAX: Leading dimension of array.
NROWS: Number of rows.
NTYPE: NTYPE = 1 ... I format (integers, using NINT)
       NTYPE = 2 ... F format (floats)
       NTYPE = 3 ... E format (large/small)
    A: Data matrix (no missing values)
TITLE: Title.

Back to Subroutines or Menu


Display progress of calculations

SUBROUTINES: REVPRO, GETTMP, DELEET, OPENER, CLOSER, WRITER

OPENER, CLOSER, and WRITER avoid cross-compiler issues by ensuring that the file and unit are defined within w_menus.dll even if the executable has not been compiled by the compiler used to compile w_menus.dll. Users of the NAG NAGfor compiler and Silverfrost FTN95 do not need these routines.

      SUBROUTINE REVPRO (NOUT)
      INTEGER, INTENT (IN) :: NOUT
 
NOUT: Unit connected for writing, appending, rewinding, etc. to
      review data written to NOUT, e.g. to record data analyis,
      curve fitting, etc.
      NOUT must be opened before the first call to REVPRO and
      closed after the last call to REVPRO.
      OPENER and CLOSER must be used if necessary (see below).

      SUBROUTINE GETTMP (IFAIL, &
                         FNAME)
      INTEGER,            INTENT (OUT) :: IFAIL
      CHARACTER (LEN = *) INTENT (OUT) :: FNAME
 
IFAIL: Returned as follows:  0 if successful
                            -1 LEN(FNAME) < 12
                            -2 could not locate %TEMP% folder
                            -3 LEN(FNAME) too short to create temporary  
                               filename in %TEMP% folder
                            -4 failed to find an unused filename after 
                               1000 attempts with random filenames 
FNAME: If LEN(FNAME) < 12 returned undefined with an error message
       If LEN(FNAME) < LEN(%TEMP%) + 13 returned with f$123456.tmp as
                                        a local file name
       If LEN(FNAME) >= LEN(%TEMP%) + 13 returned with f$123456.tmp as
                                         a file name in the %TEMP% folder
       FNAME is the name of a file that does not exist, but the file
       is not opened.
       It is recommended to have LEN(FNAME) >= 260, say 1024.

      SUBROUTINE DELEET (FNAME, &
                         ASKIF, THERE)
      CHARACTER (LEN = *), INTENT (IN)  :: FNAME
      LOGICAL,             INTENT (IN)  :: ASKIF
      LOGICAL,             INTENT (OUT) :: THERE
 
FNAME: Arbitrary file name.
ASKIF: if .TRUE. inquire if the file should be deleted.
       if .FALSE. delete without prompting.
THERE: returned as .TRUE. if the file still exists, otherwise as .FALSE.

      SUBROUTINE OPENER (IOS, NOUT, &
                         FNAME)
      INTEGER,             INTENT (OUT) :: IOS
      INTEGER,             INTENT (IN)  :: NOUT
      CHARACTER (LEN = *), INTENT (IN)  :: FNAME
 
  IOS: IOSTAT value from file openening in w_menus.dll.
 NOUT: Unit for connecting in w_menus.dll.
FNAME: Arbitrary file name.

      SUBROUTINE CLOSER (NOUT)
      INTEGER, INTENT (IN) :: NOUT
 
 NOUT: Unit for closing in w_menus.dll.

      SUBROUTINE WRITER (IOS, NLINES, NOUT, &
                         LINES)
      INTEGER,             INTENT (OUT) :: IOS
      INTEGER,             INTENT (IN)  :: NLINES, NOUT
      CHARACTER (LEN = *), INTENT (IN)  :: LINES(NLINES)
 
   IOS: IOSTAT value from writing to NOUT.
NLINES: Number of lines to be written to NOUT.
  NOUT: Unit for writing opened by OPENER.
 LINES: Text array for writing.

Back to Subroutines or Menu


Display ASCII text files

      SUBROUTINE VIEWER (ISEND &
                         FNAME, PATH, PATTERN)
      INTEGER,             INTENT (IN) :: ISEND
      CHARACTER (LEN = *), INTENT (IN) :: FNAME, PATH, PATTERN
 
  ISEND: as follows:
         ISEND = 1: view just the named file (if located) then return.
         ISEND = 2: view wild card pattern repeatedly until user quits.
         Otherwise return with no action.
  FNAME: as follows:
         ISEND = 1: FNAME must be the full path/file-name.
         ISEND = 2: not referenced.
         FNAME would usually be the name of a text file but, if Simdem
         is configured correctly, it could be a .pdf, .eps, or .ps file.
   PATH: as follows:
         ISEND = 1: not referenced.
         ISEND = 2: path to be searched.
PATTERN: as follows:
         ISEND = 1: not referenced.
         ISEND = 2: wild card pattern for search, e.g. "*.txt".

Back to Subroutines or Menu


Display text pages

SUBROUTINES: PATCH1, PATCH2

Note that PATCH2 is a cut-down version of PATCH1 with default arguments.

      SUBROUTINE PATCH1 (ICOLOR, IX, IY, LSHADE, NUMBLD, NUMTXT, &
                         TEXT, &
                         FIXED)
      INTEGER,             INTENT (IN) :: NUMTXT
      INTEGER,             INTENT (IN) :: ICOLOR, IX, IY, LSHADE, NUMBLD(NUMTXT)
      CHARACTER (LEN = *), INTENT (IN) :: TEXT(NUMTXT)
      LOGICAL,             INTENT (IN) :: FIXED
 
ICOLOR: Background colour.
        ICOLOR = 1: blue
        ICOLOR = 4: red
        ICOLOR = 9: white
        Otherwise grey
IX, IY: Position down from top left hand in average characters.
        May be disabled in some versions and is always disabled
        when IX or IY is less than or equal to zero.
LSHADE: May be disabled in some versions.
        LSHADE = 0: no shading
        LSHADE = 1: shading
NUMBLD: Determines the font type and colour.
        NUMBLD(i) = 1 or 2: Normal
        NUMBLD(i) = 3 or 4: Italic
        NUMBLD(i) = 4 or 5: Bold
        NUMBLD(i) = 6 or 7: Bold Italic
        Odd numbers : normal
        Even numbers: highlighted
NUMTXT: Dimension.
  TEXT: Text array.
        Note that a grave accent can be used for tabbing.
 FIXED: FIXED = .TRUE.  Courier New
        FIXED = .FALSE. Arial or Tahoma

      SUBROUTINE PATCH2 (NUMBLD, NUMTXT, &
                         TEXT)
      INTEGER,             INTENT (IN) :: NUMTXT
      INTEGER,             INTENT (IN) :: NUMBLD(NUMTXT)
      CHARACTER (LEN = *), INTENT (IN) :: TEXT(NUMTXT)
 
NUMBLD: Determines the font type and colour.
        NUMBLD(i) = 1 or 2: Normal
        NUMBLD(i) = 3 or 4: Italic
        NUMBLD(i) = 4 or 5: Bold
        NUMBLD(i) = 6 or 7: Bold Italic
        Odd numbers : normal
        Even numbers: highlighted
NUMTXT: Dimension.
  TEXT: Text array.
        Note that a grave accent can be used for tabbing.

Back to Subroutines or Menu


Display or file a matrix

This subroutine is intended to be used as part of a data analysis package where it may be required to write the matrix A to a pre-connected unit. If the matrix A is very large a starting row/column is requested. If FILEIT = .TRUE. then the matrix will be written to a pre-connected UNIT = NOUT, but only if it is not too large, as determined by internal parameters NCTOP and NRTOP.

      SUBROUTINE DSPLAY (NCMAX, NCOL, NOUT, NRMAX, NROW, NTYPE, &
                         A, &
                         TITLE, &
                         FILEIT)
      INTEGER,             INTENT (IN) :: NCMAX, NCOL, NF, NRMAX, NROW, &
                                          NTYPE
      DOUBLE PRECISION,    INTENT (IN) :: A(NRMAX,NCMAX)
      CHARACTER (LEN = *), INTENT (IN) :: TITLE
      LOGICAL,             INTENT (IN) :: FILEIT
 
 NCMAX: Maximum column dimension.
  NCOL: Column dimension.
  NOUT: If FILEIT = .FALSE. NOUT is not referenced.
        If FILEIT = .TRUE. NOUT must be a pre-connected unit.
 NRMAX: Leading dimension of matrix A.
  NROW: Row dimension.
 NTYPE: Data type.
        NTYPE = 1: Integers               ... I format
        NTYPE = 2: Real of order unity    ... F format
        NTYPE = 3: Floating point numbers ... E format
     A: Data matrix.
 TITLE: Title.
FILEIT: If FILEIT = .TRUE. A will be written to unit NOUT.
        If FILEIT = .FALSE. NOUT will not be referenced.

Back to Subroutines or Menu


Display a coloured table

The only difference between this and TABLE1 is that the colour of any individual letters can be set using the array ICOLOR. This makes TABLE2 slower and more complicated to use, but it can be very useful to set the colour of individual letters.

      SUBROUTINE TABLE2 (ICOLOR, &
                         LINE)
      INTEGER,             INTENT (IN) :: ICOLOR(*)
      CHARACTER (LEN = *), INTENT (IN) :: LINE
 
ICOLOR: VGA type colour for individual characters in LINE.
        ICOLOR(i) =  0 black
        ICOLOR(i) =  1 blue
        ICOLOR(i) =  4 red
        ICOLOR(i) = 14 yellow
        ICOLOR(i) = 15 white
  LINE: Case insensitive string as follows
        LINE = 'OPEN' then open a window
               ICOLOR(1) sets the background colour
        LINE = 'CLOSE' close the window
        Otherwise LINE is displayed in the window.

Back to Subroutines or Menu


Display a background window

This routine creates a background window over which other Simdem controls can be displayed. Some versions allow several windows to be opened but this is not recommended and may be disabled.

      SUBROUTINE WINDOW (ISEND, &
                         TITLE, &
                         ACTION)
      INTEGER,             INTENT (IN) :: ISEND
      CHARACTER (LEN = *), INTENT (IN) :: TITLE
      LOGICAL,             INTENT (IN) :: ACTION
 
 ISEND: Window number (must be set to 1 in this version).
 TITLE: Title of window.
ACTION: Controls operation required.
        ACTION = .TRUE. open a window
        ACTION = .FALSE. close the window

There are two further issues concerning this routine.

  1. Inside the Simfit package TITLE has a special meaning.
    If TITLE = 'Simfit program'//PNAME then details are written to f$simfit.tmp indicating the special actions required for program PNAME.
  2. Background windows can be switched off using the speedup options.
    So, if suppress background windows is selected on w_simfit.cfg, this subroutine will be disabled.

Back to Subroutines or Menu


Display a title page and tutorial

SUBROUTINES: TITLES, TUTOR1

TITLES is similar to PATCH1 for colours and fonts.

      SUBROUTINE TITLES (ICOLOR, NUMBLD, NUMDEC, NUMHDR, NUMOPT, &
                         NUMPOS, &
                         HEADER, OPTION)
      INTEGER,             INTENT (IN)    :: ICOLOR, NUMHDR, NUMOPT
      INTEGER,             INTENT (IN)    :: NUMBLD(NUMHDR), &
                                             NUMPOS(NUMOPT)
      INTEGER,             INTENT (INOUT) :: NUMDEC
      CHARACTER (LEN = *), INTENT (IN)    :: HEADER(NUMHDR), &
                                             OPTION(NUMOPT)
 
ICOLOR: Colour.
NUMBLD: Font type.
NUMDEC: Default menu choice on entry then returns the choice.
NUMHDR: Dimension of header.
NUMOPT: Number of options.
NUMPOS: Hot key positions for menu.
HEADER: Text before menu.
OPTION: The menu.

TUTOR1 is similar to PATCH1, TUTORS and TITLES for colours and fonts, except that NEXT and UPDOWN control the allowed movement forwards and backwards through the tutorial pages.
Note about parameters NEXT and UPDOWN.
Actually only one logical control variable is needed but both are kept to remain consistent with subroutine TUTORS and to allow for future developments. The scheme in this version is as follows
If both UPOWN and NEXT are .TRUE. the stores are filled up.
If either are .FALSE. the stores are displayed.

      SUBROUTINE TUTOR1 (ICOLOR, NUMBLD, NUMHDR, &
                         HEADER, FRAME, &
                         NEXT, UPDOWN)
      INTEGER,             INTENT (IN) :: ICOLOR, NUMHDR
      INTEGER,             INTENT (IN) :: NUMBLD(NUMHDR)
      CHARACTER (LEN = *), INTENT (IN) :: HEADER(NUMHDR)
      LOGICAL,             INTENT (IN) :: FRAME, NEXT, UPDOWN
 
ICOLOR: Colour.
NUMBLD: Font type.
NUMHDR: Header dimensions.
HEADER: Header.
 FRAME: If .TRUE., uses Courier New, otherwise Sans Serif.
  NEXT: If .TRUE. move to next item (see below)
UPDOWN: If .TRUE. allow up/down scrolling (see below)
        The effect of NEXT and UPDOWN depends on the version. Usually
        NEXT = UPDOWN = .TRUE. causes the buffer to fill and either
        of them .FALSE. causes display. It is probably best to keep
        UPDOWN fixed and control the tutorial using NEXT.

Back to Subroutines or Menu


Display interactive calculations

TABLE4 opens a window to display the results of calculations using Simfit scalar functions for input together with user-defined code, as demonstrated in simdem38.
The idea is to specify a function that can be used interactively and the results of the calculation can be displayed in real time.
The variables N and X can be simple values for editing or they can be limits required for the editing process, depending on the active subroutine being called.

      SUBROUTINE TABLE4 (ICOLOR, N, &
                         X, &
                         STRNG_OLD)
      INTEGER,             INTENT (IN)    :: ICOLOR
      INTEGER,             INTENT (INOUT) :: N(*)
      DOUBLE PRECISION,    INTENT (INOUT) :: X(*)
      CHARACTER (LEN = *), INTENT (IN)    :: STRNG
 
ICOLOR: Colour (not used in this version).
     N: Defaults then results ... integers.
     X: Defaults then results ... double precisions.
 STRNG: Message/control string.
 
Use N and X for input/output functions as follows:
GETI01: N(1) = IMID                                ! get one arbitrary integer
GETIL1: N(1) = IBOT, N(2) = IMID, N(3) = ITOP      ! get one limited integer
GETIM1: N(1) = IBOT, N(2) = IMID, N(3) = ITOP      ! get one integer in a range
GETRG3: X(1) = X, X(2) = Y, X(3) = Z, Z >= Y >= X  ! get three values x =< y =< z
GETRL1: X(1) = XBOT, X(2) = XMID, X(3) = XTOP      ! get one limited value
GETRM1: X(1) = XBOT, X(2) = XMID, X(3) = XTOP      ! get one value in a range
GETR01: X(1) = X                                   ! get one arbitrary value
 
Open/Close using
   STRNG = 'OPEN': start table, N and X are not referenced
   STRNG = 'CLOSE: close table, N and X are not referenced
   STRNG = 'CLOSE (NO PROMPT)': close table with no prompt
   STRNG = '****': output STRING
 
Defining the function
   This version must be called twice in succession to use
   one of the input/output functions. The first time READY
   is set .TRUE. and the function is identified. The second
   time the function is called.
   1) STRNG = SRNAME
   2) STRNG = argument to primitive
 
SRNAME = name of an allowed subroutine sets up that subroutine call
         so the next line is the declaration for the call when N and X
         are then used by the subroutine called.

Back to Subroutines or Menu


Display Wait ... Calculations in progress

Inform users when a slow process is taking place.

      SUBROUTINE WAITER (SHOW)
      LOGICAL, INTENT (IN) :: SHOW
 
SHOW: SHOW = .TRUE. then display the waiting message.
      SHOW = .FALSE. then switch the message off.
 

Back to Subroutines or Menu


Get a text string

Show a window with explanatory text and an edit box to receive then edit a text string.

      SUBROUTINE LINEIN (ICOLOR, IX, IY, NCHAR, NUMBLD, NUMTXT, &
                         LINE, TEXT, &
                         FIXED)
      INTEGER,             INTENT (IN)    :: ICOLOR, IX, IY, NCHAR, &
                                             NUMTXT
      INTEGER,             INTENT (IN)    :: NUMBLD(NUMTXT)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(NUMTXT)
      CHARACTER (LEN = *), INTENT (INOUT) :: LINE
      LOGICAL,             INTENT (IN)    :: FIXED
 
ICOLOR: Value     Background   Text     Highlight-text
        9 or 15   white        black    red
        otherwise grey         black    blue
IX, IY: Window position from top left
        This may be disabled and will be if IX and IY =< 0
 NCHAR: Width (in characters) of the edit box to hold LINE
NUMBLD: Value     Font
        0, 1      standard
        2, 3      italic
        4, 5      bold
        6, 7      bold italic
NUMTXT: Number of text lines
  LINE: String to be supplied then edited
  TEXT: Header text
 FIXED: If .TRUE.  use Courier New
        If .FALSE. use sans serif

Back to Subroutines or Menu


Get n integers

Show a list of supplied integers to be edited, each with a corresponding line of text.

      SUBROUTINE GETI0N (N, NVALUE, &
                         TEXT)
      INTEGER,             INTENT (IN)    :: N
      INTEGER,             INTENT (INOUT) :: NVALUE(N)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(N)
 
     N: Number of integers required
NVALUE: The N integers
  TEXT: One line adjacent to each integer edit box

Back to Subroutines or Menu


Get n double precision values

Show a list of supplied values to be edited, each with a corresponding line of text.

      SUBROUTINE GETR0N (N, &
                         XVALUE, &
                         TEXT)
      INTEGER,             INTENT (IN)    :: N
      DOUBLE PRECISION,    INTENT (INOUT) :: XVALUE(N)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(N)
 
     N: Number of values required
XVALUE: The N values
  TEXT: One line adjacent to each double precision edit box
 
The values of X supplied are displayed using the function FORM25.
 

 
      CHARACTER (LEN = 25) FUNCTION FORM25(X)
      DOUBLE PRECISION, INTENT (IN) :: X
 
      This returns the character representation of X using 15 significant digits
      in an appropriate I, F, or E left justified format with no trailing zeros.
      There are also functions FORM20(X) and FORM15(X) for 20 and 15 character
      representations, and function FORM12(I) for 12 character integer display.

Back to Subroutines or Menu


Get n character strings

Show a list of supplied strings to be edited, each with a corresponding line of text.

      SUBROUTINE GETS0N (N, &
                         SVALUE, TEXT)
      INTEGER,             INTENT (IN)    :: N
      CHARACTER (LEN = *), INTENT (INOUT) :: SVALUE(N)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(N)
 
     N: Number of character strings required
SVALUE: The N character strings
  TEXT: One line adjacent to each character edit box

Back to Subroutines or Menu


Get n logicals

Show a list of check boxes to be ticked/un-ticked, each with a corresponding line of text.

      SUBROUTINE GETL0N (N, &
                         TEXT, &
                         LVALUE)
      INTEGER,             INTENT (IN)    :: N
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(N)
      LOGICAL,             INTENT (INOUT) :: LVALUE(N)
 
     N: Number of logical variables required
LVALUE: The N logical variables
  TEXT: One line adjacent to each tick box

Back to Subroutines or Menu


Get n arbitrary values

Display a control with a list of integers, doubles, character, or logicals for editing, each with a corresponding line of text. Users must supply arrays of dimension NUMOPT for integers, double precisions, and character strings, but the value of NUMPOS(i) dictates the type of variable to be edited. Integer KVALUE returns 0 (.FALSE.) or 1 (.TRUE.) for logical variables.

      SUBROUTINE GET00N (ICOLOR, IX, IY, KVALUE, LSHADE, NUMBLD, &
                         NUMOPT, NUMPOS, NSTART, NUMTXT, &
                         XVALUE, &
                         SVALUE, TEXT, &
                         FIXED, FULL, HIGH)
      INTEGER,             INTENT (IN)    :: ICOLOR, IX, IY, LSHADE, &
                                             NUMOPT, NSTART, NUMTXT
      INTEGER,             INTENT (IN)    :: NUMBLD(NUMTXT), &
                                             NUMPOS(NUMOPT)
      INTEGER,             INTENT (INOUT) :: KVALUE(NUMOPT)
      DOUBLE PRECISION,    INTENT (INOUT) :: XVALUE(NUMOPT)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(NUMTXT)
      CHARACTER (LEN = *), INTENT (INOUT) :: SVALUE(NUMOPT)
      LOGICAL,             INTENT (IN)    :: FIXED, FULL, HIGH
 
ICOLOR: Not used in this version
    IX: X coordinate of top left hand corner
    IY: Y coordinate of top left hand corner
KVALUE: Integer values returned by this routine
        Also logical values 0 = .FALSE., 1 = .TRUE.
        from check box item
LSHADE: Not used in this version
NUMBLD: Font scheme line by line
        Value  font (sans serif or Courier New if FIXED = .TRUE.)
        0, 1   standard
        2, 3   italic
        4, 5   bold
        6, 7   bold Italic
NUMOPT: Number of options available
NUMPOS: Type of edit box which can be of these types
        NUMPOS(i) = 1: integers
        NUMPOS(i) = 2: doubles
        NUMPOS(i) = 3: characters
        NUMPOS(i) = 4: logicals
NUMSTA: Number of the line of text where menu items start
NUMTXT: Number of lines of text NUMTXT >= NUMOPT
XVALUE: Double precision values returned by this routine
SVALUE: Character strings returned by this routine
  TEXT: Text array (text plus menus)
 FIXED: Mono spaced font if .TRUE.
  FULL: Not used in this version
  HIGH: Not used in this version

Back to Subroutines or Menu


Get double precision values

These routines divide into one of two types. The GETR?? routines do not require initialised values, but the GETD?? routines must be supplied with initialised values. Values supplied for initialisation are stored to full double precision, but only the signficant digits are displayed in the edit boxes.

SUBROUTINE GETR01 (X, text)       ... get 1 unrestricted value
SUBROUTINE GETR02 (X, Y, text)    ... get 2 unrestricted values
SUBROUTINE GETR03 (X, Y, Z, text) ... get 3 unrestricted values
SUBROUTINE GETRM1 (A, X, B, text) ... get X where A =< x =< B   (A and B must be initialised)
SUBROUTINE GETD01 (X, text)       ... get 1 unrestricted value  (must be initialised)
SUBROUTINE GETD02 (X, Y, text)    ... get 2 unrestricted values (must be initialised)
SUBROUTINE GETD03 (X, Y, Z, text  ... get 3 unrestricted values (must be initialised)
SUBROUTINE GETDGE (X, A, text)    ... get X where X >= A        (must be initialised)
SUBROUTINE GETDLE (X, B, text)    ... get X where X =< B        (must be initialised)
SUBROUTINE GETDG2 (X, Y, text)    ... get X =< Y                (must be initialised)
SUBROUTINE GETDG3 (X, Y, Z, text) ... get X =< Y =< Z           (must be initialised)
SUBROUTINE GETDM1 (A, X, B, text) ... get x where A =< X =< B   (must be initialised)
 
DOUBLE PRECISION,    INTENT (IN)    :: A, B
DOUBLE PRECISION,    INTENT (INOUT) :: X, Y, Z
CHARACTER (LEN = *), INTENT (IN)    :: TEXT

Back to Subroutines or Menu


Get an integer

These routines divide into one of two types. The GETI?? routines do not require initialised values, but the GETJ?? routines must be supplied with initialised values.

SUBROUTINE GETI01 (I, LINE)       ... get 1 integer i
SUBROUTINE GETIGT (I, A, LINE)    ... get 1 integer i > A
SUBROUTINE GETILT (I, B, LINE)    ... get 1 integer i < A
SUBROUTINE GETIM1 (A, I, B, LINE) ... get 1 integer A =< i =< B
SUBROUTINE GETJ01 (I, LINE)       ... get 1 integer i           (must be initialised)
SUBROUTINE GETJGE (I, A, LINE)    ... get 1 integer i >= A      (must be initialised)
SUBROUTINE GETJLE (I, B, LINE)    ... get 1 integer i =< B      (must be initialised)
SUBROUTINE GETJM1 (A, I, B, LINE) ... get 1 integer A =< i =< B (must be initialised)
 
INTEGER,             INTENT (IN)    :: A, B
INTEGER,             INTENT (INOUT) :: I
CHARACTER (LEN = *), INTENT (IN)    :: LINE

Back to Subroutines or Menu


Get text strings

The only difference between subroutines GETSTR and GETTXT is that GETSTR must be called with a valid RESPONSE character string, while GETTXT displays a question mark for a default RESPONSE.

SUBROUTINE GETSTR (QUERY, RESPONSE) ... get a text string from the user (default supplied)
SUBROUTINE GETTXT (QUERY, RESPONSE) ... get a text string from the user (default = ?)
 
CHARACTER (LEN = *), INTENT (IN)    :: QUERY
CHARACTER (LEN = *), INTENT (INOUT) :: RESPONSE

Back to Subroutines or Menu


Get a logical variable

      SUBROUTINE GETL01 (QUERY, &
                         YESNO)
      CHARACTER (LEN = *), INTENT (IN)    :: QUERY
      LOGICAL,             INTENT (INOUT) :: YESNO
 
QUERY: Text string in the form of a question
YESNO: On input this determines the default response.
       On exit this contains the user response.

Back to Subroutines or Menu


Get a vector from the user

SUBROUTINES: VEC1IN, TRIM80
      SUBROUTINE VEC1IN (ISEND, NIN, NMAX, NPTS, &
                         X, &
                         FNAME, TITLE, &
                         ABORT, FIXNPT, LABEL)
      INTEGER,             INTENT (IN)    :: NIN, NMAX
      INTEGER,             INTENT (INOUT) :: ISEND, NPTS
      DOUBLE PRECISION,    INTENT (OUT)   :: X(NMAX)
      CHARACTER (LEN = *), INTENT (INOUT) :: FNAME, TITLE
      LOGICAL,             INTENT (IN)    :: FIXNPT, LABEL
      LOGICAL,             INTENT (OUT)   :: ABORT
 
 ISEND: (input/output) as follows
         ISEND = 1: user inputs TITLE etc. and ISEND is unchanged
         ISEND = 2: TITLE etc. from file and ISEND is unchanged
         OTHERWISE: user chooses mode and ISEND is returned as 1 or 2
   NIN: (input/unchanged) unconnected unit for data input
         Note: if an existing file is successfully opened, then NIN is
         returned connected for further reading. Otherwise NIN is
         closed on exit
  NMAX: (input/unchanged) maximum dimension
  NPTS: (input/output) size of X as follows
         FIXNPT = .TRUE. then NPTS is unchanged
         FIXNPT = .FALSE. then NPTS is arbitrary
 FNAME: (output) as follows
         ISEND = 1: file supplied by user (unchanged)
         OTHERWISE: temporary file name like vector_k.tmp
 TITLE: (output) as follows
         ISEND = 1: read off file
         OTHERWISE: returned depending on LABEL
 ABORT: (output) error indicator
FIXNPT: (input/unchanged)
         FIXNPT = .TRUE. return exactly NPTS data points
         FIXNPT = .FALSE. then return arbitrary NPTS data points
 LABEL: (input/unchanged) as follows if data are to be typed in
         LABEL = .TRUE. then the user supplies a title
         LABEL = .FALSE. a temporary title is supplied

      SUBROUTINE TRIM80 (LINE)
      CHARACTER (LEN = *), INTENT (INOUT) :: LINE
 
LINE: This is typically a long filename that is trimmed so that the
      right-most 80 characters are the last characters of the filename,
      in order to avoid overflow when writing character strings to output
      devices and files. There are also routines TRIM40, TRIM60, and TRIM100.

Back to Subroutines or Menu


Get a matrix from the user

      SUBROUTINE MATTIN (ISEND, NCMAX, NCOL, NIN, NRMAX, NROW, &
                         A, B, &
                         FNAME, TITLE, &
                         ABORT, FIXCOL, FIXROW, LABEL)
      INTEGER,             INTENT (IN)    :: ISEND, NCMAX, NIN, NRMAX
      INTEGER,             INTENT (INOUT) :: NCOL, NROW
      DOUBLE PRECISION,    INTENT (OUT)   :: A(NRMAX,NCMAX), B(*)
      CHARACTER (LEN = *), INTENT (INOUT) :: FNAME, TITLE
      LOGICAL,             INTENT (IN)    :: FIXCOL, FIXROW, LABEL
      LOGICAL,             INTENT (OUT)   :: ABORT
 
 ISEND: (input/unchanged) as follows
         ISEND = 1: User inputs TITLE etc.
         ISEND = 2: TITLE etc. from file prepared by MAKMAT
         OTHERWISE : User chooses input mode
 NCMAX: (input/unchanged) maximum column dimension
  NCOL: (input/output) actual column dimension depending on FIXCOL
   NIN: (input/unchanged) unconnected unit number for file opening
         If a file is selected NIN is returned connected in case
         it is necessary to read the trailer o/w it is closed
 NRMAX: (input/unchanged) leading dimension
  NROW: (input/output) actual row dimension depending on FIXROW
     A: (output)
     B: workspace (not used in this version)
 FNAME: (input/output) as follows
         ISEND = 1: unchanged
         ISEND = 2: returned as temporary file name
 TITLE: (input/output) depending on ISEND and LABEL as follows
         ISEND = 1: data title from file
         Otherwise, LABEL = .TRUE. user chooses
                    LABEL = .FALSE. default
 ABORT: (output) error indicator
FIXCOL: (input/unchanged) if .TRUE. column size fixed as NCOL
FIXROW: (input/unchanged) if .TRUE. row size fixed as NROW
 LABEL: (input/unchanged) if .TRUE. user inputs title

Back to Subroutines or Menu


Get a matrix from the clipboard

SUBROUTINES: ATTRIB, GETNOU, MATTIN

Simdem43 demonstrates how to use subroutine MATTIN to get a matrix from the clipboard. It also uses subroutines ATTRIB and GETNOU.

      SUBROUTINE ATTRIB (FNAME, &
                         EXIST, READ_ONLY)
      CHARACTER (LEN = *), INTENT (IN)  :: FNAME
      LOGICAL,             INTENT (OUT) :: EXIST, READ_ONLY
 
    FNAME: A filename
    EXIST: .TRUE. if the file exists
READ_ONLY: .TRUE. if the file has the read-only attribute

      SUBROUTINE GETNOU (NOUT)
      INTEGER, INTENT (OUT) :: NOUT
 
NOUT: This is the first unit counting upwards from 11 that is
      not opened in the Simdem GUI. The unit is not then connected
      by subroutine GETNOU. It is provided for cross-compiler use.

Back to Subroutines or Menu


Get DLL signatures

These routines can be called to make sure that the DLLs linked into Simdem are consistent, i.e. with the same version and release number. Simdem will use local DLLs if there are any, then it will search the path, so these routines are most useful when there is ambiguity about the DLLs, e.g. more than one copy on the path, or some local but others on the path.

      SUBROUTINE SCCLIB (NSALF)
      INTEGER, INTENT (OUT) :: NSALF
 
      SUBROUTINE DLLCLR (XVER, YVER, &
                         DVER)
      SUBROUTINE DLLGRA (XVER, YVER, &
                         DVER)
      SUBROUTINE DLLMEN (XVER, YVER, &
                         DVER)
      DOUBLE PRECISION,     INTENT (OUT) :: XVER, YVER
      CHARACTER (LEN = 30), INTENT (OUT) :: DVER
 
NSALF: Sequence number for salflibc.dll   (32-bit version), or
      -Sequence number for clearwin64.dll (64-bit version)
 XVER: Version number
 YVER: Release number
 DVER: Description

Back to Subroutines or Menu


Get a colour from the palette

Subroutine PALETT allows users to select colours for graphical objects from an array of colours currently defined in w_ps.cfg, but also to edit user-defined colours.

      SUBROUTINE PALETT (ICOLOR, MODE)
      INTEGER, INTENT (INOUT) :: ICOLOR
      INTEGER, INTENT (IN)    :: MODE
 
ICOLOR: Current colour on input, selected colour on exit.
        Must be in range 0 to 71 for 72-colour version.
        The following 16 standard colours are always defined.
        0  Black
        1  Blue
        2  Green
        3  Cyan
        4  Red
        5  Magenta
        6  Brown
        7  White
        8  Dark Gray
        9  Light Blue
        10 Light Green
        11 Light Cyan
        12 Light Red
        13 Light Magenta
        14 Yellow
        15 Intense White
  MODE: Must be set to 0 to display the palette.
        Other values depend on the version and
        are not allowed in the 72-colour version.

Back to Subroutines or Menu


Select from a simple list box

      SUBROUTINE LISTBX (NUMDEC, NUMOPT, &
                         OPTS)
      INTEGER,             INTENT (IN)    :: NUMOPT
      INTEGER,             INTENT (INOUT) :: NUMDEC
      CHARACTER (LEN = *), INTENT (IN)    :: OPTS(NUMOPT)
 
NUMDEC: On input defines the default option number.
        On exit holds the number of the option selected.
NUMOPT: Number of options.
  OPTS: List of options.

Back to Subroutines or Menu


Select from a title page and menu

      SUBROUTINE TITLE1 (ICOLOR, NUMBLD, NUMDEC, NUMHDR, NUMOPT, &
                         NUMPOS, &
                         HEADER, OPTION)
      INTEGER,             INTENT (IN)    :: ICOLOR, NUMHDR, NUMOPT
      INTEGER,             INTENT (INOUT) :: NUMDEC
      INTEGER,             INTENT (IN)    :: NUMBLD(NUMHDR), &
                                             NUMPOS(NUMOPT)
      CHARACTER (LEN = *), INTENT (IN)    :: HEADER(NUMHDR), &
                                             OPTION(NUMOPT)
 
ICOLOR: Colour scheme (see PATCH1).
NUMBLD: Font style (see PATCH1).
NUMDEC: Sets choice on input then returned as the decision.
NUMHDR: Number of header lines.
NUMOPT: Number of options.
NUMPOS: Hot key positions (must be unique).
HEADER: Header text.
OPTION: Menu options.

Back to Subroutines or Menu


Select from a question and answer window

      SUBROUTINE ANSWER (ICOLOR, NUMBLD, NUMHDR, &
                         HEADER, OPTION, &
                         YES)
      INTEGER,             INTENT (IN)    :: NUMBLD(NUMHDR)
      CHARACTER (LEN = *), INTENT (IN)    :: HEADER(NUMHDR), OPTION
      LOGICAL,             INTENT (INOUT) :: YES
 
ICOLOR: Colour style (see PATCH1).
NUMBLD: Text style (see PATCH1).
NUMHDR: Number of header lines.
HEADER: Header text.
OPTION: The 1-line option.
   YES: Sets the default button on input
        then returns the option selected.

Back to Subroutines or Menu


Select from a tabbing list box

      SUBROUTINE TBOX01 (ICOLOR, IX, IY, LSHADE, NUMBLD, NUMDEC, &
                         NUMOPT, NUMPOS, NSTART, NTEXT, &
                         TEXT, &
                         TAB_BOT, TAB_MID, TAB_TOP)
      INTEGER,             INTENT (IN)    :: ICOLOR, IX, IY, LSHADE, &
                                             NUMOPT, NSTART, NTEXT
      INTEGER,             INTENT (INOUT) :: NUMDEC
      INTEGER,             INTENT (IN)    :: NUMBLD(NTEXT), &
                                             NUMPOS(NUMOPT)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(NTEXT)
      LOGICAL,             INTENT (IN)    :: TAB_BOT, TAB_MID, TAB_TOP
 
 ICOLOR: May be disabled (see PATCH1).
 IX, IY: Position down from top left hand in average characters.
         May be disabled and always is for ix or iy =< 0.
 LSHADE: May be disabled (0 = no shading, 1 = shading).
 NUMBLD: 1, 2 = Normal; 3,4 = Italic; 4,5 = Bold; 6,7 = Bold Italic
         Odd number = normal, Even number = highlighted.
 NUMDEC: Decision (must be pre-set to default before entry).
 NUMOPT: Number of options.
 NUMPOS: Not used in this version but must be set.
 NSTART: Starting line for list box in text array.
 NUMTXT: Text dimension.
   TEXT: Text array.
TAB_TOP: Tab header (at grave characters).
TAB_MID: Tab list box items (at grave characters).
TAB_BOT: Tab trailer (at grave characters).

Back to Subroutines or Menu


Select from button boxes

Subroutines BBOX01, HBOX01, and VBOX01 are only useful for relatively small numbers of options. The only difference is the button position. The hot key, as set by NUMPOS, must be unique and consistent across buttons.

      SUBROUTINE BBOX01 (ICOLOR, IX, IY, LSHADE, NUMBLD, NUMDEC, &
                         NUMOPT, NUMPOS, NSTART, NTEXT, &
                         TEXT, &
                         BORDER, FLASH, HIGH)
      INTEGER,             INTENT (INOUT) :: NUMDEC
      INTEGER,             INTENT (IN)    :: ICOLOR, IX, IY, LSHADE, &
                                             NUMOPT, NSTART, NTEXT
      INTEGER,             INTENT (IN)    :: NUMBLD(NTEXT), &
                                             NUMPOS(NUMOPT)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(NTEXT)
      LOGICAL,             INTENT (IN)    :: BORDER, FLASH, HIGH

      SUBROUTINE HBOX01 (ICOLOR, IX, IY, LSHADE, NUMBLD, NUMDEC, &
                         NUMOPT, NUMPOS, NSTART, NTEXT, &
                         TEXT, &
                         BORDER, FLASH, HIGH)
      INTEGER,             INTENT (IN)    :: ICOLOR, IX, IY, LSHADE, &
                                             NUMOPT, NSTART, NTEXT
      INTEGER,             INTENT (IN)    :: NUMBLD(NTEXT), &
                                             NUMPOS(NUMOPT)
      INTEGER,             INTENT (INOUT) :: NUMDEC
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(NTEXT)
      LOGICAL,             INTENT (IN)    :: BORDER, FLASH, HIGH

      SUBROUTINE VBOX01 (ICOLOR, IX, IY, LSHADE, NUMBLD, NUMDEC, &
                         NUMOPT, NUMPOS, NUMSTA, NUMTXT, TEXT, &
                         BORDER, FLASH, HIGH)
      INTEGER,             INTENT (IN)    :: ICOLOR, IX, IY, LSHADE, &
                                             NUMOPT, NUMSTA, NUMTXT
      INTEGER,             INTENT (INOUT) :: NUMDEC
      INTEGER,             INTENT (IN)    :: NUMBLD(NUMTXT), &
                                             NUMPOS(NUMOPT)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(NUMTXT)
      LOGICAL,             INTENT (IN)    :: BORDER, FLASH, HIGH
 
ICOLOR: Colour (see PATCH1)
IX, IY: Window position (may be disabled)
LSHADE: 0 = no shading, 1 = shading (may be disabled))
NUMBLD: 1, 2 = Normal; 3,4 = Italic; 4,5 = Bold; 6,7 = Bold Italic
        Odd number = normal, Even number = highlighted
NUMDEC: Decision (must be pre-set to default before entry)
NUMOPT: Number of options >= 1
NUMPOS: Position of hot key in button text
NSTART: Starting line for buttons in text array
NUMTXT: Text dimension
  TEXT: Text array
 FIXED: Use Courier New if .true. otherwise sans serif
 FLASH: Not used
  HIGH: Not used

Back to Subroutines or Menu


Select from ganged radio/tick boxes

      SUBROUTINE RBOX01 (ICOLOR, IX, IY, LSHADE, NUMBLD, NUMDEC, &
                         NUMOPT, NUMPOS, NUMSTA, NUMTXT, &
                         TEXT, &
                         BORDER, FLASH, HIGH)
      INTEGER,             INTENT (IN)    :: ICOLOR, IX, IY, LSHADE, &
                                             NUMDEC, NUMOPT, NUMSTA, &
                                             NUMTXT
      INTEGER,             INTENT (IN)    :: NUMBLD(NUMTXT)
      INTEGER,             INTENT (INOUT) :: NUMPOS(NUMOPT)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(NUMTXT)
      LOGICAL,             INTENT (IN)    :: BORDER, FLASH, HIGH
 
ICOLOR: Not used in this version.
    IX: X-coordinate.
    IY: Y-coordinate.
LSHADE: Shading ... not used in this version.
NUMBLD: Has special meaning within a menu sub-group.
NUMDEC: Is <= 0 for radio o/w check boxes.
NUMOPT: Number of options.
NUMPOS: Is 0,1 for false/true.
NUMSTA: Starting line for menu items.
NUMTXT: Number of text lines.
  TEXT: Header plus embedded menu items.
 FIXED: Use fixed or proportional fonts.
  FULL: Not used in this version.
  HIGH: Not used in this version.
 
Note how ganging is achieved as follows:-
 
The idea is that positive hundreds for numbld form ganged
groups where at least one must be switched on, but negative
hundreds form ganged groups where they can all be switched
off. At most one can be switched on in any ganged group.
For example-
set corresponding numbld = 100 leads to a 100-type group
set corresponding numbld = - 100 leads to a -100-type group
set corresponding numbld = 200 leads to a 200-type group
set corresponding numbld =  -200 leads to a -200-type group
set corresponding numbld = 300 leads to a 300-type group
set corresponding numbld =  -300 leads to a -300-type group
the significance of this is as follows:
 
if numbld(i) < 0 then the controls in a group can be all off
if numbld(i) > 0 then one control in a group must be switched on
only one of the numpos can be switched on (i.e. 1) in any group
it is necessary to edit if large groups > 10 are required

Back to Subroutines or Menu


Select from scrolling check boxes

SUBROUTINES: CHKBOX, RBOXES

With subroutine CHKBOX a window with scrolling check boxes is displayed, where the check boxes are ticked or un-ticked depending on the value of USEIT on entry. Adjacent to each check box is a line of explanatory text. After checking and un-checking as required, the user can cancel or accept the editing.

      SUBROUTINE CHKBOX (N, &
                         TEXT, TITLE, &
                         USEIT)
      INTEGER,             INTENT (IN)    :: N
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(N), TITLE
      LOGICAL,             INTENT (INOUT) :: USEIT(N)
 
    N: Number of check boxes required.
 TEXT: Labels, one for each logical variable.
TITLE: Title for check boxes.
USEIT: Supplied as defaults.
       Changed only if {Apply} is pressed.

Subroutine RBOXES is similar to subroutine CHKBOX except that there is a N_DOWN by N_ACROSS matrix of check boxes. Also there is an initial header section intended to describe the meaning of the N_ACROSS columns of check boxes. For each of the N_DOWN rows of check boxes one check box will be selected, depending on the value of IRB supplied for that row. Users can alter the box checked so that, on exit, the value of IRB(i) will be the number of the check box ticked in row i.

      SUBROUTINE RBOXES (IRB, N_ACROSS, N_DOWN, N_HEADER, &
                         HEADER, TEXT)
      INTEGER,             INTENT (IN)    :: N_ACROSS, N_DOWN, N_HEADER
      INTEGER,             INTENT (INOUT) :: IRB(N_DOWN)
      CHARACTER (LEN = *), INTENT (IN)    :: HEADER(N_HEADER), &
                                             TEXT(N_DOWN)
 
     IRB: Number of check box selected at each row.
          Note that 1 =< IRB(i) =< N_ACROSS.
N_ACROSS: Number of ganged check boxes across.
  N_DOWN: Number of rows of ganged check boxes.
N_HEADER: Number of lines of header information.
  HEADER: Lines of header information.
    TEXT: Captions for rows of check boxes (width =< 20).

Back to Subroutines or Menu


Select one or multiple files

SUBROUTINES: MFILES, TRIM60
      SUBROUTINE MFILES (NFILES, NMAX, &
                         FILES)
 
      INTEGER,             INTENT (IN)    :: NMAX
      INTEGER,             INTENT (OUT)   :: NFILES
      CHARACTER (LEN = *), INTENT (INOUT) :: FILES(NMAX)
 
NFILES: On entry NFILES is set to zero.
        On exit NFILES is the number of files selected.
  NMAX: Maximum number of files that can be selected.
 FILES: Files selected.

      SUBROUTINE TRIM60 (LINE)
      CHARACTER (LEN = *), INTENT (INOUT) :: LINE
 
LINE: This is typically a long filename that is trimmed so that the
      right-most 60 characters are the last characters of the filename,
      in order to avoid overflow when writing character strings to output
      devices and files. There are also routines TRIM40, TRIM80, and TRIM100.

Back to Subroutines or Menu


Select from a comprehensive list box

      SUBROUTINE LSTBOX (NUMBLD, NUMDEC, NUMOPT, NUMSTA, NUMTXT, &
                         TEXT)
      INTEGER,             INTENT (IN)    :: NUMTXT, NUMOPT, NUMSTA
      INTEGER,             INTENT (IN)    :: NUMBLD(NUMTXT)
      INTEGER,             INTENT (INOUT) :: NUMDEC
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(NUMTXT)
 
NUMBLD: 0 = black, 1 = red, etc.
NUMDEC: On entry sets the pre-selected item.
        On exit returns the item selected or
        the default Cancel or Quit item if
        the closure cross is used.
NUMOPT: Number of options.
NUMSTA: Number of starting line for menu items.
NUMTXT: Number of lines in array TEXT.
  TEXT: Options with extra text if required.
 
Advice
1) The subroutine will only work if all arguments
   are initalised correctly.
2) Grave accents (like `) create tabbing when in the
   header or trailer text lines.
3) Grave accents (like `) in the menu items invoke a
   different tabbing procedure which may suppress
   colours set by numbld.
4) If a menu item contains words like Cancel, Exit,
   or Quit, a default closure cross option is made
   available which will select the option containing
   the words Cancel, Exit, or Quit.

Back to Subroutines or Menu


Select a file to view/open/copy/paste

SUBROUTINES: VUOPEN, AUX256

Subroutine VUOPEN can be used to view/open/copy/paste from a file identified from list of files supplied in the array TEXT.

      SUBROUTINE VUOPEN (NUMDEC, NUMTXT, &
                         TEXT, &
                         VIEW)
      INTEGER,             INTENT (IN)    :: NUMTXT
      INTEGER,             INTENT (INOUT) :: NUMDEC
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(NUMTXT)
      LOGICAL,             INTENT (INOUT) :: VIEW
 
NUMTXT: Number of text lines.
NUMDEC: On entry defines the default item.
        On exit defines the line chosen.
  TEXT: Each line should be the name of a file. However,
        a grave accent (`) can be used to separate filenames
        from comments, but they must all be at the same
        position in every line of text.
  VIEW: Returned as .TRUE. if users selects to VIEW.
        Returned as .FALSE. if users selects to OPEN.

The function AUX256 must be supplied with a filename PNAME. If this filename can be identified as a Simdem auxiliary file then AUX256 will be returned as the fully qualified path-filename to PNAME. Otherwise AUX256 will be returned as the filename supplied. It is advisable to define AUX256 as at least (LEN = 1024) in the calling program.

      CHARACTER (LEN = *) FUNCTION AUX256 (PNAME)
      CHARACTER (LEN = *), INTENT (IN) :: PNAME

Back to Subroutines or Menu


Select from the Simfit file-selection control

SUBROUTINES: OFILES, GETFIL, FSERCH, INFOFL

The advanced simfit file selection control is very versatile. You can type in file names or use the Windows Browse function. Alternatively you can toggle backwards or forwards through the lists of recently created/analysed files which allows keystroke editing or you can select directly from the file lists. You can also set filters interactively. There are many powerful built in functions, e.g. try opening an exe or dll file. You cannot set demonstration filenames from the SIMDEM44 example, so the [Demo] button will not work.

      SUBROUTINE OFILES (ISEND, NOUT, &
                         FNAME, &
                         ABORT)
      INTEGER,             INTENT (IN)    :: ISEND, NOUT
      CHARACTER (LEN = *), INTENT (INOUT) :: FNAME
      LOGICAL,             INTENT (OUT)   :: ABORT
 
ADVICE: UNITS 1, 2, 5 and 6 cannot be opened in this version.
        This version takes the search pattern from w_filter.cfg
        each time it is called and allows FILTERS etc. to be changed
        interactively. It uses w_input.cfg and w_output.cfg to
        remember filenames i.e. for history.
 ISEND: ISEND = 1, User supplies FILENAME at terminal, then SAVE new file
                   i.e. Save as ...
        ISEND = 2, FILENAME as argument to subroutine, then SAVE new file
                  (re-try with JSEND = 1 if failure with JSEND = 2)
        ISEND = 3, User supplies FILENAME at terminal/from panel, then OPEN old file
                   Search pattern = FNAME set on initial entry in this version
                   i.e. Open ...
        ISEND = 4, FILENAME as argument to subroutine, then OPEN old file
                   (re-try with JSEND = 3 if failure with JSEND = 4)
  NOUT: Unconnected UNIT number.
 FNAME: FILENAME.
 ABORT: Returned as .TRUE. for success, .FALSE. if failure.

The simple file control is just an interface to the usual Windows file selection control with no special Simfit features. It is initialised by the arguments ext and type1.

      SUBROUTINE GETFIL (ISEND, &
                         EXT, FNAME, TYPE1, &
                         ABORT)
      INTEGER,             INTENT (IN)  :: ISEND
      CHARACTER (LEN = *), INTENT (IN)  :: EXT, TYPE1
      CHARACTER (LEN = *), INTENT (OUT) :: FNAME
      LOGICAL,             INTENT (OUT) :: ABORT
 
ISEND: ISEND = 1: Open ... an existing file
       Otherwise Save As ... a new file
  EXT: File extension, e.g. txt, bmp, eps
FNAME: File name selected or blank if no file selected
TYPE1: File type or description, e.g. Encapsulated Postscript file
ABORT: Error indicator
 Note: this routine does not open any files, it just returns file names. So a new
       filename will only lead to a new file if the file is subsequently opened.

The file searching routine allows user to specify a fully qualified filename, or a simple filename (FNAME) and a directory (DIR) to start a search which includes sub-folders. The search can be stopped if it proves too long, otherwise THERE is returned as .TRUE. if FULL_PATH is the fully qualified filename. for FNAME.

      SUBROUTINE FSERCH (DIR, FNAME, FULL_PATH, &
                         THERE)
      CHARACTER (LEN = *), INTENT (IN)  :: DIR, FNAME
      CHARACTER (LEN = *), INTENT (OUT) :: FULL_PATH      
      LOGICAL,             INTENT (OUT) :: THERE

The filename displaying routine conveniently displays a message, depending on ISEND, and the filename supplied.

      SUBROUTINE INFOFL (ISEND, &
                         FNAME)
      INTEGER,             INTENT (IN) :: ISEND
      CHARACTER (LEN = *), INTENT (IN) :: FNAME                     

      ISEND = 1: file missing 
      ISEND = 2: file created 
      ISEND = 3: file deleted 
      ISEND = 4: file incorrectly formatted
      ISEND = 5: file cannot be viewed/edited/printed 
      ISEND = 6: file is read only 
      ISEND = 7: file cannot be opened
      ISEND = 8: file is empty 
      ISEND = 9: file has been located

Back to Subroutines or Menu


Editing double precision variables

      SUBROUTINE EDITD1 (ISEND, NCOLS, NRMAX, NROWS, &
                         X, &
                         TEXT)
      INTEGER,             INTENT (IN)    :: ISEND, NCOLS, NRMAX, NROWS
      DOUBLE PRECISION,    INTENT (INOUT) :: X(NRMAX,*)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT
 
ISEND: ISEND = 1: view only    ... X unchanged.
       ISEND = 2: edit only    ... X changed.
       ISEND = 3: fill in/edit ... X initialised.
NCOLS: Column dimension.
NRMAX: Leading dimension.
NROWS: Row dimension.
    X: Depending on ISEND.
 TEXT: Title.

Back to Subroutines or Menu


Editing integers

Subroutine EDITI1 actually edits a double precision matrix X, but internally it is integer converted using NINT. Hence, to realise integer editing it is necessary to transform an integer input matrix into double precision using DBLE before input, and transform the resulting edited double precision matrix into an integer matrix using NINT after exit.

      SUBROUTINE EDITI1 (ISEND, NCOLS, NRMAX, NROWS, &
                         X, &
                         TEXT)
      INTEGER,             INTENT (IN)    :: ISEND, NCOLS, NRMAX, NROWS
      DOUBLE PRECISION,    INTENT (INOUT) :: X(NRMAX,*)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT
 
ISEND: ISEND = 1: view X     ... X unchanged.
       ISEND = 2: edit X     ... X changed.
       ISEND = 3: initialise ... X initialised/edited.
NCOLS: Column dimension.
NRMAX: Leading dimension.
NROWS: Row dimension.
    X: Depending on ISEND.
 TEXT: Title.

Back to Subroutines or Menu


Editing text

Subroutine EDITTX is supplied with a text array of maximum dimensions NHIGH by NWIDE, then returns a text array of dimensions NLINES by NWIDE after editing, where NLINES allows for line deletion and adding new lines.

      SUBROUTINE EDITTX (NHIGH, NLINES, NWIDE, &
                         TEXT)
      INTEGER,             INTENT (IN)    :: NHIGH, NWIDE
      INTEGER,             INTENT (OUT)   :: NLINES
      CHARACTER (LEN = *), INTENT (INOUT) :: TEXT(NHIGH)
 
 NHIGH: Maximum number of lines in text buffer.
NLINES: Number of lines of edited buffer on exit.
 NWIDE: Maximum width of edited buffer.
  TEXT: Buffer.

Back to Subroutines or Menu


Plot 1 function

Note that the scheme for line types (L) and symbol types (M) in subroutine GKS001 is used everywhere else in Simdem graphics.

      SUBROUTINE GKS001 (L, M, N, &
                         X, Y, &
                         PTITLE, XTITLE, YTITLE)
      INTEGER,             INTENT (IN) :: L, M, N
      DOUBLE PRECISION,    INTENT (IN) :: X(N), Y(N)
      CHARACTER (LEN = *), INTENT (IN) :: PTITLE, XTITLE, YTITLE
 
     L: Line type. L = 1 Solid
                   L = 2 Dashed
                   L = 3 Dotted
                   L = 4 Dashed-Dotted
                   L = 5 Vector >>>
                   L = 6 Vector <<<
                   L = 7 Step-cdf
                   L = 8 Step-survival
                   L = 9 Filled polygon
                   Otherwise None
     M: Symbol type. M = 1 Dot
                     M = 2 Plus
                     M = 3 Cross
                     M = 4 Asterisk
                     M = 5 Circle
                     M = 6 Circle-half
                     M = 7 Circle-full
                     M = 8 Triangle
                     M = 9 Triangle-half
                     M = 10 Triangle-full
                     M = 11 Square
                     M = 12 Square-half
                     M = 13 Square-full
                     M = 14 Diamond
                     M = 15 Diamond-half
                     M = 16 Diamond-full
                     M = 17 Minus
                     M = 18 Male
                     M = 19 Female
                     M = 20 Bar-outline
                     M = 21 Bar-filled
                     M = 22 Bar-diagonal-up
                     M = 23 Bar-diagonal-down
                     M = 24 Bar-criss-cross
                     M = 25 Bar-horizontal
                     M = 26 Bar-vertical
                     M = 27 Bar-dashed
                     M = 28 Bar-dotted
                     M = 29 Bar-dash-dotted
                     M = 30 Circle-outline
                     M = 31 Triangle-outline
                     M = 32 Square-outline
                     M = 33 Diamond-outline
                     M = 34 Inverted-triangle
                     M = 35 Inverted-triangle-half
                     M = 36 Inverted-triangle-full
                     Otherwise none
     N: Dimension.
     X: Data for X-axis.
     Y: Data for Y-axis.
PTITLE: Plot title.
XTITLE: Legend for X-axis.
YTITLE: Legend for Y-axis.

Back to Subroutines or Menu


Plot 4 functions

     SUBROUTINE GKS004 ( L1,  L2,  L3,  L4, &
                          M1,  M2,  M3,  M4, &
                         N1D, N2D, N3D, N4D, &
                         X1D, X2D, X3D, X4D, &
                         Y1D, Y2D, Y3D, Y4D, &
                         PTITLE, XTITLE, YTITLE, &
                         AXES, GSAVE)
      INTEGER,             INTENT (IN) :: L1, L2, L3, L4, &
                                          M1, M2, M3, M4, &
                                          N1D, N2D, N3D, N4D
      DOUBLE PRECISION,    INTENT (IN) :: X1D(*), X2D(*), &
                                          X3D(*), X4D(*), &
                                          Y1D(*), Y2D(*), &
                                          Y3D(*), Y4D(*)
      CHARACTER (LEN = *), INTENT (IN) :: PTITLE, XTITLE, YTITLE
      LOGICAL,             INTENT (IN) :: AXES, GSAVE
 
  L1 to L4: Line types   (see GKS001).
  M1 to M4: Symbol types (see GKS001).
N1D to N4D: Dimensions.
X1D to X4D: Data for X-axis.
Y1D to Y4D: Data for Y-axis.
    PTITLE: Plot title.
    XTITLE: Legend for X-axis.
    YTITLE: Legend for Y-axis.
      AXES: May not be used ... Set to .TRUE.
     GSAVE: May not be used ... Set to .TRUE.

Back to Subroutines or Menu


Plot 4 (x,y) transforms

      SUBROUTINE GKST04 ( L1,  L2,  L3,  L4, &
                          M1,  M2,  M3,  M4, &
                         N1D, N2D, N3D, N4D, &
                         A, X1D, X2D, X3D, X4D, &
                            Y1D, Y2D, Y3D, Y4D, &
                         PTITLE, XTITLE, YTITLE, &
                         AXES, SAVEIT)
      INTEGER,             INTENT (IN) :: L1, L2, L3, L4, &
                                          M1, M2, M3, M4, &
                                          N1D, N2D, N3D, N4D
      DOUBLE PRECISION,    INTENT (IN) :: A
      DOUBLE PRECISION,    INTENT (IN) :: X1D(*), X2D(*), X3D(*), X4D(*)
      DOUBLE PRECISION,    INTENT (IN) :: Y1D(*), Y2D(*), Y3D(*), Y4D(*)
      CHARACTER (LEN = *), INTENT (IN) :: PTITLE, XTITLE, YTITLE
      LOGICAL,             INTENT (IN) :: AXES, SAVEIT
 
Arguments as for GKS004 except that A is provided in case a Hill transform
for (x,y) to (log[x],log[y/(A - y)]) is required. For fractional saturation
functions A would be 1 but variable A is provided in case a scaled saturation
functions is input, when A must be >= maximum asymtotic Y-value.

Back to Subroutines or Menu


Plot surfaces and contours

      SUBROUTINE SURD2S (ISEND, NMAX, NX, NY, &
                         VECTOR, XMAX, XMIN, YMAX, YMIN, Z, &
                         UNUSED)
      INTEGER,          INTENT (IN)    :: ISEND, NMAX, NX, NY
      DOUBLE PRECISION, INTENT (INOUT) :: VECTOR(NMAX**2 + 6), &
                                          XMAX, XMIN, YMAX, YMIN, &
                                          Z(NMAX,NMAX)
      LOGICAL,          INTENT (INOUT) :: UNUSED(NMAX,NMAX)
 
The arguments for surd2s depend on exactly how the routine is to be called.
It can be called to plot a supplied model, to read data from a file
(like surface.tf1, etc), to plot data generated as a vector, or to plot
data supplied as a matrix at equally spaced coordinates.
 
Simdem22 demonstrates this last (simplest) case.
 
 ISEND: ISEND = 1: supply model, calculate then plot.
        ISEND = 2: read vector from file, then plot.
        ISEND = 3: supply vector, then plot.
        ISEND = 4: supply z(i,j), then plot.
  NMAX: This MUST be exactly 100 in this particular version.
    NX: Number of x divisions =< NMAX.
    NY: Number of y divisions =< NMAX.
VECTOR: Supplies data when isend = 3, not used when ISEND = 4.
        VECTOR MUST have dimension at least NMAX**2 + 6 in this version.
  XMAX: Range.
  XMIN: Range.
  YMAX: Range.
  YMIN: Range.
     Z: Data when isend = 4, not used when isend = 3.
UNUSED: Logical array used by the contouring routine.

Back to Subroutines or Menu


Plot curves in space

Subroutine SPACE0 should be called with parameteric data in the form X(t),Y(t),Z(t) and will then plot a 3D space curve that can be edited. Workspaces dimensioned at least N must be provided to permit rotations of the X,Y plane.

      SUBROUTINE SPACE0 (N, NMAX, &
                         X, XTEMP, Y, YTEMP, Z)
      INTEGER,          INTENT (IN)    :: N, NMAX
      DOUBLE PRECISION, INTENT (IN)    :: X(NMAX), Y(NMAX), &
                                          Z(NMAX)
      DOUBLE PRECISION, INTENT (INOUT) :: XTEMP(NMAX), YTEMP(NMAX)
 
    N: Dimension required.
 NMAX: Maximum dimension >= N.
    X: Data for X(t).
XTEMP: Workspace.
    Y: Data for Y(t).
YTEMP: Workspace.
    Z: Data for Z(t).

Back to Subroutines or Menu


Plot a vector field

      SUBROUTINE GKSVF1 (IARROW, IKOLOR, JARROW, LCOLOR, NGKS, &
                         HEAD, X1, X2, Y1, Y2, &
                         PTITLE, XTITLE, YTITLE, &
                         AXES, GSAVE)
      INTEGER,             INTENT (IN) :: JARROW
      INTEGER,             INTENT (IN) :: IARROW(JARROW), &
                                          IKOLOR(JARROW), &
                                          LCOLOR, NGKS
      DOUBLE PRECISION,    INTENT (IN) :: HEAD(JARROW), &
                                          X1(JARROW), X2(JARROW), &
                                          Y1(JARROW), Y2(JARROW)
      CHARACTER (LEN = *), INTENT (IN) :: PTITLE, XTITLE, YTITLE
      LOGICAL,             INTENT (IN) :: AXES, GSAVE
 
IARROW: Arrow type, use 1.
IKOLOR: Arrow colour.
JARROW: Grid size.
LCOLOR: Background colour.
  NGKS: GKS transformation number, use 0.
  HEAD: Size of arrow head.
    X1: Head position.
    X2: Tail position.
    Y1: Head position.
    Y2: Tail position.
PTITLE: Plot title.
XTITLE: X legend.
YTITLE: Y legend.
  AXES: Use .true.
 GSAVE: Use .true.

Back to Subroutines or Menu


Plot error bars

      SUBROUTINE GKSEB4 (L1, L2, L3, L4, M1, M2, M3, M4, &
                         N1, N2, N3, N4, &
                         X1, X2, X3, X4, &
                         YH1, YH3, YL1, YL3, Y1, Y2, Y3, Y4, &
                         PTITLE, XTITLE, YTITLE, &
                         AXES, GSAVE)
      INTEGER,             INTENT (IN) :: L1, L2, L3, L4, &
                                          M1, M2, M3, M4, &
                                          N1, N2, N3, N4
      DOUBLE PRECISION,    INTENT (IN) :: X1(*), X2(*), &
                                          X3(*), X4(*), &
                                          YH1(*), YH3(*), &
                                          YL1(*), YL3(*), &
                                          Y1(*), Y2(*), &
                                          Y3(*), Y4(*)
      CHARACTER (LEN = *), INTENT (IN) :: PTITLE, XTITLE, YTITLE
      LOGICAL,             INTENT (IN) :: AXES, GSAVE
 
The subroutine is designed to fit up to two sets of data with error bars
and up to two best fit curves. Usually X1, Y1, YH1, YL1 would be data for one
components and X2, Y2 would be the best-fit curve, etc., but actually all four
components are independent.
 
L1 to L4: Line type (see GKS001).
M1 to M4: Symbol type (see GKS001).
N1 to N4: Number of points to be plotted.
X1 to X4: X-coordinates.
     YH1: Upper error bar for Y1.
     YL1: Lower error bar for Y1.
     YH3: Upper error bar for Y3.
     YL3: Lower error bar for Y3.
Y1 to Y4: Y-coordinates.
  PTITLE: Plot title.
  XTITLE: X legend subtitle.
  YTITLE: Y legend subtitle.
    AXES: Use .TRUE.
   GSAVE: Use .TRUE.

Back to Subroutines or Menu


Plot n data sets

SUBROUTINES: SMPLOT, DELTMP

Subroutine SMPLOT requires a number of files containing data for plotting, together with colours, line types, symbol types, and titles, then it displays a composite graph. The data files must be consistent types for plotting and in Simfit format.

      SUBROUTINE SMPLOT (JFILES, LFILES, MFILES, NFILES, &
                         FILES, TITLES)
      INTEGER,             INTENT (IN) :: NFILES
      INTEGER,             INTENT (IN) :: JFILES(NFILES), &
                                          LFILES(NFILES), &
                                          MFILES(NFILES)
      CHARACTER (LEN = *), INTENT (IN) :: FILES(NFILES), TITLES(4)
 
JFILES: Colours (see PALETT).
LFILES: Line types (see GKS001).
MFILES: Symbol types (see GKS001).
NFILES: Number of files.
 FILES: Filenames of acceptable Simfit-format data files.
        2 columns (x,y) for standard plots (any column 3 will be ignored).
        4 columns (x,y1,y2,y3) for vertical error bars.
        6 columns (x1 x2,x3,y1,y2,y3) for slanting error bars.
TITLES: TITLES(1) = Plot title.
        TITLES(2) = X-legend.
        TITLES(3) = Y-legend.
        TITLES(4) not referenced.

Often temporary files are created for plotting data using subroutine GETTMP, and in such circumstances it is advisable to call subroutine DELTMP to delete all temporary files like f$123456.tmp in the %TEMP% folder.

      SUBROUTINE DELTMP

Back to Subroutines or Menu


Plot a pie chart

Subroutine PCPLOT can be called with ISEND = 1 when only the vector and relative size of the positive elements would be used, as the area of the segments is proportional to the size of the positive elements. When called with ISEND = 2 all the arguments will be used. Note that FACT(i) is the centrifugal displacement of segment i and would normally be somewhere between 0 and 1.

      SUBROUTINE PCPLOT (ISEND, IFILLV, IHUEV, NVEC, &
                         FACT, XVEC, &
                         LVEC, TVEC)
      INTEGER,             INTENT (IN) :: NVEC
      INTEGER,             INTENT (IN) :: ISEND, IFILLV(NVEC), &
                                          IHUEV(NVEC)
      DOUBLE PRECISION,    INTENT (IN) :: FACT(NVEC), XVEC(NVEC)
      CHARACTER (LEN = *), INTENT (IN) :: LVEC(NVEC), TVEC
 
 ISEND: ISEND = 1: default type pie chart.
        ISEND = 2: fully specified pie chart.
IFILLV: Segment fill styles     (if ISEND = 2).
        0  no display
        1  empty
        2  solid
        3  upward diagonals
        4  downward diagonals
        5  criss cross
        6  horizontal
        7  vertical
        8  dashes
        9  dots
        10 dots-dashes
 IHUEV: Segment colours         (if ISEND = 2) (see PALETT).
  NVEC: Dimension of vector.
  FACT: Vector of displacements (if ISEND = 2).
  XVEC: Vector (XVEC(i) > 0).
  LVEC: Segment labels          (if ISEND = 2).
  TVEC: Title.

Back to Subroutines or Menu


Plot a bar chart

The NROWS by NCOLS matrix supplied to subroutine BCPLOT will be used to create a bar chart with NROWS groups, each with NCOL bars. The bar chart labels, colours and fill styles will be taken from the default set unless ISEND = 2 when the LABELS supplied will be used as group labels.

      SUBROUTINE BCPLOT (ISEND, NCOL, NRMAX, NROW, &
                         XMAT, &
                         LABELS, TITLES)
      INTEGER,             INTENT (IN) :: ISEND, NCOL, NRMAX, NROW
      DOUBLE PRECISION,    INTENT (IN) :: XMAT(NRMAX,NCOL)
      CHARACTER (LEN = *), INTENT (IN) :: LABELS(NROW), TITLES(4)
 
 ISEND: ISEND = 1: default type bar chart.
        ISEND = 2: bar chart using LABELS supplied.
  NCOL: Number of columns.
 NRMAX: Leading dimension.
  NROW: Number of rows.
  XMAT: Matrix of values.
LABELS: Used as labels if ISEND = 2.
TITLES: TITLE(1) = title.
        TITLE(2) = X-legend.
        TITLE(3) = Y-legend.
        TITLE(4) not used.

Back to Subroutines or Menu


Plot as boxes and whiskers

Data for BWPLOT must consist of a vector of data values XVEC, and a vector NOBS consisting of the number of items per set. As long as there are at least 4 items in each of the NSET sets of data, BWPLOT will analyse the sets sequentially and create a box and whisker plot with median, quartiles, and range for each set.

      SUBROUTINE BWPLOT (ISEND, NOBS, NSET, NVEC, &
                         XVEC, &
                         LABELS, TITLES)
      INTEGER,             INTENT (IN) :: NSET, NVEC
      INTEGER,             INTENT (IN) :: ISEND, NOBS(NSET)
      DOUBLE PRECISION,    INTENT (IN) :: XVEC(NVEC)
      CHARACTER (LEN = *), INTENT (IN) :: LABELS(NSET), TITLES(4)
 
 ISEND: ISEND = 1: use default configuration labels.
        ISEND = 2: use labels from argument list.
  NOBS: Observations per set(i), NOBS(i) >= 4.
  NSET: Number of sets of data.
  NVEC: Total number of items, NVEC >= sum NOBS(i).
  XVEC: Vector of values i = 1, NVEC.
LABELS: Used as labels if ISEND = 2.
TITLES: TITLE(1) = title.
        TITLE(2) = X-legend.
        TITLE(3) = Y-legend.
        TITLE(4) not used.

Back to Subroutines or Menu


Plot as bars/symbols plus error bars

Data for EBPLOT must consist of a vector of data values XVEC, and a vector NOBS consisting of the number of items per set. As long as there are at least 2 items in each of the NSET sets of data, EBPLOT will analyse the sets sequentially and create a bar or symbol plot with error bars.

      SUBROUTINE EBPLOT (ISEND, NOBS, NSET, NVEC, &
                         XVEC, &
                         LABELS, TITLES)
      INTEGER,             INTENT (IN) :: NSET, NVEC
      INTEGER,             INTENT (IN) :: ISEND, NOBS(NSET)
      DOUBLE PRECISION,    INTENT (IN) :: XVEC(NVEC)
      CHARACTER (LEN = *), INTENT (IN) :: LABELS(NSET), TITLES(4)
 
 ISEND: ISEND = 1: use default configuration labels.
        ISEND = 2: use labels from argument list.
  NOBS: Observations per set(i), NOBS(i) >= 2.
  NSET: Number of sets of data.
  NVEC: Total number of items, NVEC >= sum NOBS(i).
  XVEC: Vector of values i = 1, NVEC.
LABELS: Used as labels if ISEND = 2.
TITLES: TITLE(1) = title.
        TITLE(2) = X-legend.
        TITLE(3) = Y-legend.
        TITLE(4) not used.

Back to Subroutines or Menu


Plot a 2D scatter plus labels

      SUBROUTINE LBPLOT (N, &
                         X, Y, &
                         PTITLE, WORDX, XTITLE, YTITLE)
      INTEGER,             INTENT (IN) :: N
      DOUBLE PRECISION,    INTENT (IN) :: X(N), Y(N)
      CHARACTER (LEN = *), INTENT (IN) :: PTITLE, WORDX(N), XTITLE, &
                                          YTITLE
 
     N: Number of points.
     X: X-coordinate.
     Y: Y-coordinate.
PTITLE: Plot title.
 WORDX: Labels.
XTITLE: X-legend.
YTITLE: Y-legend.

Back to Subroutines or Menu


Plot sample cumulative plus best-fit cdf

Subroutine CDPLOT should be provided with an ordered sample and an array of exact or estimated best-fit pdf(t) values that covers the sample range. It then plots the sample cumulative plus exact or estimated best-fit cdf. Note that there should be (say) >= 20 points to estimate a best-fit pdf in a meaningful way, and as subroutine CDPLOT integrates the best-fit pdf by the trapezoidal method to show a smooth cdf curve, there should be (say) >= 10 best-fit pdf points.

      AUBROUTINE CDPLOT (NPDF, NRMAX, NSAMP, &
                         PDF, SAMPLE, T, X, Y, Z, &
                         PTITLE, XTITLE, YTITLE)
      INTEGER,             INTENT (IN)    :: NPDF, NRMAX, NSAMP
      DOUBLE PRECISION,    INTENT (IN)    :: PDF(NPDF), SAMPLE(NSAMP)
      DOUBLE PRECISION,    INTENT (INOUT) :: T(NPDF), X(2*NRMAX), &
                                             Y(2*NRMAX), Z(2*NRMAX)
      CHARACTER (LEN = *), INTENT (IN)    :: PTITLE, XTITLE, YTITLE
 
  NPDF: Number of pdf(t) values (>= 10 ?).
 NRMAX: Dimension of workspace (>= 2*nsamp).
 NSAMP: Size of sample (>= 20 ?).
   PDF: Best-fit (or exact) pdf(t) as calculated elsewhere.
SAMPLE: Sample (must be in nondecreasing order).
     T: Argument for pdf (any spacing as required).
 X,Y,Z: Workspaces for creating step curve.
PTITLE: Plot title.
XTITLE: X-legend.
YTITLE: Y-legend.

Back to Subroutines or Menu


Plot sample histogram plus best-fit pdf

Subroutine PDPLOT should be provided with an ordered sample and an array of exact or estimated best-fit pdf(t) values that covers the sample range. It then plots a histogram with the exact or estimated best-fit cdf. Note that there should be (say) >= 40 points to plot a histogram in a meaningful way. Then the subroutine PDPLOT creates the histogram and plots the best-fit pdf as a smooth curve, so there should be (say) >= 10 best-fit pdf points.

      SUBROUTINE PDPLOT (NBINS, NPDF, NRMAX, NSAMP, &
                         PDF, SAMPLE, T, X, Y, &
                         PTITLE, XTITLE, YTITLE)
      INTEGER,             INTENT (IN)    :: NBINS, NPDF, NRMAX, NSAMP
      DOUBLE PRECISION,    INTENT (IN)    :: PDF(NPDF), SAMPLE(NSAMP), &
                                             T(NPDF)
      DOUBLE PRECISION,    INTENT (INOUT) :: X(NRMAX), Y(NRMAX)
      CHARACTER (LEN = *), INTENT (IN)    :: PTITLE, XTITLE, YTITLE
 
 NBINS: Number of histogram bins (say nsamp/nbins >= 5)
  NPDF: Number of pdf(t) values (>= 10 ?)
 NRMAX: Dimension of workspace (>= 4*nbins)
 NSAMP: Size of sample (>= 20 ?)
   PDF: Best-fit (or exact) pdf(t) as calculated elsewhere
SAMPLE: Sample (must be in nondecreasing order)
     T: Argument for pdf (any spacing as required)
   X,Y: Workspaces for creating histogram
PTITLE: Plot title
XTITLE: X-legend
YTITLE: Y-legend

Back to Subroutines or Menu


Plot a histogram with error bars

Subroutine HIST01 must be called with coordinates X,Y for the centres and heights required for histogram bars. Also error bar spacings can be supplied to display user-chosen error bar spacings, and large workspace arrays have to be supplied due to the large number of possible histogram formats allowed.

      SUBROUTINE HIST01 (N, NH, NUMBER, &
                         E, X, XH, Y, YH, &
                         GSAVE)
      INTEGER,          INTENT (IN)    :: N, NH
      INTEGER,          INTENT (OUT)   :: NUMBER
      DOUBLE PRECISION, INTENT (IN)    :: E(N), X(N), Y(N)
      DOUBLE PRECISION, INTENT (INOUT) :: XH(NH), YH(NH)
      LOGICAL,          INTENT (IN)    :: GSAVE
 
     N: Number of histogram bins requested (N >= 1).
    NH: Maximum dimension of plotting arrays (NH >= 10*N + 1).
NUMBER: Number of actual plotting points.
     E: Error bar vertical spacing (E >= 0, e.g. t_{nu}*standard error).
     X: Centre of bins.
    XH: Workspace for plotting.
     Y: Height of bins (Y >= 0).
    YH: Workspace for plotting.
 GSAVE: Unused but set to .TRUE..

Back to Subroutines or Menu


Plot a dendrogram with theshold

After calling G03ECF the arguments are used to construct an X array of succesive dendrogram hooks which are then written to a file with the title %simfitdendrogramfile%. Subroutine SMPLOT then calls the simplot plotting routines which work out that a dendrogram is required from the title. Parameters are as returned from G03ECF except that THRESH = threshold to plot horizontal line as used for selecting subgroups in the Simfit package.

      SUBROUTINE DGPLOT (ILC, IUC, IORD, N, NRMAX, &
                         CD, THRESH, X, &
                         PTITLE, WORDX, XTITLE, YTITLE)
      INTEGER,             INTENT (IN)    :: N, NRMAX
      INTEGER,             INTENT (IN)    :: ILC(N - 1), IUC(N - 1), &
                                             IORD(N)
      DOUBLE PRECISION,    INTENT (IN)    :: CD(N - 1), THRESH
      DOUBLE PRECISION,    INTENT (INOUT) :: X(NRMAX,3)
      CHARACTER (LEN = *), INTENT (IN)    :: PTITLE, WORDX(N), XTITLE, &
                                             YTITLE
 
   ILC: As G03ECF.
   IUC: As G03ECF.
  IORD: As G03ECF.
     N: Number of observations.
 NRMAX: Dimension >= N.
    CD: As G03ECF.
THRESH: Dendrogram threshold for selecting subgroups.
     X: Workspace.
PTITLE: Plot title.
 WORDX: Labels.
XTITLE: X-legend.
YTITLE: Y-legend.

Back to Subroutines or Menu


Plot half-normal and normal scores

      SUBROUTINE HNPLOT (ISEND, NVEC, &
                         XVEC)
      INTEGER,          INTENT (IN) :: ISEND, NVEC
      DOUBLE PRECISION, INTENT (IN) :: XVEC(NVEC)
 
ISEND: ISEND = 1: half-normal.
       ISEND = 2: normal.
 NVEC: Size of vector (NVEC > 3).
 XVEC: Vector to be plotted.

Back to Subroutines or Menu


Plot bivariate normal confidence ellipses

SUBROUTINES: ELIPS1, NAGSUB
      SUBROUTINE ELIPS1 (N, &
                         RESUL, X, Y)
      INTEGER,          INTENT (IN) :: N
      DOUBLE PRECISION, INTENT (IN) :: RESUL(5), X(N), Y(N)
 
    N: Dimension.
RESUL: As from a previous call to G02CAF.
       RESUL(1) = XBAR ... sample mean for X.
       RESUL(2) = YBAR ... sample mean for Y.
       RESUL(3) = XSIG ... sample standard deviation for X.
       RESUL(4) = YSIG ... sample standard deviation for Y.
       RESUL(5) = R    ... sample correlation coefficient.
    X: X-data.
    Y: X-data.

In order to make the Simdem graphics routines free-standing a number of subroutines based on NAG calling sequences are provided and illustrated at various points, e.g. SIMDEM62. These routines have a final G added to the name to emphasize that they are not true NAG routines, only Simdem replacements. The following subroutines can be called from the Simdem GUI.

G01EAFG
G01EBFG
G01EEFG
G01FAFG
G01FBFG
G01FCFG
G01FDFG
G01FEFG
G02CAFG
G05CAFG
G05CBFG
G05CCFG
G05DDFG
S14ABFG
S14BAFG
S15ABFG
S15ADFG
X01AAFG
X02AJFG
X02AMFG

Back to Subroutines or Menu


Plot rows and columns from a matrix

Subroutine MTPLOT must be supplied with a matrix and it can then display a selection of 1, 2, or 3 dimensional plots of rows and/or columns together with labels if required. It would normally be used to inspect rows or columns for a supposed functional relationship.

      SUBROUTINE MTPLOT (ISEND, NCMAX, NCOL, NRMAX, NROW, &
                         A)
      INTEGER,          INTENT (IN) :: ISEND, NCMAX, NCOL, NRMAX, &
                                       NROW
      DOUBLE PRECISION, INTENT (IN) :: A(NRMAX,NCMAX)
 
ISEND: ISEND = 1: only a vector is supplied
       ISEND = 2: only columns can be plotted
       ISEND = 3: only rows can be plotted
       ISEND = 4: rows or columns can be plotted
NCMAX: Dimension
 NCOL: Number of columns supplied
NRMAX: Dimension
 NROW: Number of rows supplied
    A: Matrix of values for plotting

Back to Subroutines or Menu


Plot a parametric curve r = r(theta)

Subroutine RTPLOT must be called with a parametric curve of the form R = R(THETA). It then transforms (R,THETA) into (X,Y) and plots the curve (X,Y) space but note that R is returned as Y and THETA as X.

      SUBROUTINE RTPLOT (N, &
                         R, THETA)
      INTEGER,          INTENT (IN)    :: N
      DOUBLE PRECISION, INTENT (INOUT) :: R(N), THETA(N)
 
    N: Must be > 2
    R: Returned as Y
THETA: Returned as X

Back to Subroutines or Menu


Plot a vector field with labels

Simdem can plot a variety of graphical objects that require two sets of coordinates, e.g. the head and tail of an arrow, opposite corners of a rectangle, extreme positions of an ellipse, etc. The arrow type required to define such arrow/line/box type objects is as follows.

 1 Arrow: normal
 2 Arrow: hollow
 3 Arrow: filled
 4 Line: normal
 5 Line: dashed
 6 Line: dotted
 7 Line: dash-dot
 8 Rectangle: slanting, outline
 9 Rectangle: slanting, opaque
 10 Rectangle: slanting, filled
 11 Vector arrow heads
 12 Hook: connecting, bridge
 13 Box: horizontal, outline
 14 Box: horizontal, opaque
 15 Box: horizontal, filled
 16 Arrow: dashed
 17 Symbol: plus sign
 18 Symbol: multiply sign
 19 Symbol: asterisk
 20 Script arrow: solid
 21 Script arrow: dashed
 22 Ellipse: outline
 23 Ellipse: filled
 Otherwise Suppressed

Subroutine GKSVF3 is able to create many styles of vetcor field plots in which every object has a defined position, type, colour, and so on, together with a label if required. This is very useful for displaying phase portraits of differential eaquations where the arrow colour depends on direction and the arrow size on magnitude of a derivative, or as in biplots where the arrow is calculated from the singular value decomposition.

      SUBROUTINE GKSVF3 (IARROW, IKOLOR, JARROW, JCOLOR, LCOLOR, M, &
                         NGKS, &
                         HEAD, SIZE1, X1, X2, X3, Y1, Y2, Y3, &
                         LABEL1, LABEL2, &
                         PTITLE, XTITLE, YTITLE, &
                         AXES, GSAVE)
      INTEGER,             INTENT (IN) :: JARROW
      INTEGER,             INTENT (IN) :: IARROW(JARROW), &
                                          IKOLOR(JARROW), JCOLOR, &
                                          LCOLOR, M, NGKS
      DOUBLE PRECISION,    INTENT (IN) :: HEAD(JARROW), SIZE1, &
                                          X1(JARROW), X2(JARROW), &
                                          X3(JARROW), &
                                          Y1(JARROW), Y2(JARROW), &
                                          Y3(JARROW)
      CHARACTER (LEN = *), INTENT (IN) :: LABEL1(*), LABEL2(*)
      CHARACTER (LEN = *), INTENT (IN) :: PTITLE, XTITLE, YTITLE
      LOGICAL,             INTENT (IN) :: AXES, GSAVE
 
IARROW: Type of arrow.
IKOLOR: Colour of arrow.
JARROW: Number of arrows.
JCOLOR: Colour for text.
LCOLOR: Backgound colour.
     M: Label displacement type (usually 0).
  NGKS: Transformation (usually 0).
  HEAD: Size of arrow head.
 SIZE1: Size of labels and also string displacement factor if M > 0.
    X1: Head.
    X2: Tail.
    X3: Label coordinate.
    Y1: Head.
    Y2: Tail.
    Y3: Label coordinate.
LABEL1: Label character string.
LABEL2: Plotting key for subscripts, etc. (see pscodes.pdf).
PTITLE: Plot title.
XTITLE: X-legend.
YTITLE: Y-legend.
AXES  : Unused.
GSAVE : Unused.

Back to Subroutines or Menu


Summary of plotting routines

GKS012 ... plot up to 12 data sets
GKST12 ... plot up to 12 transformed data sets
GKSCB4 ... plot error bars (no advanced options)
GKSHB4 ... plot horizontal error bars
TSPLOT ... plot time series data
SBPLOT ... plot a stacked bar chart
XFONTS ... plot the Simfit font substitution maps
RESDEF ... restore Simfit plotting defaults
EDITPS ... edit PostScript files and make collages
DBPLOT ... plot with LHS and RHS axes (a double plot)
GSTYLE ... define/retrieve plot configuration parameters (all)
GRFLGL ... define/retrieve plot configuration parameters (advanced)
GKSLGL ... define/retrieve plot configuration parameters (simple)
SYMCFG ... define/retrieve plot symbols, lines, colours
LABCFG ... define/retrieve plot labels, fill styles, colours
DEFKEY ... define/retrieve character configuration keys
TSIZES ... define/retrieve font sizes
DEFLAB ... define/retrieve arrays of labels or character keys
NSTEPS ... define/retrieve groups of data points to be omitted
CLOCK1 ... returns current clock time in seconds

Some of these routines are difficult to understand by simply reading the argument lists and will be best understood by running the examples provided for SIMDEM70 when using the [Run] command in simdem.exe.

For details of GKS012 see GKS004.

      SUBROUTINE GKS012 ( &
      L1,  L2,  L3,  L4,  L5,  L6,  L7,  L8,  L9,  L10,  L11,  L12, &
      M1,  M2,  M3,  M4,  M5,  M6,  M7,  M8,  M9,  M10,  M11,  M12, &
      N1D, N2D, N3D, N4D, N5D, N6D, N7D, N8D, N9D, N10D, N11D, N12D, &
      X1D, X2D, X3D, X4D, X5D, X6D, X7D, X8D, X9D, X10D, X11D, X12D, &
      Y1D, Y2D, Y3D, Y4D, Y5D, Y6D, Y7D, Y8D, Y9D, Y10D, Y11D, Y12D, &
      PTITLE, XTITLE, YTITLE, &
      AXES, GSAVE)
      INTEGER, INTENT (IN) :: &
      L1,  L2,  L3,  L4,  L5,  L6,  L7,  L8,  L9,  L10,  L11,  L12, &
      M1,  M2,  M3,  M4,  M5,  M6,  M7,  M8,  M9,  M10,  M11,  M12, &
      N1D, N2D, N3D, N4D, N5D, N6D, N7D, N8D, N9D, N10D, N11D, N12D
      DOUBLE PRECISION, INTENT (IN) :: &
      X1D(*), X2D(*), X3D(*), X4D(*),   X5D(*),  X6D(*), &
      X7D(*), X8D(*), X9D(*), X10D(*), X11D(*), X12D(*)
      DOUBLE PRECISION, INTENT (IN) :: &
      Y1D(*), Y2D(*), Y3D(*), Y4D(*),   Y5D(*),  Y6D(*), &
      Y7D(*), Y8D(*), Y9D(*), Y10D(*), Y11D(*), Y12D(*)
      CHARACTER (LEN = *), INTENT (IN) :: PTITLE, XTITLE, YTITLE
      LOGICAL, INTENT (IN) :: AXES, GSAVE

For details of GKST12 see GKST04.

      SUBROUTINE GKST12 (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, &
                         L12, &
                         M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, &
                         M12, &
                         N1D, N2D, N3D, N4D, N5D, N6D, N7D, N8D, N9D, &
                         N10D, N11D, N12D, &
                         A, &
                         X1D, X2D, X3D, X4D, X5D, X6D, X7D, X8D, X9D, &
                         X10D, X11D, X12D, &
                         Y1D, Y2D, Y3D, Y4D, Y5D, Y6D, Y7D, Y8D, Y9D, &
                         Y10D, Y11D, Y12D, &
                         PTITLE, XTITLE, YTITLE, &
                         AXES, SAVEIT)
      INTEGER, INTENT (IN) :: &
                 L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, &
                 M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, &
                 N1D, N2D, N3D, N4D, N5D, N6D, N7D, N8D, N9D, N10D, &
                 N11D, N12D
      DOUBLE PRECISION, INTENT (IN) :: A
      DOUBLE PRECISION, INTENT (IN) :: &
                       X1D(*), X2D(*), X3D(*), X4D(*), X5D(*), X6D(*), &
                       X7D(*), X8D(*), X9D(*), X10D(*), X11D(*), X12D(*)
      DOUBLE PRECISION, INTENT (IN) :: &
                       Y1D(*), Y2D(*), Y3D(*), Y4D(*), Y5D(*), Y6D(*), &
                       Y7D(*), Y8D(*), Y9D(*), Y10D(*), Y11D(*), Y12D(*)
      CHARACTER, INTENT (IN) :: PTITLE*(*), XTITLE*(*), YTITLE*(*)
      LOGICAL, INTENT (IN) :: AXES, SAVEIT

GKSCB4 is similar to GKSEB4 but has the advanced options disabled, which avoids confusing users when GKSCB4 is used cyclically to generate plots with alternative definitions for calculating error bars.

      SUBROUTINE GKSCB4 (L1, L2, L3, L4, M1, M2, M3, M4, &
                         N1D, N2D, N3D, N4D, &
                         X1D, X2D, X3D, X4D, &
                         YH1D, YH3D, YL1D, YL3D, Y1D, Y2D, Y3D, Y4D, &
                         PTITLE, XTITLE, YTITLE, &
                         AXES, GSAVE)
      INTEGER,             INTENT (IN) :: L1, L2, L3, L4, &
                                          M1, M2, M3, M4, &
                                          N1D, N2D, N3D, N4D
      DOUBLE PRECISION,    INTENT (IN) :: X1D(*), X2D(*), &
                                          X3D(*), X4D(*), &
                                          YH1D(*), YH3D(*), &
                                          YL1D(*), YL3D(*), &
                                          Y1D(*), Y2D(*), &
                                          Y3D(*), Y4D(*)
      CHARACTER (LEN = *), INTENT (IN) :: PTITLE, XTITLE, YTITLE
      LOGICAL,             INTENT (IN) :: AXES, GSAVE

GKSHB4 is similar to GKSEB4 except that the axes are reversed to display horizontal error bars and there are other options dictated by ITYPE to create forest plots and other types of log odds and log odds ratio plots.

      SUBROUTINE GKSHB4 (ITYPE, &
                         L1, L2, L3, L4, M1, M2, M3, M4, &
                         N1D, N2D, N3D, N4D, &
                         X1D, X2D, X3D, X4D, &
                         YH1D, YH3D, YL1D, YL3D, Y1D, Y2D, Y3D, Y4D, &
                         PTITLE, YTITLE, XTITLE, &
                         AXES, GSAVE)
 
      INTEGER,             INTENT (IN) :: ITYPE, &
                                          L1, L2, L3, L4, &
                                          M1, M2, M3, M4, &
                                          N1D, N2D, N3D, N4D
      DOUBLE PRECISION,    INTENT (IN) :: X1D(*), X2D(*), X3D(*), X4D(*)
      DOUBLE PRECISION,    INTENT (IN) :: YH1D(*), YH3D(*), YL1D(*), &
                                          YL3D(*)
      DOUBLE PRECISION,    INTENT (IN) :: Y1D(*), Y2D(*), Y3D(*), Y4D(*)
      CHARACTER (LEN = *), INTENT (IN) :: PTITLE(2), XTITLE(2), &
                                          YTITLE(2)
      LOGICAL,             INTENT (IN) :: AXES, GSAVE
 
ACTION: Call GKS as for GKSEB4 except as follows:
        ITYPE = 0: no transformation
        ITYPE = 1: y to log base e of y
        ITYPE = 2: y to log base 10 of y

Subroutine TSPLOT can create time series plots in a wide variety of formats as dictated by ISEND.

      SUBROUTINE TSPLOT (ISEND, LVEC, MVEC, NVEC, &
                         DELTA, ERROR1, ERROR2, START, XVEC, &
                         PTITLE, XTITLE, YTITLE)
      INTEGER,             INTENT (IN) :: ISEND, LVEC, MVEC, NVEC
      DOUBLE PRECISION,    INTENT (IN) :: DELTA, ERROR1(NVEC), &
                                          ERROR2(NVEC), START, &
                                          XVEC(NVEC)
      CHARACTER (LEN = *), INTENT (IN) :: PTITLE, XTITLE, YTITLE
 
 ISEND = 1: Ask for delta, start, then time series type plot.
            This line-joins Y = XVEC at chosen intervals.
 ISEND = 2: Assign DELTA, START, then time series type plot.
            This line-joins Y = XVEC at specified intervals
 ISEND = 3: Ask for DELTA, START, then rod type plot.
            This plots Y = XVEC as rods at chosen intervals.
 ISEND = 4: DELTA, START defaults, then rod type plot.
            This plots Y = XVEC as rods at specified intervals.
 ISEND = 5: DELTA, START defaults, then autocorrelation type plot.
            The zero point is added.
 ISEND = 6: DELTA, START defaults, then autocorrelations plus errors.
            The zero point is added.
  LVEC = Linetype.
  MVEC = Symbol type.
  NVEC = Number of XVEC values.
 DELTA = Increment (only used if ISEND = 2).
ERROR1 = Error limits (only used if ISEND = 6).
ERROR1 = Error limits (only used if ISEND = 6).
 START = Start value (only used if ISEND = 2).
  XVEC = Values (isend = 1, 2) or correlations (ISEND = 3).
PTITLE = Plot title.
XTITLE = X-legend.
YTITLE = Y-legend.

Subroutine SBPLOT is like BCPLOT except that the bar chart has stacked bars instead of groups of side-by-side bars.

      SUBROUTINE SBPLOT (ISEND, NCOL, NRMAX, NROW, &
                         XMAT, &
                         LABELS, TITLES)
      INTEGER,             INTENT (IN) :: ISEND, NCOL, NRMAX, NROW
      DOUBLE PRECISION,    INTENT (IN) :: XMAT(NRMAX,NCOL)
      CHARACTER (LEN = *), INTENT (IN) :: LABELS(NROW), TITLES(4)

Subroutine XFONTS has no arguments but it displays the font substitution maps that Simdem can use for subscripts, superscripts, accents, and maths symbols.


Subroutine RESDEF restores the default graphics parameters and is intended to be used as part of a clean up operation after users have redefined the defaults using subroutines demonstrated in SIMDEM70. It makes sure all the plotting parameters are intialised and it also restores plot style parameters to those set by GSTYLE and stored in w_graphs.cfg

      SUBROUTINE RESDEF (ITYPE)
      INTEGER, INTENT (IN) :: ITYPE
 
ITYPE = 1: simple graphics
ITYPE = 2: advanced graphics
ITYPE = 3: symbol and labels
ITYPE = 4: all, i.e. 1, 2, and 3

The subroutine EDITPS that is demonstrated in SIMDEM70 takes no arguments but merely sets up the interface to subroutine EDITPS_DRIVER so it can find the demonstration *.tfl and *.eps files. EDITPS_DRIVER is a user-callable interface to a DLL version of the Simfit program w_editps.exe that can edit PS files, and make structured or arbitrary collages from Simfit *.eps files. Subroutine EDITPS_DRIVER can do a limited number of things with arbitrary *.eps files but only has full functionality with Simfit *.eps files that have the standard default size and orientation.


Subroutine DBPLOT is a special version of SMPLOT that allows a double axis plot where files identified by LEFT_AXIS(i) = .TRUE. are plotted on a LHS Y-axis and files with LEFT_AXIS(i) = .FALSE. are plotted using a scale defined by a RHS Z-axis.

      SUBROUTINE DBPLOT (JFILES, LFILES, MFILES, NFILES, &
                         FILES, TITLES, &
                         LEFT_AXIS)
      INTEGER,             INTENT (IN) :: NFILES
      INTEGER,             INTENT (IN) :: JFILES(NFILES), &
                                          LFILES(NFILES), &
                                          MFILES(NFILES)
      CHARACTER (LEN = *), INTENT (IN) :: FILES(NFILES), TITLES(4)
      LOGICAL,             INTENT (IN) :: LEFT_AXIS(NFILES)

Subroutine GSTYLE retrieves plotting parameters from w_graphics.cfg and, if called with STORE = .TRUE., it displays a control to set values interactively. It can be used to retrieve or store both advanced and simple 2D graphics configuration parameters.

      SUBROUTINE GSTYLE (N, &
                         LA, LS, STORE)
      INTEGER, INTENT (IN)  :: N
      LOGICAL, INTENT (IN)  :: STORE
      LOGICAL, INTENT (OUT) :: LA(N), LS(N)
 
    N: Dimension of LA and LS.
   LA: Advanced logicals.
   LS: Simple logicals.
STORE: STORE = .FALSE. then just retrieve current values.
       STORE = .TRUE. then display check box to change defaults and
                      return the new defaults.
it is assumed that there will only be up to 10 simple parameters and
up to NMAX advanced parameters. The configuration file w_graphs.cfg
allows up to at least 15 parameters as follows.
LA(1)  BOXIT      ... box round data plotted
LA(2)  FRAME      ... frame round outside edge of diagram
LA(3)  OFFSET     ... offset intersection of axes at origin
LA(4)  XGRID      ... grid marks at X-axis tick marks
LA(5)  YGRID      ... grid marks at Y-axis tick marks
LA(6)  XHAIRS     ... extra axes intersecting at (0,0)
LA(7)  TICK MARKS ... .TRUE. = in (KTIC = 3), .FALSE. = out (KTIC = 1)
LA(8)  Display an information panel
LA(9)  Panel at RHS of plot
LA(10) Display line-types in panel
LA(10) Display symbol-types in panel
LA(12) Border round plot
LS(1)  BOXIT      ... box round data plotted
LS(2)  FRAME      ... frame round outside edge of diagram
LS(3)  OFFSET     ... offset intersection of axes at origin
LS(4)  XGRID      ... grid marks at X-axis tick marks
LS(5)  YGRID      ... grid marks at Y-axis tick marks
LS(6)  XHAIRS     ... extra axes intersecting at (0,0)
LS(7)  TICK MARKS ... .TRUE. = in (KTIC = 3), .FALSE. = out (KTIC = 1)

Subroutine GRFLGL can store or retrieve plotting parameters for advanced 2D graphics. Data are stored in w_graphics.cfg.

      SUBROUTINE GRFLGL (ISEND, NLGL, &
                         VARLGL)
      INTEGER, INTENT (IN)    :: ISEND, NLGL
      LOGICAL, INTENT (INOUT) :: VARLGL(NLGL)
 
 ISEND: ISEND = 1: install defaults.
        ISEND = 2: set defaults from menu.
        ISEND = 3: retrieve current defaults.
  NLGL: must be >= 7.
VARLGL: control advanced graphics as follows
 (1) Box round data plotted                 ... default = .true.
 (2) Frame round outside of figure          ... default = .false.
 (3) Offset X, Y axes                       ... default = .true.
 (4) Grid at X-tic marks parallel to Y axis ... default = .false.
 (5) Grid at Y-tic marks parallel to X axis ... default = .false.
 (6) Cross hairs at 0,0 if in range         ... default = .false.
 (7) Tick marks pointing in                 ... default = .true.
 (8) Display information panel              ... default = .false.
 (9) Information panel at side              ... default = .false.
(10) Display lines in panels                ... default = .true.
(11) Display symbols in panels              ... default = .true.
(12) Information panel at side              ... default = .false.

Subroutine GKSLGL can store or retrieve plotting parameters for simple 2D graphics. Data are stored in w_graphics.cfg.

     SUBROUTINE GKSLGL (ISEND, NLGL, &
                        VARLGL)
      INTEGER, INTENT (IN)    :: ISEND, NLGL
      LOGICAL, INTENT (INOUT) :: VARLGL(NLGL)
 
ISEND: ISEND = 1: install defaults
       ISEND = 2: set defaults from menu
       ISEND = 3: retrieve current defaults
  NLGL: must be >= 7
VARLGL: control simple graphics as follows
(1) Box round data plotted                 ... default = .true.
(2) Frame round outside of figure          ... default = .false.
(3) Offset X, Y axes                       ... default = .true.
(4) Grid at X-tic marks parallel to Y axis ... default = .false.
(5) Grid at Y-tic marks parallel to X axis ... default = .false.
(6) Cross hairs at 0,0 if in range         ... default = .false.
(7) Tick marks pointing in                 ... default = .true.

Subroutine SYMCFG is a user friendly interface to configure symbols, colours, line types, symbol sizes and line thicknesses for advanced 2D graphics. The configuration parameters referenced by this subroutine are stored in w_symbol.cfg.

      SUBROUTINE SYMCFG (ISEND, JCOLOR, KCOLOR, L, M, N, &
                         SIZES, THICK)
      INTEGER,          INTENT (IN)    :: ISEND, N
      INTEGER,          INTENT (INOUT) :: JCOLOR(N), KCOLOR(N), &
                                          L(N), M(N)
      DOUBLE PRECISION, INTENT (INOUT) :: SIZES(N), THICK(N)
 
 ISEND: ISEND = 1 ... retrieve current defaults   ... return new values.
        ISEND = 2 ... edit defaults interactively ... return new values.
        ISEND = 3 ... restore built-in defaults   ... return new values.
        ISEND = 4 ... over-write current defaults ... use values supplied.
JCOLOR: Symbol colours.
KCOLOR: Feature colours.
     L: Line styles.
     M: Symbol styles.
     N: Dimension.
 SIZES: Symbol sizes.
 THICK: Line thicknesses.

Subroutine LABCFG is a user friendly interface to configure colours, fill styles, segment/bar/plot labels and information panel labels for 2D advanced graphics. The configuration parameters referenced by this subroutine are stored in w_labels.cfg.

      SUBROUTINE LABCFG (ISEND, JCOLOR, JFILL, N, &
                         LABEL, PANEL)
      INTEGER,             INTENT (IN)    :: ISEND, N
      INTEGER,             INTENT (INOUT) :: JCOLOR(N), JFILL(N)
      CHARACTER (LEN = *), INTENT (INOUT) :: LABEL(N), PANEL(N)
 
 ISEND: ISEND = 1 ... retrieve current defaults   ... return new values.
        ISEND = 2 ... edit defaults interactively ... return new values.
        ISEND = 3 ... restore built-in defaults   ... return new values.
        ISEND = 4 ... over-write current defaults ... use values supplied.
JCOLOR: Colours.
 JFILL: Fill styles.
     N: Dimension.
 LABEL: Piechart segment or barchart labels.
 PANEL: Information panel labels.

Subroutine DEFKEY can be used to install a new character key or retrieve a stored character key, where the character key controls the way a character string is displayed and printed in 2D advanced graphics. Each character string has an associated character key to specify subscripts, superscripts, maths font, etc. as explained in the Simfit reference manual and the document psfonts.pdf. Usually JSEND would be in the range 1 to 6 for titles, 1 to 20 for information panels and 1 to 2000 for other labels. Note that when ISEND = 1 the case JSEND = 6 refers to the subsidiary title character string, not the key which is JSEND = 5. When STORE = .TRUE. DEFKEY does not alter the default values stored in w_labels.cfg.

      SUBROUTINE DEFKEY (ISEND, JSEND, &
                         KEY, &
                         STORE)
      INTEGER,             INTENT (IN)    :: ISEND, JSEND
      CHARACTER (LEN = *), INTENT (INOUT) :: KEY
      LOGICAL,             INTENT (IN)    :: STORE
 
ISEND: ISEND = 1: Titles as follows
                  JSEND = 1: main title font-key.
                  JSEND = 2: x-legend font-key.
                  JSEND = 3: y_legend font-key.
                  JSEND = 4: z-legend font-key.
                  JSEND = 5: subsidary title font-key.
                  JSEND = 6: subsidary title string.
       ISEND = 2: Information panels.
       ISEND = 3: Arbitrary labels.
       isend = 4: X_tic labels.
JSEND: Index for the key except for the case ISEND = 1.
  KEY: Character configuration key.
STORE: STORE = .TRUE. then archive the value supplied.
       STORE = .FALSE. then retrieve the archived value.

Subroutine TSIZES can be called to make a temporary change to the size of font used when plotting in 2D advanced graphics. All the font size are initialised to 1 on startup but this can be altered interactively by editing the value in w_ps.cfg using the [PS] or [Win] button when the plot is displayed.

      SUBROUTINE TSIZES (ITYPE, &
                         FSIZE, &
                         STORE)
      INTEGER,          INTENT (IN)    :: ITYPE
      DOUBLE PRECISION, INTENT (INOUT) :: FSIZE
      LOGICAL,          INTENT (IN)    :: STORE
 
ITYPE: Type of font required as follows
        1: title (main)
        2: X-legend
        3: Y-legend
        4: Z-legend
        5: X-text-labels
        6: Y-text-labels
        7: Z-text-labels
        8: bar chart labels
        9: pie chart labels
       10: panel labels
       11: data point labels
       12: title (extra)
       13: x-axis numbers
       14: y-axis numbers
       15: z-axis numbers
FSIZE: Font size.
       STORE = .TRUE. then install
       STORE = .FALSE. then just return the stored value
STORE: Type of action required as above.

Subroutine DEFLAB provides a convenient mechanism for setting or retrieving sets of N labels or N character keys for 2D advanced graphics, where N is less than or equal to 20. When STORE = .TRUE. DEFLAB alters the default values stored in w_labels.cfg.

      SUBROUTINE DEFLAB (ISEND, N, &
                         TEXT, &
                         STORE)
      INTEGER,             INTENT (IN)    :: ISEND, N
      CHARACTER (LEN = *), INTENT (INOUT) :: TEXT(N)
      LOGICAL,             INTENT (IN)    :: STORE
 
ISEND: ISEND = 1 ... use/install default plot-labels.
       ISEND = 2 ... use/install default panel-labels.
       ISEND = 3 ... use/install default plot-label keys.
       ISEND = 4 ... use/install default panel-label keys.
       ISEND = 5 ... use/install default X_tic labels.
       ISEND = 6 ... use/install default X_tic label keys.
 TEXT: ISEND = 1 ... contains/returns default plot-labels.
       ISEND = 2 ... contains/returns default panel-labels.
       ISEND = 3 ... contains/returns default plot-label keys.
       ISEND = 4 ... contains/returns default panel-label keys.
       ISEND = 5 ... contains/returns default X_tic labels.
       ISEND = 6 ... contains/returns default X_tic label keys.
STORE: STORE = .TRUE. store TEXT.
       STORE = .FALSE. retrieve TEXT.

Subroutine NSTEPS can be used when there exist very large data sets and it would be convenient to omit groups of NSTEP data points. Typically this could occur where plotting of machine-generated data is required to have all points joined by lines to display a continuous curve, but only a few points to be plotted as symbols so that the data can be identified. If a value of NSTEP > 0 is requested for a particular line or symbol, then intermediate groups of NSTEP data ponts will be suppresed, i.e. stepped over for that file. Note that the first and last data points are always plotted and any NSTEP values < 0 are re-set to 0.

      SUBROUTINE NSTEPS (ISEND, L_STEP, M_STEP, NFILES)
      INTEGER, INTENT (IN)    :: ISEND, NFILES
      INTEGER, INTENT (INOUT) :: L_STEP(NFILES), M_STEP(NFILES)
 
 
 ISEND: ISEND = 1 ... retrieve current values
        ISEND = 2 ... interactive control then return new values
        ISEND = 3 ... install new defaults using values supplied
        ISEND = 4 ... restore original defaults (all = 0)
L_STEP: NSTEP values for lines
M_STEP: NSTEP values for symbols
NFILES: Number of current files for plotting

      SUBROUTINE CLOCK1 (TIME)
      DOUBLE PRECISION, INTENT (OUT) :: TIME
 
TIME: current clock time in seconds, as used for timing a process
      by subtracting TIME before from TIME after the process.

      SUBROUTINE SPACE6 (NFILES, &
                         FNAME, &
                         PLOT_ARROWS, &
                         PLOT_LABELS, &
                         PLOT_LINES, &
                         PLOT_PERPENDICULARS, &
                         PLOT_SYMBOLS)
      INTEGER,             INTENT (IN)    :: NFILES
      CHARACTER (LEN = *), INTENT (INOUT) :: FNAME(NFILES)
      LOGICAL,             INTENT (IN)    :: PLOT_ARROWS, &
                                             PLOT_LABELS, &
                                             PLOT_LINES, &
                                             PLOT_PERPENDICULARS, &
                                             PLOT_SYMBOLS
 
ACTION: Draw one or several 3D space curves, scatter plots, or biplots

Back to Subroutines or Menu


Configure the Simfit DLLs

Subroutine CONFIG is used to configure the Simfit DLLs. This is very important if you want to control paths for printers, etc. Details are taken from and written to the Simfit configuration file w_simfit.cfg. Details are in the documents configure.txt and linux.txt. Simdem users should press [Check] to correct the paths to auxiliaries then [Apply] to overwrite the installation defaults.

      SUBROUTINE CONFIG (MODE, NVAL, &
                         CVAL)
      INTEGER,             INTENT (IN)    :: MODE
      INTEGER,             INTENT (INOUT) :: NVAL(12)
      CHARACTER (LEN = *), INTENT (INOUT) :: CVAL(12)
 
MODE: MODE = 0: just return arguments silently
      MODE = 1: set the arguments interactively
NVAL: Integer arguments
CVAL: Character arguments

Back to Subroutines or Menu


Print a text file

Subroutine FPRINT opens the Windows printer dialogue and allows users to copy selected text files to the printer. This version will not attempt to print Postscript or PDF files, or any special file types with standard extensions, like, .bat, .com, .exe, .dll, etc.

      SUBROUTINE FPRINT (LPTI, &
                         FNAME)
      INTEGER,            INTENT (IN) :: LPTI
      CHARACTER (LEN = *) INTENT (IN) :: FNAME
 
 LPTI: Parallel port, usually l.
       Note: In this version LPTI is not referenced but should
             be set equal to 1 in order to print to all types
             of remote and local printers.
FNAME: File name of a text file.

Back to Subroutines or Menu


Matrix read/write procedures

SUBROUTINES: MAT2IN, ISITMF, MATOUT

Subroutine MAT2IN would usually be called to read in a matrix X from FNAME that has been checked to be a valid Simfit data file, e.g. by a previous call to ISITMF.
See simdem66, simdem67, and simdem68 in order to appreciate how to use ISITMF, MATTRN, MAT2IN, MAT3IN, and MAT4IN to create a fully featured scheme for supplying defaults, re-using data, editing then re-analysing, etc.

      SUBROUTINE MAT2IN (NIN, NCMAX, NCOL, NRMAX, NROW, &
                         X, &
                         FNAME, TITLE, &
                         ABORT)
      INTEGER,             INTENT (IN)    :: NIN, NCMAX, NRMAX
      INTEGER,             INTENT (INOUT) :: NCOL, NROW
      DOUBLE PRECISION,    INTENT (INOUT) :: X(NRMAX,NCMAX)
      CHARACTER (LEN = *), INTENT (OUT)   :: FNAME, TITLE
      LOGICAL,             INTENT (OUT)   :: ABORT
 
  NIN: Unconnected unit for data input.
NCMAX: Maximum column dimension for X.
 NCOL: Actual number of columns.
NRMAX: Maximum row dimension for X.
 NROW: Actual number of rows.
    X: Data matrix.
FNAME: Filename.
TITLE: Data title.
ABORT: Error indicator.

Subroutine ISITMF is provided to test if a named file is a matrix file in acceptable Simfit format. If the file is satisfactory NCOL and NROW are output as the column and row dimensions of the matrix. Otherwise NCOL and NROW are output as less than or equal to zero as described below.

      SUBROUTINE ISITMF (NCOL, NROW, &
                         FNAME)
      INTEGER,             INTENT (OUT) :: NCOL, NROW
      CHARACTER (LEN = *), INTENT (IN)  :: FNAME
 
 NCOL: Output as =< 0 for error, or else number of columns > 0 if OK
 NROW: Output as =< 0 for error, or else number of rows > 0 if OK
FNAME: File to be analysed
 
Error values: NCOL NROW
               -1   -1 ... file does not exist
               -2   -2 ... file cannot be opened
               -3   -3 ... title cannot be read
               -4   -4 ... header dimensions cannot be read
               -5   -5 ... file does not have n*m values

      SUBROUTINE MATOUT (ISEND, NCOL, NOUT, NRMAX, NROW, NTEXT, &
                         A, &
                         FNAME, TEXT, TITLE, &
                         ABORT, HEADER, QTEXT, QTITLE)
      INTEGER,             INTENT (IN)    :: ISEND, NCOL, NOUT, NRMAX, &
                                             NROW, NTEXT
      DOUBLE PRECISION,    INTENT (IN)    :: A(NRMAX,NCOL)
      CHARACTER (LEN = *), INTENT (IN)    :: TEXT(NTEXT)
      CHARACTER (LEN = *), INTENT (INOUT) :: FNAME, TITLE
      LOGICAL,             INTENT (OUT)   :: ABORT
      LOGICAL,             INTENT (IN)    :: HEADER, QTEXT, QTITLE
 
ACTION: Write a matrix to a data file as follows:-
 
 ISEND: if 1, User supplies filename at terminal, then OPEN new file
        if 2, Filename as argument to subroutine, then OPEN new file
        if 3, File named FILENAME already opened on unit NOUT
  NCOL: column size >= 1
  NOUT: unit that must be connected if ISEND = 3
 NRMAX: leading dimension
  NROW: row size >= 1
 NTEXT: text size >= 1
     A: data matrix
 FNAME: file name
  TEXT: trailing text
 TITLE: title
 ABORT: error indicator
HEADER: if .TRUE. add header and trailing text
 QTEXT: if .TRUE. ask for text , otherwise use TEXT supplied
QTITLE: if .TRUE. ask for title, otherwise use TITLE supplied

Back to Subroutines or Menu


Matrix editing and transforming

Subroutine MATTRN accepts a matrix but then returns it transformed. The output matrix will have the same number of rows and columns as the input matrix, but the title may be altered on exit if ISEND is not equal to 4.
See simdem66, simdem67, and simdem68 in order to appreciate how to use ISITMF, MATTRN, MAT2IN, MAT3IN, and MAT4IN to create a fully featured scheme for supplying defaults, re-using data, editing then re-analysing, etc.

      SUBROUTINE MATTRN (ISEND, NCOLS, NRMAX, NROWS, &
                         A, &
                         TITLE)
      INTEGER,             INTENT (IN)    :: ISEND, NCOLS, NRMAX, NROWS
      DOUBLE PRECISION,    INTENT (INOUT) :: A(NRMAX,NCOLS)
      CHARACTER (LEN = *), INTENT (INOUT) :: TITLE
 
ISEND: ISEND = 1: columns only.
       ISEND = 2: rows only.
       ISEND = 3: columns and rows.
       ISEND = 4: columns and rows but do not ask for new title.
NCOLS: Number of columns in A.
NRMAX: Leading dimension of A.
NROWS: Number of rows in A.
    A: Matrix supplied is returned transformed.
TITLE: Data title.

Back to Subroutines or Menu


Matrices defaults of arbitrary size

SUBROUTINES: MAT3IN, MAT4IN, CHOP80

Subroutine MAT3IN allows comprehensive control over the input of a matrix from a file, from the clipboard, or from the console.
See simdem66, simdem67, and simdem68 in order to appreciate how to use ISITMF, MATTRN, MAT2IN, MAT3IN, and MAT4IN to create a fully featured scheme for supplying defaults, re-using data, editing then re-analysing, etc.

      SUBROUTINE MAT3IN (ISEND, NCOL, NIN, NROW, &
                         FNAME, TITLE, &
                         ABORT, FIXCOL, FIXROW, LABEL)
      INTEGER,             INTENT (INOUT) :: ISEND
      INTEGER,             INTENT (IN)    :: NIN
      INTEGER,             INTENT (INOUT) :: NCOL, NROW
      CHARACTER (LEN = *), INTENT (INOUT) :: FNAME, TITLE
      LOGICAL,             INTENT (IN)    :: FIXCOL, FIXROW, LABEL
      LOGICAL,             INTENT (OUT)   :: ABORT
 
 ISEND: ISEND = 1: user inputs TITLE etc. and ISEND is unchanged
        ISEND = 2: TITLE etc. from file and ISEND is unchanged
        OTHERWISE: user chooses mode and ISEND is returned as 1 or 2
  NCOL: Size of X as follows
         FIXCOL = .TRUE. then NCOL is unchanged
         FIXCOL = .FALSE. then NCOL is arbitrary
   NIN: Unconnected unit for data input
        Note: if an existing file is successfully opened, then NIN is
              returned connected for further reading. Otherwise NIN is
              closed on exit
  NROW: Size of X as follows
        FIXROW = .TRUE. then NROW is unchanged
        FIXROW = .FALSE. then NROW is arbitrary
 FNAME: ISEND = 1: file supplied by user (unchanged)
        OTHERWISE: temporary file name like matrix_k.tmp
 TITLE: ISEND = 1: read off file
        OTHERWISE: returned depending on LABEL
 ABORT: Error indicator
FIXCOL: FIXCOL = .TRUE. return exactly NCOL data points
        FIXCOL = .FALSE. then return arbitrary NCOL data points
FIXROW: FIXROW = .TRUE. return exactly NROW data points
        FIXROW = .FALSE. then return arbitrary NROW data points
 LABEL: As follows if data are to be typed in
        LABEL = .TRUE. then the user supplies a title
        LABEL = .FALSE. a temporary title is supplied

Subroutine MAT4IN displays a menus with numerous possibilities for matrix analysis. It does not change NCOL and NROW and only returns ABORT = .TRUE. if there are no appropriate data, or the user has selected Cancel to abort further calculations. It does not set ABORT = .TRUE. if the user fails to read in data as it will just leave any existing data unchanged. This involves the use of X and Y so it is important that NRMAX >= NROW. NEWDAT is returned as .TRUE. only if new data are requested. If data are edited then a new file and title are created.
See simdem66, simdem67, and simdem68 in order to appreciate how to use ISITMF, MATTRN, MAT2IN, MAT3IN, and MAT4IN to create a fully featured scheme for supplying defaults, re-using data, editing then re-analysing, etc.

      SUBROUTINE MAT4IN (NCMAX, NCOL, NRMAX, NROW, &
                         A, &
                         FNAMEA, HEADER, TITLEA, &
                         ABORT, NEWDAT)
      INTEGER,             INTENT (IN)    :: NCMAX, NCOL, NRMAX, NROW
      DOUBLE PRECISION,    INTENT (INOUT) :: A(NRMAX,NCMAX)
      CHARACTER (LEN = *), INTENT (IN)    :: HEADER
      CHARACTER (LEN = *), INTENT (INOUT) :: FNAMEA, TITLEA
      LOGICAL,             INTENT (OUT)   :: ABORT, NEWDAT
 
 NCMAX: Maximum column dimension
  NCOL: Column dimension
 NRMAX: Maximum row dimension
  NROW: Row dimension
     A: Sample (may be edited)
FNAMEA: File name (may be changed)
HEADER: Header for menu
TITLEA: Title
 ABORT: Error indicator
NEWDAT: Requests new data

      SUBROUTINE CHOP80 (LINE)
      CHARACTER (LEN = *), INTENT (INOUT) :: LINE
 
LINE: This is typically a long title that is trimmed so that the
      left-most 80 characters are the first characters of the title,
      in order to avoid overflow when writing character strings to output
      devices and files. There are also routines CHOP40, and CHOP60.

Back to Subroutines or Menu