Skip to content

Instantly share code, notes, and snippets.

View crcx's full-sized avatar

Charles Childers crcx

View GitHub Profile
here ] dup 9 =if drop 32 ;; then dup 10 =if drop 32 ;; then dup 13 =if drop 32 then ; is (remap-keys)
here ] is ok
here ] clear ; is boot
\ some evil code from crc (ala retro-forth)
\ ------------------------------------------------------------------------
\ : skip-colon-start
\ r> 9 + >r ;
\
\ : ::
\ compile skip-colon-start
\ [compile] [ reveal
\ head, ,call nest ] ; immediate
on run
set info to "Nothing Playing!"
tell application "System Events"
set num to count (every process whose name is "PandoraBoy")
end tell
if num > 0 then
tell application "PandoraBoy"
if player state is playing then
set who to artist of current track
set what to name of current track
@crcx
crcx / gist:246027
Created December 1, 2009 03:42 — forked from lsparrish/gist:246009
Altered version of docl's 'key' handler with commentary
Original from docl:
: :: here ] ;
: nv-key ['] key 2 + compile ; immediate ( unvectored key )
:: nv-key dup 27 =if nv-key dup . nip ;then ; is key
Rather than "nv-key", a more generic word to get the default (non-vectored) definition can be used:
: default: ' drop which @ d->xt @ 2 + compile ; immediate
Compiler macros are often used to lay down code in the calling word. You'll see something like:
: foo ['] + compile ['] . compile ; immediate
This is fine, but sometimes you need to deal with other macros:
: bar 1 literal, 2 literal, ['] foo execute ; immediate
This approach has one problem: keeping track of what words need to be compiled and which need to be called. Plus, with Retro's use of word classes, you may have other words that are handled in other ways.
@crcx
crcx / backtick.rst
Created December 2, 2009 00:19 — forked from lsparrish/On the use of ` (back tick) in macros
Commentary on the use of ` in compiler macros

Compiler macros are often used to lay down code in the calling word. You'll see something like:

: foo ['] + compile ['] . compile ; immediate

This is fine, but sometimes you need to deal with other macros:

@crcx
crcx / Commentary on creating stubs
Created December 2, 2009 03:04 — forked from lsparrish/gist:246886
Commentary on the creation and use of stubs
It's sometimes useful to be able to create an empty stub which will be pointed to a real definition later.
The simple solution is just to do:
: foo ;
This creates a new defintion ("foo"), with no runtime action. In Retro all colon definitions can be revectored, so this is all that is strictly required. It does have a downside with regard to readability. We can address this by defining a new word specifically to create stubs.
: stub ( "- ) create 0 , 0 , 9 , ['] .word last @ d->class ! ;
We couldn’t find that file to show.
@crcx
crcx / a stab at handling the primitives in a more optimal manner
Created December 3, 2009 23:41
Commentary on a simple optimization involving primitives
In a standard Retro system, the following is an example of how code is compiled:
: foo 10 20 + 1+ . ;
foo:
lit 10
lit 20
call +
call 1+
call .
@crcx
crcx / A New Decompiler For Retro
Created December 5, 2009 19:17
Commentary on the Retro decompiler
( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ )
( This contains a set of words I find useful while debugging )
( code. )
( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ )
{{
variable addr
: pad ( - )
addr @ @
dup 1000000 <if 32 emit then