*/
uint32_t initrd_getfilesize(const char *name);
+char *initrd_getnfile(unsigned int index);
+
#endif // INITRD_H_
--- /dev/null
+while (1) {
+ print("> ")
+ input = gets()
+ answer = solve(input)
+ print("\n")
+ print(answer)
+ print("\n")
+}
-while (1) {
- print("> ")
- input = gets()
- answer = solve(input)
- print("\n")
- print(answer)
- print("\n")
-}
+choice = filemenu
+print("\nChoice: ")
+print(choice)
return 0;
}
+char *initrd_getnfile(unsigned int index)
+{
+ initrd_file *file = (initrd_file *)((uint8_t *)initrd_start + sizeof(initrd_header));
+ uint32_t offset = sizeof(initrd_header);
+
+ for (unsigned int i = 0; i < index; i++) {
+ uint32_t size = initrd_getsize(file) + sizeof(initrd_file);
+ offset += size;
+ file = (initrd_file *)((uint8_t *)file + size);
+ if (file->name[0] == '\n')
+ file = (initrd_file *)((uint32_t)file + 1);
+ }
+ if ((uint32_t)file >= (uint32_t)initrd_start + initrd_size)
+ return 0;
+ return file->name;
+}
+
char *initrd_getfile(const char *name)
{
initrd_file *file = initrd_getfileptr(name);
{\r
asm("cpsid i");\r
// disable cached writes for precise debug info\r
- *((uint32_t *)0xE000E008) |= 2;\r
+ //*((uint32_t *)0xE000E008) |= 2;\r
\r
// prepare flash latency for 80MHz operation\r
FLASH->ACR &= ~(FLASH_ACR_LATENCY);\r
keypad_start();\r
task_start(task_interpreter, 4096);\r
\r
- /*char buf[2];\r
- flash_init();\r
- buf[0] = 'A';\r
- flash_write(buf, 0, 1);\r
- buf[0] = 0;\r
- flash_read(buf, 0x00000000, 1);\r
- buf[0] += ' ';\r
- buf[1] = '\0';\r
- dsp_puts(buf);*/\r
-\r
while (1) {\r
- //gpio_dout(GPIOA, 5,\r
- // (keypad_isdown(K0)));\r
- //delay(10);\r
gpio_dout(GPIOA, 5, 1);\r
delay(250);\r
gpio_dout(GPIOA, 5, 0);\r
delay(10);\r
}\r
\r
-// for interactive use\r
-/*int ret = 0;\r
-char *linebuf = malloc(100), c[2] = {0, 0};\r
-while (1) {\r
- uint16_t index = 0;\r
- if (it.indent > 0)\r
- dsp_puts(">");\r
- dsp_puts("> ");\r
- do {\r
- c[0] = serial_get();\r
- if (c[0] >= ' ' || c[0] == '\r') {\r
- linebuf[index] = c[0];\r
- if (c[0] >= ' ')\r
- dsp_puts(c);\r
- }\r
- } while (linebuf[index] != '\r' && index++ < 100);\r
- linebuf[index] = '\0';\r
- dsp_puts("\n");\r
- ret = idoline(&it, linebuf);\r
- if (ret < 0)\r
- break;\r
-}*/\r
-\r
#include <display.h>
#include <display_draw.h>
#include <heap.h>
+#include <initrd.h>
#include <random.h>
#include <serial.h>
#include <stdlib.h>
int script_getkey(instance *it);
int script_pixel(instance *it);
int script_menu(instance *it);
+int script_filemenu(instance *it);
void script_loadlib(instance *it)
{
inew_cfunc(it, "delay", script_delay);
inew_cfunc(it, "menu", script_menu);
+ inew_cfunc(it, "filemenu", script_filemenu);
}
int script_menu(instance *it)
return 0;
}
+int script_filemenu(instance *it)
+{
+ char listbuf[4];
+ char *buf = calloc(17, 1);
+ char *fname;
+ strncpy(listbuf, " : \0", 4);
+ dsp_puts("Choose a file: \n");
+ for (unsigned int i = 0; (fname = initrd_getnfile(i)) != 0; i++) {
+ listbuf[0] = i + '0';
+ dsp_puts(listbuf);
+ dsp_puts(strncpy(buf, fname, 16));
+ dsp_puts("\n");
+ }
+ free(buf);
+ return script_gets(it);
+}
+
int script_puts(instance *it)
{
variable *v = igetarg(it, 0);