From d80bdc6f51ef92847c89219a809d54adbc35c913 Mon Sep 17 00:00:00 2001 From: xavi Date: Fri, 2 Jan 2026 16:41:22 -0800 Subject: [PATCH] Grid made. x displayed --- c_projects/tiktaktoe/Makefile | 2 +- c_projects/tiktaktoe/include/tiktaktoe.h | 19 ++- c_projects/tiktaktoe/obj/main.d | 2 + c_projects/tiktaktoe/obj/main.o | Bin 0 -> 3840 bytes c_projects/tiktaktoe/obj/tiktaktoe.d | 2 + c_projects/tiktaktoe/obj/tiktaktoe.o | Bin 0 -> 14256 bytes c_projects/tiktaktoe/src/tiktaktoe.c | 73 ++++++-- c_projects/tiktaktoe/tags | 203 +++++++++++++++++++++++ c_projects/tiktaktoe/tiktaktoe | Bin 0 -> 25000 bytes 9 files changed, 286 insertions(+), 15 deletions(-) create mode 100644 c_projects/tiktaktoe/obj/main.d create mode 100644 c_projects/tiktaktoe/obj/main.o create mode 100644 c_projects/tiktaktoe/obj/tiktaktoe.d create mode 100644 c_projects/tiktaktoe/obj/tiktaktoe.o create mode 100644 c_projects/tiktaktoe/tags create mode 100755 c_projects/tiktaktoe/tiktaktoe diff --git a/c_projects/tiktaktoe/Makefile b/c_projects/tiktaktoe/Makefile index 90f1387..678e82b 100644 --- a/c_projects/tiktaktoe/Makefile +++ b/c_projects/tiktaktoe/Makefile @@ -27,7 +27,7 @@ STATIC_LIBS = $(shell find ./ -name "*.a") CC := gcc INCLUDE_LIST := $(foreach m,$(SUBMODULES),$(m)/$(INCLUDE_DIR)) $(INCLUDE_DIR) $(TESTS_INCL_DIR) INCLUDES := $(addprefix -I,$(INCLUDE_LIST)) -CFLAGS := -ggdb -Wall -Wextra -MMD -MP -lncurses -fsanitize=address +CFLAGS := -std=c99 -ggdb -Wall -Wextra -MMD -MP -lncurses -fsanitize=address DFLAGS := -D_DEBUG # Main Executable Filename diff --git a/c_projects/tiktaktoe/include/tiktaktoe.h b/c_projects/tiktaktoe/include/tiktaktoe.h index cac9901..4bd394d 100644 --- a/c_projects/tiktaktoe/include/tiktaktoe.h +++ b/c_projects/tiktaktoe/include/tiktaktoe.h @@ -5,10 +5,25 @@ #include #define GRIDSIZE 3 +#define HEADERSIZE 5 +#define FOOTERSIZE 5 -extern const char part; +extern const char game_end; -void draw_initial_board(WINDOW*); +typedef struct w_data_t{ + WINDOW *w_ptr; + int height; + int width; +}w_data_t; + + +// gamelogic int start_tiktaktoe(void); +void get_input(w_data_t *board); + +// render +void init_windows(w_data_t *board, w_data_t *header, w_data_t *footer); +void create_grid(w_data_t *currwin); +void draw_board(w_data_t *board, w_data_t *header, w_data_t *footer); #endif diff --git a/c_projects/tiktaktoe/obj/main.d b/c_projects/tiktaktoe/obj/main.d new file mode 100644 index 0000000..0a34ac8 --- /dev/null +++ b/c_projects/tiktaktoe/obj/main.d @@ -0,0 +1,2 @@ +obj/main.o: src/main.c include/tiktaktoe.h +include/tiktaktoe.h: diff --git a/c_projects/tiktaktoe/obj/main.o b/c_projects/tiktaktoe/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..6f31d6b451620d542880001d86ba5f8c3fe485ba GIT binary patch literal 3840 zcmbtXdu&r>6#s6!u|db)jBbd?1aVv@93Ph0GhXQdYu9C|%JBmPTim;PIW_anplEo%xVe-e{- zW_|7%&9T|53pEY-<=ZkZtd*qpLZ6=9Sr!v71Rg-hmFwLTW85}6oze#}+9N2bAw%KfU zCM6E5-Wh5g!&t&CwkYDa4T*mXP(*}H7g=JYL^+>GX|-lktyn%s_TZA_bl;*`F9y!O5PN*Wi zn$6|{UY^B(VSpzV9*AQaCWVlrd6fj54n7oV#j{KbBum)|aq(>s`~YzHpd{m~Br$od zrgY@6c@O{)ebbQ#iRM>4L*Lj(3>&yR)B_ti(&eBRYrzk z!zZZFps8hWu%d{TB@JQWys=bOpVSY|2ifYRhwsA|-G^sx+2t`hnAO*8x6ZYiOs3*u zt0~MfpI`R+t$tU%U#|BzI+@if`(%&R<#GARZgF~ju11g5?ee*0zoX9TsB=2%tu0tC zEVwUFa8HbY=k{GiMj;7;ybd1XvycQq9%qkuc!j|4;CKz!;{4E@;COK@Nod`~_;Ead)`iA7QQ$Xl zte$^d$4#7vt353Aovj=f3;b@5;Ytk)#qa01oNKX91LrlM@gcErgLoPzGy0ah{jwdj z->c|4vb@d)+30r${LEM_`(kVIYEQj8#iE0NiI5H3_z!UkbFIc<*2? z?im!lq8RQo$md>!}@qHQa;sR44gQpK(QWtfmA9g@)lzo zz!R>qUG1|OU@n1R17hHFXanyU-NwY zdqpi&m-In!lC6##;Q49}Z80_k98Q%Oev1>deh?BC>Ys2Q82C*wKaU?sasP?=mmoLV z`dy2%f6^e9@@f5|)rK(E%Ig>L0ps5(_%EcGkDPdS0L417DG)qgY7yrz1)S0H^}Nu} K>SVCR{C@%O;gWg) literal 0 HcmV?d00001 diff --git a/c_projects/tiktaktoe/obj/tiktaktoe.d b/c_projects/tiktaktoe/obj/tiktaktoe.d new file mode 100644 index 0000000..cb06b98 --- /dev/null +++ b/c_projects/tiktaktoe/obj/tiktaktoe.d @@ -0,0 +1,2 @@ +obj/tiktaktoe.o: src/tiktaktoe.c include/tiktaktoe.h +include/tiktaktoe.h: diff --git a/c_projects/tiktaktoe/obj/tiktaktoe.o b/c_projects/tiktaktoe/obj/tiktaktoe.o new file mode 100644 index 0000000000000000000000000000000000000000..2e7df795530a8020b7f26d3ef744beb0f8dbd817 GIT binary patch literal 14256 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 literal 0 HcmV?d00001 diff --git a/c_projects/tiktaktoe/src/tiktaktoe.c b/c_projects/tiktaktoe/src/tiktaktoe.c index 2341ba7..a91d138 100644 --- a/c_projects/tiktaktoe/src/tiktaktoe.c +++ b/c_projects/tiktaktoe/src/tiktaktoe.c @@ -1,30 +1,79 @@ #include "tiktaktoe.h" -const char part = '-'; +const char game_end = 0; int start_tiktaktoe(void){ - WINDOW *board = NULL; + w_data_t header; + w_data_t board; + w_data_t footer; initscr(); - draw_initial_board(board); + init_windows(&board, &header, &footer); - getch(); + while (!game_end){ + get_input(&board); + draw_board(&board, &header, &footer); + } + + wgetch(board.w_ptr); endwin(); return 0; } -void draw_initial_board(WINDOW *board){ +void get_input(w_data_t *w){ + char s = wgetch(w->w_ptr); + if (s == 'w'){ + mvwprintw(w->w_ptr, w->height / 2, w->width / 2, "x"); + } +} + +void init_windows(w_data_t *board, w_data_t *header, w_data_t *footer){ + const int board_size = LINES - HEADERSIZE - FOOTERSIZE; + + header->w_ptr = newwin(HEADERSIZE,0,0,0); + board->w_ptr = newwin(board_size,0,HEADERSIZE,0); + footer->w_ptr = newwin(FOOTERSIZE,0,HEADERSIZE + board_size,0); + + getmaxyx(header->w_ptr, header->height, header->width); + getmaxyx(board->w_ptr, board->height, board->width); + getmaxyx(footer->w_ptr, footer->height, footer->width); + + box(header->w_ptr, 0, 0); + box(footer->w_ptr, 0, 0); + box(board->w_ptr, 0, 0); + + create_grid(board); + + wrefresh(header->w_ptr); + wrefresh(board->w_ptr); + wrefresh(footer->w_ptr); +} + +void create_grid(w_data_t *currwin){ + int buffer = 10; int hline_pos = 0; int vline_pos = 0; - board = newwin(0,0,0,0); for (int i = 0; i < GRIDSIZE - 1; i++){ - hline_pos += LINES/GRIDSIZE; - mvwhline(board, hline_pos,0,0,COLS); - vline_pos += COLS/GRIDSIZE; - mvwvline(board, 0,vline_pos,0,LINES); + hline_pos += currwin->height/GRIDSIZE; + mvwhline(currwin->w_ptr, hline_pos, buffer,0,currwin->width - 2 * buffer); + } + for (int i = 0; i < GRIDSIZE - 1; i++){ + vline_pos += currwin->width/GRIDSIZE; + mvwvline(currwin->w_ptr, buffer / 2,vline_pos,0,currwin->height - buffer); } - wrefresh(board); - wgetch(board); +} + +void draw_board(w_data_t *board, w_data_t *header, w_data_t *footer){ + create_grid(board); + + getmaxyx(header->w_ptr, header->height, header->width); + getmaxyx(board->w_ptr, board->height, board->width); + getmaxyx(footer->w_ptr, footer->height, footer->width); + + wrefresh(header->w_ptr); + wrefresh(board->w_ptr); + wrefresh(footer->w_ptr); + } diff --git a/c_projects/tiktaktoe/tags b/c_projects/tiktaktoe/tags new file mode 100644 index 0000000..d3c0cb9 --- /dev/null +++ b/c_projects/tiktaktoe/tags @@ -0,0 +1,203 @@ +!_TAG_EXTRA_DESCRIPTION anonymous /Include tags for non-named objects like lambda/ +!_TAG_EXTRA_DESCRIPTION fileScope /Include tags of file scope/ +!_TAG_EXTRA_DESCRIPTION inputFile /Include an entry for the base file name of every input file/ +!_TAG_EXTRA_DESCRIPTION pseudo /Include pseudo tags/ +!_TAG_EXTRA_DESCRIPTION subparser /Include tags generated by subparsers/ +!_TAG_FIELD_DESCRIPTION epoch /the last modified time of the input file (only for F\/file kind tag)/ +!_TAG_FIELD_DESCRIPTION file /File-restricted scoping/ +!_TAG_FIELD_DESCRIPTION input /input file/ +!_TAG_FIELD_DESCRIPTION name /tag name/ +!_TAG_FIELD_DESCRIPTION pattern /pattern/ +!_TAG_FIELD_DESCRIPTION typeref /Type and name of a variable or typedef/ +!_TAG_FIELD_DESCRIPTION!C++ name /aliased names/ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_KIND_DESCRIPTION!C L,label /goto labels/ +!_TAG_KIND_DESCRIPTION!C d,macro /macro definitions/ +!_TAG_KIND_DESCRIPTION!C e,enumerator /enumerators (values inside an enumeration)/ +!_TAG_KIND_DESCRIPTION!C f,function /function definitions/ +!_TAG_KIND_DESCRIPTION!C g,enum /enumeration names/ +!_TAG_KIND_DESCRIPTION!C h,header /included header files/ +!_TAG_KIND_DESCRIPTION!C l,local /local variables/ +!_TAG_KIND_DESCRIPTION!C m,member /struct, and union members/ +!_TAG_KIND_DESCRIPTION!C p,prototype /function prototypes/ +!_TAG_KIND_DESCRIPTION!C s,struct /structure names/ +!_TAG_KIND_DESCRIPTION!C t,typedef /typedefs/ +!_TAG_KIND_DESCRIPTION!C u,union /union names/ +!_TAG_KIND_DESCRIPTION!C v,variable /variable definitions/ +!_TAG_KIND_DESCRIPTION!C++ L,label /goto labels/ +!_TAG_KIND_DESCRIPTION!C++ M,module /modules/ +!_TAG_KIND_DESCRIPTION!C++ P,partition /partitions/ +!_TAG_KIND_DESCRIPTION!C++ c,class /classes/ +!_TAG_KIND_DESCRIPTION!C++ d,macro /macro definitions/ +!_TAG_KIND_DESCRIPTION!C++ e,enumerator /enumerators (values inside an enumeration)/ +!_TAG_KIND_DESCRIPTION!C++ f,function /function definitions/ +!_TAG_KIND_DESCRIPTION!C++ g,enum /enumeration names/ +!_TAG_KIND_DESCRIPTION!C++ h,header /included header files/ +!_TAG_KIND_DESCRIPTION!C++ l,local /local variables/ +!_TAG_KIND_DESCRIPTION!C++ m,member /class, struct, and union members/ +!_TAG_KIND_DESCRIPTION!C++ n,namespace /namespaces/ +!_TAG_KIND_DESCRIPTION!C++ p,prototype /function prototypes/ +!_TAG_KIND_DESCRIPTION!C++ s,struct /structure names/ +!_TAG_KIND_DESCRIPTION!C++ t,typedef /typedefs/ +!_TAG_KIND_DESCRIPTION!C++ u,union /union names/ +!_TAG_KIND_DESCRIPTION!C++ v,variable /variable definitions/ +!_TAG_KIND_DESCRIPTION!D M,module /modules/ +!_TAG_KIND_DESCRIPTION!D T,template /templates/ +!_TAG_KIND_DESCRIPTION!D V,version /version statements/ +!_TAG_KIND_DESCRIPTION!D X,mixin /mixins/ +!_TAG_KIND_DESCRIPTION!D a,alias /aliases/ +!_TAG_KIND_DESCRIPTION!D c,class /classes/ +!_TAG_KIND_DESCRIPTION!D e,enumerator /enumerators (values inside an enumeration)/ +!_TAG_KIND_DESCRIPTION!D f,function /function definitions/ +!_TAG_KIND_DESCRIPTION!D g,enum /enumeration names/ +!_TAG_KIND_DESCRIPTION!D i,interface /interfaces/ +!_TAG_KIND_DESCRIPTION!D m,member /class, struct, and union members/ +!_TAG_KIND_DESCRIPTION!D n,namespace /namespaces/ +!_TAG_KIND_DESCRIPTION!D s,struct /structure names/ +!_TAG_KIND_DESCRIPTION!D u,union /union names/ +!_TAG_KIND_DESCRIPTION!D v,variable /variable definitions/ +!_TAG_KIND_DESCRIPTION!Make I,makefile /makefiles/ +!_TAG_KIND_DESCRIPTION!Make m,macro /macros/ +!_TAG_KIND_DESCRIPTION!Make t,target /targets/ +!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ +!_TAG_OUTPUT_FILESEP slash /slash or backslash/ +!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ +!_TAG_OUTPUT_VERSION 1.1 /current.age/ +!_TAG_PARSER_VERSION!C 1.1 /current.age/ +!_TAG_PARSER_VERSION!C++ 2.2 /current.age/ +!_TAG_PARSER_VERSION!D 0.0 /current.age/ +!_TAG_PARSER_VERSION!Make 1.1 /current.age/ +!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ +!_TAG_PROC_CWD /home/xtro/current_projects/code/c/tiktaktoe/c_projects/tiktaktoe/ // +!_TAG_PROGRAM_AUTHOR Universal Ctags Team // +!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ +!_TAG_PROGRAM_URL https://ctags.io/ /official site/ +!_TAG_PROGRAM_VERSION 6.2.1 /v6.2.1/ +!_TAG_ROLE_DESCRIPTION!C!function foreigndecl /declared in foreign languages/ +!_TAG_ROLE_DESCRIPTION!C!header local /local header/ +!_TAG_ROLE_DESCRIPTION!C!header system /system header/ +!_TAG_ROLE_DESCRIPTION!C!macro undef /undefined/ +!_TAG_ROLE_DESCRIPTION!C!struct foreigndecl /declared in foreign languages/ +!_TAG_ROLE_DESCRIPTION!C++!header exported /exported with "exported imported ..."/ +!_TAG_ROLE_DESCRIPTION!C++!header imported /imported with "imported ..."/ +!_TAG_ROLE_DESCRIPTION!C++!header local /local header/ +!_TAG_ROLE_DESCRIPTION!C++!header system /system header/ +!_TAG_ROLE_DESCRIPTION!C++!macro undef /undefined/ +!_TAG_ROLE_DESCRIPTION!C++!module imported /imported with "imported ..."/ +!_TAG_ROLE_DESCRIPTION!C++!module partOwner /used for specifying a partition/ +!_TAG_ROLE_DESCRIPTION!C++!partition imported /imported with "imported ..."/ +!_TAG_ROLE_DESCRIPTION!Make!makefile included /included/ +!_TAG_ROLE_DESCRIPTION!Make!makefile optional /optionally included/ +$(INCLUDE_DIR) Makefile /^$(SRC_DIR) $(OBJ_DIR) $(TESTS_DIR) $(INCLUDE_DIR) $(SUBMODULES_DIR):$/;" t +$(OBJ_DIR) Makefile /^$(SRC_DIR) $(OBJ_DIR) $(TESTS_DIR) $(INCLUDE_DIR) $(SUBMODULES_DIR):$/;" t +$(OBJ_DIR)/%.o Makefile /^$(OBJ_DIR)\/%.o: $(SRC_DIR)\/%.c$/;" t +$(OBJ_DIR)/%.o Makefile /^$(OBJ_DIR)\/%.o: $(TESTS_DIR)\/%.c $(OBJ)$/;" t +$(PROJECT_NAME) Makefile /^$(PROJECT_NAME): $(MAIN:%.c=$(OBJ_DIR)\/%.o) $(OBJ) check_submods$/;" t +$(PROJECT_NAME).a Makefile /^$(PROJECT_NAME).a: $(PROJECT_OBJ) check_submods$/;" t +$(SRC_DIR) Makefile /^$(SRC_DIR) $(OBJ_DIR) $(TESTS_DIR) $(INCLUDE_DIR) $(SUBMODULES_DIR):$/;" t +$(SRC_DIR)/$(MAIN) Makefile /^$(SRC_DIR)\/$(MAIN):$/;" t +$(SUBMODULES_DIR) Makefile /^$(SRC_DIR) $(OBJ_DIR) $(TESTS_DIR) $(INCLUDE_DIR) $(SUBMODULES_DIR):$/;" t +$(SUBMODULE_SLIB) Makefile /^$(SUBMODULE_SLIB): $/;" t +$(TESTS:$(TESTS_DIR)/%.c=%) Makefile /^$(TESTS:$(TESTS_DIR)\/%.c=%): %: $(OBJ_DIR)\/%.o $(OBJ) check_submods$/;" t +$(TESTS_DIR) Makefile /^$(SRC_DIR) $(OBJ_DIR) $(TESTS_DIR) $(INCLUDE_DIR) $(SUBMODULES_DIR):$/;" t +% Makefile /^$(TESTS:$(TESTS_DIR)\/%.c=%): %: $(OBJ_DIR)\/%.o $(OBJ) check_submods$/;" t +CC Makefile /^CC := gcc$/;" m +CFLAGS Makefile /^CFLAGS := -std=c99 -ggdb -Wall -Wextra -MMD -MP -lncurses -fsanitize=address$/;" m +DEPENDENCIES Makefile /^DEPENDENCIES := $(OBJ:%.o=%.d)$/;" m +DFLAGS Makefile /^DFLAGS := -D_DEBUG$/;" m +END tests/include/test.h /^typedef enum {START, END} header_opt;$/;" e enum:__anon431ebd300103 +FAIL tests/include/test.h /^typedef enum {PASS, FAIL}rc_opt;$/;" e enum:__anon431ebd300203 +FOOTERSIZE include/tiktaktoe.h /^#define FOOTERSIZE /;" d +GRIDSIZE include/tiktaktoe.h /^#define GRIDSIZE /;" d +HEADERSIZE include/tiktaktoe.h /^#define HEADERSIZE /;" d +INCLUDES Makefile /^INCLUDES := $(addprefix -I,$(INCLUDE_LIST))$/;" m +INCLUDE_DIR Makefile /^INCLUDE_DIR := include$/;" m +INCLUDE_LIST Makefile /^INCLUDE_LIST := $(foreach m,$(SUBMODULES),$(m)\/$(INCLUDE_DIR)) $(INCLUDE_DIR) $(TESTS_INCL_DIR)$/;" m +MAIN Makefile /^MAIN := main.c$/;" m +Makefile Makefile 1;" F epoch:1767240744 +OBJ Makefile /^OBJ := $(SRC:$(SRC_DIR)\/%.c=$(OBJ_DIR)\/%.o)$/;" m +OBJ_DIR Makefile /^OBJ_DIR := obj$/;" m +PASS tests/include/test.h /^typedef enum {PASS, FAIL}rc_opt;$/;" e enum:__anon431ebd300203 +PROJECT_NAME Makefile /^PROJECT_NAME := tiktaktoe$/;" m +PROJECT_OBJ Makefile /^PROJECT_OBJ := $(OBJ_DIR)\/$(PROJECT_NAME).o$/;" m +SRC Makefile /^SRC := $(filter-out $(SRC_DIR)\/$(MAIN), $(wildcard $(SRC_DIR)\/*.c))$/;" m +SRC_DIR Makefile /^SRC_DIR := src$/;" m +START tests/include/test.h /^typedef enum {START, END} header_opt;$/;" e enum:__anon431ebd300103 +STATIC_LIBS Makefile /^STATIC_LIBS = $(shell find .\/ -name "*.a")$/;" m +SUBBARE Makefile /^SUBBARE := $(SUBMODULES:$(SUBMODULES_DIR)\/%=%)$/;" m +SUBMODULES Makefile /^SUBMODULES := $(wildcard $(SUBMODULES_DIR)\/*)$/;" m +SUBMODULES_DIR Makefile /^SUBMODULES_DIR := submodules$/;" m +SUBMODULE_SLIB Makefile /^SUBMODULE_SLIB := $(foreach m,$(SUBBARE),$(SUBMODULES_DIR)\/$(m)\/$(m).a)$/;" m +TEST tests/include/test.h /^#define TEST(/;" d +TEST tests/test.c /^TEST(fail){$/;" f +TEST tests/test.c /^TEST(segfault){$/;" f +TEST tests/test.c /^TEST(success){$/;" f +TESTS Makefile /^TESTS := $(wildcard $(TESTS_DIR)\/*.c)$/;" m +TESTS_DIR Makefile /^TESTS_DIR := tests$/;" m +TESTS_INCL_DIR Makefile /^TESTS_INCL_DIR := $(TESTS_DIR)\/include$/;" m +TIKTAKTOE_H include/tiktaktoe.h /^#define TIKTAKTOE_H$/;" d +X_GREEN tests/include/test.h /^#define X_GREEN /;" d +X_RED tests/include/test.h /^#define X_RED /;" d +X_RST tests/include/test.h /^#define X_RST /;" d +X_YELLOW tests/include/test.h /^#define X_YELLOW /;" d +__anon431ebd300103 tests/include/test.h /^typedef enum {START, END} header_opt;$/;" g +__anon431ebd300203 tests/include/test.h /^typedef enum {PASS, FAIL}rc_opt;$/;" g +all Makefile /^all: $(PROJECT_NAME)$/;" t +bmaxx include/tiktaktoe.h /^ int bmaxx;$/;" m struct:w_data_t typeref:typename:int +bmaxx src/tiktaktoe.c /^ int bmaxx = 0;$/;" l function:draw_board typeref:typename:int file: +bmaxy include/tiktaktoe.h /^ int bmaxy;$/;" m struct:w_data_t typeref:typename:int +bmaxy src/tiktaktoe.c /^ int bmaxy = 0;$/;" l function:draw_board typeref:typename:int file: +board src/tiktaktoe.c /^ w_data_t* board = NULL;$/;" l function:start_tiktaktoe typeref:typename:w_data_t * file: +board_size src/tiktaktoe.c /^ const int board_size = LINES - HEADERSIZE - FOOTERSIZE;$/;" l function:init_windows typeref:typename:const int file: +buffer src/tiktaktoe.c /^ int buffer = 10;$/;" l function:draw_board typeref:typename:int file: +check_submods Makefile /^check_submods: $(SUBMODULE_SLIB)$/;" t +clean Makefile /^clean:$/;" t +cpid tests/include/test.h /^ pid_t cpid = fork();$/;" l function:run_child typeref:typename:pid_t file: +dirs Makefile /^dirs: $(SRC_DIR) $(OBJ_DIR) $(TESTS_DIR) $(INCLUDE_DIR) $(SUBMODULES_DIR) $(SRC_DIR)\/$(MAIN)$/;" t +draw_board include/tiktaktoe.h /^void draw_board(w_data_t *board, w_data_t *header, w_data_t *footer);$/;" p typeref:typename:void +draw_board src/tiktaktoe.c /^void draw_board(w_data_t *board, w_data_t *header, w_data_t *footer){$/;" f typeref:typename:void +errors tests/include/test.h /^ int errors = 0;$/;" l function:run_tests typeref:typename:int file: +footer src/tiktaktoe.c /^ w_data_t* footer = NULL;$/;" l function:start_tiktaktoe typeref:typename:w_data_t * file: +head tests/include/test.h /^static testnode* head = NULL;$/;" v typeref:typename:testnode * +header src/tiktaktoe.c /^ w_data_t* header = NULL;$/;" l function:start_tiktaktoe typeref:typename:w_data_t * file: +header_opt tests/include/test.h /^typedef enum {START, END} header_opt;$/;" t typeref:enum:__anon431ebd300103 +help Makefile /^help:$/;" t +hline_pos src/tiktaktoe.c /^ int hline_pos = 0;$/;" l function:draw_board typeref:typename:int file: +i tests/test.c /^ int i = 1;$/;" l function:TEST typeref:typename:int file: +init_windows src/tiktaktoe.c /^void init_windows(w_data_t *board, w_data_t *header, w_data_t *footer){$/;" f typeref:typename:void +main src/main.c /^int main(){$/;" f typeref:typename:int +main tests/test.c /^int main(void){$/;" f typeref:typename:int +main.c src/main.c 1;" F epoch:1766803538 +main.d obj/main.d 1;" F epoch:1766865434 +name tests/include/test.h /^ char* name;$/;" m struct:testnode typeref:typename:char * +next tests/include/test.h /^ struct testnode* next;$/;" m struct:testnode typeref:struct:testnode * +op tests/include/test.h /^ int (*op)(void);$/;" m struct:testnode typeref:typename:int (*)(void) +part src/tiktaktoe.c /^const char part = '-';$/;" v typeref:typename:const char +ppass_fail tests/include/test.h /^static void ppass_fail(rc_opt rc){$/;" f typeref:typename:void +presult tests/include/test.h /^static int presult(int status){$/;" f typeref:typename:int +ptest_headers tests/include/test.h /^static void ptest_headers(header_opt option){$/;" f typeref:typename:void +ptr tests/include/test.h /^static testnode* ptr = NULL;$/;" v typeref:typename:testnode * +rc tests/include/test.h /^ int rc = WEXITSTATUS(status);$/;" l function:presult typeref:typename:int file: +rc tests/include/test.h /^ int rc = ptr->op();$/;" l function:run_child typeref:typename:int file: +rc_opt tests/include/test.h /^typedef enum {PASS, FAIL}rc_opt;$/;" t typeref:enum:__anon431ebd300203 +run_child tests/include/test.h /^static int run_child(){$/;" f typeref:typename:int +run_tests tests/include/test.h /^static int run_tests(){$/;" f typeref:typename:int +start_tiktaktoe include/tiktaktoe.h /^int start_tiktaktoe(void);$/;" p typeref:typename:int +start_tiktaktoe src/tiktaktoe.c /^int start_tiktaktoe(void){$/;" f typeref:typename:int +status tests/include/test.h /^ int status;$/;" l function:run_child typeref:typename:int file: +tail tests/include/test.h /^static testnode* tail = NULL;$/;" v typeref:typename:testnode * +test.c tests/test.c 1;" F epoch:1766557221 +test.h tests/include/test.h 1;" F epoch:1766556714 +testnode tests/include/test.h /^typedef struct testnode{$/;" s +testnode tests/include/test.h /^}testnode;$/;" t typeref:struct:testnode +tiktaktoe.c src/tiktaktoe.c 1;" F epoch:1767390945 +tiktaktoe.d obj/tiktaktoe.d 1;" F epoch:1767390946 +tiktaktoe.h include/tiktaktoe.h 1;" F epoch:1767390908 +total_tests tests/include/test.h /^ int total_tests = 0;$/;" l function:run_tests typeref:typename:int file: +vline_pos src/tiktaktoe.c /^ int vline_pos = 0;$/;" l function:draw_board typeref:typename:int file: +w_data_t include/tiktaktoe.h /^typedef struct w_data_t{$/;" s +w_data_t include/tiktaktoe.h /^}w_data_t;$/;" t typeref:struct:w_data_t +w_ptr include/tiktaktoe.h /^ WINDOW *w_ptr;$/;" m struct:w_data_t typeref:typename:WINDOW * +x tests/test.c /^ int* x = NULL;$/;" l function:TEST typeref:typename:int * file: +y tests/test.c /^ int y = *x;$/;" l function:TEST typeref:typename:int file: diff --git a/c_projects/tiktaktoe/tiktaktoe b/c_projects/tiktaktoe/tiktaktoe new file mode 100755 index 0000000000000000000000000000000000000000..b06a1b86e8d75e25d3fddebcfe79a044b7c9dec9 GIT binary patch literal 25000 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