cdc:nos2.source:nam5871:netxfr
Table of Contents
NETXFR
Table Of Contents
- [00012] PROC NETXFR(ACN,FILENAME,CODE,STATIS,NOWAIT,DATADEC,TIMEOUT,ABL,FACIL,
- [00014] NETXFR - INITIATE TRANSFER OF A FILE.
- [00019] INITIATE TRANSFER OF A FILE.
- [00139] PROC NP$STPR
- [00140] PROC NP$GET
- [00141] PROC NP$GJO
- [00143] PROC NP$SN
- [00144] PROC NP$PUT
- [00145] PROC NETWTQ
- [00146] PROC NP$ERR
- [00147] PROC NP$MSG
- [00148] PROC NP$RCL
- [00149] PROC NP$RTIM
- [00150] PROC NP$S63
- [00151] PROC NP$VALF
- [00152] PROC NP$XFR
- [00153] PROC NP$INIT
- [00154] FUNC NP$CS63 B
- [00155] FUNC NP$CDD C(10)
Source Code
- NETXFR.txt
- *DECK NETXFR
- *IF DEF,XFR
- USETEXT AIPDEF
- USETEXT NP$NWL
- USETEXT NP$GETS
- USETEXT NP$STAT
- USETEXT NP$DB
- USETEXT NP$TAA
- USETEXT NX$ACBF
- USETEXT NX$ACBX
- USETEXT NX$MSG
- PROC NETXFR(ACN,FILENAME,CODE,STATIS,NOWAIT,DATADEC,TIMEOUT,ABL,FACIL,
- BSIZE,CWS,ICKVAL);
- # TITLE NETXFR - INITIATE TRANSFER OF A FILE. #
- BEGIN # NETXFR #
- #
- ** NETXFR - INITIATE TRANSFER OF A FILE.
- *
- * NETXFR INITIATES DATA-TRANSFERS TO A REMOTE APPLICATION AND
- * UNLESS IMMEDIATE RETURN IS REQUESTED, CALLS NETXFRC UNTIL THE
- * TRANSFER IS COMPLETE.
- *
- * PROC NETXFR(ACN,FILENAME,CODE,STATIS,NOWAIT,DATADEC,TIMEOUT,
- * ABL,FACIL,BSIZE,CWS,ICKVAL
- *
- * ENTRY ACN - APPLICATION CONNECTION NUMBER.
- * FILENAME - FILE NAME TO BE TRANSFERRED, IN DISPLAY
- * CODE, 7 CHARACTERS MAXIMUM.
- * CODE = 0, FILE TO BE RECEIVED FROM THE NETWORK
- * = 1, FILE TO BE SENT TO THE NETWORK.
- * STATIS - CALLING PROGRAM REPLY STATUS WORD
- * NOWAIT = 0, RETURN FROM NETXFR CALL WHEN THE FILE
- * TRANSFER IS COMPLETED.
- * = 1, RETURN FROM NETXFR CALL IMMEDIATELY.
- * DATADEC - FORMAT OF THE DATA THAT IS TO BE
- * TRANSFERRED.
- * = 0, UH - THE FILE CONTAINS BINARY DATA
- * WITH EMBEDDED CONTROL WORDS.
- * 1, UU - THE FILE CONTAINS BINARY DATA IN
- * AN UNSTRUCTURED (NO EOR/EOFS)
- * FORMAT.
- * 2, US - THE FILE CONTAINS BINARY DATA IN
- * A STRUCTURED FORMAT.
- * 3, C6 - THE FILE CONTAINS 6-BIT DISPLAY
- * CODE DATA WITH Z-BYTE RECORDS AND
- * PHYSICAL BOUNDARIES (EOR/EOFS).
- * 4, C8 - THE FILE CONTAINS 8-BIT ASCII IN
- * 12-BIT BYTES, 5 CHARACTERS TO A
- * WORD. LINES ARE TERMINATED BY
- * Z-BYTES. PHYSICAL BOUNDAARIES MAY
- * EXIST.
- * NOTE: CODED FILES (C6 AND C8) ARE CON-
- * VERTED TO A FILE STRUCTURE KNOWN
- * INTERNALLY BY FIP AS CN. CN
- * FILES ARE 8-BIT ASCII IN 12-BIT
- * BYTES USING UNIT SEPARATOR
- * CHARACTERS FOR END OF LINES. THE
- * CN FORMAT IS HOW ALL CODED FILES
- * ARE TRANSMITTED/RECEIVED BY FIP
- * TO/FROM THE NETWORK DRIVER (NDR).
- * CN MUST NOT BE SPECIFIED BY AN
- * APPLICATION.
- * TIMEOUT - TIME IN SECONDS TO WAIT FOR A FUNCTION
- * RESPONSE BEFORE TIMING OUT.
- * ABL - APPLICATION BLOCK LIMIT.
- *
- * FACIL - OPTIONS AVAILABLE DURING DATA TRANSFER.
- *
- * CWS - CHECKMARKING WINDOW SIZE
- *
- * ICKVAL - INITIAL CHECK MARK WINDOW.
- *
- * EXIT STATIS -2 = TERMINATING.
- * -1 = INITIATING.
- * 00 = IN PROCESS.
- * 01 = COMPLETE, NO ERROR.
- * 02 = UNDEFINED ERROR.
- * 03 = CONNECTION BROKEN DETECTED. (APPLICATION
- * IS EXPECTED TO SEND CON/END/R RESPONSE.)
- * 04 = PROTOCOL ERROR.
- * 05 = TIMED OUT WAITING FOR RESPONSE FROM
- * NETWORK.
- * 06 = OUTPUT BLOCK NOT DELIVERED AFTER THREE
- * RETRIES.
- * 07 = TOO MANY FILE TRANSFERS HAVE BEEN INITIATED.
- * 08 = ACN NOT WITHIN ALLOWABLE RANGE.
- * 09 = SECOND FILE TRANSFER ATTEMPTED ON ACN.
- * 10 = CIO ERROR DETECTED.
- * 11 = PREMATURE TERMINATION RECEIVED FROM
- * REMOTE APPLICATION.
- * 12 = CONTROL WORD FORMAT ERROR.
- * 13 = INVALID DEVICE TYPE.
- * 14 = EMPTY FILE.
- * 15 = BLOCK SEQUENCE NUMBERS ARE NON-CONSECUTIVE
- * AND NOT RECOVERABLE IN N RETRIES (DEFAULT 3)
- * 16 = BLOCK LEADER NOT RECOGNIZABLE OR PRU
- * BOUNDARY VIOLATION AND NOT RECOVERABLE IN
- * N RETRIES ( DEFAULT 3 ).
- * 17 = BINARY FILE TRANSFER ON PRU CONNECTION.
- *
- *
- * PROCESS
- * VALIDATE DATA DECLARATION.
- * VALIDATE CODE.
- * VALIDATE CONNECTION NUMBER.
- * IF NUMFILEXFR LQ 4
- * THEN
- * SWITCH CONNECTION TO LIST NUMBER 1.
- * INITIALIZE THE FTT AND OPEN FILE.
- * IF NOT WAIT
- * THEN (* COMPLETE THEN RETURN *)
- * LOOP UNTIL STATUS IS COMPLETE OR ERROR OCURRED
- * IF STATE[FTTINDEX] IS STATEX (* CIO NOTOCOMP *)
- * AND STORD[FTTINDEX] IS NOT FOR PRU
- * THEN
- * RECALL (NP$RCL).
- * REVALIDATE THE FILE.
- * ELSE
- * IF S BIT IS ON
- * GET THIS SM.
- * ELSE
- * CALL NETWAIT FOR CONTINUING FILE TRANSFER.
- * END OF LOOP
- *
- * ELSE (* RETURN TO APPLICATION *)
- * RETURN.
- *
- *
- * RETURN.
- *
- * NOTE - AN OVERLAY WHICH REFERENECES THIS MODULE MUST REMAIN
- * IN CM UNTIL ALL FILE TRANSFERS ARE COMPLETE.
- *
- #
- XREF
- BEGIN
- PROC NP$STPR ; # STATE TABLE PROCESSOR #
- PROC NP$GET; # GET SUPERVISORY MESSAGE #
- PROC NP$GJO ; # GET ORIGIN OF JOB #
- *IF DEF,STAT,1
- PROC NP$SN ; # STATISTIC PROCESSOR #
- PROC NP$PUT; # NETPUT SWH/LST/R MESSAGE #
- PROC NETWTQ; # TRANSFER FILE THR. QUICK NETWAIT#
- PROC NP$ERR ;
- PROC NP$MSG; # SEND MESSAGE TO DAYFILE #
- PROC NP$RCL ; # TO DO RECALL #
- PROC NP$RTIM ;
- PROC NP$S63 ;
- PROC NP$VALF ;
- PROC NP$XFR ;
- PROC NP$INIT;
- FUNC NP$CS63 B;
- FUNC NP$CDD C(10) ; # CONVERT INTEGER TO DISPLAY CODE #
- END
- LABEL RETURNX ;
- LABEL SENDMSG ;
- ITEM ACN I; # APPLICATION CONNECTION NUMBER #
- ITEM FILENAME C(7); # FILE NAME #
- ITEM CODE I; # OPERATION CODE #
- ITEM STATIS I; # CALLER-S STATUS WORD #
- ITEM NOWAIT B; # RETURN ASAP FLAG #
- ITEM DATADEC I; # DATA DECLARATION #
- ITEM TIMEOUT I; # TIME TO WAIT FOR RESPONSE #
- ITEM ABL I; # APPLICATION BLOCK LIMIT #
- ITEM FACIL C(10) ;
- ITEM BSIZE U; # BLOCK SIZE FOR TRANSMITTING #
- ITEM CWS U; # CHECK MARK WINDOW SIZE #
- ITEM ICKVAL U; # INITIAL CHECKMARK VALUE #
- ITEM I ;
- ITEM SCRATCH ;
- ITEM LOOPI; # LOOP INDEX #
- ITEM FACODE; # FACILITY CODE #
- ITEM INDEX I ; # LOCAL INDEX OF THE FTT ENTRY #
- CONTROL EJECT;
- *IF DEF,STAT,1
- NP$SN(TYPE"XFR"); # KEEP STATISTIC COUNT #
- #
- * IF THIS IS THE FIRST TIME APPLICATION CALL NETXFR ( TIME$UP
- * IS ZERO ), THEN CHECK FOR THE CHARACTER SET OF APPLICATION.
- * FUNCTION NP$CS63 IS BOOLEAN FUNCTION, VALUE IS SET AT ASSEMBLY
- * TIME. IF CHARACTER SET 63 IS USED FOR APPLICATION, NP$CS63 IS
- * TRUE.
- #
- IF TIME$UP EQ 0
- THEN
- BEGIN # FIRST TIME XFR INITIATED #
- NP$RTIM(TIME$WORD) ; # TAKE CURRENT TIME #
- TIME$UP = TIME$SEC[0] ;
- IF NP$CS63
- THEN
- NP$S63 ; # RESET THE CHARACTER SET FOR TRANSLATION #
- END # FIRST TIME XFR INITIATED #
- P<STATUSWORD> = LOC (STATIS);
- NET$AWL$XFR = 0 ; # CLEAR THE FLAG #
- NP$XFR ; # SEND XFR WORKLIST FOR VALIDA#
- IF NET$AWL$XFR EQ 0
- THEN
- BEGIN # APPL. IS NOT VALIDATED TO CALL #
- STATUSWD = XFRNOTALLOW ; # NETXFR #
- GOTO SENDMSG ;
- END
- IF IDLEDOWN
- THEN
- BEGIN # GRADUALLY IDLE-DOWN #
- STATUSWD = DISABLE ; # ALLOW NO MORE TRANSFERRING #
- GOTO SENDMSG ;
- END # RETURN TO APPLICATION #
- STATUSWD = INITIAT ; # ASSUMING EVERYTHING IS O.K. #
- IF DATADEC LS MINDD OR
- DATADEC GR MAXDD
- THEN
- BEGIN # INVALID DATA DECLARATION #
- NP$ERR("46") ; # WRITE DAYFILE MSG, ABORT THE C.P. #
- END
- IF CODE LS RECEIVE OR
- CODE GR SEND
- THEN
- BEGIN # INVALID CODE #
- NP$ERR("47") ; # WRITE DAYFILE MSG, ABORT THE C.P. #
- END
- NP$GJO(I) ; # GET THE ORIGIN OF JOB #
- IF I EQ JOT$TXOT # INTERACTIVE JOB TYPE #
- AND FILENAME EQ "INPUT" # FILE NAME IS INPUT #
- THEN
- BEGIN # JOB TYPE AND FILE NAME CAN NOT #
- STATUSWD = ILL$JOT ; # BE TRANSFERRED #
- GOTO RETURNX ;
- END
- IF ACN LS MINIACN
- OR ACN GR MAXIACN
- THEN
- BEGIN # ACN OUT OF RANGE #
- STATUSWD = ACN$NWR ; # REYURN STATUS BACK TO APPL. #
- GOTO RETURNX;
- END
- IF ABL LQ 0
- OR ABL GR ABLLIMIT
- THEN
- BEGIN # ABL NOT IN THE RANGE #
- STATUSWD = ABL$ERR ;
- GOTO RETURNX;
- END
- P<FACILTEST> = LOC(FACIL); # PULL TEMPLATE TO FACIL WORD #
- FACODE = B<0,6>FACILITY; # GET FIRST FACILITY CODE #
- FOR LOOPI = 6 STEP 6 WHILE ((FACODE NQ BLANK) AND (FACODE NQ 0))
- DO
- BEGIN
- IF FACODE NQ SFACIL AND # NOT -S- FACILITY #
- FACODE NQ RFACIL AND # NOT -R- FACILITY #
- FACODE NQ MFACIL # NOT -M- FACILITY #
- THEN
- BEGIN
- STATUSWD = BAD$FAC; # BAD FACILITY CODE USED #
- FACILWD[0] = 0; # CLEAR BIT MASK #
- GOTO RETURNX; # EXIT #
- END
- ELSE
- BEGIN
- B<FACODE,1>FACILWD[0] = 1; # SET FLAG FOR FACILITY CODE #
- FACODE = B<LOOPI,6>FACILITY; # EXTRACT NEXT FACILITY CODE #
- END
- END
- IF DATADEC GQ C6
- THEN
- BEGIN
- IF BSIZE LQ 0
- OR BSIZE GR IVT$MAX$BSZ
- THEN
- BEGIN # ERROR IN BLOCK SIZE #
- STATUSWD = BSXALOW ; # BLOCKSIZE NOT IN RANGE #
- GOTO RETURNX;
- END # ERROR IN BLOCK SIZE #
- END # IVT MODE #
- ELSE
- BEGIN # PRU MODE #
- IF BSIZE NQ ONE$PRU
- AND BSIZE NQ TWO$PRU
- AND BSIZE NQ THREE$PRU
- THEN
- BEGIN # BSIZE IS NOT 1,2 OR 3 PRU #
- STATUSWD = BSXALOW ;
- GOTO RETURNX;
- END
- END # PRU MODE #
- IF CWS LS 1 OR CWS GR MXCWS # IF CWS OUT OF RANGE #
- THEN
- BEGIN
- STATUSWD = ILL$CWSZ;
- GOTO RETURNX;
- END
- IF ICKVAL LS 0 OR ICKVAL GR MXICKVAL # IF ICKVAL OUT OF RANGE #
- THEN
- BEGIN
- STATUSWD = ILL$ICKZ;
- GOTO RETURNX;
- END
- IF NUMFILEXFR LS MAXFILEXFR
- THEN
- BEGIN # INITIATE A FILE TRANSFER #
- NUMFILEXFR = NUMFILEXFR + 1 ;
- LASTXFRACN = ACN ;
- #
- * INITIATE THE FILE TRANSFER.
- #
- IDFM$LFN[INITIAT] = FILENAME ;
- NP$MSG(IDFM$MSG[INITIAT],XFRDTYPE);
- NP$INIT(ACN,FILENAME,CODE,STATUSWORD,DATADEC,TIMEOUT,ABL,
- BSIZE,CWS,ICKVAL) ;
- INDEX = FTTINDEX ; # LOCAL INDEX FOR THIS FTT ENTRY #
- IF STATUSWD NQ INITIAT
- THEN
- GOTO RETURNX; # ERROR FOUND DURING INITIALIZATION #
- #
- * SWITCH THIS CONNECTION ONTO LIST 1.
- #
- LST$ACN[0] = ACN;
- LST$NLIST[0] = XFR$LIST ;
- OUT$ABHTLC[0] = 1 ;
- LOC$HA = LOC(OUT$ABH) ;
- LOC$TA = LOC(LST$SWH) ;
- OPCODE = OP$PUT ;
- *IF DEF,STAT,1
- IAM = TYPE"PUT" ;
- NP$PUT ; # NETPUT LST/SHW TO SWITCH TO LIST 1 #
- #
- SWITCHING ICT OF THIS CONN. TO CHARACTER TYPE 2.
- #
- DC$ACN[0] = ACN ;
- DC$ACT[0] = CT8ASCII ;
- LOC$HA = LOC(OUT$ABH) ;
- LOC$TA = LOC(DC$CICT) ;
- NP$PUT ;
- #
- CALL STATE TABLE PROCESSOR FOR APPROPRIATE INITIAL ACTION
- ( EFFECTED PRU MODE ONLY )
- #
- NP$STPR(FTTINDEX,NSPTOCM,0) ;
- IF NOT NOWAIT
- THEN
- BEGIN # COMPLETE THIS FILE TRANSFER AND CONTINUE ALL OTHERS #
- FOR I = I WHILE STATIS LQ IN$PROG
- DO
- BEGIN
- FTTINDEX = INDEX ; # RESET THE LOCAL INDEX OF FTT #
- IF FTTSTATE[FTTINDEX] EQ STATX
- THEN
- BEGIN # CIO OUTSTANDING #
- NP$RCL(CIOCALL);
- NP$VALF ; # RE-VALIDATE THE FILE #
- END # CIO OUTSTANDING #
- ELSE
- BEGIN # OK, PROCEED XFR #
- IF (SD$FLAG NQ 0) OR # SUP MSGS QUEUED IN NIP #
- (HEAD NQ FOOT) # SUP MSGS QUEUED IN AIP #
- THEN
- BEGIN # GET SUPERVISORY MESSAGE #
- ACLN = 0 ; # ACN = 0 #
- LOC$HA = LOC(DATA$WORD[0]);# HEADER LOCATION #
- LOC$TA = LOC(DATA$WORD[1]);# TEXT LOCATION #
- TLMX = MXIVT$SIZE ; # TEXT LENGTH #
- OPCODE = OP$GET ; # OPCODE IS GET #
- NWL[NEXT] = 0 ; # CLEAR THE NWL OPCODE #
- NWL$TA[NEXT] = LOC$TA ;
- BS = OPABHSIZ ;
- NP$GET ;
- END # GET SUPERVISORY MESSAGE #
- IF XFR$COM # IF FILE XFR COMPLETED #
- THEN
- BEGIN
- XFR$COM = FALSE; # RESET FLAG TO FASLE #
- END
- ELSE
- BEGIN
- NETWTQ(TIMEOUT,0); # QUICK NETWAIT OTHERWISE #
- END
- END
- END
- END
- ELSE
- BEGIN # RETURN CONTROL TO APPLICATION #
- STATUSWD = IN$PROG ;
- GOTO RETURNX ;
- END # CONTINUE FILE TRANSFER LATER #
- END
- ELSE
- BEGIN
- STATUSWD = GTMAXFR ;
- RETURNX:
- IDFM$LFN[STATUSWD] = FILENAME ;
- SENDMSG:
- NP$MSG(IDFM$MSG[STATUSWD],XFRDTYPE); # DAYFILE MESSAGE #
- END
- RETURN;
- END # NETXFR #
- TERM
- *ENDIF
cdc/nos2.source/nam5871/netxfr.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator