cdc:nos2.source:nam5871:ssbsbf
Table of Contents
SSBSBF
Table Of Contents
- [00002] PROC SSBSBF (TABLE, ORD, BIT, LEN, SOURCE)
- [00003] SSBSBF - STORE BITFIELD IN A TABLE.
- [00007] STORE BITFIELD IN A TABLE.
Source Code
- SSBSBF.txt
- *DECK SSBSBF
- PROC SSBSBF (TABLE, ORD, BIT, LEN, SOURCE);
- # TITLE SSBSBF - STORE BITFIELD IN A TABLE. #
- BEGIN # SSBSBF #
- #
- ** SSBSBF - STORE BITFIELD IN A TABLE.
- *
- * D. G. DEPEW. 81/10/26.
- *
- * PROC SSBSBF (TABLE, ORD, BIT, LEN, SOURCE)
- *
- * ENTRY TABLE = ARRAY INTO WHICH DATA IS TO BE STORED.
- * ORD = WORD ORDINAL WITHIN TABLE WHERE BITFIELD STARTS.
- * BIT = STARTING BIT POSITION WITHIN THE WORD (SYMPLESE).
- * LEN = NUMBER OF BITS TO STORE (RANGE: 1 TO 60).
- * SOURCE = DATA TO BE STORED, RIGHT JUSTIFIED IN A CM WORD.
- *
- * EXIT TABLE = THE SPECIFIED BITFIELD CONTAINS THE RIGHTMOST
- * *LEN* BITS OF *SOURCE*. THE RIGHTMOST BIT OF
- * *SOURCE* ALIGNS WITH THE RIGHTMOST BIT OF THE
- * BITFIELD, EVEN IF A WORD BOUNDARY IS SPANNED.
- * ORD = INCREMENTED BY 1 IF THE BITFIELD SPANS A WORD
- * BOUNDARY.
- * BIT = FIRST BIT POSITION AFTER THE STORED BITFIELD.
- * LEN = UNCHANGED.
- * SOURCE = UNCHANGED.
- *
- * NOTES RESULT IS UNPREDICTABLE IF LEN IS OUT OF RANGE.
- * IF THE SPECIFIED BITFIELD SPANS A WORD BOUNDARY, THE
- * OVERFLOW BITS ARE STORED INTO THE NEXT CONSECUTIVE CM
- * WORD. THAT IS, NO CONSIDERATION IS MADE FOR SYMPL
- * PARALLEL ARRAYS OR FOR ARRAYS WITH AN ENTRY SIZE
- * GREATER THAN ONE.
- #
- ARRAY TABLE [00:00] S(1); #TABLE CONTAINING BITFIELD #
- ITEM T$WD U(00,00,60);
- ITEM ORD; #WORD WITHIN TABLE #
- ITEM BIT; #STARTING BIT WITHIN WORD #
- ITEM LEN; #LENGTH OF BITFIELD #
- ITEM SOURCE U; #WORD THAT CONTAINS DATA #
- ITEM THIS; #NUM OF BITS TO STORE IN SPECIFIED WORD #
- ITEM NEXT; #NUM OF BITS TO STORE IN FOLLOWING WORD #
- IF (BIT + LEN) GR 60
- THEN # WORD BOUNDARY IS SPANNED #
- BEGIN
- THIS = 60 - BIT;
- NEXT = BIT + LEN - 60;
- B<BIT,THIS> T$WD[ORD] = SOURCE / 2 ** NEXT;
- B<0,NEXT> T$WD[ORD + 1] = SOURCE;
- ORD = ORD + 1;
- BIT = NEXT;
- END
- ELSE # WORD BOUNDARY NOT SPANNED #
- BEGIN
- B<BIT,LEN> T$WD[ORD] = SOURCE;
- IF (BIT + LEN) EQ 60
- THEN # BITFIELD ENDS ON WORD BOUNDARY #
- BEGIN
- ORD = ORD + 1;
- BIT = 0;
- END
- ELSE # SIMPLEST CASE #
- BIT = BIT + LEN;
- END
- END # SSBSBF #
- TERM
cdc/nos2.source/nam5871/ssbsbf.txt ยท Last modified: 2023/08/05 17:23 by Site Administrator