home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-06-16 | 1.8 KB | 82 lines | [TEXT/ttxt] |
- \ as suggested from Michael Hore
-
- :module konstantMod
-
- hex
- \ ( addr -- hashVal ) hash a name into a 32-bit word
- create HashName
- 2057 w, \ move.l (sp),a0
- d1cb w, \ adda.l a3,a0
- 7000 w, \ moveq #0,d0 \ Result will go to D0
- 7400 w, \ moveq #0,d2
- 1418 w, \ move.b (a0)+,d2 \ Count
- c43c007f , \ and.b #127,d2 \ Clear top bit in case it's a name field
- 60000008 , \ bra lptest
- ef98 w, \ loop rol.l #7,d0
- 1218 w, \ move.b (a0)+,d1
- b300 w, \ eor.b d1,d0 \ b300
- 51cafff8 , \ lptest dbra d2,loop
- 08c0001f , \ bset #31,d0
- 2e80 w, \ move.l d0,(sp)
- next,
- decimal
-
- 2600 ordered-col KNAMES
- 2600 ordered-col KONSTANTS
-
- \ : doHex tib c@ ascii $ = IF hex 2 -> in THEN ;
- : doHex ( addr -- addr) @word dup count " $" s= IF drop @word hex ELSE decimal THEN ;
-
- \ ( -- ) Get next word, add if global name
- : konstantName { \ val nhash -- }
- \ size: konstants .d
- doHex
- number drop -> val
- @word
- HashName -> nhash
- nhash indexOf: kNames
- IF . abort" collision"
- ELSE nhash add: kNames val add: konstants
- THEN ;
-
- \ read toolbox name/trap table and fill arrays
- : Tools" { \ radix cecho -- }
- base -> radix decho -> cecho
- new: loadFile setName: topFile
- openReadOnly: topFile ?error 149
-
- 0 moveTo: topFile drop
- query: topFile drop
- BEGIN \ read until eof
- tib c@ ascii \ <> \ skip comments
- IF konstantName THEN
- query: topFile
- UNTIL
- -echo
-
- remove: loadFile
- radix -> base cecho -> decho ;
-
- \ load the calls into the symbol table
- Tools" ::Module source:konstants
-
- CR
- size: konstants . ." constants stored" CR
-
- forget doHex
-
- \ ( str255 -- global ) Get global word for a global index
- : @konstant ( tStr -- )
- HashName indexOf: kNames 0= ?error 150
- at: konstants ;
-
- \ global dispatcher
- : konstant
- @word @konstant
- state
- IF compile lit ,
- THEN
- ; Immediate
-
- ;module
-