cdc:nos2.source:nam5871:np_recv
Table of Contents
NP$RECV
Table Of Contents
- [00012] PROC NP$RECV(NBACKTRIG)
- [00077] PROC NP$CIO
- [00079] PROC NP$N2D
- [00080] PROC NP$UPRU
- [00093] PROC PUTDISK(PUTBTRIG)
Source Code
- NP$RECV.txt
- *DECK,NP$RECV
- *IF,DEF,XFR
- USETEXT NX$ACBF
- USETEXT AIPDEF
- USETEXT HEADER
- USETEXT NP$STAT
- USETEXT NP$DB
- USETEXT NP$NWL
- USETEXT NP$MODE
- USETEXT NP$GETS
- USETEXT NX$ACBX
- PROC NP$RECV(NBACKTRIG);
- BEGIN
- #
- *1DC NP$RECV
- *
- * 1. PROC NAME AUTHOR DATE
- * NP$RECV Y. C. YIP 02/19/1985
- *
- * 2. FUNCTIONAL DESCRIPTION
- * THIS PROCEDURE ACTS AS THE RECEIVER OF A CHARACTER MODE
- * FILE TRANSFER OR OF AN INTRAHOST FILE TRANSFER.
- *
- * 3. METHOD USED
- * SET BASED ARRAY OF CHARACTER MODE BUFFER, DISKFET,
- * AND NETWORK FET TO THEIR CORRESPONDING LOCATIONS
- * RESPECTIVELY.
- * CHECK TBN FROM TBH TO SEE IF THERE IS ANY BLOCK SEQUENCE
- * ERROR.
- * IF THERE IS A BSN ERROR
- * SET NBACKTRIG TO BAD-DATA-TRIGGER
- * ELSE
- * INCREMENT TBN IN FTT
- * LOOP UNTIL NETBUF IS EMPTY
- * IF TRANSLATION IS NEEDED
- * CALL NP$N2D
- * IF MFACIL SPECIFIED
- * UPDATE PRU NUMBER BY CALLING NP$UPRU
- * ENDIF
- * ELSE
- * INTRAHOST FILE XFR (NO TRANSLATION IS NEEDED)
- * SET NETBUF EMPTY FLAG SINCE CIO BUFFER IS FILLED
- * BY THE PROCESS NP$DATA
- * ENDIF
- * CALL PUTDISK TO FLUSH THE CIO BUFFER
- * END - LOOP
- * CLEAR NETBUF EMPTY FLAG
- * RESET NETBUF FET POINTERS
- * RETURN
- *
- * 4. ENTRY CONDITIONS
- * FTTINDEX SET TO THE CURRENT FILE TRANSFER INDEX
- * IN FTT
- * NETBUF CONTAINS FILE TRANSFER DATA FILLED
- * BY A NEGETL
- *
- * 5. EXIT CONDITONS
- * DISKBUFF ARE FLUSHED
- *
- * 6. COMDECKS CALLED AND SYMPL TEXTS USED.
- * NX$ACBX, NP$NWL
- *
- * 7. ROUTINES CALLED
- * NP$CIO - PERFORMS CIO ACTIONS
- * NP$UPRU - UPDATES PRU NUMBER DURING FILE TRANSFER
- * NP$N2D - TRANSLATION SERVICE
- *
- * 8. DAYFILE MESSAGES
- * NONE
- *
- #
- #
- ****
- #
- XREF
- BEGIN
- PROC NP$CIO; # ROUTINE THAT MAKES CIO FUNCTION #
- # CALLS #
- PROC NP$N2D; # TRANSLATION SERVICE FROM NETWORK #
- PROC NP$UPRU; # PROC TO UPDATE PRU,WORD AND DBIT #
- # IN FTT #
- # DATA TO DISK DATA #
- END
- #
- ****
- #
- ITEM NBACKTRIG; # BACK TRIGGER #
- ITEM INDEX; # LOOP INDEX #
- ITEM OLDDISKIN; # OLD VALUE OF DISK IN POINTER #
- ITEM ITEMP; # INTEGER TEMPORARY #
- CONTROL EJECT;
- PROC PUTDISK(PUTBTRIG);
- BEGIN
- #
- *
- * 1. PROC NAME AUTHOR DATE
- * PUTDISK Y. C. YIP 02/19/1985
- *
- * 2. FUNCTIONAL DESCRIPTION
- * THIS PROCEDURE PERFORMS WRITE ACTION ON THE DISK
- *
- * 3. METHOD USED
- * PROC PUTDISK FIRST CALLS NP$CIO TO PERFORM A WRITE CIO
- * OPERATION WITH RECALL. IT THEN CHECKS FOR EOR AND EOI
- * FLAGS IN THE FILE TRANSFER TABLE AND CALLS NP$CIO WITH
- * WRITER AND WRITEF RESPECTIVELY IF THOSE TWO FLAGS ARE
- * SET TO TRUE. ALL CIO CALLS ARE ALSO CHECKED FOR INTERNAL
- * PROCESSING ERROR AND THE PUTBTRIG IS SET TO INTERNAL ERROR
- * TRIGGER IF THE FIELD FETEC IS NON-ZERO AFTER THE CIO CALL
- * IS MADE.
- *
- * 4. ENTRY CONDITIONS
- *
- * PUTDISK IS ONLY CALLED AFTER THE TRANSLATION SERVICE
- * IS CALLED TO MOVE DATA FROM NETBUF TO DISKBUF ACCORDING
- * TO THE DD INDICATED IN THE FTT
- * PUTBTRIG - RETURN PARAMETER
- *
- * 5. EXIT CONDITONS
- * DATA FLUSHED FROM DISKBUF TO DISK STORAGE
- * PUTBTRIG - SET TO INTERNAL ERROR TRIGGER IF THERE
- * IS ERROR ENCOUNTERED DURING THE CIO ACTIONS
- *
- * 6. COMDECKS CALLED AND SYMPL TEXTS USED.
- * NX$ACBX,NP$NWL
- *
- * 7. ROUTINES CALLED
- * NP$CIO - PERFORMS CIO ACTIONS
- *
- * 8. DAYFILE MESSAGES
- * NONE
- *
- #
- ITEM PUTBTRIG; # RETURN TRIGGER #
- BASED ARRAY COPYAREA[0:0] S(1);
- BEGIN
- ITEM WORD U(00,00,60);
- END
- CONTROL EJECT;
- # #
- # CODE OF PUTDISK BEGINS HERE #
- # #
- NP$CIO(CIO$WRITE); # CALLS NP$CIO WITH RECALL TO #
- # PERFORM A WRITE OPERATION #
- IF FETEC[0] NQ 0 # IF ERROR CODE PRODUCED DURING #
- THEN # PROCESSING THE CIO CALL #
- BEGIN
- PUTBTRIG = NRCTITR; # SET RETURN TRIGGER TO INTERNAL #
- END # TRIGGER #
- ELSE
- BEGIN
- IF CMB$NBUF[0] NQ 0 AND TBH$EORI[0] GR 0 #IF NETBUF EMPTY FLAG#
- THEN # SET AND EOR OR EOI FLAG SET #
- BEGIN
- FETLEVEL[0] = TBH$LEV[0]; # SET LEVEL NUMBER IN DISK FET #
- # TO BE THAT IN TBC #
- IF NOT FTTNOTRAN[FTTINDEX] # IF TRANSLATION NEEDED #
- THEN
- BEGIN
- IF CMB$DBIT[0] NQ (WORDLENGTH - CMB$STEP[0])
- THEN
- BEGIN
- FETIN[0] = FETIN[0] + 1; # BUMP IN POINTER OF FET #
- IF FETIN[0] EQ FETLIM[0] # IF IN POINTER EQ LIMIT #
- THEN
- BEGIN
- FETIN[0] = FETFIR[0]; # SET IN POINTER EQ FIRST PTR #
- END
- END
- END # END OF TRANSLATION NEEDED #
- IF TBH$EOI[0] # IF EOI BIT SET #
- THEN
- BEGIN
- IF (FETIN[0] NQ FETOUT[0]) OR # STUFF LEFT IN DISKFET #
- ( CMB$DBIT[0] NQ (WORDLENGTH - CMB$STEP[0]))
- THEN
- BEGIN
- FETLEVEL[0] = 0; # CLEAR FET LEVEL #
- NP$CIO(CIO$WRITER); # FLUSH BUFFER #
- END
- END
- ELSE
- BEGIN
- NP$CIO(CIO$WRITER); # CALLS NP$CIO WITH WRITER #
- END
- IF FETEC[0] NQ 0 # IF ERROR CODE EXISTS #
- THEN
- BEGIN
- PUTBTRIG = NRCTITR; # SET RETURN TRIGGER TO INTERNAL #
- # ERROR #
- END
- FETIN[0] = FETFIR[0]; # RESET IN POINTER OF DISK FET #
- FETOUT[0] = FETFIR[0]; # RESET OUT POINTER OF DISK FET #
- P<COPYAREA> = 0;
- WORD[FETIN[0]] = 0; # ZERO OUT WORD POINTED TO BY IN PTR#
- IF NOT FTTNOTRAN[FTTINDEX] # IF TRANSLATION NEEDED #
- THEN
- BEGIN
- CMB$DBIT[0] = WORDLENGTH - CMB$STEP[0]; # RESET DBIT #
- CMB$STATE[0] = 0; # CLEAR STATE #
- END
- END
- END
- RETURN; # RETURN TO CALLER #
- END # END OF PROC PUTDISK #
- CONTROL EJECT;
- # #
- # CODE OF NP$RECV BEGINS HERE #
- # #
- P<CMB> = FTTCMV$BLK[FTTINDEX]; # USING CHARACTER MODE BUFFER #
- P<FET$CIO> = FTTFETADR[FTTINDEX]; # USING DISK FET #
- P<FET$WORK> = FTTFETW[FTTINDEX]; # USING NETWORK FET #
- IF NOT FTTNOTRAN[FTTINDEX] # IF TRANSLATION NEEDED #
- THEN
- BEGIN
- P<TBH$HDR> = FETWFIRST[0]+1; # PUT TBH TEMPLATE TO SECOND WORD #
- END # ADDRESS OF DATA #
- ELSE
- BEGIN # INTRAHOST BINARY #
- P<TBH$HDR> = LOC(DATA$WORD[1]);
- END
- IF TBH$TBN[0] NQ FTTTBN[FTTINDEX] # IF SERIAL NUMBERS DO NOT#
- THEN # MATCH #
- BEGIN
- NBACKTRIG = NRCTBDA; # SET NACK TRIG TO BAD DATA TRIGGER #
- END
- ELSE
- BEGIN
- FTTTBN[FTTINDEX] = FTTTBN[FTTINDEX] + 1; # BUMP BLOCK COUNTER #
- # IN THE FTT #
- FOR INDEX = 0 WHILE CMB$NBUF[0] EQ 0
- DO # LOOP UNTIL NETBUF-EMPTY FLAG IS #
- BEGIN # FOR CMB #
- IF FTTMFACIL[FTTINDEX] # IF MFACIL SPECIFIED #
- THEN
- BEGIN
- OLDDISKIN = FETIN[0]; # SAVE OLD IN POINTER OF DISK FET #
- END
- IF NOT FTTNOTRAN[FTTINDEX] # IF TRANSLATION NEEDED #
- THEN
- BEGIN
- NP$N2D(LOC(FETWFIRST[0]),LOC(FETFIR[0]),P<CMB>);
- # CALLS TRANSLATION SERVICE #
- # ROUTINE TO TRANSLATE NETWORK8 CHAR#
- # INTO FORMAT INDICATED BY THE DD #
- IF FTTMFACIL[FTTINDEX] # IF MFACIL SPECIFIED #
- THEN
- BEGIN
- ITEMP = FETIN[0]; # REGISTER LAST VALUE OF FETIN #
- IF CMB$NBUF[0] NQ 0 AND TBH$EORI[0] GR 0
- THEN
- BEGIN # IF NETBUF EMPTY AND EOR OR EOI #
- IF CMB$DBIT[0] NQ (WORDLENGTH - CMB$STEP[0])
- THEN
- BEGIN # NO MORE ROOM FOR ONE BYTE #
- ITEMP = FETIN[0] + 1;
- END
- END
- NP$UPRU(OLDDISKIN,ITEMP); # UPDATE PRU NUMBER IN FTT #
- END
- END # END OF TRANSLATION NEEDED #
- ELSE
- BEGIN # NO TRANSLATION #
- CMB$NBUF[0] = 1; # SET NETBUF EMPTY FLAG SINCE #
- END # CIO BUFFER FILLED IN NP$DATA #
- PUTDISK(NBACKTRIG); # CALLS PUTDISK TO WRITE INFO INTO #
- # DISK #
- END
- END # END OF CORRECT TBN #
- CMB$NBUF[0] = 0; # CLEAR NETBUF EMPTY FLAG #
- FETWIN[0] = FETWFIRST[0]; # RESET IN POINTER OF NETBUF #
- FETWOUT[0] = FETWFIRST[0]; # RESET OUT POINTER OF NETBUF #
- RETURN; # RETURN TO CALLER #
- END # END OF PROC NP$RECV #
- TERM
- *ENDIF
cdc/nos2.source/nam5871/np_recv.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator