C***********************************************************************
C     PROGRAM TRANSECT --  THIS PROGRAM HAS BEEN DESIGNED AS A GENERAL
C     ANALYSIS PACKAGE FOR ESTIMATION OF DENSITY FROM LINE TRANSECT
C     DATA.  GENERAL INFORMATION AND REFERENCES DESCRIBING THE PROGRAM
C     ARE GIVEN THROUGH FORMAT STATEMENTS DURING PROGRAM EXECUTION.
C
C
C          THE INPUT FOR THE PROGRAM CONSISTS OF A CONTROL CARD SET AND
C     A DATA SET WHICH CAN BE ON THE SAME OR DIFFERENT FILES.THE PROGRAM
C     IS DESIGNED TO HANDLE A SERIES OF CONTROL CARD AND DATA SETS FOR
C     EACH PROGRAM EXECUTION.THESE SERIES ARE SEPARATED WITH A FLAG CARD
C     WHICH HAS 'END.' IN THE FIRST FOUR COLUMNS OF THE RECORD(CARD).
C          AN INDIVIDUAL DATA SET CAN BE COMPOSED OF ANY NUMBER OF REP-
C     LICATIONS (I.E., DISTINCT TRANSECT LINES).  THE PROGRAM CAN BE
C     MADE TO ANALYZE ALL OF THE REPLICATIONS TOGETHER(POOL) OR EACH
C     OF THE REPLICATIONS SEPARATELY(.NOT. POOL).  IF THE DATA ARE
C     POOLED THEN THE NUMBER OF REPLICATIONS(IREP) IS 1.  IF THE DATA
C     ARE NOT POOLED THEN THE NUMBER OF REPLICATIONS(IREP) IS EQUAL
C     TO THE NUMBER OF REPLICATIONS(LINES) WHICH HAVE A NON-ZERO SAMPLE
C     SIZE( REPLICATIONS WITH A SAMPLE SIZE OF ZERO ARE INDICATED
C      IN THE CONTROL CARDS).
C          IF THE CONTROL CARD SETS AND THE DATA SETS ARE ON THE SAME
C     FILE THEN THE FORM OF THE INPUT FILE IS AS FOLLOWS:
C
C          CONTROL CARD SET 1
C          DATA SET  1
C             LINE 1
C             LINE 2
C              .
C              .
C              .
C             LINE IREP
C          END.
C          CONTROL CARD SET 2
C          DATA SET 2
C             LINE 1
C             LINE 2
C              .
C              .
C              .
C             LINE IREP
C          END.
C           .
C           .
C           .
C           - END OF FILE -
C
C          IF THE CONTROL CARD SETS AND DATA SETS ARE ON SEPARATE FILES
C     THEN THE FORM OF THE INPUT FILES ARE AS FOLLOWS:
C
C          CONTROL CARD FILE
C          -----------------
C          CONTROL CARD SET 1
C          END.
C          CONTROL CARD SET 2
C          END.
C           .
C           .
C           .
C          - END OF FILE -
C
C          DATA FILE
C          ---------
C          DATA SET 1
C             LINE 1
C             LINE 2
C              .
C              .
C              .
C             LINE IREP
C          END.
C          DATA SET 2
C             LINE 1
C             LINE 2
C              .
C              .
C              .
C          END.
C           .
C           .
C           .
C          - END OF FILE -
C
C
C          IN THE PROGRAM THE VARIABLE IC IS USED AS A FLAG TO INDICATE
C     THE END OF DATA SETS AND THE END OF THE DATA FILE.  THE VARIABLE
C     II IS USED AS A COUNTER FOR REPLICATIONS WITHIN A DATA SET.
C         THE GENERAL FLOW OF THE PROGRAM IS:1)PROCESS THE CONTROL CARDS
C     IN CNTRL, 2)READ IN THE DATA AND DO DESCRIPTIVE OUTPUT IN GRPD OR
C     UNGRPD, 3)PERFORM PERPENDICULAR DISTANCE ESTIMATION (PEREST) AND/
C     OR SIGHTING DISTANCE-ANGLE ESTIMATION (SIGEST), 4) CALL SUMARY
C     TO SUMMARIZE THE RESULTS IF THERE IS MORE THAN ONE ESTIMATOR AND
C     TO STORE THE ESTIMATES, 5) CHECK IF ALL OF THE REPLICATIONS HAVE
C     BEEN PROCESSED - A)IF THEY HAVE AND THE END OF THE DATA WAS REACH-
C     ED (IC=-1 OR -2) THEN CALL SUMARY IF SEPARATE ESTIMATES OF DENSITY
C     WERE MADE FOR EACH REPLICATE.  THEN EITHER PROCESS MORE CONTROL
C     CARDS(IC=-2) OR STOP(IC=-1), B) IF THEY HAVE BUT THE END OF THE
C     DATA WAS NOT REACHED(IC=0) THEN TRY TO SKIP THE DATA SET AND
C     CONTINUE(THIS MEANS MORE REPLICATES WERE GIVEN THAN INDICATED BY
C     CONTROL CARDS),C)IF THEY HAVE NOT AND IC=0 THEN INCREASE THE COUN-
C     TER II BY 1 AND GO BACK TO STEP 2 TO PROCESS MORE REPLICATIONS,OR
C     D) IF THEY HAVE NOT AND IC=-1, WRITE OUT AN ERROR MESSAGE AND STOP
C     OR IF IC=-2 WRITE OUT AN ERROR MESSAGE AND CONTINUE AT STEP 1(THIS
C     MEANS THAT TOO FEW REPLICATIONS WERE FOUND THAN WERE INDICATED BY
C     THE CONTROL CARDS).
C
C        THE FOLLOWING IS A LIST OF THE COMMON STATEMENTS USED THROUGH-
C     OUT THE PROGRAM.  NUMBERS 20-27 ARE ONLY FOR TEMPORARY STORAGE AND
C     NOT OF MAJOR CONCERN.
C
C        1) ALPHA
C        2) DESOPT
C        3) DPAR
C        4) ESTM
C        5) FILE
C        6) IND
C        7) INTEG
C        8) INTER
C        9) LINE
C       10) MEASUR
C       11) NUM
C       12) OLD
C       13) OPTION
C       14) PART
C       15) PDOPT
C       16) SPLOT
C       17) SOLN
C       18) STATS
C       19) STORE
C       20) TS
C       21) KEEP
C       22) HOLD
C       23) TEMP
C       24) LPASS
C       25) SUMST
C       26) TSINTG
C       27) ERROR
C
C        THE FOLLOWING IS A LIST OF THE VARIABLES IN THE FIRST 19 COM-
C     MON STATEMENTS IN ALPHABETICAL ORDER.  A DEFINITION IS GIVEN FOR
C     THE VARIABLE AND THE NUMBER OF THE ASSOCIATED COMMON STATEMENT IS
C     IN PARANTHESIS.
C
C     A(I) (3) -   I=1,NPAR; THE ARRAY OF ESTIMATED COEFFICIENTS FOR THE
C                  PARTICULAR ESTIMATOR BEING EXAMINED.  IT IS ALSO RE-
C                  FERENCED AS PAR(I), I=1, NPAR.
C
C     CCUT(I,J) (8) -   I=1,NCUT, J=1,NKC (I); CONTAINS THE CUT POINTS
C                       FOR THE NCUT SET OF CUT POINTS.
C
C     CDFPLT (2) - LOGICAL VARIBLE THAT INDICATES CDF PLOTS OF THE DATA
C                  SHOULD BE OUTPUT (IF TRUE).
C
C     CELL (I) (14) - I=1, KCUT; THE AREA UNDER THE CURVE F(X) FOR
C                    CUT(I-1).LE.X.LE.CUT(I) .
C
C     CNT (11) -   THE NUMBER OF OBSERVATIONS OF PERPENDICULAR DISTANCE
C                  AFTER TRUNCATION.
C
C     CONV (11) -  AN ARRAY CONTAINING THE CONVERSION FACTORS FOR DIS-
C                  TANCE, LENGTH, AND AREA.
C
C     CORMAT (I,J) (18) - I=1,5, J=1,5, - AN ARRAY WHICH CONTAINS THE
C                  CORRELATIONS (LOWER DIAGONAL) OF THE 5 POSSIBLE MEAS-
C                  UREMENTS AND THEIR SIGNIFICANCE LEVEL(UPPER DIAGONAL)
C
C     CUT (I) (8) - I=1, KCUT; A SET OF CUT POINTS FOR PERPENDICULAR
C                  DISTANCE.
C
C     CUTP (13) -  LOGICAL VARIABLE THAT INDICATES THE USER WILL DEFINE
C                  CUT POINTS FOR THE HISTOGRAMS OF PERPENDICULAR DIS-
C                  TANCES. (IF TRUE)
C
C     D (I) (19) - I=1, NPD+NSD; STORES DENSITY ESTIMATES FOR BOTH PER-
C                  PENDICULAR DISTANCE ESTIMATORS AND SIGHTING DISTANCE-
C                  ANGLE ESTIMATORS FOR A PARTICULAR REPLICATION FOR
C                  SUMMARIZATION.
C
C     DATA (I,J) (10) - I=1,N, J=1,5; THIS ARRAY CONTAINS THE RAW DATA.
C                  IN ORDER, IT CONTAINS PERPENDICULAR DISTANCES (J=1),
C                  SIGHTING DISTANCES (J=2), MEASURED SIGHTING ANGLE (J=
C                  3), COMPUTED SIGHTING ANGLE (J=4) AND THE SINE OF THE
C                  SIGHTING ANGLE (J=5).  OFTEN THIS ARRAY WILL BE SPEC-
C                  IFIED BY PD(OR X), SD, MESANG, COMANG, SINA.
C
C     DEF (13) -   LOGICAL VARIABLE THAT INDICATES THE USER HAS CHOSEN
C                  THE DEFAULT MODE (IF TRUE).
C
C     DESC (13) -  LOGICAL VARIABLE THAT INDICATES DESCRIPTIVE OUTPUT
C                  SHOULD BE GIVEN (IF TRUE).
C
C     DL (I) (19) - I=1, NPD+NSD; STORES THE LOWER CONFIDENCE LIMITS OF
C                  THE DENSITY ESTIMATES FOR SUMMARIZATION.
C
C     DU (I) (19) - I=1, NPD+NSD -;STORES THE UPPER CONFIDENCE LIMITS OF
C                  THE DENSITY ESTIMATES FOR SUMMARIZATION.
C
C     FMAX (17) -  THE MAXIMUM VALUE OF F(X) FOR   0.LE. X .LE.W.
C
C     FMIN (17) -  THE MINIMUM VALUE OF F(X)  (USUALLY SET TO ZERO
C                  EXCEPT FOR THE FOURIER SERIES WHICH CAN GO NEGATIVE).
C
C     FREQ (I) (8) - I=1, KCUT; THE FREQUENCIES CORRESPONDING TO THE IN-
C                  TERVALS IN CUT.
C
C     FZ (17) -    AN ARRAY OF FUNCTIONAL EVALUATIONS OF F(X) FOR PLOT-
C                  TING.
C
C     FZERO (17) - THE POINT ESTIMATE OF F(0) - THE PDF OF PERPENDICULAR
C                  DISTANCES EVALUATED AT THE ORIGIN - REFERENCED SOME-
C                  TIMES AS F0.
C
C     G (I) (12) - I=1, NPAR; THE VALUES OF THE LOG-LIKELIHOOD EQUATIONS
C                  FOR THE NPAR PARAMETERS AT THEIR CURRENT VALUES.
C
C     GRP (13) -   LOGICAL VARIABLE THAT INDICATES THE DATA ARE GROUPED
C                  (IF TRUE).
C
C     HEAD (1) -   CONTAINS THE LABEL FOR THE SUBSET OF THE DATA.
C
C     HELP (13) -  LOGICAL VARIABLE THAT INDICATES NARRATIVE MATERIAL
C                  SHOULD BE OUTPUT (IF TRUE).
C
C     HIST (2) -  LOGICAL VARIABLE THAT INDICATES HISTOGRAMS OF THE DATA
C                  SHOULD BE OUTPUT (IF TRUE).
C
C     IC (6) -     A FLAG CARD IF IC=0 THEN MORE REPLICATIONS ARE STILL
C                  TO BE PROCESSED, IF IC=-2 THEN AN END. CARD WAS PRO-
C                  CESSED SO ANOTHER CONTROL CARD SET IS PROCESSED, AND
C                  IF IC=-1 THEN THE END OF THE DATA FILE WAS ENCOUNTER-
C                  ED.
C
C     IDF (11) -   THE NUMBER OF DEGREES OF FREEDOM FOR THE T-DISTRIBU-
C                  TION; IT IS EQUAL TO THE NUMBER OF REPLICATE LINES -1
C
C     II (6) -     A COUNTER FOR THE REPLICATION WHICH IS CURRENTLY
C                  BEING PROCESSED.
C
C     IMAT (I,J) (12) - I=1, NPAR, J=1, NPAR; A STORAGE SPACE FOR THE
C                      VARIANCE-COVARIANCE MATRIX.
C
C     IPAGE (1) -  THE PAGE NUMBER FOR THE OUTPUT.
C
C     IREP (6) -   THE NUMBER OF REPLICATIONS IN THE DATA. IF POOL IS
C                  TRUE THEN IREP=1 AFTER A VARIANCE OF N IS CALCULATED.
C                  IF POOL IS FALSE THEN IREP IS THE NUMBER OF REPLICA-
C                  TIONS WITH A NON-ZERO SAMPLE SIZE.
C
C     KCUT (8) -   THE NUMBER OF INTERVALS FOR A PARTICULAR SET OF CUT
C                  POINTS FOR PERPENDICULAR DISTANCE.
C
C     LABEL (1) -  AN ARRAY CONTAINING THE GENERAL LABEL.
C
C     LIST (2) -   LOGICAL VARIABLE THAT INDICATES A DATA LISTING AND
C                  SUMMARY STATISTICS SHOULD BE OUTPUT (IF TRUE).
C
C     LOGL (I) (19) - I=1, NPD; STORES THE LOG-LIKELIHOOD VALUES OF THE
C                  PERPENDICULAR DISTANCE ESTIMATES FOR SUMMARIZATION.
C
C     N (11)-      THE TOTAL SAMPLE SIZE OF OBSERVATIONS.
C
C     NCUT (8) -   THE NUMBER OF CUT POINT SETS FOR THE HISTOGRAMS OF
C                  PERPENDICULAR DISTANCE; IF THE PROGRAM SPECIFIES THE
C                  CUT POINTS FOR UNGROUPED DATA THEN NCUT=3; FOR GROUP-
C                  ED DATA NCUT=1.
C
C     NK (I) (8) - I=1, NCUT; CONTAINS THE SAME AS NKC EXCEPT THE UN-
C                  MODIFIED NUMBERS ARE STORED HERE.
C
C     NKC (I) (8) - I=1, NCUT; CONTAINS THE NUMBER OF CUT POINTS (KCUT)
C                  FOR EACH CUT POINT SET.  THIS NUMBER IS MODIFIED IF
C                  SOME OF THE CUT POINTS EXCEED THE WIDTH.
C
C     NPAR (3) -   THE NUMBER OF PARAMETERS USED IN THE MODEL.
C
C     NPD (4) -    THE NUMBER OF PERPENDICULAR DISTANCE ESTIMATORS TO BE
C                  COMPUTED.
C
C     NPSET (I) (15) - I=1, NPD+NSD; CONTAINS THE NUMBER OF PARAMETERS
C                  TO BE USED IN AN ESTIMATOR AS SPECIFIED BY THE
C                  USER.  IF STARTING VALUES HAVE BEEN GIVEN BY THE USER
C                  THEN IT CONTAINS THE NUMBER OF STARTING VALUES.  IT
C                  IS ALSO USED TO STORE THE FINAL NUMBER OF PARAMETERS
C                  USED IN THE MODEL AS DETERMINED BY THE PROGRAM IF
C                  THEY WERE NOT SPECIFIED BY THE USER.
C
C     NSD (4) -    THE NUMBER OF SIGHTING DISTANCE ESTIMATORS TO BE COM-
C                  PUTED.
C
C     OLDG (I) (12) - I=1, NPAR; THE VALUES OF THE LOG-LIKELIHOOD EQUA-
C                  TIONS FOR THE NPAR PARAMETERS AT THEIR OLD VALUES
C                  FROM THE PREVIOUS STEP.
C
C     OLDPAR (I) (12) - I=1, NPAR; THE VALUES OF THE PARAMETER ESTIMATES
C                  AT THE PREVIOUS STEP.
C
C     OLDXLL (12) - THE LOG-LIKELIHOOD VALUE AT THE PREVIOUS PARAMETER
C                  ESTIMATES.
C
C     PB (I,J) (19) - I=1, NCUT, J=1, NPD; STORES THE CHI-SQUARE PROBA-
C                  BILITIES OF THE GOODNESS OF FIT OF THE PERPENDICULAR
C                  DISTANCE ESTIMATORS TO THE VARIOUS CUT POINT SETS.
C
C     PCELL (I,J) (14) - I-1, KCUT, J=1, NPAR; THE VALUE OF THE PARTIALS
C                   OF F(X) FOR CUT(I-1).LE. X .LE. CUT(I), FOR THE JTH
C                   PARAMETER
C
C     PDEST (I)(4) - I=1, NPD;THE INDICES FOR THE PERPENDICULAR DISTANCE
C                  ESTIMATORS.
C
C     PEST (13) -  LOGICAL VARIABLE THAT INDICATES PERPENDICULAR DIS-
C                  TANCE ESTIMATION SHOULD BE PERFORMED (IF TRUE).
C
C     PLOTS (2) -  LOGICAL VARIABLE THAT INDICATES CROSS PLOTS OF THE
C                  DATA SHOULD BE OUTPUT (IF TRUE).
C
C     PLT (I,J) (16) - I=1, 51, J=1, 103; AN ARRAY WHICH IS USED FOR
C                  PLOTTING CROSSPLOTS, CDF PLOTS, AND PLOTS OF HISTO-
C                  GRAMS OF PERPENDICULAR DISTANCE OVERLAID WITH THE ES-
C                  TIMATED FUNCTION.
C
C     POOL (13) -  LOGICAL VARIABLE THAT INDICATES THE DATA SHOULD BE
C                  POOLED FOR ONE DENSITY ESTIMATE (IF TRUE).
C
C     PRF0A (7) -  F0R THE PARAMETRIC PERPENDICULAR DISTANCE MODELS THIS
C                  VARIABLE CONTAINS THE VALUE OF THE PARTIAL OF F(0)
C                  WITH RESPECT TO THE FIRST PARAMETER.
C
C     PRF0B (7) -  SAME AS PRF0A EXCEPT FOR THE SECOND PARAMETER.
C
C     PSTRT (I,J) (15) - I=1, NPD, J=1, NPSET(I); CONTAINS THE STARTING
C                  VALUES FOR THE PERPENDICULAR DISTANCE ESTIMATORS
C                  WHICH HAVE BEEN SPECIFIED BY THE USER.
C
C     RF0 (7) -    F0R THE PARAMETRIC PERPENDICULAR DISTANCE MODELS THIS
C                  VARIABLE CONTAINS THE VALUE OF THE NORMALIZING CON-
C                  STANT. FZERO= 1./RF0.
C
C     RFREQ (I,J)(8) - I=1,NCUT, J=1,NKC(I);CONTAINS THE FREQUENCIES FOR
C                  THE NCUT SETS OF CUT POINTS.
C
C     SDEST (I) (4) - I=1, NSD; THE INDICES FOR THE SIGHTING DISTANCE
C                  ESTIMATORS.
C
C     SEST (13) -  LOGICAL VARIABLE THAT INDICATES SIGHTING DISTANCE -
C                  ANGLE ESTIMATION SHOULD BE PERFORMED (IF TRUE).
C
C     SET (15) -   A LOGICAL VARIABLE THAT INDICATES THAT THE NUMBER OF
C                  PARAMETERS WILL BE SET IN THE MODEL.  THE LOGICAL
C                  VARIABLE MSET HAS THE SAME RELATIONSHIP TO SET AS
C                  MSTRT DOES TO STRT.
C
C     SK (5) -     A LOGICAL VARIABLE WHICH IF TRUE INDICATES THAT A SET
C                  OF DATA AND CONTROL CARDS HAVE BEEN SUCCESSFULLY
C                  SKIPPED IF AN ERROR IS ENCOUNTERED.
C
C     SM (I) (18) - I=1, 10; AN ARRAY CONTAINING THE MEANS (I=1,5) AND
C                  STANDARD ERRORS (I=6,10) OF THE 5 POSSIBLE MEASURE-
C                  MENTS (PD,SD,MESANG,COMANG,SINA).
C
C     STATUS (6) - CONTAINS AN INTEGER VALUE WHICH INDICATES THE TYPES
C                  OF MEASUREMENTS RECORDED.
C
C     STD (I) (19) - I=1, NPD+NSD; STORES THE STANDARD ERRORS OF THE
C                    DENSITY ESTIMATES FOR SUMMARIZATION.
C
C     STRT (15) - A LOGICAL VARIABLE THAT INDICATES THAT STARTING VALUES
C                  ARE GIVEN ON THE ESTIMATOR CONTROL CARDS.  THE
C                  LOGICAL VARIABLE MSTRT SERVES THE SAME PURPOSE AS
C                  STRT BUT IT IS SPECIFIC FOR THE ESTIMATOR BEING COM-
C                  PUTED.  NOT ALL ESTIMATORS NEED TO HAVE STARTING
C                  VALUES.
C
C     SYSIN (5) -  THE DATA INPUT FILE NUMBER.
C
C     SXL (9) -    THE TOTAL LINE LENGTH FOR ALL RELICATE LINES.
C
C     TRUNC (13) - LOGICAL VARIABLE THAT INDICATES THE DATA ARE TRUN-
C                  CATED (IF TRUE).
C
C     UL (1) -     AN ARRAY CONTAINING THE LABELS FOR THE UNITS OF DIS-
C                    TANCE,LENGTH, AND AREA MEASUREMENTS.
C
C     VARA (I,J) (3) - I=1, NPAR, J=1, NPAR; THE ESTIMATED VARIANCE CO-
C                  VARIANCE MATRIX OF THE ESTIMATED COEFFICIENTS (ALSO
C                  REFERENCED AS VCMAT (I,J).
C
C     VARF (17) -  THE VARIANCE ESTIMATE OF F(0) SOMETIMES REFERENCED
C                  AS VARF0.
C
C     VARN (11) -  THE SAMPLING VARIANCE OF THE NUMBER OF OBSERVATIONS-
C                  AFTER TRUNCATION; IF WARN=TRUE THEN IT IS EQUAL TO
C                  THE SAMPLE SIZE CNT; IF WARN IS FALSE IT CONTAINS A
C                  VARIANCE ESTIMATE WEIGHTED BY LINE LENGTH FROM THE
C                  NUMBER OF OBSERVATIONS FROM THE REPLICATE LINES.
C
C     WARN (11) -  A LOGICAL VARIABLE WHICH INDICATES THAT IT IS ASSUM-
C                  ED THAT THE DISTRIBUTION OF THE SAMPLE SIZE IS
C                  POISSON (IF TRUE).
C
C     WIDTH (11) - THE WIDTH OF THE TRANSECT; IF TRUNC IS TRUE THEN THE
C                  WIDTH HAS BEEN SPECIFIED BY THE USER; IF TRUNC IS
C                  FALSE THEN THE WIDTH IS THE LARGEST PERPENDICULAR
C                  DISTANCE FOR UNGROUPED DATA OR THE FINAL CUT POINT
C                  IN GROUPED DATA.
C
C     XL (I) (11) - I=1, IREP; AN ARRAY CONTAINING THE LINE LENGTHS FOR
C                  THE VARIOUS REPLICATIONS.
C
C     XLL (12) -   THE LOG-LIKELIHOOD VALUE AT THE CURRENT PARAMETER
C                  ESTIMATES.
C
C      NOTES:
C     THERE ARE TWO DIMENSIONS WHICH MAY NEED TO BE ADJUSTED IN THE PRO-
C     GRAM DEPENDING ON THE PARTICULAR NEEDS OF THE USER.  THESE TWO
C     DIMENSIONS ARE THE MAXIMUM NUMBER OF DATA POINTS AND THE MAXIMUM
C     NUMBER OF REPLICATE LINES.  THEY ARE NOW SET IN PARMTR.INC, AND ARE
C     INCLUDED AS NECESSARY TO CHANGE THE PROGRAM.  HENCE ONLY THE
C     PARAMETER STATEMENTS IN PARMTR.INC REQUIRE CHANGING.
C
C     THE LOGICAL UNITS USED IN THE PROGRAM ARE:
C          5 - DATA INPUT FILE(FOR CONTROL CARDS AND/OR DATA)
C          6 - OUTPUT FILE
C     OTHER LOGICAL UNITS CAN BE SPECIFIED FOR THE INPUT FILE FOR THE
C     DATA BUT THE CONTROL CARDS MUST ALWAYS BE ON FILE 5.  THE USER IS
C     RESPONSIBLE FOR SETTING UP THE NECESSARY FILE CONTROL CARDS FOR
C     THE PARTICULAR COMPUTER ON WHICH THE PROGRAM WILL BE RUN.
C
C     THIS PROGRAM WAS WRITTEN BY JEFFREY L. LAAKE (INTER-AMERICAN
C     TROPICAL TUNA COMMISSION) AND KENNETH P. BURNHAM (U S FISH AND
C     WILDLIFE SERVICE)
C
C***********************************************************************
      PROGRAM TRNSCT
C***********************************************************************
C                           MAIN PROGRAM
C
C
C     SUBROUTINES CALLED: CNTRL,GRPD,UNGRPD,PEREST,SIGEST,SUMARY,SKIP,
C                         HEADER
C***********************************************************************
C     DECLARATIONS
C***********************************************************************
      INCLUDE 'PARMTR.INC'
      CHARACTER*1 BLK(30), TITLE(30), BL, UL, LABEL, HEAD, KEY(4)
      CHARACTER*66 FILEIN,FILOUT,FILDOC
      CHARACTER*1 PLOT(51,68)
      CHARACTER*255 PATH(2)
      EQUIVALENCE (PLOT,PATH)
      INTEGER CNT, PDEST, SDEST, SYSIN, STATUS, FILPOS
      LOGICAL WARN, STRT, SET, SK, GRP, POOL, PEST, SEST, DESC, DEF,
     1 CUTP, TRUNC
      LOGICAL LIST, HST, CDFPLT, PLOTS, HELP, ALLBLK, FEXIST
      REAL LOGL, XHOLD(3)
C***********************************************************************
C     COMMON STATEMENTS
C***********************************************************************
      COMMON /STORE/ D(13), DL(13), DU(13), STD(13), LOGL(10), PB(5,10)
      COMMON /IND/ IC, II, IREP, STATUS
      COMMON /HOLD/ XHOLD, ALLBLK
      COMMON /HOLDS/ TITLE, BLK
      COMMON /FILE/ SYSIN, SK, FILPOS
      COMMON /FILES/ FILEIN,FILOUT,FILDOC
      COMMON /PLOTS/ PLOT
      COMMON /NUM/ XL(MAXLIN), WIDTH, N, CNT, CONV(3), VARN, IDF, WARN
      COMMON /INTER/ KCUT, CUT(MAXCEL), FREQ(MAXCEL), NCUT, NKC(5),
     1    NK(5), RFREQ(5,MAXCEL), CCUT(5,MAXCEL)
      COMMON /ESTM/ PDEST(10), SDEST(3), NSD, NPD
      COMMON /PDOPT/ STRT, SET, PSTRT(10,MAXPAR), NPSET(10)
      COMMON /OPTION/ GRP, POOL, PEST, SEST, DESC, DEF, CUTP, TRUNC,
     1 HELP
      COMMON /DESOPT/ LIST, PLOTS, HST, CDFPLT
      COMMON /ALPHA/ LABEL(80), HEAD(30), UL(3,25)
      COMMON /PAGE/ IPAGE
      COMMON /LINE/ SXL
      COMMON /SOLN/ FZERO, VARF, FMAX, FMIN, FZ(100)
      COMMON /MEASUR/ DATA(MAXOBJ,5)
      DOUBLE PRECISION PAR, VCMAT, G, XLL
      COMMON /DPAR/ PAR(MAXPR2), VCMAT(MAXPAR,MAXPAR), G(MAXPAR),
     1    XLL, NPAR, IINDEX
      INCLUDE 'SCREEN.INC'
C***********************************************************************
C     DATA STATEMENTS
C***********************************************************************
      DATA KEY /'E','N','D','.'/,BL/' '/
C
C   CHECK EXECUTION LINE FOR OPTIONS
C
      CALL REGSVE
      CALL RDLINE(LINE,NCHAR)
      CALL CVTCAS(LINE)
C
C   OPEN UP OUTPUT FILE, IF SPECIFIED, OTHERWISE DEFAULT TO SCREEN
C
      I=INDEX(LINE,'O=')+INDEX(LINE,'L=')
      IF (I.GT.0) THEN
         FILOUT=LINE(I+2:NCHAR)
         I=INDEX(FILOUT,' ')
         FILOUT(I:)=' '
         OPEN(UNIT=6,FILE=FILOUT,STATUS='UNKNOWN')
      ENDIF
C
C   OPEN UP INPUT FILE IF SPECIFIED, OTHERWISE USE SCREEN INTERFACE
C
      I=INDEX(LINE,'I=')
      IF (I.GT.0) THEN
         FILEIN=LINE(I+2:NCHAR)
         I=INDEX(FILEIN,' ')
         FILEIN(I:)=' '
         INQUIRE(FILE=FILEIN,EXIST=FEXIST)
         IF (.NOT. FEXIST) THEN
            WRITE(0,*)' The file ',FILEIN(1:I),'does not exist.'
            WRITE(0,*)'Respecify the I=input_file parameter.'
            STOP 'Input file error'
         ENDIF
      ELSE
         CALL INTFAC(FILEIN)
      ENDIF
      OPEN(UNIT=5,FILE=FILEIN,STATUS='OLD')
C***********************************************************************
C     INITIALIZE VARIABLES - NP SHOULD BE SET TO THE DIMENSION OF VARA
C     AND HALF THE DIMENSION OF -A-.  WRITE OUT INTRODUCTORY MATERIAL.
C***********************************************************************
      NP=MAXPAR
      DO 5 I=1,MAXOBJ
         DO 5 J=1,5
 5          DATA(I,J)=0.
      IPAGE=0
      DO 10 I=1,80
   10    LABEL(I)=BL
C
C   SEARCH THROUGH DOS PATH TO TRY AND FIND DOCUMENTATION FILES
C
      CALL GTPATH(PATH(1),NCHAR)
      CALL PACKL(PATH(1),255,NCHAR)
      I=0
 6    IF (PATH(1)(1:1).EQ.CHAR(0).OR.PATH(1)(1:1).EQ.' ') GO TO 3
         I=I+1
         IF (I.GT.8) GO TO 3
         FILPOS=INDEX(PATH(1),';')
         IF (FILPOS.EQ.0) FILPOS=INDEX(PATH(1),CHAR(0))
         IF (FILPOS.EQ.0) FILPOS=INDEX(PATH(1),' ')
         FILDOC=PATH(1)(1:FILPOS-1)
         PATH(2)=PATH(1)(FILPOS+1:)
         PATH(1)=PATH(2)
         FILPOS=INDEX(FILDOC,' ')
         IF (FILDOC(FILPOS-1:FILPOS-1).NE.'\') THEN
            FILDOC(FILPOS:FILPOS)='\'
            FILPOS=FILPOS+1
         ENDIF
         FILDOC(FILPOS:)='INTRO.DOC'
         INQUIRE(FILE=FILDOC,EXIST=FEXIST)
         IF (FEXIST) GO TO 8

         GO TO 6
C
C   HAVE NOT FOUND THE DOCUMENTATION FILES IN THE EXECUTION PATH, SO
C   NOW SEARCH THE CURRENT DIRECTORY ON EACH DISK DRIVE TO FIND THEM.
C   GET THE CURRENT DISK DRIVE NUMBER
 3    CALL CURDSK(IDISK)
C   GET THE NUMBER OF DISK DRIVES IN THE SYSTEM
      CALL SELDSK(IDISK,NDISK)
      FILDOC='A:INTRO.DOC'
      FILPOS=3
      DO 9 IDISK=NDISK,0,-1
         FILDOC(1:1)=CHAR(65+IDISK)
         INQUIRE(FILE=FILDOC,EXIST=FEXIST)
         IF (FEXIST) GO TO 8
 9       CONTINUE
 4    WRITE(0,*) 'Cannot locate the TRANSECT documentation files.'
      WRITE(0,*) 'Place the TRANSECT executable disk in drive A:.'
      STOP 'Documentation file error'
 7    WRITE(0,*) 'Cannot open file ',FILDOC
      STOP 'Documentation file error'
 8    OPEN(UNIT=1,FILE=FILDOC,STATUS='OLD',ERR=7)
      CALL HEADER (1)
      WRITE (6,200) '                   Program Introduction'
      DO 11 I=1,39
         READ(UNIT=1,FMT='(A79)') LINE
 11      WRITE(UNIT=6,FMT='(1X,A79)') LINE
      CALL HEADER (1)
      WRITE (6,200) '              Program Introduction Continued'
      DO 12 I=40,73
         READ(UNIT=1,FMT='(A79)') LINE
 12      WRITE(UNIT=6,FMT='(1X,A79)') LINE
      CALL HEADER (1)
      WRITE (6,200) '                    Symbol Definitions'
      DO 13 I=74,125
         READ(UNIT=1,FMT='(A79)') LINE
 13      WRITE(UNIT=6,FMT='(1X,A79)') LINE
      CLOSE(UNIT=1)
C***********************************************************************
C     INITIALIZE VARIABLES FOR EACH SET OF CONTROL CARDS AND DATA SET
C     WHICH ARE PROCESSED.
C***********************************************************************
   20 II=1
      IC=0
      DO 25 I=1,80
 25   LABEL(I)=BL
      DO 30 I=1,10
      LOGL(I)=0.0
      DO 30 J=1,5
   30 PB(J,I)=0.0
      DO 40 I=1,10
      NPSET(I)=0
      DO 40 J=1,NP
   40 PSTRT(I,J)=0.0
C***********************************************************************
C     CALL THE ROUTINE TO PROCESS THE CONTROL CARDS.  IF THERE WAS AN
C     ERROR IN THE PROCESSING AND A CONTROL CARD AND DATA SET WERE
C     SKIPPED SUCESSFULLY THEN PROCESS ANOTHER SET.  IF THERE WAS
C     AN ERROR BUT NO MORE CONTROL CARDS WERE INCLUDED THEN THE PROGRAM
C     WILL STOP AND NOT RETURN TO THIS POINT.  IF THERE ARE NO ERRORS
C     THEN SK WILL BE FALSE.
C***********************************************************************
      CALL CNTRL
      IF (SK) GO TO 20
C***********************************************************************
C     CALL THE APPROPRIATE ROUTINE(GROUPED OR UNGROUPED) TO READ IN THE
C     DATA AND TO DO DESCRIPTIVE OUTPUT.
C***********************************************************************
   50 IF (GRP) THEN
         CALL GRPD
      ELSE
         CALL UNGRPD
      ENDIF
C***********************************************************************
C     IF THERE WAS AN ERROR IN THESE ROUTINES AND A CONTROL CARD AND
C     DATA SET WERE SUCCESSFULLY SKIPPED THEN PROCESS A NEW SET.  IF
C     THERE WERE NO ERRORS AND THE CONTROL CARDS AND THE DATA ARE ON
C     SEPARATE FILES AND THERE ARE MORE SETS TO FOLLOW THEN READ THE
C     END. FLAG CARD ON THE CONTROL CARD FILE SO IT IS NOT MISTAKEN
C     FOR A CONTROL CARD.
C***********************************************************************
      IF (SK) GO TO 20
      IF ((SYSIN.NE.5).AND.(IC.EQ.-2)) READ (5,150) LAB
C***********************************************************************
C     CALL THE APPROPRIATE ESTIMATION ROUTINES AND THEN SUMMARIZE THE
C     RESULTS AND STORE THE DENSITY ESTIMATES.
C***********************************************************************
      IF ((.NOT.PEST).AND.(.NOT.SEST)) GO TO 70
      IF (HELP) THEN
         CALL HEADER (1)
         WRITE (6,200) '               Density Estimation Narrative'
         FILDOC(FILPOS:)='NARRAT1.DOC'
         OPEN(UNIT=1,FILE=FILDOC,STATUS='OLD')
         DO 14 I=1,49
            READ(UNIT=1,FMT='(A79)') LINE
 14         WRITE(UNIT=6,FMT='(1X,A79)') LINE
         CLOSE(UNIT=1)
      ENDIF
      IF (PEST) THEN
         CALL PEREST
      ENDIF
      IF (SEST) THEN
         CALL SIGEST
      ENDIF
      CALL SUMARY (1)
C***********************************************************************
C      CONTROL COMES HERE IF THE PROPER NUMBER OF REPLICATIONS WERE
C      FOUND IN THE DATA AS INDICATED BY THE NUMBER OF LINE LENGTHS
C      WITH DATA.  IF IC=0 THEN THE END OF THE DATA WAS NOT REACHED
C      AND AN ERROR MESSAGE IS GIVEN.
C***********************************************************************
   70 IF (II.NE.IREP) GO TO 120
C***********************************************************************
C     FOR GROUPED DATA IT IS NECESSARY HERE TO DETERMINE WHETHER ALL OF
C     THE DATA HAS BEEN READ AND WHETHER THERE ARE MORE DATA SETS TO
C     FOLLOW, I.E.,SPECIFY THE VALUE OF IC. THIS IS ONLY DONE IN THE
C     ROUTINE GRPD IF AN END OF FILE OR END. CARD IS REACHED BEFORE IT
C     IS EXPECTED.  FOR UNGROUPED DATA THE VALUE OF IC IS DETERMINED
C     IN THE ROUTINE UNGRPD.
C***********************************************************************
      IF (.NOT.GRP) GO TO 100
      READ (SYSIN,150,END=90) (HEAD(I),I=1,30)
      DO 80 I=1,4
      IF (KEY(I).NE.HEAD(I)) GO TO 100
   80 CONTINUE
      IC=-2
      GO TO 110
   90 IC=-1
      GO TO 110
  100 IF (IC.NE.0) GO TO 110
      WRITE (6,170)
      CALL SKIP
      GO TO 20
C***********************************************************************
C     IF THE NPOL OPTION WAS USED(.NOT.POOL=NO POOLING OF REPLICATES=
C     A SEPARATE ESTIMATE OF DENSITY FOR EACH REPLICATE) THEN CALL
C     SUMARY TO CALCULATE AN AVERAGE ESTIMATE OF DENSITY FROM THE
C     REPLICATE ESTIMATES AND ITS VARIANCE FOR EACH ESTIMATOR.
C     THEN BASED ON THE VALUE OF IC DECIDE WHETHER TO CONTINUE OR STOP.
C***********************************************************************
  110 IF ((.NOT.POOL).AND.(PEST.OR.SEST)) THEN
         CALL SUMARY (2)
      ENDIF
      IF (IC.EQ.-2) GO TO 20
      STOP
C***********************************************************************
C      CONTROL COMES HERE IF NOT ALL OF THE REPS WERE FOUND BUT AN
C      END OF FILE WAS REACHED
C***********************************************************************
  120 IF (IC.NE.-1) GO TO 130
      WRITE (6,180)
      STOP
C***********************************************************************
C      CONTROL COMES HERE IF NOT ALL OF THE REPS WERE FOUND BUT AN END.
C      CARD WAS REACHED.
C***********************************************************************
  130 IF (IC.NE.-2) GO TO 140
      WRITE (6,180)
      GO TO 20
C***********************************************************************
C     CONTROL COMES HERE IF THERE ARE MORE REPS TO BE PROCESSED
C***********************************************************************
  140 II=II+1
      GO TO 50
C***********************************************************************
C     FORMAT STATEMENTS
C***********************************************************************
C
  150 FORMAT (30A1)
  170 FORMAT ('0*** TERMINAL ERROR - More replications have been',
     1' given than were'/
     2 22X,'indicated by the line lengths and sample sizes.')
  180 FORMAT ('0*** TERMINAL ERROR - Too few replications have been',
     1' given in the'/ 22X,
     2' data than were indicated by the line lengths and sample sizes.')
  200 FORMAT (/10X,60('*')/10X,'*',58X,'*'/10X,'*',A,T70,'*'
     1/10X,'*',58X,'*'/10X,60('*')/)
  340 FORMAT (//,1H0)
      END
