123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- {$MACRO ON}
- (******************************************************************************
- *
- * Copyright (c) 1997-2000 Palm, Inc. or its subsidiaries.
- * All rights reserved.
- *
- * File: NetBitUtils.h
- *
- * Release: Palm OS SDK 4.0 (63220)
- *
- * Description:
- * Header file for bit manipulation routines used primarily
- * by wireless network protocols.
- *
- * These routines live in the NetLib but are broken out here into
- * a separate header so that they can be more easily used by source
- * files that don't need access to the other NetLib functions.
- *
- * History:
- * 6/11/97 Created by Ron Marianetti
- * Name Date Description
- * ---- ---- -----------
- * vmk 8/25/98 Defined bitVarIntMaxBits and bitVarIntMaxBytes
- *
- *****************************************************************************)
- unit netbitutils;
- interface
- uses palmos, netmgr;
- // # of bits in a byte
- const
- bitsInByte = 8;
- // Maximum size of variable-size ints in # of bits and bytes. This is based on
- // the largest variable size int, which is encoded as follows: 1111 Bit[32]
- bitVarIntMaxBits = 36;
- // #define bitVarIntMaxBytes ((bitVarIntMaxBits + bitsInByte - 1) / bitsInByte)
- //=====================================================
- // BitXXX Macros
- //
- // The following macros are handy because they don't require that
- // the source code pass in the NetLib library refnum to every
- // call.
- //
- // When building server code or other emulation code where th
- // library trap dispatcher is not used, the libRefNUm is unused
- // and can be 0.
- //
- // When building for the viewer, the libRefNum must be the refNum
- // of the NetLib. For applications, this libRefNum must be put
- // into an application global named 'AppNetRefnum'.
- //
- //====================================================
- (*
- #if USE_TRAPS == 0
- #define netPrvRefnum 0
- #else
- #define netPrvRefnum AppNetRefnum
- #endif
- *)
- (*
- #define BitMove( dstP, dstBitOffsetP, srcP, srcBitOffsetP, numBits) \
- NetLibBitMove(netPrvRefnum, dstP, dstBitOffsetP, srcP, srcBitOffsetP, numBits)
- #define BitPutFixed( dstP, dstBitOffsetP, value, numBits) \
- NetLibBitPutFixed(netPrvRefnum, dstP, dstBitOffsetP, value, numBits)
- #define BitGetFixed(srcP, srcBitOffsetP, numBits) \
- NetLibBitGetFixed(netPrvRefnum, srcP, srcBitOffsetP, numBits)
- #define BitPutUIntV(dstP, dstBitOffsetP, value) \
- NetLibBitPutUIntV(netPrvRefnum, dstP, dstBitOffsetP, value)
- #define BitGetUIntV(srcP, srcBitOffsetP) \
- NetLibBitGetUIntV(netPrvRefnum, srcP, srcBitOffsetP)
- #define BitPutIntV(dstP, dstBitOffsetP, value) \
- NetLibBitPutIntV(netPrvRefnum, dstP, dstBitOffsetP, value)
- #define BitGetIntV(srcP, srcBitOffsetP) \
- NetLibBitGetIntV(netPrvRefnum, srcP, srcBitOffsetP)
- *)
- //=====================================================
- // Macros that convert native integers to and from
- // big-endian (network) order which is the order used to store
- // variable length integers by the BitMove utilities.
- //====================================================
- (*
- #if CPU_TYPE == CPU_x86
- #define _NetSwap16(x) \
- ((((x) >> 8) & 0xFF) | \
- (((x) & 0xFF) << 8))
- #define _NetSwap32(x) \
- ((((x) >> 24) & 0x00FF) | \
- (((x) >> 8) & 0xFF00) | \
- (((x) & 0xFF00) << 8) | \
- (((x) & 0x00FF) << 24))
- #define NetHToNS(x) _NetSwap16(x)
- #define NetHToNL(x) _NetSwap32(x)
- #define NetNToHS(x) _NetSwap16(x)
- #define NetNToHL(x) _NetSwap32(x)
- #elif CPU_TYPE == CPU_68K
- #define NetHToNS(x) (x)
- #define NetHToNL(x) (x)
- #define NetNToHS(x) (x)
- #define NetNToHL(x) (x)
- #else
- // We'll define these macros for any other architectures needed as we come
- // across them.
- #endif
- *)
- //=====================================================
- // Functions
- //====================================================
- //--------------------------------------------------
- // Bit Moving functions. For "slim" bit packing protocols
- // used over wireless.
- //--------------------------------------------------
- procedure NetLibBitMove(libRefNum: UInt16; var dstP: UInt8; var dstBitOffsetP: UInt32;
- var srcP: UInt8; var srcBitOffsetP: UInt32; numBits: UInt32); syscall netLibTrapBitMove;
- procedure NetLibBitPutFixed(libRefNum: UInt16; var dstP: UInt8; var dstBitOffsetP: UInt32;
- value: UInt32; numBits: UInt16); syscall netLibTrapBitPutFixed;
- function NetLibBitGetFixed(libRefNum: UInt16; var dstP: UInt8; var dstBitOffsetP: UInt32;
- numBits: UInt16): UInt32; syscall netLibTrapBitGetFixed;
- procedure NetLibBitPutUIntV(libRefNum: UInt16; var dstP: UInt8; var dstBitOffsetP: UInt32;
- value: UInt32); syscall netLibTrapBitPutUIntV;
- function NetLibBitGetUIntV(libRefNum: UInt16; var dstP: UInt8; var dstBitOffsetP: UInt32): UInt32; syscall netLibTrapBitGetUIntV;
- procedure NetLibBitPutIntV(libRefNum: UInt16; var dstP: UInt8; var dstBitOffsetP: UInt32;
- value: Int32); syscall netLibTrapBitPutUIntV;
- function NetLibBitGetIntV(libRefNum: UInt16; var dstP: UInt8; var dstBitOffsetP: UInt32): Int32; syscall netLibTrapBitGetUIntV;
- implementation
- end.
|