*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 = 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 = FTTCMV$BLK[FTTINDEX]; # USING CHARACTER MODE BUFFER # P = FTTFETADR[FTTINDEX]; # USING DISK FET # P = FTTFETW[FTTINDEX]; # USING NETWORK FET # IF NOT FTTNOTRAN[FTTINDEX] # IF TRANSLATION NEEDED # THEN BEGIN P = FETWFIRST[0]+1; # PUT TBH TEMPLATE TO SECOND WORD # END # ADDRESS OF DATA # ELSE BEGIN # INTRAHOST BINARY # P = 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); # 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