12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #include "command.h"
-
- #include "functions.h"
- #include "calcop.h"
- #include "cmpop.h"
- #include "stackops.h"
- #include "show.h"
- #include "logic.h"
-
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
-
- void initCmds( struct CmdList** cmds ) {
- initLogic();
- initFunctions();
- prependCmd(cmds, "DROP", dropCmd);
- prependCmd(cmds, "DUP", dupCmd);
- prependCmd(cmds, "SWAP", swapCmd);
- prependCmd(cmds, "ROT", rotCmd);
- prependCmd(cmds, "CR", crCmd);
- prependCmd(cmds, "IF", ifCmd);
- prependCmd(cmds, "ELSE", elseCmd);
- prependCmd(cmds, "THEN", thenCmd);
- prependCmd(cmds, "BEGIN", beginCmd);
- prependCmd(cmds, "UNTIL", untilCmd);
- prependCmd(cmds, ":", colonCmd);
- prependCmd(cmds, ";", semicolonCmd);
- prependCmd(cmds, "+", add);
- prependCmd(cmds, "-", sub);
- prependCmd(cmds, "*", mult);
- prependCmd(cmds, "/", divide);
- prependCmd(cmds, "=", equal);
- prependCmd(cmds, "<", less);
- prependCmd(cmds, ">", greater);
- prependCmd(cmds, ".", point);
- prependCmd(cmds, ".S", pointS);
- prependCmd(cmds, ".\"", pointQuote);
- }
-
- void prependCmd( struct CmdList** cmds, char* cmdName, void (*func)(struct State*) ) {
- struct CmdList* aux = *cmds;
- *cmds = (struct CmdList*)malloc(sizeof(struct CmdList));
- (*cmds)->next = aux;
- (*cmds)->func = func;
- strncpy((*cmds)->cmdName, cmdName, MAX_CMD_NAME_LENGTH);
- (*cmds)->cmdName[MAX_CMD_NAME_LENGTH-1] = '\0';
- }
-
- void endCmds( struct CmdList** pcmds ) {
- struct CmdList* cmds = *pcmds;
- struct CmdList* aux;
- while (cmds != NULL) {
- aux = cmds;
- cmds = cmds->next;
- free(aux);
- }
- *pcmds = NULL;
- }
-
- int tryCallCmds( struct CmdList* cmds, char* s, struct State* state ) {
- while (cmds != NULL) {
- if ( !strcmp(cmds->cmdName, s) ) {
- cmds->func(state);
- return 1;
- }
- cmds = cmds->next;
- }
- return 0;
- }
|