SUBROUTINE GETN(LENGTH,IPNTR,BUFFER,N) C C PURPOSE: SCANS A CHARACTER STRING OF "LENGTH" CHARACTERS IN C BYTE ARRAY "BUFFER" STARTING AT CHARACTER "IPNTR" FOR A VALID C NUMERIC STRING (INCLUDING SIGN). C IF NUMERIC STRING IS FOUND, IT IS DECODED AS AN INTEGER C NUMBER AND RETURNED IN "N". ON RETURN, "IPNTR" POINTS TO C FIRST CHARACTER AFTER NUMERIC STRING, OR IS UNCHANGED IF NO C STRING PRESENT, OR IS SET NEGATIVE ON ERROR IN DECODING NUMBER. C NO IMBEDDED SPACES ARE ALLOWED IN THE NUMERIC STRING. C C VARIABLES: C LENGTH -INTEGER # BYTES IN "BUFFER" C IPNTR -INTEGER POINTER TO FIRST CHARACTER TO START SCANNING FROM C BUFFER -BYTE CHARACTER STRING C N -INTEGER # DECODED FROM STRING IN "BUFFER" C NFLAG -LOCAL FLAG CLEARED WHEN NUMERIC (0-9) CHARACTER ENCOUNTERED. C C SORENSON, 1/81 C BYTE BUFFER DIMENSION BUFFER(LENGTH) BYTE NSTART,NSTOP,PLUS,MINUS DATA NSTART/"60/,NSTOP/"71/,PLUS/'+'/,MINUS/'-'/ C C SCAN CHARACTERS FOR "NUMERIC" ENTRY C USE NFLAG TO SIGNAL OCCURANCE OF NUMBERS (0-9) C NFLAG=1 10 DO 40 I=IPNTR,LENGTH IF(BUFFER(I).LT.NSTART.OR.BUFFER(I).GT.NSTOP)GO TO 20 C C IF NUMBER, SET NFLAG=0, AND CONTINUE SCAN C NFLAG=0 K=0 GO TO 40 C C CHECK FOR SIGN--MUST BE IN FIRST CHARACTER POSITION, AND BE C FOLLOWED BY AT LEAST ONE DIGIT. C 20 IF(I.EQ.IPNTR.AND.(BUFFER(I).EQ.MINUS.OR.BUFFER(I).EQ.PLUS)) 1GO TO 40 C C NO MATCHES, TIME TO GET OUT C GO TO 41 40 CONTINUE C C NUMBER FIELD IS CONTAINED IN STRING BUFFER(IPNTR) TO BUFFER(I-1) C AS LONG AS NFLAG = 0. SET I TO # CHARACTERS IN FIELD. C 41 IF(NFLAG.NE.0)RETURN I=I-IPNTR C C NOW TRY AND DECODE THE STRING C DECODE(I,43,BUFFER(IPNTR),ERR=99)N 43 FORMAT(I6) C C UPDATE CHARACTER POINTER C IPNTR=IPNTR+I RETURN C C SET IPNTR < 0 ON ERROR C 99 IPNTR=-1 RETURN END