Trailing-Edge
-
PDP-10 Archives
-
decuslib10-10
-
43,50521/bnk1.ban
There are 3 other files named bnk1.ban in the archive. Click here to see a list.
C *** BANK ***
C
C THIS SUBROUTINE CONCERNED WITH THE CREATION OF A BANK FROM
C ASCII DATA. THE FILE IS CREATED IN TWO PARTS THE FIRST IS THE
C NAMES AND DESCRIPTIONS ENTERED INTO A FILE CALLED HEADR.TMP
C NEXT THE DATA IS STORED IN DZBA.TMP AS THE CORRECT
C BLOCKS BUT THE SEQUENCE IS OFF. FINALY THE FIRST BLOCK IS
C WRITTEN THE DATA IS READ FROM DZBA AND THEN THE HEADR FILE.
C
SUBROUTINE MABNK
COMMON /DEV/ IDLG,ICC,IBNK,IUPGR,ITMPRY,MPROG
COMMON /GEN/ IPROJA,IPROGA,NV,NO,BNKNM,DATCR,NPROJR,NPROGR
DIMENSION D(7000), NAMES(500), NAME(80), DATMIS(500,6), FMT(125)
DIMENSION Z(125),NNS(18,6),FMTT(600),KDSC(8,500),XX(9),ITYPE(500)
DIMENSION NAMDES(40),NAMV(5),MPLC(4),MDATA(20),FT(600),SAV(5)
DIMENSION DATED(2),NSAV(5),INPUT(80),MSAV(5),LSAV(5),IPATH(3)
EQUIVALENCE (D,FMTT),(D(650),FT,KDSC),(D(5000),ITYPE)
EQUIVALENCE (D(6000),NAMES),(Z,NNS),(SAV,NSAV),(INPUT,D(6700))
EQUIVALENCE (MISS,AMISS),(ILBKT,BKTLFT)
DOUBLE PRECISION BNKNM,DATCR,FILNAM,DEFNAM,FMTFIL,NDMFIL
DATA XX/'A','I','F','G','E','(',')','D','O'/
DATA DEFNAM/'INPUT.DAT'/
DATA ILBKT,IRBKT/"555004020100,"565004020100/
DATA MISS/"400000000000/
IUSER=2
WRITE(IDLG,3) BNKNM
3 FORMAT(' CREATING A NEW BANK TO BE NAMED - ',A10)
C
C CHECK FOR NAME
C
C
C INPUT DEVICE AND FILE NAME IF APLICABLE
C
900 WRITE(IDLG,901)
901 FORMAT('0INPUT? ',$)
READ(ICC,204,END=746) INPUT
IF(INPUT(1).EQ.'!') GO TO 746
DO 905 I=80,1,-1
IF(INPUT(I).NE.' ') GO TO 906
905 CONTINUE
IEND=0
GO TO 904
906 IEND=I
I=0
907 I=I+1
909 IF(I.EQ.IEND) GO TO 910
IF(INPUT(I).NE.' ') GO TO 907
DO 908 J=I+1,IEND
908 INPUT(J-1)=INPUT(J)
INPUT(IEND)=' '
IEND=IEND-1
GO TO 909
910 IF((INPUT(1).NE.'H').OR.(INPUT(2).NE.'E').
1OR.(INPUT(3).NE.'L').OR.(INPUT(4).NE.'P').OR.(INPUT(5).NE.' '))
2 GO TO 904
WRITE(IDLG,902)
902 FORMAT('0THIS ANSWER DEFINES WHERE THE INPUT DATA IS TO BE FOUND.'
1/'IT USUALLY CONSISTS OF A DEVICE, A FILENAME AND EXTENSION,'/
2' AND POSSIBLY A PROJECT PROGRAMMER NUMBER. POSSIBLE DEVICES ARE:'
3/' TTY: - TELETYPE'/' DSK: - DISK'/
3' CDR: - CARD READER'/
4' DTA#: - DECTAPE (MUST BE MOUNTED ALREADY'/
5' MTA#: - MAGTAPE (MUST BE MOUNTED AND POSITIONED)'/
6'0DEFALUTS:'/
7' IF NO INPUT DEVICE IS SPECIFIED, BUT A FILE NAME IS GIVEN,'/
8' THE DISK WILL BE USED AS THE DEVICE.'/
9'0 IF A DEVICE REQUIREING A FILE NAME IS GIVEN BUT NO FILE'/
1' NAME IS INDICATED, INPUT.DAT WILL BE ASSUMED.'/
2'0 IF NO RESPONSE IS GIVEN TTY: WILL BE USED.'/
3'0 IF DSK: IS SPECIFIED WITHOUT A PROJECT-PROGRAMMER NUMBER'/
4' THE USERS PROJECT PROGRAMMER NUMBER WILL BE ASSUMED.'/
5'0EXAMPLES:'/' TTY:'/' DSK:DATA.DAT'/)
GO TO 900
903 RETURN
904 DEV='TTY'
FILNAM=DEFNAM
IPATH(1)=0
IPATH(2)=0
IPATH(3)=0
IF(IEND.EQ.0) GO TO 970
C
C DEVICE
C
I=1
911 I=I+1
IF(I.GT.IEND) GO TO 914
IF(INPUT(I).EQ.':') GO TO 913
IF(INPUT(I).EQ.ILBKT) GO TO 914
GO TO 911
913 L=I-1
ENCODE(L,204,DEV)(INPUT(J),J=1,L)
L=I
GO TO 912
914 L=0
DEV='DSK'
C
C FILE NAME
C
912 DO 915 J=1,10
915 NAMDES(J)=' '
J=0
POINT=0
916 L=L+1
IF(L.GT.IEND) GO TO 920
IF(INPUT(L).EQ.'.') POINT=1
IF(INPUT(L).EQ.ILBKT) GO TO 920
IF(J.LT.10) GO TO 918
WRITE(IDLG,917)
917 FORMAT(' A COLON MUST FOLLOW THE DEVICE AND FILE NAME MAY BE'/
1' NO LONGER THAN 10 CHARACTERS')
GO TO 900
918 J=J+1
NAMDES(J)=INPUT(L)
GO TO 916
920 IF(POINT.EQ.1) GO TO 921
IF(J.GT.9) GO TO 921
J=J+1
NAMDES(J)='.'
921 ENCODE(10,204,FILNAM)(NAMDES(J),J=1,10)
C
C PROJECT NUMBER
C
IF(INPUT(L).NE.ILBKT) GO TO 970
DO 930 J=1,10
930 NAMDES(J)=' '
J=0
931 L=L+1
IF(L.GT.IEND) GO TO 935
IF(INPUT(L).EQ.IRBKT) GO TO 935
IF(INPUT(L).EQ.',') GO TO 940
IF((INPUT(L).GE.'0').AND.(INPUT(L).LE.'7')) GO TO 933
WRITE(IDLG,932)
932 FORMAT(' ILLEGAL CHARACTER IN PROJECT NUMBER')
GO TO 900
933 IF(J.LE.6) GO TO 936
935 WRITE(IDLG,934)
934 FORMAT(' MUST BE A COMMA BETWEEN PROJCT AND PROGRAMMER NUMBER')
GO TO 900
936 J=J+1
NAMDES(J)=INPUT(L)
GO TO 931
940 IF(J.GT.0) GO TO 941
IPATH(1)=0
GO TO 949
941 IF(NAMDES(10).NE.' ') GO TO 943
DO 942 K=9,1,-1
942 NAMDES(K+1)=NAMDES(K)
NAMDES(1)=' '
GO TO 941
943 ENCODE(10,204,DATED) (NAMDES(J),J=1,10)
DECODE(10,944,DATED) IPATH(1)
944 FORMAT(O10)
949 DO 950 J=1,10
950 NAMDES(J)=' '
J=0
951 L=L+1
IF(L.GT.IEND) GO TO 956
IF(INPUT(L).EQ.IRBKT) GO TO 956
IF((INPUT(L).GE.'0').AND.(INPUT(L).LE.'7')) GO TO 953
WRITE(IDLG,952)
952 FORMAT(' ILLEGAL CHARACTER IN PROGRAMMER NUMBER')
GO TO 900
953 IF(J.LE.6) GO TO 954
WRITE(IDLG,955)
955 FORMAT(' PROGRAMMER NUMBER TOO LONG')
GO TO 900
954 J=J+1
NAMDES(J)=INPUT(L)
GO TO 951
956 IF(J.GT.0) GO TO 957
IPATH(2)=0
GO TO 970
957 IF(NAMDES(10).NE.' ') GO TO 958
DO 959 K=9,1,-1
959 NAMDES(K+1)=NAMDES(K)
NAMDES(1)=' '
GO TO 957
958 ENCODE(10,204,DATED)(NAMDES(J),J=1,10)
DECODE(10,944,DATED) IPATH(2)
970 CALL EXISTS(DEV,FILNAM,IERR,IPATH(1),IPATH(2))
IF(IERR.EQ.0) GO TO 972
WRITE(IDLG,971)
971 FORMAT(' ? FILE DOES NOT EXIST')
GO TO 900
972 OPEN(UNIT=IUSER,DEVICE=DEV,ACCESS='SEQIN',FILE=FILNAM,
1 DIRECTORY=IPATH)
26 WRITE (IDLG,27)
27 FORMAT (' HOW MANY VARIABLES? ',$)
READ (ICC,28,END=746) NV
28 FORMAT (I)
IF (NV.LE.500) GO TO 30
WRITE (IDLG,29)
29 FORMAT (' THE MAXIMUM FOR THIS PROGRAM IS 500-FOR MORE SEE DICK
1HOUCHARD')
25 RETURN
30 WRITE (IDLG,330)
C
C FORMATTING FOR MABNK UP TO 400 CHARACTERS
C
330 FORMAT (' ENTER FORMAT ENCLOSED IN PARENTHESIS'/)
KOUNT=0
LFILE=0
ICARDS=1
L=1
DO 208 I=1,600
208 FMTT(I)=' '
200 K=L+79
IF(K.GT.600)K=600
IF(LFILE.EQ.1) READ(MPROG,204,END=746)(FMTT(I),I=L,K)
IF(LFILE.EQ.0)READ (ICC,204,END=746) (FMTT(I),I=L,K)
IF((L.EQ.1).AND.(FMTT(1).EQ.'!')) GO TO 746
IF((L.EQ.1).AND.(FMTT(1).EQ.'@')) GO TO 546
IF((L.EQ.1).AND.(FMTT(1).NE.'(')) GO TO 212
DO 201 N=K,L,-1
IF(FMTT(N).NE.' ') GO TO 202
201 CONTINUE
202 DO 203 J=L,N
IF(FMTT(J).EQ.'(') KOUNT=KOUNT+1
IF(FMTT(J).EQ.')') KOUNT=KOUNT-1
IF(FMTT(J).EQ.'/') ICARDS=ICARDS+1
203 CONTINUE
IF(N.LT.600) GO TO 209
WRITE(IDLG,210)
210 FORMAT(' FORMAT TOO LONG')
GO TO 30
212 WRITE(IDLG,213)
213 FORMAT(' FORMAT MUST BE ENCLOSED IN PARENTHESIS')
GO TO 30
546 DO 547 I=2,11
IF(FMTT(I).NE.BKTLFT) GO TO 547
WRITE(IDLG,548)
548 FORMAT(' NO BRACKETS WHEN SPECIFYING FILE FOR FORMAT')
GO TO 30
547 CONTINUE
ENCODE(10,204,FMTFIL)(FMTT(I),I=2,11)
CALL EXIST(FMTFIL,IERR,NPROJR,NPROGR)
IF(IERR.EQ.0) GO TO 550
WRITE(IDLG,549)
549 FORMAT(' FILE SPECIFIED FOR FORMAT NOT AVAILABLE')
GO TO 30
550 IF(LFILE.NE.1) GO TO 552
WRITE(IDLG,551)
551 FORMAT(' FORMAT FILE MAY NOT BE SPECIFIED IN A FORMAT FILE')
GO TO 30
552 LFILE=1
OPEN(UNIT=MPROG,DEVICE='DSK',FILE=FMTFIL,ACCESS='SEQIN')
GO TO 200
209 L=N+1
IF(KOUNT.GT.0) GO TO 200
IF(KOUNT.LT.0) WRITE(IDLG,206)
206 FORMAT(' UNBALANCED PARENTHESIS')
IF(KOUNT.LT.0) GO TO 30
ENCODE(600,204,FMT(1))FMTT
204 FORMAT(600A1)
C
C REMOVE ALL BUT IMPORTANT INFO FROM FORMAT
C
IF(LFILE.EQ.1) CLOSE(UNIT=MPROG)
I=0
500 I=I+1
508 IF(I.GT.N) GO TO 512
DO 501 J=1,9
IF(FMTT(I).EQ.XX(J)) GO TO 500
501 CONTINUE
IF((FMTT(I).LT.'0').OR.(FMTT(I).GT.'9')) GO TO 504
DO 502 K=1,4
IF((K+I).GT.N) GO TO 504
DO 503 J=1,9
IF(FMTT(K+I).NE.XX(J)) GO TO 503
IF(J.EQ.7) GO TO 504
GO TO 500
503 CONTINUE
IF((FMTT(K+I).LT.'0').OR.(FMTT(K+I).GT.'9')) GO TO 504
502 CONTINUE
C GET RID OF CHARACTER
504 DO 505 J=I+1,N
505 FMTT(J-1)=FMTT(J)
N=N-1
GO TO 508
C
C GET RID OF PARENTHESIS
512 ISW=0
I=0
M=1
513 I=I+1
IF(I.GT.N) GO TO 530
IF(FMTT(I).EQ.XX(6)) GO TO 513
IF(FMTT(I).EQ.XX(7)) GO TO 513
IF((FMTT(I).GE.'0').AND.(FMTT(I).LE.'9')) GO TO 514
FT(M)=FMTT(I)
M=M+1
IF(M.LT.600) GO TO 513
GO TO 541
514 ISW=1
DO 515 K=1,5
515 SAV(K)=' '
J=1
516 SAV(J)=FMTT(I)
I=I+1
J=J+1
IF((FMTT(I).GE.'0').AND.(FMTT(I).LE.'9')) GO TO 516
517 IF(SAV(5).NE.' ') GO TO 519
DO 518 J=4,1,-1
518 SAV(J+1)=SAV(J)
SAV(1)=' '
GO TO 517
519 ENCODE(5,204,WORD) SAV
DECODE (5,520,WORD) LOOP
520 FORMAT(I5)
IF(FMTT(I).EQ.XX(6)) GO TO 525
DO 521 J=1,LOOP
FT(M)=FMTT(I)
M=M+1
IF(M.GT.600) GO TO 541
521 CONTINUE
GO TO 513
525 L=I+1
KOUNT=1
526 IF(FMTT(L).EQ.XX(6)) KOUNT=KOUNT+1
IF(FMTT(L).EQ.XX(7)) KOUNT=KOUNT-1
IF(KOUNT.EQ.0) GO TO 527
L=L+1
GO TO 526
527 IF((I+1).GT.(L-1)) GO TO 532
DO 528 J=1,LOOP
DO 529 K=I+1,L-1
FT(M)=FMTT(K)
M=M+1
IF(M.GT.600) GO TO 541
529 CONTINUE
528 CONTINUE
532 I=L
GO TO 513
530 N=M-1
IF(ISW.EQ.0) GO TO 540
DO 531 I=1,N
531 FMTT(I)=FT(I)
GO TO 512
541 PAUSE 'PROBLEM SEE DICK HOUCHARD'
RETURN
540 K=1
IF(NV.EQ.N) GO TO 543
WRITE(IDLG,544)
544 FORMAT(' CAUTION - NUMBER OF VARIABLES DOES NOT AGREE WITH FORMAT'
1)
543 IF(ICARDS.GT.1) WRITE(IDLG,545) ICARDS
545 FORMAT('0MULTIPLE RECORD FORMAT - ',I4,' RECORDS READ PER READ')
DO 542 I=1,NV
ITYPE(I)=0
IF(FT(K).EQ.'A') ITYPE(I)=1
IF(FT(K).EQ.'O') ITYPE(I)=2
IF(FT(K).EQ.'I') ITYPE(I)=2
K=K+1
IF(K.GT.N) K=1
C
C FORMAT BROKEN DOWN
C
542 CONTINUE
C
C NAME AND DESCRIPTION(AUTO MADE)
C
SAV(1)='V'
SAV(5)=' '
DO 400 I=1,NV
ENCODE(3,401,K) I
401 FORMAT(I3)
DECODE(3,204,K)(SAV(J),J=2,4)
402 IF(SAV(2).NE.' ') GO TO 405
DO 403 J=3,4
403 SAV(J-1)=SAV(J)
SAV(4)=' '
GO TO 402
405 ENCODE(5,204,NAMES(I)) SAV
DATMIS(I,1)=0
ENCODE(40,404,KDSC(1,I)) I,BNKNM
404 FORMAT('ORIGINAL VARIABLE NUMBER ',I3,' -',A10)
400 CONTINUE
C
C
C CHANCE TO CHANGE AUTOMATIC NAME AND DESCRIPTIONC
LFILE=0
C
WRITE(IDLG,409)
409 FORMAT('0ENTER NAMES, DESCRIPTIONS AND MISSING DATA'/)
440 IF(LFILE.EQ.0) WRITE(IDLG,441)
441 FORMAT('+ ? ',$)
IF(LFILE.EQ.1) READ(MPROG,204,END=570) INPUT
IF(LFILE.EQ.0) CALL GES(INPUT,80,ICHECK)
IF(ICHECK.EQ.2) GO TO 700
IF((INPUT(1).NE.'H').OR.(INPUT(2).NE.'E').OR.(INPUT(3).NE.'L').
1OR.(INPUT(4).NE.'P')) GO TO 406
WRITE(IDLG,407)
407 FORMAT(
1'0THE VARIABLES HAVE ALREADY BEEN GIVEN THE NAMES: V1, V2,'/
2' V3, V4, ...., AND DESCRIPTIONS: THIS IS THE ORIGINAL'/
3' VARIABE NO 1, ETC. NO MISSING DATA SYMBOLS HAVE BEEN'/
4' ASSUMED. TO CHANGE THESE, TYPE THE VARIABLE NO, AN EQUALS'/
5' SIGN, THE NAME OF THE VARIABLE (UP TO 5 CHARACTERS, FIRST'/
6' MUST BE A LETTER), A SEMICOLON, THE DESCRIPTION (UP TO 40'/
7' CHARACTERS), A SLASH AND A MISSING DATA SYMBOL. UP TO 5'/
8' MISSING DATA SMBOLS MAY BE SPECIFIED FOR ONE VARIABLE.'/
9' EXAMPLE:'/
1' 3=SEX ;SEX OF RESPONDANT/3/0/9'/
2' ANY PORTION (NAME,DESCRIPTION, OR MISSING DATA) WHICH IS'/
3' NOT INCLUDED , WILL NOT BE CHANGED. THE NAME MUST BEGIN IN'/
4' THE FIRST POSITION FOLLOWING THE EQUALS, BUT NONE OF THE'/
5' OTHER PORTIONS REQUIRE SPECIAL POSITIONING. RANGES OF'/
6' VARIABLES MAY BE CHANGED WITH ONE COMMAND, BY INDICATING THE'/
7' LOWEST VARIABLE NUMBER OF THE RANGE, A MINUS, AND THE LARGEST'/
8' VARIABLE NUMBER OF THE RANGE. IF NAMES ARE TO BE CHANGED'/
9' FOR RANGES, A QUESTION MARK MUST BE IN THE NAME. THE')
WRITE(IDLG,408)
408 FORMAT(
1' QUESTION MARK IN THE VARIABLE WILL BE REPLACED WITH A'/
2' NUMBER, STARTING WITH ONE FOR THE FIRST VARIABLE IN THE'/
3' RANGE, TWO FOR THE SECOND, ETC. IF THERE ARE MORE THAN 9'/
4' VARIABLES IN THE RANGE, TWO QUESTION MARKS MUST BE IN THE'/
5' NAME. MISSING DATA MUST BE OF THE SAME TYPE AS VARIABLE'/
6' IT IS SPECIFIED FOR (ALPHA MISSING DATA SYMBOLS MUST BE'/
7' ENCLOSED IN QUOTES)'/
8'0WHEN ALL CHANGES HAVE BEEN MADE TYPE A CARRIAGE RETURN <CR>,'/
9' TO CONTINUE WITH PROGRAM'/)
GO TO 440
406 IF(INPUT(1).EQ.'!') GO TO 746
IF(INPUT(1).EQ.' ') GO TO 700
IF(INPUT(1).EQ."155004020100) GO TO 700
IF(INPUT(1).EQ.'@') GO TO 561
N=1
ISW=0
ISM=0
442 DO 443 I=1,3
443 NSAV(I)=' '
J=1
447 IF(INPUT(N).EQ.'-') GO TO 448
IF(INPUT(N).EQ.'=') GO TO 448
IF((INPUT(N).LE.'9').AND.(INPUT(N).GE.'0')) GO TO 446
444 WRITE(IDLG,445)
445 FORMAT(' ILLEGAL VARIABLE NUMBER'/)
GO TO 440
446 IF(J.GT.3) GO TO 444
NSAV(J)=INPUT(N)
J=J+1
N=N+1
GO TO 447
561 DO 562 I=2,11
IF(INPUT(I).NE.ILBKT) GO TO 562
WRITE(IDLG,563)
563 FORMAT(' NO BRACKETS ON VARIABLE DESCRIPTION FILE'/)
GO TO 440
562 CONTINUE
ENCODE(10,204,NDMFIL) (INPUT(I),I=2,11)
CALL EXIST(NDMFIL,IERR,NPROJR,NPROGR)
IF(IERR.EQ.0) GO TO 565
WRITE(IDLG,564)
564 FORMAT(' FILE FOR DESCRIPTION IS UNAVAILABLE'/)
GO TO 440
565 IF(LFILE.EQ.0) GO TO 567
WRITE(IDLG,566)
566 FORMAT(' DESCRIPTION FILE MAY NOT SPECIFY A DESCRIPTION FILE')
GO TO 440
567 LFILE=1
OPEN(UNIT=MPROG,DEVICE='DSK',FILE=NDMFIL,ACCESS='SEQIN')
GO TO 440
570 CLOSE(UNIT=MPROG)
LFILE=0
GO TO 440
C
448 IF(J.EQ.1) GO TO 444
449 IF(NSAV(3).NE.' ') GO TO 450
NSAV(3)=NSAV(2)
NSAV(2)=NSAV(1)
NSAV(1)=' '
GO TO 449
450 ENCODE(3,204,L) (NSAV(J),J=1,3)
DECODE(3,439,L) ITMP
439 FORMAT(I3)
IF((ITMP.LT.1).OR.(ITMP.GT.NV)) GO TO 444
IF(INPUT(N).EQ.'=') GO TO 455
IF(ISW.EQ.0) GO TO 452
WRITE(IDLG,451)
451 FORMAT(' 2 RANGES INDICATED FOR SINGLE LINE'/)
GO TO 440
452 ISW=1
IBG=ITMP
N=N+1
GO TO 442
455 IF(ISW.EQ.1) GO TO 456
IBG=ITMP
IEND=ITMP
GO TO 457
456 IEND=ITMP
IF(IBG.LE.IEND) GO TO 457
WRITE(IDLG,458)
458 FORMAT(' RANGE MUST BE SPECIFIED FROM LOW TO HIGH'/)
GO TO 440
457 NRN=IEND-IBG+1
N=N+1
C
C NAME FIRST
C
DO 460 I=1,5
460 NSAV(I)=' '
J=1
465 IF(INPUT(N).EQ.' ') GO TO 466
IF(INPUT(N).EQ.';') GO TO 466
IF(INPUT(N).EQ.'/') GO TO 466
IF(J.NE.1) GO TO 463
IF((INPUT(N).LE.'Z').AND.(INPUT(N).GE.'A')) GO TO 463
461 WRITE(IDLG,462)
462 FORMAT(' ILLEGAL NAME'/)
GO TO 440
463 IF(INPUT(N).EQ.'-') GO TO 461
IF(INPUT(N).EQ.',') GO TO 461
IF(INPUT(N).EQ.'(') GO TO 461
IF(INPUT(N).EQ.')') GO TO 461
IF(J.GT.5) GO TO 464
NSAV(J)=INPUT(N)
J=J+1
464 N=N+1
IF(N.LE.80) GO TO 465
466 IF(J.EQ.1) GO TO 600
NQ=0
DO 467 J=1,5
IF((NQ.GT.1).AND.(NSAV(J).NE.'?')) GO TO 468
IF(NSAV(J).NE.'?') GO TO 467
NQ=NQ+1
467 CONTINUE
468 IF(NRN.EQ.1) GO TO 470
IF((NRN.LT.10).AND.(NQ.GE.1)) GO TO 470
IF((NRN.LT.100).AND.(NQ.GE.2)) GO TO 470
IF(NQ.GE.3) GO TO 470
WRITE(IDLG,469)
469 FORMAT(' TOO MANY VARIABLES IN RANGE FOR NO. OF ?'/)
GO TO 440
470 DO 491 I=IBG,IEND
DO 472 J=1,5
472 MSAV(J)=NSAV(J)
IF(NQ.EQ.0) GO TO 490
J=I-IBG+1
ENCODE(5,471,L) J
471 FORMAT(I5)
DECODE(5,204,L) LSAV
DO 473 L=1,5
IF(LSAV(L).NE.' ') GO TO 474
473 CONTINUE
474 DO 475 M=1,5
IF(MSAV(M).EQ.'?') GO TO 476
475 CONTINUE
476 DO 477 J=L,5
MSAV(M)=LSAV(J)
M=M+1
477 CONTINUE
IF(M.GT.5) GO TO 490
478 IF(MSAV(M).NE.'?') GO TO 490
IF(M.EQ.5) GO TO 480
DO 479 J=M,4
479 MSAV(J)=MSAV(J+1)
480 MSAV(5)=' '
GO TO 478
490 ENCODE(5,204,NTMP) MSAV
IF(NTMP.EQ.'OBS') GO TO 492
IF(NTMP.EQ.'STOP') GO TO 492
IF(NTMP.EQ.'HELP') GO TO 492
IF(NTMP.EQ.'ALL') GO TO 492
IF(NTMP.EQ.'EMPTY') GO TO 492
GO TO 494
492 WRITE(IDLG,493) NTMP
493 FORMAT(' "',A5,'" IS A RESERVED NAME')
GO TO 491
494 DO 481 J=1,NV
IF(I.EQ.J) GO TO 481
IF(NAMES(J).NE.NTMP) GO TO 481
WRITE(IDLG,482) J,NTMP
482 FORMAT(' VARIABLE ',I3,' ALREADY HAS THE NAME ',A5/)
GO TO 491
481 CONTINUE
NAMES(I)=NTMP
491 CONTINUE
C
C
C
600 IF(INPUT(N).EQ.';') GO TO 601
IF(INPUT(N).EQ.'/') GO TO 620
N=N+1
IF(N.LE.80) GO TO 600
GO TO 440
C
C DESCRIPTION
C
601 DO 602 J=1,40
602 NAMDES(J)=' '
J=1
603 N=N+1
IF(N.LE.80) GO TO 604
GO TO 605
604 IF(INPUT(N).EQ.'/') GO TO 605
IF(J.GT.40) GO TO 603
NAMDES(J)=INPUT(N)
J=J+1
GO TO 603
605 DO 606 I=IBG,IEND
606 ENCODE(40,204,KDSC(1,I)) NAMDES
GO TO 600
C
C MISSING DATA
C
620 N=N+1
IF(ISM.EQ.1) GO TO 600
IF(NRN.LT.2) GO TO 623
DO 622 I=IBG,IEND
IF(ITYPE(I).EQ.ITYPE(IBG)) GO TO 622
WRITE(IDLG,621)
621 FORMAT(' THE SAME SYMBOLS FOR MISSING DATA CANNOT BE USED FOR'/
1' TWO DIFFERENT TYPE VARIABLES - NO MISSING DATA ACCEPTED THIS'/
2' STATEMENT'/)
ISM=1
GO TO 600
622 CONTINUE
623 ISR=0
IF((INPUT(N).NE.'V').OR.(INPUT(N+1).NE.'A').OR.(INPUT(N+2).
1NE.'L').OR.(INPUT(N+3).NE.'I').OR.(INPUT(N+4).NE.'D').OR.
2(INPUT(N+5).NE.':')) GO TO 624
N=N+6
ISR=1
IST=0
624 GO TO (630,680,800) (ITYPE(IBG)+1)
C
C FLOATING
C
630 DO 631 I=1,15
631 NAMDES(I)=' '
IPD=0
IEXP=0
J=1
632 IF(INPUT(N).EQ.' ') GO TO 660
IF(INPUT(N).EQ.'-') GO TO 634
IF(INPUT(N).EQ.'E') GO TO 640
IF(INPUT(N).EQ.'.') GO TO 636
IF(INPUT(N).EQ.'/') GO TO 660
IF(INPUT(N).EQ.';') GO TO 660
IF((INPUT(N).LE.'9').AND.(INPUT(N).GE.'0')) GO TO 643
WRITE(IDLG,645) INPUT(N)
645 FORMAT(' ILLEGAL CHARACTER "',A1,'" IN MISSING DATA SYMBOL'/)
GO TO 600
643 IF(J.GT.15) GO TO 633
639 NAMDES(J)=INPUT(N)
J=J+1
633 N=N+1
IF(N.LE.80) GO TO 632
GO TO 660
634 IF(J.EQ.1) GO TO 639
GO TO 653
C
636 IF(IPD.EQ.0) GO TO 638
WRITE(IDLG,637)
637 FORMAT(' ONLY 1 DECIMLE POINT PER MISSING VALUE'/)
GO TO 600
638 IPD=1
GO TO 639
C
640 IF(IEXP.EQ.0) GO TO 642
WRITE(IDLG,641)
641 FORMAT(' ONLY 1 E SIGN PER VALUE'/)
GO TO 600
642 IEXP=1
GO TO 639
C
653 N=N+1
IF(ISR.EQ.1) GO TO 647
WRITE(IDLG,646)
646 FORMAT(' VALID: WAS NOT INDICATED - RANGES MAY NOT BE USED'/)
GO TO 600
647 IF(IST.EQ.0) GO TO 649
WRITE(IDLG,648)
648 FORMAT(' TWO - CANNOT BE USED IN THE SAME STATEMENT'/)
GO TO 600
649 ENCODE(15,204,NAMDES(37))(NAMDES(J),J=1,15)
DECODE(15,650,NAMDES(37)) TMPB
650 FORMAT(G)
IST=1
GO TO 630
C
660 IF(ISR.EQ.1) GO TO 661
ENCODE(15,204,NAMDES(37)) (NAMDES(J),J=1,15)
DECODE(15,650,NAMDES(37)) TMPB
GO TO 670
661 IF(IST.EQ.1) GO TO 663
WRITE(IDLG,662)
662 FORMAT(' NO - FOR VALID RANGE'/)
GO TO 600
663 ENCODE(15,204,NAMDES(37))(NAMDES(J),J=1,15)
DECODE(15,650,NAMDES(37)) TMPE
IF(TMPB.LT.TMPE) GO TO 670
SAV(1)=TMPB
TMPB=TMPE
TMPE=SAV(1)
GO TO 670
C
C ALPHANUMERIC MISSING DATA SYMBOLS
C
680 DO 681 I=1,5
681 NAMDES(I)=' '
J=1
IF(INPUT(N).NE.1H') GO TO 683
N=N+1
682 IF(INPUT(N).EQ.' ') GO TO 693
IF(INPUT(N).EQ.'/') GO TO 683
IF(INPUT(N).EQ.';') GO TO 683
IF(INPUT(N).EQ.1H') GO TO 687
695 IF(J.GT.5) GO TO 685
NAMDES(J)=INPUT(N)
J=J+1
N=N+1
IF(N.LE.80) GO TO 682
683 WRITE(IDLG,684)
684 FORMAT(' ALPHA MISSING DATA SYMBOLS MUST BE ENCOLOSED IN QUOTES'/)
GO TO 600
685 WRITE(IDLG,686)
686 FORMAT(' MAXIMUM SIZE FOR ALPHA VARIABLE IS 6 CHARACTERS'/)
GO TO 600
687 N=N+1
IF(INPUT(N).EQ.'-') GO TO 690
IF(ISR.EQ.0) GO TO 689
IF(IST.EQ.1) GO TO 688
WRITE(IDLG,662)
GO TO 600
688 ENCODE(5,204,TMPE)(NAMDES(J),J=1,5)
IF(TMPB.LE.TMPE) GO TO 670
SAV(1)=TMPB
TMPB=TMPE
TMPE=SAV(1)
GO TO 670
689 ENCODE(5,204,TMPB)(NAMDES(J),J=1,5)
GO TO 670
690 IF(ISR.EQ.0) GO TO 692
IF(IST.EQ.1) GO TO 691
ENCODE(5,204,TMPB)(NAMDES(J),J=1,5)
IST=1
N=N+1
GO TO 680
691 WRITE(IDLG,648)
GO TO 600
692 WRITE(IDLG,646)
GO TO 600
693 DO 694 I=1,5
IF(INPUT(N+I).EQ.1H') GO TO 695
694 CONTINUE
GO TO 683
C
C FIXED
C
800 DO 801 I=1,15
801 NAMDES(I)=' '
J=1
802 IF(INPUT(N).EQ.' ') GO TO 812
IF(INPUT(N).EQ.'-') GO TO 806
IF(INPUT(N).EQ.'/') GO TO 812
IF(INPUT(N).EQ.';') GO TO 812
IF((INPUT(N).LE.'9').AND.(INPUT(N).GE.'0')) GO TO 803
WRITE(IDLG,645) INPUT(N)
GO TO 600
803 IF(J.GT.15) GO TO 805
804 NAMDES(J)=INPUT(N)
J=J+1
805 N=N+1
IF(N.LE.80) GO TO 802
GO TO 812
C
806 IF(J.EQ.1) GO TO 804
GO TO 807
C
807 N=N+1
IF(ISR.EQ.1) GO TO 809
WRITE(IDLG,646)
GO TO 600
809 IF(IST.EQ.0) GO TO 810
WRITE(IDLG,648)
GO TO 600
810 ENCODE(15,204,NAMDES(37))(NAMDES(J),J=1,15)
DECODE(15,811,NAMDES(37)) TMPB
811 FORMAT(I)
IST=1
GO TO 800
812 IF(ISR.EQ.1) GO TO 813
ENCODE(15,204,NAMDES(37))(NAMDES(J),J=1,15)
DECODE(15,811,NAMDES(37)) TMPB
GO TO 670
813 IF(IST.EQ.1) GO TO 814
WRITE(IDLG,662)
GO TO 600
814 ENCODE(15,204,NAMDES(37))(NAMDES(J),J=1,15)
DECODE(15,811,NAMDES(37)) TMPE
IF(TMPB.LE.TMPE) GO TO 670
SAV(1)=TMPB
TMPB=TMPE
TMPE=SAV(1)
GO TO 670
C
C PUT MISSING VALUES WHERE THEY BELONG
C
670 DO 679 I=IBG,IEND
IF(ISR.EQ.1) GO TO 672
J=DATMIS(I,1)
NN=J+1
IF(J.LT.0) NN=-J+1
IF(NN.LE.5) GO TO 678
WRITE(IDLG,671) I
671 FORMAT(' TOO MANY MISSING DATA FOR VARIABLE ',I3/)
GO TO 679
678 DATMIS(I,NN+1)=TMPB
IF(J.LT.0) DATMIS(I,1)=-NN
IF(J.GE.0) DATMIS(I,1)=NN
GO TO 679
672 IF(DATMIS(I,1).GE.0) GO TO 674
WRITE(IDLG,673) I
673 FORMAT(' 1 VALID RANGE ALREADY ACCEPTED FOR VARIABLE ',I3/)
GO TO 679
674 NN=DATMIS(I,1)
IF((NN+2).LE.5) GO TO 675
WRITE(IDLG,671) I
GO TO 679
675 IF(NN.EQ.0) GO TO 677
DO 676 J=2,NN
676 DATMIS(I,J+2)=DATMIS(I,J)
677 DATMIS(I,2)=TMPB
DATMIS(I,3)=TMPE
DATMIS(I,1)=-(DATMIS(I,1)+2)
679 CONTINUE
GO TO 600
C
C BEGIN WORK (DONE WITH QUESTIONS) FIRST CREATE TMP FILE OF HEADR
C
700 IF(LFILE.EQ.1) CLOSE (UNIT=MPROG)
OPEN (UNIT=ITMPRY,DEVICE='DSK',ACCESS='SEQOUT',FILE='HEADR.TMP',
1MODE='BINARY')
NNBL=(NV+5)/6
DO 701 I=1,NNBL
IVBG=(I-1)*6+1
IVEND=IVBG+5
IF(IVEND.GT.NV) IVEND=NV
DO 702 J=IVBG,IVEND
NNS(1,J-IVBG+1)=NAMES(J)
DO 703 K=1,8
703 NNS(K+1,J-IVBG+1)=KDSC(K,J)
NNS(10,J-IVBG+1)=ITYPE(J)
702 CONTINUE
WRITE(ITMPRY) Z
701 CONTINUE
CLOSE(UNIT=ITMPRY)
C
C BEGIN ANALYSIS OF DATA NOW
C
OPEN(UNIT=ITMPRY,DEVICE='DSK',ACCESS='RANDOM',MODE='BINARY',
1FILE='BANK.TMP',RECORD SIZE=126,BUFFERCOUNT=1)
NPR=7000/NV
IF(NPR.GT.125) NPR=125
NERR=0
NO=0
NBKK=0
ATEND=0
IF(DEV.NE.'TTY') GO TO 705
WRITE(IDLG,714)
714 FORMAT('0ENTER DATA NOW, WHEN FINISHED TYPE A CONTROL Z (^Z)')
705 NIBLK=0
706 N=0
NFTR=NPR
IF((NIBLK+NFTR).GT.125) NFTR=125-NIBLK
707 IBG=N*NV+1
IEND=IBG+NV-1
READ(IUSER,FMT,END=731,ERR=739) (D(I),I=IBG,IEND)
NO=NO+1
713 N=N+1
IF(N.LT.NFTR) GO TO 707
C
C MISSING DATA REPLACED HERE
C
708 DO 750 I=1,NV
L=DATMIS(I,1)
IF(L.EQ.0) GO TO 750
IF(L.GT.0) GO TO 755
C RANGE
L=-L
DO 751 J=1,N
DATA=D((J-1)*NV+I)
IF((DATA.GE.DATMIS(I,2)).AND.(DATA.LE.DATMIS(I,3))) GO TO 752
D((J-1)*NV+I)=AMISS
GO TO 751
752 IF(L.LE.2) GO TO 751
DO 753 M=4,L+1
IF(DATA.NE.DATMIS(I,M)) GO TO 753
D((J-1)*NV+I)=AMISS
GO TO 751
753 CONTINUE
751 CONTINUE
GO TO 750
C INDIVIDUAL
755 DO 756 J=1,N
DATA=D((J-1)*NV+I)
DO 757 M=2,L+1
IF(DATA.NE.DATMIS(I,M)) GO TO 757
D((J-1)*NV+I)=AMISS
GO TO 756
757 CONTINUE
756 CONTINUE
750 CONTINUE
C
C
C
IF(NIBLK.NE.0) GO TO 720
IF(N.EQ.125) GO TO 710
DO 709 I=N,125
709 Z(I)=AMISS
710 DO 712 I=1,NV
DO 711 J=1,N
711 Z(J)=D((J-1)*NV+I)
KK=NBKK*NV+I
712 WRITE(ITMPRY#KK) Z
GO TO 730
720 DO 722 I=1,NV
KK=NBKK*NV+I
READ(ITMPRY#KK) Z
DO 721 J=1,N
721 Z(J+NIBLK)=D((J-1)*NV+I)
722 WRITE(ITMPRY#KK) Z
730 NIBLK=NIBLK+N
IF(ATEND.EQ.1) GO TO 735
IF(NIBLK.LT.125) GO TO 706
NBKK=NBKK+1
GO TO 705
739 NO=NO+1
NERR=NERR+1
IF(NERR.GT.5) GO TO 743
740 WRITE(IDLG,741) NO
741 FORMAT(' ERROR READING OBSERVATION ',I6)
DO 742 I=IBG,IEND
742 D(I)=AMISS
IF(DEV.NE.'TTY') GO TO 713
WRITE(IDLG,745)
745 FORMAT(' PLEASE REENTER THE ENTIRE OBSERVATION '/)
NO=NO-1
NERR=0
GO TO 707
743 IF((NERR/NO).GT.5) GO TO 740
WRITE(IDLG,744)
744 FORMAT(' MORE THAN 5 ERRORS PER HUNDRED OBSERVATIONS - BYE')
746 CLOSE(UNIT=IBNK,DISPOSE='DELETE')
RETURN
731 ATEND=1
IF(N.GT.0) GO TO 708
735 NAMANS=1
VERSON='V2'
CALL DATE(DATED)
WRITE(IBNK#1) NV,NO,NAMANS,DATED(1),DATED(2),NPROJR,
1NPROGR,VERSON,(K,I=1,117)
NBKK=(NO+124)/125
KK=2
DO 760 I=1,NV
DO 761 J=1,NBKK
NIBLK=(J-1)*NV+I
READ(ITMPRY#NIBLK)Z
WRITE(IBNK#KK)Z
KK=KK+1
761 CONTINUE
760 CONTINUE
CLOSE(UNIT=ITMPRY,DISPOSE='DELETE')
OPEN(UNIT=ITMPRY,DEVICE='DSK',ACCESS='SEQIN',MODE='BINARY',
1FILE='HEADR.TMP')
KK=NBKK*NV+1
736 READ(ITMPRY,END=737) Z
KK=KK+1
WRITE(IBNK#KK) Z
GO TO 736
737 CLOSE(UNIT=IBNK)
CLOSE(UNIT=IUSER)
CLOSE(UNIT=ITMPRY,DISPOSE='DELETE')
WRITE (IDLG,738) BNKNM,DATED,NV,NO
738 FORMAT('1BANK: ',A10,5X,'CREATED: ',2A5/' HAVING ',I3,
1' VARIABLES, AND ',I6,' OBSERVATIONS')
RETURN
END