AW: Unsigned in Component Pascal

From: Zinn, Helmut <"Zinn,>
Date: Wed, 26 Jun 2002 12:02:08 +0200

----boundary-LibPST-iamunique-2041250013_-_-
Content-type: text/plain

Dear Robert, dear Wojtek,

you find some other solution at subsystem Opal in the module Util
at CPC http://home.t-online.de/home/a.h.zinn#Opal

Here are one example:

        TYPE
                CastRecT = RECORD [noalign]
                        lbyte: BYTE;
                        hbyte: BYTE;
                END;
 
PROCEDURE MakeWord* (hi, lo: BYTE): SHORTINT;
        (* The one-byte values <hi> and <lo> are combined to a two-byte
value by
                        concatenation and returned as result of the
function. <hi> becomes the
                        most significant and <lo> the least significant part
of the result. *)
        VAR
                h: CastRecT;
        BEGIN
                h.hbyte := hi;
                h.lbyte := lo;
                RETURN(SYSTEM.VAL(SHORTINT, h));
        END MakeWord;

PROCEDURE [code] MakeWord* (hi, lo: BYTE): SHORTINT
        (* The one-byte values <hi> and <lo> are combined to a two-byte
value by
                        concatenation and returned as result of the
function. <hi> becomes the
                        most significant and <lo> the least significant part
of the result. *)
                059H, (* POP ECX *)
                08AH, 0E0H, (* MOV AH, AL *)
                08AH, 0C1H, (* MOV AL, CL *)
                025H, 0FFH, 0FFH, 000H, 000H; (* AND EAX, 0000FFFFH *)

There are also examples for word to integer and reverse examples for
splitting shortint to bytes and integer to words.

Regards

Helmut Zinn

      \|||/
      (o o)
---ooO-(_)-Ooo------

---
Have a look at http://home.t-online.de/home/a.h.zinn
Send your answer and comments to mailto:a.h.zinn{([at]})nowhere.xy-----Ursprüngliche Nachricht-----
Von: robert.d.campbell{([at]})nowhere.xy[mailto:robert.d.campbell{([at]})nowhere.xyGesendet: Mittwoch, 26. Juni 2002 11:22
An: skulski{([at]})nowhere.xyCc: blackbox{([at]})nowhere.xyBetreff: Re: Unsigned in Component Pascal
>  I have advanced a little bit concerning bit manipulation and
>unsigned assignments. As a practical example, today I accomplished
>a mundane task of packing two bytes from a byte buffer into
>a 32-bit integer. Something, which in C is perhaps as simple as
>
>     intVar = bhi<<8 + blo;
>
>The following code fragment is a bit more complex because the sign
>bits get in the way and have to be cut. I wonder if such manipulations
>are the most efficient way of packing/unpacking data. In any case,
>I did not have to use SYSTEM to accomplish this.
>
>    VAR setHi,setLo: SET;   (*bit field variables (hi,lo byte)*)
>
>  FOR i := 0 TO len-1 DO
>       (*Pack two consequtive bytes into an integer. MSB is first.*)
>       (*Cutting with bit masks avoids sign extension*)
>    setHi := BITS(ASH(buffer[2*i],8)) * {8..15};
>    setLo := BITS(    buffer[2*i+1])  * {0..7};
>    histogram.bin [i] := ORD(setHi + setLo);
>  END;
Maybe the following (untested) arithmetical approach
seems more familiar:
PROCEDURE  BytePack (b0, b1 : BYTE) : INTEGER;
  VAR
    a, b : INTEGER;
  BEGIN
    a  :=  b0  MOD  256;
    b  :=  b1  MOD  256;
    RETURN  ASH (b, 8) + a
  END  BytePack;
Would the 'inlined' version
ROCEDURE  BytePack (b0, b1 : BYTE) : INTEGER;
  BEGIN
    RETURN  ASH (b1  MOD  256, 8) + (b0  MOD  256)
  END  BytePack;
use INTEGERS internally, and work the same?
Robert Campbell
--------------------------------------------
To unsubscribe from this mailing list, send a message containing the word
"unsubscribe" to:
   blackbox-request{([at]})nowhere.xyTo get a list of valid e-mail commands and instructions on their usage, send
a message containing the word "help" to the above address.
Send any problem reports or questions related to this email list to the list
owner at
   owner-blackbox{([at]})nowhere.xyCurrent posting policy:
a) To post you should use the same address by which you are subscribed to
the mailing list. That way, the list server will recognize you as subscriber
and forward your posting immediately, without creating any overhead.
b) If, for some reason, you cannot post from the address, by which you are
subscribed, your message will be moderated to avoid spam. Please understand
that moderation will often cause some delay, in particular over weekends or
holydays
--------------------------------------------
To unsubscribe from this mailing list, send a message containing the word "unsubscribe" to:
   blackbox-request{([at]})nowhere.xyTo get a list of valid e-mail commands and instructions on their usage, send a message containing the word "help" to the above address.
Send any problem reports or questions related to this email list to the list owner at
   owner-blackbox{([at]})nowhere.xyCurrent posting policy:
a) To post you should use the same address by which you are subscribed to the mailing list. That way, the list server will recognize you as subscriber and forward your posting immediately, without creating any overhead.
b) If, for some reason, you cannot post from the address, by which you are subscribed, your message will be moderated to avoid spam. Please understand that moderation will often cause some delay, in particular over weekends or holydays.
----boundary-LibPST-iamunique-2041250013_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzc1xmY2hhcnNldDAgQXJpYWw7fQ0Ke1xmMVxmbW9kZXJuIENvdXJpZXIgTmV3O30NCntcZjJc
Zm5pbFxmY2hhcnNldDIgU3ltYm9sO30NCntcZjNcZm1vZGVyblxmY2hhcnNldDAgQ291cmllciBO
ZXc7fX0NCntcY29sb3J0YmxccmVkMFxncmVlbjBcYmx1ZTA7XHJlZDBcZ3JlZW4wXGJsdWUyNTU7
fQ0KXHVjMVxwYXJkXHBsYWluXGRlZnRhYjM2MCBcZjBcZnMyMCBEZWFyIFJvYmVydCwgZGVhciBX
b2p0ZWssIFxwYXINClxwYXINCnlvdSBmaW5kIHNvbWUgb3RoZXIgc29sdXRpb24gYXQgc3Vic3lz
dGVtIE9wYWwgaW4gdGhlIG1vZHVsZSBVdGlsIFxwYXINCmF0IENQQyBodHRwOi8vaG9tZS50LW9u
bGluZS5kZS9ob21lL2EuaC56aW5uI09wYWwgXHBhcg0KXHBhcg0KSGVyZSBhcmUgb25lIGV4YW1w
bGU6XHBhcg0KXHBhcg0KXHRhYiBUWVBFXHBhcg0KXHRhYiBcdGFiIENhc3RSZWNUID0gUkVDT1JE
IFtub2FsaWduXVxwYXINClx0YWIgXHRhYiBcdGFiIGxieXRlOiBCWVRFO1xwYXINClx0YWIgXHRh
YiBcdGFiIGhieXRlOiBCWVRFO1xwYXINClx0YWIgXHRhYiBFTkQ7XHBhcg0KIFxwYXINClBST0NF
RFVSRSBNYWtlV29yZCogKGhpLCBsbzogQllURSk6IFNIT1JUSU5UO1xwYXINClx0YWIgKCogVGhl
IG9uZS1ieXRlIHZhbHVlcyA8aGk+IGFuZCA8bG8+IGFyZSBjb21iaW5lZCB0byBhIHR3by1ieXRl
XHBhcg0KdmFsdWUgYnkgXHBhcg0KXHRhYiBcdGFiIFx0YWIgY29uY2F0ZW5hdGlvbiBhbmQgcmV0
dXJuZWQgYXMgcmVzdWx0IG9mIHRoZVxwYXINCmZ1bmN0aW9uLiA8aGk+IGJlY29tZXMgdGhlIFxw
YXINClx0YWIgXHRhYiBcdGFiIG1vc3Qgc2lnbmlmaWNhbnQgYW5kIDxsbz4gdGhlIGxlYXN0IHNp
Z25pZmljYW50IHBhcnRccGFyDQpvZiB0aGUgcmVzdWx0LiAqKVxwYXINClx0YWIgVkFSXHBhcg0K
XHRhYiBcdGFiIGg6IENhc3RSZWNUO1xwYXINClx0YWIgQkVHSU5ccGFyDQpcdGFiIFx0YWIgaC5o
Ynl0ZSA6PSBoaTtccGFyDQpcdGFiIFx0YWIgaC5sYnl0ZSA6PSBsbztccGFyDQpcdGFiIFx0YWIg
UkVUVVJOKFNZU1RFTS5WQUwoU0hPUlRJTlQsIGgpKTsgXHBhcg0KXHRhYiBFTkQgTWFrZVdvcmQ7
IFxwYXINClxwYXINClBST0NFRFVSRSBbY29kZV0gTWFrZVdvcmQqIChoaSwgbG86IEJZVEUpOiBT
SE9SVElOVFxwYXINClx0YWIgKCogVGhlIG9uZS1ieXRlIHZhbHVlcyA8aGk+IGFuZCA8bG8+IGFy
ZSBjb21iaW5lZCB0byBhIHR3by1ieXRlXHBhcg0KdmFsdWUgYnkgXHBhcg0KXHRhYiBcdGFiIFx0
YWIgY29uY2F0ZW5hdGlvbiBhbmQgcmV0dXJuZWQgYXMgcmVzdWx0IG9mIHRoZVxwYXINCmZ1bmN0
aW9uLiA8aGk+IGJlY29tZXMgdGhlIFxwYXINClx0YWIgXHRhYiBcdGFiIG1vc3Qgc2lnbmlmaWNh
bnQgYW5kIDxsbz4gdGhlIGxlYXN0IHNpZ25pZmljYW50IHBhcnRccGFyDQpvZiB0aGUgcmVzdWx0
LiAqKVxwYXINClx0YWIgXHRhYiAwNTlILFx0YWIgKCogUE9QIEVDWCAqKVxwYXINClx0YWIgXHRh
YiAwOEFILCAwRTBILFx0YWIgKCogTU9WIEFILCBBTCAqKVxwYXINClx0YWIgXHRhYiAwOEFILCAw
QzFILFx0YWIgKCogTU9WIEFMLCBDTCAqKVxwYXINClx0YWIgXHRhYiAwMjVILCAwRkZILCAwRkZI
LCAwMDBILCAwMDBIO1x0YWIgKCogQU5EIEVBWCwgMDAwMEZGRkZIICopIFxwYXINClxwYXINClRo
ZXJlIGFyZSBhbHNvIGV4YW1wbGVzIGZvciB3b3JkIHRvIGludGVnZXIgYW5kIHJldmVyc2UgZXhh
bXBsZXMgZm9yXHBhcg0Kc3BsaXR0aW5nIHNob3J0aW50IHRvIGJ5dGVzIGFuZCBpbnRlZ2VyIHRv
IHdvcmRzLlxwYXINClxwYXINClJlZ2FyZHNccGFyDQpccGFyDQpIZWxtdXQgWmlublxwYXINClxw
YXINCiAgICAgIFxcfHx8LyBccGFyDQogICAgICAobyBvKSBccGFyDQotLS1vb08tKF8pLU9vby0t
LS0tLSBccGFyDQpccGFyDQotLS1ccGFyDQpIYXZlIGEgbG9vayBhdCBodHRwOi8vaG9tZS50LW9u
bGluZS5kZS9ob21lL2EuaC56aW5uXHBhcg0KU2VuZCB5b3VyIGFuc3dlciBhbmQgY29tbWVudHMg
dG8gbWFpbHRvOmEuaC56aW5uQHQtb25saW5lLmRlXHBhcg0KXHBhcg0KXHBhcg0KLS0tLS1VcnNw
clwnZmNuZ2xpY2hlIE5hY2hyaWNodC0tLS0tXHBhcg0KVm9uOiByb2JlcnQuZC5jYW1wYmVsbEBi
YWVzeXN0ZW1zLmNvbVxwYXINClttYWlsdG86cm9iZXJ0LmQuY2FtcGJlbGxAYmFlc3lzdGVtcy5j
b21dXHBhcg0KR2VzZW5kZXQ6IE1pdHR3b2NoLCAyNi4gSnVuaSAyMDAyIDExOjIyXHBhcg0KQW46
IHNrdWxza2lAcGhvYnRvZi5wYXMucm9jaGVzdGVyLmVkdVxwYXINCkNjOiBibGFja2JveEBvYmVy
b24uY2hccGFyDQpCZXRyZWZmOiBSZTogVW5zaWduZWQgaW4gQ29tcG9uZW50IFBhc2NhbFxwYXIN
ClxwYXINCj4gIEkgaGF2ZSBhZHZhbmNlZCBhIGxpdHRsZSBiaXQgY29uY2VybmluZyBiaXQgbWFu
aXB1bGF0aW9uIGFuZFxwYXINCj51bnNpZ25lZCBhc3NpZ25tZW50cy4gQXMgYSBwcmFjdGljYWwg
ZXhhbXBsZSwgdG9kYXkgSSBhY2NvbXBsaXNoZWRccGFyDQo+YSBtdW5kYW5lIHRhc2sgb2YgcGFj
a2luZyB0d28gYnl0ZXMgZnJvbSBhIGJ5dGUgYnVmZmVyIGludG9ccGFyDQo+YSAzMi1iaXQgaW50
ZWdlci4gU29tZXRoaW5nLCB3aGljaCBpbiBDIGlzIHBlcmhhcHMgYXMgc2ltcGxlIGFzXHBhcg0K
PlxwYXINCj4gICAgIGludFZhciA9IGJoaTw8OCArIGJsbztccGFyDQo+XHBhcg0KPlRoZSBmb2xs
b3dpbmcgY29kZSBmcmFnbWVudCBpcyBhIGJpdCBtb3JlIGNvbXBsZXggYmVjYXVzZSB0aGUgc2ln
blxwYXINCj5iaXRzIGdldCBpbiB0aGUgd2F5IGFuZCBoYXZlIHRvIGJlIGN1dC4gSSB3b25kZXIg
aWYgc3VjaCBtYW5pcHVsYXRpb25zXHBhcg0KPmFyZSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IG9m
IHBhY2tpbmcvdW5wYWNraW5nIGRhdGEuIEluIGFueSBjYXNlLFxwYXINCj5JIGRpZCBub3QgaGF2
ZSB0byB1c2UgU1lTVEVNIHRvIGFjY29tcGxpc2ggdGhpcy5ccGFyDQo+XHBhcg0KPiAgICBWQVIg
c2V0SGksc2V0TG86IFNFVDsgICAoKmJpdCBmaWVsZCB2YXJpYWJsZXMgKGhpLGxvIGJ5dGUpKilc
cGFyDQo+XHBhcg0KPiAgRk9SIGkgOj0gMCBUTyBsZW4tMSBET1xwYXINCj4gICAgICAgKCpQYWNr
IHR3byBjb25zZXF1dGl2ZSBieXRlcyBpbnRvIGFuIGludGVnZXIuIE1TQiBpcyBmaXJzdC4qKVxw
YXINCj4gICAgICAgKCpDdXR0aW5nIHdpdGggYml0IG1hc2tzIGF2b2lkcyBzaWduIGV4dGVuc2lv
biopXHBhcg0KPiAgICBzZXRIaSA6PSBCSVRTKEFTSChidWZmZXJbMippXSw4KSkgKiBcezguLjE1
XH07XHBhcg0KPiAgICBzZXRMbyA6PSBCSVRTKCAgICBidWZmZXJbMippKzFdKSAgKiBcezAuLjdc
fTtccGFyDQo+ICAgIGhpc3RvZ3JhbS5iaW4gW2ldIDo9IE9SRChzZXRIaSArIHNldExvKTtccGFy
DQo+ICBFTkQ7XHBhcg0KXHBhcg0KTWF5YmUgdGhlIGZvbGxvd2luZyAodW50ZXN0ZWQpIGFyaXRo
bWV0aWNhbCBhcHByb2FjaFxwYXINCnNlZW1zIG1vcmUgZmFtaWxpYXI6XHBhcg0KXHBhcg0KUFJP
Q0VEVVJFICBCeXRlUGFjayAoYjAsIGIxIDogQllURSkgOiBJTlRFR0VSO1xwYXINCiAgVkFSXHBh
cg0KICAgIGEsIGIgOiBJTlRFR0VSO1xwYXINCiAgQkVHSU5ccGFyDQogICAgYSAgOj0gIGIwICBN
T0QgIDI1NjtccGFyDQogICAgYiAgOj0gIGIxICBNT0QgIDI1NjtccGFyDQogICAgUkVUVVJOICBB
U0ggKGIsIDgpICsgYVxwYXINCiAgRU5EICBCeXRlUGFjaztccGFyDQpccGFyDQpccGFyDQpXb3Vs
ZCB0aGUgJ2lubGluZWQnIHZlcnNpb25ccGFyDQpccGFyDQpST0NFRFVSRSAgQnl0ZVBhY2sgKGIw
LCBiMSA6IEJZVEUpIDogSU5URUdFUjtccGFyDQogIEJFR0lOXHBhcg0KICAgIFJFVFVSTiAgQVNI
IChiMSAgTU9EICAyNTYsIDgpICsgKGIwICBNT0QgIDI1NilccGFyDQogIEVORCAgQnl0ZVBhY2s7
XHBhcg0KXHBhcg0KdXNlIElOVEVHRVJTIGludGVybmFsbHksIGFuZCB3b3JrIHRoZSBzYW1lP1xw
YXINClxwYXINClxwYXINClJvYmVydCBDYW1wYmVsbFxwYXINClxwYXINCi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHBhcg0KXHBhcg0KVG8gdW5zdWJzY3JpYmUg
ZnJvbSB0aGlzIG1haWxpbmcgbGlzdCwgc2VuZCBhIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgd29y
ZFxwYXINCiJ1bnN1YnNjcmliZSIgdG86XHBhcg0KICAgYmxhY2tib3gtcmVxdWVzdEBvYmVyb24u
Y2hccGFyDQpccGFyDQpUbyBnZXQgYSBsaXN0IG9mIHZhbGlkIGUtbWFpbCBjb21tYW5kcyBhbmQg
aW5zdHJ1Y3Rpb25zIG9uIHRoZWlyIHVzYWdlLCBzZW5kXHBhcg0KYSBtZXNzYWdlIGNvbnRhaW5p
bmcgdGhlIHdvcmQgImhlbHAiIHRvIHRoZSBhYm92ZSBhZGRyZXNzLlxwYXINClxwYXINClNlbmQg
YW55IHByb2JsZW0gcmVwb3J0cyBvciBxdWVzdGlvbnMgcmVsYXRlZCB0byB0aGlzIGVtYWlsIGxp
c3QgdG8gdGhlIGxpc3RccGFyDQpvd25lciBhdFxwYXINCiAgIG93bmVyLWJsYWNrYm94QG9iZXJv
bi5jaFxwYXINClxwYXINCkN1cnJlbnQgcG9zdGluZyBwb2xpY3k6XHBhcg0KXHBhcg0KYSkgVG8g
cG9zdCB5b3Ugc2hvdWxkIHVzZSB0aGUgc2FtZSBhZGRyZXNzIGJ5IHdoaWNoIHlvdSBhcmUgc3Vi
c2NyaWJlZCB0b1xwYXINCnRoZSBtYWlsaW5nIGxpc3QuIFRoYXQgd2F5LCB0aGUgbGlzdCBzZXJ2
ZXIgd2lsbCByZWNvZ25pemUgeW91IGFzIHN1YnNjcmliZXJccGFyDQphbmQgZm9yd2FyZCB5b3Vy
IHBvc3RpbmcgaW1tZWRpYXRlbHksIHdpdGhvdXQgY3JlYXRpbmcgYW55IG92ZXJoZWFkLlxwYXIN
ClxwYXINCmIpIElmLCBmb3Igc29tZSByZWFzb24sIHlvdSBjYW5ub3QgcG9zdCBmcm9tIHRoZSBh
ZGRyZXNzLCBieSB3aGljaCB5b3UgYXJlXHBhcg0Kc3Vic2NyaWJlZCwgeW91ciBtZXNzYWdlIHdp
bGwgYmUgbW9kZXJhdGVkIHRvIGF2b2lkIHNwYW0uIFBsZWFzZSB1bmRlcnN0YW5kXHBhcg0KdGhh
dCBtb2RlcmF0aW9uIHdpbGwgb2Z0ZW4gY2F1c2Ugc29tZSBkZWxheSwgaW4gcGFydGljdWxhciBv
dmVyIHdlZWtlbmRzIG9yXHBhcg0KaG9seWRheXNccGFyDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxwYXINClxwYXINClRvIHVuc3Vic2NyaWJlIGZyb20gdGhp
cyBtYWlsaW5nIGxpc3QsIHNlbmQgYSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHdvcmQgInVuc3Vi
c2NyaWJlIiB0bzpccGFyDQogICBibGFja2JveC1yZXF1ZXN0QG9iZXJvbi5jaFxwYXINClxwYXIN
ClRvIGdldCBhIGxpc3Qgb2YgdmFsaWQgZS1tYWlsIGNvbW1hbmRzIGFuZCBpbnN0cnVjdGlvbnMg
b24gdGhlaXIgdXNhZ2UsIHNlbmQgYSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHdvcmQgImhlbHAi
IHRvIHRoZSBhYm92ZSBhZGRyZXNzLlxwYXINClxwYXINClNlbmQgYW55IHByb2JsZW0gcmVwb3J0
cyBvciBxdWVzdGlvbnMgcmVsYXRlZCB0byB0aGlzIGVtYWlsIGxpc3QgdG8gdGhlIGxpc3Qgb3du
ZXIgYXRccGFyDQogICBvd25lci1ibGFja2JveEBvYmVyb24uY2hccGFyDQpccGFyDQpDdXJyZW50
IHBvc3RpbmcgcG9saWN5OlxwYXINClxwYXINCmEpIFRvIHBvc3QgeW91IHNob3VsZCB1c2UgdGhl
IHNhbWUgYWRkcmVzcyBieSB3aGljaCB5b3UgYXJlIHN1YnNjcmliZWQgdG8gdGhlIG1haWxpbmcg
bGlzdC4gVGhhdCB3YXksIHRoZSBsaXN0IHNlcnZlciB3aWxsIHJlY29nbml6ZSB5b3UgYXMgc3Vi
c2NyaWJlciBhbmQgZm9yd2FyZCB5b3VyIHBvc3RpbmcgaW1tZWRpYXRlbHksIHdpdGhvdXQgY3Jl
YXRpbmcgYW55IG92ZXJoZWFkLlxwYXINClxwYXINCmIpIElmLCBmb3Igc29tZSByZWFzb24sIHlv
dSBjYW5ub3QgcG9zdCBmcm9tIHRoZSBhZGRyZXNzLCBieSB3aGljaCB5b3UgYXJlIHN1YnNjcmli
ZWQsIHlvdXIgbWVzc2FnZSB3aWxsIGJlIG1vZGVyYXRlZCB0byBhdm9pZCBzcGFtLiBQbGVhc2Ug
dW5kZXJzdGFuZCB0aGF0IG1vZGVyYXRpb24gd2lsbCBvZnRlbiBjYXVzZSBzb21lIGRlbGF5LCBp
biBwYXJ0aWN1bGFyIG92ZXIgd2Vla2VuZHMgb3IgaG9seWRheXN9fQDT2wjvCQ=
----boundary-LibPST-iamunique-2041250013_-_---
Received on Wed Jun 26 2002 - 12:02:08 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:29:40 UTC