INTEGER*2 FUNCTION ARGLEN(LINE,LENGTH,CURPOS) BYTE LINE(1),CHAR INTEGER*2 LENGTH,CURPOS LOGICAL DELIM ! ARGLEN=0 10 IF (CURPOS+ARGLEN.GT.LENGTH) GOTO 19 CHAR=LINE(CURPOS+ARGLEN) IF (DELIM(CHAR)) GOTO 19 ARGLEN=ARGLEN+1 GOTO 10 19 RETURN END LOGICAL FUNCTION CHKEMP(LINE,LENGTH,CURPOS) INTEGER*2 LENGTH,CURPOS BYTE LINE(1) LOGICAL*1 EMPTY ! CHKEMP=EMPTY(LINE,LENGTH,CURPOS) IF (.NOT.CHKEMP) TYPE 10 10 FORMAT (X,'Unnecessary argument on end of line.') RETURN END LOGICAL FUNCTION DELIM(CHAR) BYTE CHAR,DELIMS(3) INTEGER*2 DUMMY LOGICAL MATCHA PARAMETER TAB="11 ! DATA DELIMS /' ',TAB,0/ ! DELIM=MATCHA(CHAR,DELIMS,DUMMY) RETURN END LOGICAL FUNCTION EMPTY(LINE,LENGTH,CURPOS) BYTE LINE(1) INTEGER*2 LENGTH,CURPOS ! CALL SKIDEL(LINE,LENGTH,CURPOS) EMPTY=CURPOS.GT.LENGTH RETURN END LOGICAL FUNCTION INTNUM(LINE,LENGTH,CURPOS,VALUE) BYTE LINE(1) INTEGER*2 LENGTH,CURPOS,ARGLEN,NUMLEN,VALUE ! CALL ERRSET(64,,,,.FALSE.) NUMLEN=ARGLEN(LINE,LENGTH,CURPOS) IF (NUMLEN.EQ.0) GOTO 10 DECODE (NUMLEN,1,LINE(CURPOS),ERR=10) VALUE 1 FORMAT (I8) INTNUM=.TRUE. CURPOS=CURPOS+NUMLEN RETURN 10 INTNUM=.FALSE. VALUE=0 RETURN END SUBROUTINE LOW2UP(LINE,LENGTH) BYTE LINE(1),CHAR INTEGER*2 LENGTH,INDEX ! INDEX=1 10 IF (INDEX.GT.LENGTH) GOTO 19 CHAR=LINE(INDEX) IF (CHAR.GE.'a'.AND.CHAR.LE.'z') LINE(INDEX)=CHAR-"40 INDEX=INDEX+1 GOTO 10 19 RETURN END LOGICAL FUNCTION MATCHA(CHAR,LIST,INDEX) INTEGER*2 INDEX BYTE CHAR,LIST(1) ! INDEX=1 10 IF (LIST(INDEX).EQ.0.OR.LIST(INDEX).EQ.CHAR) GOTO 19 INDEX=INDEX+1 GOTO 10 19 IF (LIST(INDEX).EQ.0) INDEX=0 MATCHA=INDEX.NE.0 RETURN END LOGICAL FUNCTION MATKW(LIST,LINE,LENGTH,CURPOS,DEFMIN,KWID) BYTE LIST(1),LINE(1),CHAR INTEGER*2 CURPOS,LENGTH,KWID,LISIND,KWLEN,INPLEN,DEFMIN,SVKWID INTEGER*2 COUNT,TMLSIX,TMLNIX,ARGLEN,MINABB ! INPLEN=ARGLEN(LINE,LENGTH,CURPOS) CALL LOW2UP(LINE(CURPOS),INPLEN) KWID=0 MATKW=.FALSE. LISIND=1 20 IF (LIST(LISIND).EQ.0) GOTO 29 SVKWID=LIST(LISIND) LISIND=LISIND+1 MINABB=LIST(LISIND) LISIND=LISIND+1 IF (MINABB.EQ.0) MINABB=DEFMIN KWLEN=0 30 IF (LIST(LISIND+KWLEN).EQ.0) GOTO 39 KWLEN=KWLEN+1 GOTO 30 39 IF (INPLEN.LT.MIN(MINABB,KWLEN).OR.INPLEN.GT.KWLEN) GOTO 50 TMLNIX=CURPOS TMLSIX=LISIND COUNT=INPLEN 40 IF (COUNT.LE.0) GOTO 49 IF (LINE(TMLNIX).NE.LIST(TMLSIX)) GOTO 50 COUNT=COUNT-1 TMLNIX=TMLNIX+1 TMLSIX=TMLSIX+1 GOTO 40 49 KWID=SVKWID CURPOS=CURPOS+INPLEN MATKW=.TRUE. GOTO 29 50 LISIND=LISIND+KWLEN+1 GOTO 20 29 RETURN END LOGICAL FUNCTION OCTNUM(LINE,LENGTH,CURPOS,VALUE) BYTE LINE(1) INTEGER*2 LENGTH,CURPOS,ARGLEN,NUMLEN,VALUE ! CALL ERRSET(64,,,,.FALSE.) NUMLEN=ARGLEN(LINE,LENGTH,CURPOS) IF (NUMLEN.EQ.0) GOTO 10 DECODE (NUMLEN,1,LINE(CURPOS),ERR=10) VALUE 1 FORMAT (O8) OCTNUM=.TRUE. CURPOS=CURPOS+NUMLEN RETURN 10 OCTNUM=.FALSE. VALUE=0 RETURN END LOGICAL FUNCTION REANUM(LINE,LENGTH,CURPOS,VALUE) BYTE LINE(1) INTEGER*2 LENGTH,CURPOS,ARGLEN,NUMLEN REAL*4 VALUE ! CALL ERRSET(64,,,,.FALSE.) NUMLEN=ARGLEN(LINE,LENGTH,CURPOS) IF (NUMLEN.EQ.0) GOTO 10 DECODE (NUMLEN,1,LINE(CURPOS),ERR=10) VALUE 1 FORMAT (F12.0) REANUM=.TRUE. CURPOS=CURPOS+NUMLEN RETURN 10 REANUM=.FALSE. VALUE=0.0 RETURN END SUBROUTINE REATER(BUFFER,LENGTH,RETURN) BYTE BUFFER(LENGTH),RETURN INTEGER*2 LENGTH,NEWLEN ! RETURN=0 1000 IF (RETURN.NE.0) GOTO 1099 READ (5,10,END=1111,ERR=1112) NEWLEN,BUFFER 10 FORMAT (Q,A1) GOTO 1199 1111 RETURN=-10 GOTO 1199 1112 RETURN=-1 1199 IF (RETURN.NE.0) GOTO 1301 IF (NEWLEN.GT.LENGTH) GOTO 1201 LENGTH=NEWLEN RETURN=1 GOTO 1299 1201 CONTINUE TYPE 20 20 FORMAT (X,'Line too long.') RETURN=1 LENGTH=0 1299 CONTINUE GOTO 1399 1301 CONTINUE LENGTH=0 1399 CONTINUE GOTO 1000 1099 RETURN END SUBROUTINE SKIDEL(LINE,LENGTH,CURPOS) BYTE LINE(1),CHAR INTEGER*2 CURPOS,LENGTH LOGICAL DELIM ! 10 IF (CURPOS.GT.LENGTH) GOTO 19 CHAR=LINE(CURPOS) IF (.NOT.DELIM(CHAR)) GOTO 19 CURPOS=CURPOS+1 GOTO 10 19 RETURN END SUBROUTINE TYPVER(STRING,LINE,LENGTH,CURPOS,RETURN) INTEGER*2 LENGTH,CURPOS,STRLEN,INDEX BYTE STRING(1),LINE(1),RETURN LOGICAL*1 CHKEMP ! IF (.NOT.CHKEMP(LINE,LENGTH,CURPOS)) GOTO 1099 INDEX=1 STRLEN=0 1100 IF (STRING(INDEX).EQ.0.OR.INDEX.GT.80) GOTO 1199 STRLEN=STRLEN+1 INDEX=INDEX+1 GOTO 1100 1199 CONTINUE IF (STRLEN.GT.0) TYPE 20,(STRING(INDEX),INDEX=1,STRLEN) 20 FORMAT (X,A1) 1099 CONTINUE RETURN=1 RETURN END SUBROUTINE UP2LOW(LINE,LENGTH) BYTE LINE(1),CHAR INTEGER*2 LENGTH,INDEX ! INDEX=1 10 IF (INDEX.GT.LENGTH) GOTO 19 CHAR=LINE(INDEX) IF (CHAR.GE.'A'.AND.CHAR.LE.'Z') LINE(INDEX)=CHAR+"40 INDEX=INDEX+1 GOTO 10 19 RETURN END