import "!stdlib.src"; let file_size = 0; let file = 0; let buf = 0; let offset = 0; let read_file = (filename: *i8) => *i8 { file = fopen(filename, "r"); fseek(file, 0, 2); file_size = ftell(file); fseek(file, 0, 0); buf = malloc(file_size + 1); let bytes_read = fread(buf, 1, file_size, file); (*(buf + bytes_read)) = '\0'; return buf; }; let tokenizer_next = () => *i8 { if offset >= file_size { return "EOF"; }; let c = (*(buf + offset)); offset = offset + 1; let t = malloc(2); (*(t + 0)) = c; (*(t + 1)) = '\0'; return t; }; let tokenizer_init = (filename: *i8) => i64 { let buf = read_file(filename); println("File size: %d", file_size); println("%s", buf); while true { let t = tokenizer_next(); if strcmp(t, "EOF") { return 0; }; println("%s", t); free(t); }; return 0; }; let tokenizer_deinit = () => i64 { free(buf); fclose(file); return 0; };