cdc:nos2.source:nam5871:xdrbyte
Table of Contents
XDRBYTE
Table Of Contents
- [00003] PROC XDRBYTE (BUFFER, BUFPOS, BYTEARR, BYTELEN, OPERATION)
- [00005] XDRBYTE CONVERT BETWEEN BYTES AND EXT DATA REPRESENTATION
Source Code
- XDRBYTE.txt
- *DECK XDRBYTE
- USETEXT TEXTXDR
- PROC XDRBYTE (BUFFER, BUFPOS, BYTEARR, BYTELEN, OPERATION);
- *CALL COPYRITE CDCNET - COPYRIGHT CONTROL DATA. 1992.
- # TITLE XDRBYTE CONVERT BETWEEN BYTES AND EXT DATA REPRESENTATION #
- BEGIN # XDRBYTE #
- #
- **** XDRBYTE - CONVERT BETWEEN BYTES AND EXT DATA REPRESENTATION
- *
- * THIS PROCEDURE WILL READ DATA OUT OF *BUFFER*, OR WRITE DATA INTO
- * *BUFFER* DEPENDING ON THE *OPERATION* PARAMETER. THE DATA IN
- * *BUFFER* IS IN XDR (EXTERNAL DATA REPRESENTATION) FORMAT, 8 BIT
- * BYTES PACKED 7.5/CYBER WORD. THE DATA IN *BYTEARR* IS 8 BIT
- * INTEGERS.
- *
- * PROC XDRBYTE (BUFFER, BUFPOS, BYTEARR, BYTELEN, OPERATION)
- *
- * ENTRY BUFFER = INTEGER ARRAY PACKED 7.5 BYTES/WORD.
- * BUFPOS = INDEX OF NEXT BYTE TO BE READ OR WRITTEN.
- * BYTEARR = 8 BIT BYTE ARRAY.
- * BYTELEN = NUMBER OF BYTE VALUES TO BE READ OR
- * WRITTEN TO BYTEARRAY.
- * OPERATION = EITHER *READ* FROM OR *WRITE* TO *BUFFER*.
- *
- * EXIT BUFFER = DATA READ OUT OR WRITTEN TO.
- * BUFPOS = BYTE POSITION IN *BUFFER* AFTER OPERATION.
- * BYTEARR = DATA READ OUT OR WRITTEN TO.
- *
- * METHOD IF OPERATION IS *READ*, *BYTELEN* BYTES ARE READ OUT OF
- * *BUFFER* AND STORED IN *BYTEARR*.
- * IF THE OPERATION IS *WRITE*, *BYTELEN* BYTES ARE READ
- * FROM *BYTEARR* AND ARE STORED IN *BUFFER*.
- * *BUFPOS* IS UPDATED TO THE NEXT READ/WRITE BYTE POSITION.
- * THE ARITHMETIC MODULO BASE 60 FUNCTION IS PERFORMED ON
- * *BUFPOS* MULTIPLIED BY EIGHT TO DETERMINE THE BIT
- * POSITION WITHIN BUFFER. IF THE POSITION IS 56, THE
- * BYTE IS SPLIT ACROSS TWO WORDS. THE BYTE IS THEN READ
- * FROM OR WRITTEN TO THE PROPER LOCATION.
- * THE CALLER IS RESPONSIBLE FOR MAKING SURE THAT THE
- * DESTINATION ARRAY IS LARGE ENOUGH TO HOLD THE NUMBER
- * OF VALUES SPECIFIED.
- *
- #
- #
- **
- #
- ARRAY BUFFER [0:0] S(1); # ARRAY OF DATA, 7.5 BYTES/WORD #
- ITEM BUF$WRD U(00,00,60); # WORD REFERENCE #
- ITEM BUFPOS I; # CUR BYTE POSITION IN BUFFER #
- ARRAY BYTEARR [0:0] S(1); # ARRAY OF INTEGERS #
- ITEM BYTE$WRD U(00,00,60); # WORD REFERENCE #
- ITEM BYTELEN I; # NUMBER OF BYTES TO BE PROCESSD#
- ITEM OPERATION S:XDROPER; # OPERATION TO PERFORM ON BUFFER#
- ITEM INDEX I; # LOOP INDEX #
- ITEM BITPOS I; # BIT POSITION IN BUFFER #
- ITEM WORDPOS I; # WORD POSITION IN BUFFER #
- CONTROL EJECT;
- #
- **** START MAIN PROCEDURE
- #
- BITPOS = XDRMODU (BUFPOS * 8, 60);# INITIAL BIT POSITION IN BUF #
- WORDPOS = (BUFPOS * 2) / 15; # INITIAL WORD INDEX WITHIN #
- BUFPOS = BUFPOS + BYTELEN; # ENDING BUFFER LOCATION #
- SWITCH OPER$:XDROPER OPER$READ:READ,
- OPER$WRITE:WRITE;
- GOTO OPER$ [OPERATION];
- BEGIN # OPERATION TYPE #
- OPER$READ:
- FOR INDEX = 0 STEP 1 UNTIL (BYTELEN - 1) DO
- BEGIN # LOOP THROUGH REQUESTED BYTES #
- IF BITPOS EQ 56
- THEN
- BEGIN # BYTE SPLIT BETWEEN WORDS #
- BYTE$WRD [INDEX] = B<56,4>BUF$WRD [WORDPOS] * 16 +
- B<0,4>BUF$WRD [WORDPOS + 1];
- WORDPOS = WORDPOS + 1;
- BITPOS = 4;
- END
- ELSE
- BEGIN # BYTE IN SINGLE CM WORD #
- BYTE$WRD [INDEX] = B<BITPOS,8>BUF$WRD [WORDPOS];
- BITPOS = BITPOS + 8;
- IF BITPOS GQ 60
- THEN
- BEGIN
- BITPOS = 0;
- WORDPOS = WORDPOS + 1;
- END
- END
- END # LOOP THROUGH REQUESTED BYTES #
- GOTO OPER$END;
- OPER$WRITE:
- FOR INDEX = 0 STEP 1 UNTIL (BYTELEN - 1) DO
- BEGIN # LOOP THROUGH REQUESTED BYTES #
- IF BITPOS EQ 56
- THEN
- BEGIN # BYTE SPLIT BETWEEN WORDS #
- B<56,4>BUF$WRD [WORDPOS] = B<52,4>BYTE$WRD [INDEX];
- B<0,4>BUF$WRD [WORDPOS + 1] = B<56,4>BYTE$WRD [INDEX];
- WORDPOS = WORDPOS + 1;
- BITPOS = 4;
- END
- ELSE
- BEGIN # BYTE IN SINGLE CM WORD #
- B<BITPOS,8>BUF$WRD [WORDPOS] = BYTE$WRD [INDEX];
- BITPOS = BITPOS + 8;
- IF BITPOS GQ 60
- THEN
- BEGIN
- BITPOS = 0;
- WORDPOS = WORDPOS + 1;
- END
- END
- END # LOOP THROUGH REQUESTED BYTES #
- GOTO OPER$END;
- END # OPERATION TYPE #
- OPER$END:
- RETURN; # RETURN TO CALLER #
- END # XDRBYTE #
- TERM
cdc/nos2.source/nam5871/xdrbyte.txt ยท Last modified: 2023/08/05 17:23 by Site Administrator