Trailing-Edge
-
PDP-10 Archives
-
decus_20tap5_198111
-
decus/20-0141/daflag.for
There are 2 other files named daflag.for in the archive. Click here to see a list.
SUBROUTINE DAFLAG(KONECT,LOWSTR,MAXSTR,MAXBFR,IBUFFR,
1 LOWBFR,MANY ,KIND ,INILTR,KNTLTR,MAXDSK,MAXNAM,
2 MAXNUM,MAXFLG,KONTNT,MINPRT,MAXPRT)
C RENBR(/EVALUATE FORM DSK:NAME.EXT[NUMBER,NUMBER])
C
C DONALD BARTH, HARVARD BUSINESS SCHOOL
C
C ROUTINE TO LOCATE COMPONENTS OF FILE SPECIFICATION OF
C FORM
C
C DSK:NAME.EXT[12,34,56]/SWITCH:ARGUMENT/SWITCH:'TEXT'
C
C ONLY ONE DEVICE FIELD, ONE NAME FIELD AND ONE
C BRACKETED FIELD CAN APPEAR IN THE FILE SPECIFICATION.
C THE DEVICE FIELD MUST APPEAR BEFORE THE NAME FIELD,
C BUT THE BRACKETED FIELD CAN BE BEFORE, BETWEEN, OR
C AFTER THESE. THE SWITCH FIELDS CAN APPEAR BEFORE
C AND/OR AFTER THE REST OF THE FILE SPECIFICATION.
C
C THE COMPONENTS OF EACH FIELD WITHIN THE FILE
C DESCRIPTION ARE IDENTIFIED TO THE CALLING PROGRAM BY
C LENGTH AND BY STARTING LOCATION WITHIN THE BUFFER.
C THIS INFORMATION IS RETURNED WITHIN THE 2 ARRAYS
C KNTLTR AND INILTR RESPECTIVELY. SINCE EACH FIELD CAN
C CONSIST OF ANY NUMBER OF COMPONENTS CONNECTED BY THE
C APPROPRIATE CHARACTER (COLON, COMMA OR PERIOD), AND
C SINCE FOR SOME APPLICATIONS A TERMINAL SEPARATOR
C CHARACTER HAS SPECIAL MEANING, A ZERO CHARACTER COUNT
C IS RETURNED IN THE KNTLTR ARRAY FOR THE FINAL
C COMPONENT OF A FIELD IN WHICH AN OPTIONAL TERMINAL
C CONNECTING CHARACTER IS FOUND. SINCE THERE IS NEVER
C ANY QUESTION ABOUT WHETHER AN ITEM IN THE DEVICE
C FIELD WAS FOLLOWED BY THE CONNECTING CHARACTER, THE
C DESCRIPTION OF THE DEVICE FIELD DOES NOT INCLUDE A
C FINAL ZERO CHARACTER COUNT.
C
C A TEXT STRING DELIMITED BY APOSTROPHES IS TREATED AS
C A SWITCH EVEN IF NOT PRECEDED BY A SLASH. THE
C LOCATION OF A TEXT STRING IS THAT OF THE INITIAL
C APOSTROPHE, AND THE LENGTH INCLUDES THE INITIAL, BUT
C NOT THE FINAL, APOSTROPHE. IF THE FINAL APOSTROPHE
C IS MISSING, THEN THE TEXT STRING IS ASSUMED TO EXTEND
C THROUGH THE RIGHTMOST PRINTING CHARACTER IN THE
C BUFFER. WITHIN A TEXT STRING, TWO ADJACENT
C APOSTROPHES INDICATE A SINGLE APOSTROPHE WHICH IS TO
C BE INCLUDED WITHIN THE STRING. IF 2 ADJACENT
C APOSTROPHES ARE ENCOUNTERED WITHIN THE TEXT STRING,
C THEN THE REMAINDER OF THE STRING IS MOVED 1 CHARACTER
C TO THE LEFT SO THAT THE RETURNED CONTENTS OF THE
C BUFFER AND THE RETURNED LENGTH IN THE KNTLTR ARRAY DO
C NOT INCLUDE THE EXTRA APOSTROPHE.
C
C AN ASTERISK WHICH IS FOLLOWED IMMEDIATELY BY A
C PRINTING CHARACTER OTHER THAN A PUNCTUATION MARK IS
C TREATED AS THOUGH SEPARATED FROM THIS FOLLOWING
C CHARACTER BY A PERIOD IF IN THE NAME FIELD, BY A
C COMMA IF IN THE BRACKETED FIELD OR BY A COLON IF IN
C THE SWITCH FIELD.
C
C FOR EXAMPLE, IF THE CONTENTS OF THE BUFFER ARE
C
C DSK:DAFLAG.F4[6001,56,FASP]/LINE:60:/TITLE:'JAN 76'
C
C THEN THE FOLLOWING INFORMATION WOULD BE RETURNED BY 3
C CONSECUTIVE CALLS TO THIS ROUTINE
C
C FIELD KNTLTR CONTENTS INILTR CONTENTS
C
C BY THE FIRST CALL TO THIS ROUTINE
C
C DEVICE 3 1
C
C NAME 6 5
C 2 12
C
C BRACKETED 4 15
C 2 20
C 4 23
C
C BY THE SECOND CALL TO THIS ROUTINE
C
C SWITCH 4 29
C 2 34
C 0 UNDEFINED
C
C BY THE THIRD CALL TO THIS ROUTINE
C
C SWITCH 5 38
C 7 44
C
C THE FOLLOWING ARGUMENTS ARE USED ONLY FOR INPUT.
C
C KONECT = -1, SPACES AND/OR TAB CHARACTERS CAN APPEAR
C BETWEEN COMPONENTS OF ANY FIELD, AND CAN
C REPLACE SEPARATING PERIODS AND COMMAS IN THE
C NAME AND BRACKETED FIELDS RESPECTIVELY.
C SUCH SPACES AND/OR TABS MARK END OF A
C PARTICULAR COMPONENT OF FIELD, BUT DO NOT
C SIGNAL EITHER END OF FIELD OR END OF FILE
C SPECIFICATION. COMPONENTS OF FILE
C SPECIFICATION WILL BE LOCATED THROUGH END OF
C BUFFER, OR UP TO FOLLOWING EXCLAMATION
C POINT, AMPERSAND OR SEMICOLON, OR UP TO
C FOLLOWING COMMA WHICH IS NOT IN BRACKETED
C FIELD. SINGLE CALL TO THIS ROUTINE WILL
C REPORT EITHER CONTENTS OF SINGLE SWITCH
C FIELD OR COMBINATION OF DEVICE FIELD, NAME
C FIELD AND BRACKETED FIELD WHETHER OR NOT
C THESE ARE SEPARATED BY SPACES AND/OR TABS.
C = 0, SIMILAR TO KONECT=-1 EXCEPT THAT SPACES
C AND TAB CHARACTERS CANNOT APPEAR BETWEEN
C FIELDS AND CANNOT APPEAR BETWEEN COMPONENTS
C OF DEVICE AND NAME FIELDS. FILE
C SPECIFICATION WILL BEGIN WITH FIRST PRINTING
C CHARACTER OTHER THAN PUNCTUATION CHARACTERS
C COMMA, AMPERSAND, EQUALS SIGN, SEMICOLON OR
C EXCLAMATION POINT, THEN EXTEND THROUGH END
C OF BUFFER, OR UP TO FIRST SPACE OR TAB
C CHARACTER WHICH WHICH IS NEITHER WITHIN
C BRACKETED FIELD NOR WITHIN SWITCH FIELD NOR
C WITHIN TEXT STRING DELIMITED BY APOSTROPHES,
C OR UP TO FOLLOWING EXCLAMATION POINT,
C AMPERSAND OR SEMICOLON, OR UP TO FOLLOWING
C COMMA WHICH IS NOT IN BRACKETED FIELD.
C SINGLE CALL TO THIS ROUTINE WILL REPORT
C EITHER CONTENTS OF SINGLE SWITCH FIELD OR
C COMBINATION OF DEVICE FIELD, NAME FIELD AND
C BRACKETED FIELD PROVIDING THESE ARE
C CONTIGUOUS.
C = 1, SIMILAR TO KONECT=-1 EXCEPT THAT SPACES
C AND TAB CHARACTERS CANNOT APPEAR BETWEEN
C COMPONENTS OF DEVICE AND NAME FIELDS.
C LOWSTR = SUBSCRIPT OF FIRST LOCATION WITHIN INILTR
C AND KNTLTR ARRAYS WHICH CAN BE USED TO HOLD
C DESCRIPTION OF COMPONENTS OF FILE
C SPECIFICATION.
C MAXSTR = SUBSCRIPT OF FINAL LOCATION WITHIN INILTR
C AND KNTLTR ARRAYS WHICH CAN BE USED TO HOLD
C DESCRIPTION OF COMPONENTS OF FILE
C SPECIFICATION.
C MAXBFR = SUBSCRIPT OF FINAL (RIGHTMOST) LOCATION
C WITHIN IBUFFR ARRAY WHICH CONTAINS CHARACTER
C WHICH CAN BE PART OF FILE SPECIFICATION.
C
C FOLLOWING ARGUMENTS ARE USED FOR BOTH INPUT TO, AND
C OUTPUT FROM THIS ROUTINE.
C
C IBUFFR = ARRAY CONTAINING IN LOCATIONS IBUFFR(LOWBFR)
C THROUGH IBUFFR(MAXBFR) CHARACTERS READ BY
C CALLING PROGRAM WITH MULTIPLE OF A1 FORMAT
C AND WHICH CAN FORM FILE SPECIFICATION.
C CONTENTS OF IBUFFR ARRAY ARE RETURNED
C UNCHANGED, WITH EXCEPTION THAT PORTION OF
C TEXT STRING TO RIGHT OF ADJACENT APOSTROPHES
C IN TEXT STRING IN SWITCH FIELD IS MOVED 1
C CHARACTER TO LEFT.
C LOWBFR = SUBSCRIPT OF FIRST (LEFTMOST) LOCATION
C WITHIN IBUFFR ARRAY WHICH CONTAINS CHARACTER
C WHICH CAN BE PART OF FILE SPECIFICATION.
C LOWBFR IS RETURNED POINTING TO FIRST
C CHARACTER WHICH SHOULD BE EVALUATED BY
C SUBSEQUENT CALL TO THIS ROUTINE, OR ELSE IS
C RETURNED POINTING BEYOND END OF BUFFER IF
C BUFFER IS EMPTY OR IF BUFFER CONTAINS MERELY
C COMMENT.
C MANY = SHOULD BE INPUT CONTAINING ZERO EACH TIME
C THIS ROUTINE IS CALLED TO BEGIN PROCESSING
C OF A NEW LOGICAL SECTION OF TEXT, AS FOR
C EXAMPLE WHEN BEGINNING PROCESSING OF A LINE
C OF TEXT NOT TIED TO THE PREVIOUS LINE BY AN
C AMPERSAND AT THE END OF THE PREVIOUS LINE,
C OR WHEN PROCESSING THE TEXT TO THE RIGHT OF
C A SEMICOLON OR TO THE RIGHT OF AN EQUALS
C SIGN.
C = RETURNED CONTAINING THE VALUE WHICH MANY
C SHOULD HAVE WHEN THIS ROUTINE OR ANY OTHER
C IN THE FASP PACKAGE HAVING MANY AS AN
C ARGUMENT IS NEXT CALLED. THE RETURNED VALUE
C OF MANY SHOULD NOT BE CHANGED BY THE CALLING
C PROGRAM UNLESS THE INTERPRETATION OF THE
C CONTENTS OF THE BUFFER IS BEING ABANDONED
C PREMATURELY, IN WHICH CASE MANY SHOULD BE
C RESET TO HAVE A ZERO VALUE.
C = -1, RETURNED IF A MISSING ITEM IS TO BE
C INDICATED IF THE NEXT ROUTINE ENCOUNTERS A
C LEADING COMMA OR FINDS THAT THE BUFFER
C CONTAINS NOTHING OTHER THAN A POSSIBLE
C COMMENT. MANY IS RETURNED CONTAINING -1 IF
C A COMMA PRECEDES EITHER AN AMPERSAND OR A
C SWITCH FIELD.
C = 0, RETURNED IF A MISSING ITEM IS TO BE
C INDICATED IF THE NEXT ROUTINE ENCOUNTERS A
C LEADING COMMA, BUT A MISSING ITEM IS NOT
C INDICATED IF THE BUFFER CONTAINS NOTHING
C OTHER THAN A POSSIBLE COMMENT. MANY IS
C RETURNED CONTAINING ZERO IF BUFFER IS FOUND
C TO BE EMPTY, OR IF FIRST PRINTING CHARACTER
C AT OR TO RIGHT OF IBUFFR(LOWBFR) IS FOUND TO
C BE EXCLAMATION POINT, SEMICOLON OR EQUALS
C SIGN. THESE ARE ALL CONDITIONS UNDER WHICH
C NEXT CALL TO THIS ROUTINE WOULD EVALUATE
C START OF NEW GROUP OF FILE SPECIFICATIONS.
C MANY IS RETURNED UNCHANGED IF A SWITCH FIELD
C IS FOUND AT THE START OF THE CONTENTS OF THE
C BUFFER.
C = 1, RETURNED IF A MISSING ITEM IS NOT TO BE
C INDICATED IF THE NEXT ROUTINE ENCOUNTERS A
C LEADING COMMA OR FINDS THAT THE BUFFER
C CONTAINS NOTHING OTHER THAN A POSSIBLE
C COMMENT. MANY IS RETURNED CONTAINING ONE IF
C A FILE SPECIFICATION CONSISTING OF MORE THAN
C JUST A SWITCH FIELD IS FOUND, OR IF A
C MISSING ITEM IS BEING INDICATED.
C
C FOLLOWING ARGUMENTS ARE USED ONLY FOR OUTPUT. THEIR
C INPUT VALUES ARE IGNORED.
C
C KIND = RETURNED DESCRIBING TYPE OF ITEM
C ENCOUNTERED.
C = 1, NOTHING, EXCEPT POSSIBLY COMMENT
C INDICATED BY LEADING EXCLAMATION POINT, WAS
C FOUND AT OR TO RIGHT OF IBUFFR(LOWBFR).
C LOWBFR IS RETURNED POINTING BEYOND END OF
C BUFFER.
C = 2, FIRST PRINTING CHARACTER AT OR TO RIGHT
C OF IBUFFR(LOWBFR) IS SEMICOLON. LOWBFR IS
C RETURNED POINTING TO CHARACTER TO RIGHT OF
C SEMICOLON. IT IS SUGGESTED THAT CALLING
C PROGRAM TREAT THIS AS INDICATION BY USER
C THAT PRECEDING COMMAND HAS BEEN COMPLETED
C AND THAT SUBSEQUENT COMMAND WILL FOLLOW ON
C SAME LINE.
C = 3, FIRST PRINTING CHARACTER AT OR TO RIGHT
C OF IBUFFR(LOWBFR) IS EQUALS SIGN. LOWBFR IS
C RETURNED POINTING TO CHARACTER TO RIGHT OF
C EQUALS SIGN. ON PDP10 COMPUTER, EQUALS SIGN
C IS USED TO SEPARATE DESTINATION AND SOURCE
C FILE SPECIFICATIONS.
C = 4, FIRST PRINTING CHARACTER AT OR TO RIGHT
C OF IBUFFR(LOWBFR) IS AMPERSAND. CHARACTERS
C TO RIGHT OF AMPERSAND ARE TAKEN TO BE
C COMMENT. LOWBFR IS RETURNED POINTING BEYOND
C END OF BUFFER. IT IS SUGGESTED THAT CALLING
C PROGRAM TREAT THIS AS REQUEST BY USER THAT
C COMMAND BE CONTINUED ON FOLLOWING LINE.
C EFFECT IS NOT QUITE SAME AS IF USER HAD
C TYPED ALL OF FILE SPECIFICATIONS ON SINGLE
C LINE SINCE FILE SPECIFICATION CANNOT BE
C SPLIT ACROSS LINE BOUNDARY.
C = 5, MISSING FILE SPECIFICATION WAS INDICATED
C BY AN EXTRA COMMA.
C = 6, PARTIAL FILE SPECIFICATION WAS FOUND
C WHICH WILL BE CONTINUED BY SUBSEQUENT CALL
C TO THIS ROUTINE. MANY WILL NOT BE
C INCREMENTED UNTIL FINAL SECTION OF FILE
C SPECIFICATION (KIND BEING RETURNED
C CONTAINING 7 OR 8) IS LOCATED. IF FILE NAME
C AND/OR DEVICE AND/OR BRACKETED FIELD HAS
C BEEN FOUND BY CURRENT CALL TO THIS ROUTINE,
C THEN PORTION TO RIGHT OF THAT EVALUATED
C CONTAINS SWITCH. IF SWITCH HAS BEEN FOUND
C BY CURRENT CALL TO THIS ROUTINE, THEN
C PORTION RIGHT OF THAT EVALUATED COULD
C CONTAIN ANY ITEM.
C = 7, FILE SPECIFICATION AND/OR SWITCHES WERE
C FOUND. IF PREVIOUS CALL TO THIS ROUTINE
C RETURNED KIND=6 INDICATING PARTIAL
C SPECIFICATION, THEN INFORMATION RETURNED BY
C CURRENT CALL TO THIS ROUTINE COMPLETES FILE
C SPECIFICATION.
C = 8, FILE SPECIFICATION AND/OR SWITCHES WERE
C FOUND, BUT THESE WERE FOLLOWED BY UNEXPECTED
C CHARACTER POINTED TO BY RETURNED VALUE OF
C LOWBFR. FOR EXAMPLE, TEXT
C DEVICE:NAME.EXTENSION: WOULD BE EVALUATED
C AS THOUGH BUFFER TERMINATED PRIOR TO SECOND
C COLON, AND LOWBFR WILL BE RETURNED POINTING
C TO THIS SECOND COLON. TEXT
C DEVICE:NAME.EXTENSION[6001,56][22,56] WOULD
C BE EVALUATED AS THOUGH BUFFER TERMINATED
C PRIOR TO SECOND BRACKETED FIELD, AND LOWBFR
C WOULD BE RETURNED POINTING TO SECOND LEFT
C BRACKET.
C INILTR = ARRAY RETURNED CONTAINING SUBSCRIPTS WITHIN
C IBUFFR ARRAY OF INITIAL CHARACTERS OF WORDS
C FORMING FILE SPECIFICATION. LOCATIONS
C INILTR(LOWSTR) THROUGH INILTR(MAXDSK)
C CONTAIN LOCATIONS IN BUFFER OF INITIAL
C CHARACTERS OF DEVICE NAMES. LOCATIONS
C INILTR(MAXDSK+1) THROUGH INILTR(MAXNAM)
C CONTAIN LOCATIONS IN BUFFER OF INITIAL
C CHARACTERS OF WORDS IN NAME FIELD.
C LOCATIONS INITLR(MAXNAM+1) THROUGH
C INILTR(MAXNUM) CONTAIN LOCATIONS IN BUFFER
C OF INITIAL CHARACTERS OF WORDS IN BRACKETED
C FIELD. LOCATIONS INILTR(LOWSTR) THROUGH
C INILTR(MAXFLG) CONTAIN LOCATIONS IN BUFFER
C OF INITIAL CHARACTERS OF WORDS AND TEXT
C STRINGS APPEARING IN SWITCH FIELDS. IF TEXT
C STRING APPEARS IN SWITCH FIELD, LOCATION IN
C IBUFFR ARRAY INDICATED BY INILTR ARRAY WILL
C CONTAIN APOSTROPHE.
C KNTLTR = ARRAY RETURNED CONTAINING NUMBERS OF
C CHARACTERS IN EACH OF WORDS FOR WHICH FIRST
C CHARACTERS ARE IN BUFFER LOCATIONS INDICATED
C BY VALUES IN INILTR ARRAY. SUBSCRIPTS OF
C INILTR ARRAY AND KNTLTR ARRAY LOCATIONS
C DESCRIBING PARTICULAR WORD ARE IDENTICAL.
C MAXDSK = RETURNED CONTAINING SUBSCRIPT OF INILTR AND
C KNTLTR ARRAY LOCATIONS DESCRIBING RIGHTMOST
C WORD IN DEVICE FIELD OF FILE SPECIFICATION.
C IF DEVICE FIELD IS NOT FOUND, THEN MAXDSK
C WILL BE RETURNED CONTAINING LOWSTR-1.
C MAXNAM = RETURNED CONTAINING SUBSCRIPT OF INILTR AND
C KNTLTR ARRAY LOCATIONS DESCRIBING RIGHTMOST
C WORD IN NAME FIELD OF FILE SPECIFICATION.
C IF NAME FIELD IS NOT FOUND, THEN MAXNAM WILL
C BE RETURNED EQUAL TO MAXDSK.
C MAXNUM = RETURNED CONTAINING SUBSCRIPT OF INILTR AND
C KNTLTR ARRAY LOCATIONS DESCRIBING RIGHTMOST
C WORD IN BRACKETED FIELD OF FILE
C SPECIFICATION. IF BRACKETED FIELD IS NOT
C FOUND, THEN MAXNUM WILL BE RETURNED EQUAL TO
C MAXNAM.
C MAXFLG = RETURNED CONTAINING SUBSCRIPT OF INILTR AND
C KNTLTR ARRAY LOCATIONS DESCRIBING RIGHTMOST
C WORD OF SWITCH FIELD. IF SWITCH FIELD IS
C NOT FOUND, THEN MAXFLG IS RETURNED EQUAL TO
C LOWSTR-1.
C KONTNT = BIT CODED NUMBER RETURNED DESCRIBING
C LOCATION OF BRACKETED FIELD RELATIVE TO
C DEVICE AND NAME FIELDS. RIGHT BIT IS ONE IF
C AND ONLY IF NAME FIELD IS FOUND. SECOND BIT
C FROM RIGHT IS ONE IF AND ONLY IF DEVICE
C FIELD IS FOUND. FOURTH AND THIRD BITS FROM
C RIGHT ARE 00 IF NO BRACKETED FIELD IS FOUND,
C 01 IF BRACKETED FIELD APPEARS FIRST, 10 IF
C BRACKETED FIELD FOLLOWS DEVICE FIELD, AND 11
C IF BRACKETED FIELD FOLLOWS NAME FIELD.
C FOLLOWING TABLE PRESENTS VALUES OF KONTNT
C RETURNED FOR ALL POSSIBLE COMBINATIONS OF
C DEVICE, NAME AND BRACKETED FIELDS. MINUS
C SIGNS REPRESENT VALUES OF KONTNT WHICH
C CANNOT BE RETURNED. VALUE ZERO INDICATES
C THAT NEITHER DEVICE, NOR NAME NOR BRACKETED
C FIELDS WERE FOUND, BUT DOES NOT INDICATE
C WHETHER SWITCH FIELD WAS FOUND.
C
C DECIMAL BINARY DECIMAL BINARY
C 0 0 NOTHING 8 1000 ------
C 1 1 NAME 9 1001 ------
C 2 10 DEVICE: 10 1010 DEVICE:[]
C 3 11 DEVICE:NAME 11 1011 DEVICE:[]NAME
C 4 100 [] 12 1100 ------
C 5 101 []NAME 13 1101 NAME[]
C 6 110 []DEVICE: 14 1110 ------
C 7 111 []DEVICE:NAME 15 1111 DEVICE:NAME[]
C
C 16 IS ADDED TO KONTNT IF AT SIGN @ IS FOUND
C ANYWHERE IN FILE SPECIFICATION OTHER THAN
C WITHIN A SWITCH FIELD.
C MINPRT = SUBSCRIPT OF IBUFFR ARRAY LOCATION WHICH
C CONTAINS FIRST CHARACTER OF FILE
C SPECIFICATION OR SWITCH IF KIND IS RETURNED
C CONTAINING VALUE OF 6 OR GREATER. MINPRT
C AND MAXPRT CAN BE USED AS LIMITS OF IBUFFR
C ARRAY SUBSCRIPTS IF TEXT MUST BE DISPLAYED
C TO USER. MINPRT AND MAXPRT ARE RETURNED
C UNDEFINED IF KIND IS RETURNED CONTAINING
C VALUE LESS THAN 6.
C MAXPRT = SUBSCRIPT OF IBUFFR ARRAY LOCATION WHICH
C CONTAINS FINAL CHARACTER OF FILE
C SPECIFICATION OR SWITCH IF KIND IS RETURNED
C CONTAINING VALUE OF 6 OR GREATER.
C
DIMENSION KNTLTR(MAXSTR),INILTR(MAXSTR),
1IBUFFR(MAXBFR)
C
C CCCC AAA UU UU TTTTTTTT IIII OOOO NN NN
C CC AAAA UU UU TT II OO OO NNN NN
C CC AA AA UU UU TT II OO OO NNNN NN
C CC AA AA UU UU TT II OO OO NN NN NN
C CC AAAAAAA UU UU TT II OO OO NN NNNN
C CC AA AA UU UU TT II OO OO NN NNN
C CCCC AA AA UUU TT IIII OOOO NN NN
C
C LEFT AND RIGHT SQUARE BRACKETS MUST BE DEFINED USING
C OCTAL NOTATION FOR PDP10 F40 COMPILER. LET FOLLOWING
C COMMENT BE THE COMPILED DATA STATEMENT IF F40 IS USED
C DATA ILEFT,IRIGHT/"555004020100,"565004020100/
DATA ILEFT,IRIGHT/1H[,1H]/
C
DATA ISTAR,ICOLON,IDOT,ICOMMA,ISLASH,IQUOTE,IEND,
1IAND,KOMENT,IEQUAL,KOMAND,IBLANK,ITAB/1H*,1H:,1H.,
21H,,1H/,1H',1H;,1H&,1H!,1H=,1H@,1H ,1H /
C
C MAJOR = -1, PROCESSING NAME SECTION
C = 0, PROCESSING CONTENTS OF BRACKETS
C = 1, PROCESSING SWITCH
C = 2, IN TEXT STRING
C
NEWSPC=1
MAXDSK=LOWSTR-1
MAXNAM=MAXDSK
MAXNUM=MAXDSK
MAXFLG=MAXDSK
NONDSK=0
NONNAM=0
NONNUM=0
KONTNT=0
LOCATN=4
KIND=1
LOWBFR=LOWBFR-1
MIDPRT=LOWBFR
IF(MANY.GE.0)GO TO 46
KIND=5
MANY=1
GO TO 46
1 LOWBFR=LOWBFR+1
MAXPRT=MIDPRT
IF(LOWBFR.GT.MAXBFR)GO TO 32
LETTER=IBUFFR(LOWBFR)
IF(LETTER.EQ.IBLANK)GO TO 24
IF(LETTER.EQ.ITAB)GO TO 24
IF(KIND.NE.7)MINPRT=LOWBFR
MIDPRT=LOWBFR
LSTSPC=NEWSPC
NEWSPC=0
C
C CHECK FOR GENERAL PUNCTUATION CHARACTERS
IF(LETTER.EQ.IEND)GO TO 26
IF(LETTER.EQ.IAND)GO TO 20
IF(LETTER.EQ.KOMENT)GO TO 21
IF(LETTER.EQ.IEQUAL)GO TO 27
IF(LETTER.EQ.ISLASH)GO TO 10
IF(LETTER.EQ.IQUOTE)GO TO 11
IF(LETTER.EQ.ICOMMA)GO TO 22
IF(MAJOR.GT.0)GO TO 3
IF(LETTER.EQ.KOMAND)GO TO 19
IF(MAJOR.EQ.0)GO TO 4
C
C CHECK FOR KEY CHARACTERS IN NAME FIELD
IF(KIND.EQ.7)GO TO 2
INDRCT=MANY
IF(KIND.EQ.5)INDRCT=-1
MANY=1
KIND=7
2 IF(LETTER.EQ.ICOLON)GO TO 30
IF(LETTER.EQ.ILEFT)GO TO 9
IF(NONNAM.GT.0)GO TO 31
IF(LETTER.EQ.IDOT)GO TO 23
GO TO 5
C
C CHECK FOR KEY CHARACTERS IN SWITCH SECTION
3 IF(KOUNT.LT.0)GO TO 29
I=MAJOR
MAJOR=1
IF(LETTER.EQ.ICOLON)GO TO 23
IF(I.NE.2)GO TO 5
GO TO 29
C
C CHECK FOR KEY CHARACTERS IN BRACKET FIELD
4 IF(LETTER.EQ.ILEFT)GO TO 31
IF(LETTER.EQ.IRIGHT)GO TO 25
IF(LETTER.EQ.IDOT)GO TO 23
IF(LETTER.EQ.ICOLON)GO TO 23
C
C EXTEND NAME OR NUMBER OR SWITCH
5 IF(KOUNT.GT.0)GO TO 6
LTRLFT=LOWBFR
KOUNT=1
GO TO 1
6 IF(LSTSPC.NE.0)GO TO 7
IF(IBUFFR(MAXPRT).EQ.ISTAR)GO TO 8
KOUNT=KOUNT+1
GO TO 1
7 IF(MAJOR.GT.0)GO TO 29
8 LOWBFR=LOWBFR-1
GO TO 23
C
C LEFT BRACKET OTHER THAN IN SWITCH FIELD
9 IF(NONNUM.NE.0)GO TO 31
NEXT=4
GO TO 33
C
C INITIAL SLASH FOUND
10 IF(KIND.EQ.7)GO TO 29
IF(KIND.EQ.5)MANY=-1
KIND=7
MAJOR=1
GO TO 44
C
C APOSTROPHE STARTS TEXT STRING
11 IF(MAJOR.LE.0)GO TO 12
IF(KOUNT.EQ.0)GO TO 13
IF(KOUNT.NE.1)GO TO 29
IF(LSTSPC.NE.0)GO TO 29
IF(IBUFFR(MAXPRT).EQ.ISTAR)GO TO 8
GO TO 29
12 IF(KIND.EQ.7)GO TO 29
IF(KIND.EQ.5)MANY=-1
KIND=7
MAJOR=2
13 LTRLFT=LOWBFR
I=LOWBFR
MIDPRT=LOWBFR
14 IF(I.GE.MAXBFR)GO TO 16
I=I+1
LOWBFR=LOWBFR+1
IBUFFR(LOWBFR)=IBUFFR(I)
IF(IBUFFR(I).EQ.IBLANK)GO TO 14
IF(IBUFFR(I).EQ.ITAB)GO TO 14
MIDPRT=LOWBFR
IF(IBUFFR(I).NE.IQUOTE)GO TO 14
IF(I.GE.MAXBFR)GO TO 15
IF(IBUFFR(I+1).NE.IQUOTE)GO TO 15
I=I+1
GO TO 14
15 MIDPRT=MIDPRT-1
16 KOUNT=MIDPRT-LTRLFT+1
17 IF(LOWBFR.EQ.I)GO TO 18
LOWBFR=LOWBFR+1
IBUFFR(LOWBFR)=IBLANK
GO TO 17
18 IF(MAJOR.EQ.2)GO TO 25
MAJOR=2
GO TO 1
C
C AT SIGN
19 IF(KONTNT.GT.15)GO TO 31
IF(KIND.EQ.7)MANY=INDRCT
IF(KIND.EQ.5)MANY=-1
KIND=7
KONTNT=KONTNT+16
GO TO 25
C
C AMPERSAND FOUND
20 IF(KIND.EQ.7)GO TO 32
IF(KIND.EQ.5)MANY=-1
KIND=4
C
C EXCLAMATION POINT FOUND
21 LOWBFR=MAXBFR+1
GO TO 32
C
C COMMA FOUND OTHER THAN IN NUMBER SECTION
22 IF(MAJOR.EQ.0)GO TO 23
IF(KIND.NE.1)GO TO 32
KIND=5
IF(MANY.GT.0)GO TO 1
GO TO 32
C
C COMMA IN BRACKET SECTION OR COLON IN SWITCH SECTION
23 NEXT=3
IF(KOUNT.LT.0)KOUNT=0
GO TO 33
C
C SPACE OR TAB FOUND
24 IF(NEWSPC.NE.0)GO TO 1
NEWSPC=1
IF(KONECT.LT.0)GO TO 1
IF(MAJOR.GE.0)GO TO 1
IF(KIND.NE.7)GO TO 1
IF(KONECT.EQ.0)GO TO 32
25 NEXT=5
GO TO 33
C
C SEMICOLON FOUND
26 IF(KIND.NE.1)GO TO 32
KIND=2
GO TO 28
C
C EQUALS SIGN FOUND
27 IF(KIND.NE.1)GO TO 32
KIND=3
28 LOWBFR=LOWBFR+1
GO TO 32
C
C CURRENT CALL CANNOT RETURN ALL INFORMATION
29 KIND=6
GO TO 32
C
C COLON FOUND IN NAME FIELD
30 IF(NONDSK.LE.0)GO TO 35
C
C ILLEGAL CHARACTER, BUT MUST CLEAN UP BEFORE EXIT
31 KIND=8
C
C PREPARE TO EXIT TO CALLING PROGRAM
32 NEXT=1
C
C TERMINATE GROUP OF NAMES OR NUMBERS
33 IF(KOUNT.LT.0)GO TO 42
IF(MAJOR.GT.0)GO TO 40
IF(MAJOR.EQ.0)GO TO 34
LOCAL=MAXNAM
IF(NONNAM.EQ.0)KONTNT=KONTNT+1
LOCATN=12
NONNAM=-1
NONDSK=1
GO TO 36
34 LOCAL=MAXNUM
IF(NONNUM.EQ.0)KONTNT=KONTNT+LOCATN
NONNUM=-1
GO TO 37
35 IF(KOUNT.LT.0)KOUNT=0
NEXT=2
LOCAL=MAXDSK
IF(NONDSK.EQ.0)KONTNT=KONTNT+2
LOCATN=8
NONDSK=-1
IF(MAXDSK.LT.MAXSTR)MAXDSK=MAXDSK+1
36 IF(MAXNAM.LT.MAXSTR)MAXNAM=MAXNAM+1
37 IF(MAXNUM.LT.MAXSTR)MAXNUM=MAXNUM+1
INDEX=MAXNUM
LOCAL=LOCAL+1
38 IF(INDEX.LE.LOCAL)GO TO 41
IF(INDEX.GT.MAXSTR)GO TO 39
INILTR(INDEX)=INILTR(INDEX-1)
KNTLTR(INDEX)=KNTLTR(INDEX-1)
39 INDEX=INDEX-1
GO TO 38
40 IF(MAXFLG.GE.MAXSTR)GO TO 42
MAXFLG=MAXFLG+1
LOCAL=MAXFLG
41 IF(LOCAL.GT.MAXSTR)GO TO 42
KNTLTR(LOCAL)=KOUNT
INILTR(LOCAL)=LTRLFT
C
C NEXT = 1, EXIT
C = 2, AFTER COLON OF DEVICE FIELD
C = 3, AFTER PERIOD IN NAME OR COMMA IN
C BRACKETED SECTION OR COLON IN SWITCH SECTION
C = 4, MARK THAT ARE IN BRACKETED SECTION
C = 5, TERMINATE CURRENT SECTION SO ITS TYPE
C WILL NOT BE PERMITTED
42 GO TO(49,47,44,43,45),NEXT
C
C MARK THAT ARE IN BRACKET SECTION
43 MAJOR=0
44 KOUNT=0
GO TO 48
C
C TERMINATE CURRENT SECTION
45 IF(MAJOR.GT.0)GO TO 47
IF(NONDSK.LT.0)NONDSK=1
IF(NONNAM.LT.0)NONNAM=1
IF(NONNUM.LT.0)NONNUM=1
46 MAJOR=-1
C
C PREPARE FOR NEXT ITEM IN LIST
47 KOUNT=-1
48 LTRLFT=LOWBFR+1
GO TO 1
C
C RETURN TO CALLING PROGRAM
49 IF(KIND.EQ.5)MANY=1
IF(KIND.LT.4)MANY=0
RETURN
C264038073645[]:';&!@
END