h48

A prototype for an optimal Rubik's cube solver, work in progress.
git clone https://git.tronto.net/h48
Download | Log | Files | Refs | README | LICENSE

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 }