Words4

words4 sample output.

Note

This is a non standard Wordlist using Words generated by SVD2FORTH.

_images/words4.jpg

Viewing The Mecrisp-Stellaris Dictionary

To view the Mecrisp-Stellaris Dictionary one can use the following Words. Each one has a different format:

Words

words sample output.

words

...
Address: 0000CDB8 Link: 0000CDDC Flags: 00000030 Code: 0000CDC2 Name: str
Address: 0000CDDC Link: 0000CE04 Flags: 00000030 Code: 0000CDE8 Name: strb
Address: 0000CE04 Link: 0000CE2C Flags: 00000030 Code: 0000CE10 Name: strh
Address: 0000CE2C Link: 0000CE50 Flags: 00000030 Code: 0000CE36 Name: ldr
Address: 0000CE50 Link: 0000CE78 Flags: 00000030 Code: 0000CE5C Name: ldrb
Address: 0000CE78 Link: 0000CEA0 Flags: 00000030 Code: 0000CE84 Name: ldrh
...

List

list sample output. “list” is part of the /common/dissasembler-m0.txt and /common/dissasembler-m3.txt files.

list

...
+ - 1- 1+ 2- 2+ cell+ negate not shr shl 2* cells 2/ abs u/mod /mod mod / even base binary decimal hex hook-emit
hook-key hook-emit? hook-key? hook-pause emit key emit? key? pause serial-emit serial-key serial-emit? serial-key?
cexpect accept tib >in current-source setsource source query compare cr bl space spaces [char] char ( \ ." c" s"
count ctype type hex. h.s u.s .s words unused registerliteral, call, literal, create does> <builds ['] ' postpone
inline, ret, exit recurse state ] [ : ; execute immediate inline compileonly 0-foldable 1-foldable 2-foldable
3-foldable 4-foldable 5-foldable 6-foldable 7-foldable constant 2constant smudge setflags aligned align h, , ><,
string, allot forgetram compiletoram? compiletoram compiletoflash (create) variable 2variable nvariable buffer:
dictionarystart dictionarynext skipstring find hook-find (find) cjump, jump, here flashvar-here then else if ahead
repeat while until again begin k j i leave unloop +loop loop do ?do case ?of of endof endcase token parse digit
number .digit hold hold< sign #> f#S f# #S # <# f. f.n ud. d. u. . evaluate interpret hook-quit quit eint? eint
dint ipsr nop unhandled reset irq-systick irq-fault irq-collection irq-exti0_1 irq-exti2_3 irq-exti4_15 irq-tsc
...

List Source

DOWNLOAD list.fs

\ Copyright (C) 2013  Matthias Koch
\ This is free software under GNU General Public License v3.


: list ( -- )
  cr
  dictionarystart 
  begin
    dup 6 + ctype space
    dictionarynext
  until
  drop
;

Words4

words4 sample output.

words4

...
nop                 unhandled           reset               irq-systick
irq-fault           irq-collection      irq-exti0_1         irq-exti2_3
irq-exti4_15        irq-tsc             irq-dma_ch1         irq-dma_ch2_3
irq-dma_ch4_5       irq-adc             irq-tim1_up         irq-tim1_cc
irq-tim2            irq-tim3            irq-tim6_dac        irq-tim14
irq-tim15           irq-tim16           irq-tim17           irq-i2c1
irq-i2c2            irq-spi1            irq-spi2            irq-usart1
irq-usart2          irq-cec_can         --- Flash Dictionary ---
b32loop.            b16loop-a.          b16loop.            b8loop.
4bl.                4bh.                2b.                 1b.
15b.                b32sloop.           bin.                u.4
u.2                 dump16              dump                TEMPLATE
...

Words4 Creation

I wanted a neat, four column lister that printed like the listing above, with 20 character wide columns, but also handled Words greater than 20 characters. My “words4” source (based on word.fs above) is below.

Words4 Source

DOWNLOAD words4.fs

\ Program Name: words4.fs
\ This program may require preloaded support files
\ Date: Thu 25 Jul 2019 23:27:35 AEST
\ Copyright 2018  t.porter <terry@tjporter.com.au>, licensed under the GPL
\ For Mecrisp-Stellaris by Matthias Koch.
\ https://sourceforge.net/projects/mecrisp/
\ 140 bytes

: words4 ( -- ) cr  \ A columnar Word list printer. Width = 20 characters, handles overlength Words neatly 
   0				    \ column counter
   dictionarystart
      begin
	 dup 6 + dup
	 ctype			    \ dup before 6 is for dictionarynext input
	 count nip		    \ get number of characters in the word and drop the address of the word
	     20 swap - dup 0 > if   \ if Word is less than 20 chars
		   spaces swap	    \ pad with spaces to equal 20 chars
		   else drop cr	    \ issue immediate carriage return and drop negative number
		   nip -1	    \ and reset to column -1
		   then		       
		      dup 3 = if 3 - cr \ if at 4th column, zero column counter			   
		      else 1 +
		      then
	 swap		       
	 dictionarynext		    \ 	( a-addr - - a-addr flag )
      until
   2drop
;

Key Words Used

dictionarystart        ( - - a-addr )  Current entry point for dictionary search
dictionarynext         ( a-addr - - a-addr flag )      Scans dictionary chain and returns true if end is reached.
ctype  ( cstr-addr - - )       Prints a counted string.
count  ( cstr-addr - - c-addr length )         Convert counted string into addr-length string

Words4 Operation

Words4 utilises the default “dictionarystart and dictionarynext” Words to iterate thru each Word name to the end of the dictionary. Each Word name is printed with “ctype” and the number of characters is determined using “count”.

As each column is 20 characters wide, any Word of less than 20 characters is ‘padded’ out with spaces so that it is exactly 20 characters in length.

A column counter emits a carriage return after four Word names have been printed.

Words greater than 20 characters end the column sequence after they are printed, and normal operation continues on the next line as illustrated by the “— Flash Dictionary —” Word above.

This code maintains 2 items on the data stack throughout its operation, they are the address of each Word and the column number, so to better understand how it works one should view the data stack after each line with “.s”. Reading at my initial ‘proof of concept’ code below (list4b) may assist the understanding of what is being done.

Coloured Columns

This version adds colour to the list.

Note

requires colour-term.fs

_images/words4c.jpg

Words4c

Note

This is for a Terminal with a WHITE background, change “black” Words for another colour below if you use a BLACK background

: words4c ( -- ) cr                \ A coloured columnar Word list printer. Width = 20 characters.
   0                               \ column counter
   dictionarystart
      begin
        dup 6 + dup
        3 pick                     \ copy the column counter value
           case                    \ NOTE: colours here are for a WHITE terminal BACKGROUND !
              0 of black  endof
              1 of blue endof
              2 of black  endof
              3 of blue endof
            endcase
        ctype                      \ print word
        white
        count nip                  \ get number of characters in the word and drop the address of the word
            20 swap - dup 0 > if   \ if Word is less than 20 chars
                  spaces swap      \ pad with spaces to equal 20 chars
                  else drop cr     \ issue immediate carriage return and drop negative number
                  nip -1           \ and reset to column -1
                  then
                     dup 3 = if 3 - cr \ if at 4th column, zero column counter
                     else 1 +
                     then
        swap
        dictionarynext             \   ( a-addr - - a-addr flag )
      until
   2drop
;