X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=fth%2Fstructure.fth;fp=fth%2Fstructure.fth;h=0acce21ddccb03ab66318d1f26c0e5bcf0b15d5a;hb=516c3194c86ca4c14bb9ccc37efb5176f6a8a20c;hp=0000000000000000000000000000000000000000;hpb=b4ed9d489f7401ee0cd8a6d6e8ce9d97f0dc7833;p=debian%2Fpforth diff --git a/fth/structure.fth b/fth/structure.fth new file mode 100644 index 0000000..0acce21 --- /dev/null +++ b/fth/structure.fth @@ -0,0 +1,40 @@ +\ Structures and fields. +\ +\ The code is based on the implementation from the ANS standard. +\ +\ Permission to use, copy, modify, and/or distribute this +\ software for any purpose with or without fee is hereby granted. +\ +\ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +\ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +\ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +\ THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +\ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +\ FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +\ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +\ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +anew task-structure.fth + +: BEGIN-STRUCTURE ( "name" -- struct-sys 0 , start the definition of a structure ) + CREATE + HERE 0 0 , \ mark stack, lay dummy + DOES> @ \ -- structure-size +; + +: END-STRUCTURE ( addr n -- , terminate a structure definition ) + SWAP ! +; + +: +FIELD ( n <"name"> -- ; Exec: addr -- 'addr ) + CREATE OVER , + + DOES> @ + +; + +: FIELD: ( n1 "name" -- n2 ; addr1 -- addr2 ) + ALIGNED 1 CELLS +FIELD +; + +: CFIELD: ( n1 "name" -- n2 ; addr1 -- addr2 ) + 1 CHARS +FIELD +;