perm filename SCANZ.F4[LX,LCS]1 blob
sn#164495 filedate 1975-06-13 generic text, type T, neo UTF8
C ***** SCANNER *************************
C**** SCANR,BGSORT,FMT,RANR,SQYY,COLTTY,READER,CLEAN 7/74
SUBROUTINE SCANR
DIMENSION IP(30)
COMMON P(30),J,L,CNT(27),BT,PL(48),MK,DF,DUR(27)
1 ,IQ(27),ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,ISUB,NFLG,IXX,ISEMI,IQT
1 ,INP(144),VX(70),ISCA(12),IDAT(11),IAMP,K,KN,M,ML,CODE,IBLA
EQUIVALENCE(IF,ISCA(6)),(ISS,ISCA(9)),(IE,ISCA(5)),(IDOT,IDAT(11))
1 ,(IEN,ISCA(4)),(IP,PL)
C 2/74 IP IS NOW EQUIV TO PL! USED TO BE IP WITH P.(HURT 'TAP' ROUTINE.)
C WILL THIS DO ANYTHING TO MUSIC5 VERSION??
NNUM=-1
ISKP=0
JJ=0
XMINUS=1.
999 IDECI=-1
M=0
2799 N=INP(ML)
IF(N.NE.IQT)GO TO 899
JA=-1
ML=ML+1
ISUB=8
JJ=JJ+1
VX(JJ)=ML
C POINTS TO FIRST LIT. CHAR.
DO 1177 K=ML,144
IF(INP(K).NE.IQT)GO TO 1177
ML=K+1
2177 N=INP(ML)
GO TO 899
1177 CONTINUE
C SKIPS 'LIT' ITEMS IN RAN. SELECTION
899 ML=ML+1
IF(N.EQ.ISEMI)GO TO 751
IF(N.NE.IBLA)GO TO 510
4702 IF(ISKP)202,2799,2799
510 IF(JA)GO TO 70
C********** MAY 22,71
DO 77 K=1,12
IF(N.NE.ISCA(K))GO TO 77
IF(K.NE.2.AND.K.NE.4)GO TO 511
NSWCH=K-4
GO TO 2177
C TO SWITCH ALWAYS USE OCT.# /PBF4/ /OE5/ P=PROXIMITY, O=ORDINARY
C ************ MAY 22,71
511 NNUM=K
JJ=JJ+1
NFLG=-1
N=INP(ML)
IF(N.NE.IF)GO TO 410
NNUM=NNUM-1
GO TO 610
410 IF(N.NE.ISS)GO TO 3410
NNUM=NNUM+1
610 ML=ML+1
N=INP(ML)
3410 IF(N.NE.IEN.AND.N.NE.'I')GO TO 371
C 'END' OR 'FINE' WILL END INST.
C******** MAY 20,71
3411 VX(JJ)=10000.
IF(DUR(LK))DUR(LK)=1000.
IAMP=-1
RETURN
371 IF(N.EQ.ISEMI.OR.N.EQ.IBLA)GO TO 5410
DO 177 KN=2,8
IF(N.NE.IDAT(KN))GO TO 177
JSCA=KN-2
ML=ML+1
GO TO 2410
177 CONTINUE
GO TO 6410
5410 KN=-1
6410 IF(NSWCH.EQ.0)GO TO 2410
IF(KN)GO TO 7410
CC IF(N.EQ.'+')NOLD=NOLD+6
CC IF(N.EQ.'-')NOLD=NOLD-6
C /B/B-/ JUMPS DOWN OCT., /B/B+/ UP OCT.
7410 IF(NOLD-NNUM.GT.5.AND.JSCA.LT.7)JSCA=JSCA+1
IF(NOLD-NNUM.LT.-5.AND.JSCA.GT.0)JSCA=JSCA-1
C WILL JUMP TO NEAREST NOTE *********** MAY 22,71
2410 VX(JJ)=JSCA*12+NNUM
NOLD=NNUM
C ********** MAY 22,71
4410 NNUM=-2
IF(INP(ML).EQ.ISEMI)RETURN
C ABOVE FINDS SCALE NOTES; IF NSWCH=0 OCT. NUM WILL STICK UNTIL RESET
IF(N.EQ.IXX)GO TO 210
GO TO 310
C *********MAY 22,71
77 CONTINUE
70 IF(N.NE.'-')GO TO 71
XMINUS=-1.
GO TO 2799
210 JJ=JJ+1
IF(JJ.EQ.1)GO TO 3310
C****** MAY 19,71
XMINUS=1.
VX(JJ)=0
C 'X N1,N2' MAY REPLACE 'REP N1,N2'. N2=0 BECOMES N2=2
GO TO 310
71 IF(N.EQ.IXX)GO TO 210
IF(N.EQ.'R')GO TO 73
1410 DO 78 K=1,11
IF(N.NE.IDAT(K))GO TO 78
ISKP=-1
IF(N.NE.IDOT)GO TO 79
IDECI=M
GO TO 75
79 M=M+1
IP(M)=K-1
GO TO 75
78 CONTINUE
IF(N.NE.IE.AND.N.NE.IF)GO TO 781
C 'END' OR 'FINE' WILL END INST.
JJ=1
GO TO 3411
781 IF(N.EQ.'/')N=ISEMI
C FOR MOTIVIC TRANFORMATIONS
75 IF(INP(ML).EQ.IXX)GO TO 202
C FOR 2X3, ETC. CHECK THIS OUT. 6/74
CC75 IF(INP(ML).NE.IXX)GO TO 752
CC ML=ML-1
CC GO TO 202
C FOR 'X' WITHOUT SPACES.
752 IF(N.NE.ISEMI.AND.INP(ML).NE.1)GO TO 2799
751 IF(ISKP.EQ.0)RETURN
202 IF(IDECI.NE.-1)GO TO 302
IDECI=0
GO TO 402
302 IDECI=M-IDECI
402 KN=0
IEXP=M-1
IF(M.LT.1)M=1
DO 171 K=1,M
KV=10**IEXP
IF(IEXP.EQ.0)KV=1
KN=KN+IP(K)*KV
171 IEXP=IEXP-1
A=10**IDECI
IF(IDECI.EQ.0)A=1.
JJ=JJ+1
VX(JJ)=KN/A*XMINUS
IF(ISUB.EQ.1)RETURN
IF(CODE.NE.-22.)XMINUS=1.
C ONLY ONE - NEEDED FOR RHY.COMPOSITE
1310 IF(INP(ML).NE.1)GO TO 310
VX(JJ+1)=VX(JJ)*2.
JJ=JJ+1
ML=ML+1
GO TO 1310
206 ML=ML+2
3310 VX(1)=-99.
C******** MAY 19,71
310 ISKP=0
IF(N.NE.ISEMI)GO TO 999
RETURN
73 JJ=JJ+1
IF(INP(ML).EQ.IE)GO TO 206
C NEXT IS FOR A REST ('R')
VX(JJ)=85.
GO TO 4410
END
SUBROUTINE BGSORT(BW)
C THIS SORTS BG TIMES SO NONE ARE DUPLICATED IN BNW ARRAY.
C ALLOWS 100 BG TIMES.
COMMON /Q/ BNW(100),NWZ
DO 5308 K=1,NWZ
X=BNW(K)-.0001
Y=X+.0002
C ROUND-OFF NONSENSE
5308 IF(BW.GT.X.AND.BW.LT.Y)RETURN
NWZ=NWZ+1
BNW(NWZ)=BW
RETURN
END
SUBROUTINE FMT(JFM,INP,MLX)
DIMENSION JFM(3),INP(1)
DO 1 MLX=2,72
J=INP(MLX)
1 IF(J.EQ.' '.OR.J.EQ.','.OR.J.EQ.';')GO TO 2
C SPACE=COMMA=SPACE, ALSO STOPS ON ";"
2 MLX=MLX+1
IF(MLX.GT.7)MLX=7
JFM(2)='0'+(MLX-2)*536870912
C FINDS NUMBER FOR 'A' FORMAT
RETURN
END
SUBROUTINE RANR(VX,K)
C FOR RAN. SELEC. OF NOTES. FINDS HIGHEST NOTE.
DIMENSION VX(1)
X=VX(K)
Y=VX(K+1)
IF(X.GT.Y)VX(K)=X+.999
IF(Y.GE.X)VX(K+1)=Y+.999
RETURN
END
SUBROUTINE SQYY(YY,X,Y,Z)
YY=2.*Z/(X+Y)
IF(YY.NE.0)YY=2.*(Z-X*YY)/YY**2
RETURN
END
SUBROUTINE COLTTY(JNP,JT)
COMMON /TYP/SOS,JOUT,LN,ITYP,TPALN(4),JED /FRMT/J(2)
DIMENSION JNP(1)
DATA J(2)/'72A1)'/
DO 1 K=72,1,-1
1 IF(JNP(K).NE.' ')GO TO 2
K=1
2 IF(JT.EQ.21)GO TO 3
J(1)=' (1X'
IF(LN.EQ.0)GO TO 5
J(1)='(I5,X'
WRITE(JT,J)LN,(JNP(L),L=1,K)
RETURN
3 J(1)=' ('
5 WRITE(JT,J)(JNP(L),L=1,K)
END
FUNCTION READER(JNP)
DIMENSION JNP(72)
COMMON /TYP/SOS,JOUT,LN,ITYP,TPALN(4),JED
1 /FRMT/J(2)
DATA TPALN/20H(' TYPE A LINE'/) /
J(1)=' ('
READER=0
IF(ITYP)GO TO 1
6 TYPE TPALN
ACCEPT J,JNP
IF(JED)CALL COLTTY(JNP,21)
IF(JNP(1).EQ.' ')GO TO 6
RETURN
1 IF(LN.NE.0)GO TO 5
READ(1,J,END=3)JNP
GO TO 7
5 J(1)=' (I,'
READ(1,J,END=3)LN,JNP
7 IF(SOS)CALL COLTTY(JNP,JOUT)
RETURN
3 READER=-1
END
SUBROUTINE QUAD
C DUMMY -- FOR NOW. 7/74
END
FUNCTION RMOVX(W,Y,Z)
IF(W.EQ.0)W=.01
IF(Y.EQ.0)Y=.01
RMOVX=Y*((W/Y)**Z)
END
SUBROUTINE CLEAN(INP,LEND)
DIMENSION INP(1)
C CLEAR THE END OF ARRAY
M=72
LEND=-1
K=0
1 K=K+1
NN=INP(K)
IF(NN.EQ.';'.OR.NN.EQ.'/')GO TO 2
IF(NN.EQ.'<')GO TO 3
C USE < FOR COMMENT-- AS IN MUS10
IF(NN.EQ.',')INP(K)=' '
C CHANGE ALL COMMAS TO BLANKS
IF(NN.NE.'"')GO TO 4
7 K=K+1
IF(INP(K).EQ.'"')GO TO 4
IF(K.LT.M)GO TO 7
TYPE 5
STOP
5 FORMAT(' OPEN QUOTES')
2 LEND=K
4 IF(K.LT.M)GO TO 1
3 IF(LEND.GT.0)RETURN
IF(M.EQ.144)CALL EXIT
CALL READER(INP(73))
C GO READ ANOTHER LINE.
M=144
K=72
GO TO 1
END