summaryrefslogtreecommitdiffstatshomepage
path: root/stm/lexerfatfs.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-01-08 15:08:08 +0000
committerDamien George <damien.p.george@gmail.com>2014-01-08 15:08:08 +0000
commitdc141db64de467b6982ec6d7edad3fcf62b994ab (patch)
tree7031340f4c70e1319b1c78b31adca329fa1f4bc3 /stm/lexerfatfs.c
parentb97669ab9432146c1303dedfaa7b98f7ede3f8db (diff)
parente6b6af515449e67d5d3648818a191f3420d6f519 (diff)
downloadmicropython-dc141db64de467b6982ec6d7edad3fcf62b994ab.tar.gz
micropython-dc141db64de467b6982ec6d7edad3fcf62b994ab.zip
Merge branch 'master' of github.com:dpgeorge/micropython
Diffstat (limited to 'stm/lexerfatfs.c')
-rw-r--r--stm/lexerfatfs.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/stm/lexerfatfs.c b/stm/lexerfatfs.c
new file mode 100644
index 0000000000..5dcaca1606
--- /dev/null
+++ b/stm/lexerfatfs.c
@@ -0,0 +1,46 @@
+#include <stdint.h>
+#include <stdio.h>
+
+#include "ff.h"
+
+#include "misc.h"
+#include "lexer.h"
+#include "lexerfatfs.h"
+
+unichar file_buf_next_char(mp_lexer_file_buf_t *fb) {
+ if (fb->pos >= fb->len) {
+ if (fb->len < sizeof(fb->buf)) {
+ return MP_LEXER_CHAR_EOF;
+ } else {
+ UINT n;
+ f_read(&fb->fp, fb->buf, sizeof(fb->buf), &n);
+ if (n == 0) {
+ return MP_LEXER_CHAR_EOF;
+ }
+ fb->len = n;
+ fb->pos = 0;
+ }
+ }
+ return fb->buf[fb->pos++];
+}
+
+void file_buf_close(mp_lexer_file_buf_t *fb) {
+ f_close(&fb->fp);
+}
+
+mp_lexer_t *mp_lexer_new_from_file(const char *filename, mp_lexer_file_buf_t *fb) {
+ FRESULT res = f_open(&fb->fp, filename, FA_READ);
+ if (res != FR_OK) {
+ return NULL;
+ }
+ UINT n;
+ f_read(&fb->fp, fb->buf, sizeof(fb->buf), &n);
+ fb->len = n;
+ fb->pos = 0;
+ return mp_lexer_new(filename, fb, (mp_lexer_stream_next_char_t)file_buf_next_char, (mp_lexer_stream_close_t)file_buf_close);
+}
+
+mp_lexer_t *mp_import_open_file(qstr mod_name) {
+ printf("import not implemented\n");
+ return NULL;
+}