123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 |
- #include "include/ps-init.h"
- #include "include/ps-sdl2.h"
- #include "prescheme.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- struct sdl_window {};
- struct sdl_renderer {};
- struct sdl_event {};
- struct grid {
- long width;
- long height;
- long size;
- char *front_buffer;
- char *back_buffer;
- };
- static long handle_sdl_error(char *);
- long main(long, char **);
- static long handle_sdl_error(char *message_0X) {
- char *v_2X;
- FILE *out_1X;
- {
- out_1X = stderr;
- ps_write_string(message_0X, out_1X);
- ps_write_string(": ", out_1X);
- v_2X = SDL_GetError();
- ps_write_string(v_2X, out_1X);
- {
- long ignoreXX;
- PS_WRITE_CHAR(10, out_1X, ignoreXX)
- }
- return -1;
- }
- }
- long main(long argc_3X, char **argv_4X) {
- char arg3K0;
- long arg1K2;
- long arg1K1;
- long arg1K0;
- struct grid *arg0K0;
- long merged_arg1K2;
- long merged_arg1K1;
- struct grid *merged_arg0K0;
- #ifdef USE_DIRECT_THREADING
- void *grid_ref_return_address;
- #else
- int grid_ref_return_tag;
- #endif
- long grid_ref0_return_value;
- struct grid *grid_5X;
- long x_6X;
- long y_7X;
- long y_57X;
- long rem_56X;
- long m_55X;
- long x_54X;
- long rem_53X;
- long m_52X;
- long value_51X;
- long y_50X;
- long x_49X;
- long ix_48X;
- long live_neighbours_47X;
- long south_west_46X;
- long north_45X;
- long south_44X;
- long east_43X;
- long west_42X;
- long north_east_41X;
- long north_west_40X;
- long south_east_39X;
- long value_38X;
- long height_37X;
- long width_36X;
- char *tmp_35X;
- long y_34X;
- long x_33X;
- long ix_32X;
- long height_31X;
- long width_30X;
- long v_29X;
- long n_28X;
- char runningP_27X;
- long value_26X;
- long v_25X;
- char *tmp_24X;
- long y_23X;
- long x_22X;
- long ix_21X;
- long height_20X;
- long width_19X;
- struct grid *grid_18X;
- long result_17X;
- long result_16X;
- struct grid *grid_15X;
- long v_14X;
- struct sdl_event *event_13X;
- long result_12X;
- struct sdl_renderer *renderer_11X;
- long result_10X;
- struct sdl_window *window_9X;
- long n_8X;
- {
- n_8X = SDL_Init(SDL_INIT_VIDEO);
- if ((0 == n_8X)) {
- window_9X = PS_SDL_CreateWindow(
- "Conway's Game of Life", SDL_WINDOWPOS_CENTERED,
- SDL_WINDOWPOS_CENTERED, 1280, 800, SDL_WINDOW_SHOWN);
- if ((NULL == window_9X)) {
- result_10X = handle_sdl_error("Could not create window");
- arg1K0 = result_10X;
- goto L1161;
- } else {
- renderer_11X =
- PS_SDL_CreateRenderer(window_9X, -1, SDL_RENDERER_ACCELERATED);
- if ((NULL == renderer_11X)) {
- result_12X = handle_sdl_error("Could not create renderer");
- arg1K0 = result_12X;
- goto L1180;
- } else {
- event_13X = PS_SDL_CreateEvent();
- v_14X = time(0);
- srand(v_14X);
- grid_15X = (struct grid *)malloc(sizeof(struct grid));
- if ((NULL == grid_15X)) {
- arg0K0 = grid_15X;
- goto L1015;
- } else {
- grid_15X->width = 256;
- grid_15X->height = 160;
- grid_15X->size = 40960;
- grid_15X->front_buffer = ((char *)malloc(sizeof(char) * 40960));
- grid_15X->back_buffer = ((char *)malloc(sizeof(char) * 40960));
- arg0K0 = grid_15X;
- goto L1015;
- }
- }
- }
- } else {
- return handle_sdl_error("Could not initialize SDL");
- }
- }
- L1161 : {
- result_16X = arg1K0;
- SDL_Quit();
- return result_16X;
- }
- L1180 : {
- result_17X = arg1K0;
- PS_SDL_DestroyWindow(window_9X);
- arg1K0 = result_17X;
- goto L1161;
- }
- L1015 : {
- grid_18X = arg0K0;
- width_19X = grid_18X->width;
- height_20X = grid_18X->height;
- arg1K0 = 0;
- arg1K1 = 0;
- arg1K2 = 0;
- goto L1027;
- }
- L1027 : {
- ix_21X = arg1K0;
- x_22X = arg1K1;
- y_23X = arg1K2;
- if ((y_23X == height_20X)) {
- tmp_24X = grid_18X->front_buffer;
- grid_18X->front_buffer = (grid_18X->back_buffer);
- grid_18X->back_buffer = tmp_24X;
- arg3K0 = 1;
- goto L1056;
- } else {
- if ((x_22X == width_19X)) {
- arg1K0 = ix_21X;
- arg1K1 = 0;
- arg1K2 = (1 + y_23X);
- goto L1027;
- } else {
- v_25X = rand();
- value_26X = v_25X % 2;
- *((grid_18X->back_buffer) + ix_21X) = (((char)value_26X));
- arg1K0 = (1 + ix_21X);
- arg1K1 = (1 + x_22X);
- arg1K2 = y_23X;
- goto L1027;
- }
- }
- }
- L1056 : {
- runningP_27X = arg3K0;
- if (runningP_27X) {
- n_28X = PS_SDL_PollEvent(event_13X);
- if ((1 == n_28X)) {
- v_29X = PS_SDL_EventType(event_13X);
- if ((SDL_QUIT == v_29X)) {
- arg3K0 = 0;
- goto L1056;
- } else {
- arg3K0 = 1;
- goto L1056;
- }
- } else {
- width_30X = grid_18X->width;
- height_31X = grid_18X->height;
- arg1K0 = 0;
- arg1K1 = 0;
- arg1K2 = 0;
- goto L964;
- }
- } else {
- free((grid_18X->front_buffer));
- free((grid_18X->back_buffer));
- free(grid_18X);
- PS_SDL_DestroyEvent(event_13X);
- PS_SDL_DestroyRenderer(renderer_11X);
- arg1K0 = 0;
- goto L1180;
- }
- }
- L964 : {
- ix_32X = arg1K0;
- x_33X = arg1K1;
- y_34X = arg1K2;
- if ((y_34X == height_31X)) {
- tmp_35X = grid_18X->front_buffer;
- grid_18X->front_buffer = (grid_18X->back_buffer);
- grid_18X->back_buffer = tmp_35X;
- PS_SDL_SetRenderDrawColor(renderer_11X, 0, 0, 0, 255);
- PS_SDL_RenderClear(renderer_11X);
- PS_SDL_SetRenderDrawColor(renderer_11X, 255, 255, 255, 255);
- width_36X = grid_18X->width;
- height_37X = grid_18X->height;
- arg1K0 = 0;
- arg1K1 = 0;
- arg1K2 = 0;
- goto L791;
- } else {
- if ((x_33X == width_30X)) {
- arg1K0 = ix_32X;
- arg1K1 = 0;
- arg1K2 = (1 + y_34X);
- goto L964;
- } else {
- value_38X = ((unsigned char)(*((grid_18X->front_buffer) + ix_32X)));
- merged_arg0K0 = grid_18X;
- merged_arg1K1 = (1 + x_33X);
- merged_arg1K2 = (1 + y_34X);
- #ifdef USE_DIRECT_THREADING
- grid_ref_return_address = &&grid_ref_return_0;
- #else
- grid_ref_return_tag = 0;
- #endif
- goto grid_ref;
- grid_ref_return_0:
- south_east_39X = grid_ref0_return_value;
- merged_arg0K0 = grid_18X;
- merged_arg1K1 = (-1 + x_33X);
- merged_arg1K2 = (-1 + y_34X);
- #ifdef USE_DIRECT_THREADING
- grid_ref_return_address = &&grid_ref_return_1;
- #else
- grid_ref_return_tag = 1;
- #endif
- goto grid_ref;
- grid_ref_return_1:
- north_west_40X = grid_ref0_return_value;
- merged_arg0K0 = grid_18X;
- merged_arg1K1 = (1 + x_33X);
- merged_arg1K2 = (-1 + y_34X);
- #ifdef USE_DIRECT_THREADING
- grid_ref_return_address = &&grid_ref_return_2;
- #else
- grid_ref_return_tag = 2;
- #endif
- goto grid_ref;
- grid_ref_return_2:
- north_east_41X = grid_ref0_return_value;
- merged_arg0K0 = grid_18X;
- merged_arg1K1 = (-1 + x_33X);
- merged_arg1K2 = y_34X;
- #ifdef USE_DIRECT_THREADING
- grid_ref_return_address = &&grid_ref_return_3;
- #else
- grid_ref_return_tag = 3;
- #endif
- goto grid_ref;
- grid_ref_return_3:
- west_42X = grid_ref0_return_value;
- merged_arg0K0 = grid_18X;
- merged_arg1K1 = (1 + x_33X);
- merged_arg1K2 = y_34X;
- #ifdef USE_DIRECT_THREADING
- grid_ref_return_address = &&grid_ref_return_4;
- #else
- grid_ref_return_tag = 4;
- #endif
- goto grid_ref;
- grid_ref_return_4:
- east_43X = grid_ref0_return_value;
- merged_arg0K0 = grid_18X;
- merged_arg1K1 = x_33X;
- merged_arg1K2 = (1 + y_34X);
- #ifdef USE_DIRECT_THREADING
- grid_ref_return_address = &&grid_ref_return_5;
- #else
- grid_ref_return_tag = 5;
- #endif
- goto grid_ref;
- grid_ref_return_5:
- south_44X = grid_ref0_return_value;
- merged_arg0K0 = grid_18X;
- merged_arg1K1 = x_33X;
- merged_arg1K2 = (-1 + y_34X);
- #ifdef USE_DIRECT_THREADING
- grid_ref_return_address = &&grid_ref_return_6;
- #else
- grid_ref_return_tag = 6;
- #endif
- goto grid_ref;
- grid_ref_return_6:
- north_45X = grid_ref0_return_value;
- merged_arg0K0 = grid_18X;
- merged_arg1K1 = (-1 + x_33X);
- merged_arg1K2 = (1 + y_34X);
- #ifdef USE_DIRECT_THREADING
- grid_ref_return_address = &&grid_ref_return_7;
- #else
- grid_ref_return_tag = 7;
- #endif
- goto grid_ref;
- grid_ref_return_7:
- south_west_46X = grid_ref0_return_value;
- live_neighbours_47X =
- ((((((north_45X + south_44X) + east_43X) + west_42X) +
- north_east_41X) +
- north_west_40X) +
- south_east_39X) +
- south_west_46X;
- if ((1 == value_38X)) {
- if ((live_neighbours_47X < 2)) {
- arg1K0 = 0;
- goto L968;
- } else {
- if ((3 < live_neighbours_47X)) {
- arg1K0 = 0;
- goto L968;
- } else {
- arg1K0 = 1;
- goto L968;
- }
- }
- } else {
- if ((3 == live_neighbours_47X)) {
- arg1K0 = 1;
- goto L968;
- } else {
- arg1K0 = 0;
- goto L968;
- }
- }
- }
- }
- }
- L791 : {
- ix_48X = arg1K0;
- x_49X = arg1K1;
- y_50X = arg1K2;
- if ((y_50X == height_37X)) {
- PS_SDL_RenderPresent(renderer_11X);
- SDL_Delay(50);
- arg3K0 = 1;
- goto L1056;
- } else {
- if ((x_49X == width_36X)) {
- arg1K0 = ix_48X;
- arg1K1 = 0;
- arg1K2 = (1 + y_50X);
- goto L791;
- } else {
- if ((0 == (((unsigned char)(*((grid_18X->front_buffer) + ix_48X)))))) {
- goto L795;
- } else {
- PS_SDL_RenderFillRect(renderer_11X, (5 * x_49X), (5 * y_50X), 5, 5);
- goto L795;
- }
- }
- }
- }
- L968 : {
- value_51X = arg1K0;
- *((grid_18X->back_buffer) + ix_32X) = (((char)value_51X));
- arg1K0 = (1 + ix_32X);
- arg1K1 = (1 + x_33X);
- arg1K2 = y_34X;
- goto L964;
- }
- L795 : {
- arg1K0 = (1 + ix_48X);
- arg1K1 = (1 + x_49X);
- arg1K2 = y_50X;
- goto L791;
- }
- grid_ref : {
- grid_5X = merged_arg0K0;
- x_6X = merged_arg1K1;
- y_7X = merged_arg1K2;
- {
- m_52X = grid_5X->width;
- rem_53X = x_6X % m_52X;
- if ((rem_53X < 0)) {
- arg1K0 = (rem_53X + m_52X);
- goto L598;
- } else {
- arg1K0 = rem_53X;
- goto L598;
- }
- }
- L598 : {
- x_54X = arg1K0;
- m_55X = grid_5X->height;
- rem_56X = y_7X % m_55X;
- if ((rem_56X < 0)) {
- arg1K0 = (rem_56X + m_55X);
- goto L602;
- } else {
- arg1K0 = rem_56X;
- goto L602;
- }
- }
- L602 : {
- y_57X = arg1K0;
- grid_ref0_return_value = (((unsigned char)(*(
- (grid_5X->front_buffer) + (x_54X + (y_57X * (grid_5X->width)))))));
- #ifdef USE_DIRECT_THREADING
- goto *grid_ref_return_address;
- #else
- goto grid_ref_return;
- #endif
- }
- #ifndef USE_DIRECT_THREADING
- grid_ref_return:
- switch (grid_ref_return_tag) {
- case 0:
- goto grid_ref_return_0;
- case 1:
- goto grid_ref_return_1;
- case 2:
- goto grid_ref_return_2;
- case 3:
- goto grid_ref_return_3;
- case 4:
- goto grid_ref_return_4;
- case 5:
- goto grid_ref_return_5;
- case 6:
- goto grid_ref_return_6;
- default:
- goto grid_ref_return_7;
- }
- #endif
- }
- }
|