Files
c0db/public/vm/c0ffi.js
2015-04-22 00:14:46 -04:00

167 lines
4.3 KiB
JavaScript

exports.NATIVE_FADD = 0
exports.NATIVE_FDIV = 1
exports.NATIVE_FLESS = 2
exports.NATIVE_FMUL = 3
exports.NATIVE_FSUB = 4
exports.NATIVE_FTOI = 5
exports.NATIVE_ITOF = 6
exports.NATIVE_PRINT_FPT = 7
exports.NATIVE_PRINT_HEX = 8
exports.NATIVE_PRINT_INT = 9
/* args */
exports.NATIVE_ARGS_FLAG = 10
exports.NATIVE_ARGS_INT = 11
exports.NATIVE_ARGS_PARSE = 12
exports.NATIVE_ARGS_STRING = 13
/* conio */
exports.NATIVE_EOF = 14
exports.NATIVE_FLUSH = 15
exports.NATIVE_PRINT = 16
exports.NATIVE_PRINTBOOL = 17
exports.NATIVE_PRINTCHAR = 18
exports.NATIVE_PRINTINT = 19
exports.NATIVE_PRINTLN = 20
exports.NATIVE_READLINE = 21
/* curses */
exports.NATIVE_C_ADDCH = 22
exports.NATIVE_C_CBREAK = 23
exports.NATIVE_C_CURS_SET = 24
exports.NATIVE_C_DELCH = 25
exports.NATIVE_C_ENDWIN = 26
exports.NATIVE_C_ERASE = 27
exports.NATIVE_C_GETCH = 28
exports.NATIVE_C_INITSCR = 29
exports.NATIVE_C_KEYPAD = 30
exports.NATIVE_C_MOVE = 31
exports.NATIVE_C_NOECHO = 32
exports.NATIVE_C_REFRESH = 33
exports.NATIVE_C_SUBWIN = 34
exports.NATIVE_C_WADDCH = 35
exports.NATIVE_C_WADDSTR = 36
exports.NATIVE_C_WCLEAR = 37
exports.NATIVE_C_WERASE = 38
exports.NATIVE_C_WMOVE = 39
exports.NATIVE_C_WREFRESH = 40
exports.NATIVE_C_WSTANDEND = 41
exports.NATIVE_C_WSTANDOUT = 42
exports.NATIVE_CC_GETBEGX = 43
exports.NATIVE_CC_GETBEGY = 44
exports.NATIVE_CC_GETMAXX = 45
exports.NATIVE_CC_GETMAXY = 46
exports.NATIVE_CC_GETX = 47
exports.NATIVE_CC_GETY = 48
exports.NATIVE_CC_HIGHLIGHT = 49
exports.NATIVE_CC_KEY_IS_BACKSPACE = 50
exports.NATIVE_CC_KEY_IS_DOWN = 51
exports.NATIVE_CC_KEY_IS_ENTER = 52
exports.NATIVE_CC_KEY_IS_LEFT = 53
exports.NATIVE_CC_KEY_IS_RIGHT = 54
exports.NATIVE_CC_KEY_IS_UP = 55
exports.NATIVE_CC_WBOLDOFF = 56
exports.NATIVE_CC_WBOLDON = 57
exports.NATIVE_CC_WDIMOFF = 58
exports.NATIVE_CC_WDIMON = 59
exports.NATIVE_CC_WREVERSEOFF = 60
exports.NATIVE_CC_WREVERSEON = 61
exports.NATIVE_CC_WUNDEROFF = 62
exports.NATIVE_CC_WUNDERON = 63
/* file */
exports.NATIVE_FILE_CLOSE = 64
exports.NATIVE_FILE_CLOSED = 65
exports.NATIVE_FILE_EOF = 66
exports.NATIVE_FILE_READ = 67
exports.NATIVE_FILE_READLINE = 68
/* img */
exports.NATIVE_IMAGE_CLONE = 69
exports.NATIVE_IMAGE_CREATE = 70
exports.NATIVE_IMAGE_DATA = 71
exports.NATIVE_IMAGE_HEIGHT = 72
exports.NATIVE_IMAGE_LOAD = 73
exports.NATIVE_IMAGE_SAVE = 74
exports.NATIVE_IMAGE_SUBIMAGE = 75
exports.NATIVE_IMAGE_WIDTH = 76
/* parse */
exports.NATIVE_INT_TOKENS = 77
exports.NATIVE_NUM_TOKENS = 78
exports.NATIVE_PARSE_BOOL = 79
exports.NATIVE_PARSE_INT = 80
exports.NATIVE_PARSE_INTS = 81
exports.NATIVE_PARSE_TOKENS = 82
/* string */
exports.NATIVE_CHAR_CHR = 83
exports.NATIVE_CHAR_ORD = 84
exports.NATIVE_STRING_CHARAT = 85
exports.NATIVE_STRING_COMPARE = 86
exports.NATIVE_STRING_EQUAL = 87
exports.NATIVE_STRING_FROM_CHARARRAY = 88
exports.NATIVE_STRING_FROMBOOL = 89
exports.NATIVE_STRING_FROMCHAR = 90
exports.NATIVE_STRING_FROMINT = 91
exports.NATIVE_STRING_JOIN = 92
exports.NATIVE_STRING_LENGTH = 93
exports.NATIVE_STRING_SUB = 94
exports.NATIVE_STRING_TERMINATED = 95
exports.NATIVE_STRING_TO_CHARARRAY = 96
exports.NATIVE_STRING_TOLOWER = 97
callbacks = {};
callbacks[exports.NATIVE_STRING_LENGTH] =
function(args) {
return args[0].length;
};
callbacks[exports.NATIVE_STRING_TO_CHARARRAY] =
function(args, vm) {
var address = vm.heap.length;
vm.heap.push(args[0].length+1);
vm.heap.push(1);
for (var i = 0; i < args[0].length; i++) {
vm.heap.push(args[0][i]);
}
vm.heap.push(0);
return address;
};
callbacks[exports.NATIVE_STRING_FROM_CHARARRAY] =
function(args, vm) {
var i = args[0] + 2;
var result = "";
while (vm.heap[i] !== 0) {
result += vm.heap[i];
i++;
}
return result;
};
callbacks[exports.NATIVE_CHAR_CHR] =
function(args) {
return String.fromCharCode(args[0]);
};
callbacks[exports.NATIVE_CHAR_ORD] =
function(args) {
if (typeof args[0] == "string")
return args[0].charCodeAt(0);
return args[0];
};
callbacks[exports.NATIVE_STRING_COMPARE] = function(args) {
if (args[0] < args[1]) return -1;
if (args[0] > args[1]) return 1;
return 0;
}
callbacks[exports.NATIVE_STRING_EQUAL] = function(args) {
return args[0] === args[1];
}
exports.default_callbacks = callbacks;