PERMROUTINESPEC SVC(INTEGER EP, BYTEINTEGERNAME R0, R1) PERMINTEGERMAPSPEC INTEGER(INTEGER N) PERMBYTEINTEGERMAPSPEC BYTEINTEGER(INTEGER N) PERMINTEGERFNSPEC ADDR(INTEGERNAME N) PERMINTEGERFNSPEC ACC OWNBYTEINTEGERNAME DUMMY = 0 BEGIN INTEGERMAPSPEC COM(INTEGER I) ROUTINESPEC DA(INTEGER MODE, BLOCK, INTEGERNAME ADDRESS) ROUTINESPEC BLOCKS(BYTEINTEGERARRAYNAME F, INTEGERNAME I) ROUTINESPEC RENAME(BYTEINTEGERARRAYNAME OLD, NEW) ROUTINESPEC DESTROY(BYTEINTEGERARRAYNAME FILE) ROUTINESPEC READ KEY(BYTEINTEGERARRAYNAME KEY) ROUTINESPEC Q(BYTEINTEGERARRAYNAME FILE, MASK) ROUTINESPEC GETDIR(BYTEINTEGERARRAYNAME FILE) ROUTINESPEC ALPHA(BYTEINTEGERARRAYNAME FILE) ROUTINESPEC PRINTF(BYTEINTEGERARRAYNAME FILE) BYTEINTEGERARRAY FILE(0:1500) BYTEINTEGERARRAY OLD(0:5) BYTEINTEGERARRAY NEW(0:5) BYTEINTEGERARRAY MASK(0:5) INTEGER NO, J, NFS, I, K, M, BR RECORDFORMAT PF(BYTEINTEGER SERVICE, REPLY, C INTEGER A1, BYTEINTEGERNAME A2, INTEGER A3) RECORDFORMAT FILEF(BYTEINTEGER UNIT, FSYS, C BYTEINTEGERARRAY NAME(0:5)) CONSTBYTEINTEGERNAME ID=K'160030' CONSTBYTEINTEGERNAME OWN FS=K'160055' LOOP: PROMPT('>') SKIPSYMBOL WHILE (NEXTSYMBOL<'A' OR NEXTSYMBOL>'Z') AND NEXTSYMBOL#'?' READKEY(MASK) IF MASK(1)#' ' THEN ->IMPLY J=MASK(0) K=0 !**** !**** !**** B=BLOCKS IF J='B' START K=1 GETDIR(FILE) PRINTSTRING('NAME?:') IF NEXTSYMBOL#' ' PRINTSYMBOL(K'100000') READKEY(MASK) Q(FILE, MASK) IF FILE(0)>0 START IF FILE(0)>1 THEN ALPHA(FILE) NFS=FILE(0)*6 CYCLE I=2, 6, NFS-4 CYCLE J=0, 1, 5 MASK(J)=FILE(I+J) PRINTSYMBOL(MASK(J)) REPEAT BLOCKS(MASK, NO) WRITE(NO, 3) NEWLINE REPEAT FINISHELSESTART PRINTSTRING('NO FILE ! ') FINISH FINISH !**** !**** !**** R=RENAME IF J='R' START K=1 IF NEXTSYMBOL#' ' START PROMPT('OLD FILE ?: ') FINISH READKEY(OLD) GETDIR(FILE) Q(FILE, OLD) NFS=FILE(0) IF NFS=0 START PRINTSTRING('OLD FILE DOES NOT EXIST ') ->LOOP FINISH IF NEXTSYMBOL#'/' START PROMPT('NEW FILE ?: ') FINISH READKEY(NEW) RENAME(OLD, NEW) FINISH !**** !**** !**** D=DESTROY IF J='D' START K=1 GETDIR(FILE) PRINTSTRING('NAME : ') IF NEXTSYMBOL#' ' PRINTSYMBOL(K'100000') READKEY(MASK) Q(FILE, MASK) IF FILE(0)>0 START IF FILE(0)>1 THEN ALPHA(FILE) NFS=FILE(0)*6 CYCLE I=2, 6, NFS-4 CYCLE M=0, 1, 5 MASK(M)=FILE(I+M) PRINTSYMBOL(MASK(M)) REPEAT IF FILE(0)>1 START ; ! MORE THAN ONE FILE PRINTSTRING('?: ') PRINTSYMBOL(K'100000') SKIPSYMBOL WHILE NEXTSYMBOL=' ' OR NEXTSYMBOL=10 READSYMBOL(M) IF M='Y' THEN DESTROY(MASK) ELSE DESTROY(MASK); NEWLINE FINISH REPEAT FINISHELSESTART PRINTSTRING('NO FILE ! ') FINISH FINISH !**** !**** !**** A=ALPHABETIC LIST IF J='A' START K=1 GETDIR(FILE) ALPHA(FILE) PRINTF(FILE) FINISH !**** !**** !**** F=FILE LIST IF J='F' START K=1 GETDIR(FILE) PRINTF(FILE) FINISH !**** !**** !**** L=SELECTIVE LIST IF J='L' START PRINTSTRING('MASK?:') PRINTSYMBOL(K'100000') READ KEY(MASK) IMPLY: K=1 GETDIR(FILE) Q(FILE, MASK) NFS=FILE(0) IF NFS>0 START IF NFS>1 THEN ALPHA(FILE) PRINTF(FILE) FINISHELSESTART PRINTSTRING('NO FILE ! ') FINISH FINISH !**** !**** !**** S=STOP IF J='S' THENSTOP !**** !**** !**** U = USER DIRECTORY !**** IF J='U' START K=1; ! MARK COMMAND FOUND IF NEXTSYMBOL#' ' START PRINTSTRING('DIR NO?'); PRINTSYMBOL(K'100000') FINISH SKIPSYMBOL WHILE NEXTSYMBOL=' ' OR NEXTSYMBOL=10 READSYMBOL(BR); READSYMBOL(I) BR=(BR-'0')<<3+I-'0' IF BR<0 OR BR>K'77' START PRINTSTRING(' ? ') FINISHELSE OWN FS=BR FINISH IF K=0 THEN ->IMPLY ->LOOP ROUTINE PRINTF(BYTEINTEGERARRAYNAME FILE) INTEGER N, I, FLS, J FLS=FILE(0) N=FLS*6 WRITE(FLS, 1) PRINTSTRING(' FILES ') IF FLS>0 START SPACES(4) CYCLE I=2, 1, N+1 PRINTSYMBOL(FILE(I)) J=I-1 IF J//30*30=J THEN NEWLINE IF J//6*6=J THEN SPACES(4) REPEAT NEWLINE FINISH END ROUTINE GETDIR(BYTEINTEGERARRAYNAME FILE) INTEGER DIRBLOCK INTEGER I, K, J, N, BLOCK, NFS INTEGERARRAY BUFF(0:255) NFS=0 K=1 !!! DIRBLOCK=COM(-1)+OWN FS DIRBLOCK = K'150' BLOCK=DIRBLOCK-1+OWN FS UNTIL BLOCK>=DIRBLOCK+3 CYCLE ; ! ONE ONLY IF NOT 0 OR 1 BLOCK=BLOCK+1 DA(0, BLOCK, BUFF(0)) CYCLE I=0, 5, 250 N=ADDR(BUFF(I)) IF INTEGER(N)#0 START NFS=NFS+1 CYCLE J=0, 1, 5 K=K+1 FILE(K)=BYTEINTEGER(N+J) REPEAT FINISH REPEAT REPEAT FILE(0)=NFS END ROUTINE Q(BYTEINTEGERARRAYNAME FILE, MASK) INTEGER N, I, J, CK, P, NFS N=0 P=-4 NFS=FILE(0)*6 CYCLE I=2, 6, NFS-4 CK=0 CYCLE J=0, 1, 5 IF MASK(J)=X'3F' OR MASK(J)=FILE(I+J) THEN CK=CK+1 REPEAT IF CK=6 START N=N+1 P=P+6 CYCLE J=0, 1, 5 FILE(P+J)=FILE(I+J) REPEAT FINISH REPEAT FILE(0)=N END ROUTINE READ KEY(BYTEINTEGERARRAYNAME KEY) INTEGER I, J, K, N KEY(I)=' ' FOR I=0, 1, 5 SKIPSYMBOL WHILE NEXTSYMBOL=' ' OR NEXTSYMBOL=NL CYCLE I=0, 1, 5 N=NEXTSYMBOL IF (N<'0' OR (N>'9' AND N<'A') OR N>'Z') AND N#'?' START IF KEY(I-1)='?' START CYCLE K=I, 1, 5 KEY(K)='?' REPEAT FINISH RETURN FINISH READSYMBOL(J) KEY(I)=J REPEAT END ROUTINE ALPHA(BYTEINTEGERARRAYNAME FILE) !**** REORDERS FILE LIST IN FILE !**** FILE(0) CONTAINS NUMBER OF FILES !**** FILE LIST STARTS AT FILE(2) !**** EACH FILE CONSISTS OF 6 CHARACTERS INTEGER NFS, I, J, K, PTR, TT INTEGER TEMP NFS=FILE(0)*6 RETURNIF NFS<=6; ! LESS THAN TWO FILES !**** OUTSIDE LOOP FOR ALPHA ORDERING CYCLE I=2, 6, NFS-10 !**** POINTER SET UP AT LOWEST MEMBER PTR=I !**** NOW FIND LOWEST FILE NAME ON FROM THIS FILE CYCLE J=I+6, 6, NFS-4 !**** COMPARE FILENAMES CYCLE K=0, 1, 5 TEMP=FILE(J+K) TT=FILE(PTR+K) IF TEMP>TT THEN ->BIGGER IF TEMP<TT THEN ->SMALLER REPEAT SMALLER: PTR=J BIGGER: REPEAT !**** PTR NOW POINTS AT RELATIVE LOWEST FILE NAME !**** SO SWAP FILE NAMES IF I#PTR THENSTART CYCLE J=0, 1, 5 TEMP=FILE(I+J) FILE(I+J)=FILE(PTR+J) FILE(PTR+J)=TEMP REPEAT FINISH REPEAT END ROUTINE DESTROY(BYTEINTEGERARRAYNAME FILE) RECORD (PF) P OWNRECORD (FILEF) F INTEGER I F_UNIT=0; F_FSYS=OWN FS F_NAME(I)=FILE(I) FOR I=0, 1, 5 P_SERVICE=4; P_REPLY=ID P_A1=2; ! DESTROY P_A2==F_UNIT PONOFF(P) END ROUTINE RENAME(BYTEINTEGERARRAYNAME OLD, NEW) RECORDFORMAT P3F(BYTEINTEGER SERVICE, REPLY, C INTEGER A1, BYTEINTEGERNAME A2, A3) RECORD (P3F) P3 RECORD (FILEF) FO,FN INTEGER I, J CYCLE I=0, 1, 5 FO_NAME(I)=OLD(I) FN_NAME(I)=NEW(I) REPEAT FO_FSYS=OWN FS; FN_FSYS=OWN FS FO_UNIT=0; FN_UNIT=0 P3_SERVICE=4; P3_REPLY=ID P3_A1=5; ! RENAME P3_A2==FO_UNIT; P3_A3==FN_UNIT PONOFF(P3) IF P3_A1#0 THEN PRINTSTRING( ' NEW FILE EXISTS! ') END ROUTINE BLOCKS(BYTEINTEGERARRAYNAME FILE, C INTEGERNAME NO) OWNRECORD (FILEF) F RECORD (PF) P INTEGER I, N NO=0 CYCLE I=0, 1, 5 F_NAME(I)=FILE(I) REPEAT F_UNIT=0; F_FSYS=OWN FS P_SERVICE=4; P_REPLY=ID P_A1=0; P_A2==F_UNIT PONOFF(P) N=P_A1 UNTIL N=0 CYCLE P_SERVICE=4; P_REPLY=ID P_A1=1; P_A3=N PONOFF(P) N=P_A1 NO=NO+1 REPEAT END ROUTINE DA(INTEGER MODE, BLOCK, INTEGERNAME ADDRESS) RECORDFORMAT PF(BYTEINTEGER SERVICE, REPLY, C INTEGER A1, INTEGERNAME A2, INTEGER A3) RECORD (PF) P P_SERVICE=3; P_REPLY=ID P_A1=0; ! READ P_A2==ADDRESS; P_A3=BLOCK PONOFF(P) IF P_A1#0 START PRINTSTRING('DISC FAULT ') STOP FINISH END !! INTEGERMAP COM(INTEGER I) OWNINTEGER TEMP=0 RESULT ==TEMP END ENDOFPROGRAM