home *** CD-ROM | disk | FTP | other *** search
- SUBROUTINE CENTER (INPUT, OUTPUT, N)
- C ............................................................
- C Center a Smaller String within A Larger String
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To center 'INPUT' string in 'OUTPUT' string of 'N'
- C characters.
- C USAGE:
- C CALL CENTER (INPUT, OUTPUT, N)
- C DESCRIPTION OF PARAMETERS:
- C INPUT - Input character variable of length 80
- C containing string to be centered. The actual
- C text of the string must be terminated with a
- C backslash (\).
- C OUTPUT- Output string of length 80 printed or otherwise
- C used by the calling program returned with INPUT
- C centered on a line length of N characters.
- C N - Total length < 80 in which INPUT is to be
- C centered.
- C REMARKS: None.
- C SUBPROGRAMS REQUIRED:
- C INSTR
- C MOVE
- C METHOD: Not applicable.
- C ............................................................
- CHARACTER INPUT*80, BLANK*80, BLK(80), OUTPUT*80
- EQUIVALENCE (BLANK, BLK(1))
- DATA BLK/80*' '/
- OUTPUT = BLANK
- II = INSTR(INPUT, '\', 1) - 1
- JJ = (N-II)/2
- CALL MOVE (INPUT, 1, OUTPUT, JJ+1, II)
- RETURN
- END
- SUBROUTINE CLS
- C ............................................................
- C Clear Screen
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To clear the MS-DOS display screen.
- C USAGE:
- C CALL CLS
- C DESCRIPTION OF PARAMETERS: None.
- C REMARKS: On IBM PC systems, or close compatibles, the
- C ANSI.SYS device driver must be installed. For machines
- C like the TIPC ANSI screen handling is always in place.
- C SUBPROGRAMS REQUIRED: None.
- C METHOD: See the section in your MS-DOS/PC-DOS manual
- C describing the ANSI escape sequences and how to use
- C them.
- C ............................................................
- WRITE (*,10)
- 10 FORMAT (' '\)
- RETURN
- END
- SUBROUTINE CORR (N, NV, R, FMEAN, STD, T, FMT,
- * INPDEV, IDISK1, IOUT, ND)
- C ............................................................
- C Pearson Product Moment Correlations
- C SOURCE OR AUTHOR: Thomas Wm. Madron. Such subroutines are
- C easily available in a wide variety of textbooks.
- C PURPOSE: Computes means, standard deviations, and a
- C correlation matrix from raw data from either a file or
- C keyboard. If the data are from keyboard, they may be
- C optionally saved to a file for subsequent use.
- C USAGE:
- C CALL CORR (N, NV, R, FMEAN, STD, T, FMT, INPDEV,
- C * IDISK1, IOUT, ND)
- C DESCRIPTION OF PARAMETERS:
- C N - Number of Observations calcualted by
- C subroutine.
- C NV - Number of Variables.
- C R - Output correlation matrix.
- C FMEAN - Output vector of means.
- C STD - Output vector of standard deviations.
- C FMT - Character variable containing variable format
- C statement.
- C INPDEV- Data input device (>-2-Disk; 1-Keyboard).
- C IDISK1- Data input Logical Unit Number.
- C IOUT - Data Output Flag (0-No ouput; 2-Disk output).
- C ND - Number of Rows Dimensioned for R in calling
- C program.
- C REMARKS: CORR cannot handle missing data. It can take
- C input from keyboard or disk, however.
- C SUBPROGRAMS REQUIRED:
- C KEYBD - Keyboard Input Routine.
- C LOCATE - Place cursor at specified screen Row and
- C Column.
- C METHOD: Product Moment Correlations are computed.
- C ............................................................
- CHARACTER FMT*80
- REAL*4 R(ND,NV), FMEAN(NV), STD(NV), A, B, C
- N = 0
- IEND = 0
- DO 5 I = 1,NV
- FMEAN(I) = 0.0
- STD(I) = 0.0
- DO 5 J = 1,NV
- R(I,J) = 0.0
- 5 CONTINUE
- CALL HEADER
- C BEGIN DATA INPUT LOOP
- 10 GO TO (15, 20), INPDEV
- C INPUT FROM KEYBOARD
- 15 CALL KEYBD (STD, NV, N, IOUT, IEND)
- IF (IEND .EQ. 1) GO TO 50
- CALL WAIT (NCALL)
- GO TO 25
- C INPUT FROM DISK
- 20 READ (IDISK1,FMT,END=50) (STD(I),I=1,NV)
- C A LITTLE SPEED IN EXECUTION CAN BE GAINED BY
- C ELIMINATING THE FOLLOWING FIVE LINES AT THE
- C EXPENSE OF A LITTLE USER FRIENDLINESS.
- NX = N + 1
- NROW = 10
- NCOL = 28
- CALL LOCATE (NROW,NCOL)
- WRITE (*,'(''READING RECORD #'',I8)') NX
- 25 N = N + 1
- DO 40 I = 1,NV
- FMEAN(I) = FMEAN(I) + STD(I)
- DO 30 J = I,NV
- R(I,J) = R(I,J) + STD(I) * STD(J)
- 30 CONTINUE
- 40 CONTINUE
- GO TO 10
- C END OF DATA INPUT LOOP
- 50 T = N
- C CALCULATE THE CORRELATIONS
- DO 70 I = 1,NV
- DO 65 J = I,NV
- IF (I .EQ. J) GO TO 65
- A = T*R(I,J) - (FMEAN(I)*FMEAN(J))
- B = T*R(I,I) - FMEAN(I)**2
- C = T*R(J,J) - FMEAN(J)**2
- IF (B * C .EQ. 0.0) GO TO 65
- R(I,J) = A / SQRT(B * C)
- 65 CONTINUE
- 70 CONTINUE
- C DO MEANS AND STANDARD DEVIATIONS
- DO 80 I = 1,NV
- FMEAN(I) = FMEAN(I) / T
- STD(I) = SQRT(R(I,I) / T - FMEAN(I)**2)
- 80 CONTINUE
- C ............................................................
- C For consistency with a correlation program that accounts for
- C missing data, "N" (sample size) is placed in both the
- C diagonal of the Correlation Matrix and fills the lower
- C diagonal matrix as well. If you modify this program to
- C allow for missing data, you will need the number of
- C observations with all data present for each variable and the
- C number of observations with all data present for each pair
- C of variables. Programs that calculate significance tests
- C usually need an estimate of the number of observations.
- C Subsequent programs use the LOWEST number of observations
- C taken from the lower diagonal matrix as a conservative
- C estimate since any significance tests based on a data matrix
- C with missing data are suspect.
- C ............................................................
- DO 100 I = 1,NV
- DO 90 J = I,NV
- R(J,I) = T
- 90 CONTINUE
- 100 CONTINUE
- RETURN
- END
- SUBROUTINE FILES (TITLE, IO, FILENM, STA)
- C ............................................................
- C Open Disk FILES
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To request filespecs from the operator and open
- C appropriate files. The filespecs are returned to the
- C calling program for other uses.
- C USAGE:
- C CALL FILES (TITLE, IO, FILENM, STA)
- C DESCRIPTION OF PARAMETERS:
- C TITLE - 28 Character variable for prompt to operator.
- C IO - FORTRAN logical unit number (LUN) to be opened.
- C Passed to FILES from the calling program.
- C FILENM- Character*14 variable containing filespecs.
- C STA - STAtus for file ('NEW' or 'OLD').
- C REMARKS: None.
- C SUBPROGRAMS REQUIRED: None.
- C METHOD: Not applicable.
- C ............................................................
- CHARACTER TITLE*28, FILENM*14, STA*3
- IOD = 1
- WRITE (*,'(1H ,A)') TITLE
- C IF INPUT IS FROM DISK, THEN:
- WRITE (*,
- * '(1H ,''Please Enter Filespecs <d:filename.ext>: ''\)')
- READ (*,'(A)') FILENM
- IF (STA .EQ. 'NEW') THEN
- OPEN (IO, FILE=FILENM, STATUS='NEW',
- * ACCESS='SEQUENTIAL')
- ELSEIF (STA .EQ. 'OLD') THEN
- OPEN (IO, FILE=FILENM, STATUS='OLD',
- * ACCESS='SEQUENTIAL')
- ENDIF
- RETURN
- END
- SUBROUTINE HEADER
- C ............................................................
- C Print a HEADER on the Video Display
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To print a HEADER at the top of the screen
- C consisting of three lines:
- C Line 1: First title (TITLE1).
- C Line 2: Second title (TITLE2).
- C Line 3: Horizontal divider bar entered as ASCII
- C character 205. This can be changed, of
- C course, to anything else. One possible
- C alternative might be an equals ('=') sign.
- C REMARKS: A named COMMON statement (/HEAD/) is used to
- C transmit the two title lines to HEADER.FOR. COMMON is
- C used, rather than a parameter list, so that the titles
- C can be initialized once in the main program, and not in
- C every subprogram that might call HEADER, thus
- C conserving memory and programming effort.
- C SUBPROGRAMS REQUIRED:
- C CLS
- C CENTER
- C LOCATE
- C METHOD: Not applicable.
- C ............................................................
- C SPECIFICATIONS:
- CHARACTER*80 TITLE1, TITLE2, OUTPUT
- COMMON /HEAD/ TITLE1, TITLE2
- C Clear the Screen:
- LL = 80
- CALL CLS
- C Center and Print Program Name
- CALL CENTER (TITLE1, OUTPUT, LL)
- IROW=1
- ICOL=1
- CALL LOCATE (IROW, ICOL)
- WRITE (*,'(A78)') OUTPUT
- C Center and Print Author Name
- CALL CENTER (TITLE2, OUTPUT, LL)
- IROW=2
- ICOL=1
- CALL LOCATE (IROW, ICOL)
- WRITE (*,'(A78)') OUTPUT
- C Print a Horizontal Bar (ASCII CODE 205)
- C NOTE: The Ms in FORMAT statement 10, below, is the
- C character representation of the horizontal rule
- C --the ASCII character 205. With some editors
- C the characters beyond decimal 127 can be added
- C by pressing the <ALT> key and at the same time
- C entering the decimal equivalent of the letter
- C on the numeric keypad. A possible alternative
- C character might be an equals (=) sign.
- WRITE (*,10)
- 10 FORMAT ('════════════════════════════════════════',
- 1 '════════════════════════════════════════')
- RETURN
- END
- FUNCTION ICLS(IOUT)
- C ............................................................
- C Top of Forms Function
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To send an output device a top-of-forms command.
- C USAGE:
- C II = ICLS(IOUT)
- C DESCRIPTION OF PARAMETERS:
- C IOUT - Output device: 1=video; 2=printer; >=3 = disk.
- C REMARKS: None.
- C SUBPROGRAMS REQUIRED:
- C HEADER
- C METHOD: Not applicable.
- C ............................................................
- ICRT = 5
- IPRT = 6
- IF (IOUT .EQ. IPRT) THEN
- C SEND TOP OF PAGE TO PRINTER
- 10 WRITE (IOUT,'(1H1)')
- ELSEIF (IOUT .EQ. IPRT) THEN
- C CLEAR VIDEO DISPLAY
- 30 CALL HEADER
- ELSE
- C SEND ONE BLANK LINE TO DISK FILE
- 50 WRITE (IOUT,60)
- 60 FORMAT (' ')
- ENDIF
- ICLS = IOUT
- RETURN
- END
- SUBROUTINE INPMNU (TITLE,IQ)
- C ............................................................
- C Data Input Menu
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To allow a selection for raw data input,
- C initialize IQ, for return to the calling program.
- C USAGE:
- C CALL INPMNU (TITLE, IQ)
- C DESCRIPTION OF PARAMETERS:
- C TITLE - Character*64 variable passed from calling
- C program.
- C IQ - Pointer for input data type:
- C 1 - from keyboard;
- C 2 - from disk;
- C 3 - return to DOS.
- C REMARKS: None.
- C SUBPROGRAMS REQUIRED:
- C HEADER
- C METHOD: Not applicable.
- C ............................................................
- CHARACTER TITLE*64
- 1 CALL HEADER
- WRITE (*,'('' '',A)') TITLE
- WRITE (*,10)
- 10 FORMAT (' ARE THE DATA FROM:'//
- 1 ' (1) KEYBOARD, OR'/
- 2 ' (2) DISK, OR'/
- 3 ' (3) RETURN TO DOS?'//
- 4 ' WHICH DATA INPUT DEVICE? '\)
- READ (*,'(I5)') IQ
- IF (IQ .LT. 1 .OR. IQ .GT. 3) GO TO 1
- RETURN
- END
- FUNCTION INSTR (STRING, VALUE, LENVAL)
- C ............................................................
- C String Search Function
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To find the location of substring 'VALUE' in
- C 'STRING'.
- C USAGE:
- C II = INSTR(STRING, VALUE, LENVAL)
- C DESCRIPTION OF PARAMETERS:
- C STRING- Character*80 variable is the string to be
- C searched.
- C VALUE - Character*80 variable is the source string.
- C LENVAL- The length of VALUE.
- C REMARKS: This is an attempt to provide in FORTRAN some of
- C the functionality of the INSTR$ function in BASIC.
- C SUBPROGRAMS REQUIRED: None.
- C METHOD: Not applicable.
- C ............................................................
- CHARACTER STRING*80, VALUE*80, ST*80, VL*80, STR, VALX
- DIMENSION STR(80), VALX(80)
- EQUIVALENCE (ST,STR(1)), (VL,VALX(1))
- ST = STRING
- VL = VALUE
- DO 100 I = 1,80
- IX = 0
- J = I
- DO 50 K = 1,LENVAL
- IF (STR(J) .NE. VALX(K)) THEN
- GO TO 100
- ELSE
- IX = IX + 1
- J = J + 1
- ENDIF
- 50 CONTINUE
- IF (IX .EQ. LENVAL) THEN
- K = I
- GO TO 150
- ENDIF
- 100 CONTINUE
- INSTR = 0
- RETURN
- 150 INSTR = K
- RETURN
- END
- SUBROUTINE KEYBD (X, NV, NOBS, IOUT, IEND)
- C ............................................................
- C Data Input from Console
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To provide raw data input from the keyboard.
- C USAGE:
- C CALL KEYBD (X, NV, NOBS, IOUT, IEND)
- C DESCRIPTION OF PARAMETERS:
- C X(i) - Input data array or record buffer. Input
- C fields are placed in X(i).
- C NV - Number of variables passed from calling
- C program.
- C NOBS - Number of observations accumulated in calling
- C program and passed to KEYBD.
- C IOUT - Flag for saving data to disk passed from
- C calling program. Save if IOUT=2.
- C IEND - Flag for end-of-data passed to the calling
- C program to terminate data input.
- C REMARKS: This is a relatively slow and unsophisticated data
- C entry routine for quick and dirty entry of small
- C datasets. Large datasets should be entered with other
- C software.
- C SUBPROGRAMS REQUIRED:
- C CLS SUBS
- C METHOD: Not applicable.
- C ............................................................
- CHARACTER ID*8
- CHARACTER DAT, DAT2*10, EN1, EN2, DOT, BLK, REC, REC2*8
- DIMENSION X(NV), REC(8), DAT(10)
- COMMON /FILEX/ IDISK1,IDISK2,IDISK3,IDISK4
- EQUIVALENCE (DAT(1),DAT2), (REC(1),REC2)
- DATA EN1/'E'/,EN2/'e'/,DOT/'.'/,BLK/' '/
- IEND = 0
- IOD = 1
- CALL CLS
- N = NOBS + 1
- WRITE (*,5)
- 5 FORMAT ('BEGIN ENTERING YOUR DATA -')
- DO 50 I = 1,NV
- DO 6 J = 1,10
- DAT(J) = BLK
- 6 CONTINUE
- WRITE (*,20) N, I
- READ (*,35) DAT
- DO 8 J = 1,10
- IF (DAT(J) .NE. EN1 .AND. DAT(J) .NE. EN2)
- * GO TO 8
- IEND = 1
- GO TO 60
- 8 CONTINUE
- DO 9 J = 1,10
- IF (DAT(J) .EQ. DOT) GO TO 40
- 9 CONTINUE
- DO 11 J = 1,10
- IF (DAT(J) .NE. BLK) GO TO 11
- DAT(J) = DOT
- GO TO 40
- 11 CONTINUE
- 40 READ (DAT2,30) X(I)
- 50 CONTINUE
- WRITE (REC2,70) N
- READ (REC2,80) ID
- IF (IOUT .EQ. 2) CALL SUBS (X, NV, IDISK2, ID)
- 60 RETURN
- C FORMAT STATEMENTS
- 20 FORMAT (' OBSERVATION',I6,' VARIABLE',I4,': '\)
- 30 FORMAT (F10.0)
- 35 FORMAT (10A1)
- 70 FORMAT (I5,' 1')
- 80 FORMAT (A8)
- END
- SUBROUTINE LOCATE (IROW, ICOL)
- C ............................................................
- C Locate the Cursor on the Screen
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To locate the cursor at IROW and ICOL.
- C USAGE:
- C CALL LOCATE (IROW, ICOL)
- C DESCRIPTION OF PARAMETERS:
- C IROW - Row to which cursor is to be moved passed from
- C calling program.
- C ICOL - Column to which cursor is to be moved passed
- C from calling program.
- C REMARKS: Using ANSI screen control, this is an effort to
- C implement in FORTRAN a function similar to LOCATE in
- C MS-BASIC. It requires that the ANSI.SYS device driver
- C be installed on IBM PC type machines.
- C SUBPROGRAMS REQUIRED: None.
- C METHOD: Uses ANSI screen control.
- C ............................................................
- CHARACTER AROW*2, ACOL*2, AFILE*2, BUF(2)*1, Z*1, B*1
- EQUIVALENCE (BUF(1), AFILE)
- Z='0'
- B=' '
- WRITE (AFILE,'(I2)') IROW
- IF (BUF(1) .EQ. B) BUF(1)=Z
- AROW=AFILE
- WRITE (AFILE,'(I2)') ICOL
- IF (BUF(1) .EQ. B) BUF(1)=Z
- ACOL=AFILE
- WRITE (*,10) AROW, ACOL
- 10 FORMAT (' ',A,';',A,'H'\)
- RETURN
- END
- SUBROUTINE MOVE (FROM,LOC1,TO,LOC2,LENGTH)
- C ............................................................
- C Move Data
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To provide a means for moving a block of data from
- C one string to another.
- C USAGE:
- C CALL MOVE (FROM, LOC1, TO, LOC2, LENGTH)
- C DESCRIPTION OF PARAMETERS:
- C FROM - Source string to be moved, <= 80 characters.
- C LOC1 - Starting location in FROM for block to be
- C moved.
- C TO - Destination string for FROM data, <= 80
- C characters but >= the amount of data to be
- C moved.
- C LOC2 - Starting location of the destination in TO.
- C LENGTH- Length of the block to be moved, passed from
- C the calling program.
- C REMARKS: None.
- C SUBPROGRAMS REQUIRED: None.
- C METHOD: Not applicable.
- C ............................................................
- CHARACTER FROM*80, TO*80, F2*80, T2*80, FROMX, TOX
- DIMENSION FROMX(80), TOX(80)
- EQUIVALENCE (F2,FROMX),(T2,TOX)
- F2 = FROM
- T2 = TO
- LOCA = LOC1 + LENGTH - 1
- LOCB = LOC2 - 1
- DO 100 I = LOC1,LOCA
- LOCB = LOCB + 1
- TOX(LOCB) = FROMX(I)
- 100 CONTINUE
- FROM = F2
- TO = T2
- RETURN
- END
- SUBROUTINE OUTMNU (IOD, IDISK3, TITLE3)
- C ............................................................
- C Output Destination Menu
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To allow the user to specify the output device for
- C the normal 'printed' output: video, printer, or disk.
- C USAGE:
- C CALL OUTMNU (IOD, IDISK3, TITLE3)
- C DESCRIPTION OF PARAMETERS:
- C IOD - Destination logical unit number returned from
- C subroutine.
- C IDISK3- Logical unit number for disk output if disk is
- C destination for output. If this is opted, IO
- C is set equal to IDISK3.
- C TITLE3- Title for filespec for disk output, passed to
- C subroutine FILES.
- C REMARKS: None.
- C SUBPROGRAMS REQUIRED:
- C HEADER
- C WAIT
- C FILES
- C METHOD: Not applicable.
- C ............................................................
- CHARACTER FILENM*14, TITLE3*28
- INTEGER*2 DRIVE
- ICRT = 5
- IPRT = 6
- NCALL = 0
- 5 CALL HEADER
- WRITE (*,10)
- 10 FORMAT (' DESTINATION OF OUTPUT:'//
- 1 ' (1) VIDEO DISPLAY'/
- 2 ' (2) PRINTER'/
- 3 ' (3) DISK FILE'//
- 4 ' WHICH OUTPUT DEVICE (ENTER APPROPRIATE NUMBER)? '\)
- READ (*,'(I5)') IOD
- GO TO (50, 30, 40), IOD
- IF (IOD .LT. 1 .OR. IOD .GT. 3) GO TO 5
- C OUTPUT TO PRINTER
- 30 CALL HEADER
- IROW = 4
- ICOL = (80-25)/2
- CALL LOCATE (IROW, ICOL)
- WRITE (*,'(''* * * READY PRINTER * * *'')')
- CALL WAIT (NCALL)
- OPEN (IPRT, FILE='LPT1')
- IOD = IPRT
- RETURN
- C OUTPUT TO DISK FILE
- 40 CALL FILES (TITLE3,IDISK3,FILENM,'NEW')
- IOD = IDISK3
- RETURN
- C OUTPUT TO VIDEO DISPLAY
- 50 OPEN (ICRT, FILE='CON')
- IOD = ICRT
- RETURN
- END
- SUBROUTINE PCDS (X, N, M, FH, IO, IDIAG, ND)
- C ............................................................
- C Save Arrays to Disk
- C SOURCE OR AUTHOR: Modified from Donald J. Veldman, FORTRAN
- C PROGRAMMING FOR THE BEHAVIORAL SCIENCES (New York:
- C Holt, Rinehart and Winston, 1967), pp. 135-37. The
- C original was written for FORTRAN IV and was designed to
- C punch cards, hence the name 'PCDS' (Punch CarDS).
- C PURPOSE: To save records from an array in 12-element
- C blocks. A matrix is recorded by rows, beginning each
- C row with a new physical record.
- C USAGE:
- C CALL PCDS (X, N, M, FH, IO, IDIAG, ND)
- C DESCRIPTION OF PARAMETERS:
- C X = NAME OF ARRAY TO BE OUTPUT.
- C N = NUMBER OF ROWS IF X IS MATRIX, OR ELEMENTS IF A
- C VECTOR.
- C M = NUMBER OF COLUMNS IF X IS MATRIX. SET = 1 FOR
- C A VECTOR.
- C FH = OUTPUT LABEL. HOLLERITH BLOCK (MAX = 4) IN
- C CALL STATEMENT.
- C IO = OUTPUT LOGICAL UNIT NUMBER.
- C ND = NUMBER OF ROWS DIMENSIONED FOR X IN CALLING
- C PROGRAM.
- C REMARKS: None.
- C SUBPROGRAMS REQUIRED: None.
- C METHOD: Not applicable.
- C ............................................................
- CHARACTER FH*4
- DIMENSION X(ND, M)
- L = 1
- IF (M .EQ. 1) THEN
- DO 10 I = 1,N,12
- J = MIN0(I + 11, N)
- WRITE (IO,5) FH, M, L, (X(K,1), K = I,J)
- 5 FORMAT (A4,I2,I2,12F10.4)
- L = L + 1
- 10 CONTINUE
- ELSE
- DO 30 I = 1,N
- LL = 1
- DO 20 J = 1,M,12
- K = MIN0(J + 11, M)
- WRITE (IO,5) FH, I, LL, (X(I,L), L = J,K)
- LL = LL + 1
- 20 CONTINUE
- 30 CONTINUE
- ENDIF
- RETURN
- END
- SUBROUTINE PRTS (X,N,M,NVAR,KH,ND,NSET,IDIAG)
- C ............................................................
- C Print a Matrix
- C SOURCE OR AUTHOR: Modified from Donald J. Veldman, FORTRAN
- C PROGRAMMING FOR THE BEHAVIORAL SCIENCES (New York:
- C Holt, Rinehart and Winston, 1967), pp. 135-37. The
- C original was written in FORTRAN IV. PURPOSE: To print
- C a matrix or vector in 10-column partitions.
- C USAGE:
- C CALL PRTS (X,N,M,NVAR,KH,ND,NSET,IDIAG)
- C DESCRIPTION OF PARAMETERS:
- C X(i) - Array to be output.
- C N - Number of rows (or elements) of X() to be
- C printed.
- C M - Number of columns of X() to be printed (set = 1
- C if X() is a vector).
- C NVAR - Vector of variable numbers.
- C KH - Character*8 variable passed as a constant for
- C output heading.
- C ND - Number of rows (or elements) dimensioned for
- C X() in the calling program.
- C NSET - Output Logical Unit Number.
- C IDIAG - Flag for diagonal matrix (0=no; 1=yes).
- C REMARKS: None.
- C SUBPROGRAMS REQUIRED: None.
- C METHOD: Not applicable.
- C ............................................................
- CHARACTER KH*8
- INTEGER*2 NVAR(1), I, J
- REAL*4 X(ND,1)
- C WRITE A VECTOR
- IF (M .EQ. 1) THEN
- WRITE (NSET,15)
- DO 10 I = 1,N,10
- J = MIN0(I + 9,N)
- WRITE (NSET,5) KH, (NVAR(K), K = I,J)
- WRITE (NSET,15) (X(K,1), K = I,J)
- 10 CONTINUE
- C WRITE A DIAGONAL MATRIX
- ELSEIF (IDIAG .GT. 0) THEN
- WRITE (NSET,15)
- DO 110 I = 1,N,10
- J = MIN0(I + 9,N)
- WRITE (NSET,5) KH, (NVAR(K), K = I,J)
- WRITE (NSET,15) (X(K,K), K = I,J)
- 110 CONTINUE
- C WRITE AN N X M MATRIX
- ELSEIF (M .GT. 1) THEN
- DO 25 K = 1,M,10
- WRITE (NSET,15)
- L = MIN0(K + 9,M)
- WRITE (NSET,5) KH, (NVAR(J),J = K,L)
- DO 20 I = 1,N
- WRITE (NSET,30) NVAR(I), (X(I,J), J = K,L)
- 20 CONTINUE
- 25 CONTINUE
- ENDIF
- WRITE (NSET,'(/'' '')')
- RETURN
- C FORMAT STATEMENTS
- 5 FORMAT (1H ,A8,10I11)
- 15 FORMAT (1H , 10X, 10F11.4)
- 30 FORMAT (1H , I6, 4X, 10F11.4)
- END
- SUBROUTINE SUBS (X, N, IO, ID)
- C ............................................................
- C Write an Output Data Record
- C SOURCE OR AUTHOR: Modified from Donald J. Veldman, FORTRAN
- C PROGRAMMING FOR THE BEHAVIORAL SCIENCES (New York:
- C Holt, Rinehart and Winston, 1967), pp. 135-37. The
- C original was written for FORTRAN IV and was designed to
- C punch cards.
- C PURPOSE: To 'punch' one subject's score vector in real
- C mode.
- C USAGE:
- C CALL SUBS (X, N, IO, ID)
- C DESCRIPTION OF PARAMETERS:
- C X(i) - Array containing output data.
- C N - Number of scores to be punched.
- C IO - Output Logical Unit Number.
- C ID - Character subject identification (Max=8).
- C REMARKS: None.
- C SUBPROGRAMS REQUIRED: None.
- C METHOD: Not applicable.
- C ............................................................
- CHARACTER ID*8
- REAL*4 X(1)
- M = IABS(N)
- L = 1
- DO 10 I = 1,M,7
- K = MIN0(I + 6, M)
- WRITE (IO,5) ID, L, (X(J), J = I,K)
- L = L + 1
- 10 CONTINUE
- RETURN
- 5 FORMAT (A8, I2, 7F10.4)
- END
- FUNCTION UPPER (CHARX)
- C ............................................................
- C Lower to Upper Case Translation
- C SOURCE OR AUTHOR: Thomas Wm. Madron
- C PURPOSE: To convert an ASCII character from lower to upper
- C case.
- C USAGE:
- C II = UPPER(CHARX)
- C DESCRIPTION OF PARAMETERS:
- C CHARX - Character*1 variable used to pass character
- C from the calling program.
- C REMARKS: If the function is compiled with the main program,
- C then UPPER must be declared as CHARACTER*1 only in the
- C calling program. If the function is added to a program
- C library, then the CHARACTER declaration must be within
- C the function.
- C SUBPROGRAMS REQUIRED: None.
- C METHOD: Not applicable.
- C ............................................................
- INTEGER*2 IUPPER
- C CHARACTER CHARX
- CHARACTER CHARX, UPPER
- II = 0
- JJ = ICHAR(CHARX)
- IF (95 .LT. JJ) II = -1
- IUPPER = JJ + (32 * II)
- UPPER = CHAR(IUPPER)
- RETURN
- END
- SUBROUTINE VPRTS (TITLE,NVAR,X,NR,NC,FH,IDIAG,NCALL,ND)
- C ............................................................
- C Display a Matrix
- C SOURCE OR AUTHOR: Modified from Donald J. Veldman, FORTRAN
- C PROGRAMMING FOR THE BEHAVIORAL SCIENCES (New York:
- C Holt, Rinehart and Winston, 1967), pp. 135-37. The
- C original was written in FORTRAN IV.
- C PURPOSE: To print a matrix or vector in ten-column
- C partitions on an 80 column video display.
- C USAGE:
- C CALL VPRTS (TITLE,NVAR,X,NR,NC,FH,IDIAG,NCALL,ND)
- C DESCRIPTION OF PARAMETERS:
- C TITLE - Character*64 variable containing a title for
- C the matrix.
- C NVAR - Vector of variable labels.
- C X() - Matrix to be printed.
- C NR - Number of rows in the matrix.
- C NC - Number of columns in the matrix (set = 1 if X()
- C is a vector).
- C FH - Character*4 variable containing a name for the
- C matrix for output.
- C IDIAG - Flag for printing a diagonal matrix (0=no;
- C 1=yes).
- C NCALL - Counter for the number of times VPRTS is called
- C during an analysis. Must be set before entry
- C to the subroutine.
- C ND - Number of rows dimensioned in X().
- C REMARKS: None.
- C SUBPROGRAMS REQUIRED: None.
- C METHOD: Not applicable.
- C ............................................................
- CHARACTER TITLE*64, FH*4
- INTEGER*2 NVAR(NR), I, J, M, IA, JA
- REAL*4 X(ND,NC)
- C PRINT AN N X M MATRIX
- IF (NC .GT. 1) THEN
- DO 100 I=1,NR,10
- IA = I+9
- IF (IA-NR) 15,10,10
- 10 IA = NR
- 15 DO 75 J=1,NC,10
- JA = J+9
- IF (JA-NC) 25,20,20
- 20 JA = NC
- 25 CALL HEADER
- WRITE (*,'('' '',A)') TITLE
- WRITE (*,50) FH, (NVAR(M),M=J,JA)
- DO 70 L=I,IA
- WRITE (*,65) NVAR(L),(X(L,M),M=J,JA)
- 70 CONTINUE
- CALL WAIT (NCALL)
- IF (NCALL .GE. 1) GO TO 15
- 75 CONTINUE
- 100 CONTINUE
- C RETURN
- C PRINT A VECTOR
- ELSEIF (NC .EQ. 1) THEN
- 110 CALL HEADER
- WRITE (*,'('' '',A)') TITLE
- DO 130 I=1,NR,10
- J = MIN0(I + 9, NR)
- WRITE (*,115) FH, (NVAR(K), K = I,J)
- WRITE (*,120) (X(K,1), K=I,J)
- 130 CONTINUE
- CALL WAIT (NCALL)
- IF (NCALL .GE. 1) GO TO 110
- C RETURN
- C PRINT A DIAGONAL MATRIX
- ELSEIF (IDIAG .GT. 0) THEN
- 210 CALL HEADER
- WRITE (*,'(A)') TITLE
- DO 230 I = 1,NR,10
- J = MIN0(I + 9, NR)
- WRITE (*,115) FH, (NVAR(K), K=I,J)
- WRITE (*,120) (X(K,K), K=I,J)
- 230 CONTINUE
- CALL WAIT (NCALL)
- IF (NCALL .GE. 1) GO TO 210
- ENDIF
- RETURN
- C FORMAT STATEMENTS
- 50 FORMAT (1H ,A4,10I7)
- 65 FORMAT (1H ,I4,10F7.3)
- 115 FORMAT (1H ,A4,10I7)
- 120 FORMAT (1H ,4X,10F7.3)
- END
- SUBROUTINE WAIT (NCALL)
- C ............................................................
- C Wait for Response
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To pause for operator intervention to continue
- C execution of a program.
- C USAGE: CALL WAIT (NCALL)
- C DESCRIPTION OF PARAMETERS:
- C NCALL - Counter for the number of times VPRTS is called
- C to determine the help file to call.
- C REMARKS: If no help subroutines are used, a dummy help sub-
- C routine should accompany the main program.
- C SUBPROGRAMS REQUIRED:
- C LOCATE (nrow, ncol)
- C INSTR (string, srchchar, len) [function]
- C UPPER (char) [function]
- C HELP (ncall)
- C METHOD: Uses ANSI screen control, see your MS-DOS manual
- C for further information.
- C ............................................................
- CHARACTER A, HELPX, UPPER, INPUT*80, OUTPUT*80
- C CHARACTER A, HELPX, INPUT*80, OUTPUT*80
- HELPX = 'H'
- IROW = 25
- LL = 80
- IF (NCALL .GT. 0) THEN
- INPUT =
- 1 '<<Press {ENTER} to Continue or {H} for Help>>\'
- CALL CENTER (INPUT, OUTPUT, LL)
- ICOL = 1
- CALL LOCATE (IROW,ICOL)
- WRITE (*, '(A78\)') OUTPUT
- READ (*, '(A1)') A
- A = UPPER(A)
- IF (A .EQ. HELPX) THEN
- CALL HELP (NCALL)
- ELSE
- NCALL = 0
- ENDIF
- ELSE
- INPUT = '<<Press {ENTER} to Continue>>\'
- CALL CENTER (INPUT, OUTPUT, LL)
- ICOL = 1
- CALL LOCATE (IROW,ICOL)
- WRITE (*, '(A78\)') OUTPUT
- READ (*,'(A1)') A
- ENDIF
- RETURN
- END
- SUBROUTINE WTMAT (R, FMEAN, STD, NV, DTFILE, FMT,
- 1 TITLE, IDISK4, IDIAG, N, LL, ND)
- C ............................................................
- C Write a Standard Matrix to Disk
- C SOURCE OR AUTHOR: Thomas Wm. Madron.
- C PURPOSE: To save a standard matrix to disk.
- C USAGE: CALL WTMAT (R, FMEAN, STD, NV, DTFILE, FMT, TITLE,
- C 1 IDISK4, IDIAG, N, LL, ND)
- C DESCRIPTION OF PARAMETERS:
- C R - Doubly Subscripted array containing a
- C correlation or similar matrix.
- C FMEAN - Singly subscripted array of means for each
- C variable.
- C STD - Singly subscripted array of standard
- C deviations for each variable.
- C NV - Number of Variables.
- C DTFILE - CHARACTER*14 character variable containing
- C the name of a raw data input file.
- C FMT - CHARACTER*80 character variable containing a
- C standard format statement describing the raw
- C data file.
- C TITLE - CHARACTER*64 character variable containing a
- C title or label for the file.
- C IDISK4 - Logical Unit Number (LUN) for output matrix
- C file.
- C IDIAG - Flag for array type for use of Subroutine
- C SUBS.
- C N - Number of observations represented by the
- C summary statistics (means, standard
- C deviations, and correlations).
- C LL - Line Length for the video display--usually
- C 80.
- C ND - Number of row dimensions for the doubly
- C subscripted variable.
- C REMARKS:
- C THE STANDARD MATRIX FILE: The standard matrix file
- C is an ASCII file with a well defined format, produced
- C in part with SUBROUTINE PCDS. It consists of six
- C record types:
- C 1. Header Record containing the number of variables
- C and title (not to exceed 64 characters) for the
- C matrix in the following format: (I5, A64)
- C 2. Record(s) containing a vector of means, one for
- C each variable. The second field is a row number,
- C the third is a physical record number within the
- C logical record, followed by up to 12 floating
- C point numbers per physical record. For a vector
- C the row number is always one (1). For a
- C correlation matrix the number of rows will equal
- C the number of variables in the matrix. The first
- C four columns contain 'MEAN": (A4,I2,I2,12F10.4)
- C 3. Record(s) containing a vector of standard
- C deviations for each variable. The format is
- C identical to (2), above.
- C 4. Records containing a N x M correlation matrix,
- C including the correlation coefficients above the
- C diagonal, the number of observations for each
- C variable on the diagonal, and the number of obser-
- C vations present for each pair of variables on
- C which each corresponding correlation was based.
- C The format is identical to (2), above.
- C 5. File specifications (d:filename.ext) for the
- C original dataset not to exceed 14 characters.
- C This is used if subsequent programs require access
- C to the original data for residuals or other
- C predicted scores.
- C 6. Format statement for the raw data as read by CORL.
- C This is also used if subsequent programs require
- C access to the original data.
- C SUBPROGRAMS REQUIRED:
- C CENTER (INPUT, OUTPUT, N)
- C HEADER
- C LOCATE (IROW, ICOL)
- C PCDS (X, N, M, FH, IO, IDIAG, ND)
- C NOTE: IDISK4 must be opened prior to entry.
- C METHOD: Not Applicable.
- C ............................................................
- C SPECIFICATION STATEMENTS
- CHARACTER DTFILE*14, FMT*80, TITLE*64, INPUT*80,
- 1 OUTPUT*80
- REAL*4 R(ND,NV), FMEAN(NV), STD(NV)
- INTEGER*2 I, J
- C PREPARE TO WRITE THE STANDARD MATRIX
- CALL HEADER
- INPUT =
- 1 '* * * Writing the Matrix, Please Wait * * *\'
- CALL CENTER (INPUT, OUTPUT, LL)
- NROW = 10
- NCOL = 1
- CALL LOCATE (NROW, NCOL)
- WRITE (*,'(A\)') OUTPUT
- C WRITE STANDARD MATRIX
- WRITE (IDISK4,'(I5,A)') NV, TITLE
- CALL PCDS (FMEAN,NV,1,'MEAN',IDISK4,IDIAG,ND)
- CALL PCDS (STD,NV,1,'STDV',IDISK4,IDIAG,ND)
- CALL PCDS (R,NV,NV,'CORL',IDISK4,IDIAG,ND)
- WRITE (IDISK4,'(A)') DTFILE
- WRITE (IDISK4,'(A)') FMT
- CLOSE (IDISK4, STATUS='KEEP')
- RETURN
- END