SUBROUTINE INITLS(ARG) INTEGER I, GETARG, INDEX, TTY LOGICAL*1 ARG(40) COMMON / CLS / VERBOS, DODATE, REVERS, SORTIT, DIRSW, DOHEAD, PACK *IT, SCRAT(40) INTEGER VERBOS INTEGER DODATE INTEGER REVERS INTEGER SORTIT INTEGER DIRSW INTEGER DOHEAD INTEGER PACKIT LOGICAL*1 SCRAT VERBOS = 0 DOHEAD = 0 DODATE = 0 REVERS = 0 DIRSW = 0 PACKIT = TTY(2) SORTIT = 0 I=1 23000 IF(.NOT.(GETARG(I, ARG, 40) .NE. -1))GOTO 23002 CALL FOLD(ARG) IF(.NOT.(ARG(1) .EQ. 45))GOTO 23003 IF(.NOT.(INDEX(ARG, 118) .GT. 0))GOTO 23005 VERBOS = 1 23005 CONTINUE IF(.NOT.(INDEX(ARG, 104) .GT. 0))GOTO 23007 DOHEAD = 1 23007 CONTINUE IF(.NOT.(INDEX(ARG, 116) .GT. 0))GOTO 23009 DODATE = 1 23009 CONTINUE IF(.NOT.(INDEX(ARG, 114) .GT. 0))GOTO 23011 REVERS = 1 23011 CONTINUE IF(.NOT.(INDEX(ARG, 110) .GT. 0 .AND. 0 .EQ. 0))GOTO 23013 SORTIT = 1 23013 CONTINUE IF(.NOT.(INDEX(ARG, 100) .GT. 0))GOTO 23015 DIRSW = 1 23015 CONTINUE IF(.NOT.(INDEX(ARG, 49) .GT. 0))GOTO 23017 PACKIT = 0 23017 CONTINUE CALL DELARG(I) I = I + 1 GOTO 23004 23003 CONTINUE IF(.NOT.(ARG(1) .EQ. 63 .AND. ARG(2) .EQ. 0))GOTO 23019 CALL ERROR(31Husage: ls [-1dhnrtv] [path]...) 23019 CONTINUE 23004 CONTINUE 23001 I=I+1 GOTO 23000 23002 CONTINUE IF(.NOT.(DODATE .EQ. 1))GOTO 23021 VERBOS = 1 23021 CONTINUE IF(.NOT.(DODATE .EQ. 1 .OR. REVERS .EQ. 1))GOTO 23023 SORTIT = 1 23023 CONTINUE IF(.NOT.(VERBOS .EQ. 0))GOTO 23025 DOHEAD = 0 GOTO 23026 23025 CONTINUE PACKIT = 0 23026 CONTINUE IF(.NOT.(SORTIT .EQ. 1))GOTO 23027 CALL SCRATF(LS0, SCRAT) 23027 CONTINUE RETURN END SUBROUTINE ENDLS COMMON / CLS / VERBOS, DODATE, REVERS, SORTIT, DIRSW, DOHEAD, PACK *IT, SCRAT(40) INTEGER VERBOS INTEGER DODATE INTEGER REVERS INTEGER SORTIT INTEGER DIRSW INTEGER DOHEAD INTEGER PACKIT LOGICAL*1 SCRAT CALL REMOVE(SCRAT) RETURN END SUBROUTINE MAIN INTEGER LEVEL, OPENDR, DESC, DEPTH, PTR(5), J, GETPAT, OUTFIL, CRE *ATE, GDRPRM, I, LENGTH, MATCH, N, OPEN, GETLIN, GETARG, STATUS, NX *TCOL LOGICAL*1 PPATH(40), DEFPAT(2), FILE(40), BUF(400), PAT(132), OBUF *(400) COMMON / CLS / VERBOS, DODATE, REVERS, SORTIT, DIRSW, DOHEAD, PACK *IT, SCRAT(40) INTEGER VERBOS INTEGER DODATE INTEGER REVERS INTEGER SORTIT INTEGER DIRSW INTEGER DOHEAD INTEGER PACKIT LOGICAL*1 SCRAT LOGICAL*1 DIRPAT(4) LOGICAL*1 HEAD1(68) LOGICAL*1 HEAD2(69) DATA DIRPAT(1)/63/,DIRPAT(2)/42/,DIRPAT(3)/47/,DIRPAT(4)/0/ DATA HEAD1(1)/102/,HEAD1(2)/105/,HEAD1(3)/108/,HEAD1(4)/101/,HEAD1 *(5)/110/,HEAD1(6)/97/,HEAD1(7)/109/,HEAD1(8)/101/,HEAD1(9)/32/,HEA *D1(10)/32/,HEAD1(11)/32/,HEAD1(12)/32/,HEAD1(13)/32/,HEAD1(14)/32/ *,HEAD1(15)/32/,HEAD1(16)/32/,HEAD1(17)/32/,HEAD1(18)/32/,HEAD1(19) */32/,HEAD1(20)/32/,HEAD1(21)/112/,HEAD1(22)/114/,HEAD1(23)/111/,HE *AD1(24)/116/,HEAD1(25)/101/,HEAD1(26)/99/,HEAD1(27)/116/,HEAD1(28) */105/,HEAD1(29)/111/,HEAD1(30)/110/,HEAD1(31)/32/,HEAD1(32)/32/,HE *AD1(33)/32/,HEAD1(34)/32/,HEAD1(35)/32/,HEAD1(36)/32/,HEAD1(37)/10 *8/,HEAD1(38)/97/,HEAD1(39)/115/,HEAD1(40)/116/,HEAD1(41)/32/,HEAD1 *(42)/109/,HEAD1(43)/111/,HEAD1(44)/100/,HEAD1(45)/105/,HEAD1(46)/1 *02/,HEAD1(47)/105/,HEAD1(48)/101/,HEAD1(49)/100/,HEAD1(50)/32/,HEA *D1(51)/32/,HEAD1(52)/32/,HEAD1(53)/32/,HEAD1(54)/32/,HEAD1(55)/115 */,HEAD1(56)/105/,HEAD1(57)/122/,HEAD1(58)/101/,HEAD1(59)/32/,HEAD1 *(60)/32/,HEAD1(61)/32/,HEAD1(62)/111/,HEAD1(63)/119/,HEAD1(64)/110 */,HEAD1(65)/101/,HEAD1(66)/114/,HEAD1(67)/10/,HEAD1(68)/0/ DATA HEAD2(1)/45/,HEAD2(2)/45/,HEAD2(3)/45/,HEAD2(4)/45/,HEAD2(5)/ *45/,HEAD2(6)/45/,HEAD2(7)/45/,HEAD2(8)/45/,HEAD2(9)/32/,HEAD2(10)/ *32/,HEAD2(11)/32/,HEAD2(12)/32/,HEAD2(13)/32/,HEAD2(14)/32/,HEAD2( *15)/32/,HEAD2(16)/32/,HEAD2(17)/32/,HEAD2(18)/32/,HEAD2(19)/45/,HE *AD2(20)/45/,HEAD2(21)/45/,HEAD2(22)/45/,HEAD2(23)/45/,HEAD2(24)/45 */,HEAD2(25)/45/,HEAD2(26)/45/,HEAD2(27)/45/,HEAD2(28)/45/,HEAD2(29 *)/45/,HEAD2(30)/45/,HEAD2(31)/45/,HEAD2(32)/45/,HEAD2(33)/32/,HEAD *2(34)/32/,HEAD2(35)/45/,HEAD2(36)/45/,HEAD2(37)/45/,HEAD2(38)/45/, *HEAD2(39)/45/,HEAD2(40)/45/,HEAD2(41)/45/,HEAD2(42)/45/,HEAD2(43)/ *45/,HEAD2(44)/45/,HEAD2(45)/45/,HEAD2(46)/45/,HEAD2(47)/45/,HEAD2( *48)/45/,HEAD2(49)/45/,HEAD2(50)/45/,HEAD2(51)/45/,HEAD2(52)/32/,HE *AD2(53)/45/,HEAD2(54)/45/,HEAD2(55)/45/,HEAD2(56)/45/,HEAD2(57)/45 */,HEAD2(58)/45/,HEAD2(59)/45/,HEAD2(60)/32/,HEAD2(61)/32/,HEAD2(62 *)/45/,HEAD2(63)/45/,HEAD2(64)/45/,HEAD2(65)/45/,HEAD2(66)/45/,HEAD *2(67)/10/,HEAD2(68)/10/,HEAD2(69)/0/ DATA DEFPAT/37, 0/ CALL INITLS(FILE) LEVEL = 0 IF(.NOT.(DOHEAD .EQ. 1))GOTO 23029 CALL PUTLIN(HEAD1, 2) CALL PUTLIN(HEAD2, 2) 23029 CONTINUE IF(.NOT.(PACKIT .EQ. 1))GOTO 23031 CALL INPACK(NXTCOL, 80, OBUF, 2) 23031 CONTINUE 23033 CONTINUE LEVEL = LEVEL + 1 STATUS = GETARG(LEVEL, PPATH, 40) IF(.NOT.(STATUS .EQ. -1 .AND. LEVEL .GT. 1))GOTO 23036 GOTO 23035 23036 CONTINUE IF(.NOT.(STATUS .EQ. -1))GOTO 23038 CALL GWDIR(PPATH, 5) 23038 CONTINUE 23037 CONTINUE CALL SCOPY(DEFPAT, 1, FILE, 1) IF(.NOT.(OPENDR(PPATH, DESC) .EQ. -3))GOTO 23040 CALL SCOPY(PPATH, 1, BUF, 1) CALL MKPATH(BUF, PPATH) CALL EXPPTH(PPATH, DEPTH, PTR, BUF) J = PTR(DEPTH) JUNK = GTFTOK(PPATH, J, FILE) J = PTR(DEPTH) PPATH(J) = 0 IF(.NOT.(OPENDR(PPATH, DESC) .EQ. -3))GOTO 23042 CALL CANT(PPATH) 23042 CONTINUE 23040 CONTINUE IF(.NOT.(DIRSW .EQ. 1))GOTO 23044 CALL CONCAT(FILE, DIRPAT, FILE) 23044 CONTINUE CALL FOLD(FILE) IF(.NOT.(GETPAT(FILE, PAT) .EQ. -3))GOTO 23046 CALL ERROR(16HIllegal pattern.) 23046 CONTINUE IF(.NOT.(SORTIT .EQ. 1))GOTO 23048 OUTFIL = CREATE(SCRAT, 2) IF(.NOT.(OUTFIL .EQ. -3))GOTO 23050 CALL ERROR(30HError creating temporary file.) 23050 CONTINUE GOTO 23049 23048 CONTINUE OUTFIL = 2 23049 CONTINUE 23052 IF(.NOT.(GDRPRM(DESC, FILE) .NE. -1))GOTO 23053 I = LENGTH(FILE) + 1 FILE(I) = 10 FILE(I+1) = 0 CALL FOLD(FILE) IF(.NOT.(MATCH(FILE, PAT) .EQ. 1))GOTO 23054 I = LENGTH(FILE) FILE(I) = 0 IF(.NOT.(PACKIT .EQ. 1 .AND. OUTFIL .EQ. 2))GOTO 23056 CALL DOPACK(FILE, NXTCOL, 80, OBUF, 2) GOTO 23057 23056 CONTINUE IF(.NOT.(VERBOS .EQ. 1))GOTO 23058 CALL GDRAUX(DESC, FILE, BUF, PPATH) IF(.NOT.(DODATE .EQ. 1))GOTO 23060 CALL PUTLIN(PPATH, OUTFIL) 23060 CONTINUE CALL PUTLIN(FILE, OUTFIL) N = 18 - LENGTH(FILE) I=1 23062 IF(.NOT.(I .LE. N))GOTO 23064 CALL PUTCH(32, OUTFIL) 23063 I=I+1 GOTO 23062 23064 CONTINUE CALL PUTLIN(BUF, OUTFIL) GOTO 23059 23058 CONTINUE CALL PUTLIN(FILE, OUTFIL) 23059 CONTINUE CALL PUTCH(10, OUTFIL) 23057 CONTINUE 23054 CONTINUE GOTO 23052 23053 CONTINUE CALL CLOSDR(DESC) IF(.NOT.(SORTIT .EQ. 1))GOTO 23065 CALL CLOSE(OUTFIL) CALL SORTLS(SCRAT, REVERS, BUF) OUTFIL = OPEN(SCRAT, 1) IF(.NOT.(OUTFIL .EQ. -3))GOTO 23067 CALL ERROR(37HError in opening sorted scratch file.) 23067 CONTINUE 23069 IF(.NOT.(GETLIN(BUF, OUTFIL) .NE. -1))GOTO 23070 IF(.NOT.(DODATE .EQ. 1))GOTO 23071 I = 11 + 1 GOTO 23072 23071 CONTINUE I = 1 23072 CONTINUE IF(.NOT.(PACKIT .EQ. 1))GOTO 23073 I = 1 JUNK = GETWRD(BUF, I, FILE) CALL DOPACK(FILE, NXTCOL, 80, OBUF, 2) GOTO 23074 23073 CONTINUE CALL PUTLIN(BUF(I), 2) 23074 CONTINUE GOTO 23069 23070 CONTINUE CALL CLOSE(OUTFIL) 23065 CONTINUE IF(.NOT.(PACKIT .EQ. 1))GOTO 23075 CALL FLPACK(NXTCOL, 80, OBUF, 2) 23075 CONTINUE 23034 GOTO 23033 23035 CONTINUE CALL ENDLS RETURN END SUBROUTINE SORTLS(FILE, REVERS, BUF) LOGICAL*1 FILE(100), DESCR(7), BUF(100), PROC(40), SPATH(80) INTEGER REVERS, I, SSPAWN, LOCCOM LOGICAL*1 PLUSO(4) LOGICAL*1 MR(4) LOGICAL*1 SORT(5) DATA PLUSO(1)/32/,PLUSO(2)/43/,PLUSO(3)/111/,PLUSO(4)/0/ DATA MR(1)/32/,MR(2)/45/,MR(3)/114/,MR(4)/0/ DATA SORT(1)/115/,SORT(2)/111/,SORT(3)/114/,SORT(4)/116/,SORT(5)/0 */ I = 1 CALL STCOPY(SORT, 1, BUF, I) CALL CHCOPY(32, BUF, I) CALL STCOPY(FILE, 1, BUF, I) CALL STCOPY(PLUSO, 1, BUF, I) CALL STCOPY(FILE, 1, BUF, I) IF(.NOT.(REVERS .EQ. 1))GOTO 23077 CALL STCOPY(MR, 1, BUF, I) 23077 CONTINUE BUF(I) = 0 CALL IMPATH(SPATH) IF(.NOT.(LOCCOM(SORT, SPATH, PROC) .NE. 60))GOTO 23079 CALL ERROR(30HCannot locate sort image file.) 23079 CONTINUE IF(.NOT.(SSPAWN(PROC, BUF, DESCR, 119) .EQ. -3))GOTO 23081 CALL ERROR(22Herror in spawning sort) 23081 CONTINUE RETURN END