#include int cmd_size = 0x400; int maxcol = 80; extern uint8_t scr_row; extern uint8_t scr_col; extern uint8_t scr_str; int find_end(char *str, int pos) { int i; for (i = pos; str[i] != '\0'; i++); return i; } void cmd_cpy(char *scr_buf, char *cmd_buf, int pos) { int end_line = (find_end(scr_buf, pos)/(maxcol+1)) - scr_str; int start_line = (find_start(scr_buf, end_line) + scr_str) * (maxcol+1); for (int i = 0, done = 0; !done; i++) { uint64_t tmp = (uint64_t)scr_buf[i]; for (int j = 0; j < 8; j++ , tmp >>= 8) { int idx = (i*8) + j; uint8_t tmp2 = tmp; if (idx >= cmd_size || !tmp2) { done = 1; cmd_buf[idx] = '\0'; break; } cmd_buf[idx] = tmp2; } } }