Mercurial > emacs
comparison lispref/processes.texi @ 75987:9012e6e12d0e
(Bindat Spec): Vector types can have optional element type.
(Bindat Examples): Fix example. Add vector with element type.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Sat, 17 Feb 2007 21:07:11 +0000 |
parents | 6d19c76d81c5 |
children | 035ff8761729 |
comparison
equal
deleted
inserted
replaced
75986:6fcd34fb603e | 75987:9012e6e12d0e |
---|---|
2144 String of length @var{len}. | 2144 String of length @var{len}. |
2145 | 2145 |
2146 @item strz @var{len} | 2146 @item strz @var{len} |
2147 Zero-terminated string, in a fixed-size field with length @var{len}. | 2147 Zero-terminated string, in a fixed-size field with length @var{len}. |
2148 | 2148 |
2149 @item vec @var{len} | 2149 @item vec @var{len} [@var{type}] |
2150 Vector of @var{len} bytes. | 2150 Vector of @var{len} elements of type @var{type}, or bytes if not |
2151 @var{type} is specified. | |
2152 The @var{type} is any of the simple types above, or another vector | |
2153 specified as a list @code{(vec @var{len} [@var{type}])}. | |
2151 | 2154 |
2152 @item ip | 2155 @item ip |
2153 Four-byte vector representing an Internet address. For example: | 2156 Four-byte vector representing an Internet address. For example: |
2154 @code{[127 0 0 1]} for localhost. | 2157 @code{[127 0 0 1]} for localhost. |
2155 | 2158 |
2427 @}; | 2430 @}; |
2428 | 2431 |
2429 struct data @{ | 2432 struct data @{ |
2430 unsigned char type; | 2433 unsigned char type; |
2431 unsigned char opcode; | 2434 unsigned char opcode; |
2432 unsigned long length; /* In little endian order */ | 2435 unsigned long length; /* In network byte order */ |
2433 unsigned char id[8]; /* null-terminated string */ | 2436 unsigned char id[8]; /* null-terminated string */ |
2434 unsigned char data[/* (length + 3) & ~3 */]; | 2437 unsigned char data[/* (length + 3) & ~3 */]; |
2435 @}; | 2438 @}; |
2436 | 2439 |
2437 struct packet @{ | 2440 struct packet @{ |
2438 struct header header; | 2441 struct header header; |
2442 unsigned short counters[4]; /* In little endian order */ | |
2439 unsigned char items; | 2443 unsigned char items; |
2440 unsigned char filler[3]; | 2444 unsigned char filler[3]; |
2441 struct data item[/* items */]; | 2445 struct data item[/* items */]; |
2442 | 2446 |
2443 @}; | 2447 @}; |
2453 (src-port u16))) | 2457 (src-port u16))) |
2454 | 2458 |
2455 (setq data-spec | 2459 (setq data-spec |
2456 '((type u8) | 2460 '((type u8) |
2457 (opcode u8) | 2461 (opcode u8) |
2458 (length u16r) ;; little endian order | 2462 (length u32) ;; network byte order |
2459 (id strz 8) | 2463 (id strz 8) |
2460 (data vec (length)) | 2464 (data vec (length)) |
2461 (align 4))) | 2465 (align 4))) |
2462 | 2466 |
2463 (setq packet-spec | 2467 (setq packet-spec |
2464 '((header struct header-spec) | 2468 '((header struct header-spec) |
2469 (counters vec 4 u16r) ;; little endian order | |
2465 (items u8) | 2470 (items u8) |
2466 (fill 3) | 2471 (fill 3) |
2467 (item repeat (items) | 2472 (item repeat (items) |
2468 (struct data-spec)))) | 2473 (struct data-spec)))) |
2469 @end lisp | 2474 @end lisp |