// sketch of text editor; C as pseudocode for asm // see scredit.S #include typedef uint32_t u32; typedef uint8_t u8; static u32 pos; #define ctrl(ch) ((ch) & 31) #define IF(v) break; case v #define ELSE break; default void editor(u32 event, u8 *scr) { register u32 n, p = pos; switch(event) { case 8: case 127: // backspace, delete if (0 == (p & 63)) return; for (n = --p; 63 != (n & 63); n++) scr[n] = scr[n+1]; scr[n] = ' '; IF(10): // enter n = (p | 63) + 1; if (n < 64*16) p = n; IF(ctrl('p')): // previous line if (p > 64) p -= 64; IF(ctrl('n')): // next line if (p + 64 < 64*16) p += 64; IF(ctrl('b')): // back one character if (p > 0) p--; IF(ctrl('f')): // forward one character if (p < 64*16 - 1) pos++; ELSE: // insert normal character for (n = p | 63; n > p; n--) scr[n] = scr[n-1]; scr[p++] = event; } pos = p; }