aboutsummaryrefslogtreecommitdiff
path: root/src/ducky.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ducky.h')
-rw-r--r--src/ducky.h32
1 files changed, 28 insertions, 4 deletions
diff --git a/src/ducky.h b/src/ducky.h
index 1552134..2fda55d 100644
--- a/src/ducky.h
+++ b/src/ducky.h
@@ -1,10 +1,20 @@
#include <stdbool.h>
#include <stdint.h>
+#include "platform.h"
#define DUCKY_MAGIC 0x4475634B /* DucK */
#define VARFORMAT "%d"
#define VARNAME_MAX 24
+
+#define DEFAULT_DELAY 0
+#define STRING_DELAY 0
+#define TOKEN_IS(str) (strcmp(tok, str) == 0)
+#define MAX_LINE_LEN 512
+
#define MAXOPSTACK 64
+#define MAXNUMSTACK 64
+#define CALL_STACK_SZ 64
+#define VARMAP_SIZE 256
/* define for rockbox cross-compile */
#define DUCKY_ROCKBOX
@@ -15,12 +25,26 @@
#define OK 0
-int ducky_interp(int fd, bool verbose);
-int ducky_compile(int fd, bool verbose, int out_fd);
-int ducky_vm(int fd);
-int ducky_to_c(int fd, int out_fd);
+enum special_id { SPECIAL_NULL = 0, SPECIAL_RAND, SPECIAL_TIME };
typedef int32_t imm_t;
typedef uint8_t instr_t;
typedef uint16_t varid_t;
typedef imm_t vartype;
+
+int ducky_interp(int fd, bool verbose);
+int ducky_compile(int fd, bool verbose, int out_fd);
+int ducky_vm(int fd);
+int ducky_to_c(int fd, int out_fd);
+
+int read_line(int fd, char *buf, size_t sz);
+
+off_t *index_lines(int fd, unsigned *numlines, bool labels, bool (*isValidVariable)(const char*), void (*setConst)(const char*, bool), void (*setVariable)(const char*, vartype));
+
+void vid_logf(const char *fmt, ...) __attribute__((format(printf,1,2)));
+
+void error(jmp_buf exit_point, int current_line, const char *fmt, ...) __attribute__((noreturn,format(printf,3,4)));
+
+#define ERROR(fmt, ...) (error(exit_point, current_line, fmt, ##__VA_ARGS__))
+void warning_real(int current_line, const char *fmt, ...) __attribute__((format(printf,2,3)));
+#define WARNING(fmt, ...) (warning_real(current_line, fmt, ##__VA_ARGS__))