Re: Question about displaying text

"Ray St. Marie" <[email protected]>
Newsgroups gmane.comp.lang.forth.colorforth
Message-ID <[email protected]>
Hi John,
Ray here...
Well done, this.

On 12/26/06, John Drake <[email protected]> wrote:
> Hello all,
>
> I've made some progess on the Primary ColorForth
> tutorial.
...

> http://www.quartus.net/cgi-bin/twiki/view/Main/PrimaryColorForthEditor
>
> I also added the examples from chapter 1 of
> Starting Forth that I had documented on my
> blog.
>
> http://www.quartus.net/cgi-bin/twiki/view/Main/PrimaryColorForthGettingStarted
>

Great job here. Keep it up. I'll be helping soon.

> Now for my question.  I've actually finished
> the rest of the example from chapter 1.  But
> I'm not 100% satisfied with the results.
>
> This is what I have so far.  I know how to
> display a packed word that's on the stack.
>
> : type fffffff0 and unpack if emit type ; then
> drop drop ;
>
> This recursively upacks a charecter and displays.
> If the charecter is 0 then we're at the end of
> the word and "type" stops.  So if "hello" was
> at the top of block 20 then
>
> : ok show text 20 block type keyboard ;
>
> would create a word to display "hello" at the
> top of the screen.
>
> I also figured out a way to use "string
> variables".  Magenta variables are basically
> pointers to areas of memory inside of blocks.
> So if you put a magenta variable address on
> the stack and add 1 to it you'll have a
> pointer to the packed source code that comes
> after the variable.  So I create magenta
> variables and then put the string I want
> directly after the variables in the form
> of comments.
>
> var s 0 ( hello )
>
> Then
>
> : ok show text s 1 + @ type keyboard ;
>
> will also display "hello" on the screen.
>
> Factoring out "1 + @ type" I get:
>
> : stype 1 + @
> : type fffffff0 and unpack if emit type ; then
> drop drop ;
>
> But the problem is, what happens when you have
> longer words?  For example:
>
> var s 0 ( bookends )
>
> If I do:
>
> : ok show text s stype keyboard ;
>
> I get:
>
> booke
>
> Now I can chain words together.  For example
> I created a word "dword" to deal with long
> words like "bookends".
>
> : dword dup stype 1 + stype ;
>
> Then
>
> : ok show text s dword keyboard ;
>
> displays:
>
> bookends
>
> But there HAS to be a better way.  How can
> I get ColorForth to differentiate between
> short words like "hello" that get packed
> into a single 32 bit word and longer words
> like "bookends" that take 2 32 bit words?
>
> Clearly the editor knows how to do this
> because it displays "bookends" just fine.
>

Okay, this was neat. I don't have much time right
now to test, but I suspect you will find that before
unpacking the 'double-bytecoded-word' you will
need to duplicate the first portion and get it's tag.
A tag of 0 will indicate a second portion, and you
may need to recurse thru all of these 0 tagged
portions, feeding each to your type word.

I'll try to knock something off after work today.

Again, keep the flame burning, your not alone :-)
Ray


> Regards,
>
> John M. Drake
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> Main web page - http://www.colorforth.com
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.