diff options
Diffstat (limited to 'procyon')
-rw-r--r-- | procyon/GNUmakefile | 63 | ||||
-rw-r--r-- | procyon/include/acm/bs.h | 121 | ||||
-rw-r--r-- | procyon/include/acm/evt.h | 10 | ||||
-rw-r--r-- | procyon/include/acm/gfx.h | 8 | ||||
-rw-r--r-- | procyon/include/acm/info.h | 12 | ||||
-rw-r--r-- | procyon/include/acm/sav.h | 9 | ||||
-rw-r--r-- | procyon/source/bs/dbglog.c | 11 | ||||
-rw-r--r-- | procyon/source/bs/exit.c | 15 | ||||
-rw-r--r-- | procyon/source/bs/init.c | 51 | ||||
-rw-r--r-- | procyon/source/bs/shipnm.c | 70 | ||||
-rw-r--r-- | procyon/source/evt/jmp.c | 13 | ||||
-rw-r--r-- | procyon/source/gfx/initgfx.c | 22 | ||||
-rw-r--r-- | procyon/source/info/jmplen.c | 7 | ||||
-rw-r--r-- | procyon/source/info/sysdist.c | 7 | ||||
-rw-r--r-- | procyon/source/main.c | 24 | ||||
-rw-r--r-- | procyon/source/sav/cont.c | 81 | ||||
-rw-r--r-- | procyon/source/sav/sav.c | 35 |
17 files changed, 0 insertions, 559 deletions
diff --git a/procyon/GNUmakefile b/procyon/GNUmakefile deleted file mode 100644 index a9379b7..0000000 --- a/procyon/GNUmakefile +++ /dev/null @@ -1,63 +0,0 @@ -# TOOLS - -# TOOL FLAGS - -CFLAGS := \ - -D_POSIX_C_SOURCE=200809L \ - -Iinclude \ - -O3 \ - -Wall \ - -Wextra \ - -Wpedantic \ - -g \ - -march=native \ - -std=c2x - -ifeq "$(debug)" "true" -CFLAGS := \ - $(CFLAGS) \ - -Dacm_dbg -endif - -LDLIBS := \ - -lGL \ - -lflux \ - -lglfw \ - -lzap - -# HEADERS - -HDRS := \ - include/acm/bs.h - -# BINARIES - -OBJS := \ - source/bs/dbglog.o \ - source/bs/exit.o \ - source/bs/init.o \ - source/bs/shipnm.o \ - source/evt/jmp.o \ - source/gfx/initgfx.o \ - source/info/jmplen.o \ - source/info/sysdist.o \ - source/sav/cont.o \ - source/sav/sav.o \ - source/main.o - -BIN := procyon.elf - -# TARGETS - -.PHONY: clean purge - -$(BIN): $(OBJS) - $(CC) $(CFLAGS) $(LDFLAGS) -o$(@) $(^) $(LDLIBS) - -$(OBJS): $(HDRS) - -clean: - $(RM) $(OBJS) - -purge: clean - $(RM) $(LIB) diff --git a/procyon/include/acm/bs.h b/procyon/include/acm/bs.h deleted file mode 100644 index 497bdb0..0000000 --- a/procyon/include/acm/bs.h +++ /dev/null @@ -1,121 +0,0 @@ -#if !defined(acm_hdr_bs) -#define acm_hdr_bs - -#include <GLFW/glfw3.h> -#include <signal.h> -#include <stdint.h> -#include <stdio.h> -#include <zap/bs.h> - -#define acm_ver ((uint_least64_t)+0x1) -#define acm_savver ((uint_least64_t)+0x1) - -#define acm_plnmlen ((zap_sz)+0x10u) - -#define acm_dflplnm ("Jameson\x0\x0\x0\x0\x0\x0\x0\x0") - -#if defined(acm_dbg) -#define acm_log(...) (acm_dbglog(__VA_ARGS__)) -#else -#define acm_log(...) ((void)0x0u) -#endif - -typedef enum { - acm_drv_h1, - acm_drv_h2, - acm_drv_h3, - acm_drv_h4, - acm_drv_h5, - acm_drv_h6, - acm_drv_h7, - acm_drv_h8, - acm_drv_m1, - acm_drv_m2, - acm_drv_m3, - acm_drv_m4, -} acm_drv; - -typedef enum { - acm_shipid_add, - acm_shipid_ana, - acm_shipid_asp, - acm_shipid_boa, - acm_shipid_cob, - acm_shipid_con, - acm_shipid_cou, - acm_shipid_cyg, - acm_shipid_dov, - acm_shipid_eag, - acm_shipid_falc, - acm_shipid_fer, - acm_shipid_frei, - acm_shipid_geck, - acm_shipid_haul, - acm_shipid_hawk, - acm_shipid_keel, - acm_shipid_kes, - acm_shipid_krait, - acm_shipid_lift, - acm_shipid_lion, - acm_shipid_mamba, - acm_shipid_moray, - acm_shipid_osp, - acm_shipid_pan, - acm_shipid_puma, - acm_shipid_py, - acm_shipid_shut, - acm_shipid_side, - acm_shipid_tran, - acm_shipid_vip, - acm_shipid_vult, -} acm_shipid; - -typedef enum { - acm_stat_err, - acm_stat_ok, -} acm_stat; - -typedef struct { - uint_least64_t rx; /* Rotation data */ - uint_least64_t ry; - uint_least64_t rz; - uint_least64_t px; /* Position data */ - uint_least64_t py; - uint_least64_t pz; - uint_least64_t vx; /* Velocity data */ - uint_least64_t vy; - uint_least64_t vz; -} acm_objpos; - -typedef struct { - acm_objpos pos; -} acm_obj; - -typedef struct { - acm_drv drv; - acm_shipid id; -} acm_ship; - -typedef struct { - char nm[acm_plnmlen + 0x1u]; - uint_least16_t heat; - acm_objpos pos; - uint_least64_t selsys; - acm_ship ship; - uint_least64_t tm; -} acm_pldat; - -extern struct { - bool gfxisinit; - acm_pldat pldat; - char const * savloc; - GLFWwindow * win; -} acm_dat; - -extern sig_atomic_t volatile acm_gotintr; - - void acm_dbglog(char const * fmt,...); - void acm_init( void); -[[noreturn]] void acm_exit( acm_stat stat); - -#endif diff --git a/procyon/include/acm/evt.h b/procyon/include/acm/evt.h deleted file mode 100644 index 3a5aa2a..0000000 --- a/procyon/include/acm/evt.h +++ /dev/null @@ -1,10 +0,0 @@ -#if !defined(acm_hdr_evt) -#define acm_hdr_evt - -#include <acm/bs.h> - -#include <stdint.h> - -bool acm_jmp(uint_least64_t sys); - -#endif diff --git a/procyon/include/acm/gfx.h b/procyon/include/acm/gfx.h deleted file mode 100644 index c3fdc15..0000000 --- a/procyon/include/acm/gfx.h +++ /dev/null @@ -1,8 +0,0 @@ -#if !defined(acm_hdr_gfx) -#define acm_hdr_gfx - -#include <acm/bs.h> - -void acm_initgfx(void); - -#endif diff --git a/procyon/include/acm/info.h b/procyon/include/acm/info.h deleted file mode 100644 index d42ad0b..0000000 --- a/procyon/include/acm/info.h +++ /dev/null @@ -1,12 +0,0 @@ -#if !defined(acm_hdr_info) -#define acm_hdr_info - -#include <acm/bs.h> - -#include <stdint.h> - -char const * acm_shipnm( acm_shipid ship); -uint_least64_t acm_sysdist(uint_least64_t sys); -uint_least64_t acm_jmplen( acm_ship const * ship); - -#endif diff --git a/procyon/include/acm/sav.h b/procyon/include/acm/sav.h deleted file mode 100644 index 4caf810..0000000 --- a/procyon/include/acm/sav.h +++ /dev/null @@ -1,9 +0,0 @@ -#if !defined(acm_hdr_sav) -#define acm_hdr_sav - -#include <acm/bs.h> - -void acm_cont(acm_pldat * pldat); -void acm_sav( acm_pldat const * pldat); - -#endif diff --git a/procyon/source/bs/dbglog.c b/procyon/source/bs/dbglog.c deleted file mode 100644 index d04174f..0000000 --- a/procyon/source/bs/dbglog.c +++ /dev/null @@ -1,11 +0,0 @@ -#include <acm/bs.h> - -#include <stdarg.h> -#include <stdio.h> - -void acm_dbglog(char const * const _fmt,...) { - va_list args; - va_start(args,_fmt); - vfprintf(stderr,_fmt,args); - va_end(args); -} diff --git a/procyon/source/bs/exit.c b/procyon/source/bs/exit.c deleted file mode 100644 index e49dfc9..0000000 --- a/procyon/source/bs/exit.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <acm/bs.h> - -#include <GLFW/glfw3.h> -#include <stdlib.h> - -void acm_exit(acm_stat const _stat) { - int const cstat = _stat == acm_stat_ok ? EXIT_SUCCESS : EXIT_FAILURE; - free((void *)acm_dat.savloc); - if (acm_dat.gfxisinit) { - glfwDestroyWindow(acm_dat.win); - glfwTerminate(); - } - acm_log("Done (%X)\n",cstat); - exit(cstat); -} diff --git a/procyon/source/bs/init.c b/procyon/source/bs/init.c deleted file mode 100644 index 1f4c57e..0000000 --- a/procyon/source/bs/init.c +++ /dev/null @@ -1,51 +0,0 @@ -#include <acm/gfx.h> - -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <zap/mem.h> - -sig_atomic_t volatile acm_gotintr; - -typeof (acm_dat) acm_dat; - -static char * acm_getsavloc(void) { - char const * const hmdir = getenv("HOME"); - if (hmdir == nullptr) { - fprintf(stderr,"Unable to get home directory (HOME not set)\n"); - acm_exit(acm_stat_err); - } - char const * const savfilnm = ".procyon-save"; - zap_sz const hmdirlen = zap_strlen(hmdir); - zap_sz const savfilnmlen = zap_strlen(savfilnm); - zap_sz const savloclen = hmdirlen + 0x1u + savfilnmlen; - char * savloc = malloc(savloclen + 0x1u); - if (savloc == nullptr) { - fprintf(stderr,"Unable allocate memory\n"); - acm_exit(acm_stat_err); - } - zap_memcp(hmdir,hmdirlen,savloc); - savloc[hmdirlen] = '/'; - zap_memcp(savfilnm,savfilnmlen,savloc + hmdirlen + 0x1u); - savloc[savloclen] = 0x0u; - return savloc; -} - -static void acm_intrhandl(int const _sig) { - signal(_sig,acm_intrhandl); /* Ignore the return value. */ - acm_gotintr = 0x1; -} - -void acm_init(void) { - acm_gotintr = 0x0; - acm_dat.gfxisinit = false; - acm_dat.win = nullptr; - acm_log("Initialising data\n"); - acm_dat.savloc = acm_getsavloc(); - acm_log("Initialising signal handlers\n"); - if (signal(SIGINT,acm_intrhandl) == SIG_ERR) { - fprintf(stderr,"Unable to set SIGINT handler\n"); - acm_exit(acm_stat_err); - } - acm_initgfx(); -} diff --git a/procyon/source/bs/shipnm.c b/procyon/source/bs/shipnm.c deleted file mode 100644 index f1d8f4e..0000000 --- a/procyon/source/bs/shipnm.c +++ /dev/null @@ -1,70 +0,0 @@ -#include <acm/bs.h> - -char const * acm_shipnm(acm_shipid const _ship) { - switch (_ship) { - case acm_shipid_add: - return "Adder"; - case acm_shipid_ana: - return "Anaconda"; - case acm_shipid_asp: - return "Asp"; - case acm_shipid_boa: - return "Boa"; - case acm_shipid_cob: - return "Cobra"; - case acm_shipid_con: - return "Constrictor"; - case acm_shipid_cou: - return "Courier"; - case acm_shipid_cyg: - return "Cygnus"; - case acm_shipid_dov: - return "Dove"; - case acm_shipid_eag: - return "Eagle"; - case acm_shipid_falc: - return "Falcon"; - case acm_shipid_fer: - return "Fer-de-lance"; - case acm_shipid_frei: - return "Freighter"; - case acm_shipid_geck: - return "Gecko"; - case acm_shipid_haul: - return "Hauler"; - case acm_shipid_hawk: - return "Hawk"; - case acm_shipid_keel: - return "Keelback"; - case acm_shipid_kes: - return "Kestral"; - case acm_shipid_krait: - return "Krait"; - case acm_shipid_lift: - return "Lifter"; - case acm_shipid_lion: - return "Lion"; - case acm_shipid_mamba: - return "Mamba"; - case acm_shipid_moray: - return "Moray"; - case acm_shipid_osp: - return "Osprey"; - case acm_shipid_pan: - return "Panther"; - case acm_shipid_puma: - return "Puma"; - case acm_shipid_py: - return "Python"; - case acm_shipid_shut: - return "Shuttle"; - case acm_shipid_side: - return "Sidewinder"; - case acm_shipid_tran: - return "Transporter"; - case acm_shipid_vip: - return "Viper"; - case acm_shipid_vult: - return "Vulture"; - } -} diff --git a/procyon/source/evt/jmp.c b/procyon/source/evt/jmp.c deleted file mode 100644 index 5a93491..0000000 --- a/procyon/source/evt/jmp.c +++ /dev/null @@ -1,13 +0,0 @@ -#include <acm/evt.h> -#include <acm/info.h> - -#include <stdint.h> - -bool acm_jmp(uint_least64_t const _sys) { - acm_pldat pldat = acm_dat.pldat; - if (acm_sysdist(_sys) > acm_jmplen(&pldat.ship)) { - return true; - } - acm_dat.pldat = pldat; - return false; -} diff --git a/procyon/source/gfx/initgfx.c b/procyon/source/gfx/initgfx.c deleted file mode 100644 index d60e393..0000000 --- a/procyon/source/gfx/initgfx.c +++ /dev/null @@ -1,22 +0,0 @@ -#include <acm/gfx.h> - -#include <GLFW/glfw3.h> - -void acm_initgfx(void) { - acm_log("Initialising graphics\n"); - if (!glfwInit()) { - fprintf(stderr,"Unable to initialise GLFW\n"); - acm_exit(acm_stat_err); - } - GLFWwindow * win = glfwCreateWindow(0x300,0x200,"Procyon",nullptr,nullptr); - if (win == nullptr) { - fprintf(stderr,"Unable to open window\n"); - goto abrt; - } - glfwMakeContextCurrent(win); - acm_dat.win = win; - return; -abrt:; - glfwTerminate(); - acm_exit(acm_stat_err); -} diff --git a/procyon/source/info/jmplen.c b/procyon/source/info/jmplen.c deleted file mode 100644 index 7ef8995..0000000 --- a/procyon/source/info/jmplen.c +++ /dev/null @@ -1,7 +0,0 @@ -#include <acm/info.h> - -#include <stdint.h> - -uint_least64_t acm_jmplen(acm_ship const * _ship) { - return 0x0u; -} diff --git a/procyon/source/info/sysdist.c b/procyon/source/info/sysdist.c deleted file mode 100644 index 2e77220..0000000 --- a/procyon/source/info/sysdist.c +++ /dev/null @@ -1,7 +0,0 @@ -#include <acm/info.h> - -#include <stdint.h> - -uint_least64_t acm_sysdist(uint_least64_t const _sys) { - return ~(uint_least64_t)0x0u; -} diff --git a/procyon/source/main.c b/procyon/source/main.c deleted file mode 100644 index 19439a4..0000000 --- a/procyon/source/main.c +++ /dev/null @@ -1,24 +0,0 @@ -#include <acm/sav.h> - -#include <flux.h> -#include <inttypes.h> -#include <stdio.h> - -int main(int const argc,[[maybe_unused]] char const * const * const argv) { - acm_dat.gfxisinit = false; - if (argc > 0x1) { - fprintf(stderr,"Ignoring terminal options\n"); - } - printf("Procyon, %" PRIxLEAST64 " - Copyright 2022 Gabriel Jensen.\n",acm_ver); - acm_init(); - acm_cont(&acm_dat.pldat); - acm_log("Ready\n"); - while (!glfwWindowShouldClose(acm_dat.win)) { - if (acm_gotintr) { - fprintf(stderr,"Got interrupt, stopping\n"); - glfwSetWindowShouldClose(acm_dat.win,0x1); - } - } - acm_sav(&acm_dat.pldat); - acm_exit(acm_stat_ok); -} diff --git a/procyon/source/sav/cont.c b/procyon/source/sav/cont.c deleted file mode 100644 index e52fd76..0000000 --- a/procyon/source/sav/cont.c +++ /dev/null @@ -1,81 +0,0 @@ -#include <acm/info.h> -#include <acm/sav.h> - -#include <flux.h> -#include <inttypes.h> -#include <zap/mem.h> - -static_assert(sizeof (acm_dflplnm) == acm_plnmlen); - -void acm_cont(acm_pldat * const _pldat) { - acm_log("Continuing\n"); - acm_pldat pldat; - uint_least64_t savver; - flux_err fluxerr; - flux_fil savfil; - fluxerr = flux_op(&savfil,acm_dat.savloc,flux_md_rd,flux_keep); - if (fluxerr) { - acm_log("Unable to open save file, starting new game: %s\n",flux_errstr(fluxerr)); - goto new; - } - fluxerr = flux_rd(savfil,sizeof (savver),&savver,nullptr); - if (!fluxerr) { - fluxerr = flux_rd(savfil,sizeof (pldat),&pldat,nullptr); - } - flux_cl(savfil); - if (fluxerr) { - acm_log("Unable to read save file, starting new game: %s\n",flux_errstr(fluxerr)); - goto new; - } - if (savver != acm_savver) { - printf("Old save version (%" PRIXLEAST64 "), starting new game: %s\n",savver,flux_errstr(fluxerr)); - goto new; - } - acm_log("Validating commander name\n"); - bool validnm = false; - for (zap_sz n = 0x0u;n < acm_plnmlen + 0x1u;++n) { - if (pldat.nm[n] == '\x0') { - if (n == 0x0u) { - break; - } - validnm = true; - break; - } - } - if (!validnm) { - acm_log("Invalid commander name (corrupt save file), starting new game\n"); - acm_log( - "Commander name:\n" - " %hhX %hhX %hhX %hhX\n" - " %hhX %hhX %hhX %hhX\n" - " %hhX %hhX %hhX %hhX\n" - " %hhX %hhX %hhX %hhX\n" - " %hhX\n", - pldat.nm[0x0u],pldat.nm[0x1u],pldat.nm[0x2u],pldat.nm[0x3u], - pldat.nm[0x4u],pldat.nm[0x5u],pldat.nm[0x6u],pldat.nm[0x7u], - pldat.nm[0x8u],pldat.nm[0x9u],pldat.nm[0xAu],pldat.nm[0xBu], - pldat.nm[0xCu],pldat.nm[0xDu],pldat.nm[0xEu],pldat.nm[0xFu], - pldat.nm[0x10u] - ); - goto new; - } - printf("Loaded CMDR %s, %s @ %" PRIiLEAST64 "\n",pldat.nm,acm_shipnm(pldat.ship.id),pldat.tm); - *_pldat = pldat; - return; -new:; - pldat.heat = 0x120u; /* 288K */ - pldat.pos.px = 0x0u; - pldat.pos.py = 0x0u; - pldat.pos.pz = 0x0u; - pldat.pos.rx = 0x0u; - pldat.pos.ry = 0x0u; - pldat.pos.rz = 0x0u; - pldat.pos.vx = 0x0u; - pldat.pos.vy = 0x0u; - pldat.pos.vz = 0x0u; - pldat.ship.drv = acm_drv_h1; - pldat.ship.id = acm_shipid_side; - pldat.tm = 0x9679C2B40u; /* 3250-01-01T12:00:00Z */ - zap_memcp(acm_dflplnm,acm_plnmlen + 0x1u,pldat.nm); - *_pldat = pldat; -} diff --git a/procyon/source/sav/sav.c b/procyon/source/sav/sav.c deleted file mode 100644 index d7301c7..0000000 --- a/procyon/source/sav/sav.c +++ /dev/null @@ -1,35 +0,0 @@ -#include <acm/sav.h> - -#include <flux.h> -#include <stdio.h> - -void acm_sav(acm_pldat const * const _pldat) { - acm_log("Saving\n"); - flux_err fluxerr; - flux_fil savfil; - fluxerr = flux_mkfil(&savfil,acm_dat.savloc,0644u); - if (fluxerr) { - if (fluxerr != flux_err_exist) { - fprintf(stderr,"Unable to create save file (\"%s\"): %s\n",acm_dat.savloc,flux_errstr(fluxerr)); - acm_exit(acm_stat_err); - } - acm_log("Save file already exists, overwritting\n"); - fluxerr = flux_op(&savfil,acm_dat.savloc,flux_md_wr,flux_disc); - if (fluxerr) { - fprintf(stderr,"Unable to open save file: %s\n",flux_errstr(fluxerr)); - acm_exit(acm_stat_err); - } - } - { - uint_least64_t const savver = acm_savver; - fluxerr = flux_wr(savfil,&savver,sizeof (savver)); - } - if (!fluxerr) { - fluxerr = flux_wr(savfil,_pldat,sizeof (*_pldat)); - } - if (fluxerr) { - fprintf(stderr,"Unable to write to save file: %s\n",flux_errstr(fluxerr)); - acm_exit(acm_stat_err); - } - flux_cl(savfil); -} |