cdc:nos2.source:nam5871:lfgmain
Table of Contents
LFGMAIN
Table Of Contents
- [00007] LFG MAIN ROUTINE
Source Code
- LFGMAIN.txt
- *DECK LFGMAIN
- USETEXT LFGDIR,LFGIOD,LFGDB,LFGFN
- PROC LFGMAIN;
- BEGIN
- *IF DEF,IMS
- #
- ** LFGMAIN - LFG MAIN ROUTINE
- *
- * M. E. VATCHER 81/02/18
- *
- * THIS PROC CONTAINS THE LFG MAIN LOOP. EACH INPUT FILE ON THE
- * LFG CONTROL CARD IS PROCESSED.
- *
- * PROC LFGMAIN
- *
- * ENTRY NONE.
- *
- * EXIT NONE.
- *
- * METHOD
- *
- * FOR EACH INPUT FILE ON THE LFG CONTROL CARD
- * FOR EACH FILE IN THIS LFN (WHILE NOT EOI)
- * GET LOAD PARTITION NAME AND TYPE
- * WHILE NOT END OF PARTITION (EOP)
- * READ A HEADER RECORD
- * IF IT IS A PICB
- * THEN
- * REFORMAT PICB
- * BREAK OUT OF "WHILE NOT EOP" LOOP
- * FILL READ BUFFER
- * WHILE NOT EOR
- * READW TO WORKING BUFFER
- * MOVE AND SHIFT WORDS TO WORKING BUFFER FOR WRITE
- * CALCULATE CHECKSUM
- * ADD SM HEADER AND WRITE MESSAGE TO NLF
- * SEND SUMMARY LISTING LINE
- * SKIP TRAILER RECORDS
- * WRITE DIRECTORY
- *
- #
- *ENDIF
- #
- **** PROC LFGMAIN - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- ITEM IFET U; # INPUT FILE FET #
- ITEM NLF U; # NETWORK LOAD FILE FET #
- ITEM OUTPUT U; # FWA OF OUTPUT FILE FET #
- PROC LFGCKSM; # COMPUTE CHECKSUM #
- PROC LFGCRAK; # CRACK CONTROL CARD #
- PROC LFGGFN; # GET FILE NAMES FOR REFORMATTING #
- PROC LFGGPN; # GET PARTITION NAME #
- PROC LFGHDRW; # ADD SM HEADER AND WRITE TO NLF #
- PROC LFGLHDR; # SEND SUMMARY LISTING HEADER #
- PROC LFGMOVW; # MOVE AND SHIFT 16 BIT WORDS #
- PROC LFGNLFH; # WRITE HEADER RECORD TO NLF #
- PROC LFGRDER; # READ ERROR PROCESSOR #
- PROC LFGRDHR; # READ HEADER RECORD #
- PROC LFGRDSR; # READ SEQUENTIAL RECORD #
- PROC LFGREFP; # REFORMAT PICB #
- PROC LFGSKIP; # SKIP TRAILER RECORDS #
- PROC LFGSSLL; # SEND SUMMARY LISTING LINE #
- PROC LFGWRD; # WRITE DIRECTORY TO NLF #
- PROC MESSAGE; # SEND MESSAGE TO DAYFILE #
- PROC READW; # READ WORDS FROM CIO BUFFER #
- PROC WRITEC; # WRITE LINE TO CIO BUFFER #
- PROC WRITER; # WRITE RECORD #
- FUNC XCDD C(10); # CONVERT INTEGER TO DECIMAL DISPLAY CODE #
- FUNC XSFW C(10); # SPACE FILL WORD #
- END
- #
- ****
- #
- DEF DEF$BC # 64 #; # DEFAULT BATCH COUNT VALUE #
- DEF SYSLOC # 0 #; # MESSAGE TO SYSTEM AND LOCAL DAYFILES #
- CONTROL PRESET;
- CONTROL NOLIST; # LFGSTAN COMMON DECK #
- *CALL LFGSTAN
- CONTROL LIST;
- ITEM BEGADDR U; # BEGINNING ADDRESS #
- ITEM BPOS U; # BIT POSITION COUNTED FROM LEFT #
- ITEM CKSM U; # CHECKSUM #
- ITEM EOI B; # END OF INFORMATION INDICATOR #
- ITEM EOP B; # END OF PARTITION INDICATOR #
- ITEM FRST$REC B; # FLAG INDICATING 1ST RECORD IN PARTITION #
- ITEM FOUTR B; # FIRST OUTPUT RECORD OF PARTITION #
- ITEM I U; # LOOP INDEX #
- ITEM IW60 U; # NUMBER OF 60 BIT WORDS MOVED #
- ITEM J U; # LOOP INDEX #
- ITEM K U; # LOOP INDEX #
- ITEM LPAK U; # 16 BIT WORDS IN LAST PACKET #
- ITEM MRES B; # MEMORY RESIDENT INDICATOR #
- ITEM NP B; # NEW PARTITION INDICATOR #
- ITEM NPAK U; # NUMBER OF PACKETS (MESSAGES) #
- ITEM NWDS16 U; # 16 BIT WORDS IN CURRENT PACKET #
- ITEM ON U; # OVERLAY NAME IN ASCII #
- ITEM PICBF B; # PICB FLAG #
- ITEM PN C(6); # PARTITION NAME #
- ITEM PRC U; # PARTITION RECORD COUNT #
- ITEM RC U; # INPUT RECORD COUNT #
- ITEM STATIS;
- ITEM SUCCESS B;
- ITEM TEMP C(10);
- ITEM WC U; # WORD COUNT OF 16 BIT WORDS #
- ITEM WPOS; # WORD POSITION FOR SHIFTING #
- ARRAY LFGCOMP [0:0] S(2);
- BEGIN
- ITEM LFGCOMP1 C(0,0,14) =
- [" LFG COMPLETE."];
- ITEM LFGCOMPZ U(1,24,36) = [ 0 ];
- END
- ARRAY MEMIN [0:27] S(1);
- BEGIN
- ITEM INBUF U;
- END
- CONTROL EJECT;
- PROC ERRCHECK(SUCCESS);
- BEGIN
- XREF
- BEGIN
- PROC ABORT;
- PROC MESSAGE;
- END
- ITEM SUCCESS B;
- ARRAY LFGERR [0:0] S(2);
- BEGIN
- ITEM LERR C(0,0,12) = [" LFG ERRORS."];
- ITEM LZ U(1,12,48) = [ 0 ];
- END
- IF NOT SUCCESS
- THEN
- BEGIN
- MESSAGE(LFGERR,SYSLOC); # *LFG ERRORS.* #
- ABORT;
- END
- END
- CONTROL EJECT; # LFGMAIN CODE STARTS HERE #
- BC$VAL = DEF$BC; # SET DEFAULT BATCH COUNT VALUE #
- FIRST$PAGE = TRUE; # SET FIRST PAGE FLAG #
- LFGCRAK;
- LFGNLFH; # WRITE HEADER RECORD TO NLF #
- LFGGFN(FN,NUMIFILE); # GET FILE NAMES #
- # INITIALIZE DIRECTORY #
- P<DIR> = LOC(DIRB$WORD[0]) + 15;
- DIR$ID[0] = DIR$IDENT; # SET DIRECTORY IDENTIFIER #
- DIR$ZERO[0] = 0;
- DIR$FID[0] = "NLF";
- DIR$WC[0] = 0; # INITIALIZE DIRECTORY LENGTH #
- # SEND SUMMARY LISTING HEADER #
- PAGEN = 1; # INITIALIZE PAGE NUMBER #
- PARTNUM = 0; # CLEAR PARTITION COUNT #
- LFGLHDR(SUM$LST);
- # LFG MAIN LOOP #
- FOR LFN = 1 STEP 1 UNTIL NUMIFILE DO
- BEGIN
- FOR I = 1 STEP 1 UNTIL LFN - 1 DO
- BEGIN # SKIP OVER DUPLICATE FILE NAMES #
- IF FNAME[I] EQ FNAME[LFN]
- THEN
- TEST LFN;
- END
- C<0,7>IFET = C<0,7>FNAME[LFN]; # PUT FILE NAME IN FET #
- EOI = FALSE;
- FOR FILENUM = 1 STEP 1 WHILE NOT EOI DO
- BEGIN
- LFGGPN(PN,RC,MRES,ON,EOI,SUCCESS); # GET PARTITION NAME #
- ERRCHECK(SUCCESS);
- IF EOI
- THEN
- TEST FILENUM;
- EOP = FALSE; # NOT END OF PARTITION #
- FRST$REC = TRUE; # FIRST RECORD IN PARTITION #
- FOUTR = TRUE; # FIRST OUTPUT RECORD, CLEARED BY HDRWRT #
- NP = TRUE; # THIS IS A NEW PARTITION #
- FOR I = 1 STEP 1 WHILE NOT EOP DO
- BEGIN # WHILE NOT END OF PARTITION #
- LFGRDHR(PICBF,WC,BEGADDR,SUCCESS); # READ HEADER RECORD #
- ERRCHECK(SUCCESS);
- IF PICBF AND FRST$REC
- THEN # THIS IS A PICB #
- BEGIN
- LFGREFP(PN,WC,SUCCESS,DIR);
- ERRCHECK(SUCCESS);
- PRC = 1; # ONLY ONE RECORD IN PICB #
- EOP = TRUE;
- TEST I;
- END
- FRST$REC = FALSE; # CLEAR FIRST RECORD FLAG #
- LFGRDSR(LOC(IFET),STATIS);
- IF STATIS NQ RDEOR AND STATIS NQ RDBFULL
- THEN
- BEGIN
- LFGRDER(STATIS);
- SUCCESS = FALSE;
- ERRCHECK(SUCCESS); # ***** ABORT ***** #
- END
- NPAK = WC/105; # CALCULATE NUMBER OF MESSAGES #
- LPAK = WC - 105*NPAK; # 16 BIT WORDS IN LAST MESSAGE #
- IF LPAK NQ 0
- THEN
- NPAK = NPAK + 1;
- NWDS16 = 105;
- FOR J = 1 STEP 1 UNTIL NPAK DO
- BEGIN
- IF J EQ NPAK AND LPAK NQ 0
- THEN # LAST MESSAGE FROM THIS INPUT RECORD #
- NWDS16 = LPAK;
- READW(IFET,MEMIN,28,STATIS);
- LFGCKSM(LOC(MEMIN),59,NWDS16,CKSM);
- IF MRES
- THEN
- BEGIN
- BPOS = 36; # BIT POSITION COUNTED FROM THE LEFT #
- WPOS = 2; # WORD POSITION OF DATA IN MESSAGE #
- END
- ELSE # OVERLAY #
- BEGIN
- BPOS = 4; # BIT POSITION #
- WPOS = 2; # WORD POSITION #
- END
- LFGMOVW(0,WPOS,BPOS,NWDS16,IW60,CKSM,MEMIN);
- IF I EQ RC AND J EQ NPAK
- THEN # LAST MESSAGE OF PARTITION #
- EOP = TRUE;
- LFGHDRW(PN,PN,IW60,NWDS16,NP,MRES,EOP,BEGADDR,PRC,SUCCESS,
- ON,J,NPAK,BC$VAL,DIR);
- ERRCHECK(SUCCESS);
- END # GET NEXT 28 WORDS #
- END # GET NEXT HEADER RECORD #
- LFGSSLL(PN,PRC); # SEND SUMMARY LISTING LINE #
- LFGSKIP; # SKIP TRAILER RECORDS #
- END # GET NEXT PARTITION NAME #
- END # GET NEXT LFN #
- LFGWRD; # WRITE DIRECTORY TO NLF #
- IF LISTFLG # IF LISTING IS REQUESTED #
- THEN
- BEGIN
- WRITER(OUTPUT); # FLUSH CIO BUFFER FOR OUTPUT FILE #
- END
- MESSAGE(LFGCOMP,SYSLOC); # *LFG COMPLETE.* #
- END TERM
cdc/nos2.source/nam5871/lfgmain.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator