aboutsummaryrefslogtreecommitdiff
path: root/cube.c
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2023-11-19 22:03:17 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2023-11-19 22:03:17 +0100
commit2c8ad86805516211103df1ef7552d882f54748c3 (patch)
treefd3b1927a94c8aea02e6090cb9b441997fd7206d /cube.c
parentbb5abea645a31832e9d6a94cea09714a9b1632e3 (diff)
downloadnissy-core-2c8ad86805516211103df1ef7552d882f54748c3.tar.gz
nissy-core-2c8ad86805516211103df1ef7552d882f54748c3.zip
Removed src cube type, kept only H48 and LST (for now)
Diffstat (limited to 'cube.c')
-rw-r--r--cube.c72
1 files changed, 40 insertions, 32 deletions
diff --git a/cube.c b/cube.c
index 895c088..e9a063d 100644
--- a/cube.c
+++ b/cube.c
@@ -849,9 +849,10 @@ _static uint8_t readcp(char *);
849_static uint8_t readeo(char *); 849_static uint8_t readeo(char *);
850_static uint8_t readep(char *); 850_static uint8_t readep(char *);
851_static cube_t readcube_H48(char *); 851_static cube_t readcube_H48(char *);
852_static int writepiece_SRC(uint8_t, char *); 852_static uint8_t readpiece_LST(char **);
853_static cube_t readcube_LST(char *);
854_static int writepiece_LST(uint8_t, char *);
853_static void writecube_H48(cube_t, char *); 855_static void writecube_H48(cube_t, char *);
854_static void writecube_SRC(cube_t, char *);
855_static void writecube_LST(cube_t, char *); 856_static void writecube_LST(cube_t, char *);
856_static uint8_t readmove(char); 857_static uint8_t readmove(char);
857_static uint8_t readmodifier(char); 858_static uint8_t readmodifier(char);
@@ -1083,6 +1084,8 @@ readcube(char *format, char *buf)
1083 1084
1084 if (!strcmp(format, "H48")) { 1085 if (!strcmp(format, "H48")) {
1085 cube = readcube_H48(buf); 1086 cube = readcube_H48(buf);
1087 } else if (!strcmp(format, "LST")) {
1088 cube = readcube_LST(buf);
1086 } else { 1089 } else {
1087 DBG_LOG("Cannot read cube in the given format\n"); 1090 DBG_LOG("Cannot read cube in the given format\n");
1088 cube = zero; 1091 cube = zero;
@@ -1104,8 +1107,6 @@ writecube(char *format, cube_t cube, char *buf)
1104 1107
1105 if (!strcmp(format, "H48")) { 1108 if (!strcmp(format, "H48")) {
1106 writecube_H48(cube, buf); 1109 writecube_H48(cube, buf);
1107 } else if (!strcmp(format, "SRC")) {
1108 writecube_SRC(cube, buf);
1109 } else if (!strcmp(format, "LST")) { 1110 } else if (!strcmp(format, "LST")) {
1110 writecube_LST(cube, buf); 1111 writecube_LST(cube, buf);
1111 } else { 1112 } else {
@@ -1225,8 +1226,40 @@ readcube_H48(char *buf)
1225 return ret; 1226 return ret;
1226} 1227}
1227 1228
1229_static uint8_t
1230readpiece_LST(char **b)
1231{
1232 uint8_t ret;
1233 bool read;
1234
1235 while (**b == ',' || **b == ' ' || **b == '\t' || **b == '\n')
1236 (*b)++;
1237
1238 for (ret = 0, read = false; **b >= '0' && **b <= '9'; (*b)++) {
1239 read = true;
1240 ret = ret * 10 + (**b) - '0';
1241 }
1242
1243 return read ? ret : _error;
1244}
1245
1246_static cube_t
1247readcube_LST(char *buf)
1248{
1249 int i;
1250 cube_t ret = {0};
1251
1252 for (i = 0; i < 8; i++)
1253 ret.corner[i] = readpiece_LST(&buf);
1254
1255 for (i = 0; i < 12; i++)
1256 ret.edge[i] = readpiece_LST(&buf);
1257
1258 return ret;
1259}
1260
1228_static int 1261_static int
1229writepiece_SRC(uint8_t piece, char *buf) 1262writepiece_LST(uint8_t piece, char *buf)
1230{ 1263{
1231 char digits[3]; 1264 char digits[3];
1232 int i, len = 0; 1265 int i, len = 0;
@@ -1278,31 +1311,6 @@ writecube_H48(cube_t cube, char *buf)
1278} 1311}
1279 1312
1280_static void 1313_static void
1281writecube_SRC(cube_t cube, char *buf)
1282{
1283 int i, ptr;
1284 uint8_t piece;
1285
1286 memcpy(buf, "{\n\t.corner = {", 14);
1287 ptr = 14;
1288
1289 for (i = 0; i < 8; i++) {
1290 piece = cube.corner[i];
1291 ptr += writepiece_SRC(piece, buf + ptr);
1292 }
1293
1294 memcpy(buf+ptr-2, "},\n\t.edge = {", 13);
1295 ptr += 11;
1296
1297 for (i = 0; i < 12; i++) {
1298 piece = cube.edge[i];
1299 ptr += writepiece_SRC(piece, buf + ptr);
1300 }
1301
1302 memcpy(buf+ptr-2, "}\n}\0", 4);
1303}
1304
1305_static void
1306writecube_LST(cube_t cube, char *buf) 1314writecube_LST(cube_t cube, char *buf)
1307{ 1315{
1308 int i, ptr; 1316 int i, ptr;
@@ -1312,12 +1320,12 @@ writecube_LST(cube_t cube, char *buf)
1312 1320
1313 for (i = 0; i < 8; i++) { 1321 for (i = 0; i < 8; i++) {
1314 piece = cube.corner[i]; 1322 piece = cube.corner[i];
1315 ptr += writepiece_SRC(piece, buf + ptr); 1323 ptr += writepiece_LST(piece, buf + ptr);
1316 } 1324 }
1317 1325
1318 for (i = 0; i < 12; i++) { 1326 for (i = 0; i < 12; i++) {
1319 piece = cube.edge[i]; 1327 piece = cube.edge[i];
1320 ptr += writepiece_SRC(piece, buf + ptr); 1328 ptr += writepiece_LST(piece, buf + ptr);
1321 } 1329 }
1322 1330
1323 *(buf+ptr-2) = 0; 1331 *(buf+ptr-2) = 0;

Generated with cgit - Back to sebastiano.tronto.net