Re: Unsigned in Component Pascal

From: [at]} <robert.d.campbell{>
Date: Mon, 17 Jun 2002 17:44:04 +0000 (GMT)

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


Wojtek Skulski wrote

>"My more immediate concern is how to make assignments of bit patterns
>such as 0ABH to a variable of a given bit width. These variables are
>directly mapped onto C-style DLL variables like UCHAR or USHORT.
>I have spent considerable time reading C-headers and trying to match
>these to variable types CP is giving me. The interesting part is
>C structures and pointers to C structures.

>Unless I am missing some part of the BlackBox docu, it seems to me
>they have basically left this whole topic away. There is a page
>about DLLs, but practical details are scarce.

>In the past, every compiler vendow would have documented the bit
>layout of their variables. This would make interfacing between
>say Fortran and C doable. The BB documentatin does not say much
>how their variables are laid out in memory. This becomes a critical
>issue once I want to talk to an embedded 8051 microcontroller."


The BB documentation addresses variable layout in memory and on disk
in the language reference and Stores Docus. The mapping of memory bit
numbers to (eg) INTEGERs is not documented as it might be platform
specific.

However bit 5 in a set is bit 5 whatever platform is used. It is an
open secret that on PC's bit 0 is the LSB. What I gues you want to do
is to set (and process) your bits using the SET abstraction, then map them
to BYTEs using SYSTEM.VAL in a potentially platform specific way. (Maybe
some SHORTs are also needed.)

The example below uses this kind of approach to compute a file checksum
using a 32 bit irreducible polynominal over Galois Field 2 - sounds fancy
but is simple bit bashing. Setting the bit patterns using the SET
abstraction is easy; as is converting in and out of INTEGER when required.



PROCEDURE CheckFile (loc : Files.Locator; fInfo : Files.FileInfo) : INTEGER;
  CONST
    fDatSiz = 102400 * 2;
    mask = {0, 1, 27, 28};
    lowByte = {0 .. 7};
  VAR
    i : INTEGER;
    fIn : Files.File;
    rd : Files.Reader;
    fData : ARRAY fDatSiz OF BYTE;
    cSum : SET;
  BEGIN
    IF ~zpr.cSum OR (fInfo.length > fDatSiz) THEN RETURN 0 END;
    fIn := dir.Old (loc, fInfo.name, TRUE);
    IF fIn = NIL THEN RETURN 0 END;
    
    ASSERT (fIn.Length () = fInfo.length, 65);
    rd := fIn.NewReader (rd);
    rd.ReadBytes (fData, 0, fInfo.length); INC (xCnt, fInfo.length);

    cSum := {0};
    FOR i := 0 TO fInfo.length - 1 DO
      cSum := cSum / (SYSTEM.VAL (SET, fData [i]) * lowByte);
      IF 31 IN cSum THEN
        cSum := SYSTEM.LSH (cSum, 1);
        cSum := cSum / mask
      ELSE
        cSum := SYSTEM.LSH (cSum, 1)
      END
    END;
    fIn.Close ();
    RETURN SYSTEM.VAL (INTEGER, cSum)
  END CheckFile;


Regards


Robert Campbell

--------------------------------------------

To unsubscribe from this mailing list, send a message containing the word "unsubscribe" to:
   blackbox-request{([at]})nowhere.xy

To 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.xy

Current 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-1405274588_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwIFxwYXINCldvanRlayBTa3Vsc2tpIHdyb3RlXHBh
cg0KXHBhcg0KPiJNeSBtb3JlIGltbWVkaWF0ZSBjb25jZXJuIGlzIGhvdyB0byBtYWtlIGFzc2ln
bm1lbnRzIG9mIGJpdCBwYXR0ZXJuc1xwYXINCj5zdWNoIGFzIDBBQkggdG8gYSB2YXJpYWJsZSBv
ZiBhIGdpdmVuIGJpdCB3aWR0aC4gVGhlc2UgdmFyaWFibGVzIGFyZVxwYXINCj5kaXJlY3RseSBt
YXBwZWQgb250byBDLXN0eWxlIERMTCB2YXJpYWJsZXMgbGlrZSBVQ0hBUiBvciBVU0hPUlQuXHBh
cg0KPkkgaGF2ZSBzcGVudCBjb25zaWRlcmFibGUgdGltZSByZWFkaW5nIEMtaGVhZGVycyBhbmQg
dHJ5aW5nIHRvIG1hdGNoXHBhcg0KPnRoZXNlIHRvIHZhcmlhYmxlIHR5cGVzIENQIGlzIGdpdmlu
ZyBtZS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXNccGFyDQo+QyBzdHJ1Y3R1cmVzIGFuZCBwb2lu
dGVycyB0byBDIHN0cnVjdHVyZXMuXHBhcg0KXHBhcg0KPlVubGVzcyBJIGFtIG1pc3Npbmcgc29t
ZSBwYXJ0IG9mIHRoZSBCbGFja0JveCBkb2N1LCBpdCBzZWVtcyB0byBtZVxwYXINCj50aGV5IGhh
dmUgYmFzaWNhbGx5IGxlZnQgdGhpcyB3aG9sZSB0b3BpYyBhd2F5LiBUaGVyZSBpcyBhIHBhZ2Vc
cGFyDQo+YWJvdXQgRExMcywgYnV0IHByYWN0aWNhbCBkZXRhaWxzIGFyZSBzY2FyY2UuXHBhcg0K
XHBhcg0KPkluIHRoZSBwYXN0LCBldmVyeSBjb21waWxlciB2ZW5kb3cgd291bGQgaGF2ZSBkb2N1
bWVudGVkIHRoZSBiaXRccGFyDQo+bGF5b3V0IG9mIHRoZWlyIHZhcmlhYmxlcy4gVGhpcyB3b3Vs
ZCBtYWtlIGludGVyZmFjaW5nIGJldHdlZW5ccGFyDQo+c2F5IEZvcnRyYW4gYW5kIEMgZG9hYmxl
LiBUaGUgQkIgZG9jdW1lbnRhdGluIGRvZXMgbm90IHNheSBtdWNoXHBhcg0KPmhvdyB0aGVpciB2
YXJpYWJsZXMgYXJlIGxhaWQgb3V0IGluIG1lbW9yeS4gVGhpcyBiZWNvbWVzIGEgY3JpdGljYWxc
cGFyDQo+aXNzdWUgb25jZSBJIHdhbnQgdG8gdGFsayB0byBhbiBlbWJlZGRlZCA4MDUxIG1pY3Jv
Y29udHJvbGxlci4iXHBhcg0KXHBhcg0KXHBhcg0KVGhlIEJCIGRvY3VtZW50YXRpb24gYWRkcmVz
c2VzIHZhcmlhYmxlIGxheW91dCBpbiBtZW1vcnkgYW5kIG9uIGRpc2tccGFyDQppbiB0aGUgbGFu
Z3VhZ2UgcmVmZXJlbmNlIGFuZCBTdG9yZXMgRG9jdXMuIFRoZSBtYXBwaW5nIG9mIG1lbW9yeSBi
aXRccGFyDQpudW1iZXJzIHRvIChlZykgSU5URUdFUnMgaXMgbm90IGRvY3VtZW50ZWQgYXMgaXQg
bWlnaHQgYmUgcGxhdGZvcm1ccGFyDQpzcGVjaWZpYy5ccGFyDQpccGFyDQpIb3dldmVyIGJpdCA1
IGluIGEgc2V0IGlzIGJpdCA1IHdoYXRldmVyIHBsYXRmb3JtIGlzIHVzZWQuIEl0IGlzIGFuXHBh
cg0Kb3BlbiBzZWNyZXQgdGhhdCBvbiBQQydzIGJpdCAwIGlzIHRoZSBMU0IuIFdoYXQgSSBndWVz
IHlvdSB3YW50IHRvIGRvXHBhcg0KaXMgdG8gc2V0IChhbmQgcHJvY2VzcykgeW91ciBiaXRzIHVz
aW5nIHRoZSBTRVQgYWJzdHJhY3Rpb24sIHRoZW4gbWFwIHRoZW1ccGFyDQp0byBCWVRFcyB1c2lu
ZyBTWVNURU0uVkFMIGluIGEgcG90ZW50aWFsbHkgcGxhdGZvcm0gc3BlY2lmaWMgd2F5LiAoTWF5
YmVccGFyDQpzb21lIFNIT1JUcyBhcmUgYWxzbyBuZWVkZWQuKVxwYXINClxwYXINClRoZSBleGFt
cGxlIGJlbG93IHVzZXMgdGhpcyBraW5kIG9mIGFwcHJvYWNoIHRvIGNvbXB1dGUgYSBmaWxlIGNo
ZWNrc3VtXHBhcg0KdXNpbmcgYSAzMiBiaXQgaXJyZWR1Y2libGUgcG9seW5vbWluYWwgb3ZlciBH
YWxvaXMgRmllbGQgMiAtIHNvdW5kcyBmYW5jeVxwYXINCmJ1dCBpcyBzaW1wbGUgYml0IGJhc2hp
bmcuIFNldHRpbmcgdGhlIGJpdCBwYXR0ZXJucyB1c2luZyB0aGUgU0VUXHBhcg0KYWJzdHJhY3Rp
b24gaXMgZWFzeTsgYXMgaXMgY29udmVydGluZyBpbiBhbmQgb3V0IG9mIElOVEVHRVIgd2hlbiBy
ZXF1aXJlZC5ccGFyDQpccGFyDQpccGFyDQpccGFyDQpQUk9DRURVUkUgIENoZWNrRmlsZSAobG9j
IDogRmlsZXMuTG9jYXRvcjsgZkluZm8gOiBGaWxlcy5GaWxlSW5mbykgOiBJTlRFR0VSO1xwYXIN
CiAgQ09OU1RccGFyDQogICAgZkRhdFNpeiAgPSAgMTAyNDAwICogMjtccGFyDQogICAgbWFzayAg
ICAgPSAgXHswLCAxLCAyNywgMjhcfTtccGFyDQogICAgbG93Qnl0ZSAgPSAgXHswIC4uIDdcfTtc
cGFyDQogIFZBUlxwYXINCiAgICBpICAgICAgOiAgSU5URUdFUjtccGFyDQogICAgZkluICAgIDog
IEZpbGVzLkZpbGU7XHBhcg0KICAgIHJkICAgICA6ICBGaWxlcy5SZWFkZXI7XHBhcg0KICAgIGZE
YXRhICA6ICBBUlJBWSAgZkRhdFNpeiAgT0YgIEJZVEU7XHBhcg0KICAgIGNTdW0gICA6ICBTRVQ7
XHBhcg0KICBCRUdJTlxwYXINCiAgICBJRiAgfnpwci5jU3VtICBPUiAgKGZJbmZvLmxlbmd0aCAg
PiAgZkRhdFNpeikgIFRIRU4gIFJFVFVSTiAgMCAgRU5EO1xwYXINCiAgICBmSW4gIDo9ICBkaXIu
T2xkIChsb2MsIGZJbmZvLm5hbWUsIFRSVUUpO1xwYXINCiAgICBJRiAgZkluICA9ICBOSUwgIFRI
RU4gIFJFVFVSTiAgMCAgRU5EO1xwYXINCiAgICBccGFyDQogICAgQVNTRVJUIChmSW4uTGVuZ3Ro
ICgpICA9ICBmSW5mby5sZW5ndGgsIDY1KTtccGFyDQogICAgcmQgIDo9ICBmSW4uTmV3UmVhZGVy
IChyZCk7XHBhcg0KICAgIHJkLlJlYWRCeXRlcyAoZkRhdGEsIDAsIGZJbmZvLmxlbmd0aCk7ICBJ
TkMgKHhDbnQsIGZJbmZvLmxlbmd0aCk7XHBhcg0KXHBhcg0KICAgIGNTdW0gIDo9ICBcezBcfTtc
cGFyDQogICAgRk9SICBpICA6PSAgMCAgVE8gIGZJbmZvLmxlbmd0aCAtIDEgIERPXHBhcg0KICAg
ICAgY1N1bSAgIDo9ICBjU3VtIC8gKFNZU1RFTS5WQUwgKFNFVCwgZkRhdGEgW2ldKSAqIGxvd0J5
dGUpO1xwYXINCiAgICAgIElGICAzMSAgSU4gIGNTdW0gIFRIRU5ccGFyDQogICAgICAgIGNTdW0g
IDo9ICBTWVNURU0uTFNIIChjU3VtLCAxKTtccGFyDQogICAgICAgIGNTdW0gIDo9ICBjU3VtIC8g
bWFza1xwYXINCiAgICAgIEVMU0VccGFyDQogICAgICAgIGNTdW0gIDo9ICBTWVNURU0uTFNIIChj
U3VtLCAxKVxwYXINCiAgICAgIEVORFxwYXINCiAgICBFTkQ7XHBhcg0KICAgIGZJbi5DbG9zZSAo
KTtccGFyDQogICAgUkVUVVJOICBTWVNURU0uVkFMIChJTlRFR0VSLCBjU3VtKVxwYXINCiAgRU5E
ICBDaGVja0ZpbGU7XHBhcg0KXHBhcg0KXHBhcg0KUmVnYXJkc1xwYXINClxwYXINClxwYXINClJv
YmVydCBDYW1wYmVsbFxwYXINClxwYXINCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tXHBhcg0KXHBhcg0KVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIG1haWxpbmcg
bGlzdCwgc2VuZCBhIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgd29yZCAidW5zdWJzY3JpYmUiIHRv
OlxwYXINCiAgIGJsYWNrYm94LXJlcXVlc3RAb2Jlcm9uLmNoXHBhcg0KXHBhcg0KVG8gZ2V0IGEg
bGlzdCBvZiB2YWxpZCBlLW1haWwgY29tbWFuZHMgYW5kIGluc3RydWN0aW9ucyBvbiB0aGVpciB1
c2FnZSwgc2VuZCBhIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgd29yZCAiaGVscCIgdG8gdGhlIGFi
b3ZlIGFkZHJlc3MuXHBhcg0KXHBhcg0KU2VuZCBhbnkgcHJvYmxlbSByZXBvcnRzIG9yIHF1ZXN0
aW9ucyByZWxhdGVkIHRvIHRoaXMgZW1haWwgbGlzdCB0byB0aGUgbGlzdCBvd25lciBhdFxwYXIN
CiAgIG93bmVyLWJsYWNrYm94QG9iZXJvbi5jaFxwYXINClxwYXINCkN1cnJlbnQgcG9zdGluZyBw
b2xpY3k6XHBhcg0KXHBhcg0KYSkgVG8gcG9zdCB5b3Ugc2hvdWxkIHVzZSB0aGUgc2FtZSBhZGRy
ZXNzIGJ5IHdoaWNoIHlvdSBhcmUgc3Vic2NyaWJlZCB0byB0aGUgbWFpbGluZyBsaXN0LiBUaGF0
IHdheSwgdGhlIGxpc3Qgc2VydmVyIHdpbGwgcmVjb2duaXplIHlvdSBhcyBzdWJzY3JpYmVyIGFu
ZCBmb3J3YXJkIHlvdXIgcG9zdGluZyBpbW1lZGlhdGVseSwgd2l0aG91dCBjcmVhdGluZyBhbnkg
b3ZlcmhlYWQuXHBhcg0KXHBhcg0KYikgSWYsIGZvciBzb21lIHJlYXNvbiwgeW91IGNhbm5vdCBw
b3N0IGZyb20gdGhlIGFkZHJlc3MsIGJ5IHdoaWNoIHlvdSBhcmUgc3Vic2NyaWJlZCwgeW91ciBt
ZXNzYWdlIHdpbGwgYmUgbW9kZXJhdGVkIHRvIGF2b2lkIHNwYW0uIFBsZWFzZSB1bmRlcnN0YW5k
IHRoYXQgbW9kZXJhdGlvbiB3aWxsIG9mdGVuIGNhdXNlIHNvbWUgZGVsYXksIGluIHBhcnRpY3Vs
YXIgb3ZlciB3ZWVrZW5kcyBvciBob2x5ZGF5fX0ATEwniQRs


----boundary-LibPST-iamunique-1405274588_-_---
Received on Mon Jun 17 2002 - 19:44:04 UTC

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