Trailing-Edge
-
PDP-10 Archives
-
decuslib10-11
-
43,50545/rsmlib.for
There is 1 other file named rsmlib.for in the archive. Click here to see a list.
SUBROUTINE RSMMSG(LTRBFR,LWRBFR,LMTBFR,LNGCRT,
1 NUMWHO, IYEAR, ITTY, IDISK)
C RENBR(/DISPLAY MESSAGES FOR THIS CLASS)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
DIMENSION LTRBFR(LMTBFR),LWRBFR(LMTBFR)
C
DATA LTRSPA/1H /
C
C OPEN THE MSSAGE FILE
CALL RSMOPN(12,NUMWHO,IYEAR,ITTY,IDISK,IFOPEN)
IF(IFOPEN.EQ.0)GO TO 13
C
C GET NEXT LINE OF MESSAGE
ISHOWN=3
1 JSHOWN=ISHOWN
2 READ(IDISK,3,END=11)LWRBFR
3 FORMAT(80A1)
NOWBFR=LMTBFR
4 IF(LWRBFR(NOWBFR).NE.LTRSPA)GO TO 5
NOWBFR=NOWBFR-1
IF(NOWBFR.GT.0)GO TO 4
IF(ISHOWN.EQ.JSHOWN)GO TO 2
NOWBFR=1
5 CONTINUE
C
C PAUSE IF PAGE IS FULL
IF(ISHOWN.LT.LNGCRT)GO TO 9
ISHOWN=0
JSHOWN=0
6 WRITE(ITTY,7)
7 FORMAT(1X/' (press RETURN to continue)',$)
CALL GETLIN(ITTY,LTRBFR,LMTBFR,MAXBFR)
IF(MAXBFR.EQ.0)GO TO 9
IF(MAXBFR.GT.0)GO TO 11
WRITE(ITTY,8)
8 FORMAT(
1' Press the RETURN key to see the rest of the message'/
2' or type anything else to suppress the rest of message')
GO TO 6
C
C WRITE THE LINE
9 ISHOWN=ISHOWN+1
WRITE(ITTY,10)(LWRBFR(I),I=1,NOWBFR)
10 FORMAT(1X,80A1)
GO TO 2
C
C RETURN TO CALLING PROGRAM
11 CALL RSMCLS(12,NUMWHO,IYEAR,ITTY,IDISK,IFCLOS)
WRITE(ITTY,12)
12 FORMAT(1X)
13 RETURN
END
SUBROUTINE RSMNAM(LTRBFR,LMTBFR,LINE,LTRTXT,LNGLIN,LNGSEC,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,MAXSEC,LMTSEC,MARKER,ITTY,
2IVIDEO,JVIDEO,LTRTTL,LMTLTT,MAXLTT,KNTTTL)
C RENBR(/CONSTRUCT NAME AND ADDRESS SECTIONS)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
DIMENSION LTRTXT(LMTTXT),LNGLIN(LMTLIN),LNGSEC(LMTSEC),
1LTRBFR(LMTBFR),MARKER(LMTLIN),LTRTTL(LMTLTT),
2KNTTTL(LMTSEC),LTRPRE(18),LNGPRE(3)
DATA LTRSPA/1H /
C
C PREDEFIND SECTION NAMES
DATA LTRPRE/
1 1HN,1HA,1HM,1HE,
2 1HL,1HO,1HC,1HA,1HL,
3 1HP,1HE,1HR,1HM,1HA,1HN,1HE,1HN,1HT/
DATA LNGPRE/4,5,9/
C
C ASK FOR NAME
ISECTN=1
IPASS=1
IVIDEO=JVIDEO
CALL RSMHLP(ITTY,45,LTRBFR,LMTBFR,MAXBFR,IVIDEO)
IVIDEO=0
1 WRITE(ITTY,2)
2 FORMAT(' Type your name as it is to appear at top of resume')
3 WRITE(ITTY,4)
4 FORMAT(' ? ',$)
CALL GETLIN(ITTY,LTRBFR,LMTBFR,MAXBFR)
IF(MAXBFR.EQ.0)GO TO 8
IF(MAXBFR.LT.0)GO TO 6
LOWBFR=0
5 LOWBFR=LOWBFR+1
IF(LOWBFR.GT.MAXBFR)GO TO 10
IF(LTRBFR(LOWBFR).EQ.LTRSPA)GO TO 5
GO TO 10
6 WRITE(ITTY,7)
7 FORMAT(
1' Your name will appear exactly as you type it')
GO TO 1
8 WRITE(ITTY,9)
9 FORMAT(
1' You must supply your name')
GO TO 1
C
C START A NEW SECTION
10 IF(ISECTN.EQ.0)GO TO 14
IF(MAXSEC.GE.LMTSEC)GO TO 47
IF(KNTLIN.GE.LMTLIN)GO TO 47
MAXSEC=MAXSEC+1
LNGSEC(MAXSEC)=1
KNTTTL(MAXSEC)=0
KNTLIN=KNTLIN+1
LNGLIN(KNTLIN)=0
MARKER(KNTLIN)=0
J=0
DO 11 K=1,ISECTN
I=J+1
J=J+LNGPRE(K)
11 CONTINUE
DO 12 K=I,J
IF(MAXLTT.GE.LMTLTT)GO TO 13
MAXLTT=MAXLTT+1
KNTTTL(MAXSEC)=KNTTTL(MAXSEC)+1
LTRTTL(MAXLTT)=LTRPRE(K)
12 CONTINUE
13 ISECTN=0
C
C STORE THE LINE TYPED BY THE USER
14 I=0
IF(KNTLIN.LE.0)GO TO 16
DO 15 J=1,KNTLIN
IF(I.LT.MARKER(J))I=MARKER(J)
15 CONTINUE
16 KNTLIN=KNTLIN+1
MARKER(KNTLIN)=I+1
LNGLIN(KNTLIN)=MAXBFR-LOWBFR+1
LNGSEC(MAXSEC)=LNGSEC(MAXSEC)+1
17 DO 18 I=LOWBFR,MAXBFR
KNTTXT=KNTTXT+1
LTRTXT(KNTTXT)=LTRBFR(I)
18 CONTINUE
19 GO TO(20,22,22,22,22),IPASS
C
C GET ADDRESS
20 IPASS=2
ISECTN=2
WRITE(ITTY,21)
21 FORMAT(
1' Type your local address as it is to appear at top of resume.'/
2' Type a blank line when you have completed typing your address'/
31X)
22 GO TO(23,23,26,23,26),IPASS
23 IF(NEWPAS.EQ.0)WRITE(ITTY,24)
IF(NEWPAS.NE.0)WRITE(ITTY,25)
24 FORMAT(' First line of address? ',$)
25 FORMAT(' Next line of address? ',$)
GO TO 29
26 IF(NEWPAS.EQ.0)WRITE(ITTY,27)
27 FORMAT(' First phone number? ',$)
IF(NEWPAS.NE.0)WRITE(ITTY,28)
28 FORMAT(' Next phone number? ',$)
29 CALL GETLIN(ITTY,LTRBFR,LMTBFR,MAXBFR)
IF(MAXBFR.LT.0)GO TO 31
IF(MAXBFR.LE.0)GO TO 33
LOWBFR=0
30 LOWBFR=LOWBFR+1
IF(LOWBFR.GT.MAXBFR)GO TO 32
IF(LTRBFR(LOWBFR).EQ.LTRSPA)GO TO 30
GO TO 32
31 KNDMSG=28+IPASS+(4*NEWPAS)
CALL RSMHLP(ITTY,KNDMSG,LTRBFR,LMTBFR,MAXBFR,IVIDEO)
GO TO 22
32 NEWPAS=1
GO TO 10
C
C PREPARE FOR ENTRY OF NEXT ITEM
33 IF(IPASS.EQ.2)WRITE(ITTY,34)
IF(IPASS.EQ.4)WRITE(ITTY,35)
34 FORMAT(' Have you finished your local address? ',$)
35 FORMAT(' Have you finished your permanent address? ',$)
IF(IPASS.EQ.3)WRITE(ITTY,36)
IF(IPASS.EQ.5)WRITE(ITTY,36)
36 FORMAT(' Have you finished supplying phone numbers? ',$)
CALL YESNO(1,KNDYES,ITTY)
GO TO(33,33,40,22,37),KNDYES
37 IF(IPASS.EQ.2)WRITE(ITTY,38)
IF(IPASS.EQ.4)WRITE(ITTY,38)
38 FORMAT(' Answer'/
1' YES if you do not want to add more lines to this address'/
2' NO if you typed a blank line by accident')
IF(IPASS.EQ.3)WRITE(ITTY,39)
IF(IPASS.EQ.5)WRITE(ITTY,39)
39 FORMAT(' Answer'/
1' YES if you do not want to add more phone numbers to the list'/
2' NO if you typed a blank line by accident')
GO TO 33
40 IPASS=IPASS+1
NEWPAS=0
GO TO(22,22,22,41,22,47),IPASS
C
C ASK USER IF A SECOND ADDRESS IS NEEDED
41 WRITE(ITTY,42)
42 FORMAT(
1' Do you want to include your permanent second address? ',$)
CALL YESNO(1,KNDYES,ITTY)
GO TO(41,41,45,46,43),KNDYES
43 WRITE(ITTY,44)
44 FORMAT(' Answer'/
1' YES to have your permanent address appear to the ',
2'right of your local address'/
3' NO if you do not want a include your permanent address')
GO TO 41
45 IPASS=4
ISECTN=3
GO TO 22
46 CONTINUE
C
C DONE WITH SECOND ADDRESS
47 RETURN
END
SUBROUTINE RSMTTL(KREATE,KNDTTL,NOWSEC,LMTLTT,MAXLTT,LTRTTL,
1LMTSEC,MAXSEC,KNTTTL,IDISK,ITTY,LMTBFR,LTRBFR,LWRBFR,LOWBFR,
2MAXBFR,LNGSEC,MARKER,LNGLIN,LMTLIN,KNTLIN,KNTTXT,IVIDEO)
C RENBR(/RECOGNIZE AND CREATE SECTION TITLES)
C
C DONALD BARTH, YALE SCHOOL OF MANAGMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
C KREATE = 0, SELECT OLD TITLE
C = 1, CREATE NEW TITLE
C KNDTTL = 1, NONE TYPED
C = 2, PREVIOUSLY KNOWN TITLE TYPED
C = 3, NEW TITLE TYPED
C = 4, QUESTION MARK TYPED
C = 5, ERROR OR ANOTHER PROMPT NEEDED
C = 6, OVERFLOW OF STORAGE
C
C
C UPPER CASE A-Z, LOWER CASE A-Z AND DIGITS 0-9
COMMON/RSMFIV/LTRABC(26),LWRABC(26),LTRDGT(10)
C
DIMENSION LTRBFR(LMTBFR),
1LTRYES(5),LNGYES(2),LTRTTL(LMTLTT),KNTTTL(LMTSEC),LNGSEC(LMTSEC),
2MARKER(LMTLIN),LNGLIN(LMTLIN),
3LWRBFR(LMTBFR)
C LTRTTL = LETTERS OF THE SECTION TITLES
C KNTTTL = LENGTHS OF THE SECTION TITLES
C LMTLTT = DIMENSION OF LTRTTL ARRAY
C LMTSEC = DIMENSION OF KNTTTL ARRAY
C MAXLTT = NUMBER OF CHARACTERS IN LTRTTL ARRAY
C MAXSEC = NUMBER OF LENGTHS IN KNTTTL ARRAY
DATA LTRYES/1HY,1HE,1HS,1HN,1HO/
DATA LNGYES/3,2/
DATA LTRSPA,LTRQUE,LTRSTA,LTRUPA,LTRUND/
1 1H ,1H?,1H*,1H^,1H_/
C
C REMOVE ANY ZERO LENGTH SECTIONS
IRTSEC=0
ISECTN=0
MAXLTT=0
KUTSEC=MAXSEC
MAXSEC=0
KNTLIN=0
KPYLIN=0
1 ISECTN=ISECTN+1
IF(ISECTN.GT.KUTSEC)GO TO 4
KPYSEC=IRTSEC
IRTSEC=IRTSEC+KNTTTL(ISECTN)
INILIN=KPYLIN+1
KPYLIN=KPYLIN+LNGSEC(ISECTN)
IF(LNGSEC(ISECTN).LE.1)GO TO 1
DO 2 NOWLIN=INILIN,KPYLIN
KNTLIN=KNTLIN+1
MARKER(KNTLIN)=MARKER(NOWLIN)
LNGLIN(KNTLIN)=LNGLIN(NOWLIN)
2 CONTINUE
MAXSEC=MAXSEC+1
KNTTTL(MAXSEC)=KNTTTL(ISECTN)
LNGSEC(MAXSEC)=LNGSEC(ISECTN)
3 IF(KPYSEC.GE.IRTSEC)GO TO 1
KPYSEC=KPYSEC+1
MAXLTT=MAXLTT+1
LTRTTL(MAXLTT)=LTRTTL(KPYSEC)
GO TO 3
4 IF(MAXSEC.GT.0)GO TO 5
MAXLTT=0
MAXSEC=0
KNTLIN=0
KNTTXT=0
MAXSEC=MAXSEC+1
KNTTTL(MAXSEC)=0
LNGSEC(MAXSEC)=1
KNTLIN=KNTLIN+1
LNGLIN(KNTLIN)=0
MARKER(KNTLIN)=0
5 CONTINUE
C
C IF NOT CREATING SECTION, CHECK THAT THERE IS AT LEAST ONE
IF(KREATE.NE.0)GO TO 6
IF(MAXSEC.LE.1)GO TO 32
6 CONTINUE
C
C COMPACT OUT THE SPACES
I=LOWBFR-1
J=0
K=MAXBFR
MAXBFR=0
7 IF(I.GE.K)GO TO 10
I=I+1
LTRNOW=LTRBFR(I)
IF(LTRNOW.EQ.LTRSTA)GO TO 7
IF(LTRNOW.EQ.LTRUPA)GO TO 7
IF(LTRNOW.EQ.LTRUND)GO TO 7
IF(LTRNOW.NE.LTRSPA)GO TO 8
IF(MAXBFR.GT.0)J=1
GO TO 7
8 IF(J.EQ.0)GO TO 9
J=0
MAXBFR=MAXBFR+1
LTRBFR(MAXBFR)=LTRSPA
9 MAXBFR=MAXBFR+1
LTRBFR(MAXBFR)=LTRBFR(I)
GO TO 7
10 IF(MAXBFR.LE.0)GO TO 44
C
C CHECK FOR QUESTION MARK
IF(MAXBFR.NE.1)GO TO 11
IF(LTRBFR(1).EQ.LTRQUE)GO TO 36
11 CONTINUE
C
C GET ALTERNATE CASE OF ALPHABETIC LETTERS
DO 14 I=1,MAXBFR
LTRNOW=LTRBFR(I)
LWRBFR(I)=LTRNOW
IF(LTRNOW.EQ.LTRSPA)GO TO 14
DO 13 J=1,26
IF(LTRNOW.NE.LTRABC(J))GO TO 12
LWRBFR(I)=LWRABC(J)
GO TO 14
12 IF(LTRNOW.NE.LWRABC(J))GO TO 13
LWRBFR(I)=LTRABC(J)
GO TO 14
13 CONTINUE
14 CONTINUE
C
C CHECK FOR MATCH IN CURRENT DICTIONARY OF SECTION NAMES
INDEX=0
MATCH=0
15 LONGER=0
16 MATCH=MATCH+1
IF(MATCH.GT.MAXSEC)GO TO 20
I=INDEX
INDEX=INDEX+KNTTTL(MATCH)
J=0
17 I=I+1
J=J+1
IF(I.GT.INDEX)GO TO 19
IF(J.GT.MAXBFR)GO TO 18
IF(LTRBFR(J).EQ.LTRTTL(I))GO TO 17
IF(LWRBFR(J).EQ.LTRTTL(I))GO TO 17
GO TO 16
18 IF(LONGER.GT.MAXBFR)GO TO 16
IF(LONGER.EQ.MAXBFR)GO TO 15
LONGER=MAXBFR
LSTMCH=MATCH
LSTNDX=INDEX
GO TO 16
19 IF(J.LE.MAXBFR)GO TO 16
IF(KREATE.NE.0)GO TO 34
GO TO 45
20 IF(KREATE.NE.0)GO TO 22
IF(LONGER.EQ.0)GO TO 24
MATCH=LSTMCH
J=LSTNDX-KNTTTL(LSTMCH)+1
WRITE(ITTY,21)(LTRTTL(I),I=J,LSTNDX)
21 FORMAT(' Taken as abbreviation of section name: ',100A1)
GO TO 45
C
C ADD NEW SECTION
22 IF(MAXSEC.GE.LMTSEC)GO TO 26
IF((MAXLTT+MAXBFR).GT.LMTLTT)GO TO 30
IF(KNTLIN.GE.LMTLIN)GO TO 28
MAXSEC=MAXSEC+1
KNTTTL(MAXSEC)=0
DO 23 I=1,MAXBFR
MAXLTT=MAXLTT+1
LTRTTL(MAXLTT)=LTRBFR(I)
KNTTTL(MAXSEC)=KNTTTL(MAXSEC)+1
23 CONTINUE
LNGSEC(MAXSEC)=1
KNTLIN=KNTLIN+1
LNGLIN(KNTLIN)=0
MARKER(KNTLIN)=0
GO TO 46
C
C ERROR MESSAGES
24 WRITE(ITTY,25)
25 FORMAT(' Unknown section name')
GO TO 48
26 WRITE(ITTY,27)LMTSEC
27 FORMAT(' Limit of',1I4,' section names already in use')
GO TO 49
28 WRITE(ITTY,29)LMTLIN
29 FORMAT(' Limit of',1I4,' lines already in use')
GO TO 49
30 WRITE(ITTY,31)LMTLTT
31 FORMAT(' Limit of',1I4,' characters already in section names')
GO TO 49
32 WRITE(ITTY,33)
33 FORMAT(' No sections have been defined')
GO TO 49
34 WRITE(ITTY,35)
35 FORMAT(' This section already exists')
GO TO 48
C
C HELP MESSAGE
36 IF(KREATE.NE.0)GO TO 41
IF(MAXSEC.EQ.2)WRITE(ITTY,37)
37 FORMAT(' Type the following section name')
IF(MAXSEC.GT.2)WRITE(ITTY,38)
38 FORMAT(' Type one of the following section names')
J=0
DO 40 I=1,MAXSEC
K=J+1
J=J+KNTTTL(I)
IF(K.GT.J)GO TO 40
WRITE(ITTY,39)(LTRTTL(L),L=K,J)
39 FORMAT(1X,3X,100A1)
40 CONTINUE
GO TO 42
41 CALL RSMHLP(ITTY,47,LTRBFR,LMTBFR,MAXBFR,IVIDEO)
42 WRITE(ITTY,43)
43 FORMAT(
1' or merely press the RETURN key to select another option')
GO TO 47
C
C RETURN TO CALLING PROGRAM
44 KNDTTL=1
GO TO 50
45 NOWSEC=MATCH
KNDTTL=2
GO TO 50
46 NOWSEC=MAXSEC
KNDTTL=3
GO TO 50
47 KNDTTL=4
GO TO 50
48 KNDTTL=5
GO TO 50
49 KNDTTL=6
50 RETURN
END
SUBROUTINE RSMTYP(ITTY,LMTTXT,LTRTXT,LMTLIN,LNGLIN,
1IFIRST,IFINAL,IUNDER,JFIRST,JFINAL)
C RENBR(/TYPE A SINGLE LINE OF RESUME)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
DIMENSION LTRTXT(LMTTXT),LNGLIN(LMTLIN)
DATA LTRSPA,LTRMCH/1H ,1H+/
KFINAL=IFIRST-1
1 KFIRST=KFINAL+1
2 KFINAL=KFINAL+80
IF(KFINAL.GE.IFINAL)GO TO 5
MIDDLE=KFINAL+1
3 IF(MIDDLE.LE.KFIRST)GO TO 6
IF(LTRTXT(MIDDLE).EQ.1H )GO TO 4
MIDDLE=MIDDLE-1
GO TO 3
4 KFINAL=MIDDLE-1
GO TO 6
5 KFINAL=IFINAL
6 CONTINUE
WRITE(ITTY,7)(LTRTXT(I),I=KFIRST,KFINAL)
7 FORMAT(1X,80A1)
IF(IUNDER.EQ.0)GO TO 8
LFIRST=JFIRST
LFINAL=JFINAL
IF(LFIRST.LT.KFIRST)LFIRST=KFIRST
IF(LFINAL.GT.KFINAL)LFINAL=KFINAL
IF(LFIRST.GT.LFINAL)GO TO 8
J=LFIRST-KFIRST
K=LFINAL-LFIRST+1
IF(J.EQ.0)WRITE(ITTY,7)(LTRMCH,I=1,K)
IF(J.GT.0)WRITE(ITTY,7)(LTRSPA,I=1,J),(LTRMCH,I=1,K)
8 IF(KFINAL.GE.IFINAL)GO TO 9
KFINAL=KFINAL+1
IF(LTRTXT(KFINAL).EQ.1H )GO TO 8
KFINAL=KFINAL-1
GO TO 1
9 RETURN
END
SUBROUTINE RSMRNM(ITTY,NOWSEC,LMTLTT,MAXLTT,LTRTTL,
1LMTSEC,MAXSEC,KNTTTL,LMTBFR,LTRBFR,LWRBFR)
C RENBR(/RENAME AN EXISTING SECTION)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
C UPPER CASE A-Z, LOWER CASE A-Z AND DIGITS 0-9
COMMON/RSMFIV/LTRABC(26),LWRABC(26),LTRDGT(10)
C
DIMENSION LTRBFR(LMTBFR),
1LTRYES(5),LNGYES(2),LTRTTL(LMTLTT),KNTTTL(LMTSEC),LWRBFR(LMTBFR)
C
C LTRTTL = LETTERS OF THE SECTION TITLES
C KNTTTL = LENGTHS OF THE SECTION TITLES
C LMTLTT = DIMENSION OF LTRTTL ARRAY
C LMTSEC = DIMENSION OF KNTTTL ARRAY
C MAXLTT = NUMBER OF CHARACTERS IN LTRTTL ARRAY
C MAXSEC = NUMBER OF LENGTHS IN KNTTTL ARRAY
DATA LTRYES/1HY,1HE,1HS,1HN,1HO/
DATA LNGYES/3,2/
DATA LTRSPA,LTRUPA,LTRSTA,LTRUND/1H ,1H^,1H*,1H_/
C
C GET SECTION NAME
1 WRITE(ITTY,2)
2 FORMAT(' Change section name to? ',$)
CALL GETLIN(ITTY,LTRBFR,LMTBFR,MAXBFR)
IF(MAXBFR.LT.0)GO TO 21
IF(MAXBFR.EQ.0)GO TO 23
C
C COMPACT OUT THE SPACES
I=0
J=0
K=MAXBFR
MAXBFR=0
3 IF(I.GE.K)GO TO 6
I=I+1
LTRNOW=LTRBFR(I)
IF(LTRNOW.EQ.LTRSTA)GO TO 3
IF(LTRNOW.EQ.LTRUPA)GO TO 3
IF(LTRNOW.EQ.LTRUND)GO TO 3
IF(LTRNOW.NE.LTRSPA)GO TO 4
IF(MAXBFR.GT.0)J=1
GO TO 3
4 IF(J.EQ.0)GO TO 5
J=0
MAXBFR=MAXBFR+1
LTRBFR(MAXBFR)=LTRSPA
5 MAXBFR=MAXBFR+1
LTRBFR(MAXBFR)=LTRBFR(I)
GO TO 3
6 IF(MAXBFR.LE.0)GO TO 23
C
C CHECK FOR QUESTION MARK
7 CONTINUE
C
C GET ALTERNATE CASE OF ALPHABETIC LETTERS
DO 10 I=1,MAXBFR
LTRNOW=LTRBFR(I)
LWRBFR(I)=LTRNOW
DO 9 J=1,26
IF(LTRNOW.NE.LTRABC(J))GO TO 8
LWRBFR(I)=LWRABC(J)
GO TO 10
8 IF(LTRNOW.NE.LWRABC(J))GO TO 9
LWRBFR(I)=LTRABC(J)
GO TO 10
9 CONTINUE
10 CONTINUE
C
C CHECK FOR DUPLICATE NAME
NEWSEC=0
LOCSEC=0
11 NEWSEC=NEWSEC+1
INISEC=LOCSEC+1
LOCSEC=LOCSEC+KNTTTL(NEWSEC)
IF(INISEC.GT.LOCSEC)GO TO 14
IF(NEWSEC.EQ.NOWSEC)GO TO 14
IF(MAXBFR.NE.KNTTTL(NEWSEC))GO TO 14
J=0
DO 12 I=INISEC,LOCSEC
J=J+1
IF(LTRBFR(J).EQ.LTRTTL(I))GO TO 12
IF(LWRBFR(J).EQ.LTRTTL(I))GO TO 12
GO TO 14
12 CONTINUE
WRITE(ITTY,13)
13 FORMAT(' RENAME cancelled, name already in use')
GO TO 25
14 IF(NEWSEC.LT.LMTSEC)GO TO 11
C
C FIND OLD NAME
NEWSEC=0
LOCSEC=0
15 NEWSEC=NEWSEC+1
INISEC=LOCSEC
LOCSEC=LOCSEC+KNTTTL(NEWSEC)
IF(NEWSEC.LT.NOWSEC)GO TO 15
MAXLTT=MAXLTT-KNTTTL(NOWSEC)
C
C REMOVE OLD NAME
I=INISEC
16 IF(I.GE.MAXLTT)GO TO 17
I=I+1
LOCSEC=LOCSEC+1
LTRTTL(I)=LTRTTL(LOCSEC)
GO TO 16
C
C MAKE ROOM FOR NEW NAME
17 MAXLTT=MAXLTT+MAXBFR
J=MAXLTT
18 IF(I.LE.INISEC)GO TO 19
LTRTTL(J)=LTRTTL(I)
I=I-1
J=J-1
GO TO 18
C
C INSERT NEW NAME
19 DO 20 I=1,MAXBFR
INISEC=INISEC+1
LTRTTL(INISEC)=LTRBFR(I)
20 CONTINUE
KNTTTL(NEWSEC)=MAXBFR
GO TO 25
C
C HELP MESSAGE
21 WRITE(ITTY,22)
22 FORMAT(' Type the name which is to replace the old name'/
1' or merely hit the carriage return to retain the old name')
GO TO 1
23 WRITE(ITTY,24)
24 FORMAT(' Original name retained')
GO TO 25
C
C RETURN TO CALLING PROGRAM
25 RETURN
END
SUBROUTINE RSMRAW(NOWSEC,ITTY,LTRTXT,LNGLIN,LNGSEC,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,MARKER,
2LMTLTT,MAXLTT,LTRTTL,LMTSEC,MAXSEC,KNTTTL,
3MAXBFR,LMTBFR,LTRBFR,IVIDEO,LNGCRT)
C RENBR(/DISPLAY LINES OF RESUME AS ENTERED BY STUDENT)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
DIMENSION LTRTXT(LMTTXT),LNGLIN(LMTLIN),LNGSEC(LMTSEC),
1MARKER(LMTLIN),LTRTTL(LMTLTT),KNTTTL(LMTSEC),LTRBFR(LMTBFR)
DATA LTRSPA/1H /
MAXBFR=0
ISHOWN=0
MAXPRT=0
NOWLIN=0
KNTPRT=0
MRKSEC=0
DO 24 NEWSEC=1,MAXSEC
LEGEND=0
INISEC=MRKSEC+1
MRKSEC=MRKSEC+KNTTTL(NEWSEC)
MAXLIN=LNGSEC(NEWSEC)
IF(MAXLIN.LE.0)GO TO 24
DO 23 NEWLIN=1,MAXLIN
NOWLIN=NOWLIN+1
MINPRT=MAXPRT+1
MAXPRT=MAXPRT+LNGLIN(NOWLIN)
IF(MINPRT.GT.MAXPRT)GO TO 23
IF(NOWSEC.EQ.0)GO TO 1
IF(NEWSEC.LT.NOWSEC)GO TO 23
IF(NEWSEC.GT.NOWSEC)GO TO 24
1 IF(LEGEND.NE.0)GO TO 9
LEGEND=1
IF(INISEC.GT.MRKSEC)GO TO 9
IF(IVIDEO.LT.0)GO TO 6
IF(ISHOWN.LT.LNGCRT)GO TO 6
2 WRITE(ITTY,3)
3 FORMAT(1X/' (press RETURN to continue)',$)
CALL GETLIN(ITTY,LTRBFR,LMTBFR,MAXBFR)
IF(MAXBFR.EQ.0)GO TO 5
IF(MAXBFR.GT.0)GO TO 26
WRITE(ITTY,4)
4 FORMAT(
1' Press the RETURN key to see the rest of your resume'/
2' or type one of the "What next?" options to perform that option')
GO TO 2
5 ISHOWN=0
6 IF(ISHOWN.NE.0)GO TO 7
IF(IVIDEO.GT.0)CALL RSMWIP(ITTY)
7 ISHOWN=ISHOWN+1
WRITE(ITTY,8)(LTRTTL(I),I=INISEC,MRKSEC)
8 FORMAT(1X,100A1)
C
C WRITE OUT THE LINE
9 IFIRST=MINPRT
10 IFINAL=IFIRST+76
IF(IFINAL.GT.MAXPRT)GO TO 14
11 IF(IFINAL.LE.IFIRST)GO TO 13
IF(LTRTXT(IFINAL).EQ.1H )GO TO 12
IFINAL=IFINAL-1
GO TO 11
12 IFINAL=IFINAL-1
IF(IFINAL.GE.IFIRST)GO TO 15
13 IFINAL=IFIRST+76-1
GO TO 15
14 IFINAL=MAXPRT
15 IF(IVIDEO.LT.0)GO TO 18
IF(ISHOWN.LT.LNGCRT)GO TO 18
16 WRITE(ITTY,3)
CALL GETLIN(ITTY,LTRBFR,LMTBFR,MAXBFR)
IF(MAXBFR.EQ.0)GO TO 17
IF(MAXBFR.GT.0)GO TO 26
WRITE(ITTY,4)
GO TO 16
17 ISHOWN=0
18 IF(ISHOWN.NE.0)GO TO 19
IF(IVIDEO.GT.0)CALL RSMWIP(ITTY)
19 ISHOWN=ISHOWN+1
IF(IFIRST.EQ.MINPRT)WRITE(ITTY,20)MARKER(NOWLIN),
1(LTRTXT(I),I=IFIRST,IFINAL)
20 FORMAT(1X,1I3,1X,100A1)
IF(IFIRST.GT.MINPRT)WRITE(ITTY,21)(LTRTXT(I),I=IFIRST,IFINAL)
21 FORMAT(1X,4X,100A1)
KNTPRT=KNTPRT+1
IF(IFINAL.GE.MAXPRT)GO TO 23
IFIRST=IFINAL
IFINAL=MAXPRT
22 IFIRST=IFIRST+1
IF(IFIRST.GT.MAXPRT)GO TO 23
IF(LTRTXT(IFIRST).EQ.1H )GO TO 22
GO TO 10
23 CONTINUE
24 CONTINUE
WRITE(ITTY,25)
25 FORMAT(1X)
GO TO 26
C
C RETURN TO CALLING PROGRAM
26 RETURN
END
SUBROUTINE RSMMOV(NOWSEC,MOVSEC,LTRTXT,LNGLIN,LNGSEC,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,MARKER,
2LMTLTT,MAXLTT,LTRTTL,LMTSEC,MAXSEC,KNTTTL)
C RENBR(/MOVE SECTION IN RESUME)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
DIMENSION LTRTXT(LMTTXT),LNGLIN(LMTLIN),LNGSEC(LMTSEC),
1MARKER(LMTLIN),LTRTTL(LMTLTT),KNTTTL(LMTSEC)
C
C FIND LOCATION OF LETTERS IN SECTION TO BE MOVED
IFIRST=1
IFINAL=0
KFIRST=1
KFINAL=0
NEWSEC=1
1 IF(NEWSEC.GT.MOVSEC)GO TO 4
IF(LNGSEC(NEWSEC).LE.0)GO TO 3
IFIRST=IFINAL+1
KFIRST=KFINAL+1
KFINAL=KFINAL+LNGSEC(NEWSEC)
DO 2 NEWLIN=KFIRST,KFINAL
IFINAL=IFINAL+LNGLIN(NEWLIN)
2 CONTINUE
3 NEWSEC=NEWSEC+1
GO TO 1
C
C FIND LOCATION OF LETTERS IN SECTION TO BE KEPT IN PLACE
4 JFIRST=1
JFINAL=0
LFIRST=1
LFINAL=0
NEWSEC=1
5 IF(NEWSEC.GT.NOWSEC)GO TO 8
IF(LNGSEC(NEWSEC).LE.0)GO TO 7
JFIRST=JFINAL+1
LFIRST=LFINAL+1
LFINAL=LFINAL+LNGSEC(NEWSEC)
DO 6 NEWLIN=LFIRST,LFINAL
JFINAL=JFINAL+LNGLIN(NEWLIN)
6 CONTINUE
7 NEWSEC=NEWSEC+1
GO TO 5
C
C PERFORM THE SWAP OF CHARACTERS
8 MIN=IFIRST
MID=IFINAL
MAX=JFIRST-1
IF(IFIRST.LT.JFINAL)GO TO 9
MIN=JFIRST
MID=IFIRST-1
MAX=IFINAL
9 CALL DASWAP(LTRTXT,MIN,MID,MAX)
C
C PERFORM THE SWAP OF LINE LENGTHS AND LINE NUMBERS
MIN=KFIRST
MID=KFINAL
MAX=LFIRST-1
IF(KFIRST.LT.LFINAL)GO TO 10
MIN=LFIRST
MID=KFIRST-1
MAX=KFINAL
10 CALL DASWAP(LNGLIN,MIN,MID,MAX)
CALL DASWAP(MARKER,MIN,MID,MAX)
C
C PERFORM THE SWAP OF SECTION LENGTHS
C
C FIND LOCATION OF NAME OF SECTION TO BE MOVED
11 IFIRST=1
IFINAL=0
NEWSEC=1
12 IF(NEWSEC.GT.MOVSEC)GO TO 13
IFIRST=IFINAL+1
IFINAL=IFINAL+KNTTTL(NEWSEC)
NEWSEC=NEWSEC+1
GO TO 12
C
C FIND LOCATION OF NAME OF SECTION TO BE KEPT IN PLACE
13 JFIRST=1
JFINAL=0
NEWSEC=1
14 IF(NEWSEC.GT.NOWSEC)GO TO 15
JFIRST=JFINAL+1
JFINAL=JFINAL+KNTTTL(NEWSEC)
NEWSEC=NEWSEC+1
GO TO 14
C
C PERFORM THE SWAP OF NAMES
15 MIN=IFIRST
MID=IFINAL
MAX=JFIRST-1
IF(IFIRST.LT.JFINAL)GO TO 16
MIN=JFIRST
MID=IFIRST-1
MAX=IFINAL
16 CALL DASWAP(LTRTTL,MIN,MID,MAX)
C
C SWAP SECTION NAME LENTHS AND SECTION LINE LENGTHS
MIN=MOVSEC
MID=MOVSEC
MAX=NOWSEC-1
IF(MOVSEC.LT.NOWSEC)GO TO 17
MIN=NOWSEC
MID=MOVSEC-1
MAX=MOVSEC
17 CALL DASWAP(KNTTTL,MIN,MID,MAX)
CALL DASWAP(LNGSEC,MIN,MID,MAX)
RETURN
END
SUBROUTINE RSMPUT(LTRBFR,LMTBFR,LINE,LTRTXT,LNGLIN,LNGSEC,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,MAXSEC,LMTSEC,MARKER,ITTY,IFTELL)
C RENBR(/INSERT NEW LINE OF TEXT INTO RESUME)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
DIMENSION LTRTXT(LMTTXT),LNGLIN(LMTLIN),LNGSEC(LMTSEC),
1LTRBFR(LMTBFR),MARKER(LMTLIN)
C
C FIND EXTENT OF LINE
LOCLIN=LINE+1
MAXBFR=LMTBFR
1 IF(MAXBFR.LE.0)GO TO 2
IF(LTRBFR(MAXBFR).NE.1H )GO TO 2
MAXBFR=MAXBFR-1
GO TO 1
2 CONTINUE
IFINAL=0
3 IFIRST=IFINAL+1
4 IFINAL=IFINAL+76
IF(IFINAL.GE.MAXBFR)GO TO 7
MIDDLE=IFINAL+1
5 IF(MIDDLE.LE.IFIRST)GO TO 8
IF(LTRBFR(MIDDLE).EQ.1H )GO TO 6
MIDDLE=MIDDLE-1
GO TO 5
6 IFINAL=MIDDLE-1
GO TO 8
7 IFINAL=MAXBFR
8 CONTINUE
IF(LINE.LT.KNTLIN)GO TO 10
IF(LINE.GE.LMTLIN)GO TO 25
C
C NEW LINE IS ABOVE CURRENT STORAGE
LNGSEC(MAXSEC)=LNGSEC(MAXSEC)+LINE-KNTLIN+1
INDEX0=KNTLIN
KNTLIN=LINE+1
9 INDEX0=INDEX0+1
LNGLIN(INDEX0)=0
MARKER(INDEX0)=0
IF(INDEX0.GT.LINE)GO TO 14
GO TO 9
C
C DETERMINE WHETHER MUST EXPAND LINE STORAGE
10 IF(KNTLIN.GE.LMTLIN)GO TO 25
KNTLIN=KNTLIN+1
INDEX0=KNTLIN
11 IF(INDEX0.LE.LINE)GO TO 12
LNGLIN(INDEX0)=LNGLIN(INDEX0-1)
MARKER(INDEX0)=MARKER(INDEX0-1)
INDEX0=INDEX0-1
GO TO 11
12 LNGLIN(LINE+1)=0
MARKER(LINE+1)=0
INDEX0=0
DO 13 I=1,MAXSEC
INDEX0=INDEX0+LNGSEC(I)
IF(INDEX0.LT.LINE)GO TO 13
LNGSEC(I)=LNGSEC(I)+1
GO TO 14
13 CONTINUE
LNGSEC(MAXSEC)=LNGSEC(MAXSEC)+1
C
C INSERT NEW LINE
14 IF(IFIRST.GT.IFINAL)GO TO 25
IF((IFINAL-IFIRST+1).GT.(LMTTXT-KNTTXT))GO TO 25
LNGLIN(LINE+1)=IFINAL-IFIRST+1
MARKER(LINE+1)=0
INDEX0=0
DO 15 I=1,KNTLIN
IF(MARKER(I).GT.INDEX0)INDEX0=MARKER(I)
15 CONTINUE
MARKER(LINE+1)=INDEX0+1
INDEX0=0
INDEX2=1
16 IF(INDEX2.GE.LINE+1)GO TO 17
INDEX0=INDEX0+LNGLIN(INDEX2)
INDEX2=INDEX2+1
GO TO 16
17 INDEX1=KNTTXT
KNTTXT=KNTTXT+IFINAL-IFIRST+1
INDEX2=KNTTXT
18 IF(INDEX1.LE.INDEX0)GO TO 19
LTRTXT(INDEX2)=LTRTXT(INDEX1)
INDEX1=INDEX1-1
INDEX2=INDEX2-1
GO TO 18
19 DO 20 I=IFIRST,IFINAL
INDEX0=INDEX0+1
LTRTXT(INDEX0)=LTRBFR(I)
20 CONTINUE
C
C CHECK IF ANOTHER LINE MUST BE ADDED
21 IF(IFINAL.GE.MAXBFR)GO TO 22
IFINAL=IFINAL+1
IF(LTRBFR(IFINAL).EQ.1H )GO TO 21
IFINAL=IFINAL-1
LINE=LINE+1
GO TO 3
22 IF(IFTELL.EQ.0)GO TO 25
I=LINE+1
IF(LOCLIN.EQ.I)WRITE(ITTY,23)MARKER(I)
IF(LOCLIN.LT.I)WRITE(ITTY,24)MARKER(LOCLIN),MARKER(I)
23 FORMAT(' Inserting line',1I5)
24 FORMAT(' Inserting lines',1I5,' through',1I5)
C
C RETURN TO CALLING PROGRAM
25 RETURN
END
SUBROUTINE RSMRUL(LTRBFR,LMTBFR,LINE,LNGLIN,LNGSEC,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,MARKER,
2LMTLTT,MAXLTT,LTRTTL,LMTSEC,MAXSEC,KNTTTL)
C RENBR(/SPLIT SECTION INTO TWO SECTIONS)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
DIMENSION LTRBFR(LMTBFR),LNGLIN(LMTLIN),LNGSEC(LMTSEC),
1MARKER(LMTLIN),LTRTTL(LMTLTT),KNTTTL(LMTSEC)
C
C IDENTIFY THE SECTION CONTAINING THE SPECIFIED LINE
KUTSEC=0
MSTSEC=0
1 KUTSEC=KUTSEC+1
MSTSEC=MSTSEC+LNGSEC(KUTSEC)
IF(LINE.GT.MSTSEC)GO TO 1
KUTSEC=KUTSEC+1
C
C MOVE THE NAME TO INSIDE OF LIST
IF(KUTSEC.EQ.MAXSEC)GO TO 10
I=0
J=0
2 I=I+1
IF(I.GE.KUTSEC)GO TO 3
J=J+KNTTTL(I)
GO TO 2
3 K=J
4 IF(I.GE.MAXSEC)GO TO 5
K=K+KNTTTL(I)
I=I+1
GO TO 4
5 L=J+KNTTTL(MAXSEC)
M=K
N=KNTTTL(MAXSEC)
DO 6 I=1,N
M=M+1
LTRBFR(I)=LTRTTL(M)
6 CONTINUE
7 LTRTTL(M)=LTRTTL(K)
M=M-1
K=K-1
IF(K.GT.J)GO TO 7
8 LTRTTL(M)=LTRBFR(N)
M=M-1
N=N-1
IF(M.GT.J)GO TO 8
N=KNTTTL(MAXSEC)
M=MAXSEC
9 KNTTTL(M)=KNTTTL(M-1)
LNGSEC(M)=LNGSEC(M-1)
M=M-1
IF(M.GT.KUTSEC)GO TO 9
KNTTTL(KUTSEC)=N
10 LNGSEC(KUTSEC-1)=LNGSEC(KUTSEC-1)-MSTSEC+LINE-1
LNGSEC(KUTSEC)=MSTSEC-LINE+2
C
C INSERT AN EMPTY LINE AT START OF NEW SECTION
KNTLIN=KNTLIN+1
M=KNTLIN
11 IF(M.LE.LINE)GO TO 12
LNGLIN(M)=LNGLIN(M-1)
MARKER(M)=MARKER(M-1)
M=M-1
GO TO 11
12 LNGLIN(LINE)=0
MARKER(LINE)=0
RETURN
END
SUBROUTINE RSMMRG(LTRBFR,LMTBFR,LNGLIN,LNGSEC,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,MARKER,
2LMTLTT,MAXLTT,LTRTTL,LMTSEC,MAXSEC,KNTTTL,NOWSEC)
C RENBR(/MERGE TWO SECTIONS INTO ONE)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
DIMENSION LTRBFR(LMTBFR),LNGLIN(LMTLIN),LNGSEC(LMTSEC),
1MARKER(LMTLIN),LTRTTL(LMTLTT),KNTTTL(LMTSEC)
C
C LOCATE THE LINE NUMBER AT START OF SECTION
LINE=0
I=0
1 I=I+1
IF(I.GE.NOWSEC)GO TO 2
LINE=LINE+LNGSEC(I)
GO TO 1
2 CONTINUE
C
C REMOVE THE BLANK LINE AT START OF SECTION
3 LINE=LINE+1
IF(LINE.GE.KNTLIN)GO TO 4
LNGLIN(LINE)=LNGLIN(LINE+1)
MARKER(LINE)=MARKER(LINE+1)
GO TO 3
4 KNTLIN=KNTLIN-1
C
C LOCATE THE SECTION NAME
J=0
I=0
5 I=I+1
IF(I.GE.NOWSEC)GO TO 6
J=J+KNTTTL(I)
GO TO 5
6 K=J+KNTTTL(I)
7 J=J+1
K=K+1
IF(K.GT.MAXLTT)GO TO 8
LTRTTL(J)=LTRTTL(K)
GO TO 7
8 MAXLTT=MAXLTT-KNTTTL(NOWSEC)
C
C REMOVE THE SECTION NAME
LNGSEC(NOWSEC-1)=LNGSEC(NOWSEC-1)+LNGSEC(NOWSEC)-1
I=NOWSEC
9 IF(I.GE.MAXSEC)GO TO 10
KNTTTL(I)=KNTTTL(I+1)
LNGSEC(I)=LNGSEC(I+1)
I=I+1
GO TO 9
10 MAXSEC=MAXSEC-1
NOWSEC=0
RETURN
END
SUBROUTINE RSMEDT(LINE,LTRTXT,LNGLIN,LNGSEC,LMTSEC,MAXSEC,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,ITTY,IERROR,LTRWID,LMTWID,MARKER,
2IXYZZY,IVIDEO,JVIDEO,KNTATO)
C RENBR(/EDIT A LINE IN RESUME)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
C IERROR = 0, RETURNED IF SUCCESS
C = 1, DELETE LINE
C
C UPPER CASE A-Z, LOWER CASE A-Z AND DIGITS 0-9
COMMON/RSMFIV/LTRABC(26),LWRABC(26),LTRDGT(10)
C
DIMENSION LTREDT(104),KNTEDT(19),KNDEDT(19),
1LTRBFR(80),LWRBFR(80)
DIMENSION LTRATT(17),KNTATT(2)
DIMENSION LTRTXT(LMTTXT),LNGLIN(LMTLIN),LTRWID(LMTWID),
1LNGSEC(LMTSEC),MARKER(LMTLIN)
DATA LTREDT/
11HB,1HE,1HF,1HO,1HR,1HE,
21HA,1HF,1HT,1HE,1HR,
31HD,1HE,1HL,1HE,1HT,1HE,
41HC,1HH,1HA,1HN,1HG,1HE,
51HP,1HR,1HE,1HF,1HI,1HX,
61HS,1HU,1HF,1HF,1HI,1HX,
71HN,1HE,1HX,1HT,
81HH,1HE,1HA,1HD,
91HT,1HA,1HI,1HL,
11HR,1HE,1HP,1HL,1HA,1HC,1HE,
21HS,1HP,1HA,1HC,1HE,
31HB,1HR,1HE,1HA,1HK,
41HB,1HU,1HL,1HL,1HE,1HT,
51HB,1HO,1HL,1HD,
61HU,1HN,1HD,1HE,1HR,1HL,1HI,1HN,1HE,
71HN,1HO,1HR,1HM,1HA,1HL,
81HU,1HP,1HP,1HE,1HR,
91HL,1HO,1HW,1HE,1HR,
11HM,1HI,1HX,1HE,1HD/
DATA KNTEDT/6,5,6,6,6,6,4,4,4,7,5,5,6,4,9,6,5,5,5/
DATA KNDEDT/1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0/
DATA LMTLED,LMTKED/104,19/
DATA LTRSPA,LTRSTA,LTRUPA,LTRUND,LTRMIN/
1 1H ,1H*,1H^,1H_,1H-/
DATA LMTBFR/80/
DATA LTRATT/
11HA,1HT,1HT,1HA,1HC,1HH,1HE,1HD,
21HS,1HE,1HP,1HA,1HR,1HA,1HT,1HE,1HD/
DATA KNTATT/8,9/
DATA LMTLAT,LMTKAT/17,2/
C
IERROR=0
IF(LINE.GT.KNTLIN)GO TO 140
IF(LNGLIN(LINE).LE.0)GO TO 140
C
C LOCATE THE LINE
IFINAL=0
INDEX0=1
1 IF(INDEX0.GT.LINE)GO TO 3
IFIRST=IFINAL+1
IFINAL=IFINAL+LNGLIN(INDEX0)
INDEX0=INDEX0+1
GO TO 1
C
C REDISPLAY LINE AFTER GIVING NULL TARGET
2 CALL RSMTYP(ITTY,LMTTXT,LTRTXT,LMTLIN,LNGLIN,
1IFIRST,IFINAL,0,JFIRST,JFINAL)
C
C FIND WHAT IS TO BE SEARCHED FOR
3 INITAL=IFIRST
WRITE(ITTY,4)
4 FORMAT(' Search for? ',$)
CALL GETLIN(ITTY,LTRBFR,LMTBFR,MAXBFR)
IF(MAXBFR.LT.0)GO TO 8
5 MAXTGT=MAXBFR
6 LOWBFR=0
7 LOWBFR=LOWBFR+1
IF(LOWBFR.GT.MAXBFR)GO TO 9
IF(LTRBFR(LOWBFR).EQ.LTRSPA)GO TO 7
GO TO 9
8 IVIDEO=JVIDEO
CALL RSMHLP(ITTY,7,LTRBFR,LMTBFR,MAXBFR,IVIDEO)
IVIDEO=0
IF(MAXBFR.LE.0)GO TO 2
GO TO 5
9 IF(MAXBFR.LE.0)GO TO 133
DO 12 I=1,MAXBFR
LTRNOW=LTRBFR(I)
LWRBFR(I)=LTRNOW
DO 11 J=1,26
IF(LTRNOW.EQ.LTRABC(J))GO TO 10
IF(LTRNOW.EQ.LWRABC(J))GO TO 10
GO TO 11
10 LTRBFR(I)=LTRABC(J)
LWRBFR(I)=LWRABC(J)
GO TO 12
11 CONTINUE
12 CONTINUE
C
C SEARCH FOR THE ITEM IN LINE
IF(INITAL.GT.IFINAL)GO TO 133
DO 21 INDEX1=INITAL,IFINAL
JFINAL=INDEX1
INDEX0=LOWBFR
13 IF(LTRTXT(JFINAL).NE.LTRSPA)GO TO 16
IF(LTRBFR(INDEX0).NE.LTRSPA)GO TO 21
14 IF(JFINAL.GE.IFINAL)GO TO 21
JFINAL=JFINAL+1
IF(LTRTXT(JFINAL).EQ.LTRSPA)GO TO 14
15 IF(INDEX0.GE.MAXBFR)GO TO 21
INDEX0=INDEX0+1
IF(LTRBFR(INDEX0).EQ.LTRSPA)GO TO 15
GO TO 18
16 IF(LTRTXT(JFINAL).EQ.LTRUPA)GO TO 17
IF(LTRTXT(JFINAL).EQ.LTRUND)GO TO 17
IF(LTRBFR(INDEX0).EQ.LTRSPA)GO TO 21
GO TO 18
17 IF(LTRBFR(INDEX0).EQ.LTRSPA)GO TO 19
18 IF(LTRTXT(JFINAL).EQ.LTRBFR(INDEX0))GO TO 20
IF(LTRTXT(JFINAL).EQ.LWRBFR(INDEX0))GO TO 20
IF(LTRTXT(JFINAL).EQ.LTRUPA)GO TO 19
IF(LTRTXT(JFINAL).EQ.LTRUND)GO TO 19
GO TO 21
19 IF(INDEX0.EQ.LOWBFR)GO TO 21
INDEX0=INDEX0-1
20 IF(INDEX0.GE.MAXBFR)GO TO 23
IF(JFINAL.GE.IFINAL)GO TO 21
JFINAL=JFINAL+1
INDEX0=INDEX0+1
GO TO 13
21 CONTINUE
WRITE(ITTY,22)
22 FORMAT(' No match found')
GO TO 3
C
C REVERSE DIRECTION OF SEARCH TO TRIM OF EXTRA LEADING
C FLAG CHARACTERS AT START OF ITEM FOUND.
23 JFIRST=JFINAL
24 IF(LTRTXT(JFIRST).NE.LTRSPA)GO TO 27
25 JFIRST=JFIRST-1
IF(LTRTXT(JFIRST).EQ.LTRSPA)GO TO 25
26 INDEX0=INDEX0-1
IF(LTRBFR(INDEX0).EQ.LTRSPA)GO TO 26
GO TO 29
27 IF(LTRTXT(JFIRST).EQ.LTRUPA)GO TO 28
IF(LTRTXT(JFIRST).EQ.LTRUND)GO TO 28
GO TO 29
28 IF(LTRBFR(INDEX0).EQ.LTRSPA)GO TO 30
29 IF(LTRTXT(JFIRST).EQ.LTRBFR(INDEX0))GO TO 31
IF(LTRTXT(JFIRST).EQ.LWRBFR(INDEX0))GO TO 31
30 INDEX0=INDEX0+1
31 IF(INDEX0.LE.LOWBFR)GO TO 32
JFIRST=JFIRST-1
INDEX0=INDEX0-1
GO TO 24
C
C DISPLAY THE MATCHED CHARACTERS IN CONTEXT
32 CALL RSMTYP(ITTY,LMTTXT,LTRTXT,LMTLIN,LNGLIN,
1IFIRST,IFINAL,1,JFIRST,JFINAL)
C
C GET NEXT OPTION
GO TO 34
33 IF(MAXBFR.GT.0)GO TO 36
34 WRITE(ITTY,35)
35 FORMAT(' Edit how? ',$)
CALL GETLIN(ITTY,LTRBFR,LMTBFR,MAXBFR)
36 IF(MAXBFR.LT.0)GO TO 106
IF(MAXBFR.EQ.0)GO TO 40
LOWBFR=1
CALL DAVERB(1,LMTLED,LTREDT,1,LMTKED,
1KNTEDT,LTRBFR,LMTBFR,LOWBFR,KIND,MATCH,LCNWRD,
2LCNKNT,LCNBFR)
GO TO(133,38,37,37,38),KIND
37 IF(LOWBFR.GT.LMTBFR)GO TO 42
IF(LTRBFR(LOWBFR).NE.LTRSPA)GO TO 38
LOWBFR=LOWBFR+1
GO TO 37
38 WRITE(ITTY,39)
39 FORMAT(' Type ? for help')
GO TO 34
40 WRITE(ITTY,41)
41 FORMAT(' No changes have been made')
GO TO 133
42 IF(KNDEDT(MATCH).EQ.0)GO TO 63
C
C ASK IF INSERTION IS ATTACHED OR NOT
IF(MATCH.EQ.1)GO TO 43
IF(MATCH.EQ.2)GO TO 43
GO TO 52
43 WRITE(ITTY,44)
44 FORMAT(' Attached or Separate? ',$)
CALL GETLIN(ITTY,LTRBFR,LMTBFR,MAXBFR)
IF(MAXBFR.LT.0)GO TO 48
IF(MAXBFR.EQ.0)GO TO 49
LOWBFR=1
CALL DAVERB(1,LMTLAT,LTRATT,1,LMTKAT,
1KNTATT,LTRBFR,LMTBFR,LOWBFR,KIND,IREFIN,LCNWRD,
2LCNKNT,LCNBFR)
GO TO(133,46,45,45,46),KIND
45 IF(LOWBFR.GT.LMTBFR)GO TO 51
IF(LTRBFR(LOWBFR).NE.LTRSPA)GO TO 46
LOWBFR=LOWBFR+1
GO TO 45
46 WRITE(ITTY,47)
47 FORMAT(' Type ? for help')
GO TO 43
48 CALL RSMHLP(ITTY,63,LTRBFR,LMTBFR,MAXBFR,IVIDEO)
GO TO 43
49 WRITE(ITTY,50)
50 FORMAT(' No changes have been made')
GO TO 133
51 IF(IREFIN.EQ.2)GO TO 52
IF(MATCH.EQ.1)MATCH=5
IF(MATCH.EQ.2)MATCH=6
52 CONTINUE
C
C TEXT TO BE INSERTED
IF(MATCH.EQ.1)WRITE(ITTY,53)
53 FORMAT(' Insert what before')
IF(MATCH.EQ.2)WRITE(ITTY,54)
54 FORMAT(' Insert what after')
IF(MATCH.EQ.4)WRITE(ITTY,55)
55 FORMAT(' Change to what')
IF(MATCH.EQ.5)WRITE(ITTY,56)
56 FORMAT(' Attach what as prefix')
IF(MATCH.EQ.6)WRITE(ITTY,57)
57 FORMAT(' Attach what as suffix')
IF(MATCH.EQ.10)WRITE(ITTY,58)
58 FORMAT(' Replace by what')
59 WRITE(ITTY,60)
60 FORMAT(' ?',$)
CALL GETLIN(ITTY,LTRWID,LMTWID,MAXBFR)
IF(MAXBFR.LT.0)GO TO 62
LOWBFR=0
61 LOWBFR=LOWBFR+1
IF(LOWBFR.GT.MAXBFR)GO TO 133
IF(LTRWID(LOWBFR).EQ.LTRSPA)GO TO 61
GO TO 63
62 IHELP=MATCH+7
CALL RSMHLP(ITTY,IHELP,LTRBFR,LMTBFR,MAXBFR,IVIDEO)
GO TO 59
C
C PERFORM OPERATION
C GO TO(AFT,BEF,CHA,DEL,NEX,PRE,SUF,?
63 GO TO(121,122,109,111,123,124,107,93,94,111,
1120,115,116,64,64,64,76,76,76),MATCH
C
C BOLD OR UNDERLINE OR NORMAL
64 LOWBFR=1
MAXBFR=0
65 IF(JFIRST.LE.IFIRST)GO TO 69
LTRNOW=LTRTXT(JFIRST-1)
IF(LTRNOW.EQ.LTRSPA)GO TO 66
IF(LTRNOW.EQ.LTRUPA)GO TO 66
IF(LTRNOW.EQ.LTRUND)GO TO 66
GO TO 67
66 JFIRST=JFIRST-1
GO TO 65
67 IPRINT=1
DO 68 I=1,26
IF(LTRNOW.EQ.LTRABC(I))GO TO 70
IF(LTRNOW.EQ.LWRABC(I))GO TO 70
68 CONTINUE
69 IPRINT=0
70 KFIRST=JFIRST
71 IF(KFIRST.GT.JFINAL)GO TO 75
LTRNOW=LTRTXT(KFIRST)
IF(LTRNOW.EQ.LTRSPA)GO TO 72
IF(LTRNOW.EQ.LTRUPA)GO TO 74
IF(LTRNOW.EQ.LTRUND)GO TO 74
IF(IPRINT.NE.0)GO TO 73
IF(MAXBFR.GE.LMTWID)GO TO 75
IPRINT=1
IF(MATCH.EQ.16)GO TO 73
MAXBFR=MAXBFR+1
IF(MATCH.EQ.14)LTRWID(MAXBFR)=LTRUPA
IF(MATCH.EQ.15)LTRWID(MAXBFR)=LTRUND
GO TO 73
72 IPRINT=0
73 IF(MAXBFR.GE.LMTWID)GO TO 75
MAXBFR=MAXBFR+1
LTRWID(MAXBFR)=LTRNOW
74 KFIRST=KFIRST+1
GO TO 71
75 GO TO 111
C
C UPPER OR LOWER OR MIXED
76 LOWBFR=1
MAXBFR=0
77 IF(JFIRST.LE.IFIRST)GO TO 81
LTRNOW=LTRTXT(JFIRST-1)
IF(LTRNOW.EQ.LTRSPA)GO TO 78
IF(LTRNOW.EQ.LTRUPA)GO TO 78
IF(LTRNOW.EQ.LTRUND)GO TO 78
GO TO 79
78 JFIRST=JFIRST-1
GO TO 77
79 IPRINT=1
DO 80 I=1,26
IF(LTRNOW.EQ.LTRABC(I))GO TO 82
IF(LTRNOW.EQ.LWRABC(I))GO TO 82
80 CONTINUE
81 IPRINT=0
82 KFIRST=JFIRST
83 IF(KFIRST.GT.JFINAL)GO TO 91
LTRNOW=LTRTXT(KFIRST)
IF(LTRNOW.EQ.LTRSPA)GO TO 88
IF(LTRNOW.EQ.LTRUPA)GO TO 89
IF(LTRNOW.EQ.LTRUND)GO TO 89
LETTER=0
84 LETTER=LETTER+1
IF(LETTER.GT.26)GO TO 89
IF(LTRNOW.EQ.LTRABC(LETTER))GO TO 85
IF(LTRNOW.EQ.LWRABC(LETTER))GO TO 85
GO TO 84
85 IF(MATCH.EQ.17)GO TO 86
IF(MATCH.EQ.18)GO TO 87
IF(IPRINT.NE.0)GO TO 87
IPRINT=1
86 LTRNOW=LTRABC(LETTER)
GO TO 89
87 LTRNOW=LWRABC(LETTER)
GO TO 89
88 IPRINT=0
89 IF(MAXBFR.GE.LMTWID)GO TO 91
MAXBFR=MAXBFR+1
LTRWID(MAXBFR)=LTRNOW
90 KFIRST=KFIRST+1
GO TO 83
91 GO TO 111
C
C HEAD
92 MATCH=8
JFIRST=JFIRST-1
93 IF(JFIRST.LE.IFIRST)GO TO 95
JFIRST=JFIRST-1
GO TO 97
C
C TAIL
94 IF(JFINAL.GE.IFINAL)GO TO 95
JFIRST=JFINAL
GO TO 97
95 WRITE(ITTY,96)
96 FORMAT(' Line is already split at this point')
GO TO 133
C
C SPLIT THE LINE INTO 2 LINES
97 IF(KNTLIN.GE.LMTLIN)GO TO 104
KNTLIN=KNTLIN+1
INDEX0=KNTLIN
98 IF(INDEX0.LE.LINE)GO TO 99
LNGLIN(INDEX0)=LNGLIN(INDEX0-1)
MARKER(INDEX0)=MARKER(INDEX0-1)
INDEX0=INDEX0-1
GO TO 98
99 LNGLIN(LINE)=JFIRST-IFIRST+1
LNGLIN(LINE+1)=IFINAL-JFIRST
INDEX0=0
INDEX1=0
100 IF(INDEX1.GE.LINE)GO TO 101
INDEX0=INDEX0+1
INDEX1=INDEX1+LNGSEC(INDEX0)
GO TO 100
101 LNGSEC(INDEX0)=LNGSEC(INDEX0)+1
INDEX0=0
DO 102 I=1,KNTLIN
IF(INDEX0.LT.MARKER(I))INDEX0=MARKER(I)
102 CONTINUE
INDEX0=INDEX0+1
MARKER(LINE+1)=INDEX0
WRITE(ITTY,103)INDEX0
103 FORMAT(' Right part of line is now line',1I5)
GO TO 140
104 WRITE(ITTY,105)
105 FORMAT(' Insufficient line storage')
GO TO 140
C
C HELP MESSAGE
106 IVIDEO=JVIDEO
CALL RSMHLP(ITTY,6,LTRBFR,LMTBFR,MAXBFR,IVIDEO)
IVIDEO=0
GO TO 33
C
C SEARCH FOR ANOTHER WORD LATER IN SAME LINE
107 DO 108 I=1,MAXTGT
LTRBFR(I)=LWRBFR(I)
108 CONTINUE
INITAL=JFIRST+1
MAXBFR=MAXTGT
GO TO 6
C
C DELETE
109 IF(JFIRST.LE.IFIRST)GO TO 110
IF(JFINAL.GE.IFINAL)GO TO 110
IF(LTRTXT(JFIRST-1).NE.LTRSPA)GO TO 110
IF(LTRTXT(JFINAL+1).NE.LTRSPA)GO TO 110
JFIRST=JFIRST-1
110 IF(JFIRST.GT.IFIRST)GO TO 112
IF(JFINAL.LT.IFINAL)GO TO 112
IERROR=1
GO TO 140
C
C CHANGE
111 I=LNGLIN(LINE)
I=I-JFINAL+JFIRST-1
I=I+MAXBFR-LOWBFR+1
C
C REMOVE THE OLD PHRASE
112 INDEX1=JFIRST
JFINAL=JFINAL+1
113 IF(JFINAL.GT.KNTTXT)GO TO 114
LTRTXT(INDEX1)=LTRTXT(JFINAL)
JFINAL=JFINAL+1
INDEX1=INDEX1+1
GO TO 113
114 KNTTXT=KNTTXT-JFINAL+INDEX1
IFINAL=IFINAL-JFINAL+INDEX1
LNGLIN(LINE)=LNGLIN(LINE)-JFINAL+INDEX1
IF(MATCH.EQ.3)GO TO 132
GO TO 125
C
C BREAK
115 LOWBFR=1
MAXBFR=1
LTRWID(1)=LTRSTA
GO TO 117
C
C BULLET
116 LOWBFR=1
MAXBFR=1
LTRWID(1)=LTRMIN
GO TO 117
C
C LOOK FOR UP-ARROW OR UNDERSCORE TO LEFT
117 IF(JFIRST.LE.IFIRST)GO TO 119
LTRNOW=LTRTXT(JFIRST-1)
IF(LTRNOW.EQ.LTRUPA)GO TO 118
IF(LTRNOW.EQ.LTRUND)GO TO 118
GO TO 119
118 JFIRST=JFIRST-1
GO TO 117
119 CONTINUE
GO TO 125
C
C SPACE (BEFORE)
120 LOWBFR=1
MAXBFR=0
MATCH=1
GO TO 125
C
C BEFORE
121 GO TO 125
C
C AFTER
122 JFIRST=JFINAL+1
GO TO 125
C
C PREFIX
123 GO TO 125
C
C SUFFIX
124 JFIRST=JFINAL+1
GO TO 125
C
C INSERT THE NEW PHRASE
125 INDEX0=KNTTXT
KNTTXT=KNTTXT+MAXBFR-LOWBFR+1
IF(MATCH.EQ.1)KNTTXT=KNTTXT+1
IF(MATCH.EQ.2)KNTTXT=KNTTXT+1
IFINAL=IFINAL+KNTTXT-INDEX0
LNGLIN(LINE)=LNGLIN(LINE)+KNTTXT-INDEX0
INDEX1=KNTTXT
126 IF(INDEX0.LT.JFIRST)GO TO 127
LTRTXT(INDEX1)=LTRTXT(INDEX0)
INDEX0=INDEX0-1
INDEX1=INDEX1-1
GO TO 126
127 IF(MATCH.NE.2)GO TO 128
LTRTXT(JFIRST)=LTRSPA
JFIRST=JFIRST+1
128 IF(LOWBFR.GT.MAXBFR)GO TO 130
DO 129 I=LOWBFR,MAXBFR
LTRTXT(JFIRST)=LTRWID(I)
JFIRST=JFIRST+1
129 CONTINUE
130 IF(MATCH.NE.1)GO TO 131
LTRTXT(JFIRST)=LTRSPA
JFIRST=JFIRST+1
131 IF(MATCH.EQ.12)GO TO 92
IF(MATCH.EQ.13)GO TO 92
C
C DISPLAY THE NEW CONTENTS OF THE LINE
132 CALL RSMTYP(ITTY,LMTTXT,LTRTXT,LMTLIN,LNGLIN,
1IFIRST,IFINAL,0,JFIRST,JFINAL)
IF(INITAL.GT.IFINAL)GO TO 133
C
C ASK IF USER IS DONE EDITING THIS LINE
133 IF(IXYZZY.NE.0)GO TO 139
KNTATO=KNTATO+1
134 WRITE(ITTY,135)
135 FORMAT(' Are you done editing this line? ',$)
CALL YESNO(1,KNDYES,ITTY)
GO TO(134,134,139,138,136),KNDYES
136 WRITE(ITTY,137)
137 FORMAT(' Answer'/
1' YES to specify another option'/
2' NO if more changes are to be made to this line')
GO TO 134
138 GO TO 2
139 CONTINUE
C
C RETURN TO CALLING PROGRAM
140 RETURN
END
SUBROUTINE RSMKIL(LINE,LTRTXT,LNGLIN,LNGSEC,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,LMTSEC,MARKER)
C RENBR(/KILL A LINE IN RESUME)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
DIMENSION LTRTXT(LMTTXT),LNGLIN(LMTLIN),LNGSEC(LMTSEC),
1MARKER(LMTLIN)
IF(LINE.GT.KNTLIN)GO TO 8
INDEX5=0
INDEX6=0
1 INDEX6=INDEX6+1
INDEX5=INDEX5+LNGSEC(INDEX6)
IF(INDEX5.LT.LINE)GO TO 1
C
C REMOVE CHARACTERS IN LINE
INDEX0=0
INDEX2=1
2 IF(INDEX2.GE.LINE)GO TO 3
INDEX0=INDEX0+LNGLIN(INDEX2)
INDEX2=INDEX2+1
GO TO 2
3 INDEX1=INDEX0+LNGLIN(LINE)
4 IF(INDEX1.GE.KNTTXT)GO TO 5
INDEX0=INDEX0+1
INDEX1=INDEX1+1
LTRTXT(INDEX0)=LTRTXT(INDEX1)
GO TO 4
5 KNTTXT=INDEX0
LNGLIN(LINE)=0
MARKER(LINE)=0
IF(LNGSEC(INDEX6).LE.1)GO TO 8
LNGSEC(INDEX6)=LNGSEC(INDEX6)-1
INDEX2=LINE
6 INDEX2=INDEX2+1
IF(INDEX2.GT.KNTLIN)GO TO 7
LNGLIN(INDEX2-1)=LNGLIN(INDEX2)
MARKER(INDEX2-1)=MARKER(INDEX2)
GO TO 6
7 KNTLIN=KNTLIN-1
C
C RETURN TO CALLING PROGRAM
8 RETURN
END
SUBROUTINE RSMCUT(LINE,LTRTXT,LNGLIN,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,IERROR,IBULLT)
C RENBR(/INSERT * OR - AT START OF LINE)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
C IERROR = 0, RETURNED IF NO ERROR
C = 1, LINE ALREADY CONTAINS ASTERISK
C = 2, NO ROOM IN STORAGE FOR ASTERISK
DIMENSION LTRTXT(LMTTXT),LNGLIN(LMTLIN)
DATA LTRSTA,LTRMIN/1H*,1H-/
IERROR=0
IF(LINE.GT.KNTLIN)GO TO 9
IF(LNGLIN(LINE).EQ.0)GO TO 9
IF(KNTTXT.GE.LMTTXT)GO TO 8
C
C LOCATE THE LINE
INDEX0=0
INDEX2=1
1 IF(INDEX2.GE.LINE)GO TO 2
INDEX0=INDEX0+LNGLIN(INDEX2)
INDEX2=INDEX2+1
GO TO 1
2 INDEX1=INDEX0+LNGLIN(LINE)
INDEX0=INDEX0+1
C
C INSURE LINE DOES NOT ALREADY CONTAIN ASTERISK
I=INDEX0
3 IF(LTRTXT(I).NE.LTRSTA)GO TO 4
I=I+1
IF(I.GT.INDEX1)GO TO 7
IF(LTRTXT(I).NE.LTRSTA)GO TO 7
4 I=I+1
IF(I.LE.INDEX1)GO TO 3
C
C INSERT THE ASTERISK
KNTTXT=KNTTXT+1
INDEX1=KNTTXT
5 IF(INDEX1.LE.INDEX0)GO TO 6
LTRTXT(INDEX1)=LTRTXT(INDEX1-1)
INDEX1=INDEX1-1
GO TO 5
6 IF(IBULLT.EQ.0)LTRTXT(INDEX0)=LTRSTA
IF(IBULLT.EQ.1)LTRTXT(INDEX0)=LTRMIN
LNGLIN(LINE)=LNGLIN(LINE)+1
GO TO 9
C
C ERRORS
7 IERROR=1
GO TO 9
8 IERROR=2
GO TO 9
C
C RETURN TO CALLING PROGRAM
9 RETURN
END
SUBROUTINE RSMGLU(LINE,LTRTXT,LNGLIN,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,IERROR)
C RENBR(/REMOVE ASTERISK OR BULLET AT START OF LINE)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
C IERROR = 0, UNMARKING SUCCEDED
C = 1, NO ASTERISK IN LINE BEFORE
C = 2, ONLY * IN LINE BEFORE, USE DELETE OPTION
DIMENSION LTRTXT(LMTTXT),LNGLIN(LMTLIN)
DATA LTRSTA/1H*/
IERROR=0
IF(LINE.GT.KNTLIN)GO TO 10
C
C LOCATE THE LINE
INDEX0=0
INDEX2=1
1 IF(INDEX2.GE.LINE)GO TO 2
INDEX0=INDEX0+LNGLIN(INDEX2)
INDEX2=INDEX2+1
GO TO 1
2 INDEX1=INDEX0+LNGLIN(LINE)
INDEX0=INDEX0+1
C
C INSURE LINE STARTS WITH ASTERISK
INDEX2=INDEX0
3 IF(INDEX2.GT.INDEX1)GO TO 9
IF(LTRTXT(INDEX2).EQ.1H )GO TO 4
IF(LTRTXT(INDEX2).EQ.1H*)GO TO 4
IF(LTRTXT(INDEX2).EQ.1H-)GO TO 4
GO TO 5
4 LTRTXT(INDEX2)=' '
INDEX2=INDEX2+1
GO TO 3
5 IF(INDEX2.EQ.INDEX0)GO TO 8
C
C REMOVE THE ASTERISK
6 IF(INDEX2.GT.KNTTXT)GO TO 7
LTRTXT(INDEX0)=LTRTXT(INDEX2)
INDEX2=INDEX2+1
INDEX0=INDEX0+1
GO TO 6
7 KNTTXT=KNTTXT-INDEX2+INDEX0
LNGLIN(LINE)=LNGLIN(LINE)-INDEX2+INDEX0
GO TO 10
C
C RETURN TO CALLING PROGRAM
8 IERROR=1
GO TO 10
9 IERROR=2
10 RETURN
END
SUBROUTINE RSMDBG(LMTBFR,LNGLIN,LNGSEC,LTRTXT,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,MARKER,
2LMTLTT,MAXLTT,LTRTTL,LMTSEC,MAXSEC,KNTTTL,ITTY,
3NUMWHO,IYEAR)
C RENBR(/DISPLAY RESUME DATA STRUCTURE)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
DIMENSION LNGLIN(LMTLIN),LNGSEC(LMTSEC),
1MARKER(LMTLIN),LTRTTL(LMTLTT),KNTTTL(LMTSEC),LTRTXT(LMTTXT)
DATA LTRSPA/1H /
C
C CALCULATE THE USED PORTIONS OF ARRAYS
IRTSEC=0
MSTLIN=0
IRTCOL=0
ISECTN=0
1 ISECTN=ISECTN+1
IF(ISECTN.GT.MAXSEC)GO TO 3
IRTSEC=IRTSEC+KNTTTL(ISECTN)
LINE=MSTLIN
MSTLIN=MSTLIN+LNGSEC(ISECTN)
2 LINE=LINE+1
IF(LINE.GT.MSTLIN)GO TO 1
IRTCOL=IRTCOL+LNGLIN(LINE)
GO TO 2
3 CONTINUE
C
WRITE(ITTY,4)NUMWHO,IYEAR
4 FORMAT(' STUDENT NUMBER:',1I7,' CLASS NUMBER:',1I4)
WRITE(ITTY,5)MAXSEC,LMTSEC
5 FORMAT(' (NUMBER OF SECTIONS) MAXSEC',16X,
1' ACTUAL:',1I5,' LIMIT:',1I5)
WRITE(ITTY,6)MAXLTT,IRTSEC,LMTLTT
6 FORMAT(' (TEXT IN NAMES) MAXLTT EXPECTED:',1I5,
1', ACTUAL:',1I5,' LIMIT:',1I5)
WRITE(ITTY,7)KNTLIN,MSTLIN,LMTLIN
7 FORMAT(' (NUMBER OF LINES) KNTLIN EXPECTED:',1I5,
1', ACTUAL:',1I5,' LIMIT:',1I5)
WRITE(ITTY,8)KNTTXT,IRTCOL,LMTTXT
8 FORMAT(' (TEXT IN LINES) KNTTXT EXPECTED:',1I5,
1', ACTUAL:',1I5,' LIMIT:',1I5)
C
C INITIAL COUNTS
ISHOWN=5
IRTSEC=0
MSTLIN=0
IRTCOL=0
C
C START OF SECTION LOOP
ISECTN=0
9 ISECTN=ISECTN+1
IF(ISECTN.GT.MAXSEC)GO TO 22
LFTSEC=IRTSEC+1
IRTSEC=IRTSEC+KNTTTL(ISECTN)
JSHOWN=1
IF(LFTSEC.LE.IRTSEC)JSHOWN=JSHOWN+1
IRETRN=1
IF((ISHOWN+JSHOWN).GT.22)GO TO 23
10 IF(LFTSEC.GT.IRTSEC)WRITE(ITTY,11)ISECTN,LNGSEC(ISECTN),
1ISECTN,KNTTTL(ISECTN)
IF(LFTSEC.LE.IRTSEC)WRITE(ITTY,12)ISECTN,LNGSEC(ISECTN),
1ISECTN,KNTTTL(ISECTN),LFTSEC,IRTSEC
ISHOWN=ISHOWN+1
IF(LFTSEC.LE.IRTSEC)WRITE(ITTY,13)
1(LTRTTL(I),I=LFTSEC,IRTSEC)
IF(LFTSEC.LE.IRTSEC)ISHOWN=ISHOWN+1
11 FORMAT(1X,10X,'LNGSEC(',1I5,')',1I5,', KNTTTL(',1I5,')',1I5,
1', EMPTY TITLE')
12 FORMAT(1X,10X,'LNGSEC(',1I5,')',1I5,', KNTTTL(',1I5,')',1I5,
1', LTRTTL(',1I5,'/',1I5,')')
13 FORMAT(1X,80A1)
INILIN=MSTLIN+1
MSTLIN=MSTLIN+LNGSEC(ISECTN)
C
C LINE LOOP
LINE=INILIN-1
14 LINE=LINE+1
IF(LINE.GT.MSTLIN)GO TO 20
LFTCOL=IRTCOL+1
IRTCOL=IRTCOL+LNGLIN(LINE)
JSHOWN=1
IF(LFTCOL.LE.IRTCOL)JSHOWN=JSHOWN+1
IRETRN=2
IF((ISHOWN+JSHOWN).GT.22)GO TO 23
15 IF(LFTCOL.GT.IRTCOL)WRITE(ITTY,16)LINE,MARKER(LINE),
1LINE,LNGLIN(LINE)
IF(LFTCOL.LE.IRTCOL)WRITE(ITTY,17)LINE,MARKER(LINE),
1LINE,LNGLIN(LINE),LFTCOL,IRTCOL
ISHOWN=ISHOWN+1
IF(LFTCOL.LE.IRTCOL)WRITE(ITTY,18)
1(LTRTXT(I),I=LFTCOL,IRTCOL)
IF(LFTCOL.LE.IRTCOL)ISHOWN=ISHOWN+1
16 FORMAT(1X,10X,'MARKER(',1I5,')',1I5,', LNGLIN(',1I5,')',1I5,
1', EMPTY LINE')
17 FORMAT(1X,10X,'MARKER(',1I5,')',1I5,', LNGLIN(',1I5,')',1I5,
1', LTRTXT(',1I5,'/',1I5,')')
18 FORMAT(1X,80A1)
19 GO TO 14
20 CONTINUE
21 GO TO 9
22 CONTINUE
GO TO 26
C
C STOP AT BOTTOM OF EACH PAGE DISPLAY
23 ISHOWN=0
WRITE(ITTY,24)
24 FORMAT(1X/' (press RETURN to continue)',$)
READ(ITTY,25,END=26)LTRNOW
IF(LTRNOW.NE.LTRSPA)GO TO 26
25 FORMAT(1A1)
GO TO(10,15),IRETRN
C
C RETURN TO CALLING PROGRAM
26 RETURN
END
SUBROUTINE RSMRNG(NOWSEC,IFIRST,IFINAL,LNGSEC,LMTSEC)
C RENBR(/GET RANGE OF LINES IN A SECTION)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
DIMENSION LNGSEC(LMTSEC)
INDEX1=1
INDEX2=1
1 IF(INDEX2.GT.NOWSEC)GO TO 2
INDEX0=INDEX1
INDEX1=INDEX1+LNGSEC(INDEX2)
INDEX2=INDEX2+1
GO TO 1
2 IFIRST=INDEX0
IFINAL=INDEX1-1
RETURN
END
SUBROUTINE DASWAP(IARRAY,LOW,MID,MAX)
C RENBR(/SWAP ADJACENT SECTIONS OF ARRAY)
C
C DONALD BARTH, CHEMISTRY DEPT., HARVARD UNIVERSITY
C
C ROUTINE TO SWAP ADJACENT SECTIONS OF SINGLE ARRAY
C
C IARRAY = ARRAY CONTAINING SECTIONS TO BE SWAPPED
C LOW = SUBSCRIPT OF LOWEST LOCATION IN LOW SECTION
C MID = SUBSCRIPT OF HIGHEST LOCATION IN LOW SECTION
C MAX = SUBSCRIPT OF HIGHEST LOCATION IN HIGH
C SECTION
C
C SWAP IS PERFORMED BY MOVING VALUES DIRECTLY TO
C LOCATIONS THEY ARE TO OCCUPY IN THE RESULT.
C
C FOR EXAMPLE, TO SWAP ABCD AND 123 IN THE
C FOLLOWING EXAMPLE, 3 IS MOVED TO LOCATION HOLDING C
C WHICH IS MOVED TO LOCATION HOLDING 2 AND SO ON.
C
C A B C D 1 2 3
C . . I-----------I
C . . I--------I .
C . I-----------I .
C . I--------I . .
C I-----------I . .
C I--------I . . .
C . . . I--------I
C
C IARRAY ARRAY AND NEW AND KEEP VARIABLES SHOULD BE
C MADE FLOATING POINT TO SWAP A FLOATING POINT ARRAY.
C
DIMENSION IARRAY(MAX)
IF(LOW.GT.MID)GO TO 5
IF(MID.GE.MAX)GO TO 5
KOUNT=LOW-MAX-1
LAST=MAX
LONGLO=LOW-MID-1
LONGHI=MAX-MID
1 INDEX=LAST+LONGLO
KEEP=IARRAY(LAST)
2 KOUNT=KOUNT+1
NEW=IARRAY(INDEX)
IARRAY(INDEX)=KEEP
KEEP=NEW
IF(INDEX.GT.MID)GO TO 3
INDEX=INDEX+LONGHI
GO TO 2
3 IF(INDEX.EQ.LAST)GO TO 4
INDEX=INDEX+LONGLO
GO TO 2
4 IF(KOUNT.EQ.0)GO TO 5
LAST=LAST-1
GO TO 1
5 RETURN
C107401072377
END
SUBROUTINE RSMCUL(NOWSEC,ITTY,LTRTXT,LNGLIN,LNGSEC,
1LMTTXT,LMTLIN,KNTTXT,KNTLIN,MARKER,
2LMTLTT,MAXLTT,LTRTTL,LMTSEC,MAXSEC,KNTTTL,IERROR)
C RENBR(/CHECK FOR CHARACTERS NOT IN DIABLO TYPE FACE)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C THIS ROUTINE IS PART OF THE STUDENT RESUME SYSTEM
C
C THIS IS A MACHINE DEPENDENT ROUTINE
C
C THIS VERSION IS FOR THE DECSYSTEM10 AND DECSYSTEM20
C
DIMENSION LTRTXT(LMTTXT),LNGLIN(LMTLIN),LNGSEC(LMTSEC),
1MARKER(LMTLIN),LTRTTL(LMTLTT),KNTTTL(LMTSEC),LTRNOT(10),
2LTRBFR(80)
DATA LTRSPA/1H /
DATA LTRNOT/1H~,1H`,1H\,1H|,1H[,1H],1H{,1H},1H<,1H>/
DATA MAXNOT/10/
DATA LMTBFR/80/
IERROR=0
ISHOWN=0
MAXPRT=0
NOWLIN=0
KNTPRT=0
MRKSEC=0
DO 30 NEWSEC=1,MAXSEC
LEGEND=0
INISEC=MRKSEC+1
MRKSEC=MRKSEC+KNTTTL(NEWSEC)
MAXLIN=LNGSEC(NEWSEC)
IF(MAXLIN.LE.0)GO TO 30
DO 29 NEWLIN=1,MAXLIN
NOWLIN=NOWLIN+1
MINPRT=MAXPRT+1
MAXPRT=MAXPRT+LNGLIN(NOWLIN)
IF(MINPRT.GT.MAXPRT)GO TO 29
IF(NOWSEC.LE.1)GO TO 1
IF(NEWSEC.LT.NOWSEC)GO TO 29
IF(NEWSEC.GT.NOWSEC)GO TO 30
1 IF(LEGEND.NE.0)GO TO 11
LEGEND=1
IF(INISEC.GT.MRKSEC)GO TO 11
MAXBFR=0
MAXSHO=0
JERROR=0
DO 4 I=INISEC,MRKSEC
LTRNOW=LTRTTL(I)
MAXBFR=MAXBFR+1
IF(MAXBFR.LE.LMTBFR)LTRBFR(MAXBFR)=' '
2 DO 3 J=1,MAXNOT
IF(LTRNOW.NE.LTRNOT(J))GO TO 3
JERROR=1
IF(MAXBFR.GT.LMTBFR)GO TO 4
MAXSHO=MAXBFR
LTRBFR(MAXSHO)='^'
GO TO 4
3 CONTINUE
4 CONTINUE
IF(JERROR.EQ.0)GO TO 11
IF(IERROR.NE.0)GO TO 6
ISHOWN=ISHOWN+1
WRITE(ITTY,5)
5 FORMAT(' Following lines contain characters not ',
1'available on letter quality typewriter')
6 IERROR=1
IF((ISHOWN+1).LT.22)GO TO 9
WRITE(ITTY,7)
7 FORMAT(1X/' (press RETURN to continue)',$)
READ(ITTY,8,END=31)LTRNOW
IF(LTRNOW.NE.LTRSPA)GO TO 31
8 FORMAT(1A1)
ISHOWN=0
9 ISHOWN=ISHOWN+1
WRITE(ITTY,10)(LTRTTL(I),I=INISEC,MRKSEC)
IF(MAXSHO.EQ.0)WRITE(ITTY,10)
IF(MAXSHO.GT.0)WRITE(ITTY,10)(LTRBFR(I),I=1,MAXSHO)
10 FORMAT(1X,100A1)
C
C WRITE OUT THE LINE
11 IFIRST=MINPRT
DO 13 I=MINPRT,MAXPRT
LTRNOW=LTRTXT(I)
DO 12 J=1,MAXNOT
IF(LTRNOW.EQ.LTRNOT(J))GO TO 14
12 CONTINUE
13 CONTINUE
GO TO 29
14 IFINAL=IFIRST+76
IF(IFINAL.GT.MAXPRT)GO TO 18
15 IF(IFINAL.LE.IFIRST)GO TO 17
IF(LTRTXT(IFINAL).EQ.1H )GO TO 16
IFINAL=IFINAL-1
GO TO 15
16 IFINAL=IFINAL-1
IF(IFINAL.GE.IFIRST)GO TO 19
17 IFINAL=IFIRST+76-1
GO TO 19
18 IFINAL=MAXPRT
19 CONTINUE
MAXBFR=0
MAXSHO=0
JERROR=0
DO 22 I=IFIRST,IFINAL
LTRNOW=LTRTXT(I)
MAXBFR=MAXBFR+1
IF(MAXBFR.LE.LMTBFR)LTRBFR(MAXBFR)=' '
20 DO 21 J=1,MAXNOT
IF(LTRNOW.NE.LTRNOT(J))GO TO 21
JERROR=1
IF(MAXBFR.GT.LMTBFR)GO TO 22
MAXSHO=MAXBFR
LTRBFR(MAXSHO)='^'
GO TO 22
21 CONTINUE
22 CONTINUE
IF(IERROR.NE.0)GO TO 23
ISHOWN=ISHOWN+1
WRITE(ITTY,5)
23 IERROR=1
IF((ISHOWN+1).LT.22)GO TO 24
WRITE(ITTY,7)
READ(ITTY,8,END=31)LTRNOW
IF(LTRNOW.NE.LTRSPA)GO TO 31
ISHOWN=0
24 ISHOWN=ISHOWN+1
IF(IFIRST.EQ.MINPRT)WRITE(ITTY,25)MARKER(NOWLIN),
1(LTRTXT(I),I=IFIRST,IFINAL)
25 FORMAT(1X,1I3,1X,100A1)
IF(IFIRST.GT.MINPRT)WRITE(ITTY,26)(LTRTXT(I),I=IFIRST,IFINAL)
IF(JERROR.EQ.0)GO TO 27
IF(MAXSHO.EQ.0)WRITE(ITTY,26)
IF(MAXSHO.GT.0)WRITE(ITTY,26)(LTRBFR(I),I=1,MAXSHO)
26 FORMAT(1X,4X,100A1)
27 KNTPRT=KNTPRT+1
IF(IFINAL.GE.MAXPRT)GO TO 29
IFIRST=IFINAL
IFINAL=MAXPRT
28 IFIRST=IFIRST+1
IF(IFIRST.GT.MAXPRT)GO TO 29
IF(LTRTXT(IFIRST).EQ.1H )GO TO 28
GO TO 14
29 CONTINUE
30 CONTINUE
GO TO 32
C
C CLOSE TERMINAL UNIT IF END-OF-FILE ON IT TO PREVENT
C INFINITE LOOP
31 CLOSE(UNIT=ITTY)
GO TO 32
C
C RETURN TO CALLING PROGRAM
32 RETURN
END
SUBROUTINE PASLST(IVIDEO,JVIDEO,IYEAR,IDISK,ITTY,
1LMTPSW,LTRPSW,LTRCHK,LNGPSW,NUMWHO,LTRBFR,LMTBFR)
C RENBR(/GET PASSWORD FROM PREDEFINED LIST)
C
C DONALD BARTH, YALE SCHOOL OF MANAGEMENT
C
C INPUT ARGUMENTS
C JVIDEO = 0, DO NOT FORM FEED BEFORE HELP MESSAGES
C = 1, ISSUE FORM FEED BEFORE HELP MESSAGES
C IYEAR = CLASS NUMBER
C IDISK = UNIT FROM WHICH READ
C ITTY = UNIT ON WHICH MESSAGE ARE WRITTEN, PASSWORD READ
C LMTPSW = DIMENSION OF LTRPSW
C
C OUTPUT ARGUMENTS
C LTRPSW = ARRAY RETURNED WITH UPPER CASE PASSWORD
C LTRCHK = ARRAY RETURNED WITH LOWER CASE PASSWORD. THIS
C IS SCRATH ARRAY NOT NEEDED BY CALLING PROGRAM
C LNGPSW = RETURNED WITH NUMBER OF CHARACTERS IN PASSWORD
C NUMWHO = RETURNED WITH NUMBER READ AS START OF PASSWORD
C
C SCRATCH ARRAY
C LTRBFR = ARRAY USED TO READ IN PASSWORD. SHOULD BE LONGER
C THAN LTRPSW SO OVERFLOW OF LTRPSW CAN BE SENSED.
C LMTBFR = DIMENSION OF LTRBFR
C
C UPPER CASE A-Z, LOWER CASE A-Z AND DIGITS 0-9
COMMON/RSMFIV/LTRABC(26),LWRABC(26),LTRDGT(10)
C
DIMENSION LTRPSW(LMTPSW),
1LTRBFR(LMTBFR),LTRCHK(LMTPSW)
C
DATA LTRSPA,LTRZER,LTREQU,LTREXC /1H ,1H0,1H=,1H!/
C
C ASK USER FOR NUMBER
KNTPSW=0
1 WRITE(ITTY,2)
2 FORMAT(' Number and password? ',$)
CALL GETLIN(ITTY,LTRBFR,LMTBFR,MAXBFR)
IF(MAXBFR.LT.0)GO TO 43
IF(MAXBFR.EQ.0)GO TO 41
MINBFR=0
3 MINBFR=MINBFR+1
IF(LTRBFR(MINBFR).EQ.LTRSPA)GO TO 3
KOMPAR=-1
4 LTRNOW=LTRBFR(MINBFR)
IF(LTRNOW.EQ.LTRSPA)GO TO 9
DO 5 IDIGIT=1,10
IF(LTRNOW.NE.LTRDGT(IDIGIT))GO TO 5
IF(KOMPAR.LT.0)KOMPAR=0
KOMPAR=(10*KOMPAR)+IDIGIT-1
GO TO 6
5 CONTINUE
IF(KOMPAR.LT.0)GO TO 41
GO TO 9
6 MINBFR=MINBFR+1
IF(MINBFR.LE.MAXBFR)GO TO 4
C
C ASK USER FOR PASSWORD
7 WRITE(ITTY,8)
8 FORMAT(' Password? ',$)
CALL GETLIN(ITTY,LTRBFR,LMTBFR,MAXBFR)
IF(MAXBFR.LT.0)GO TO 46
IF(MAXBFR.EQ.0)GO TO 44
C
C CONVERT PASWORD TO UPPER CASE AND REMOVE EXTRA SPACES
MINBFR=1
9 LNGPSW=0
IBLANK=-1
DO 17 IOUTER=MINBFR,MAXBFR
LTRNOW=LTRBFR(IOUTER)
LWRNOW=LTRNOW
IF(LTRNOW.EQ.LTRSPA)GO TO 16
C
C CHECK FOR UPPER CASE LETTERS
DO 10 INNER=1,26
IF(LTRNOW.NE.LTRABC(INNER))GO TO 10
LWRNOW=LWRABC(INNER)
GO TO 12
10 CONTINUE
C
C CHECK FOR LOWER CASE LETTERS
DO 11 INNER=1,26
IF(LTRNOW.NE.LWRABC(INNER))GO TO 11
LTRNOW=LTRABC(INNER)
GO TO 12
11 CONTINUE
C
C PACK THE PRINTING CHARACTER INTO PASSWORD
12 IF(IBLANK.GT.0)GO TO 14
13 IBLANK=0
14 IF(LNGPSW.GE.LMTPSW)GO TO 38
IF(IBLANK.EQ.0)GO TO 15
LNGPSW=LNGPSW+1
LTRPSW(LNGPSW)=LTRSPA
GO TO 13
15 LNGPSW=LNGPSW+1
LTRPSW(LNGPSW)=LTRNOW
LTRCHK(LNGPSW)=LWRNOW
GO TO 17
C
C BLANK FOUND
16 IF(IBLANK.EQ.0)IBLANK=1
17 CONTINUE
C
C FILL REST OF ARRAY WITH SPACES
I=LNGPSW
18 I=I+1
IF(I.GT.LMTPSW)GO TO 19
LTRPSW(I)=LTRSPA
LTRCHK(I)=LTRSPA
GO TO 18
19 CONTINUE
C
C OPEN THE PASSWORD FILE
CALL RSMOPN(2,NUMWHO,IYEAR,ITTY,IDISK,IFOPEN)
IF(IFOPEN.EQ.0)GO TO 47
20 READ(IDISK,21,END=37)LTRBFR
21 FORMAT(80A1)
C
C SKIP OVER LEADING NUMBER ON LINE
MINNUM=0
22 MINNUM=MINNUM+1
IF(MINNUM.GT.LMTBFR)GO TO 20
IF(LTRBFR(MINNUM).EQ.LTRSPA)GO TO 22
MAXNUM=MINNUM
23 MAXNUM=MAXNUM+1
IF(MAXNUM.GT.LMTBFR)GO TO 20
IF(LTRBFR(MAXNUM).NE.LTRSPA)GO TO 23
IF(LTRBFR(MINNUM).EQ.LTREQU)GO TO 37
C
C EVALUATE NUMBER AT START OF LINE
NUMWHO=0
GO TO 25
24 MINNUM=MINNUM+1
IF(MINNUM.GE.MAXNUM)GO TO 27
25 LTRNOW=LTRBFR(MINNUM)
DO 26 IDIGIT=1,10
IF(LTRNOW.NE.LTRDGT(IDIGIT))GO TO 26
NUMWHO=(10*NUMWHO)+IDIGIT-1
GO TO 24
26 CONTINUE
GO TO 20
27 IF(NUMWHO.NE.KOMPAR)GO TO 20
C
C COMPARE PASSWORD TYPED BY USER AND READ FROM FILE
IFIRST=MAXNUM-1
JFIRST=0
C
C NOTE THAT THIS IS A GENERAL PROCEDURE FOR COMPARING
C ANY 2 STRINGS THAT CAN CONTAIN SPACES AND THAT CAN,
C BUT ARE NOT REQUIRED TO, BEGIN AND END WITH SPACES.
C BOTH STRINGS MUST HAVE THE PRINTING CHARACTERS SPLIT
C INTO THE SAME NUMBER OF WORDS, BUT THE ACTUAL NUMBER
C OF SPACES BETWEEN THE WORDS IS IGNORED IN BOTH ARRAYS.
C
C LTRBFR = ARRAY CONTAINING LINE READ FROM FILE
C LMTBFR = NUMBER OF CHARACTERS IN LTRBFR ARRAY
C IFIRST = LOCATION TO LEFT OF FIRST LOCATION TO TEST
C IN LTRBFR ARRAY.
C LTRPSW = UPPER CASE PASSWORD TYPED BY USER
C LTRCHK = LOWER CASE VERSION OF PASSWORD TYPED BY USER
C LMTPSW = NUMBER OF CHARACTERS IN LTRPSW ARRAY
C JFIRST = LOCATION TO LEFT OF FIRST LOCATION TO TEST
C IN LTRPSW ARRAY.
C
IBLANK=-1
GO TO 29
28 IBLANK=0
29 IFIRST=IFIRST+1
IF(IFIRST.GT.LMTBFR)GO TO 34
LTRNOW=LTRBFR(IFIRST)
IF(LTRNOW.EQ.LTRSPA)GO TO 31
IF(LTRNOW.EQ.LTREXC)GO TO 33
30 JFIRST=JFIRST+1
IF(JFIRST.GT.LMTPSW)GO TO 35
IF(LTRPSW(JFIRST).EQ.LTRSPA)GO TO 32
IF(IBLANK.GT.0)GO TO 36
IF(LTRNOW.EQ.LTRPSW(JFIRST))GO TO 28
IF(LTRNOW.EQ.LTRCHK(JFIRST))GO TO 28
GO TO 36
31 IF(IBLANK.EQ.0)IBLANK=1
GO TO 29
32 IF(IBLANK.EQ.0)GO TO 36
IBLANK=-1
GO TO 30
33 IFIRST=LMTBFR+1
34 IBLANK=1
GO TO 30
35 IF(IFIRST.LE.LMTBFR)GO TO 36
C
C MATCH
KNTPSW=-1
GO TO 37
C
C NO MATCH
36 GO TO 37
C
C ALL DONE READING FILE
37 CALL RSMCLS(2,NUMWHO,IYEAR,ITTY,IDISK,IFCLOS)
IF(KNTPSW.LT.0)GO TO 50
38 WRITE(ITTY,39)
39 FORMAT(' Unknown password')
KNTPSW=KNTPSW+1
IF(KNTPSW.LT.3)GO TO 1
WRITE(ITTY,40)
40 FORMAT(' Only 3 tries are allowed')
GO TO 49
C
C ERROR MESSAGE AND HELP MESSAGE
41 WRITE(ITTY,42)
42 FORMAT(' Number must be supplied. Type ? for help.')
GO TO 1
43 CALL RSMHLP(ITTY,44,LTRBFR,LMTBFR,MAXBFR,IVIDEO)
GO TO 1
44 WRITE(ITTY,45)
45 FORMAT(' Password must be supplied. Type ? for help.')
GO TO 7
46 CALL RSMHLP(ITTY,40,LTRBFR,LMTBFR,MAXBFR,IVIDEO)
GO TO 7
47 WRITE(ITTY,48)
48 FORMAT(' Cannot read password file')
GO TO 49
C
C RETURN TO CALLING PROGRAM
49 LNGPSW=0
50 RETURN
END