*DECK HPUTF USETEXT NIPDEF USETEXT ACB USETEXT APPSTAT USETEXT AT USETEXT AWLNTRY USETEXT DRHDR USETEXT FLIST USETEXT FREETAB USETEXT MEM USETEXT NP$TAA USETEXT NWLHEAD USETEXT NWLNTRY USETEXT OVERLAY USETEXT PARAMP USETEXT PARAMS USETEXT PT PRGM HPUTF; # PROCESS NETPUTF REQUEST # STARTIMS; # *1DC HPUTF * * 1. PROC NAME AUTHOR DATE * HPUTF P.C.TAM 77/05/11 * * 2. FUNCTIONAL DESCRIPTION. * USE TEXT ARRAY PROVIDED BY APP TO READ TEXT INTO NWL FOR * HPUTBLK * * 3. METHOD USED. * EDIT NA, SIZE FIELDS OF NWL. * GET BUFFER BIG ENOUGH FOR FLHEAD, DATA BLOCK AND REST OF * NWL. * SET UP FLHEAD AND FLENTRIES FOR SF.LIST IN OLD NWL. * CALL SF.LIST * IF EVERYTHING IS OK, COPY REST OF NWL OVER. * * 4. ENTRY PARAMETERS. * ACBADDR APPLICATION"S ACB * WLADDR WORKLIST ENTRY * * 5. EXIT PARAMETERS. * DONE TRUE * PARAMS1 REASON,IF LGL/ERR * ACBUCPFSNS TRUE,IF NOT ENOUGH SPACE FOR MESSAGE. * ACBUCPFSSO TRUE,IF SFREAD RC IS RCSWAPPEDOUT * PARAMP1 FLAG TO INDICATE IF VALID NETPUTF REQUEST * = 0 IF INVALID REQUEST. * = 1 IF VALID REQUEST * * 6. COMDECKS CALLED AND SYMPL TEXTS USED. * ACB APPSTAT AT DRHDR * FLIST FREETAB MEM NIPDEF NP$TAA * PT NWLHEAD NWLNTRY OVERLAY PARAMS * PARAMP1 BUFFER FOR PASSING PARAMETERS FROM PRI OVL * * 7. ROUTINES CALLED. * HLGLERR OVL ISSUE ERR/LGL SUP MSG * HRELWWL RELEASE WHOLE NWL * XCTLW CALCULATE TEXT LENGTH FROM TLC, ACT. * MGETS ALLOCATE BUFFER SPACE * OMOVE COPY INFORMATION * OSCCALL SCP CALL * OSCHAPP SCHEDULE APPLICATION * MRELS RELEASE FREE BUFFER SPACE * XTRACE RECORD PROCEDURE CALLS * * 8. DAYFILE MESSAGES. NONE # STOPIMS; XREF BEGIN PROC XCTLW; #CALCULATE TEXT LENGTH FROM TLC # PROC HRELWWL; # RELEASE WHOLE NWL # PROC MGETS; #ALLOCATE BUFFER SPACE # PROC OMOVE; # COPY INFORMATION # PROC OSCCALL; #SCP CALL # PROC OSCHAPP; #SCHEDULE APPLICATION # PROC MRELS; #RELEASE FREE BUFFER SPACE # PROC OVLCALL; #OVERLAY SUBROUTINE # PROC XTRACE; LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL TO RETURN TO # END ITEM LENGTH I, TXTLN1 I, TXTLN2 I, SIZE I, BUFADDR U, LEFT I, TMP I, I I, START0 U, START1 U; BEGIN #NWL FOR NETPUTF # CONTROL IFEQ DEBUG,1; XTRACE("HPUTF") ; CONTROL FI; CONTROL OVERLAP; DONE = FALSE; # PRESET STATUS # P = ACBADDR; # ESTABLISH ADDRESS. # P = WLADDR; # # P = WLADDR + FLSIZE; P = 0; TMP = 0; LENGTH = 0; XCTLW(NWLEABH,TXTLN1); TXTLN2 = TXTLN1; FOR I = 1 STEP FLESIZE UNTIL NWLELTAA #GET ACTUAL SIZE # DO # GET ACTUAL SIZE OF TEXT FROM TAA DESC. # BEGIN # AND CHECK IF EACH FRAGMENT SIZE GR 63 # LENGTH = LENGTH + TAASIZE[I]; IF TAASIZE[I] GR 63 THEN TMP = 1; END IF (LENGTH GQ TXTLN1) AND # TEXT LENGTH ACTUAL LS BUFFER # (TMP NQ 1) AND # SIZE FRAGMENTS LS 63 # (NWLELTAA LQ MAXNA) # NO OF TA ENTRIES LS 40 # THEN BEGIN MGETS(ACBWLLWA[0]-WLADDR+TXTLN1, # GET BUFFER SPACE # BUFADDR, FALSE); # FOR DATA BLOCK # MGETS(NWLEBS[0], START0, TRUE); # GET BUF FOR FLIST.# SIZE = BLKBS[BUFADDR]; #SAVE THE SIZE OF B# MEMORY[BUFADDR] = MEMORY[WLADDR]; # AIP HEAD # MEMORY[BUFADDR+AIPHSIZE] = MEMORY[WLADDR+AIPHSIZE]; # PREPARE FL HEADER FOR SF.LIST CALL # P = START0; FLID = FLIDVALUE; #SF.FUNCTION BLK ID# FLAN = ACBAN[0]; FLJOBID = ACBJNWD[0]; #FILL 3RD WORD # FLSCPA = START0 + FLSIZE; # CALCULATE SCP ADDR# FLFC = SFLIST; #FUNCTION CODE # P = FLSCPA; P = WLADDR + FLSIZE; FOR I = 0 STEP FLESIZE WHILE TXTLN2 GR 0 DO #LOOP TO FILL # BEGIN #SF.READ ENTRIES # FLEFC[I] = SFREAD; FLEFP[I] = TAASIZE[I+1]; FLEUCPA[I]= TAADDR[I+1]; FLESCPA[I]= BUFADDR + AIPHSIZE + ABHSIZE + TXTLN1 - TXTLN2; TXTLN2 = TXTLN2 - TAASIZE[I+1]; END FLEFP[I-1] = FLEFP[I-1] + TXTLN2; FLFP = I; P = START0 + FLHSIZE; OSCCALL(FLE); #CHECK FOR NORMAL # IF FLRC NQ 0 #COMPLETION # THEN BEGIN IF FLRC EQ RCSWAPPEDOUT #USER JOB SWAPPED # THEN #SET APP. SWP OUT # BEGIN #BIT, SCHEDULE # ATASBS[ACBAN[0]] = TRUE; #APPLICATION # OSCHAPP(ACBADDR); END ELSE IF FLRC EQ RCUCPAOOR #UCPA OUT OF RANGE # THEN ABTAPPF = XFLERR; ELSE FAILADR = ACBADDR; #OTHER SCP ERROR # BLKBS[BUFADDR] = SIZE; # RESTORE ORIGINAL BUFFER SIZE # MRELS(BUFADDR); MRELS(START0); END ELSE #SCP REQUEST COMP. # BEGIN MRELS(START0); DONE = TRUE; #COPY REST OF NWL # BLKBS[BUFADDR] = TXTLN1 + AIPHSIZE + ABHSIZE; MSIZE = ACBWLLWA[0] - WLADDR - AIPHSIZE - ABHSIZE - NWLELTAA[0]; MNEW = BUFADDR + BLKBS[BUFADDR]; MOLD = WLADDR + AIPHSIZE + ABHSIZE + 1 + NWLELTAA[0]; OMOVE; HRELWWL; # RELEASE WHOLE NWL # ACBWLLWA[0] = BUFADDR + SIZE - 1; # UPDATE ACB FIELDS # ACBWLFWA[0] = BUFADDR; ACBWLADR[0] = BUFADDR; BLKID[BUFADDR] = NWLEIDVALUE; NEXTWLA = BUFADDR + BLKBS[BUFADDR]; # # WLADDR = BUFADDR; END PARAMP1 = 1; # GOOD NETPUTF REQUEST WAS PROCESSED # END ELSE #TOTAL SIZE IN TAA DESCRIPTION TOO SMALL # BEGIN CMWORD[WLADDR+AIPHSIZE+ABHSIZE] = TAAWORD[0]; # RESTORE NWL # PARAMS1 = RLG"RES"; OVLNAME = HLGLERRP; OVLCALL; DONE = TRUE; PARAMP1 = 0; # ERR/LGL WAS GENERATED FOR BAD NETPUTF RQ# END GOTO RJMAIN; # RETURN TO CALLING PROGRAM # END #HPUTF# TERM