C C C C LIST File Listing Utility C ========================= C C Author: William P. Wood, Jr. C C Address: Computer Center C Institute For Cancer Research C 7701 Burholme Ave. C Philadelphia, Pa. 19111 C (215) 728 2760 C C Version: 3.0 C C Date: March 26, 1982 C C C C ******************************************************* C * * C * THIS SOFTWARE WAS DEVELOPED WITH SUPPORT * C * FROM THE NATIONAL INSTITUTES OF HEALTH: * C * NIH CA06927 * C * NIH CA22780 * C * * C * DIRECT INQUIRIES TO: * C * COMPUTER CENTER * C * THE INSTITUTE FOR CANCER RESEARCH * C * 7701 BURHOLME AVENUE * C * PHILADELPHIA, PENNSYLVANIA 19111 * C * * C * NO WARRANTY OR REPRESENTATION, EXPRESS OR * C * IMPLIED, IS MADE WITH RESPECT TO THE * C * CORRECTNESS, COMPLETENESS, OR USEFULNESS * C * OF THIS SOFTWARE, NOR THAT USE OF THIS * C * SOFTWARE MIGHT NOT INFRINGE PRIVATELY * C * OWNED RIGHTS. * C * * C * NO LIABILITY IS ASSUMED WITH RESPECT TO * C * THE USE OF, OR FOR DAMAGES RESULTING FROM * C * THE USE OF THIS SOFTWARE * C * * C ******************************************************* C C C define(VAX) # comment this out for PDP11 C Invoke LIST on wild card file names C note the order of the next several defines is significant! C Record or Block i/o. C or to "define(RECORDIO,#)" for block io C define(BLOCKIO,# BLOCK IO) C define(MARKSIZE,4) # size of buffer for mark/point C command line switch flags C length - compute length of string INTEGER FUNCTION LENGTH(STR) BYTE STR(10000) LENGTH = 0 2000 IF (.NOT.(STR(LENGTH+1) .NE. 0)) GOTO 2020 2010 LENGTH = LENGTH + 1 GOTO 2000 2020 CONTINUE RETURN END C index - find character c in string str INTEGER FUNCTION INDEXX(STR, C) BYTE C, STR(10000) INDEXX = 1 2030 IF (.NOT.(STR(INDEXX) .NE. 0)) GOTO 2050 IF (.NOT.(STR(INDEXX) .EQ. C)) GOTO 2060 RETURN 2060 CONTINUE 2040 INDEXX = INDEXX + 1 GOTO 2030 2050 CONTINUE INDEXX = 0 RETURN END C indexq - find character c in string str, ignoring chars within quoted strings INTEGER FUNCTION INDEXQ(STR, C) BYTE C, STR(10000) INTEGER NUQCP INDEXQ = NUQCP(STR, 1) 2080 IF (.NOT.(STR(INDEXQ) .NE. 0)) GOTO 2100 IF (.NOT.(STR(INDEXQ) .EQ. C)) GOTO 2110 RETURN 2110 CONTINUE 2090 INDEXQ = NUQCP(STR, INDEXQ + 1) GOTO 2080 2100 CONTINUE INDEXQ = 0 RETURN END C scopy - copy string at from(i) to to(j) SUBROUTINE SCOPY(FROM, I, TO, J) BYTE FROM(10000), TO(10000) INTEGER I, J, K1, K2 K2 = J K1 = I 2130 IF (.NOT.(FROM(K1) .NE. 0)) GOTO 2150 TO(K2) = FROM(K1) K2 = K2 + 1 2140 K1 = K1 + 1 GOTO 2130 2150 CONTINUE TO(K2) = 0 RETURN END C concat - concatenate two strings INTEGER FUNCTION CONCAT(S1, S2, LIM) BYTE S1(10000), S2(10000) INTEGER LIM, I, LENGTH, L L = LENGTH(S1) I = L + 1 2160 IF (.NOT.(I .LT. LIM .AND. S2(I-L) .NE. 0)) GOTO 2180 S1(I) = S2(I - L) 2170 I = I + 1 GOTO 2160 2180 CONTINUE S1(I) = 0 CONCAT = I - 1 RETURN END C bkscnq - return index of first break char in str, ignore chars inside quotes INTEGER FUNCTION BKSCNQ(STR, BRK, I) BYTE STR(10000), BRK(10000) INTEGER INDEXX, NUQCP, I BKSCNQ = NUQCP(STR, I) 2190 IF (.NOT.(STR(BKSCNQ) .NE. 0)) GOTO 2210 IF (.NOT.(INDEXX(BRK, STR(BKSCNQ)) .NE. 0)) GOTO 2220 GOTO 2210 2220 CONTINUE 2200 BKSCNQ = NUQCP(STR, BKSCNQ + 1) GOTO 2190 2210 CONTINUE RETURN END C scan - return index of first char in str which isn't in scstr INTEGER FUNCTION SCAN(STR, SCSTR, I) BYTE STR(10000), SCSTR(10000) INTEGER INDEXX, I SCAN = I 2240 IF (.NOT.(STR(SCAN) .NE. 0)) GOTO 2260 IF (.NOT.(INDEXX(SCSTR, STR(SCAN)) .EQ. 0)) GOTO 2270 GOTO 2260 2270 CONTINUE 2250 SCAN = SCAN + 1 GOTO 2240 2260 CONTINUE RETURN END C cupper - change letter to upper case BYTE FUNCTION CUPPER(C) BYTE C IF (.NOT.(C .GE. 'a' .AND. C .LE. 'z')) GOTO 2290 CUPPER = C - 'a' + 'A' GOTO 2300 2290 CONTINUE CUPPER = C 2300 CONTINUE RETURN END C nuqcp - return postion of next char which isn't part of a quoted (") string INTEGER FUNCTION NUQCP(BUF, I) BYTE BUF(10000) INTEGER I IF (.NOT.(BUF(I) .NE. '"')) GOTO 2310 NUQCP = (I) RETURN 2310 CONTINUE NUQCP = I + 1 2330 IF (.NOT.(BUF(NUQCP) .NE. 0)) GOTO 2350 IF (.NOT.(BUF(NUQCP) .EQ. '"')) GOTO 2360 NUQCP = NUQCP + 1 IF (.NOT.(BUF(NUQCP) .NE. '"')) GOTO 2380 RETURN 2380 CONTINUE 2360 CONTINUE 2340 NUQCP = NUQCP + 1 GOTO 2330 2350 CONTINUE RETURN END