io_moves.h (874B)
1 STATIC uint8_t readmove(char); 2 STATIC uint8_t readmodifier(char); 3 STATIC int writemoves(uint8_t *, int, char *); 4 5 STATIC uint8_t 6 readmove(char c) 7 { 8 switch (c) { 9 case 'U': 10 return MOVE_U; 11 case 'D': 12 return MOVE_D; 13 case 'R': 14 return MOVE_R; 15 case 'L': 16 return MOVE_L; 17 case 'F': 18 return MOVE_F; 19 case 'B': 20 return MOVE_B; 21 default: 22 return UINT8_ERROR; 23 } 24 } 25 26 STATIC uint8_t 27 readmodifier(char c) 28 { 29 switch (c) { 30 case '1': /* Fallthrough */ 31 case '2': /* Fallthrough */ 32 case '3': 33 return c - '0' - 1; 34 case '\'': 35 return 2; 36 default: 37 return 0; 38 } 39 } 40 41 STATIC int 42 writemoves(uint8_t *m, int n, char *buf) 43 { 44 int i; 45 size_t len; 46 const char *s; 47 char *b; 48 49 for (i = 0, b = buf; i < n; i++, b++) { 50 s = movestr[m[i]]; 51 len = strlen(s); 52 memcpy(b, s, len); 53 b += len; 54 *b = ' '; 55 } 56 57 if (b != buf) 58 b--; /* Remove last space */ 59 *b = '\0'; 60 61 return b - buf; 62 }