| Summary | General 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 |
| simdem01 | Display messages |
PUTADV ... advice PUTCAU ... caution PUTFAT ... fatal PUTMES ... multi-line text display PUTWAR ... warning PUTTXT ... text |
| simdem02 | Get 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) |
| simdem03 | Get 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) |
| simdem04 | Get text strings |
GETSTR ... get a text string from the user (default supplied) GETTXT ... get a text string from the user (default = ?) |
| simdem05 | Get a logical variable | GETL01 ... get a logical variable |
| simdem06 | Select from a simple list box | LISTBX ... select from a simple list box |
| simdem07 | Display sequential calculations |
LIST01 ... scrolling table with reverse communication LIST02 ... scrolling table SLEEP1 ... impose a delay |
| simdem08 | Display a simple table | TABLE1 ... scrolling table with coloured lines |
| simdem09 | Plot 1 function | GKS001 ... plot 1 function |
| simdem10 | Plot 4 functions | GKS004 ... plot 4 functions |
| simdem11 | Editing double precision variables | EDITD1 ... editing a double precision array |
| simdem12 | Editing integers | EDITI1 ... editing an integer array |
| simdem13 | Editing text | EDITTX ... editing a text array |
| simdem14 | Display data values | VIEWIT ... matrix as a numerical table |
| simdem15 | Display 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 |
| simdem16 | Display ASCII text files | VIEWER ... view a file |
| simdem17 | Display text pages |
PATCH1 ... view text (comprehensive) PATCH2 ... view text (simplified) |
| simdem18 | Select from a title page and menu | TITLE1 ... select from a title page and menu |
| simdem19 | Select from a question and answer window | ANSWER ... select from a question and answer window |
| simdem20 | Select from a tabbing list box | TBOX01 ... select from a tabbing list box |
| simdem21 | Plot 4 (x,y) transforms | GKST04 ... plot 4 (x,y) transforms |
| simdem22 | Plot surfaces and contours | SURD2S ... plot surfaces and contours |
| simdem23 | Plot curves in space | SPACE0 ... plot curves in space |
| simdem24 | Plot a vector field | GKSVF1 ... plot a vector field |
| simdem25 | Plot error bars | GKSEB4 ... plot error bars |
| simdem26 | Display or file a matrix | DSPLAY ... display or file a matrix |
| simdem27 | Display a coloured table | TABLE2 ... display a coloured table |
| simdem28 | Display a background window | WINDOW ... display a background window |
| simdem29 | Get a text string | LINEIN ... get a text string |
| simdem30 | Display title page and tutorial |
TITLES ... display a title with menu TUTOR1 ... display a tutorial |
| simdem31 | Get n integers | GETI0N ... get n integers |
| simdem32 | Get n double precision values |
GETR0N ... get n double precison values FORM25 ... return a variable as CHARACTER (LEN = 25) |
| simdem33 | Get n strings | GETS0N ... get n character strings |
| simdem34 | Get n logicals | GETL0N ... get n logicals |
| simdem35 | Get n variables (any type) | GET00N ... get n arbitrary values |
| simdem36 | Select from button boxes |
BBOX01 ... select from normal buttons HBOX01 ... select from horizontal buttons VBOX01 ... select from vertical buttons |
| simdem37 | Select from ganged radio/tick boxes | RBOX01 ... select from ganged radio/tick boxes |
| simdem38 | Display interactive calculations | TABLE4 ... display interactive calculations |
| simdem39 | Display Wait Calculations in progress | WAITER ... display Wait ... Calculations in progress |
| simdem40 | Configure the Simfit DLLs | CONFIG ... configure the Simfit DLLs |
| simdem41 | Get a vector from the user |
VEC1IN ... get a vector TRIM80 ... trim a long filename |
| simdem42 | Get a matrix from the user | MATTIN ... get a matrix |
| simdem43 | Get a matrix from the clipboard |
ATTRIB ... get file attributes GETNOU ... get an unopened Simdem unit |
| simdem44 | Select from simfit file selection control |
OFILES ... select using the Simfit file-selection control GETFIL ... select using the Windows file-selection control |
| simdem45 | Print a text file | FPRINT ... print a text file |
| simdem46 | Plot n data sets |
SMPLOT ... plot n data sets DELTMP ... delete temporary files |
| simdem47 | Plot a pie chart | PCPLOT ... plot a pie chart |
| simdem48 | Plot a bar chart | BCPLOT ... plot a bar chart |
| simdem49 | Plot as boxes and whiskers | BWPLOT ... plot as boxes and whiskers |
| simdem50 | Plot as bars/symbols plus error bars | EBPLOT ... plot as bars/symbols plus error bars |
| simdem51 | Get 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 |
| simdem52 | Get a colour from the palette | PALETT ... get a colour from the palette |
| simdem53 | Plot a 2D scatter plus labels | LBPLOT ... plot a 2D scatter plus labels |
| simdem54 | Plot sample cumulative plus best-fit cdf | CDPLOT ... plot sample cumulative plus best-fit cdf |
| simdem55 | Plot sample histogram plus best-fit pdf | PDPLOT ... plot sample histogram plus best-fit pdf |
| simdem56 | Plot a histogram with error bars | HIST01 ... plot a histogram with error bars |
| simdem57 | Plot a dendrogram with threshold | DGPLOT ... plot a dendrogram with threshold |
| simdem58 | Select from a scrolling check box |
CHKBOX ... select from 1-dimensional scrolling check boxes RBOXES ... select from 2-dimensional scrolling check boxes |
| simdem59 | Select one or multiple files |
MFILES ... select one or multiple files TRIM60 ... trim a long filename |
| simdem60 | Select from a comprehensive list box | LSTBOX ... select from a comprehensive list box |
| simdem61 | Plot half-normal and normal scores | HNPLOT ... plot half-normal and normal scores |
| simdem62 | Plot bivariate normal confidence ellipses |
ELIPS1 ... plot bivariate normal confidence ellipses NAGSUB ... NAG library substitute routines |
| simdem63 | Plot rows and columns from a matrix | MTPLOT ... plot rows and columns from a matrix |
| simdem64 | Plot parametric curve r = r(theta) | RTPLOT ... plot a parametric curve r = r(theta) |
| simdem65 | Select files to view/open/copy/paste |
VUOPEN ... select a file to view/open/copy/paste AUX256 ... full path to a Simdem auxiliary file |
| simdem66 | Matrices 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 |
| simdem67 | Matrices editing and transforming | MATTRN ... matrix editing and transforming |
| simdem68 | Matrices 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 |
| simdem69 | Plot a vector field with labels | GKSVF3 ... plot a vector field with labels |
| simdem70 | Plot 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
| Summary | General 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 |
| simdem01 | Display messages |
PUTADV ... advice PUTCAU ... caution PUTFAT ... fatal PUTMES ... multi-line text display PUTWAR ... warning PUTTXT ... text |
| simdem07 | Display sequential calculations |
LIST01 ... scrolling table with reverse communication LIST02 ... scrolling table SLEEP1 ... impose a delay |
| simdem08 | Display a simple table | TABLE1 ... scrolling table with coloured lines |
| simdem14 | Display data values | VIEWIT ... matrix as a numerical table |
| simdem15 | Display 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 |
| simdem16 | Display ASCII text files | VIEWER ... view a file |
| simdem17 | Display text pages |
PATCH1 ... view text (comprehensive) PATCH2 ... view text (simplified) |
| simdem26 | Display or file a matrix | DSPLAY ... display or file a matrix |
| simdem27 | Display a coloured table | TABLE2 ... display a coloured table |
| simdem28 | Display a background window | WINDOW ... display a background window |
| simdem30 | Display title page and tutorial |
TITLES ... display a title with menu TUTOR1 ... display a tutorial |
| simdem38 | Display interactive calculations | TABLE4 ... display interactive calculations |
| simdem39 | Display Wait Calculations in progress | WAITER ... display Wait ... Calculations in progress |
| simdem29 | Get a text string | LINEIN ... get a text string |
| simdem31 | Get n integers | GETI0N ... get n integers |
| simdem32 | Get n double precision values |
GETR0N ... get n double precison values FORM25 ... return a variable as CHARACTER (LEN = 25) |
| simdem33 | Get n strings | GETS0N ... get n character strings |
| simdem34 | Get n logicals | GETL0N ... get n logicals |
| simdem35 | Get n variables (any type) | GET00N ... get n arbitrary values |
| simdem02 | Get 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) |
| simdem03 | Get 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) |
| simdem04 | Get text strings |
GETSTR ... get a text string from the user (default supplied) GETTXT ... get a text string from the user (default = ?) |
| simdem05 | Get a logical variable | GETL01 ... get a logical variable |
| simdem41 | Get a vector from the user |
VEC1IN ... get a vector TRIM80 ... trim a long filename |
| simdem42 | Get a matrix from the user | MATTIN ... get a matrix |
| simdem43 | Get a matrix from the clipboard |
ATTRIB ... get file attributes GETNOU ... get an unopened Simdem unit |
| simdem51 | Get 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 |
| simdem52 | Get a colour from the palette | PALETT ... get a colour from the palette |
| simdem06 | Select from a simple list box | LISTBX ... select from a simple list box |
| simdem18 | Select from a title page and menu | TITLE1 ... select from a title page and menu |
| simdem19 | Select from a question and answer window | ANSWER ... select from a question and answer window |
| simdem20 | Select from a tabbing list box | TBOX01 ... select from a tabbing list box |
| simdem36 | Select from button boxes |
BBOX01 ... select from normal buttons HBOX01 ... select from horizontal buttons VBOX01 ... select from vertical buttons |
| simdem37 | Select from ganged radio/tick boxes | RBOX01 ... select from ganged radio/tick boxes |
| simdem58 | Select from a scrolling check box |
CHKBOX ... select from 1-dimensional scrolling check boxes RBOXES ... select from 2-dimensional scrolling check boxes |
| simdem59 | Select one or multiple files |
MFILES ... select one or multiple files TRIM60 ... trim a long filename |
| simdem60 | Select from a comprehensive list box | LSTBOX ... select from a comprehensive list box |
| simdem65 | Select files to view/open/copy/paste |
VUOPEN ... select a file to view/open/copy/paste AUX256 ... full path to a Simdem auxiliary file |
| simdem44 | Select from simfit file selection control |
OFILES ... select using the Simfit file-selection control GETFIL ... select using the Windows file-selection control |
| simdem11 | Editing double precision variables | EDITD1 ... editing a double precision array |
| simdem12 | Editing integers | EDITI1 ... editing an integer array |
| simdem13 | Editing text | EDITTX ... editing a text array |
| simdem09 | Plot 1 function | GKS001 ... plot 1 function |
| simdem10 | Plot 4 functions | GKS004 ... plot 4 functions |
| simdem21 | Plot 4 (x,y) transforms | GKST04 ... plot 4 (x,y) transforms |
| simdem22 | Plot surfaces and contours | SURD2S ... plot surfaces and contours |
| simdem23 | Plot curves in space | SPACE0 ... plot curves in space |
| simdem24 | Plot a vector field | GKSVF1 ... plot a vector field |
| simdem25 | Plot error bars | GKSEB4 ... plot error bars |
| simdem46 | Plot n data sets |
SMPLOT ... plot n data sets DELTMP ... delete temporary files |
| simdem47 | Plot a pie chart | PCPLOT ... plot a pie chart |
| simdem48 | Plot a bar chart | BCPLOT ... plot a bar chart |
| simdem49 | Plot as boxes and whiskers | BWPLOT ... plot as boxes and whiskers |
| simdem50 | Plot as bars/symbols plus error bars | EBPLOT ... plot as bars/symbols plus error bars |
| simdem53 | Plot a 2D scatter plus labels | LBPLOT ... plot a 2D scatter plus labels |
| simdem54 | Plot sample cumulative plus best-fit cdf | CDPLOT ... plot sample cumulative plus best-fit cdf |
| simdem55 | Plot sample histogram plus best-fit pdf | PDPLOT ... plot sample histogram plus best-fit pdf |
| simdem56 | Plot a histogram with error bars | HIST01 ... plot a histogram with error bars |
| simdem57 | Plot a dendrogram with threshold | DGPLOT ... plot a dendrogram with threshold |
| simdem61 | Plot half-normal and normal scores | HNPLOT ... plot half-normal and normal scores |
| simdem62 | Plot bivariate normal confidence ellipses |
ELIPS1 ... plot bivariate normal confidence ellipses NAGSUB ... NAG library substitute routines |
| simdem63 | Plot rows and columns from a matrix | MTPLOT ... plot rows and columns from a matrix |
| simdem64 | Plot parametric curve r = r(theta) | RTPLOT ... plot a parametric curve r = r(theta) |
| simdem69 | Plot a vector field with labels | GKSVF3 ... plot a vector field with labels |
| simdem70 | Plot 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 |
| simdem40 | Configure the Simfit DLLs | CONFIG ... configure the Simfit DLLs |
| simdem45 | Print a text file | FPRINT ... print a text file |
| simdem66 | Matrices 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 |
| simdem67 | Matrices editing and transforming | MATTRN ... matrix editing and transforming |
| simdem68 | Matrices 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
Back to Subroutines or Menu
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
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
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
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
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
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 = 1024) INTENT (OUT) :: FNAME
IFAIL: Returned = 0 only if successful.
FNAME: Returned in the form f$123456.tmp in the %TEMP% folder.
FNAME is the name of a file that does not exist, but the
file is not opened.
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
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
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
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
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
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.
Back to Subroutines or Menu
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
XVER: Version number
YVER: Release number
DVER: Description
Back to Subroutines or Menu
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
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
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
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
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
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
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
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
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
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
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
SUBROUTINES: OFILES, GETFIL
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 this 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 leade to an new file if the file is subsequntly opened.
Back to Subroutines or Menu
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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