ASMB,L,R,C,F HED %ASGN 91704-16102 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM %ASGN,7 91704-16102 REV A 751205 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 *********************************************** * *%ASGN HIGH LEVEL RFA INTERFACE ROUTINE * *SOURCE PART # 91704-18102 REV A * *REL PART # 91704-16102 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 11-13-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: NOV. 1975 * ************************************************ SPC 1 SUP * * * DEFINE ENTRY POINTS * SPC 1 ENT FLPCK,FLRCK,ASGN,UASGN,STATS ENT CLASN SPC 2 * * DEFINE EXTERNALS * EXT SWLST,TSTIT,EPRIN,TYPE EXT CRLF,CWRIT,EINPT,CREAD,READR EXT M2,M3,M4,M5,M7 EXT .32,.10,B377 EXT .ENTR,ERROR,CCLOS,CCRET,COPEN EXT ABYTE,SBYTE EXT DIMFG,EXEC,MOVE,FIXNM SPC 2 * * DEFINE A AND B REG * A EQU 0 B EQU 1 SKP * * HERE ON PRINT# STATEMENT * A REG CONTAINS THE LU * NOTE....A REG MUST NOT BE LOST IF CONTROL * IS TO BE RETURN TO RTEB... * IF THE LU IS FOUND IN THE LU TABLE * CONTROL IS TRANSFERED TO CORRECT ROUTINE * OTHERWISE CONTROL IS PASSED TO RTEB TO HANDLE I/O * SPC 2 FLPCK NOP JSB FILCK CHECK IF LU MATCHES FILE RSS MATCH...CONTINUE JMP FLPCK,I NO MATCH RETURN SPC 2 * * HERE IF LU MATCHES ONE IN THE FILE TABLE * LDA TABN GET TABLE DISPLACEMENT # MPY FPTS GET DISPLACEMENT TO FILE POINTER TABLE ADA FPT GET ADDRESS OF CORRECT TABLE START STA FILC3 SAVE IN TEMP FOR SWLST JSB SWLST SWITCH LIST DEVICE FILC3 NOP JMP EPRIN GO PROCESS AS A NORMAL PRINT SPC 2 FILT1 NOP FILT2 NOP FILT3 NOP SKP * * HERE ON READ# STATEMENT * A REG CONTAINS LU * IF THE LU IS FOUND IN THE LU TABLE * CONTROL IS TRANSFERED TO CORRECT ROUTINE * OTHERWISE CONTROL IS PASSED TO RTEB TO HANDLE I/O * SPC 2 FLRCK NOP JSB FILCK CHECK IF LU MATCHES FILE RSS WE HAVE A MATCH JMP FLRCK,I NO MATCH...JUST RETURN SPC 2 * * HERE IF LU MATCHES ON A READ REQUEST * LDA TABN GET TABLE NUMBER MPY FNPS LENGTH OF FILE NAME ENTRIES ADA FNPT ADD TO START OF FILE NAME AREA STA RNAMA SAVE FOR DCB ADDRESS ON READ LDB TABN GET TABLE ENTRY AGAIN ADB FSTT GET STATUS TABLE ADDRESS STB RSTA SAVE STATUS TABLE ADDRESS LDB FREDA GET ADDRESS OF FILE READ ROUTINE STB READR SAVE FOR BASIC JMP EINPT GO PROCESS INPUT SPC 2 FREDA DEF FREAD .5 OCT 5 SKP * * ROUTINE TO DO REMOTE READS * WHEN WE COME IN * A REG = POSITIVE CHAR COUNT * B REG = BUFFER ADDRESS * FILE NAME SET UP BY FLRCK * A REG= # OF CHARACTERS RECIEVED * FREAD NOP STB RBUFA SAVE BUFFER ADDRESS CLE,ERA CONVERT TO WORD ADDRESS STA FILT1 SAVE WORD LENGTH * * HERE WE DO THE READ REQUEST * ISZ DIMFG SET FOR SPECIAL REQ JSB CREAD DEF *+6 RNAMA NOP ADDRESS OF NAME BUFFER RSTA NOP ADDRESS OF STATUS WORD RBUFA NOP ADDRESS OF BUFFER DEF FILT1 MAX LENGTH DEF FILT2 ACTUAL LENGTH * * IF END OF FILE...MOVE ZERO TO BUFFER * LDA RSTA,I GET STATUS CPA M12 -12...EOF REACHED JSB ZERO LDA FILT2 GET ACTUAL LENGTH CLE,ELA CONVERT TO BYTE LENGTH JMP FREAD,I NO...ALL OK * * HERE TO MOVE ZERO IN BUFFER * ZERO NOP LDA ZEROF GET ZERO FILL WORD LDB FILT1 GET LENGTH STB FILT2 SET LENGTH TO MAX CMB,INB NEGATE COUNT ZERO1 STA RBUFA,I SAVE WORD ISZ RBUFA GET NEXT ADDRESS INB,SZB DONE? JMP ZERO1 NO JMP ZERO,I YES...RETURN SPC 2 ZEROF OCT 30040 SPACW OCT 20040 M12 DEC -12 SKP * * HERE WE COME IF WE ARE TO WRITE ON FILE #1 * * EACH ENTRY IS 7 WORDS LONG AND IS DESCRIBED BELOW * TO EXPAND THE NUMBER OF WORDS IN EACH ENTRY, * YOU MUST CHANGE THE LABEL "TABS",WHICH IS USED * ALL OVER THE PLACE FOR INDEXING TO CORRECT STARTING * ADDRESS OF ROUTINE TABS EQU 7 LENGTH OF EACH ENTRY * NOP CURRENT BUFFER COUNT ABS 0-BUFS-BUFS+2 MAX BUFFER LENGTH OCT -2 TO TELL SWITCH LIST TO ADD 2 TO ADDRESS FOR EOL PAR. FILE1 NOP SAVE RETURN ADDRESS JSB FILWT WRITE FILE INTO A TEMP BUFFER OCT 0 DEFINE FILE BUFFER #1 (NOTE 1 LESS) FLND1 JSB FILND GO TO END OF LINE ROUTINE SPC 2 * * HERE FOR FILE #2 * NOP ABS 0-BUFS-BUFS+2 OCT -2 FILE2 NOP JSB FILWT OCT 1 FLND2 JSB FILND SPC 2 * * HERE FOR FILE #3 * NOP ABS 0-BUFS-BUFS+2 OCT -2 FILE3 NOP JSB FILWT OCT 2 FLND3 JSB FILND SPC 2 * * HERE FOR FILE #4 * NOP ABS 0-BUFS-BUFS+2 OCT -2 FILE4 NOP JSB FILWT OCT 3 FLND4 JSB FILND SKP * * HERE WHERE ALL BUFFER ROUTINES COME TO HAVE * THERE BUFFERS DUMPED TO CENTRAL * THE CALLING SEQUENCE MUST BE HELD TO OR WE IN BIG TROUBLE * * NOP CURRENT COUNT UPDATED BY SWLST * DEC -72 MAX LINE LENGTH * OCT -2 FLAG TO TELL SWITCH LIST I WILL HANDLE CRLF *FILEX NOP HERE WE COME FROM BASIC * JSB FILWT THERE WE GO TO FILL THE BUFFER * OCT X FILE BUFFER NUMBER * JSB FILND JSB FILND CRLF ROUTINE (MUST BE IN THAT LOC FOR SWLST) * * SPC 2 FILWT NOP STA FLWTB SAVE - LENGTH CLE,ELB CONVERT WORD ADDRESS TO BYTE ADDRESS STB SBYA SAVE IN SOURCE BYTE ADD. LDA FILWT GET PRAMS OF CALL ADA M2 GET TO CALLING ADDRESS STA *+2 SET FOR SWITCH LIST JSB SWLST SWITCH TO CURRENT DEVICE (SET TYPE WORD!) FLWTA NOP SET A LABEL FOR RETURN AT END OF ROUTINE UPDAT LDA FLWTB GET LENGTH CMA,INA MAKE IT POSITIVE ADA TYPE SET TYPE TO LENGTH AFTER MOVE STA TYPE CLA NEEDED FOR TSTIT JSB TSTIT SEE IF WE EXCEEDED LENGTH SZA,RSS A ZERO...EXCEEDED LENGTH JMP UPDAT YES...RESET TYPE LDA FILWT,I GET BUFFER # MPY FBPS GET STARTING ADDRESS OF CORRECT BUFFER ADA FBPT GET ACTUAL STARTING WORD ADDRESS CLE,ELA CONVERT TO BYTE ADDRESS LDB FILWT GET TO CURRENT DISPLACEMENT WITHIN ADB M5 DATA BUFFER...IT IS 5 WORDS BACK ADA B,I FROM FILWT RETURN...GET BYTE ADD IN BUFER STA DBYA SET FOR DESTINATION START BYTE ADDRESS LDA TYPE GET LENGTH IN BUFFER AFTER WRITE STA B,I RESET CURRENT COUNTER LDA SBYA GET SOURCE BYTE ADDRESS LDB DBYA GET DESTINATION BYTE ADDRESS JSB MOVE MOVE LINE FLWTB NOP LDA .32 GET A SPACE JSB SBYTE ALWAYS END WITH SPACE...TAKE CARE EVEN ODD LDB FLWTA,I GET RETURN ADDRESS JMP B,I RETURN SPC 2 SBYA NOP DBYA NOP SKP * * HERE AT END OF LINE * CALLED BY CRLF ROUTINE INDIRECTLY THROUGH FLNDX * FILND NOP LDA M2 ADA FILND LDA A,I GET FILE# JSB WRITF WRITE OUT BUFFER...A REG=0 MUST LDB CRLF GET RETURN ADDRESS JMP B,I RETURN SKP * * SUBROUTINE CALLED BY BASIC TO ASSIGN AN LU * TO A REMOTE FILE. * * CALLING SEQUENCE * CALL ASSIGN("FILENAME",LU,ERROR) * B/N TABLE ENTRY SHOULD LOOK LIKE * ASSIGN(R,I,V),SUB=ASGN * SPC 2 AFNMA NOP ALUA NOP AERRA NOP ASGN NOP JSB .ENTR GO GET PRAMS DEF AFNMA LDA AFNMA GET ADDRESS OF NAME LOCATION JSB FIXNM CHECK NAME JMP AER15 STB AFNMA SAVE ADDRESS LDA AFNMA,I GET LENGTH WORD AND B377 ADA M7 CHECK IF IN RANGE SSA,RSS JMP AER15 NOT IN RANGE LDA CM70 GET ERROR CODE LDB ALUA,I GET LU SZB,RSS LU ZERO ILLEGAL JMP AERR LDA B JSB FILCK SEE IF IT IS ASSIGNED JSB CLOSE ASSIGNED...CLOSE FILE JSB ROMCK SEE IF WE HAVE ROOM JMP AERR NO ROOM JSB ASNF HAVE ROOM ASSIGN THE FILE AERR STA AERRA,I SAVE STATUS JMP ASGN,I NO...RETURN SPC 2 CM15 DEC -15 AER15 LDA CM15 JMP AERR SKP * * SUBROUTINE TO SET ALL TABLE ENTRIES AND * EITHER OPEN OR CREATE A FILE * CALLING SEQUENCE * JSB ASNF * NORMAL RETURN * A REG = TABLE INDEX NUMBER * B REG = TABLE # 1 ADDRESS *ALUA= ADDRESS OF LU *AFNMA= FILE NAME ADDRESS * ALSO TABN MUST CONTAIN TABLE # * UPON RETURN A REG= STATUS * ASNF NOP STB FILT2 SAVE ENTRY INTO TABLE ADA FSTT GET STATUS ADDRESS STA OSTA SAVE AS OPEN STATUS ADDRESS STA CRSTA SAVE FOR CREATE STATUS ADDRESS LDA TABN GET TABLE ENTRY # MPY FNPS GET DISPLACEMENT IN NAME BUFFER ADA FNPT GET ADDRESS OF NAME STA ONAMA SAVE DCB-"NAME" ADDRESS STA CRNMA SAVE FOR CREATE AS WELL LDA AFNMA ADDRESS OF FILE NAME STA OFNAM SAVE FOR OPEN STA CRFNM SAVE FOR CREATE ISZ DIMFG SET FOR SPECIAL JSB COPEN TRY OPENING THE FILE DEF *+6 ONAMA NOP OSTA NOP OFNAM NOP DEF .0 NO SECURITY CODE DEF .0 NO LU LDA OSTA,I GET STATUS SSA,RSS ALL OK? JMP ASNF1 YES ISZ DIMFG SET FOR SPECIAL JSB CCRET NO...TRY TO CREATE IT DEF *+8 CRNMA NOP CRSTA NOP CRFNM NOP DEF FSIZE DEFINE FILE SIZE AS A FLOATING PT. NUMBER DEF .10 FILE TYPE=10 DEF .0 DEF .0 LDA CRSTA,I GET STATUS ASNF1 LDB ALUA,I GET LU SSA,RSS ALL OK? STB FILT2,I YES...SET FILE AS ASSIGNED JMP ASNF,I RETURN SPC 2 FSIZE DEC 20. MAKE IT 20 RECORDS LONG F.P. .0 OCT 0,0 RECORD SIZE 0 SKP * * FUNCTION CALL MADE BY BASIC * ROUTINE NAME STATS * B/N ENTRY SHOULD LOOK LIKE * STATUS,SUB=STATS * ROUTINE TO GET THE STATUS OF A LOGICAL UNIT * STATS NOP FIX CONVERT LU TO INTEGER STA FILT1 SAVE LU JSB FILCK SEE IF IT IS A FILE RSS YES IT IS A FILE JMP EQTST NOT A FILE DO AN EQT STATUS CALL LDA TABN GET TABLE DISPLACEMENT # ADA FSTT GET STATUS LDA A,I WE HAVE STATUS STAT1 CLB GET A ZERO IN B FLT CONVERT TO FLOATING NUMBER JMP STATS,I RETURN TO BASIC * * HERE IF EQT STATUS CHECK * EQTST JSB EXEC DEF *+4 DEF .13 DEF FILT1 LU IN THAT ADDRESS DEF FILT2 LDA FILT2 GET STATUS AND B377 MASK ALL BUT STATUS JMP STAT1 RETURN TO BASIC SPC 2 .13 DEC 13 SKP * * ROUTINE CALLED BY BASIC TO UNASSIGN AN LU * CALLING SEQUENCE * CALL UNASSGN(LU,ERROR) * B/N ENTRY SHOULD LOOK LIKE * UNASGN(I),SUB=UASGN * * ERROR WILL BE DS/1-11 * ULUA NOP USTAT NOP UASGN NOP JSB .ENTR DEF ULUA LDA ULUA,I GET LU SZA,RSS ZERO? JMP UAERR YES...ILLEGAL...ERROR JSB FILCK FIND FILE * * HERE WE CLOSE THE FILE * JSB CLOSE CLOSE FILE RSS UAERR LDA CM70 STA USTAT,I JMP UASGN,I RETURN SPC 2 SKP * * ROUTINE CALLED BY BSUPV TO UNASIGN ALL ASSIGNED * FILES. THIS ROUTINE IS CALLED TO PROTECT THE BASIC * USER FROM HIMSELF * CLASN NOP LDA ASGLA GET LU TABLE ADDRESS STA CLGN1 SAVE TABLE ADDRESS LDA MMAXF GET MAX NUMBER OF ENTRIES STA CLGN2 SAVE FOR DOWN COUNTER CLGNA LDA CLGN1,I GET LU SZA,RSS IS THERE ONE? JMP CLGNB NO...ENTRY NOT ASSIGNED...CHECK THE REST JSB UASGN IT IS ASSIGNED...UNASIGN IT DEF *+3 FAKE UNASIGN ROUTINE OUT!!! CLGN1 NOP DEF USTAT PUT STATUS BACK ON ITSELF CLGNB ISZ CLGN1 GET NEXT ENTRY ISZ CLGN2 WE DONE? JMP CLGNA NO...GET NEXT ENTRY JMP CLASN,I DONE...RETURN SPC 1 CLGN2 NOP SKP * * ROUTINE TO CHECK IF FILE MATCHES LU * A REG CONTAINS LU * B REG SAVED IF NO MATCHED * B REG=TABLE #1 ADDRESS IF ENTRY FOUND * UPON RETURN FILT2 CONTAINS - DISPLACEMENT+1 * TABN CONTAINS TABLE NUMBER -1 * FILCK NOP STB FILT1 SAVE B REG CLB GET A ZERO TO CLEAR TABLE COUNT STB TABN RESET TABLE NUMBER TO ZERO LDB MMAXF GET NUMBER OF BUFFERS STB FILT2 SAVE IN DISPLACEMENT COUNTER LDB ASGLA GET ADDRESS OF LU ASSIGNEMENT TABLE FILC1 CPA B,I IS THE LU SPECIFIED MATCHED? JMP FILCK,I YES...DO MATCH RETURN ISZ TABN INCREMENT TABLE NUMBER INB NO...GET TO NEXT ENTRY ISZ FILT2 DONE? JMP FILC1 NO LDB FILT1 YES...RESTORE B REG ISZ FILCK GET NO MATCH RETURN JMP FILCK,I RETURN SPC 1 TABN NOP SKP * * SUBROUTINE TO WRITE A RECORD ONTO A FILE * CALLING SEQUENCE * JSB WRITF * A REG= FILE # * * UPON RETURN FILT3=ADDRESS OF CURRENT LENGTH * A REG=0 TYPE AND CURRENT LENGTH SET TO ZERO * WRITF NOP STA FILT1 SAVE IN TEMP LOCATION MPY FBPS GET DISPLACEMENT IN DATA BUFFER BUFFER ADA FBPT GET STARTING ADDRESS FOR THIS DATA BUFFER STA BUFA SAVE BUFFER ADDRESS LDA FILT1 GET TABLE NUMBER MPY FNPS GET DISPLACEMENT IN NAME BUFFER ADA FNPT GET ADDRESS OF NAME BUFFER STA NAMA SAVE FOR WRITE CALL LDA FSTT GET FILE STATUS TABLE ADDRESS ADA FILT1 GET DISPLACEMENT STA STATA SAVE STATUS ADDRESS LDA FILT1 GET TABLE NUMBER MPY FPTS GET DISPLACEMENT IN ROUTINE BUFFER ADA FPT GET ADDRESS OF ROUTINE BUFFER ADA M3 GET TO LENGTH WORD STA FILT3 SAVE CURRENT LENGTH ADD LDA A,I GET LENGTH SZA,RSS IF LENGTH ZERO DON'T DO ANYTHING JMP WRT1 INA ADD ONE TO CONVERT ODD TO EVEN CLE,ERA CONVERT TO WORD ADDRESS STA FILT2 SAVE LENGTH * * HERE WE DO THE REMOTE FILE WRITE * ISZ DIMFG SET FOR SPECIAL JSB CWRIT DEF *+5 NAMA NOP STATA NOP BUFA NOP DEF FILT2 CLA GET A ZERO STA FILT3,I CLEAR COUNTS STA TYPE CLEAR COUNTS WRT1 JMP WRITF,I RETURN SKP * * SUBROUTINE CLOSE A FILE * CALLING SEQUENCE * JSB CLOSE * RETURN * A REG= FILE # * B REG=ADDRESS OF LOCATION IN TABLE #1 * FILT2 MUST BE SET TO -TABLE NUMBER+1 * WILL CLOSE FILE AND CLEAR ALL ENTRIES * AFTER FLUSHING THE BUFFER * CLOSE NOP CLA GET A ZERO FOR TABLE ENTRY STA B,I CLEAR OUT TABLE LDA TABN GET TABLE NUMBER JSB WRITF FLUSH THE BUFFER LDA NAMA GET ADDRESS OF NAME STA CNAMA SAVE FOR CLOSE REQEST LDA STATA GET STATUS ADDRESS STA CSTA SAVE STATUS JSB CCLOS CLOSE THE FILE DEF *+3 CNAMA NOP CSTA NOP LDA CSTA,I GET STATUS OF CLOSE JMP CLOSE,I RETURN SKP * * ROUTINE TO CHECK IF THERE IS ANY TABLE ROOM * CALLING SEQUENCE * JSB ROMCK * ERROR RETURN B REG=-73...NO ROOM * NORMAL RETURN * UPON RETURN A REG= TABLE NUMBER * B REG= TABLE #1 ADDRESS * ROMCK NOP LDA MMAXF GET MAX TABLE SIZE STA ROMT1 SAVE IN COUNTER CLA GET A ZERO STA TABN RESET TABLE INDEX NUMBER LDB ASGLA GET ADDRESS OF FILE TABLE ROM1 CPA B,I ZERO WORD= AVAILABLE JMP ROM2 ISZ TABN GET TO NEXT TABLE ENTRY INB GET NEXT BUFFER ADDRESS ISZ ROMT1 DONE? JMP ROM1 LDA CM73 JMP ROMCK,I NO ENTRY AVAILABLE RETURN ROM2 ISZ ROMCK GET NORMAL RETURN LDA TABN GET TABLE NUMBER JMP ROMCK,I RETURN * ROMT1 NOP CM70 DEC -70 CM73 DEC -73 SKP * * DEFINE MAX # OF FILES * THE MAX NUMBER OF FILES THAT A USER CAN OPEN * AT ANY ONE TIME IS DEFINED BY THE LABEL "MAXF". * CHANGING THE VALUE OF THIS LABEL WILL CHANGE * THE NUMBER OF FILES THAN CAN BE OPENED. ALL TABLES * WILL MODIFY THEMSELVES TO REFLECT THE CHANGE EXCEPT * THE FILE POINTER TABLE. I AM UNABLE TO AUTOMATE THE * GROWTH OF THIS TABLE AT ASSEMBLY TIME BECAUSE OF * JSB INSTRUCTIONS INTERSPECRED WITH THE CONSTANTS... * 10 POINTS FOR THE ONE WHO CAN HELP ME...L.P. * MAXF EQU 4 * * * DEFINE TABLES NEEDED * SPC 2 * * TABLE #1...LU ASSIGNMENT TABLE * THIS TABLE IS SET BY AN ASSGN CALL * AND CLEARED BY A REASSGN OR CLOSE CALL * IF THE TABLE CONTAINS A ZERO...NO LU * ASGLA DEF *+1 REP MAXF #DEFINE NUMBER OF ENTRIES NOP SPC 2 * * TABLE #2... ROUTINE TABLE * HERE WE DEFINE THE STARTING ADDRESS OF THE ROUTINE * TABLE-"FPT", AND THE LENGTH OF EACH ENTRY IN THE TABLE * -"FPTS", WHICH IS SET TO THE LENGTH OF EACH ENTRY * FPT DEF FILE1 FPTS ABS TABS SPC 2 * * TABLE #3...BUFFER TABLE * HERE WE DEFINE THE STARTING ADDRESS OF THE DATA * BUFFER AREA-"FBPT", AND THE LENGTH OF EACH DATA * BUFFER WITHIN THE AREA-"FBPS". * FBPT DEF FBF FBPS ABS BUFS SPC 2 * * TABLE #4...FILE NAME TABLE * HERE WE DEFINE THE STARTING ADDRESS OF THE * DCB-FILE NAME TABLE-"FNPT",AND THE LENGTH OF * EACH NAME ENTRY-"FNPS". THE NAME GETS PUT IN * THIS BUFFER WHEN WE DO AN OPEN OR A CREATE. * FNPT DEF NAME FNPS ABS NAMES SPC 2 * * TABLE #5...STATUS TABLE * THE NUMBER OF ENTRIES IN THIS TABLE IS DETERMINED * BY MAXF. * FSTT DEF *+1 REP MAXF NOP SPC 2 * * NEGATIVE MAX # OF ENTRIES * * MMAXF ABS 0-MAXF SKP * * FILE BUFFERS--TABLE #3 * BUFFER SIZE IS DEFINED BY "BUFS". * BUFS EQU 37 * * # OF BUFFERS IS DEFINED BY MAXF * FBF REP MAXF LABEL ON REP WILL HAVE ADD OF FIRST WORD BSS BUFS INDIVIDUAL BUFFER SIZE SPC 2 * * NAME BUFFERS--TABLE #4 * LENGTH OF EACH NAME BUFFER IS DEFINED BY "NAMES" * NAMES EQU 4 * * NUMBER OF NAME BUFFERS DEFINED BY "MAXF" * NAME REP MAXF ASC NAMES, MOVE SPACE IN NAME AREA SPC 3 END EQU * END