A couple of months ago, I someone could tell me whether it was possible
to have record variants of sets lesser than 32 members to be aligned.
Frank Heckenbach told me to make GPC use 8 bits as the smallest
size for a set, by changing TSelElement in p/rts/sets.pas and set_word_size
and set_alignment in p/util.c.
That worked great, had it not been for the fact that the code depended
on reversed ordering of those bytes! (Actually, what I need is the elements
in the set to represent the binary bits in a consecutive order)
In the following code, I need BIT0 to be represented by the most
significant bit of USRINT, and BIT15 by the least significant.
***********************************
TYPE
INT16 =
INTEGER(16);
INT8
= packed -128..127;
INT0_65535 = packed 0..65535;
B_TYPE =
(B1, B2, B3, B4, B5, B6, B7, B8);
BITS
= (BIT0, BIT1, BIT2, BIT3, BIT4, BIT5, BIT6, BIT7, BIT8,
BIT9, BIT10, BIT11, BIT12, BIT13, BIT14, BIT15);
B_TYPE_SET = set of B_TYPE;
BIT_SET = set of
BITS;
VAR
OUT_REC = record case INT16 of
0 : (BSLB
: B_TYPE_SET;
BSHB : B_TYPE_SET);
1 : (USRINT
: INT0_65535);
2 : (BT
: BIT_SET);
end;
************************************
I tried to change set_words_big_endian to "1", in p/util.c!
That made the bit representation work, but when I tried running
p/test/setest.pas, I got the following result:
"The set opcodes work : [] False mul plus minus in and rel False"
Is there a way to get sets to use "set_words_big_endian", or am
I on a totally hopeless mission, all together?
It would really save my day if this would be possible!
Best Regards and Merry Christmas
Sven Jauring