From 6dc00a542d923dfc8fa4683da9ff2f50833f471d Mon Sep 17 00:00:00 2001 From: Sara Date: Sun, 14 Sep 2025 22:02:49 +0200 Subject: [PATCH] feat: added legacy code --- a.out | Bin 0 -> 25360 bytes attrib.c | 53 +++++++++++++++++++++++++++++++++++++++++++++ attrib.h | 11 ++++++++++ compile.sh | 2 ++ dice | Bin 0 -> 29264 bytes dice.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ dice.h | 9 ++++++++ flags.c | 28 ++++++++++++++++++++++++ flags.h | 12 ++++++++++ futil.c | 32 +++++++++++++++++++++++++++ futil.h | 22 +++++++++++++++++++ interactive.c | 19 ++++++++++++++++ interactive.h | 6 +++++ main.c | 19 ++++++++++++++++ pc.c | 8 +++++++ pc.h | 13 +++++++++++ test.csv | 1 + 17 files changed, 294 insertions(+) create mode 100755 a.out create mode 100644 attrib.c create mode 100644 attrib.h create mode 100755 compile.sh create mode 100755 dice create mode 100644 dice.c create mode 100644 dice.h create mode 100644 flags.c create mode 100644 flags.h create mode 100644 futil.c create mode 100644 futil.h create mode 100644 interactive.c create mode 100644 interactive.h create mode 100644 main.c create mode 100644 pc.c create mode 100644 pc.h create mode 100644 test.csv diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..d78206729ebeaa7d311323d1183f056c981bb111 GIT binary patch literal 25360 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 { + int roll = rolld(d); + total += roll; + if(i!=(void*)0) + *(i++) = roll; + } + return total; +} + +int process_dice_format(const char* format,int* num,int* die) { + int dummy; // dummy int for if either of the out adresses is 0 + if(num==(void*)0)num=&dummy; + if(die==(void*)0)die=&dummy; + char buf[10]; + memset(buf,0,10); // clear buffer + char* bufw=buf; + const char* next=format; + while(*next!='\0') { + if(*next=='d') { // argument is d in d format + if(next==format) // if there is no die count given, assume 1 + *num=1; + else + *num=atoi(buf); // store buffered string as number + memset(buf,0,10); // clear buffer + bufw=buf; // reset buffer walker + next++; // skip + } + *bufw=*next; // buffer next character + bufw++;next++; // increment walker and next character + } + *die=atoi(buf); + return 0; +} + +void roll_and_print(int n, int d) { + int* out_rolls=malloc(sizeof(int)*n); + int result=rollnd(n,d,out_rolls); + printf(" %d (%dd%d) ",result,n,d); + // only print inbetween steps if there are any + if(n>1) { + for(int i=0;i=g_argc)return 0; + const char* arg=g_argv[argind]; + char buf[10]; + memset(buf,0,10); + if(strcmp(arg,"-i")==0) { + f_interactive=1; + return process_arg(argind+1); + } else if(strcmp(arg, "-a")==0) { + load_attrib_file(g_argv[argind+1]); + return process_arg(argind+2); + } else if(isdigit(arg[0])||arg[0]=='d') { + process_dice_format(arg,&f_num,&f_die); + return process_arg(argind+1); + } + return 0; +} diff --git a/flags.h b/flags.h new file mode 100644 index 0000000..eec8ade --- /dev/null +++ b/flags.h @@ -0,0 +1,12 @@ +#ifndef _flags_h +#define _flags_h + +extern int f_interactive; +extern int f_num; +extern int f_die; +extern int g_argc; +extern const char** g_argv; + +extern int process_arg(int argind); + +#endif /* _flags_h */ diff --git a/futil.c b/futil.c new file mode 100644 index 0000000..eb69e16 --- /dev/null +++ b/futil.c @@ -0,0 +1,32 @@ +#include "stdlib.h" +#include "stdio.h" + +long file_len(FILE* file) { + fpos_t pos; + fgetpos(file,&pos); + fseek(file,0,SEEK_END); + long len=ftell(file); + fsetpos(file,&pos); + return len; +} + +long fcountc(FILE* file, char c) { + int i = 0; + long t = 0; + fpos_t strt; + fgetpos(file,&strt); + while((i=fgetc(file))!=EOF) { + if((char)i==c) + ++t; + } + fsetpos(file, &strt); + return t; +} + +int fpeek(FILE* file) { + fpos_t p; + fgetpos(file,&p); + int v = fgetc(file); + fsetpos(file,&p); + return v; +} diff --git a/futil.h b/futil.h new file mode 100644 index 0000000..5808993 --- /dev/null +++ b/futil.h @@ -0,0 +1,22 @@ +#ifndef _futils_h +#define _futils_h + +#include "stdio.h" + +/* + * return the length of a text file + */ +long file_len(FILE* file); + +/* + * count the number of occurences of c in file + * starting from the current stream position + */ +long fcountc(FILE* file, char c); + +/* + * peek the next value of file + */ +int fpeek(FILE* file); + +#endif /* _futils_h */ diff --git a/interactive.c b/interactive.c new file mode 100644 index 0000000..928cab4 --- /dev/null +++ b/interactive.c @@ -0,0 +1,19 @@ +#include "stdio.h" +#include "dice.h" +#include "string.h" +#include "flags.h" + +int run_interactive() { + int running = 1; + char buf[24]; + while(running) { + printf("> "); + memset(buf,0,10); + scanf("%s",buf); + if(strcmp(buf,"quit")==0||strcmp(buf,"exit")==0||strcmp(buf,"q")==0) return 0; + process_dice_format(buf,&f_num,&f_die); + if(f_num!=0&&f_die!=0||buf[0]=='\0') + roll_and_print(f_num, f_die); + } + return 0; +} diff --git a/interactive.h b/interactive.h new file mode 100644 index 0000000..2badb87 --- /dev/null +++ b/interactive.h @@ -0,0 +1,6 @@ +#ifndef _interactive_h +#define _interactive_h + +extern int run_interactive(); + +#endif /* _interactive_h */ diff --git a/main.c b/main.c new file mode 100644 index 0000000..67a5d61 --- /dev/null +++ b/main.c @@ -0,0 +1,19 @@ +#include "time.h" +#include "stdlib.h" +#include "dice.h" +#include "flags.h" +#include "interactive.h" + +int main(int argc,const char* argv[]) { + srand(time(NULL)); + g_argv=argv; + g_argc=argc; + process_arg(1); + // if there are valid dice to roll + if(f_die>0&&f_num>0) { + roll_and_print(f_num,f_die); + } + if(f_interactive==1||argc==1) { + return run_interactive(); + } +} diff --git a/pc.c b/pc.c new file mode 100644 index 0000000..d9ca797 --- /dev/null +++ b/pc.c @@ -0,0 +1,8 @@ +#include "pc.h" +#include "memory.h" + +int new_character(pc_t* pc, const char* name) { + memset(pc,0,sizeof(pc_t)); + strncpy(pc->name,name,64); + return 0; +} diff --git a/pc.h b/pc.h new file mode 100644 index 0000000..69a9698 --- /dev/null +++ b/pc.h @@ -0,0 +1,13 @@ +#ifndef _pc_h +#define _pc_h + +typedef struct pc_t { + char name[64]; + int dexterity,strength,constitution,intelligence,wisdom; + const char* spells[64]; + const char* traits[64]; +} pc_t; + +int new_character(pc_t* pc, const char* name); + +#endif /* _pc_h */ diff --git a/test.csv b/test.csv new file mode 100644 index 0000000..00ad55d --- /dev/null +++ b/test.csv @@ -0,0 +1 @@ +firebolt, fireball, mage hand, magic shield