*DECK NS$GNW USETEXT CYB$NS USETEXT DEF$NS USETEXT SMB$NS PROC NS$GNW(FROMARRAY,(BUFHDRSIZE),(NPWINDEX),NPUWORD); # GET NPU WORD # # TITLE NS$GNW - GET NPU WORD. # BEGIN # NS$GNW # # ** NS$GNW - GET NPU WORD. * * J.C. LEE 1981 * * THIS ROUTINE GETS A 16-BIT NPU WORD. * * PROC NS$GNW(FROMARRAY,(BUFHDRSIZE),(NPUINDEX),NPUWORD) * * ENTRY: * FROMARRAY - ARRAY NPU WORD TO GET FROM. * BUFHDRSIZE - BUFFER HEADER SIZE IN 8-BIT BYTES. * NPUINDEX - NPU WORD INDEX AFTER BUFFER HEADER. * * EXIT: * NPUWORD = 16-BIT NPU WORD. * * METHOD: * THE 16-BIT NPU WORD IS EXTRACTED FROM THE "FROMARRAY". * # ARRAY FROMARRAY [0:0] S(1); BEGIN ITEM ARRAYWORD U(0,0,60); END ITEM BUFHDRSIZE U; # BUFFER HEADER SIZE IN 8-BIT BYTES # ITEM NPWINDEX U; # NPU WORD INDEX AFTER BUFFER HEADER # ITEM NPUWORD U; # 16-BIT NPU WORD # $BEGIN XREF BEGIN PROC NS$DBG; # TRACE PROCEDURE CALLS # END $END ITEM BITCOUNT I; # BIT COUNT # ITEM I I; # TEMPORARY # ITEM J I; # TEMPORARY # ITEM K I; # TEMPORARY # CONTROL EJECT; $BEGIN NS$DBG("GNW"); $END P = LOC(FROMARRAY); # FWA OF BUFFER # NPUWORD = 0; BITCOUNT = BUFHDRSIZE*ASCSIZE + NPWINDEX*NPWSIZE; I = BITCOUNT / WL; # WORD INDEX # J = BITCOUNT - I*WL; # FIRST BIT POSITION OF NPU WORD# K = J + NPWSIZE - WL; # BITS IN NEXT CM WORD # IF K GR 0 THEN # NPU WORD CROSSES CM WORD # BEGIN BNPUWORD = BSMBWORD[I]; BNPUWORD = B<0,K>SMBWORD[I+1]; END ELSE # WHOLE NPU WORD FITS IN CM WORD# NPUWORD = BSMBWORD[I]; RETURN; END # NS$GNW # TERM