.IIF NDF,MASS$$, .NLIST .IDENT /28.1/ .IF NDF,MASS$$ .TITLE FCSPRE - FCS PREFIX FILE .ENDC ; .IF DF,MASS$$ .TITLE FCS - FILE CONTROL SERVICES .SBTTL MONOLITHIC ASSEMBLY OF FCS MODULES .SBTTL PREFIX FILE - SYMBOL DEFINITIONS AND MACROS .ENDC ; ; COPYRIGHT (c) 1982 BY ; DIGITAL EQUIPMENT CORPORATION, MAYNARD ; MASSACHUSETTS. ALL RIGHTS RESERVED. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ; BE USED AND COPIED ONLY IN ACCORDANCE WITH THE ; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE ; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE ; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO ; AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO ; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED ; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ; ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR ; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS ; NOT SUPPLIED BY DIGITAL. ; ; PREVIOUSLY MODIFIED BY ; ; G. H. KUENNING ; B. LEAVITT ; G. H. KUENNING ; S. RUZICH ; JOHN ALLEN PAINTER ; S. RUZICH ; LONI BROWN ; S. RUZICH ; ; ; ASSEMBLY CONTROL FLAGS ; ; GK003 ; OPERATING-SYSTEM SELECTION IS AS FOLLOWS: ; GK003 ; ; GK003 ; SYSTEM R$$11M R$$VMS R$RSTS ; ------------------------------ ; IAS/11-D 0 0 0 ; RSX-11M 1 0 0 ; VAX/VMS 1 1 0 ; RSTS/E 0 0 1 ; .IF GT,R$RSTS ;OPTIONS FOR RSTS/E .IIF NDF R$$EIS,R$$EIS=1 ;RSTS/E EIS IS PRESENT .IIF NDF R$$11M,R$$11M=0 ;TURN OFF 11M CHARACTERISTICS .ENDC ;R$RSTS ; .IIF NDF R$$11M,R$$11M=1 ;DEFAULT ASSEMBLY IS FOR 11-M ; GK003 .IIF NDF R$$VMS,R$$VMS=0 ;... ; GK003 .IIF NDF R$RSTS,R$RSTS=0 ; ; GK003 .IF GT R$$11M ; GK003 ; GK003 .IF GT R$$VMS ;OPTIONS FOR VAX/VMS: ; GK003 ; GK003 .IIF NDF R$$ANI,R$$ANI=1 ;VMS: ANSI MAGTAPE SUPPORT DESIRED ; GK003 .IIF NDF R$$BBF,R$$BBF=1 ; VMS: ENABLE BIG BUFFERING .IIF NDF R$$ELP,R$$ELP=1 ;VMS: EXTENDED PARSE DIR IS PRESENT ; GK003 .IIF NDF R$$RSL,R$$RSL=1 ;VMS: FORCE INTO PSECT $$RESL ; GK003 .IIF NDF R$$EIS,R$$EIS=1 ;VMS: USE EXTENDED INSTRUCTION SET ; GK003 .IFF ;OPTIONS FOR RSX-11M: ; GK003 ; GK003 .IIF NDF R$$RSL,R$$RSL=1 ;11-M: FORCE INTO PSECT $$RESL ; GK003 ; GK003 .ENDC ;R$$VMS .IFF ;R$$11M .IF EQ,R$RSTS ;OPTIONS FOR IAS: ; GK003 .IIF NDF R$$ANI,R$$ANI=1 ;IAS: ANSI MAGTAPE SUPPORTED ; GK003 .IIF NDF R$$EIS,R$$EIS=1 ;IAS: EIS IS PRESENT ; GK003 .IIF NDF R$$MUL,R$$MUL=1 ;IAS: MULTIPLE BUFFERING IS SUPPORTED ; GK003 ; GK003 .ENDC ;R$RSTS .ENDC ;R$$11M ; ; GK003 ; DEFAULT ASSEMBLY FLAGS - ALL FLAGS DEFAULT TO ZERO EXCEPT ; GK003 ; THOSE GIVEN SEPARATELY BELOW, WHICH ARE HANGOVERS FROM EARLIER ; GK003 ; DAYS. ; GK003 ; ; GK003 .IIF NDF,R$$ANI,R$$ANI=0 ;0 FOR NO ANSI MAGTAPE ; GK003 ;1 FOR ANSI MAGTAPE .IIF NDF,R$$BBF,R$$BBF=0 ;0 FOR NO BIG BUFFERS ;1 TO ALLOW BIG BLOCK BUFFERS FOR ;BLOCK ORIENTED DEVICES .IIF NDF,R$$EIS,R$$EIS=0 ;0 FOR NO EXTENDED INSTRUCTION SET ; GK003 ;1 FOR 11/40 OR 45 EIS .IIF NDF,R$$ELP,R$$ELP=0 ;0 FOR NO EXTENDED PARSE SUPPORT ;1 FOR EXTENDED PARSE DIRECTIVE SUPPORT .IIF NDF,R$$MUL,R$$MUL=0 ;0 FOR NO MULTIPLE BUFFERING ; GK003 ;1 FOR MULTIPLE BUFFERING .IIF NDF,R$$RSL,R$$RSL=0 ;0 IF ASSEMBLING FOR SYSLIB ;1 IF ASSEMBLING FOR RESIDENT LIBRARY ; ; GK001 ; THE FOLLOWING TWO SYMBOLS ARE USED TO PRODUCE VARIANTS OF THE ; GK001 ; GET, PUT, PGCR, AND OPEN MODULES. ; GK001 ; ; GK001 .IIF NDF,R$$OPF,R$$OPF=0 ;0 FOR NORMAL OPEN BY FILE NAME ; GK001 ;1 FOR OPEN BY FILE NAME BLOCK ; GK001 ;2 FOR OPEN BY FILE ID ; GK001 .IIF NDF,R$$SEQ,R$$SEQ=0 ;0 FOR RANDOM OR SEQ GET/PUT ; GK001 ;1 TO RESTRICT TO SEQUENTIAL ; GK001 ; ; SYMBOL R$$OPT CHOOSES THE PROPER TITLE FOR EACH OPEN VARIANT ; .IF GT,R$$11M ;IF 11M AND... .IF EQ,R$$RSL-2 ; ASSEMBLING FOR RESIDENT LIBRARY... R$$OPT=3 ; OPEN TITLE = 3 FOR OPENR .ENDC ; .ENDC ; OTHERWISE... .IIF NDF,R$$OPT,R$$OPT=R$$OPF ; OPEN TITLE CORRESPONDS TO R$$OPF ; ; SYMBOL R$$VEC IS USED BY VECJMP.MAC. ; .IIF NDF,R$$VEC,R$$VEC=0 ;0 = PRODUCE FCSJMP.OBJ FROM VECJMP ;1 = PRODUCE FCSVEC.OBJ FROM VECJMP ; ; SYMBOL R$$SUP PRODUCES M-PLUS SUPERVISOR MODE LIBRARY VERSIONS ; .IIF NDF,R$$SUP,R$$SUP=0 ;0 = NORMAL ;1 = SUPERVISOR MODE LIBRARY ; .IF EQ,R$$EIS ; .MACRO NOEIS$ .MCALL ILLOP ILLOP .MACRO SOB REG,LOC DEC REG BNE LOC .ENDM SOB .ENDM NOEIS$ ; ; DEFINE THE LIST OF PARAMETERS AS ILLEGAL OPCODES ; .MACRO ILLOP LIST .IRP X, .MACRO X A1,A2 .LIST .ERROR ;ILLEGAL OP CODE *************** .NLIST .ENDM X .ENDM ;END OF IRP .ENDM ILLOP ; NOEIS$ .ENDC .IF NDF,SYS40$ .IF GT,R$$RSL .PSECT $$RESL,RO ;FOR 11D RESIDENT LIBRARY, OR 11M ANYTHING .ENDC .ENDC ; MCALL AND INVOKE THE SYMBOL DEFINITION MACROS ; CAN AVOID USING LOCAL DEFINITIONS UNLESS ASSEMBLING FOR THE ; RESIDENT LIBRARY .MCALL FDOF$L,BDOFF$,FCSBT$,FSROF$ FDOF$L ;DEFINE FDB OFFSET LOCALLY BDOFF$ DEF$L ;DEFINE THE BLOCK BUFFER OFFSETS FCSBT$ DEF$L ;DEFINE FCS BITS AND VALUES LOCALLY FSROF$ DEF$L ;DEFINE FILE STORAGE REGION OFFSETS LOCALLY .IF GT,R$$11M .MCALL IOERR$,DRERR$,FILIO$ IOERR$ ;DEFINE THE I/O ERROR CODES DRERR$ ;DEFINE THE DIRECTIVE STATUS CODES FILIO$ ;DEFINE THE QI/O FUNCTION CODES .IFF .MCALL QIOSY$ QIOSY$ DEF$L ;DEFINE ERROR AND I/O FUNCTION CODES .ENDC ; .MCALL ALUN$S,DIR$,GLUN$S,CLOSE$,GTSK$S,WTSE$S,CLEF$S,CALL,RETURN .MCALL WSIG$S .MCALL MSDS$S ; ; LOCALLY DEFINED MACROS ; CO-ROUTINE CALL TO SAVE REGISTERS R1-R5 .MACRO .SAVR1 JSR R5,.SAVR1 .ENDM .SAVR1 ; ; DEFINE MULTIPLE BUFFERING FLAG ONLY IF IDNAM IS IN LIST OF NAMES .MACRO $MULBF IDNAM,MBFLST .IRP X, .IF IDN,, R$$MBF=R$$MUL .ENDC .ENDM .ENDM $MULBF ; ; GK004 ; DEFINE ...TMP=1 IF IDNAM IS IN LIST OF NAMES. DON'T CHANGE ...TMP ; GK004 ; IF IT IS NOT. ; GK004 .MACRO $TSTNM IDNAM,TSTLST ; GK004 .IRP X, ; GK004 .IF IDN,, ; GK004 ...TMP= 1 ; GK004 .ENDC ; GK004 .ENDM ; GK004 .ENDM $TSTNM ; GK004 ;; $BEGIN MACRO AND ITS COUSINS ; GK005 ; ; GK005 ; THIS MACRO PRODUCES THE .TITLE AND .IDENT STATEMENTS FOR THE ; GK005 ; VARIOUS ROUTINES. THE REASON FOR ITS USE IS SO THAT THE NAME ; GK005 ; AND IDENT CAN BE CONDITIONALLY ASSEMBLED. ; GK005 ; ; GK005 ; USAGE: ; GK005 ; ; GK005 ; $BEGIN IDNAM,IDNUM,TITLE,NAMCTL,NAMLST ; GK005 ; ; GK005 ; WHERE: ; GK005 ; ; GK005 ; IDNAM IS THE NAME OF THE ROUTINE. FOR CONDITIONALLY ASSEMBLED ; GK005 ; SOURCES THAT PRODUCE MULTIPLE ROUTINES (E.G., GET WHICH ; GK005 ; PRODUCES GET AND GETSQ), IDNAM IS THE NAME OF THE SOURCE ; GK005 ; FILE OR MAIN ROUTINE. ; GK005 ; ; GK005 ; IDNUM IS THE IDENT NUMBER TO BE ASSIGNED TO THE ROUTINE. THE ; GK005 ; NUMBER SHOULD HAVE THE FORM VV.N, WHERE VV IS THE ; GK005 ; VERSION OF FCS THAT THE ROUTINE BELONGS TO (WHICH SHOULD ; GK005 ; BE THE SAME ACROSS ALL ROUTINES IN A RELEASE OF FCS), ; GK005 ; N IS THE POST-RELEASE CORRECTION LEVEL, WITH 0 BEING THE ; GK005 ; RELEASE VALUE. THE BEGIN MACRO WILL ADD A ONE- OR TWO- ; GK005 ; CHARACTER ALPHANUMERIC SUFFIX TO THE IDENT, SO THAT THE ; GK005 ; IDENT TAKES THE FINAL FORM VV.NXY. X IS USED TO ; GK005 ; INDICATE THE OPERATING SYSTEM: ; GK005 ; ; GK005 ; I IAS/RSX-11D ; GK005 ; M RSX-11M ; GK005 ; V VAX/VMS ; GK005 ; R RSTS/E ; ; GK005 ; Y IS USED TO INDICATE THE VERSION OR VARIANT OF FCS, ; GK005 ; WHICH VARIES DEPENDING ON THE SYSTEM, AS FOLLOWS: ; GK005 ; ; GK005 ; FOR VAX/VMS AND RSTS/E, Y IS ALWAYS NULL, SINCE THERE IS ; ONLY ONE VERSION OF FCS. ; ; GK005 ; FOR IAS/11D, Y IS "R" FOR THE RESIDENT FCS, AND "S" FOR ; GK005 ; THE SYSLIB FCS. ; GK005 ; ; GK005 ; FOR RSX-11M, Y IS A SINGLE HEXA- ; DECIMAL DIGIT INDICATING A BIT PATTERN OF THE OPTIONS ; GK005 ; THAT THE ROUTINE SUPPORTS. FOR EXAMPLE, IF THE ; GK005 ; OPERATING SYSTEM HAS THREE VARIANTS OF FCS, A ; GK005 ; ROUTINE WITH Y EQUAL TO "6" IS A VARIANT THAT WILL WORK ; GK005 ; CORRECTLY WITH THE SECOND AND THIRD FLAVORS OF FCS BUT ; GK005 ; NOT WITH THE FIRST. THE VARIANTS ARE ASSIGNED AS ; GK005 ; FOLLOWS: ; GK005 ; ; GK005 ; 1 = NON-ANSI FCS ; 2 = ANSI/BIGBUF FCS ; 4 = MULTIBUF FCS ; ; GK005 ; TITLE IS THE TITLE STRING THAT WILL BE PRINTED ON THE LISTING. ; GK005 ; IT MUST BE ENCLOSED IN ANGLE BRACKETS. ; GK005 ; ; GK005 ; NAMCTL IS BLANK FOR SINGLE-VARIANT ROUTINES. FOR ROUTINES THAT ; GK005 ; PRODUCE MULTIPLE OBJECT FILES (LIKE GET/GETSQ), NAMCTL ; GK005 ; IS THE ASSEMBLY VARIABLE THAT CONTROLS WHICH VARIANT ; GK005 ; IS PRODUCED. SEE NAMLST. ; GK005 ; ; GK005 ; NAMLST IS BLANK FOR SINGLE-VARIANT ROUTINES. FOR ROUTINES THAT ; GK005 ; PRODUCE MULTIPLE OBJECT FILES (LIKE GET/GETSQ), NAMLST ; GK005 ; IS A COMMA-SEPARATED LIST OF NAMES TO BE ASSIGNED TO ; GK005 ; THE OBJECT MODULES. IF NAMCTL IS EQUAL TO N WHEN THE ; GK005 ; ROUTINE IS ASSEMBLED, THE NTH ENTRY IN NAMLST WILL BE ; GK005 ; THE ROUTINE'S NAME. NAMLST IS INDEXED FROM ZERO, NOT ; GK005 ; ONE! ; GK005 ; ; GK005 ; EXAMPLE: ; GK005 ; ; GK005 ; $BEGIN GET,<15.0>,,R$$SEQ, ; GK005 ; ; GK005 ; PRODUCES GET IF R$$SEQ IS ZERO, AND GETSQ IF R$$SEQ IS ONE. ; GK005 ; THE IDENT WILL BE 15.0IR IF IT IS ASSEMBLED FOR THE IAS ; GK005 ; RESIDENT LIBRARY. ; GK005 ; ; GK005 ; ; GK005 ; NOTE: THE CONDITIONALS THAT DECIDE WHAT IDENT IS ASSIGNED TO ; GK005 ; A ROUTINE DEPEND HEAVILY ON THE FACT THAT, ; FOR RSX11M, A MINIMAL FCS IS FIRST ; ASSEMBLED, AND THEN THE ROUTINES THAT DIFFER FOR THE ; GK005 ; LARGER FCS'S ARE ASSEMBLED AGAIN. THUS, FOR EXAMPLE, ; GK005 ; IF A ROUTINE IS ASSEMBLED WITH ALL OF ANSI, BIG ; GK005 ; BUFFERING, AND MULTIPLE BUFFERING TURNED ON, WE CAN BE ; GK005 ; SURE THAT IT IS A ROUTINE WHOSE Y IDENT SHOULD BE 4, ; GK005 ; BECAUSE IF IT HAD A Y IDENT OF 6 OR 7, IT WOULD HAVE ; GK005 ; BEEN ASSEMBLED EARLIER. ; GK005 .MACRO $BGIN2 NAMLST,IDNUM,TITLE,NAMCTL ...CTL=0 .IRP IDNAM, .IF EQ,NAMCTL-...CTL .IF NDF,MASS$$ .LIST .TITLE IDNAM IDNUM, TITLE .IDENT /IDNUM/ .NLIST .ENDC ; .IF DF,MASS$$ .LIST .SBTTL IDNAM IDNUM, TITLE .NLIST .ENDC .ENDC ...CTL=...CTL+1 .ENDM .ENDM $BGIN2 ; .MACRO $BGIN1 IDNAM,IDNUM,TITLE,NAMCTL,NAMLST .IF B,NAMCTL $BGIN2 IDNAM,IDNUM,,0 .ENDC .IF NB,NAMCTL $BGIN2 <NAMLST>,IDNUM,<TITLE>,NAMCTL .ENDC .ENDM $BGIN1 ; .MACRO $BEGIN IDNAM,IDNUM,TITLE,NAMCTL,NAMLST $MULBF IDNAM,<CLOSE,FCSTYP,OPEN,RDWAIT,RSTFDB,RWBLK,WTWAIT> .IF GT,R$$11M .IF GT,R$$VMS $BGIN1 IDNAM,<IDNUM'V>,<TITLE>,NAMCTL,<NAMLST> .IFF ;R$$VMS .IF GT,R$$ANI+R$$BBF .IF GT,R$$MUL $BGIN1 IDNAM,<IDNUM'M4>,<TITLE>,NAMCTL,<NAMLST> .IFF ;R$$MUL ...TMP=0 $TSTNM IDNAM,<CLOSE,FCSTYP,OPEN,RDWAIT,RSTFDB,RWBLK,WTWAIT> .IF GT,...TMP $BGIN1 IDNAM,<IDNUM'M2>,<TITLE>,NAMCTL,<NAMLST> .IFF ;...TMP $BGIN1 IDNAM,<IDNUM'M6>,<TITLE>,NAMCTL,<NAMLST> .ENDC ;...TMP .ENDC ;R$$MUL .IFF ;R$$ANI+R$$BBF ...TMP=0 $TSTNM IDNAM,<ANSPAD,ASSLUN,BIGBUF,CLOSE,CREATE,DIRECT,GET> $TSTNM IDNAM,<OPEN,POINT,PUT,RDWAIT,RETADR,RWBLK> $TSTNM IDNAM,<WATSET,WTWAIT,FCSTYP,PARSFN,RWLONG,CONTRL,WTWATD> .IF GT,...TMP $BGIN1 IDNAM,<IDNUM'M1>,<TITLE>,NAMCTL,<NAMLST> .IFF ;...TMP .IF IDN IDNAM,RSTFDB $BGIN1 IDNAM,<IDNUM'M3>,<TITLE>,NAMCTL,<NAMLST> .IFF ;IDNAM $BGIN1 IDNAM,<IDNUM'M7>,<TITLE>,NAMCTL,<NAMLST> .ENDC ;IDNAM .ENDC ;...TMP .ENDC ;R$$ANI+R$$BBF .ENDC ;R$$VMS .IFF ;R$$11M .IF GT,R$RSTS $BGIN1 IDNAM,<IDNUM'R>,<TITLE>,NAMCTL,<NAMLST> .IFF ;R$RSTS .IF GT,R$$RSL $BGIN1 IDNAM,<IDNUM'IR>,<TITLE>,NAMCTL,<NAMLST> .IFF ;R$$RSL $BGIN1 IDNAM,<IDNUM'IS>,<TITLE>,NAMCTL,<NAMLST> .ENDC ;R$$RSL .ENDC ;R$RSTS .ENDC ;R$$11M .LIST MC .ENDM $BEGIN ; ; .MACRO $END PROG .NLIST MC .ENDM $END .MACRO ASSUME A1,A2 .IF NE,<A1>-<A2> .ERROR ;A1 NOT EQUAL TO A2 .ENDC .ENDM ASSUME .MACRO CALLR SUBR JMP SUBR .ENDM CALLR ; F.BKP1 BITS USED INTERNALLY FD.WRT=1 ;ON IF THIS BUFFER HAS BEEN ALTERED FD.EOF=2 ;ON IF LAST PUT WAS AT EOF FD.EFB=4 ;ON IF THIS VBN IS THE END OF FILE BLOCK FD.EF1=10 ;SET IF DELAYED EOF REPORT FD.DVR=20 ;SET IF CREATING NEW FILE WITH DFLT VERSION FD.OER=40 ;SET /IF FAILED TO ACCESS OR ALLOCATE BUFFER FD.INV=100 ;SET IF BUFFER IS INVALID (I.E.NO BLOCK READ) FD.TRN=200 ;SET FOR AUTOMATIC TRUNCATE ON CLOSE ; F.MBFG BITS USED INTERNALLY ; GK003 FD.BGB=4 ;ON IF BIG BUFFERS IN USE ON FILE ; GK003 FD.BGD=10 ;SET TO FORCE DUMP OF BIG BUFFER (AS ; GK003 ;OPPOSED TO WAITING UNTIL IT'S FULL) ; GK003 FD.MNT=20 ;DEVICE IS MOUNTABLE, IN NEED OF ACCESS, DEACC FD.NAD=40 ;WRITE CURRENT VBN, BUT DON'T ADVANCE TO NEXT ;(USED IN WTWAIT AND WTWATD) ; N.STAT BITS USED INTERNALLY - FCSBT$ DEFINES THE REST ; THESE ARE IN THE FILE NAME BLOCK STATUS WORD NB.SMI=040000 ;SET IF SEMICOLON SEEN IN FILE NAME NB.DOT=100000 ;SET IF DOT SEEN IN FILE NAME ; BUFFER STATUS BYTE IN BUFFER HEADER - B.BFST BD.FRE=1 ;SET IF BUFFER IS AVAILABLE ; BITS IN ACCESS CONTROL WORD IN "ACCESS" QI/O DPB WI.LCK=1 ;SET TO LOCK FILE WI.DLK=2 ;SET TO ENABLE DEACCESS LOCK WI.SPL=20 ;SET FOR SPOOLING WI.UPD=100 ;SET FOR MAGTAPE UPDATE OPEN ; OTHER FCS DEFINTIONS SYDEV="SY ;DEFAULT DEVICE NAME SYUNIT=0 ;DEFAULT UNIT FOR SYSTEM DEVICE FCSEFN=32. ;DEFAULT EVENT FLAG NUMBER DIRTYP=<'D-100>*50*50+<<'I-100>*50>+<'R-100> ;.RAD50 /DIR/ TAPMIN=18. ;MINIMUM # OF BYTES/BLOCK FOR ANSI TAPE ; ; DEFINED LOW CORE ADDRESSES ; .IF EQ,R$$11M ;DEFINE THESE ONLY FOR RSX11D $DSW=0 ;DIRECTIVE STATUS WORD .FSRPT=2 ;FILE STORAGE REGION POINTER .ENDC ; FILE NAME POINTER BLOCK OFFSETS N.DVSZ=0 ;SIZE OF DEVICE NAME STRING N.DVPT=2 ;ADDRESS OF DEVICE NAME STRING N.DRSZ=4 ;SIZE OF DIRECTORY NAME STRING N.DRPT=6 ;ADDRESS OF DIRECTORY NAME STRING N.FNSZ=8. ;SIZE OF FILE NAME STRING N.FNPT=10. ;ADDRESS OF FILE NAME STRING ; PROJ, PROG CONVERSION FLAG BITS IN R4 - USED BY .PPASC, BYTASC PP.ZER=1 ;SET IF NOT SUPPRESSING LEADING ZEROS PP.SEP=2 ;SET IF NOT PUTTING BRACKETS AND COMMA ;INTO THE ASCII PPN STRING ; ATTRIBUTE CODES FOR WRITING ATTRIBUTES HA.UI=1 ;OWNERS UIC HA.FP=2 ;FILE PROTECTION CODE HA.CHU=3 ;USERS CHARACTERISTICS BYTE HA.UAT=4 ;USER RECORD ATTRIBUTES HA.NAM=5 ;FILE NAME (9 RAD50 CHARS) HA.TYP=6 ;FILE TYPE (3 RAD50 CHARS) HA.VER=7 ;FILE VERSION (BINARY) ; ; MAGTAPE READ WRITE BLOCK SIZE ATTRIBUTE CODE BL.SZ=13 ;BLOCK SIZE ; ; .NLIST MC .IIF NDF,MASS$$, .LIST