Lines Matching refs:w

44 #define RotateLeft(w)	MoveRubik(w,2,0,LEFT,TRUE)  argument
45 #define RotateRight(w) MoveRubik(w,2,0,RIGHT,TRUE) argument
46 #define RotateUp(w) MoveRubik(w,2,0,TOP,TRUE) argument
47 #define RotateDown(w) MoveRubik(w,2,0,BOTTOM,TRUE) argument
48 #define RotateCw(w) MoveRubik(w,0,0,RIGHT,TRUE) argument
49 #define RotateCcw(w) MoveRubik(w,0,0,LEFT,TRUE) argument
51 #define RotateTopLeft(w) MoveRubik(w,2,0,LEFT,FALSE) argument
52 #define RotateCenterLeft(w) MoveRubik(w,2,w->rubik.sizex,LEFT,FALSE) argument
53 #define RotateBottomLeft(w) MoveRubik(w,2,w->rubik.sizex*(w->rubik.sizex-1),LEFT,FALSE) argument
54 #define RotateTopRight(w) MoveRubik(w,2,0,RIGHT,FALSE) argument
55 #define RotateCenterRight(w) MoveRubik(w,2,w->rubik.sizex,RIGHT,FALSE) argument
56 #define RotateBottomRight(w) MoveRubik(w,2,w->rubik.sizex*(w->rubik.sizex-1),RIGHT,FALSE) argument
57 #define RotateLeftUp(w) MoveRubik(w,2,0,TOP,FALSE) argument
58 #define RotateCenterUp(w) MoveRubik(w,2,1,TOP,FALSE) argument
59 #define RotateRightUp(w) MoveRubik(w,2,w->rubik.sizex-1,TOP,FALSE) argument
60 #define RotateLeftDown(w) MoveRubik(w,2,0,BOTTOM,FALSE) argument
61 #define RotateCenterDown(w) MoveRubik(w,2,1,BOTTOM,FALSE) argument
62 #define RotateRightDown(w) MoveRubik(w,2,w->rubik.sizex-1,BOTTOM,FALSE) argument
63 #define RotateFrontCw(w) MoveRubik(w,0,w->rubik.sizex*(w->rubik.sizex-1),RIGHT,FALSE) argument
64 #define RotateFrontCcw(w) MoveRubik(w,0,w->rubik.sizex*(w->rubik.sizex-1),LEFT,FALSE) argument
81 static int Side(RubikWidget w, int m, int c);
82 static int FindCorner(RubikWidget w, int color1, int color2, int color3);
83 static int FindEdge(RubikWidget w, int color1, int color2);
84 static void PlaceEdge(RubikWidget w, int edge, int top_color);
85 static void SolveTop(RubikWidget w);
86 static void AlignCorners(RubikWidget w);
87 static void SwapBottomCorners(RubikWidget w);
88 static void SolveBottom(RubikWidget w);
89 static void Solve_2_2(RubikWidget w);
90 static void SolveBottomEdges(RubikWidget w);
91 static void AlignLastEdge(RubikWidget w);
92 static void ColorAlignFront(RubikWidget w);
93 static void AlignEdges(RubikWidget w);
94 static void ShuffleEdges(RubikWidget w);
95 static void RecolorTopEdges(RubikWidget w);
98 Side(RubikWidget w, int m, int c) in Side() argument
106 i = w->rubik.sizex - 1; in Side()
108 j = w->rubik.sizex - 1; in Side()
109 return w->rubik.cubeLoc[d][j * w->rubik.sizex + i].face; in Side()
116 FindCorner(RubikWidget w, int color1, int color2, int color3) in FindCorner() argument
121 if (Side(w, 5, 6) == color1) { in FindCorner()
122 if (Side(w, 1, 0) == color2) in FindCorner()
123 if (Side(w, 4, 2) == color3) in FindCorner()
125 } else if (Side(w, 5, 6) == color2) { in FindCorner()
126 if (Side(w, 1, 0) == color3) in FindCorner()
127 if (Side(w, 4, 2) == color1) in FindCorner()
129 } else if (Side(w, 5, 6) == color3) { in FindCorner()
130 if (Side(w, 1, 0) == color1) in FindCorner()
131 if (Side(w, 4, 2) == color2) in FindCorner()
136 RotateLeft(w); in FindCorner()
138 RotateCw(w); in FindCorner()
139 RotateCw(w); in FindCorner()
141 RotateRight(w); in FindCorner()
150 RotateRight(w); in FindCorner()
152 RotateRight(w); in FindCorner()
153 RotateRight(w); in FindCorner()
155 RotateLeft(w); in FindCorner()
157 RotateCw(w); in FindCorner()
158 RotateCw(w); in FindCorner()
159 RotateLeft(w); in FindCorner()
161 RotateCw(w); in FindCorner()
162 RotateCw(w); in FindCorner()
164 RotateCw(w); in FindCorner()
165 RotateCw(w); in FindCorner()
166 RotateRight(w); in FindCorner()
168 RotateCw(w); in FindCorner()
169 RotateCw(w); in FindCorner()
170 RotateRight(w); in FindCorner()
171 RotateRight(w); in FindCorner()
180 FindEdge(RubikWidget w, int color1, int color2) in FindEdge() argument
185 if (Side(w, 5, 7) == color1) { in FindEdge()
186 if (Side(w, 1, 1) == color2) in FindEdge()
188 } else if (Side(w, 5, 7) == color2) { in FindEdge()
189 if (Side(w, 1, 1) == color1) in FindEdge()
194 RotateLeft(w); in FindEdge()
196 RotateLeft(w); in FindEdge()
197 RotateCw(w); in FindEdge()
199 RotateUp(w); in FindEdge()
201 RotateUp(w); in FindEdge()
202 RotateCw(w); in FindEdge()
204 RotateRight(w); in FindEdge()
213 RotateRight(w); in FindEdge()
215 RotateRight(w); in FindEdge()
216 RotateRight(w); in FindEdge()
218 RotateLeft(w); in FindEdge()
220 RotateCcw(w); in FindEdge()
222 RotateCcw(w); in FindEdge()
223 RotateRight(w); in FindEdge()
225 RotateCcw(w); in FindEdge()
226 RotateRight(w); in FindEdge()
227 RotateRight(w); in FindEdge()
229 RotateCcw(w); in FindEdge()
230 RotateLeft(w); in FindEdge()
232 RotateCcw(w); in FindEdge()
233 RotateCcw(w); in FindEdge()
235 RotateCcw(w); in FindEdge()
236 RotateCcw(w); in FindEdge()
237 RotateRight(w); in FindEdge()
239 RotateUp(w); in FindEdge()
240 RotateUp(w); in FindEdge()
242 RotateUp(w); in FindEdge()
243 RotateUp(w); in FindEdge()
244 RotateRight(w); in FindEdge()
252 PlaceEdge(RubikWidget w, int edge, int top_color) in PlaceEdge() argument
256 if (Side(w, 5, 7) == top_color) in PlaceEdge()
259 RotateFrontCcw(w); in PlaceEdge()
260 RotateCenterLeft(w); in PlaceEdge()
261 RotateFrontCw(w); in PlaceEdge()
264 RotateTopLeft(w); in PlaceEdge()
265 RotateFrontCcw(w); in PlaceEdge()
266 RotateCenterLeft(w); in PlaceEdge()
267 RotateFrontCw(w); in PlaceEdge()
268 RotateTopRight(w); in PlaceEdge()
270 RotateTopLeft(w); in PlaceEdge()
271 RotateTopLeft(w); in PlaceEdge()
272 RotateFrontCcw(w); in PlaceEdge()
273 RotateCenterLeft(w); in PlaceEdge()
274 RotateFrontCw(w); in PlaceEdge()
275 RotateTopRight(w); in PlaceEdge()
276 RotateTopRight(w); in PlaceEdge()
278 RotateTopRight(w); in PlaceEdge()
279 RotateFrontCcw(w); in PlaceEdge()
280 RotateCenterLeft(w); in PlaceEdge()
281 RotateFrontCw(w); in PlaceEdge()
282 RotateTopLeft(w); in PlaceEdge()
284 RotateCenterLeft(w); in PlaceEdge()
286 RotateCenterLeft(w); in PlaceEdge()
287 RotateCenterLeft(w); in PlaceEdge()
289 RotateCenterRight(w); in PlaceEdge()
291 RotateFrontCw(w); in PlaceEdge()
292 RotateCenterLeft(w); in PlaceEdge()
293 RotateFrontCcw(w); in PlaceEdge()
295 RotateBottomLeft(w); in PlaceEdge()
296 RotateFrontCw(w); in PlaceEdge()
297 RotateCenterLeft(w); in PlaceEdge()
298 RotateFrontCcw(w); in PlaceEdge()
299 RotateBottomRight(w); in PlaceEdge()
301 RotateBottomLeft(w); in PlaceEdge()
302 RotateBottomLeft(w); in PlaceEdge()
303 RotateFrontCw(w); in PlaceEdge()
304 RotateCenterLeft(w); in PlaceEdge()
305 RotateFrontCcw(w); in PlaceEdge()
306 RotateBottomRight(w); in PlaceEdge()
307 RotateBottomRight(w); in PlaceEdge()
309 RotateBottomRight(w); in PlaceEdge()
310 RotateFrontCw(w); in PlaceEdge()
311 RotateCenterLeft(w); in PlaceEdge()
312 RotateFrontCcw(w); in PlaceEdge()
313 RotateBottomLeft(w); in PlaceEdge()
316 if (Side(w, 4, 3) == top_color) { in PlaceEdge()
317 RotateFrontCw(w); in PlaceEdge()
318 RotateCenterRight(w); in PlaceEdge()
319 RotateCenterRight(w); in PlaceEdge()
320 RotateFrontCcw(w); in PlaceEdge()
322 RotateFrontCcw(w); in PlaceEdge()
323 RotateCenterRight(w); in PlaceEdge()
324 RotateFrontCw(w); in PlaceEdge()
330 SolveTop(RubikWidget w) in SolveTop() argument
335 if (Side(w, 1, 4) == BLUE) in SolveTop()
336 RotateUp(w); in SolveTop()
337 else if (Side(w, 2, 4) == BLUE) in SolveTop()
338 RotateCcw(w); in SolveTop()
339 else if (Side(w, 3, 4) == BLUE) in SolveTop()
340 RotateDown(w); in SolveTop()
341 else if (Side(w, 4, 4) == BLUE) in SolveTop()
342 RotateCw(w); in SolveTop()
343 else if (Side(w, 6, 4) == BLUE) { in SolveTop()
344 RotateUp(w); in SolveTop()
345 RotateUp(w); in SolveTop()
348 corner = FindCorner(w, BLUE, RED, WHITE); in SolveTop()
350 if (Side(w, 5, 6) == RED) { in SolveTop()
351 RotateFrontCw(w); in SolveTop()
352 RotateTopLeft(w); in SolveTop()
353 } else if (Side(w, 5, 6) == WHITE) { in SolveTop()
354 RotateLeftUp(w); in SolveTop()
355 RotateTopRight(w); in SolveTop()
358 if (Side(w, 5, 8) == BLUE) in SolveTop()
359 RotateTopLeft(w); in SolveTop()
360 else if (Side(w, 5, 8) == RED) { in SolveTop()
361 RotateRightUp(w); in SolveTop()
362 RotateTopLeft(w); in SolveTop()
363 RotateTopLeft(w); in SolveTop()
364 } else if (Side(w, 5, 8) == WHITE) in SolveTop()
365 RotateFrontCcw(w); in SolveTop()
367 if (Side(w, 5, 2) == BLUE) { in SolveTop()
368 RotateTopLeft(w); in SolveTop()
369 RotateTopLeft(w); in SolveTop()
370 } else if (Side(w, 5, 2) == RED) { in SolveTop()
371 RotateTopRight(w); in SolveTop()
372 RotateLeftDown(w); in SolveTop()
373 } else if (Side(w, 5, 2) == WHITE) { in SolveTop()
374 RotateRightDown(w); in SolveTop()
375 RotateTopLeft(w); in SolveTop()
378 if (Side(w, 5, 0) == BLUE) in SolveTop()
379 RotateTopRight(w); in SolveTop()
380 else if (Side(w, 5, 0) == RED) in SolveTop()
381 RotateLeftDown(w); in SolveTop()
382 else if (Side(w, 5, 0) == WHITE) { in SolveTop()
383 RotateTopRight(w); in SolveTop()
384 RotateLeftUp(w); in SolveTop()
385 RotateTopRight(w); in SolveTop()
388 if (Side(w, 6, 0) == BLUE) { in SolveTop()
389 RotateBottomLeft(w); in SolveTop()
390 RotateLeftUp(w); in SolveTop()
391 RotateLeftUp(w); in SolveTop()
392 } else if (Side(w, 6, 0) == RED) in SolveTop()
393 RotateLeftUp(w); in SolveTop()
394 else if (Side(w, 6, 0) == WHITE) in SolveTop()
395 RotateFrontCw(w); in SolveTop()
397 if (Side(w, 6, 2) == BLUE) { in SolveTop()
398 RotateFrontCw(w); in SolveTop()
399 RotateFrontCw(w); in SolveTop()
400 } else if (Side(w, 6, 2) == RED) { in SolveTop()
401 RotateBottomLeft(w); in SolveTop()
402 RotateLeftUp(w); in SolveTop()
403 } else if (Side(w, 6, 2) == WHITE) { in SolveTop()
404 RotateBottomLeft(w); in SolveTop()
405 RotateFrontCw(w); in SolveTop()
408 if (Side(w, 6, 8) == BLUE) { in SolveTop()
409 RotateBottomLeft(w); in SolveTop()
410 RotateFrontCw(w); in SolveTop()
411 RotateFrontCw(w); in SolveTop()
412 } else if (Side(w, 6, 8) == RED) { in SolveTop()
413 RotateBottomLeft(w); in SolveTop()
414 RotateBottomLeft(w); in SolveTop()
415 RotateLeftUp(w); in SolveTop()
416 } else if (Side(w, 6, 8) == WHITE) { in SolveTop()
417 RotateBottomLeft(w); in SolveTop()
418 RotateBottomLeft(w); in SolveTop()
419 RotateFrontCw(w); in SolveTop()
422 if (Side(w, 6, 6) == BLUE) { in SolveTop()
423 RotateLeftUp(w); in SolveTop()
424 RotateLeftUp(w); in SolveTop()
425 } else if (Side(w, 6, 6) == RED) { in SolveTop()
426 RotateBottomRight(w); in SolveTop()
427 RotateLeftUp(w); in SolveTop()
428 } else if (Side(w, 6, 6) == WHITE) { in SolveTop()
429 RotateBottomRight(w); in SolveTop()
430 RotateFrontCw(w); in SolveTop()
434 RotateLeft(w); in SolveTop()
435 corner = FindCorner(w, BLUE, YELLOW, RED); in SolveTop()
437 if (Side(w, 5, 6) == YELLOW) { in SolveTop()
438 RotateFrontCcw(w); in SolveTop()
439 RotateBottomRight(w); in SolveTop()
440 RotateFrontCcw(w); in SolveTop()
441 RotateFrontCcw(w); in SolveTop()
442 } else if (Side(w, 5, 6) == RED) { in SolveTop()
443 RotateFrontCw(w); in SolveTop()
444 RotateFrontCw(w); in SolveTop()
445 RotateBottomLeft(w); in SolveTop()
446 RotateFrontCw(w); in SolveTop()
449 if (Side(w, 5, 8) == BLUE) { in SolveTop()
450 RotateRightDown(w); in SolveTop()
451 RotateBottomLeft(w); in SolveTop()
452 RotateFrontCw(w); in SolveTop()
453 } else if (Side(w, 5, 8) == YELLOW) { in SolveTop()
454 RotateRightDown(w); in SolveTop()
455 RotateFrontCw(w); in SolveTop()
456 RotateFrontCw(w); in SolveTop()
457 } else if (Side(w, 5, 8) == RED) in SolveTop()
458 RotateFrontCcw(w); in SolveTop()
460 if (Side(w, 5, 2) == BLUE) { in SolveTop()
461 RotateRightDown(w); in SolveTop()
462 RotateRightDown(w); in SolveTop()
463 RotateFrontCw(w); in SolveTop()
464 RotateFrontCw(w); in SolveTop()
465 } else if (Side(w, 5, 2) == YELLOW) { in SolveTop()
466 RotateRightDown(w); in SolveTop()
467 RotateFrontCcw(w); in SolveTop()
468 } else if (Side(w, 5, 2) == RED) { in SolveTop()
469 RotateRightDown(w); in SolveTop()
470 RotateRightDown(w); in SolveTop()
471 RotateBottomLeft(w); in SolveTop()
472 RotateFrontCw(w); in SolveTop()
475 if (Side(w, 6, 0) == BLUE) { in SolveTop()
476 RotateBottomRight(w); in SolveTop()
477 RotateFrontCw(w); in SolveTop()
478 RotateFrontCw(w); in SolveTop()
479 } else if (Side(w, 6, 0) == YELLOW) { in SolveTop()
480 RotateBottomRight(w); in SolveTop()
481 RotateRightUp(w); in SolveTop()
482 RotateFrontCcw(w); in SolveTop()
483 } else if (Side(w, 6, 0) == RED) in SolveTop()
484 RotateFrontCw(w); in SolveTop()
486 if (Side(w, 6, 2) == BLUE) { in SolveTop()
487 RotateFrontCw(w); in SolveTop()
488 RotateFrontCw(w); in SolveTop()
489 } else if (Side(w, 6, 2) == YELLOW) { in SolveTop()
490 RotateRightUp(w); in SolveTop()
491 RotateFrontCcw(w); in SolveTop()
492 } else if (Side(w, 6, 2) == RED) { in SolveTop()
493 RotateBottomLeft(w); in SolveTop()
494 RotateFrontCw(w); in SolveTop()
497 if (Side(w, 6, 8) == BLUE) { in SolveTop()
498 RotateBottomLeft(w); in SolveTop()
499 RotateFrontCw(w); in SolveTop()
500 RotateFrontCw(w); in SolveTop()
501 } else if (Side(w, 6, 8) == YELLOW) { in SolveTop()
502 RotateBottomLeft(w); in SolveTop()
503 RotateRightUp(w); in SolveTop()
504 RotateFrontCcw(w); in SolveTop()
505 } else if (Side(w, 6, 8) == RED) { in SolveTop()
506 RotateBottomLeft(w); in SolveTop()
507 RotateBottomLeft(w); in SolveTop()
508 RotateFrontCw(w); in SolveTop()
511 if (Side(w, 6, 6) == BLUE) { in SolveTop()
512 RotateBottomRight(w); in SolveTop()
513 RotateBottomRight(w); in SolveTop()
514 RotateFrontCw(w); in SolveTop()
515 RotateFrontCw(w); in SolveTop()
516 } else if (Side(w, 6, 6) == YELLOW) { in SolveTop()
517 RotateBottomRight(w); in SolveTop()
518 RotateBottomRight(w); in SolveTop()
519 RotateRightUp(w); in SolveTop()
520 RotateFrontCcw(w); in SolveTop()
521 } else if (Side(w, 6, 6) == RED) { in SolveTop()
522 RotateBottomRight(w); in SolveTop()
523 RotateFrontCw(w); in SolveTop()
527 RotateLeft(w); in SolveTop()
528 corner = FindCorner(w, BLUE, ORANGE, YELLOW); in SolveTop()
530 if (Side(w, 5, 6) == ORANGE) { in SolveTop()
531 RotateFrontCcw(w); in SolveTop()
532 RotateBottomRight(w); in SolveTop()
533 RotateFrontCcw(w); in SolveTop()
534 RotateFrontCcw(w); in SolveTop()
535 } else if (Side(w, 5, 6) == YELLOW) { in SolveTop()
536 RotateFrontCw(w); in SolveTop()
537 RotateFrontCw(w); in SolveTop()
538 RotateBottomLeft(w); in SolveTop()
539 RotateFrontCw(w); in SolveTop()
542 if (Side(w, 5, 8) == BLUE) { in SolveTop()
543 RotateRightDown(w); in SolveTop()
544 RotateBottomLeft(w); in SolveTop()
545 RotateRightUp(w); in SolveTop()
546 RotateFrontCw(w); in SolveTop()
547 } else if (Side(w, 5, 8) == ORANGE) { in SolveTop()
548 RotateFrontCw(w); in SolveTop()
549 RotateBottomLeft(w); in SolveTop()
550 RotateFrontCw(w); in SolveTop()
551 } else if (Side(w, 5, 8) == YELLOW) in SolveTop()
552 RotateFrontCcw(w); in SolveTop()
554 if (Side(w, 6, 0) == BLUE) { in SolveTop()
555 RotateBottomRight(w); in SolveTop()
556 RotateFrontCw(w); in SolveTop()
557 RotateFrontCw(w); in SolveTop()
558 } else if (Side(w, 6, 0) == ORANGE) { in SolveTop()
559 RotateRightDown(w); in SolveTop()
560 RotateBottomRight(w); in SolveTop()
561 RotateRightUp(w); in SolveTop()
562 RotateFrontCcw(w); in SolveTop()
563 } else if (Side(w, 6, 0) == YELLOW) in SolveTop()
564 RotateFrontCw(w); in SolveTop()
566 if (Side(w, 6, 2) == BLUE) { in SolveTop()
567 RotateFrontCw(w); in SolveTop()
568 RotateFrontCw(w); in SolveTop()
569 } else if (Side(w, 6, 2) == ORANGE) { in SolveTop()
570 RotateBottomLeft(w); in SolveTop()
571 RotateRightDown(w); in SolveTop()
572 RotateBottomRight(w); in SolveTop()
573 RotateRightUp(w); in SolveTop()
574 RotateFrontCcw(w); in SolveTop()
575 } else if (Side(w, 6, 2) == YELLOW) { in SolveTop()
576 RotateBottomLeft(w); in SolveTop()
577 RotateFrontCw(w); in SolveTop()
580 if (Side(w, 6, 8) == BLUE) { in SolveTop()
581 RotateBottomLeft(w); in SolveTop()
582 RotateFrontCw(w); in SolveTop()
583 RotateFrontCw(w); in SolveTop()
584 } else if (Side(w, 6, 8) == ORANGE) { in SolveTop()
585 RotateBottomLeft(w); in SolveTop()
586 RotateBottomLeft(w); in SolveTop()
587 RotateRightDown(w); in SolveTop()
588 RotateBottomRight(w); in SolveTop()
589 RotateRightUp(w); in SolveTop()
590 RotateFrontCcw(w); in SolveTop()
591 } else if (Side(w, 6, 8) == YELLOW) { in SolveTop()
592 RotateBottomLeft(w); in SolveTop()
593 RotateBottomLeft(w); in SolveTop()
594 RotateFrontCw(w); in SolveTop()
597 if (Side(w, 6, 6) == BLUE) { in SolveTop()
598 RotateBottomRight(w); in SolveTop()
599 RotateBottomRight(w); in SolveTop()
600 RotateFrontCw(w); in SolveTop()
601 RotateFrontCw(w); in SolveTop()
602 } else if (Side(w, 6, 6) == ORANGE) { in SolveTop()
603 RotateRightDown(w); in SolveTop()
604 RotateBottomRight(w); in SolveTop()
605 RotateBottomRight(w); in SolveTop()
606 RotateRightUp(w); in SolveTop()
607 RotateFrontCcw(w); in SolveTop()
608 } else if (Side(w, 6, 6) == YELLOW) { in SolveTop()
609 RotateBottomRight(w); in SolveTop()
610 RotateFrontCw(w); in SolveTop()
614 RotateLeft(w); in SolveTop()
615 corner = FindCorner(w, BLUE, WHITE, ORANGE); in SolveTop()
617 if (Side(w, 5, 6) == WHITE) { in SolveTop()
618 RotateLeftDown(w); in SolveTop()
619 RotateBottomRight(w); in SolveTop()
620 RotateLeftUp(w); in SolveTop()
621 RotateBottomLeft(w); in SolveTop()
622 RotateBottomLeft(w); in SolveTop()
623 RotateFrontCcw(w); in SolveTop()
624 RotateBottomRight(w); in SolveTop()
625 RotateFrontCw(w); in SolveTop()
626 } else if (Side(w, 5, 6) == ORANGE) { in SolveTop()
627 RotateFrontCcw(w); in SolveTop()
628 RotateBottomLeft(w); in SolveTop()
629 RotateFrontCw(w); in SolveTop()
630 RotateBottomRight(w); in SolveTop()
631 RotateBottomRight(w); in SolveTop()
632 RotateLeftDown(w); in SolveTop()
633 RotateBottomLeft(w); in SolveTop()
634 RotateLeftUp(w); in SolveTop()
637 if (Side(w, 6, 0) == BLUE) { in SolveTop()
638 RotateBottomRight(w); in SolveTop()
639 RotateLeftDown(w); in SolveTop()
640 RotateBottomLeft(w); in SolveTop()
641 RotateBottomLeft(w); in SolveTop()
642 RotateLeftUp(w); in SolveTop()
643 RotateBottomRight(w); in SolveTop()
644 RotateLeftDown(w); in SolveTop()
645 RotateBottomLeft(w); in SolveTop()
646 RotateLeftUp(w); in SolveTop()
647 } else if (Side(w, 6, 0) == WHITE) { in SolveTop()
648 RotateBottomRight(w); in SolveTop()
649 RotateLeftDown(w); in SolveTop()
650 RotateBottomLeft(w); in SolveTop()
651 RotateLeftUp(w); in SolveTop()
652 } else if (Side(w, 6, 0) == ORANGE) { in SolveTop()
653 RotateBottomLeft(w); in SolveTop()
654 RotateFrontCcw(w); in SolveTop()
655 RotateBottomRight(w); in SolveTop()
656 RotateFrontCw(w); in SolveTop()
659 if (Side(w, 6, 2) == BLUE) { in SolveTop()
660 RotateBottomRight(w); in SolveTop()
661 RotateFrontCcw(w); in SolveTop()
662 RotateBottomLeft(w); in SolveTop()
663 RotateFrontCw(w); in SolveTop()
664 RotateBottomLeft(w); in SolveTop()
665 RotateFrontCcw(w); in SolveTop()
666 RotateBottomRight(w); in SolveTop()
667 RotateFrontCw(w); in SolveTop()
668 } else if (Side(w, 6, 2) == WHITE) { in SolveTop()
669 RotateLeftDown(w); in SolveTop()
670 RotateBottomLeft(w); in SolveTop()
671 RotateLeftUp(w); in SolveTop()
672 } else if (Side(w, 6, 2) == ORANGE) { in SolveTop()
673 RotateBottomLeft(w); in SolveTop()
674 RotateBottomLeft(w); in SolveTop()
675 RotateFrontCcw(w); in SolveTop()
676 RotateBottomRight(w); in SolveTop()
677 RotateFrontCw(w); in SolveTop()
680 if (Side(w, 6, 8) == BLUE) { in SolveTop()
681 RotateLeftDown(w); in SolveTop()
682 RotateBottomRight(w); in SolveTop()
683 RotateLeftUp(w); in SolveTop()
684 RotateBottomRight(w); in SolveTop()
685 RotateLeftDown(w); in SolveTop()
686 RotateBottomLeft(w); in SolveTop()
687 RotateLeftUp(w); in SolveTop()
688 } else if (Side(w, 6, 8) == WHITE) { in SolveTop()
689 RotateLeftDown(w); in SolveTop()
690 RotateBottomLeft(w); in SolveTop()
691 RotateBottomLeft(w); in SolveTop()
692 RotateLeftUp(w); in SolveTop()
693 } else if (Side(w, 6, 8) == ORANGE) { in SolveTop()
694 RotateFrontCcw(w); in SolveTop()
695 RotateBottomLeft(w); in SolveTop()
696 RotateBottomLeft(w); in SolveTop()
697 RotateFrontCw(w); in SolveTop()
700 if (Side(w, 6, 6) == BLUE) { in SolveTop()
701 RotateFrontCcw(w); in SolveTop()
702 RotateBottomRight(w); in SolveTop()
703 RotateBottomRight(w); in SolveTop()
704 RotateFrontCw(w); in SolveTop()
705 RotateBottomLeft(w); in SolveTop()
706 RotateFrontCcw(w); in SolveTop()
707 RotateBottomRight(w); in SolveTop()
708 RotateFrontCw(w); in SolveTop()
709 } else if (Side(w, 6, 6) == WHITE) { in SolveTop()
710 RotateBottomRight(w); in SolveTop()
711 RotateBottomRight(w); in SolveTop()
712 RotateLeftDown(w); in SolveTop()
713 RotateBottomLeft(w); in SolveTop()
714 RotateLeftUp(w); in SolveTop()
715 } else if (Side(w, 6, 6) == ORANGE) { in SolveTop()
716 RotateFrontCcw(w); in SolveTop()
717 RotateBottomRight(w); in SolveTop()
718 RotateFrontCw(w); in SolveTop()
721 RotateLeft(w); in SolveTop()
724 edge = FindEdge(w, BLUE, RED); in SolveTop()
725 PlaceEdge(w, edge, BLUE); in SolveTop()
726 RotateLeft(w); in SolveTop()
729 edge = FindEdge(w, BLUE, YELLOW); in SolveTop()
730 PlaceEdge(w, edge, BLUE); in SolveTop()
731 RotateLeft(w); in SolveTop()
734 edge = FindEdge(w, BLUE, ORANGE); in SolveTop()
735 PlaceEdge(w, edge, BLUE); in SolveTop()
736 RotateLeft(w); in SolveTop()
738 RotateUp(w); /* put the blue side to the back */ in SolveTop()
744 AlignCorners(RubikWidget w) in AlignCorners() argument
749 corner = FindCorner(w, GREEN, ORANGE, WHITE); in AlignCorners()
751 RotateFrontCcw(w); in AlignCorners()
753 RotateFrontCw(w); in AlignCorners()
755 RotateFrontCw(w); in AlignCorners()
756 RotateFrontCw(w); in AlignCorners()
759 corner = FindCorner(w, GREEN, YELLOW, ORANGE); in AlignCorners()
761 RotateCw(w); in AlignCorners()
762 SwapBottomCorners(w); in AlignCorners()
763 RotateCcw(w); in AlignCorners()
764 SwapBottomCorners(w); in AlignCorners()
766 SwapBottomCorners(w); in AlignCorners()
769 corner = FindCorner(w, GREEN, RED, YELLOW); in AlignCorners()
771 RotateCw(w); in AlignCorners()
772 SwapBottomCorners(w); in AlignCorners()
773 RotateCcw(w); in AlignCorners()
779 SwapBottomCorners(RubikWidget w) in SwapBottomCorners() argument
781 RotateTopRight(w); in SwapBottomCorners()
782 RotateFrontCw(w); in SwapBottomCorners()
783 RotateTopLeft(w); in SwapBottomCorners()
784 RotateLeftUp(w); in SwapBottomCorners()
785 RotateTopLeft(w); in SwapBottomCorners()
786 RotateLeftDown(w); in SwapBottomCorners()
787 RotateTopRight(w); in SwapBottomCorners()
788 RotateFrontCw(w); in SwapBottomCorners()
789 RotateFrontCw(w); in SwapBottomCorners()
795 SolveBottom(RubikWidget w) in SolveBottom() argument
804 if (Side(w, 1, 0) == GREEN) in SolveBottom()
806 if (Side(w, 1, 2) == GREEN) in SolveBottom()
808 if (Side(w, 1, 6) == GREEN) in SolveBottom()
810 if (Side(w, 1, 8) == GREEN) in SolveBottom()
814 ColorAlignFront(w); in SolveBottom()
817 if (Side(w, 1, 0) == GREEN) in SolveBottom()
818 RotateFrontCw(w); in SolveBottom()
819 if (Side(w, 1, 6) == GREEN) { in SolveBottom()
820 RotateFrontCw(w); in SolveBottom()
821 RotateFrontCw(w); in SolveBottom()
823 if (Side(w, 1, 8) == GREEN) in SolveBottom()
824 RotateFrontCcw(w); in SolveBottom()
825 ColorAlignFront(w); in SolveBottom()
827 if (Side(w, 1, 0) != GREEN) in SolveBottom()
828 RotateFrontCw(w); in SolveBottom()
829 else if (Side(w, 1, 2) == GREEN) in SolveBottom()
830 RotateFrontCw(w); in SolveBottom()
831 if (Side(w, 1, 0) != GREEN) in SolveBottom()
832 RotateFrontCw(w); in SolveBottom()
833 ColorAlignFront(w); in SolveBottom()
835 ColorAlignFront(w); in SolveBottom()
840 Solve_2_2(RubikWidget w) in Solve_2_2() argument
845 if (!CheckSolved(w)) in Solve_2_2()
846 RotateFrontCw(w); in Solve_2_2()
850 SolveBottomEdges(RubikWidget w) in SolveBottomEdges() argument
855 RotateDown(w); /* put the green face on top */ in SolveBottomEdges()
856 RotateCw(w); in SolveBottomEdges()
857 RotateCw(w); in SolveBottomEdges()
859 color = Side(w, 1, 0); /* get upper front corner color */ in SolveBottomEdges()
860 edge = FindEdge(w, GREEN, color); in SolveBottomEdges()
861 PlaceEdge(w, edge, GREEN); in SolveBottomEdges()
862 RotateTopRight(w); in SolveBottomEdges()
864 color = Side(w, 1, 0); /* get upper front corner color */ in SolveBottomEdges()
865 edge = FindEdge(w, GREEN, color); in SolveBottomEdges()
866 PlaceEdge(w, edge, GREEN); in SolveBottomEdges()
867 RotateTopRight(w); in SolveBottomEdges()
869 color = Side(w, 1, 0); /* get upper front corner color */ in SolveBottomEdges()
870 edge = FindEdge(w, GREEN, color); in SolveBottomEdges()
871 PlaceEdge(w, edge, GREEN); in SolveBottomEdges()
872 RotateTopRight(w); in SolveBottomEdges()
874 color = Side(w, 1, 0); /* get upper front corner color */ in SolveBottomEdges()
875 edge = FindEdge(w, GREEN, color); in SolveBottomEdges()
876 PlaceEdge(w, edge, GREEN); in SolveBottomEdges()
877 RotateTopRight(w); in SolveBottomEdges()
880 RotateCw(w); in SolveBottomEdges()
881 RotateCw(w); in SolveBottomEdges()
882 edge = FindEdge(w, BLUE, WHITE); in SolveBottomEdges()
884 if (Side(w, 1, 1) == BLUE) { in SolveBottomEdges()
885 RotateFrontCcw(w); in SolveBottomEdges()
886 RotateCenterLeft(w); in SolveBottomEdges()
887 RotateFrontCw(w); in SolveBottomEdges()
888 RotateCenterLeft(w); in SolveBottomEdges()
889 RotateFrontCw(w); in SolveBottomEdges()
890 RotateCenterLeft(w); in SolveBottomEdges()
891 RotateFrontCcw(w); in SolveBottomEdges()
895 RotateCenterRight(w); in SolveBottomEdges()
897 RotateCenterLeft(w); in SolveBottomEdges()
899 RotateCenterRight(w); in SolveBottomEdges()
900 RotateCenterRight(w); in SolveBottomEdges()
902 AlignLastEdge(w); in SolveBottomEdges()
909 AlignLastEdge(RubikWidget w) in AlignLastEdge() argument
913 if (Side(w, 1, 5) == BLUE) { in AlignLastEdge()
914 RotateCenterLeft(w); in AlignLastEdge()
915 RotateFrontCw(w); in AlignLastEdge()
916 RotateCenterRight(w); in AlignLastEdge()
917 RotateFrontCcw(w); in AlignLastEdge()
918 RotateCenterLeft(w); in AlignLastEdge()
919 RotateFrontCcw(w); in AlignLastEdge()
920 RotateCenterRight(w); in AlignLastEdge()
921 RotateFrontCw(w); in AlignLastEdge()
923 RotateFrontCcw(w); in AlignLastEdge()
924 RotateCenterLeft(w); in AlignLastEdge()
925 RotateFrontCw(w); in AlignLastEdge()
926 RotateCenterRight(w); in AlignLastEdge()
927 RotateFrontCw(w); in AlignLastEdge()
928 RotateCenterLeft(w); in AlignLastEdge()
929 RotateFrontCcw(w); in AlignLastEdge()
935 ColorAlignFront(RubikWidget w) in ColorAlignFront() argument
937 RotateTopRight(w); in ColorAlignFront()
938 RotateFrontCw(w); in ColorAlignFront()
939 RotateFrontCw(w); in ColorAlignFront()
940 RotateTopLeft(w); in ColorAlignFront()
941 RotateFrontCw(w); in ColorAlignFront()
942 RotateTopRight(w); in ColorAlignFront()
943 RotateFrontCw(w); in ColorAlignFront()
944 RotateTopLeft(w); in ColorAlignFront()
945 RotateFrontCw(w); in ColorAlignFront()
946 RotateFrontCw(w); in ColorAlignFront()
952 AlignEdges(RubikWidget w) in AlignEdges() argument
957 if (Side(w, 1, 4) == YELLOW) in AlignEdges()
958 RotateRight(w); in AlignEdges()
959 else if (Side(w, 1, 4) == ORANGE) { in AlignEdges()
960 RotateRight(w); in AlignEdges()
961 RotateRight(w); in AlignEdges()
962 } else if (Side(w, 1, 4) == WHITE) in AlignEdges()
963 RotateLeft(w); in AlignEdges()
966 edge = FindEdge(w, BLUE, RED); in AlignEdges()
968 RotateTopLeft(w); in AlignEdges()
970 RotateTopLeft(w); in AlignEdges()
971 RotateTopLeft(w); in AlignEdges()
973 RotateTopRight(w); in AlignEdges()
976 edge = FindEdge(w, GREEN, RED); in AlignEdges()
978 RotateBottomLeft(w); in AlignEdges()
980 RotateBottomLeft(w); in AlignEdges()
981 RotateBottomLeft(w); in AlignEdges()
983 RotateBottomRight(w); in AlignEdges()
985 if (CheckSolved(w)) in AlignEdges()
988 RotateCcw(w); /* place unaligned edges vertically */ in AlignEdges()
992 edge = FindEdge(w, RED, YELLOW); in AlignEdges()
995 edge = FindEdge(w, YELLOW, ORANGE); in AlignEdges()
998 edge = FindEdge(w, ORANGE, WHITE); in AlignEdges()
1001 edge = FindEdge(w, WHITE, RED); in AlignEdges()
1006 ShuffleEdges(w); /* put one edge into position */ in AlignEdges()
1011 edge = FindEdge(w, RED, YELLOW); in AlignEdges()
1013 RotateDown(w); in AlignEdges()
1014 RotateDown(w); in AlignEdges()
1016 edge = FindEdge(w, YELLOW, ORANGE); in AlignEdges()
1018 RotateUp(w); in AlignEdges()
1020 edge = FindEdge(w, WHITE, RED); in AlignEdges()
1022 RotateDown(w); in AlignEdges()
1027 color = Side(w, 1, 4); in AlignEdges()
1028 if (Side(w, 1, 7) == color) { in AlignEdges()
1029 RotateRight(w); in AlignEdges()
1030 RotateRight(w); in AlignEdges()
1031 RotateDown(w); in AlignEdges()
1032 ShuffleEdges(w); in AlignEdges()
1033 } else if (Side(w, 6, 1) == color) { in AlignEdges()
1034 RotateRight(w); in AlignEdges()
1035 RotateRight(w); in AlignEdges()
1036 RotateDown(w); in AlignEdges()
1037 ShuffleEdges(w); in AlignEdges()
1039 ShuffleEdges(w); in AlignEdges()
1044 if (Side(w, 1, 1) == Side(w, 1, 4)) in AlignEdges()
1046 if (Side(w, 1, 7) == Side(w, 1, 4)) in AlignEdges()
1048 if (Side(w, 3, 1) == Side(w, 3, 4)) in AlignEdges()
1050 if (Side(w, 3, 7) == Side(w, 3, 4)) in AlignEdges()
1053 RecolorTopEdges(w); in AlignEdges()
1054 RotateDown(w); in AlignEdges()
1055 RotateDown(w); in AlignEdges()
1056 RecolorTopEdges(w); in AlignEdges()
1058 if (Side(w, 1, 1) == Side(w, 1, 4)) in AlignEdges()
1060 RotateDown(w); in AlignEdges()
1061 } while (Side(w, 1, 1) == Side(w, 1, 4)); in AlignEdges()
1062 if (Side(w, 1, 7) != Side(w, 1, 4)) in AlignEdges()
1063 RotateUp(w); in AlignEdges()
1064 RecolorTopEdges(w); in AlignEdges()
1065 if (!CheckSolved(w)) { in AlignEdges()
1066 RotateDown(w); in AlignEdges()
1067 RecolorTopEdges(w); in AlignEdges()
1075 ShuffleEdges(RubikWidget w) in ShuffleEdges() argument
1077 RotateCenterUp(w); in ShuffleEdges()
1078 RotateTopRight(w); in ShuffleEdges()
1079 RotateTopRight(w); in ShuffleEdges()
1080 RotateCenterDown(w); in ShuffleEdges()
1081 RotateTopRight(w); in ShuffleEdges()
1082 RotateTopRight(w); in ShuffleEdges()
1089 RecolorTopEdges(RubikWidget w) in RecolorTopEdges() argument
1091 RotateCenterUp(w); in RecolorTopEdges()
1092 RotateTopRight(w); in RecolorTopEdges()
1093 RotateCenterUp(w); in RecolorTopEdges()
1094 RotateTopRight(w); in RecolorTopEdges()
1095 RotateCenterUp(w); in RecolorTopEdges()
1096 RotateTopRight(w); in RecolorTopEdges()
1097 RotateTopRight(w); in RecolorTopEdges()
1098 RotateCenterDown(w); in RecolorTopEdges()
1099 RotateTopRight(w); in RecolorTopEdges()
1100 RotateCenterDown(w); in RecolorTopEdges()
1101 RotateTopRight(w); in RecolorTopEdges()
1102 RotateCenterDown(w); in RecolorTopEdges()
1103 RotateTopRight(w); in RecolorTopEdges()
1104 RotateTopRight(w); in RecolorTopEdges()
1109 SolvePolyhedrons(RubikWidget w) in SolvePolyhedrons() argument
1114 XtCallCallbacks((Widget) w, XtNselectCallback, &cb); in SolvePolyhedrons()
1115 if (!CheckSolved(w)) { in SolvePolyhedrons()
1116 SolveTop(w); in SolvePolyhedrons()
1117 AlignCorners(w); in SolvePolyhedrons()
1118 SolveBottom(w); in SolvePolyhedrons()
1119 if (w->rubik.sizex > 2) { in SolvePolyhedrons()
1120 SolveBottomEdges(w); in SolvePolyhedrons()
1121 AlignEdges(w); in SolvePolyhedrons()
1122 } else if (w->rubik.sizex == 2) in SolvePolyhedrons()
1123 Solve_2_2(w); in SolvePolyhedrons()
1126 XtCallCallbacks((Widget) w, XtNselectCallback, &cb); in SolvePolyhedrons()