perm filename FILES.MAX[PUB,TES]1 blob
sn#129327 filedate 1974-11-07 generic text, type T, neo UTF8
00100 BEGOF("FILES")
00200
00300 COMMENT
00400
00500 *** Variations at Different Sites for Most Procedures ***
00600 *** NB *** UNCVFIL NEEDS CASES FOR CMU AND ITS ****
00700
00800 Processing of input file names and opening of input files is
00900 installation-dependent. Most of the options are handled by a single
01000 routine called OPENTOREAD.
01100
01200 Output file opening is simpler and handled by WRITEON.
01300 ;
01400
01500 IFC TENEX THENC
01600 DEFINE CHANGE(A,B)= [IF NULSTR(A) AND FULSTR(B) THEN B ELSE 0];
01700 ELSEC
01800 DEFINE CHANGE(A,B)= [IF A=0 THEN B ELSE 0];
01900 ENDC
02000
02100 PROCEDURES
00100 PUBLIC SIMPLE PROCEDURE FILES! ;$"#
00200 BEGIN "FILES!"
00300 THISFILE ← "(NO FILE)" ;
00400 MAINFILE ← INFILE ;
00500 END "FILES!" ;
00100 PUBLIC SIMPLE PROCEDURE FINIFILES ;$"#
00200 BEGIN "FINIFILES"
00300 IF GENREXT THEN OUTFILE ← OUTFILE &
00400 IFC CMUVER THENC (IF ABS(DEVICE)=XGP THEN ".XGO" ELSE ".DOC") ENDC
00500 IFC SAILVER THENC (IF ABS(DEVICE)=XGP THEN ".XGP" ELSE ".DOC") ENDC
00600 IFCR PARCVER THENC PARCEXT ENDC
00650 IFC ISIVER THENC (IF ABS(DEVICE)=XGP THEN ".XGO" ELSE ".DOC") ENDC RT01 10/25/74;
00700 IFC ITSVER THENC DOCEXT ENDC; PJ 5/27/74;
00800 END "FINIFILES" ;
00100 IFSITE TENEX THENK
00200 PRIVATE SITE(TENEX) STRING SIMPLE PROCEDURE CVFIL(STRING FILENAME; REFERENCE STRING EXT, PPN) ;$"#
00300 BEGIN
00400 STRING NAME ;
00500 PPN ← IF FILENAME[1 FOR 1] = "<" THEN SCANTO(">", FILENAME, TRUE) ELSE NULL ;
00600 NAME ← SCANTO(".;", FILENAME, FALSE) ;
00700 EXT ← IF FILENAME[1 FOR 1] = "." THEN SCANTO(";", FILENAME, FALSE) ELSE NULL ;
00800 RETURN(NAME) ;
00900 END ;
01000 ENDC
00100 IFSITE CMUVER THENK
00200 PRIVATE SITE(CMUVER) STRING SIMPLE PROCEDURE CVPPN(INTEGER VALUE) ;$"#
00300 BEGIN "CVPPN"
00400 OWN SAFE INTEGER ARRAY A[0:1];
00500 INTEGER ERRSW;
00600 STRING S;
00700 DEFINE CALLI="'47000000000", DECCMU="-3";
00800
00900 IF VALUE = 0 THEN RETURN (NULL);
01000
01100 A[0]←A[1]←0;
01200 START!CODE
01300 SETZM 0,ERRSW;
01400 MOVE 1,A;
01500 HRLI 1,VALUE;
01600 CALLI 1,DECCMU;
01700 SETOM 0,ERRSW;
01800 END;
01900
02000 RETURN ("["&
02100 ( IF ERRSW THEN (CVOS(VALUE LSH -18)&","&CVOS(VALUE LAND '777777))
02200 ELSE (CVSTR(A[0])&CVSTR(A[1])[1 FOR 3]) )
02300 & "]");
02400
02500 END "CVPPN";
02600 ENDC
00100 PUBLIC INTEGER PROCEDURE OPENTOREAD(INTEGER MODE ;
00200 STRING FILEKIND ; REFERENCE STRING FILENAME;
00300 IFC TENEX THENC STRING ELSEC INTEGER ENDC EXTDEFAULT, PPNDEFAULT) ;$"#
00400 BEGIN TES 8/24/74 PROCEDURIZED ;
00500 label labeltogetaroundcompilerbug;
00600 INTEGER CHAN, C ; BOOLEAN GOTIT ;
00700 IFC TENEX THENC STRING ELSEC INTEGER ENDC FEXT, FPPN, EXTD, PPNI, PPND, NAME, EXT, PPN ;
00705 STRING NF ;
00800 STRING INDEVICE ; RKJ: 5-17-74 ;
00900 SETBREAK(LOCAL!TABLE,":",NULL,"IS");
01000 INDEVICE←SCAN(INFILE,LOCAL!TABLE,DUMMY);
01100 IF NULSTR(INFILE) THEN BEGIN INFILE←INDEVICE; INDEVICE←"DSK" END ;
01200 IF (CHAN←GETCHAN)<0 THEN EARLYWARNING("NO CHANNELS ARE LEFT FOR INPUT!") ;
01300 EOF ← 0 ;
01400 OPEN(CHAN,INDEVICE,MODE, 2,0,150,BRC,EOF);
01500 GOTIT ← FALSE ;
01600 DO BEGIN "NAMELOOP"
01700 NAME ← CVFIL(FILENAME, FEXT, FPPN) ;
01800 FOR C ← 0 THRU 5 DO
01900 BEGIN
02000 EXT ← FEXT ; PPN ← FPPN ;
02100 CASE C OF
02200 BEGIN "LKPCASES"
02300 BEGIN END ;
02400 IF (EXTD←EXT←CHANGE(FEXT, EXTDEFAULT)) = 0 THEN CONTINUE ;
02500 IF (PPNI←PPN←CHANGE(FPPN, INPPN)) = 0 THEN CONTINUE ;
02600 IF (EXT←EXTD) = 0 OR (PPN←PPNI) = 0 THEN CONTINUE ;
02700 IF (PPND←PPN←CHANGE(FPPN, PPNDEFAULT)) = 0 THEN CONTINUE ;
02800 IF (EXT←EXTD)=0 OR (PPN←PPND)=0 THEN CONTINUE ;
02900 END "LKPCASES" ;
03000 GOTIT ← XLOOKUP(CHAN,NAME,EXT,0,PPN);
03100 IF GOTIT THEN DONE ;
03200 END ;
03300 IF GOTIT THEN DONE ;
03320 IFC PARCVER THENC TES 10/21/74 SO FONT 2 "SERIF" WORKS ;
03325 IF FILEKIND[1 TO 4] = "Font" AND FULSTR(NF←FONTEQUIV(NAME)) THEN
03330 FILENAME ← NF ELSE
03360 ENDC
03380 BEGIN
03390 IF NOT SWDBACK THEN OUTSTR(CRLF) ; SWDBACK ← TRUE ;
03400 OUTSTR(FILEKIND & FILENAME & " not found." & CRLF & "Read file: ");
03500 IFC TENEX THENC
03600 RELEASE(CHAN);
03700 OUTSTR(PPND←PPNDEFAULT) ;
03710 DO BEGIN TES 10/22/74 ;
03720 CHAN ← GTJFNL(PPND,'162000000000,'100000101,
03730 NULL,PPNDEFAULT[2 TO ∞-1],
03732 NAME,EXTDEFAULT[2 TO ∞],
03740 NULL, NULL, NULL) ;
03742 IF CHAN>-1 THEN DONE ;
03744 OUTSTR("XXX"&CRLF&"Read file: ") ; PPND←NULL ;
03746 END
03748 UNTIL FALSE ;
03750 SETINPUT(CHAN,150,BRC,EOF) ; TES 10/16/74 ;
03775 OPENF(CHAN, 2) ;
03800 DONE ;
03900 ELSEC
04000 FILENAME ← INCHWL ;
04100 ENDC
04150 END ;
04200 END "NAMELOOP"
04300 UNTIL GOTIT ;
04400 labeltogetaroundcompilerbug:
04500 FILENAME ← UNCVFIL(CHAN, NAME, EXT, PPN) ;
04600 RETURN(CHAN) ;
04700 END "OPENTOREAD" ;
04800
00100 IFSITE TENEX THENK TES 10/25/73 ;
00200 PRIVATE SITE(TENEX) STRING PROCEDURE SCANTO(STRING BRKS; REFERENCE STRING SCANNEE; BOOLEAN INCLUDE) ;$"#
00300 BEGIN
00400 INTEGER DUMMY ;
00500 SETBREAK(LOCAL!TABLE, BRKS, NULL, IF INCLUDE THEN "IA" ELSE "IR") ;
00600 RETURN(SCAN(SCANNEE, LOCAL!TABLE, DUMMY)) ;
00700 END ;
00800 ENDC
00100 IFSITE TENEX THENK
00200 PUBLIC SITE(TENEX) SIMPLE PROCEDURE SFBSZ(INTEGER CHAN, SIZE) ;$"#
00300 BEGIN "SFBSZ"
00400 INTEGER K ;
00500 DEFINE JSYS=['104000000000], SFBSZ=[JSYS '46];
00600 K ← CVJFN(CHAN) ;
00700 START!CODE "BYTE16"
00800 MOVE 1,K; MOVE 2,SIZE; SFBSZ ;
00900 END "BYTE16" ;
01000 END "SFBSZ" ;
01100 ENDC
00100 IFSITE TENEX THENK
00200 PUBLIC SITE(TENEX) SIMPLE STRING PROCEDURE UNCVFIL(INTEGER CHAN; STRING NAME, EXT, PPN) ;$"#
00300 RETURN(JFNS(CHAN, 0)) ;
00400 ENDC
00500
00600 IFSITE NOT TENEX THENK
00700 PUBLIC SITE(NOT TENEX) SIMPLE STRING PROCEDURE UNCVFIL(INTEGER CHAN, NAME, EXT, PPN) ;$"#
00800 RETURN(
00900 IFC SAILVER THENC
01000 CVXSTR(NAME) &
01100 (IF EXT=0 THEN NULL ELSE "." & CVXSTR(EXT)[1 TO 3]) &
01200 (IF PPN=0 THEN NULL ELSE "[" & CVXSTR(PPN)[1 TO 3] &
01300 "," & CVXSTR(PPN)[4 TO 6] & "]")
01400 ENDC
01410 IFC CMUVER THENC
01420 CVXSTR(NAME) &
01430 (IF EXT=0 THEN NULL ELSE "." & CVXSTR(EXT)[1 TO 3]) &
01440 CVPPN(PPN)
01450 ENDC
01500 ) ;
01600 ENDC
00100 PUBLIC INTEGER SIMPLE PROCEDURE WRITEON(BOOLEAN BINARY; STRING FILENAME) ;$"#
00200 BEGIN "WRITEON"
00300 INTEGER CH ;
00400 IF (CH ← GETCHAN) < 0 THEN
00500 BEGIN
00600 WARN("=",<"No channel for writing "&FILENAME>);
00700 RETURN(-1) ;
00800 END ;
00900 K ← 0 ; OPEN(CH, "DSK", IF BINARY THEN 8 ELSE 0, 0, 2, DUMMY, DUMMY, K) ;
01000 ENTER(CH, FILENAME, DUMMY←0) ;
01100 IF DUMMY THEN WARN("=","ENTER failed for "&FILENAME);
01200 RETURN(CH) ;
01300 END "WRITEON" ;
00100 IFSITE TENEX THENK
00200 PUBLIC SITE(TENEX) BOOLEAN SIMPLE PROCEDURE XLOOKUP(INTEGER CHAN; STRING NAME, EXT; INTEGER JUNK; STRING PPN) ;$"#
00300 BEGIN COMMENT RETURNS TRUE IF SUCCESSFUL ;
00400 BOOLEAN FLAG ;
00500 LOOKUP(CHAN, PPN & NAME & EXT, FLAG) ;
00600 RETURN(NOT FLAG) ;
00700 END ;
00800 ENDC
00900
01000 IFSITE NOT TENEX THENK
01100 PUBLIC SITE(NOT TENEX) BOOLEAN SIMPLE PROCEDURE XLOOKUP(INTEGER CHAN, NAME, EXT, JUNK, PPN) ;$"#
01200 START!CODE "XLOOKUP"
01300 MOVE 2,CHAN;
01400 LSH 2,23;
01500 IFC ITSVER
01600 THENC IOR 2,['027017777774] PJ 5/28/74 ;
01700 ELSEC IOR 2,['076017777774] ENDC ; COMMENT LOOKUP 0,-4(17) ;
01800 SETO 1,0; COMMENT TRUE ;
01900 XCT 0,2;
02000 SETZ 1,0; COMMENT FALSE ;
02100 END "XLOOKUP";
02200 ENDC
00100 FINISHED
00200
00300 ENDOF("FILES")