Update contributed code I wrote, plus dlists written by eiz, to use if instead of ifte.

cvs
Chris Double 2005-09-25 06:03:36 +00:00
parent 6c133f3d94
commit c6d9341f13
15 changed files with 111 additions and 111 deletions

View File

@ -40,7 +40,7 @@ USING: concurrency kernel io lists threads math sequences namespaces unparser pr
"pong" swap send (pong-server0)
] [
"Pong server shutting down" swap send
] ifte ;
] if ;
: pong-server0 ( -- process)
[ (pong-server0) ] spawn ;
@ -172,7 +172,7 @@ C: promised-label ( promise -- promised-label )
?promise
] [
drop "Unfulfilled Promise"
] ifte ;
] if ;
M: promised-label pref-dim ( promised-label - dim )
dup promised-label-text label-size ;
@ -182,7 +182,7 @@ M: promised-label draw-gadget* ( promised-label -- )
dup promised-label-text draw-string ;
: fib ( n -- n )
yield dup 2 < [ drop 1 ] [ dup 1 - fib swap 2 - fib + ] ifte ;
yield dup 2 < [ drop 1 ] [ dup 1 - fib swap 2 - fib + ] if ;
: test-promise-ui ( -- )
<promise> dup <promised-label> gadget. [ 12 fib unparse swap fulfill ] cons spawn drop ;

View File

@ -130,7 +130,7 @@ USING: kernel concurrency concurrency-examples threads vectors
"received" reply
] [
drop f
] ifte
] if
] spawn
"sent" swap send-synchronous
] unit-test

View File

@ -36,10 +36,10 @@ USE: prettyprint
swapd [ (dlist-unlink) ] keep dlist-node-data nip
] [
dlist-node-next (dlist-pop?)
] ifte
] if
] [
2drop f
] ifte* ;
] if* ;
: dlist-pop? ( pred dlist -- obj | f )
#! Return first item in the dlist that when passed to the
@ -55,10 +55,10 @@ USE: prettyprint
2drop t
] [
dlist-node-next (dlist-pred?)
] ifte
] if
] [
drop f
] ifte* ;
] if* ;
: dlist-pred? ( pred dlist -- obj | f )
#! Return true if any item in the dlist that when passed to the
@ -237,7 +237,7 @@ TUPLE: tagged-message data from tag ;
r> car call
] [
r> 2drop
] ifte ;
] if ;
: recv ( forms -- )
#! Get a message from the processes mailbox. Compare it against the
@ -266,7 +266,7 @@ TUPLE: tagged-message data from tag ;
tagged-message-tag =
] [
2drop f
] ifte ;
] if ;
: send-synchronous ( message process -- reply )
#! Sends a message to the process using the 'message'
@ -337,7 +337,7 @@ SYMBOL: quit-cc
<tagged-message> swap send
] [
r> drop 3drop
] ifte ;
] if ;
: maybe-send-reply ( message pred quot -- )
#! Same as !result but if false is returned from
@ -351,10 +351,10 @@ SYMBOL: quit-cc
<tagged-message> swap send
] [
2drop
] ifte*
] if*
] [
r> drop 3drop
] ifte ;
] if ;
: server-cc ( -- cc | process)
#! Captures the current continuation and returns the value.

View File

@ -78,14 +78,14 @@ USE: namespaces
: too-low "Too low" web-print ;
: correct "Correct - you win!" web-print ;
: inexact-guess ( actual guess -- )
< [ too-high ] [ too-low ] ifte ;
< [ too-high ] [ too-low ] if ;
: judge-guess ( actual guess -- ? )
2dup = [
2drop correct f
] [
inexact-guess t
] ifte ;
] if ;
: number-to-guess ( -- n ) 0 100 random-int ;
@ -94,7 +94,7 @@ USE: namespaces
numbers-game-loop
] [
drop
] ifte ;
] if ;
: numbers-game number-to-guess numbers-game-loop ;

View File

@ -73,7 +73,7 @@ USE: sequences
#! Replace occurrences of single quotes with
#! backslash quote.
[
[ dup [ [[ CHAR: ' "\\'" ]] [[ CHAR: " "\\\"" ]] ] assoc [ % ] [ % ] ?ifte ] each
[ dup [ [[ CHAR: ' "\\'" ]] [[ CHAR: " "\\\"" ]] ] assoc [ % ] [ % ] ?if ] each
] "" make ;
: make-eval-javascript ( string -- string )
@ -119,10 +119,10 @@ USE: sequences
"browser" "responder" set
<table border= "1" table>
<tr> <th colspan= "2" th> "Source" write </th> </tr>
<tr> <td colspan= "2" td> [ [ parse ] catch [ "No such word" write ] [ car see ] ifte ] with-simple-html-output </td> </tr>
<tr> <td colspan= "2" td> [ [ parse ] catch [ "No such word" write ] [ car see ] if ] with-simple-html-output </td> </tr>
<tr> <th> "Apropos" write </th> <th> "Usages" write </th> </tr>
<tr> <td valign= "top" td> [ apropos ] with-simple-html-output </td>
<td valign= "top" td> [ [ parse ] catch [ "No such word" write ] [ car usages. ] ifte ] with-simple-html-output </td>
<td valign= "top" td> [ [ parse ] catch [ "No such word" write ] [ car usages. ] if ] with-simple-html-output </td>
</tr>
</table>
] bind ;
@ -230,7 +230,7 @@ USE: sequences
[
run-eval-requester
] catch
dup [ show-message-page ] [ drop ] ifte
dup [ show-message-page ] [ drop ] if
] forever ;
"eval" [ [ ] "None" [ ] <evaluator> eval-responder ] install-cont-responder

View File

@ -34,7 +34,7 @@ USE: lists
: get-live-updater-js* ( stream -- string )
#! Read all lines from the stream, creating a string of the result.
dup stream-readln dup [ % "\n" % get-live-updater-js* ] [ drop stream-close ] ifte ;
dup stream-readln dup [ % "\n" % get-live-updater-js* ] [ drop stream-close ] if ;
: get-live-updater-js ( filename -- string )
#! Return the liveUpdater javascript code as a string.

View File

@ -197,9 +197,9 @@ USE: sequences
t
] [
f
] ifte
] ifte
] ifte ;
] if
] if
] if ;
: replace-invalid-username-chars ( str -- str )
#! Return a string with invalid username characters mapped to underscores.
@ -207,7 +207,7 @@ USE: sequences
dup valid-username-char [
] [
drop CHAR: _
] ifte
] if
] map ;
: is-valid-username? ( username -- bool )
@ -260,7 +260,7 @@ USE: sequences
] [
<todo> init-new-todo
"You have successfully registered your todo list." show-message-page
] ifte ;
] if ;
: login-request-paragraph ( -- )
#! Display the paragraph requesting the user to login or register.
@ -334,11 +334,11 @@ USE: sequences
: priority-valid? ( string -- bool )
#! Test the string containing a priority to see if it is
#! valid. It should be a single digit from 0-9.
dup length 1 = [ 0 swap nth digit? ] [ drop f ] ifte ;
dup length 1 = [ 0 swap nth digit? ] [ drop f ] if ;
: todo-details-valid? ( priority description -- bool )
#! Return true if a valid priority and description were entered.
length 0 > [ priority-valid? ] [ drop f ] ifte ;
length 0 > [ priority-valid? ] [ drop f ] if ;
: get-new-todo-item ( -- <todo-item> )
#! Enter a new item to the current todo list.
@ -352,7 +352,7 @@ USE: sequences
2drop
"Please ensure you enter a Priority from 0-9 and a description." show-message-page
get-new-todo-item
] ifte ;
] if ;
: write-get-password-form ( url -- )
#! Display the HTML for a form allowing entry of a
@ -388,11 +388,11 @@ USE: sequences
] [
"Your new password did not match. The password was NOT changed." show-message-page
f
] ifte
] if
] [
"You entered an incorrect old password. The password was NOT changed." show-message-page
f
] ifte
] if
] bind ;
: edit-item-details ( item -- )
@ -407,7 +407,7 @@ USE: sequences
drop drop
"Please ensure you enter a Priority from 0-9 and a description." show-message-page
edit-item-details
] ifte ;
] if ;
: save-current-todo ( -- )
#! Save the current todo list
@ -426,7 +426,7 @@ USE: sequences
"Delete" swap [ "todo" get swap delete-item save-current-todo ] lcurry1 quot-href
] [
"Complete" swap [ set-item-completed save-current-todo ] lcurry1 quot-href
] ifte ;
] if ;
: write-edit-action ( item -- )
#! Write out html to allow editing an item.
@ -435,14 +435,14 @@ USE: sequences
: item-class ( <todo-item> -- string )
#! Return the class to use for displaying the row for the
#! item.
item-complete? [ "complete" ] [ "item" ] ifte ;
item-complete? [ "complete" ] [ "item" ] if ;
: write-item-row ( <todo-item> -- )
#! Write the todo list item as an HTML row.
dup dup dup dup
dup item-class [
[ item-priority write ]
[ item-complete? [ "Yes" ] [ "No" ] ifte write ]
[ item-complete? [ "Yes" ] [ "No" ] if write ]
[ item-description write ]
[ write-mark-complete-action ]
[ write-edit-action ]
@ -468,7 +468,7 @@ USE: sequences
"Your password has been changed." show-message-page
] [
drop
] ifte ;
] if ;
: show-todo-list ( -- )
#! Show the current todo list.

View File

@ -119,7 +119,7 @@ USE: unparser
load-todo password-matches?
] [
2drop f
] ifte ;
] if ;
: each-bind ( quot list -- )
[ swap [ bind ] keep ] each drop ;

View File

@ -17,7 +17,7 @@ C: dlist-node
[ dlist-last f <dlist-node> ] keep
[ dlist-last [ dupd set-dlist-node-next ] when* ] keep
2dup set-dlist-last
dup dlist-first [ 2drop ] [ set-dlist-first ] ifte ;
dup dlist-first [ 2drop ] [ set-dlist-first ] if ;
: dlist-empty? ( dlist -- ? )
dlist-first f = ;
@ -28,7 +28,7 @@ C: dlist-node
] when*
2dup swap dlist-first eq? [
dlist-node-next swap set-dlist-first
] [ 2drop ] ifte ;
] [ 2drop ] if ;
: (unlink-next) ( dlist dnode -- )
dup dlist-node-next [
@ -36,7 +36,7 @@ C: dlist-node
] when*
2dup swap dlist-last eq? [
dlist-node-prev swap set-dlist-last
] [ 2drop ] ifte ;
] [ 2drop ] if ;
: (dlist-unlink) ( dlist dnode -- )
[ (unlink-prev) ] 2keep (unlink-next) ;
@ -45,7 +45,7 @@ C: dlist-node
[ dlist-first dlist-node-data ] keep dup dlist-first (dlist-unlink) ;
: dlist-pop-front ( dlist -- data )
dup dlist-empty? [ drop f ] [ (dlist-pop-front) ] ifte ;
dup dlist-empty? [ drop f ] [ (dlist-pop-front) ] if ;
: (dlist-each) ( quot dnode -- )
[
@ -53,7 +53,7 @@ C: dlist-node
dlist-node-next (dlist-each)
] [
drop
] ifte* ; inline
] if* ; inline
: dlist-each ( dlist quot -- )
swap dlist-first (dlist-each) ; inline

View File

@ -105,7 +105,7 @@ DEFER: lnil
[ , \ lcdr , , \ lmap , ] [ ] make delay >r
[ , \ lcar , , \ call , ] [ ] make delay r>
lcons
] ifte ;
] if ;
: ltake ( n llist -- llist )
#! Return a lazy list containing the first n items from
@ -120,8 +120,8 @@ DEFER: lnil
[ [ 1 - ] cons , \ call , , \ lcdr , \ ltake , ] [ ] make delay >r
[ , \ lcar , ] [ ] make delay r>
lcons
] ifte
] ifte ;
] if
] if ;
DEFER: lsubset
TUPLE: lsubset-state llist pred ;
@ -140,7 +140,7 @@ TUPLE: lsubset-state llist pred ;
] [ ( state lcar -- )
drop dup lsubset-state-llist lcdr over set-lsubset-state-llist
(lsubset-car)
] ifte ;
] if ;
: (lsubset-set-first-car) ( state -- bool )
#! Set the state to the first valid car. If none found
@ -154,8 +154,8 @@ TUPLE: lsubset-state llist pred ;
] [
over set-lsubset-state-llist
(lsubset-set-first-car)
] ifte
] ifte ;
] if
] if ;
: lsubset ( llist pred -- llist )
#! Return a lazy list containing only the items from the original
@ -170,8 +170,8 @@ TUPLE: lsubset-state llist pred ;
[ (lsubset-car) ] cons delay r> lcons
] [
drop lnil
] ifte
] ifte ;
] if
] if ;
DEFER: lappend*
DEFER: (lappend*)
@ -193,11 +193,11 @@ USE: io
nip
luncons ( state rest-car rest-cdr -- )
<lappend*-state> (lappend*)
] ifte
] if
] [ ( state cdr -- )
swap lappend*-state-rest <lappend*-state> (lappend*)
] ifte
] ifte ;
] if
] if ;
: (lappend*-car) ( state -- value )
#! Given the state object, do the car portion of the
@ -206,7 +206,7 @@ USE: io
nip
] [ ( state current -- )
lcar nip
] ifte ;
] if ;
: (lappend*) ( state -- llist )
#! Do the main work of the lazy list appending using a
@ -238,7 +238,7 @@ DEFER: list>llist
2drop
] [
>r luncons r> tuck >r >r call r> r> leach
] ifte ;
] if ;
: (llist>list) ( result llist -- list )
@ -248,7 +248,7 @@ DEFER: list>llist
] [
dup lcar ( result llist car )
swap lcdr >r swons r> (llist>list)
] ifte ;
] if ;
: llist>list ( llist -- list )
#! Convert a lazy list to a normal list. This will cause
@ -261,7 +261,7 @@ DEFER: list>llist
uncons [ list>llist ] cons delay >r unit delay r> lcons
] [
drop lnil
] ifte ;
] if ;
! M: lcons nth lnth ;

View File

@ -98,14 +98,14 @@ M: list pempty? ( object -- bool )
2drop ""
] [
head
] ifte ;
] if ;
: (list-take) ( n list accum -- list )
>r >r 1 - dup 0 < [
drop r> drop r> reverse
] [
r> uncons swap r> cons (list-take)
] ifte ;
] if ;
: list-take ( n list -- list )
#! Return a list with the first 'n' characters
@ -133,7 +133,7 @@ M: list ptake ( n object -- object )
2drop ""
] [
tail
] ifte ;
] if ;
: list-drop ( n list -- list )
#! Return a list with the first 'n' items
@ -142,7 +142,7 @@ M: list ptake ( n object -- object )
drop r>
] [
r> cdr list-drop
] ifte ;
] if ;
GENERIC: pdrop
@ -165,7 +165,7 @@ M: list pdrop ( n object -- object )
swap over length swap pdrop swons unit delay lunit
] [
2drop lnil
] ifte ;
] if ;
: token ( string -- parser )
#! Return a token parser that parses the given string.
@ -182,8 +182,8 @@ M: list pdrop ( n object -- object )
ph:t swons unit delay lunit
] [
drop lnil
] ifte
] ifte ;
] if
] if ;
: satisfy ( p -- parser )
#! Return a parser that succeeds if the predicate 'p',
@ -202,7 +202,7 @@ M: list pdrop ( n object -- object )
ph:t >r swap call r> swons unit delay lunit
] [
2drop lnil
] ifte ;
] if ;
: satisfy2 ( pred quot -- parser )
#! Return a satisfy2-parser.
@ -322,7 +322,7 @@ M: list pdrop ( n object -- object )
nip
] [ ( quot result -- )
[ (<@-parser-replace) ] rot swons lmap
] ifte ;
] if ;
: <@ ( parser quot -- parser )
#! Return an <@-parser.

View File

@ -193,7 +193,7 @@ USING: kernel lazy parser-combinators test errors strings parser lists math sequ
: pdigit [ digit? ] satisfy [ digit> ] <@ ;
: pnatural pdigit <*> ;
: pnatural2 pnatural [ car [ >digit ] map >string dup pempty? [ drop 0 ] [ string>number ] ifte unit ] <@ ;
: pnatural2 pnatural [ car [ >digit ] map >string dup pempty? [ drop 0 ] [ string>number ] if unit ] <@ ;
[
[ "" 12345 ]

View File

@ -111,7 +111,7 @@ M: cpu write-port ( value port cpu -- )
cpu-ram nth
] [
2drop HEX: FF
] ifte ;
] if ;
: read-word ( addr cpu -- word )
#! Read a 16-bit word from memory at the specified address.
@ -141,7 +141,7 @@ M: cpu write-port ( value port cpu -- )
] [
3dup cpu-ram set-nth
update-video
] ifte ;
] if ;
: write-word ( value addr cpu -- )
@ -197,25 +197,25 @@ M: cpu write-port ( value port cpu -- )
: update-zero-flag ( result cpu -- )
#! If the result of an instruction has the value 0, this
#! flag is set, otherwise it is reset.
swap HEX: FF bitand 0 = [ zero-flag set-flag ] [ zero-flag clear-flag ] ifte ;
swap HEX: FF bitand 0 = [ zero-flag set-flag ] [ zero-flag clear-flag ] if ;
: update-sign-flag ( result cpu -- )
#! If the most significant bit of the result
#! has the value 1 then the flag is set, otherwise
#! it is reset.
swap HEX: 80 bitand 0 = [ sign-flag clear-flag ] [ sign-flag set-flag ] ifte ;
swap HEX: 80 bitand 0 = [ sign-flag clear-flag ] [ sign-flag set-flag ] if ;
: update-parity-flag ( result cpu -- )
#! If the modulo 2 sum of the bits of the result
#! is 0, (ie. if the result has even parity) this flag
#! is set, otherwise it is reset.
swap HEX: FF bitand 2 mod 0 = [ parity-flag set-flag ] [ parity-flag clear-flag ] ifte ;
swap HEX: FF bitand 2 mod 0 = [ parity-flag set-flag ] [ parity-flag clear-flag ] if ;
: update-carry-flag ( result cpu -- )
#! If the instruction resulted in a carry (from addition)
#! or a borrow (from subtraction or a comparison) out of the
#! higher order bit, this flag is set, otherwise it is reset.
swap dup HEX: 100 >= swap 0 < or [ carry-flag set-flag ] [ carry-flag clear-flag ] ifte ;
swap dup HEX: 100 >= swap 0 < or [ carry-flag set-flag ] [ carry-flag clear-flag ] if ;
: update-half-carry-flag ( original change-by result cpu -- )
#! If the instruction caused a carry out of bit 3 and into bit 4 of the
@ -224,7 +224,7 @@ M: cpu write-port ( value port cpu -- )
#! 'change-by' is the amount it is being added or decremented by.
#! 'result' is the result of that change.
>r bitxor bitxor HEX: 10 bitand 0 = not r>
swap [ half-carry-flag set-flag ] [ half-carry-flag clear-flag ] ifte ;
swap [ half-carry-flag set-flag ] [ half-carry-flag clear-flag ] if ;
: update-flags ( result cpu -- )
2dup update-carry-flag
@ -302,7 +302,7 @@ M: cpu write-port ( value port cpu -- )
: add-word ( lhs rhs cpu -- result )
#! Add rhs to lhs. Note that only the carry flag is modified
#! and only if there is a carry out of the double precision add.
>r + r> over HEX: FFFF > [ carry-flag set-flag ] [ drop ] ifte HEX: FFFF bitand ;
>r + r> over HEX: FFFF > [ carry-flag set-flag ] [ drop ] if HEX: FFFF bitand ;
: bit3or ( lhs rhs -- 0|1 )
#! bitor bit 3 of the two numbers on the stack
@ -316,7 +316,7 @@ M: cpu write-port ( value port cpu -- )
[ drop bit3or ] 3keep ( bit3or lhs rhs cpu )
>r bitand r> [ update-flags ] 2keep
[ carry-flag clear-flag ] keep
rot 0 = [ half-carry-flag set-flag ] [ half-carry-flag clear-flag ] ifte
rot 0 = [ half-carry-flag set-flag ] [ half-carry-flag clear-flag ] if
HEX: FF bitand ;
: xor-byte ( lhs rhs cpu -- result )
@ -382,7 +382,7 @@ M: cpu write-port ( value port cpu -- )
set-cpu-pc
] [
2drop
] ifte ;
] if ;
: inc-cycles ( n cpu -- )
#! Increment the number of cpu cycles
@ -422,7 +422,7 @@ instructions length [
drop
] [
[ not-implemented ] swap instructions set-nth
] ifte
] if
] each
M: cpu reset ( cpu -- )
@ -450,7 +450,7 @@ C: cpu ( cpu -- cpu )
-rot [ set-nth ] 2keep >r 1 + r> (load-rom)
] [
2drop
] ifte* ;
] if* ;
#! Reads the ROM from stdin and stores it in ROM from
#! offset n.
@ -482,7 +482,7 @@ C: cpu ( cpu -- cpu )
nip
] [
[ "Undefined 8080 opcode: " % number>string % ] "" make throw
] ifte* ;
] if* ;
: process-interrupts ( cpu -- )
#! Process any hardware interrupts
@ -495,8 +495,8 @@ C: cpu ( cpu -- cpu )
HEX: 08 over set-cpu-last-interrupt HEX: 08 swap interrupt
] [
HEX: 10 over set-cpu-last-interrupt HEX: 10 swap interrupt
] ifte
] ifte ;
] if
] if ;
: step ( cpu -- )
#! Run a single 8080 instruction
@ -606,7 +606,7 @@ SYMBOL: $4
dup $3 = [ drop 2 over nth ] when
dup $4 = [ drop 3 over nth ] when
nip
] ifte ;
] if ;
: test-rp
{ 4 5 3 } [ 1 $2 [ $1 4 ] ] replace-patterns ;
@ -631,20 +631,20 @@ SYMBOL: $4
: (emulate-RLCA) ( cpu -- )
#! The content of the accumulator is rotated left
#! one position. The low order bit and the carry flag
#! are both set to the value shifted out of the high
#! are both set to the value shifd out of the high
#! order bit position. Only the carry flag is affected.
[ cpu-a -7 shift ] keep
over 0 = [ dup carry-flag clear-flag ] [ dup carry-flag set-flag ] ifte
over 0 = [ dup carry-flag clear-flag ] [ dup carry-flag set-flag ] if
[ cpu-a 1 shift HEX: FF bitand ] keep
>r bitor r> set-cpu-a ;
: (emulate-RRCA) ( cpu -- )
#! The content of the accumulator is rotated right
#! one position. The high order bit and the carry flag
#! are both set to the value shifted out of the low
#! are both set to the value shifd out of the low
#! order bit position. Only the carry flag is affected.
[ cpu-a 1 bitand 7 shift ] keep
over 0 = [ dup carry-flag clear-flag ] [ dup carry-flag set-flag ] ifte
over 0 = [ dup carry-flag clear-flag ] [ dup carry-flag set-flag ] if
[ cpu-a 254 bitand -1 shift ] keep
>r bitor r> set-cpu-a ;
@ -652,23 +652,23 @@ SYMBOL: $4
#! The content of the accumulator is rotated left
#! one position through the carry flag. The low
#! order bit is set equal to the carry flag and
#! the carry flag is set to the value shifted out
#! the carry flag is set to the value shifd out
#! of the high order bit. Only the carry flag is
#! affected.
[ carry-flag swap flag-set? [ 1 ] [ 0 ] ifte ] keep
[ carry-flag swap flag-set? [ 1 ] [ 0 ] if ] keep
[ cpu-a 127 bitand 7 shift ] keep
dup cpu-a 128 bitand 0 = [ dup carry-flag clear-flag ] [ dup carry-flag set-flag ] ifte
dup cpu-a 128 bitand 0 = [ dup carry-flag clear-flag ] [ dup carry-flag set-flag ] if
>r bitor r> set-cpu-a ;
: (emulate-RRA) ( cpu -- )
#! The content of the accumulator is rotated right
#! one position through the carry flag. The high order
#! bit is set to the carry flag and the carry flag is
#! set to the value shifted out of the low order bit.
#! set to the value shifd out of the low order bit.
#! Only the carry flag is affected.
[ carry-flag swap flag-set? [ BIN: 10000000 ] [ 0 ] ifte ] keep
[ carry-flag swap flag-set? [ BIN: 10000000 ] [ 0 ] if ] keep
[ cpu-a 254 bitand -1 shift ] keep
dup cpu-a 1 bitand 0 = [ dup carry-flag clear-flag ] [ dup carry-flag set-flag ] ifte
dup cpu-a 1 bitand 0 = [ dup carry-flag clear-flag ] [ dup carry-flag set-flag ] if
>r bitor r> set-cpu-a ;
: (emulate-CPL) ( cpu -- )
@ -683,14 +683,14 @@ SYMBOL: $4
#! digits.
[
dup half-carry-flag swap flag-set? swap
cpu-a BIN: 1111 bitand 9 > or [ 6 ] [ 0 ] ifte
cpu-a BIN: 1111 bitand 9 > or [ 6 ] [ 0 ] if
] keep
[ cpu-a + ] keep
[ update-flags ] 2keep
[ swap HEX: FF bitand swap set-cpu-a ] keep
[
dup carry-flag swap flag-set? swap
cpu-a -4 shift BIN: 1111 bitand 9 > or [ 96 ] [ 0 ] ifte
cpu-a -4 shift BIN: 1111 bitand 9 > or [ 96 ] [ 0 ] if
] keep
[ cpu-a + ] keep
[ update-flags ] 2keep
@ -709,7 +709,7 @@ SYMBOL: $4
[[ "RST-28H" [ HEX: 28 swap (emulate-RST) ] ]]
[[ "RST-30H" [ HEX: 30 swap (emulate-RST) ] ]]
[[ "RST-38H" [ HEX: 38 swap (emulate-RST) ] ]]
[[ "RET-F|FF" [ dup $1 [ 6 over inc-cycles ret-from-sub ] [ drop ] ifte ] ]]
[[ "RET-F|FF" [ dup $1 [ 6 over inc-cycles ret-from-sub ] [ drop ] if ] ]]
[[ "CP-N" [ [ cpu-a ] keep [ next-byte ] keep sub-byte drop ] ]]
[[ "CP-R" [ [ cpu-a ] keep [ $1 ] keep sub-byte drop ] ]]
[[ "CP-(RR)" [ [ cpu-a ] keep [ $1 ] keep [ read-byte ] keep sub-byte drop ] ]]
@ -755,10 +755,10 @@ SYMBOL: $4
[[ "DEC-(RR)" [ [ $1 ] keep [ read-byte ] keep [ dec-byte ] keep [ $1 ] keep write-byte ] ]]
[[ "INC-(RR)" [ [ $1 ] keep [ read-byte ] keep [ inc-byte ] keep [ $1 ] keep write-byte ] ]]
[[ "JP-NN" [ [ cpu-pc ] keep [ read-word ] keep set-cpu-pc ] ]]
[[ "JP-F|FF,NN" [ [ $1 ] keep swap [ [ next-word ] keep [ set-cpu-pc ] keep [ cpu-cycles ] keep swap 5 + swap set-cpu-cycles ] [ [ cpu-pc 2 + ] keep set-cpu-pc ] ifte ] ]]
[[ "JP-F|FF,NN" [ [ $1 ] keep swap [ [ next-word ] keep [ set-cpu-pc ] keep [ cpu-cycles ] keep swap 5 + swap set-cpu-cycles ] [ [ cpu-pc 2 + ] keep set-cpu-pc ] if ] ]]
[[ "JP-(RR)" [ [ $1 ] keep set-cpu-pc ] ]]
[[ "CALL-NN" [ (emulate-CALL) ] ]]
[[ "CALL-F|FF,NN" [ [ $1 ] keep swap [ 7 over inc-cycles (emulate-CALL) ] [ [ cpu-pc 2 + ] keep set-cpu-pc ] ifte ] ]]
[[ "CALL-F|FF,NN" [ [ $1 ] keep swap [ 7 over inc-cycles (emulate-CALL) ] [ [ cpu-pc 2 + ] keep set-cpu-pc ] if ] ]]
[[ "LD-RR,NN" [ [ next-word ] keep $2 ] ]]
[[ "LD-RR,RR" [ [ $3 ] keep $2 ] ]]
[[ "LD-R,N" [ [ next-byte ] keep $2 ] ]]
@ -1599,7 +1599,7 @@ INSTRUCTION: RST 38H ; opcode FF cycles 11
" 0 0 0" write
] [
" 1 1 1" write
] ifte
] if
] each-8bit
] repeat terpri
] repeat

View File

@ -57,8 +57,8 @@ M: space-invaders reset ( cpu -- )
HEX: 08 over set-cpu-last-interrupt HEX: 08 swap interrupt
] [
HEX: 10 over set-cpu-last-interrupt HEX: 10 swap interrupt
] ifte
] ifte ;
] if
] if ;
: gui-frame ( cpu -- )
dup gui-frame/2 gui-frame/2 ;
@ -101,7 +101,7 @@ M: key-up-event handle-si-event ( cpu event -- quit? )
: sync-frame ( millis -- millis )
#! Sleep until the time for the next frame arrives.
1000 60 / >fixnum + millis - dup 0 > [ sleep ] [ drop ] ifte millis ;
1000 60 / >fixnum + millis - dup 0 > [ sleep ] [ drop ] if millis ;
: (event-loop) ( millis cpu event -- )
dup SDL_PollEvent [
@ -109,12 +109,12 @@ M: key-up-event handle-si-event ( cpu event -- quit? )
3drop
] [
(event-loop)
] ifte
] if
] [
>r >r sync-frame r> r>
[ over gui-frame ] with-surface
(event-loop)
] ifte ;
] if ;
: event-loop ( cpu event -- )
millis -rot (event-loop) ;
@ -143,7 +143,7 @@ M: key-up-event handle-si-event ( cpu event -- quit? )
- surface get -rot black rgb pixelColor
] [
- surface get -rot 2dup color rgb pixelColor
] ifte ;
] if ;
: do-video-update ( value addr cpu -- )
drop addr>xy rot ( x y value )
@ -161,7 +161,7 @@ M: space-invaders update-video ( value addr cpu -- )
do-video-update
] [
3drop
] ifte ;
] if ;
: run ( -- )
224 256 0 SDL_HWSURFACE [

View File

@ -158,7 +158,7 @@ END-STRUCT
drop
] [
"sqlite returned an error. See datastack for the error value." throw
] ifte ;
] if ;
: sqlite-open ( filename -- db )
#! Open the database referenced by the filename and return
@ -214,8 +214,8 @@ END-STRUCT
drop t
] [
sqlite-check-result t
] ifte
] ifte ;
] if
] if ;
: sqlite-each ( statement quot -- )
#! Execute the SQL statement, and call the quotation for
@ -225,7 +225,7 @@ END-STRUCT
2drop
] [
[ call ] 2keep sqlite-each
] ifte ;
] if ;
! For comparison, here is the linrec implementation of sqlite-each
! [ drop sqlite3_step step-complete? ]
@ -238,7 +238,7 @@ END-STRUCT
2nip
] [
>r 2dup call r> cons (sqlite-map)
] ifte ;
] if ;
: sqlite-map ( statement quot -- )
[ ] (sqlite-map) ;