2003-12-11 Frode Vatvedt Fjeld * RELEASE: 0.90 * API CHANGE! Map-binary-write functions now receive two arguments: The object (as before), and the name of the binary-type the object is supposed to be mapped to. * Imroved README a bit. Documented :map-binary-read and :map-binary-read-delayed. * Fixed bug as reported by Simon Leinen. Various minor bug-fixes. Changed the defpackage form to use gensym names. 2001-08-28 Frode Vatvedt Fjeld * binary-types.lisp: Added utility functions SPLIT-BYTES and MERGE-BYTES that deals with converting lists of bytes to new byte-sizes. 2001-08-27 Frode Vatvedt Fjeld * binary-types.lisp: Added generic function READ-BINARY-RECORD so that it may be specialized. 2001-08-27 Frode Vatvedt Fjeld * binary-types.lisp: Added function ENUM-SYMBOLIC-VALUE, the inverse of ENUM-VALUE. 2001-08-27 Frode Vatvedt Fjeld * binary-types.lisp: Added :binary-tags slot-option. The argument specifies a list of "tags" (intended to be symbols, but any lisp objects will do) that will be associated with the slot. The function BINARY-SLOT-TAGS will retrieve the set of tags for a slot. The function BINARY-RECORD-SLOT-NAMES has been modified to take the keyword argument :MATCH-TAGS so that only slots with at least one of those tags are returned. The idea is that sometimes you need to iterate over a sub-set of the slots, in which case a tag can be used to name and reference such sub-sets. 2001-08-24 Frode Vatvedt Fjeld * binary-types.lisp: Changed they expansion function of DEFINE-BINARY-CLASS not to generate literal structure objects. Expansions should be much "nicer" for the compiler to handle now. 2001-08-17 Frode Vatvedt Fjeld * binary-types.lisp: Added slot-options :MAP-ON-READ and :MAP-ON-READ-DELAYED. The former is analogous to :MAP-ON-WRITE, i.e. at BINARY-READ-time the function named is applied to the (binary) value read, and the result is placed in the slot. :MAP-ON-READ-DELAYED is a variation that delays the mapping operation until the slot is read. Until that time, the slot is unbound and the binary value kept in a "hidden" slot. [This is implemented more or less seamlessly by specializing the SLOT-UNBOUND method.] However, the "hidden" binary value can be read using BINARY-SLOT-VALUE; this will not cause the mapping to occur. The idea is that if you have slots that represent pointers to other records, you probalby don't want the READ-BINARY operation to automatically follow and recursively read such pointers. Using this mechanism, objects referenced by pointers will magically be loaded "on demand". 2001-07-27 Frode Vatvedt Fjeld * binary-types.lisp: Removed LET from DEFINE-BINARY-STRUCT expansion, making it a proper top-level-form. 2001-07-27 Frode Vatvedt Fjeld * RELEASE: 0.84 * binary-types.lisp: Removed (superfluous) LET* from DEFINE-BINARY-STRUCT's expansion, so as not to hinder such forms from being proper top-level forms. 2001-07-12 Frode Vatvedt Fjeld * RELEASE: 0.83 * binary-types.lisp: Fixed READ-BINARY-STRING to work correctly for :SIZE 0. It will now return "" and 0, rather than entering an infinite loop. 2001-06-29 Frode Vatvedt Fjeld * RELEASE: 0.82 * binary-types.lisp: Added macro WITH-BINARY-OUTPUT-TO-VECTOR. Supposed to resemble CL:WITH-OUTPUT-TO-STRING. 2001-06-26 Frode Vatvedt Fjeld * binary-types.lisp: Fixed buggy function READ-BINARY-STRING. 2001-06-22 Frode Vatvedt Fjeld * binary-types.lisp: Renamed many identifiers from xx-COMPUND-xx to xx-RECORD-xx. Of the exported symbols, only two are changed: WRITE-BINARY-RECORD, and BINARY-RECORD-SLOT-NAMES. A (binary) record is either a lisp struct or class. * RELEASE: 0.81 * binary-types.lisp: Minor fixups to make BT work with CLISP. 2001-06-20 Frode Vatvedt Fjeld * RELEASE: 0.80 * binary-types.lisp: Rewrote and renamed some the binary string types. Macros DEFINE-BINARY-STRING and DEFINE-NULL-TERMINATED-STRING should now be used to define string types. * binary-types.lisp: Added function READ-BINARY-STRING that should be general enough to read most kinds of strings. It still doesn't do character sets, though. * binary-types.lisp: Removed traces of variable-sized binary types. Everything is now constant-sized. Removed functions SIZEOF-MIN and SIZEOF-MAX. 2001-06-09 Frode Vatvedt Fjeld * binary-types.lisp: Removed one more instance of upcased symbols in the code, in order to facilitate those using case-sensitive readers. 2001-06-06 Frode Vatvedt Fjeld * RELEASE: 0.76 * binary-types.lisp: Added macro WITH-BINARY-INPUT-FROM-VECTOR. * binary-types.lisp: Added check for end-of-list in WITH-BINARY-INPUT-FROM-LIST macro. * Makefile: Forgot to include recently added file type-hierarchy.ps in the distribution tarball. 2001-05-03 Frode Vatvedt Fjeld * binary-types.lisp: Renamed the slot-options (the old ones still work though). :bt => :binary-type :btt => :binary-lisp-type :bt-on-write => :map-binary-write. * binary-types.lisp: Added a pseudo-type :LABEL available only inside DEFINE-BINARY-CLASS and which is a void type intended for "slots" that don't hold any data but are used as labels in the struct in order to determine offsets etc. If this type is declared with the :btt (or :binary-lisp-type) slot-option, the lisp :type NIL is declared (the empty type). 2001-04-24 Frode Vatvedt Fjeld * RELEASE: 0.75 2001-04-23 Frode Vatvedt Fjeld * type-hierarchy.ps: Added. This is a postscript file displaying the type (meta-) hierarchy, for reference. 2001-04-22 Frode Vatvedt Fjeld * binary-types.lisp: Added macro WITH-BINARY-INPUT-FROM-LIST that sets up a "stream" variable suitable for READ-BINARY that provides 8-bit bytes from a list of integers. 2001-04-12 Frode Vatvedt Fjeld * RELEASE: 0.74 * binary-types.lisp: The previous fix for DEFINE-BINARY-STRUCT's lambda list was wrong. Hopefully this actually fixes it. 2001-04-11 Frode Vatvedt Fjeld * RELEASE: 0.73 * binary-types.lisp: Changed in DEFINE-BINARY-STRUCT a (format "MAKE-~A" name) to (format "~A-~A" '#:make name), which should allow for lower-case lisps to work. * binary-types.lisp: Modified DEFINE-BINARY-STRUCT's macro lambda-list slightly to accommodate a bug in clisp. (This shouldn't affect other systems at all.) 2001-03-29 Frode Vatvedt Fjeld * RELEASE: 0.72. 2001-03-28 Frode Vatvedt Fjeld * binary-types.lisp: Added macro WITH-BINARY-OUTPUT-TO-LIST that, given a stream variable S, evaluates its body such that calls to WRITE-BINARY to stream S collects in a list the individual bytes as integers. This list is returned by the macro form. * binary-types.lisp: Added two dynamic variables that allows you to override the low-level IO functions binary-types use to read and write single octets: *BINARY-READ-BYTE* and *BINARY-WRITE-BYTE*, respectively. They default to the standard CL functions READ-BYTE and WRITE-BYTE, and you may rebind them to any function with the same signature. * binary-types.lisp: Fixed bug in the expansion of DEFINE-BINARY-STRUCT that caused nested declarations not to work. This bug even made example.lisp not work. Sigh. 2001-02-19 Frode Vatvedt Fjeld * RELEASE: 0.71. * README: Revamped the documentation somewhat. Fixed up some inconsistencies etc. 2001-02-13 Frode Vatvedt Fjeld * binary-types.lisp: Changed some more syntax (slightly) in order to be more consistent with CL syntax. Specifically, DEFINE-BITFIELD now requires parens around the storage-type (as does DEFINE-ENUM). * example.lisp: Changed to reflext new syntax. 2001-02-12 Frode Vatvedt Fjeld * binary-types.lisp: Changed syntax of DEFINE-ENUM. The storage-type must be put in braces, and you may optionally specify the :byte. * binary-types.lisp: Added function ENUM-VALUE. 2000-11-01 Frode Vatvedt Fjeld * binary-types.lisp: Changed COMPOUND-SLOT-NAMES to not include padding slots, unless explicity requested. * binary-types.lisp: Added method WRITE-BINARY-COMPOUND that is like WRITE-BINARY only it will automatically look up the correct binary-type from the object, and it only works on compounds (that is, binary-classes and binary-structs). 2000-10-31 Frode Vatvedt Fjeld * binary-types.lisp: Added slot-option :on-write, that provides a function that will be called (at binary-writing time) on the slot's value to obtain the actual value that is written. 2000-10-26 Frode Vatvedt Fjeld * RELEASE: 0.70. * binary-types.lisp: Renamed DEF-BINCLASS to DEFINE-BINARY-CLASS, and DEF-BINSTRUCT to DEFINE-BINARY-STRUCT, and DEF-* to DEFINE-*. * binary-types.lisp: Added a variation of the :BT slot-option. It is named :BTT, and will have the extra effect of adding a :TYPE slot-option to the class or struct slot. Be careful when using this in DEF-BINSTRUCT to provide an slot-initform that is of the correct type! * binary-types.lisp: Changed the way nested declarations are expanded. Now, even nested declarations will (in the expansion) become top-level forms, I believe. This means that the type-specifiers (the place after :BT in e.g. DEF-BINCLASS) is no longer really evaluated, rather it is parsed by the macro-expander. This means you no longer have to quote the type-names (See "example.lisp"). Bitfield types are represented symbolically by lists, so they are all of the lisp-type "list". Fixed-size-nt-strings are equivalent to lisp strings (they should really be strings of a maximum size, but lisp can't easily express that concept). Also note that padding binary types which are named by integer objects don't translate to lisp types at all. This is just fine, I think, since padding "slots" are not supposed to hold any lisp data. * binary-types.lisp: Added DEFTYPE declarations so that all binary-types also become lisp-types. For example, if you declare (def-unsigned raw-number 1), you implicitly declare a lisp type-specifier RAW-NUMBER that is equivalent to (integer 0 255). 2000-10-25 Frode Vatvedt Fjeld * RELEASE: 0.61 * binary-types.lisp: Fixed bug in READ-BINARY for signed integers. * binary-types.lisp: Added a WRITE-BINARY for binary-type fixed-size-nt-string. Hopefully, read/write symmetry is complete now. At least it should be possible to write the elf-header from example.lisp. * binary-types.lisp: Added DEF-BINSTRUCT macro, which is (supposed to be) to DEFSTRUCT what DEF-BINCLASS is to DEFCLASS. If nothing else, structs prints and reads more easily than classes. See the definition of E-IDENT in the updated example.lisp. 2000-10-24 Frode Vatvedt Fjeld * binary-types.lisp: Added class-option for DEF-BINCLASS :class-slot-align that allows you to adjust the offsets by declaring the offset of one slot. Like this (:class-slot-align slot-name offset) * binary-types.lisp: Added a class-option for DEF-BINCLASS, :class-slot-offset , that specifies an offset to add to any slot-offset as returned by SLOT-OFFSET. * README-bitfield: This is my response to a query about how DEF-BITFIELD works, included here to provide some documentation. 2000-10-23 Frode Vatvedt Fjeld * RELEASE: 0.50 * binary-types.lisp: Added a macro WITH-BINARY-FILE that is a thin wrapper around WITH-OPEN-FILE that tries to force the stream to have the correct element-type. 2000-10-22 Frode Vatvedt Fjeld * binary-types.lisp: Changed syntax of DEF-BINCLASS again, so that it now completely matches the DEFCLASS syntax, only you have one extra slot-option, :BT, which declares the slot's binary-type. This slot-option is evaluated, so you may still have nested declarations. What is new is that you may have slots that don't have a binary-type. Such slots are simply ignored by READ-BINARY and WRITE-BINARY. 2000-10-21 Frode Vatvedt Fjeld * binary-types.lisp: Added COMPOUND-SLOT-NAMES, to replace COMPOUND-ALIST and COMPOUND-MERGE which are now deprecated (the functions are still there, but their symbols are no longer exported..). * binary-types.lisp: Changed the two BITFIELD-COMPUTE-XX-VALUE from generic to regular functions (no reason for these to be generic functions). 2000-10-20 Frode Vatvedt Fjeld * example.lisp: Changed the example ELF header declaration to work with the slightly changed syntax. Basically, all slots' type-field is evaluated, so type-names (symbols) must be quoted. * binary-types.lisp: Renamed DEF-COMPOUND to DEF-BINCLASS, and changed the syntax so it looks more like DEFCLASS. * binary-types.lisp: Added the capability of binary-integers to be declared a certain endianess. So an integer is either :BIG-ENDIAN or :LITTLE-ENDIAN (regardless of *ENDIAN*), or it depends dynamically on the value of *ENDIAN*. The DEF-INTEGER macros now takes and optional endianess argument. * binary-types.lisp: Changed the (previously very ugly) implementation of the binary-types name-space. Now use the new accessor FIND-BINARY-TYPE which is implemented with a simple hash-table. This means that BINARY TYPES MUST NOW BE NAMED BY SYMBOLS (binary-types no longer touches the symbol-value of symbols). * binary-types.lisp: Removed generic function BIT-SIZEOF, since we only deal with octets anyway. * binary-types.lisp: Changed *ENDIAN* to take keyword symbols :BIG-ENDIAN or :LITTLE-ENDIAN (old BT-interned symbols still work). 2000-08-25 Frode Vatvedt Fjeld * binary-types.lisp: Fixed reading of signed integers. 2000-06-13 Frode Vatvedt Fjeld * README: Added a little more documentation. * example.lisp: Cleaned up some small things. 2000-03-30 Frode Vatvedt Fjeld * binary-types.lisp: Added write support for bitfield. * binary-types.lisp: Changed the bitfield type to use proper CL "bytes" for subfields. 1999-12-08 Frode Vatvedt Fjeld * test.lisp: Added this file for tests of the BINARY-TYPES package. Not much in it so far. * binary-types.lisp: Fixed READ-BINARY for signed integers so it actually works. * binary-types.lisp: Added WRITE-BINARY for integers, char8, padding, and compound. * ChangeLog: Started