*DECK NDLWNCF USETEXT NDLFETT USETEXT NDLTBLT PROC NDLWNCF(TABLE$ID,WSA,LENGTH); BEGIN *IF,DEF,IMS # ** NDL$WNF - WRITE RECORD TO NCF * * D.K. ENDO 81/11/10 * * THIS PROCEDURE MAKES AN ENTRY IN NCF INDEX OR LINE RECORD INDEX * AND WRITES RECORD TO NCF. * * PROC NDL$WNF(TABLE$ID,WSA,LENGTH) * * ENTRY TABLE$ID = NUMBER IDENTIFYING TABLE. * WSA = FIRST WORD ADDRESS OF TABLE OR RECORD. * IF A BASED ARRAY, THE POINTER WORD ITSELF * MUST BE PASSED. * LENGTH = LENGTH IN CP WORDS OF TABLE OR RECORD. * * EXIT NONE. * * METHOD * * SELECT CASE THAT APPLIES: * CASE1(LINE RECORD) * MAKE ENTRY IN LINE RECORD INDEX. * WRITE LINE RECORD TO NCF. * CASE 2(ALL TABLES EXCEPT NCF INDEX AND LINE RECORDS): * MAKE ENTRY IN NCF INDEX. * WRITE TABLE/RECORD TO NCF. * CASE 3(NCF INDEX): * WRITE INDEX TO NCF WITH EOF. * # *ENDIF ITEM TABLE$ID; # TABLE/RECORD I.D. # ITEM WSA; # FIRST WORD ADDRESS OF TABLE/RECORD # # IF A BASED ARRAY, WSA IS THE ACTUAL # # POINTER WORD # ITEM LENGTH; # LENGTH IN CP WORDS OF TABLE/RECORD # # **** PROC NDLWNCF - XREF LIST BEGINS. # XREF BEGIN PROC SSTATS; # ALLOCATES MORE TABLE SPACE ON REQUEST # PROC RECALL; # RETURNS CONTROL WHEN RECALL BIT CLEARED # PROC WRITEF; # FLUSH BUFFER, WRITE EOF MARKER # PROC WRITER; # FLUSH BUFFER, WRITE EOR MARKER # END # **** # DEF MAXRT # 12 #; # NUMBER OF ENTRIES IN RECORD-TYPE TABLE # ARRAY RECORD$TYPE [0:MAXRT] S(1); BEGIN ITEM REC$TYPE (0,0,60) = [ , # UNKNOWN # O"7700", # FILE HEADER RECORD # , # LINE RECORD # O"1603", # NCB # O"1630", # NPU XREF TABLE # O"2010", # PHYSICAL LINK XREF # O"1414", # LOGICAL LINK XREF # O"1430", # LINE XREF TABLE # O"0430", # DEVICE XREF TABLE # O"1411", # LINE RECORD INDEX # , # NCF INDEX # ]; END SWITCH TBLJUMP , # UNKNOWN # NCF$ENTRY, # FILE HEADER RECORD # LI$ENTRY , # LINE RECORD # , # NCB # NCF$ENTRY, # NPU XREF TABLE # NCF$ENTRY, # PHYSICAL LINK XREF TABLE # NCF$ENTRY, # LOGICAL LINK XREF TABLE # NCF$ENTRY, # LINE XREF TABLE # NCF$ENTRY, # DEVICE XREF TABLE # NCF$ENTRY, # LINE RECORD INDEX # WRITE$EOF; # NCF INDEX # CONTROL EJECT; # # # CODE BEGINS HERE # # # GOTO TBLJUMP[TABLE$ID]; # # LI$ENTRY: LIWC[1] = LIWC[1] + 1; # INCREMENT INDEX WORD COUNT # IF LIWC[1] GQ LI$LENG THEN # IF NEED MORE TABLE SPACE FOR ENTRY # BEGIN SSTATS(P,20); # ALLOCATE MORE SPACE # END LIWORD[LIWC[1]] = 0; # CLEAR ENTRY WORD # LINID[LIWC[1]] = LRNID[2]; # PUT NPU NODE I.D. IN KEY # LIPORT[LIWC[1]] = LRPORT[2]; # PUT PORT NUMBER VALUE IN KEY # LIGC[LIWC[1]] = LRGC[1]; # PUT GROUP COUNT IN KEY # LIRPA[LIWC[1]] = NCFCRI[0]; # PUT SECTOR ADDRESS IN ENTRY # GOTO WRITE$EOR; NCF$ENTRY: NCFWC[0] = NCFWC[0] + 1; # INCREMENT INDEX WORD COUNT # IF NCF$LENG LS (NCFWC[0] * NCFENTSZ) + 1 THEN # IF NEED MORE TABLE SPACE FOR ENTRY # BEGIN SSTATS(P,20); # ALLOCATE MORE SPACE # END NCFWORD[NCFWC[0]] = 0; # FIRST WORD IN ENTRY # NCFRT[NCFWC[0]] = REC$TYPE[TABLE$ID]; # PUT RECORD TYPE IN KEY # NCFRL[NCFWC[0]] = LENGTH; # PUT RECORD LENGTH IN ENTRY # NCFRANINDX[NCFWC[0]] = NCFCRI[0];# PUT SECTOR ADDRESS IN ENTRY # GOTO WRITE$EOR; WRITE$EOR: NCFFIRST[0] = WSA; # POINT FET TO TABLE/RECORD # NCFIN[0] = WSA + LENGTH; NCFOUT[0] = WSA; NCFLIMIT[0] = NCFIN[0] + 1; WRITER(NCFFET,0); # WRITE TABLE/RECORD TO NCF FILE# RECALL(NCFFET); GOTO EXIT; WRITE$EOF: NCFFIRST[0] = WSA; # POINT FET TO TABLE # NCFIN[0] = WSA + LENGTH; NCFOUT[0] = WSA; NCFLIMIT[0] = NCFIN[0] + 1; WRITEF(NCFFET); # WRITE TABLE TO FILE WITH EOF # RECALL(NCFFET); EXIT: RETURN; # **** RETURN **** # END # NDLWNCF # TERM