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: December 29, 1981 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) C note the order of the next several defines is significant! C ICR ONLY define(NOTICR,# NOT ICR) C Local ICR functions supported by LIST: C Invoke LIST on wild card file names C Route output to printer port of DT80 C Invoke HELP facility for LIST C Allow screen widths other than SCRWIDTH C Record or Block i/o. C set to define(RECORDIO,) for record io C size of buffer for mark/point C BLOCK IO define(MARKSIZE,3) 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 INDEX(STR, C) BYTE C, STR(10000) INDEX = 1 2030 IF (.NOT.(STR(INDEX) .NE. 0)) GOTO 2050 IF (.NOT.(STR(INDEX) .EQ. C)) GOTO 2060 RETURN 2060 CONTINUE 2040 INDEX = INDEX + 1 GOTO 2030 2050 CONTINUE INDEX = 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 2080 IF (.NOT.(FROM(K1) .NE. 0)) GOTO 2100 TO(K2) = FROM(K1) K2 = K2 + 1 2090 K1 = K1 + 1 GOTO 2080 2100 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 2110 IF (.NOT.(I .LT. LIM .AND. S2(I-L) .NE. 0)) GOTO 2130 S1(I) = S2(I - L) 2120 I = I + 1 GOTO 2110 2130 CONTINUE S1(I) = 0 CONCAT = I - 1 RETURN END C bkscan - return index of first break char in str INTEGER FUNCTION BKSCAN(STR, BRK, I) BYTE STR(10000), BRK(10000) INTEGER INDEX, I BKSCAN = I 2140 IF (.NOT.(STR(BKSCAN) .NE. 0)) GOTO 2160 IF (.NOT.(INDEX(BRK, STR(BKSCAN)) .NE. 0)) GOTO 2170 GOTO 2160 2170 CONTINUE 2150 BKSCAN = BKSCAN + 1 GOTO 2140 2160 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 INDEX, I SCAN = I 2190 IF (.NOT.(STR(SCAN) .NE. 0)) GOTO 2210 IF (.NOT.(INDEX(SCSTR, STR(SCAN)) .EQ. 0)) GOTO 2220 GOTO 2210 2220 CONTINUE 2200 SCAN = SCAN + 1 GOTO 2190 2210 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 2240 CUPPER = C - 'a' + 'A' GOTO 2250 2240 CONTINUE CUPPER = C 2250 CONTINUE RETURN END C eq - compare str1 to str2; return .true. if equal, .false. if not LOGICAL FUNCTION EQ(STR1, STR2) BYTE STR1(10000), STR2(10000) INTEGER I I = 1 2260 IF (.NOT.(STR1(I) .EQ. STR2(I))) GOTO 2280 IF (.NOT.(STR1(I) .EQ. 0)) GOTO 2290 EQ = (.TRUE.) RETURN 2290 CONTINUE 2270 I = I + 1 GOTO 2260 2280 CONTINUE EQ = (.FALSE.) RETURN END