EXEC(is_ws);
wschar = *(ArgStackPtr);
ArgStackPtr--;
+ if(wschar == '\n')
+ printf((state_val) ? "=> " : ".. ");
} while(wschar);
/* Read the rest of the word */
}
defcode("findw", findw, 0, &get_word){
- puts("finding word");
word_t const* curr = (word_t const*)latest_val;
char* name = (char*)*(ArgStackPtr);
while(curr)
}
defcode("parsenum", parse_num, 0, &execute){
- puts("Parsing Number");
*(ArgStackPtr) = atoi((const char *)*(ArgStackPtr));
}
defcode("interpret", interpret, 0, &parse_num){
char* curr_word;
- printf("=> ");
+ //printf((0 == state_val) ? "=> " : ".. ");
/* Parse a word */
EXEC(get_word);
curr_word = (char*)*(ArgStackPtr);
{
*(ArgStackPtr) = (long)curr_word;
EXEC(parse_num);
- //number.codeword(number.code);
}
}
*(ArgStackPtr) = (long)word;
}
-/* Built-in Primitive Words
- *****************************************************************************/
-defcode("drop", drop, 0, &create){
- ArgStackPtr--;
-}
-
-defcode("swap", swap, 0, &drop){
- long temp = *(ArgStackPtr);
- *(ArgStackPtr) = *(ArgStackPtr-1);
- *(ArgStackPtr-1) = temp;
-}
-
-defcode("dup", dup, 0, &swap){
- ArgStackPtr++;
- *(ArgStackPtr) = *(ArgStackPtr-1);
-}
-
-defcode("over", over, 0, &dup){
- ArgStackPtr++;
- *(ArgStackPtr) = *(ArgStackPtr-2);
-}
-
-defcode("rot", rot, 0, &over){
- long temp = *(ArgStackPtr);
- *(ArgStackPtr) = *(ArgStackPtr-1);
- *(ArgStackPtr-1) = *(ArgStackPtr-2);
- *(ArgStackPtr-2) = temp;
-}
-
-defcode("-rot", nrot, 0, &rot){
- long temp = *(ArgStackPtr-2);
- *(ArgStackPtr-2) = *(ArgStackPtr-1);
- *(ArgStackPtr-1) = *(ArgStackPtr);
- *(ArgStackPtr) = temp;
-}
-
-defcode("2drop", twodrop, 0, &nrot){
- ArgStackPtr -= 2;
-}
-
-defcode("2dup", twodup, 0, &twodrop){
- ArgStackPtr += 2;
- *(ArgStackPtr-1) = *(ArgStackPtr-3);
- *(ArgStackPtr) = *(ArgStackPtr-2);
-}
-
-defcode("2swap", twoswap, 0, &twodup){
-}
-
-defcode("?dup", qdup, 0, &twoswap){
-}
-
-defcode("1+", incr, 0, &qdup){
- *(ArgStackPtr) += 1;
-}
-
-defcode("1-", decr, 0, &incr){
- *(ArgStackPtr) -= 1;
-}
-
-defcode("4+", incr4, 0, &decr){
- *(ArgStackPtr) += 1;
-}
-
-defcode("4-", decr4, 0, &incr4){
- *(ArgStackPtr) -= 1;
-}
-
-defcode("+", add, 0, &decr4){
- *(ArgStackPtr-1) += *(ArgStackPtr);
- ArgStackPtr--;
-}
-defcode("-", sub, 0, &add){
- *(ArgStackPtr-1) -= *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode("*", mul, 0, &sub){
- *(ArgStackPtr-1) *= *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode("/", divide, 0, &mul){
- *(ArgStackPtr-1) /= *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode("%", mod, 0, ÷){
- *(ArgStackPtr-1) %= *(ArgStackPtr);
- ArgStackPtr--;
-}
-defcode("/%", divmod, 0, &mod){
-}
-defcode("=", equal, 0, &divmod){
- *(ArgStackPtr-1) = *(ArgStackPtr-1) == *(ArgStackPtr);
- ArgStackPtr--;
-}
-defcode("!=", notequal, 0, &equal){
- *(ArgStackPtr-1) = *(ArgStackPtr-1) != *(ArgStackPtr);
- ArgStackPtr--;
-}
-defcode("<", lessthan, 0, ¬equal){
- *(ArgStackPtr-1) = *(ArgStackPtr-1) < *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode(">", greaterthan, 0, &lessthan){
- *(ArgStackPtr-1) = *(ArgStackPtr-1) > *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode("<=", lessthaneq, 0, &greaterthan){
- *(ArgStackPtr-1) = *(ArgStackPtr-1) <= *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode(">=", greaterthaneq, 0, &lessthaneq){
- *(ArgStackPtr-1) = *(ArgStackPtr-1) >= *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode("0=", zeroeq, 0, &greaterthaneq){
- *(ArgStackPtr) = *(ArgStackPtr) == 0;
-}
-
-defcode("0!=", zeroneq, 0, &zeroeq){
- *(ArgStackPtr) = *(ArgStackPtr) != 0;
-}
-
-defcode("0<", zerolt, 0, &zeroneq){
- *(ArgStackPtr) = *(ArgStackPtr) < 0;
-}
-
-defcode("0>", zerogt, 0, &zerolt){
- *(ArgStackPtr) = *(ArgStackPtr) > 0;
-}
-
-defcode("0<=", zerolte, 0, &zerogt){
- *(ArgStackPtr) = *(ArgStackPtr) <= 0;
-}
-
-defcode("0>=", zerogte, 0, &zerolte){
- *(ArgStackPtr) = *(ArgStackPtr) >= 0;
-}
-
-defcode("and", and, 0, &zerogte){
- *(ArgStackPtr-1) = *(ArgStackPtr-1) && *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode("or", or, 0, &and){
- *(ArgStackPtr-1) = *(ArgStackPtr-1) || *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode("not", not, 0, &or){
- *(ArgStackPtr) = !(*(ArgStackPtr));
-}
-
-defcode("band", band, 0, ¬){
- *(ArgStackPtr-1) = *(ArgStackPtr-1) & *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode("bor", bor, 0, &band){
- *(ArgStackPtr-1) = *(ArgStackPtr-1) | *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode("bxor", bxor, 0, &bor){
- *(ArgStackPtr-1) = *(ArgStackPtr-1) ^ *(ArgStackPtr);
- ArgStackPtr--;
-}
-
-defcode("bnot", bnot, 0, &bxor){
- *(ArgStackPtr) = ~(*(ArgStackPtr));
-}
-
-defcode("lit", lit, 0, &bnot){
- ArgStackPtr++;
- *(ArgStackPtr) = *(inst_ptr);
-}
-
-defcode("!", store, 0, &lit){
-}
-
-defcode("@", fetch, 0, &store){
- puts("@ Executed");
-}
-
-defcode("+!", addstore, 0, &fetch){
-}
-
-defcode("-!", substore, 0, &addstore){
-}
-
-defcode("b!", bytestore, 0, &substore){
-}
-
-defcode("b@", bytefetch, 0, &bytestore){
-}
-
-defcode("b@b!", bytecopy, 0, &bytefetch){
-}
-
-defcode("bmove", bytemove, 0, &bytecopy){
-}
-
-/* Input/Output Words
- *****************************************************************************/
-defcode("putc", put_io_c, 0, &bytemove){
- putc((char)*(ArgStackPtr), stdout);
- ArgStackPtr--;
-}
-
-/* Compiler Words
- *****************************************************************************/
defcode("wcwa", code_word_addr, 0, &put_io_c){
word_t const* word = (word_t const*)*(ArgStackPtr);
*(ArgStackPtr) = (long)word->codeword;
}
defcode("[", lbrack, 0, &comma){
- state_val = 0;
+ state_val = 1;
}
defcode("]", rbrack, 0, &lbrack){
- state_val = 1;
+ state_val = 0;
}
defcode(":", colon, 0, &rbrack){
defcode("0branch", branch_if_0, 0, &branch){
}
+/* Built-in Primitive Words
+ *****************************************************************************/
+//defcode("drop", drop, 0, &create){
+// ArgStackPtr--;
+//}
+//
+//defcode("swap", swap, 0, &drop){
+// long temp = *(ArgStackPtr);
+// *(ArgStackPtr) = *(ArgStackPtr-1);
+// *(ArgStackPtr-1) = temp;
+//}
+//
+//defcode("dup", dup, 0, &swap){
+// ArgStackPtr++;
+// *(ArgStackPtr) = *(ArgStackPtr-1);
+//}
+//
+//defcode("over", over, 0, &dup){
+// ArgStackPtr++;
+// *(ArgStackPtr) = *(ArgStackPtr-2);
+//}
+//
+//defcode("rot", rot, 0, &over){
+// long temp = *(ArgStackPtr);
+// *(ArgStackPtr) = *(ArgStackPtr-1);
+// *(ArgStackPtr-1) = *(ArgStackPtr-2);
+// *(ArgStackPtr-2) = temp;
+//}
+//
+//defcode("-rot", nrot, 0, &rot){
+// long temp = *(ArgStackPtr-2);
+// *(ArgStackPtr-2) = *(ArgStackPtr-1);
+// *(ArgStackPtr-1) = *(ArgStackPtr);
+// *(ArgStackPtr) = temp;
+//}
+//
+//defcode("2drop", twodrop, 0, &nrot){
+// ArgStackPtr -= 2;
+//}
+//
+//defcode("2dup", twodup, 0, &twodrop){
+// ArgStackPtr += 2;
+// *(ArgStackPtr-1) = *(ArgStackPtr-3);
+// *(ArgStackPtr) = *(ArgStackPtr-2);
+//}
+//
+//defcode("2swap", twoswap, 0, &twodup){
+//}
+//
+//defcode("?dup", qdup, 0, &twoswap){
+//}
+//
+//defcode("1+", incr, 0, &qdup){
+// *(ArgStackPtr) += 1;
+//}
+//
+//defcode("1-", decr, 0, &incr){
+// *(ArgStackPtr) -= 1;
+//}
+//
+//defcode("4+", incr4, 0, &decr){
+// *(ArgStackPtr) += 1;
+//}
+//
+//defcode("4-", decr4, 0, &incr4){
+// *(ArgStackPtr) -= 1;
+//}
+//
+//defcode("+", add, 0, &decr4){
+// *(ArgStackPtr-1) += *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("-", sub, 0, &add){
+// *(ArgStackPtr-1) -= *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("*", mul, 0, &sub){
+// *(ArgStackPtr-1) *= *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("/", divide, 0, &mul){
+// *(ArgStackPtr-1) /= *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("%", mod, 0, ÷){
+// *(ArgStackPtr-1) %= *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("/%", divmod, 0, &mod){
+//}
+//
+//defcode("=", equal, 0, &divmod){
+// *(ArgStackPtr-1) = *(ArgStackPtr-1) == *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("!=", notequal, 0, &equal){
+// *(ArgStackPtr-1) = *(ArgStackPtr-1) != *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("<", lessthan, 0, ¬equal){
+// *(ArgStackPtr-1) = *(ArgStackPtr-1) < *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode(">", greaterthan, 0, &lessthan){
+// *(ArgStackPtr-1) = *(ArgStackPtr-1) > *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("<=", lessthaneq, 0, &greaterthan){
+// *(ArgStackPtr-1) = *(ArgStackPtr-1) <= *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode(">=", greaterthaneq, 0, &lessthaneq){
+// *(ArgStackPtr-1) = *(ArgStackPtr-1) >= *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("0=", zeroeq, 0, &greaterthaneq){
+// *(ArgStackPtr) = *(ArgStackPtr) == 0;
+//}
+//
+//defcode("0!=", zeroneq, 0, &zeroeq){
+// *(ArgStackPtr) = *(ArgStackPtr) != 0;
+//}
+//
+//defcode("0<", zerolt, 0, &zeroneq){
+// *(ArgStackPtr) = *(ArgStackPtr) < 0;
+//}
+//
+//defcode("0>", zerogt, 0, &zerolt){
+// *(ArgStackPtr) = *(ArgStackPtr) > 0;
+//}
+//
+//defcode("0<=", zerolte, 0, &zerogt){
+// *(ArgStackPtr) = *(ArgStackPtr) <= 0;
+//}
+//
+//defcode("0>=", zerogte, 0, &zerolte){
+// *(ArgStackPtr) = *(ArgStackPtr) >= 0;
+//}
+//
+//defcode("and", and, 0, &zerogte){
+// *(ArgStackPtr-1) = *(ArgStackPtr-1) && *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("or", or, 0, &and){
+// *(ArgStackPtr-1) = *(ArgStackPtr-1) || *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("not", not, 0, &or){
+// *(ArgStackPtr) = !(*(ArgStackPtr));
+//}
+//
+//defcode("band", band, 0, ¬){
+// *(ArgStackPtr-1) = *(ArgStackPtr-1) & *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("bor", bor, 0, &band){
+// *(ArgStackPtr-1) = *(ArgStackPtr-1) | *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("bxor", bxor, 0, &bor){
+// *(ArgStackPtr-1) = *(ArgStackPtr-1) ^ *(ArgStackPtr);
+// ArgStackPtr--;
+//}
+//
+//defcode("bnot", bnot, 0, &bxor){
+// *(ArgStackPtr) = ~(*(ArgStackPtr));
+//}
+//
+//defcode("lit", lit, 0, &bnot){
+// ArgStackPtr++;
+// *(ArgStackPtr) = *(inst_ptr);
+//}
+//
+//defcode("!", store, 0, &lit){
+//}
+//
+//defcode("@", fetch, 0, &store){
+// puts("@ Executed");
+//}
+//
+//defcode("+!", addstore, 0, &fetch){
+//}
+//
+//defcode("-!", substore, 0, &addstore){
+//}
+//
+//defcode("b!", bytestore, 0, &substore){
+//}
+//
+//defcode("b@", bytefetch, 0, &bytestore){
+//}
+//
+//defcode("b@b!", bytecopy, 0, &bytefetch){
+//}
+//
+//defcode("bmove", bytemove, 0, &bytecopy){
+//}
+
+/* Input/Output Words
+ *****************************************************************************/
+defcode("putc", put_io_c, 0, &bytemove){
+ putc((char)*(ArgStackPtr), stdout);
+ ArgStackPtr--;
+}
+
+/* Compiler Words
+ *****************************************************************************/
+//defcode("wcwa", code_word_addr, 0, &put_io_c){
+// word_t const* word = (word_t const*)*(ArgStackPtr);
+// *(ArgStackPtr) = (long)word->codeword;
+//}
+//
+//defcode("wcda", code_data_addr, 0, &code_word_addr){
+// word_t const* word = (word_t const*)*(ArgStackPtr);
+// *(ArgStackPtr) = (long)word->code;
+//}
+//
+//defcode("immediate", immediate, 0, &code_data_addr){
+// ((word_t*)latest_val)->flags ^= f_immed_val;
+//}
+//
+//defcode("hidden", hidden, 0, &immediate){
+// ((word_t*)latest_val)->flags ^= f_hidden_val;
+//}
+//
+//defcode(",", comma, 0, &hidden){
+// /* Get the word we are currently compiling */
+// word_t* word = (word_t*)latest_val;
+// /* Put the next instruction in place of the terminating NULL that "here"
+// * points too */
+// *((long*)here_val) = *(ArgStackPtr);
+// ArgStackPtr--;
+// /* Resize the code section and relocate if necessary */
+// long currsize = sizeof(long) + (here_val - (long)word->code);
+// word->code = (long*)realloc(word->code, currsize + sizeof(long));
+// /* Update "here" and null terminate the code section */
+// here_val = (long)&(word->code[ (currsize / sizeof(long)) ]);
+// *((long*)here_val) = 0;
+//}
+//
+//defcode("[", lbrack, 0, &comma){
+// state_val = 1;
+//}
+//
+//defcode("]", rbrack, 0, &lbrack){
+// state_val = 0;
+//}
+//
+//defcode(":", colon, 0, &rbrack){
+// EXEC(get_word);
+// EXEC(create);
+// EXEC(rbrack);
+//}
+//
+//defcode(";", semicolon, 0, &colon){
+// ((word_t*)latest_val)->flags ^= f_hidden_val;
+// state_val = 0;
+//}
+
/* Main
*****************************************************************************/
int main(int argc, char** argv)