perm filename FILES.SAI[PUB,TES]1 blob
sn#130586 filedate 1974-11-08 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00013 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGOF("FILES")
C00003 00003 PUBLIC SIMPLE PROCEDURE FILES! $"#
C00004 00004 PUBLIC SIMPLE PROCEDURE FINIFILES $"#
C00005 00005 IFSITE TENEX THENK
C00006 00006 IFSITE CMUVER THENK
C00007 00007 PUBLIC INTEGER PROCEDURE OPENTOREAD(INTEGER MODE
C00011 00008 IFSITE TENEX THENK TES 10/25/73
C00012 00009 IFSITE TENEX THENK
C00013 00010 IFSITE TENEX THENK
C00014 00011 PUBLIC INTEGER SIMPLE PROCEDURE WRITEON(BOOLEAN BINARY STRING FILENAME) $"#
C00015 00012 IFSITE TENEX THENK
C00017 00013 FINISHED
C00018 ENDMK
C⊗;
BEGOF("FILES")
COMMENT
*** Variations at Different Sites for Most Procedures ***
*** NB *** UNCVFIL NEEDS CASES FOR CMU AND ITS ****
Processing of input file names and opening of input files is
installation-dependent. Most of the options are handled by a single
routine called OPENTOREAD.
Output file opening is simpler and handled by WRITEON.
;
IFC TENEX THENC
DEFINE CHANGE(A,B)= [IF NULSTR(A) AND FULSTR(B) THEN B ELSE 0];
ELSEC
DEFINE CHANGE(A,B)= [IF A=0 THEN B ELSE 0];
ENDC
PROCEDURES
PUBLIC SIMPLE PROCEDURE FILES! ;$"#
BEGIN "FILES!"
THISFILE ← "(NO FILE)" ;
MAINFILE ← INFILE ;
END "FILES!" ;
PUBLIC SIMPLE PROCEDURE FINIFILES ;$"#
BEGIN "FINIFILES"
IF GENREXT THEN OUTFILE ← OUTFILE &
IFC CMUVER THENC (IF ABS(DEVICE)=XGP THEN ".XGO" ELSE ".DOC") ENDC
IFC SAILVER THENC (IF ABS(DEVICE)=XGP THEN ".XGP" ELSE ".DOC") ENDC
IFCR PARCVER THENC PARCEXT ENDC
IFC ISIVER THENC (IF ABS(DEVICE)=XGP THEN ".XGO" ELSE ".DOC") ENDC RT01 10/25/74;
IFC ITSVER THENC DOCEXT ENDC; PJ 5/27/74;
END "FINIFILES" ;
IFSITE TENEX THENK
PRIVATE SITE(TENEX) STRING SIMPLE PROCEDURE CVFIL(STRING FILENAME; REFERENCE STRING EXT, PPN) ;$"#
BEGIN
STRING NAME ;
PPN ← IF FILENAME[1 FOR 1] = "<" THEN SCANTO(">", FILENAME, TRUE) ELSE NULL ;
NAME ← SCANTO(".;", FILENAME, FALSE) ;
EXT ← IF FILENAME[1 FOR 1] = "." THEN SCANTO(";", FILENAME, FALSE) ELSE NULL ;
RETURN(NAME) ;
END ;
ENDC
IFSITE CMUVER THENK
PRIVATE SITE(CMUVER) STRING SIMPLE PROCEDURE CVPPN(INTEGER VALUE) ;$"#
BEGIN "CVPPN"
OWN SAFE INTEGER ARRAY A[0:1];
INTEGER ERRSW;
STRING S;
DEFINE CALLI="'47000000000", DECCMU="-3";
IF VALUE = 0 THEN RETURN (NULL);
A[0]←A[1]←0;
START!CODE
SETZM 0,ERRSW;
MOVE 1,A;
HRLI 1,VALUE;
CALLI 1,DECCMU;
SETOM 0,ERRSW;
END;
RETURN ("["&
( IF ERRSW THEN (CVOS(VALUE LSH -18)&","&CVOS(VALUE LAND '777777))
ELSE (CVSTR(A[0])&CVSTR(A[1])[1 FOR 3]) )
& "]");
END "CVPPN";
ENDC
PUBLIC INTEGER PROCEDURE OPENTOREAD(INTEGER MODE ;
STRING FILEKIND ; REFERENCE STRING FILENAME;
IFC TENEX THENC STRING ELSEC INTEGER ENDC EXTDEFAULT, PPNDEFAULT) ;$"#
BEGIN TES 8/24/74 PROCEDURIZED ;
label labeltogetaroundcompilerbug;
INTEGER CHAN, C ; BOOLEAN GOTIT ;
IFC TENEX THENC STRING ELSEC INTEGER ENDC FEXT, FPPN, EXTD, PPNI, PPND, NAME, EXT, PPN ;
STRING NF ;
STRING INDEVICE ; RKJ: 5-17-74 ;
SETBREAK(LOCAL!TABLE,":",NULL,"IS");
INDEVICE←SCAN(INFILE,LOCAL!TABLE,DUMMY);
IF NULSTR(INFILE) THEN BEGIN INFILE←INDEVICE; INDEVICE←"DSK" END ;
IF (CHAN←GETCHAN)<0 THEN EARLYWARNING("NO CHANNELS ARE LEFT FOR INPUT!") ;
EOF ← 0 ;
OPEN(CHAN,INDEVICE,MODE, 2,0,150,BRC,EOF);
GOTIT ← FALSE ;
DO BEGIN "NAMELOOP"
NAME ← CVFIL(FILENAME, FEXT, FPPN) ;
FOR C ← 0 THRU 5 DO
BEGIN
EXT ← FEXT ; PPN ← FPPN ;
CASE C OF
BEGIN "LKPCASES"
BEGIN END ;
IF (EXTD←EXT←CHANGE(FEXT, EXTDEFAULT)) = 0 THEN CONTINUE ;
IF (PPNI←PPN←CHANGE(FPPN, INPPN)) = 0 THEN CONTINUE ;
IF (EXT←EXTD) = 0 OR (PPN←PPNI) = 0 THEN CONTINUE ;
IF (PPND←PPN←CHANGE(FPPN, PPNDEFAULT)) = 0 THEN CONTINUE ;
IF (EXT←EXTD)=0 OR (PPN←PPND)=0 THEN CONTINUE ;
END "LKPCASES" ;
GOTIT ← XLOOKUP(CHAN,NAME,EXT,0,PPN);
IF GOTIT THEN DONE ;
END ;
IF GOTIT THEN DONE ;
IFC PARCVER THENC TES 10/21/74 SO FONT 2 "SERIF" WORKS ;
IF FILEKIND[1 TO 4] = "Font" AND FULSTR(NF←FONTEQUIV(NAME)) THEN
FILENAME ← NF ELSE
ENDC
BEGIN
IF NOT SWDBACK THEN OUTSTR(CRLF) ; SWDBACK ← TRUE ;
OUTSTR(FILEKIND & FILENAME & " not found." & CRLF & "Read file: ");
IFC TENEX THENC
RELEASE(CHAN);
OUTSTR(PPND←PPNDEFAULT) ;
DO BEGIN TES 10/22/74 ;
CHAN ← GTJFNL(PPND,'162000000000,'100000101,
NULL,PPNDEFAULT[2 TO ∞-1],
NAME,EXTDEFAULT[2 TO ∞],
NULL, NULL, NULL) ;
IF CHAN>-1 THEN DONE ;
OUTSTR("XXX"&CRLF&"Read file: ") ; PPND←NULL ;
END
UNTIL FALSE ;
SETINPUT(CHAN,150,BRC,EOF) ; TES 10/16/74 ;
OPENF(CHAN, 2) ;
DONE ;
ELSEC
FILENAME ← INCHWL ;
ENDC
END ;
END "NAMELOOP"
UNTIL GOTIT ;
labeltogetaroundcompilerbug:
FILENAME ← UNCVFIL(CHAN, NAME, EXT, PPN) ;
RETURN(CHAN) ;
END "OPENTOREAD" ;
IFSITE TENEX THENK TES 10/25/73 ;
PRIVATE SITE(TENEX) STRING PROCEDURE SCANTO(STRING BRKS; REFERENCE STRING SCANNEE; BOOLEAN INCLUDE) ;$"#
BEGIN
INTEGER DUMMY ;
SETBREAK(LOCAL!TABLE, BRKS, NULL, IF INCLUDE THEN "IA" ELSE "IR") ;
RETURN(SCAN(SCANNEE, LOCAL!TABLE, DUMMY)) ;
END ;
ENDC
IFSITE TENEX THENK
PUBLIC SITE(TENEX) SIMPLE PROCEDURE SFBSZ(INTEGER CHAN, SIZE) ;$"#
BEGIN "SFBSZ"
INTEGER K ;
DEFINE JSYS=['104000000000], SFBSZ=[JSYS '46];
K ← CVJFN(CHAN) ;
START!CODE "BYTE16"
MOVE 1,K; MOVE 2,SIZE; SFBSZ ;
END "BYTE16" ;
END "SFBSZ" ;
ENDC
IFSITE TENEX THENK
PUBLIC SITE(TENEX) SIMPLE STRING PROCEDURE UNCVFIL(INTEGER CHAN; STRING NAME, EXT, PPN) ;$"#
RETURN(JFNS(CHAN, 0)) ;
ENDC
IFSITE NOT TENEX THENK
PUBLIC SITE(NOT TENEX) SIMPLE STRING PROCEDURE UNCVFIL(INTEGER CHAN, NAME, EXT, PPN) ;$"#
RETURN(
IFC SAILVER THENC
CV6STR(NAME) &
(IF EXT=0 THEN NULL ELSE "." & CV6STR(EXT)[1 TO 3]) &
(IF PPN=0 THEN NULL ELSE "[" & CVXSTR(PPN)[1 TO 3] &
"," & CVXSTR(PPN)[4 TO 6] & "]")
ENDC
IFC CMUVER THENC
CVXSTR(NAME) &
(IF EXT=0 THEN NULL ELSE "." & CVXSTR(EXT)[1 TO 3]) &
CVPPN(PPN)
ENDC
) ;
ENDC
PUBLIC INTEGER SIMPLE PROCEDURE WRITEON(BOOLEAN BINARY; STRING FILENAME) ;$"#
BEGIN "WRITEON"
INTEGER CH ;
IF (CH ← GETCHAN) < 0 THEN
BEGIN
WARN("=",<"No channel for writing "&FILENAME>);
RETURN(-1) ;
END ;
K ← 0 ; OPEN(CH, "DSK", IF BINARY THEN 8 ELSE 0, 0, 2, DUMMY, DUMMY, K) ;
ENTER(CH, FILENAME, DUMMY←0) ;
IF DUMMY THEN WARN("=","ENTER failed for "&FILENAME);
RETURN(CH) ;
END "WRITEON" ;
IFSITE TENEX THENK
PUBLIC SITE(TENEX) BOOLEAN SIMPLE PROCEDURE XLOOKUP(INTEGER CHAN; STRING NAME, EXT; INTEGER JUNK; STRING PPN) ;$"#
BEGIN COMMENT RETURNS TRUE IF SUCCESSFUL ;
BOOLEAN FLAG ;
LOOKUP(CHAN, PPN & NAME & EXT, FLAG) ;
RETURN(NOT FLAG) ;
END ;
ENDC
IFSITE NOT TENEX THENK
PUBLIC SITE(NOT TENEX) BOOLEAN SIMPLE PROCEDURE XLOOKUP(INTEGER CHAN, NAME, EXT, JUNK, PPN) ;$"#
START!CODE "XLOOKUP"
MOVE 2,CHAN;
LSH 2,23;
IFC ITSVER
THENC IOR 2,['027017777774] PJ 5/28/74 ;
ELSEC IOR 2,['076017777774] ENDC ; COMMENT LOOKUP 0,-4(17) ;
SETO 1,0; COMMENT TRUE ;
XCT 0,2;
SETZ 1,0; COMMENT FALSE ;
END "XLOOKUP";
ENDC
FINISHED
ENDOF("FILES")