Mercurial > emacs
comparison lisp/emacs-lisp/bindat.el @ 83542:2d56e13fd23d
Merged from emacs@sv.gnu.org
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-413
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-414
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-415
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-416
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-417
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-418
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-419
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-420
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-421
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-422
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-423
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-424
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-425
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-426
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-427
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-428
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-429
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-430
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-431
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-432
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-433
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-434
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-435
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-436
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-437
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-438
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-439
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-440
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-441
lisp/url/url-methods.el: Fix format error when http_proxy is empty string
* emacs@sv.gnu.org/emacs--devo--0--patch-442
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-443
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-444
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-445
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-446
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-447
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-448
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-449
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-450
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-451
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-452
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-453
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-454
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-455
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-456
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-457
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-458
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-459
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-460
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-461
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-462
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-463
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-464
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-465
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-466
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-467
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-468
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-469
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-470
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-471
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-472
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-473
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-128
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-129
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-130
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-131
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-132
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-133
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-134
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-135
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-136
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-137
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-138
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-139
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-140
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-141
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-142
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-143
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-144
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-145
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-146
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-147
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-148
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-149
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-582
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Sat, 14 Oct 2006 17:36:28 +0000 |
parents | 8c9ac6f51916 |
children | 29289b6efd81 a1a25ac6c88a |
comparison
equal
deleted
inserted
replaced
83541:694bbb62a75d | 83542:2d56e13fd23d |
---|---|
64 ;; struct data item[/* items */]; | 64 ;; struct data item[/* items */]; |
65 ;; }; | 65 ;; }; |
66 ;; | 66 ;; |
67 ;; The corresponding Lisp bindat specification looks like this: | 67 ;; The corresponding Lisp bindat specification looks like this: |
68 ;; | 68 ;; |
69 ;; (setq header-spec | 69 ;; (setq header-bindat-spec |
70 ;; '((dest-ip ip) | 70 ;; '((dest-ip ip) |
71 ;; (src-ip ip) | 71 ;; (src-ip ip) |
72 ;; (dest-port u16) | 72 ;; (dest-port u16) |
73 ;; (src-port u16))) | 73 ;; (src-port u16))) |
74 ;; | 74 ;; |
75 ;; (setq data-spec | 75 ;; (setq data-bindat-spec |
76 ;; '((type u8) | 76 ;; '((type u8) |
77 ;; (opcode u8) | 77 ;; (opcode u8) |
78 ;; (length u16r) ;; little endian order | 78 ;; (length u16r) ;; little endian order |
79 ;; (id strz 8) | 79 ;; (id strz 8) |
80 ;; (data vec (length)) | 80 ;; (data vec (length)) |
81 ;; (align 4))) | 81 ;; (align 4))) |
82 ;; | 82 ;; |
83 ;; (setq packet-spec | 83 ;; (setq packet-bindat-spec |
84 ;; '((header struct header-spec) | 84 ;; '((header struct header-bindat-spec) |
85 ;; (items u8) | 85 ;; (items u8) |
86 ;; (fill 3) | 86 ;; (fill 3) |
87 ;; (item repeat (items) | 87 ;; (item repeat (items) |
88 ;; (struct data-spec)))) | 88 ;; (struct data-bindat-spec)))) |
89 ;; | 89 ;; |
90 ;; | 90 ;; |
91 ;; A binary data representation may look like | 91 ;; A binary data representation may look like |
92 ;; [ 192 168 1 100 192 168 1 101 01 28 21 32 2 0 0 0 | 92 ;; [ 192 168 1 100 192 168 1 101 01 28 21 32 2 0 0 0 |
93 ;; 2 3 5 0 ?A ?B ?C ?D ?E ?F 0 0 1 2 3 4 5 0 0 0 | 93 ;; 2 3 5 0 ?A ?B ?C ?D ?E ?F 0 0 1 2 3 4 5 0 0 0 |
118 ;; (bindat-get-field decoded-structure 'item 1 'id) | 118 ;; (bindat-get-field decoded-structure 'item 1 'id) |
119 ;; returns "BCDEFG". | 119 ;; returns "BCDEFG". |
120 | 120 |
121 ;; Binary Data Structure Specification Format | 121 ;; Binary Data Structure Specification Format |
122 ;; ------------------------------------------ | 122 ;; ------------------------------------------ |
123 | |
124 ;; We recommend using names that end in `-bindat-spec'; such names | |
125 ;; are recognized automatically as "risky" variables. | |
123 | 126 |
124 ;; The data specification is formatted as follows: | 127 ;; The data specification is formatted as follows: |
125 | 128 |
126 ;; SPEC ::= ( ITEM... ) | 129 ;; SPEC ::= ( ITEM... ) |
127 | 130 |
340 (setq struct (append data struct)))))) | 343 (setq struct (append data struct)))))) |
341 struct)) | 344 struct)) |
342 | 345 |
343 (defun bindat-unpack (spec bindat-raw &optional bindat-idx) | 346 (defun bindat-unpack (spec bindat-raw &optional bindat-idx) |
344 "Return structured data according to SPEC for binary data in BINDAT-RAW. | 347 "Return structured data according to SPEC for binary data in BINDAT-RAW. |
345 BINDAT-RAW is a unibyte string or vector. Optional third arg BINDAT-IDX specifies | 348 BINDAT-RAW is a unibyte string or vector. |
346 the starting offset in BINDAT-RAW." | 349 Optional third arg BINDAT-IDX specifies the starting offset in BINDAT-RAW." |
347 (when (multibyte-string-p bindat-raw) | 350 (when (multibyte-string-p bindat-raw) |
348 (error "String is multibyte")) | 351 (error "String is multibyte")) |
349 (unless bindat-idx (setq bindat-idx 0)) | 352 (unless bindat-idx (setq bindat-idx 0)) |
350 (bindat--unpack-group spec)) | 353 (bindat--unpack-group spec)) |
351 | 354 |