Skip to content

Commit e9f8d56

Browse files
committed
fix, feat, refactor: a lot of work all in one
- rewrite the program - modularize source files - add a new feature: `noise.c` applies a noise to a string
1 parent 6e7a738 commit e9f8d56

19 files changed

Lines changed: 367 additions & 44 deletions

yandere/c/.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
yandere
22
yandere.exe
3-
yandere.o
3+
*.o

yandere/c/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
CC = gcc
2-
CCFLAGS = -O -Wall -W -pedantic
2+
CCFLAGS = -O -Wall -W -pedantic -g
33

44
TARGET = yandere
55

yandere/c/colorcodes.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#ifndef COLORCODES_H
2+
#define COLORCODES_H
3+
4+
#define Creset "\033[0m" // color reset
5+
#define Cemerald "\033[38;5;49;1m" // emerald
6+
7+
#endif

yandere/c/evthandlers.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#include "evthandlers.h"
2+
3+
extern void evthandle_default(void) {
4+
noise(msgs[Event_default]);
5+
printf("%s ", buf);
6+
}
7+
8+
extern void evthandle_sigint(void) {
9+
printf("\n\n%s\n\n", msgs[Event_sigint]);
10+
exit(EXIT_FAILURE); /* intended */
11+
}
12+
13+
extern void evthandle_sigquit(void) {
14+
noise(msgs[Event_sigquit]);
15+
printf("%s ", buf);
16+
}
17+
18+
extern void evthandle_sigterm(void) {
19+
noise(msgs[Event_sigterm]);
20+
printf("%s ", buf);
21+
}

yandere/c/evthandlers.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#ifndef EVTHANDLERS_H
2+
#define EVTHANDLERS_H
3+
4+
/************
5+
* INCLUDES *
6+
************/
7+
#include <stdio.h>
8+
#include <stdlib.h>
9+
#
10+
#include "noise.h"
11+
#include "global.h"
12+
13+
/**************
14+
* PROTOTYPES *
15+
**************/
16+
void evthandle_default(void);
17+
void evthandle_sigint(void);
18+
void evthandle_sigquit(void);
19+
void evthandle_sigterm(void);
20+
21+
#endif

yandere/c/fatal.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include "fatal.h"
2+
3+
extern void fatal(const char *errmsg, const char *funcname) {
4+
safe_vfprintf(
5+
stderr,
6+
PROGNAME ": fatal: %s in " Cemerald "%s" Creset "\n",
7+
errmsg, funcname
8+
);
9+
exit(EXIT_FAILURE);
10+
}
11+
12+
extern void vfatal(const char *errmsg, const char *funcname, ...) {
13+
va_list ap;
14+
int ret;
15+
16+
va_start(ap, funcname);
17+
safe_fputs(stderr, PROGNAME ": fatal: ");
18+
safe_vfprintf(stderr, errmsg, ap);
19+
va_end(ap);
20+
ret = fprintf(stderr, " in " Cemerald "%s" Creset "\n", funcname);
21+
if (ret < 0) ERR("fprintf error");
22+
exit(EXIT_FAILURE);
23+
}

yandere/c/fatal.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#ifndef FATAL_H
2+
#define FATAL_H
3+
4+
/************
5+
* INCLUDES *
6+
************/
7+
#include <stdio.h>
8+
#include <stdlib.h>
9+
#include <stdarg.h>
10+
#
11+
#include "global.h"
12+
#include "wrappers.h"
13+
#include "colorcodes.h"
14+
15+
/**********
16+
* MACROS *
17+
**********/
18+
#define ERR(errmsg) fatal(errmsg, __func__)
19+
#define VERR(errmsg, ...) vfatal(errmsg, __func__, __VA_ARGS__)
20+
21+
/**************
22+
* PROTOTYPES *
23+
**************/
24+
void fatal(const char *errmsg, const char *funcname);
25+
void vfatal(const char *errmsg, const char *funcname, ...);
26+
27+
#endif

yandere/c/global.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#include "global.h"
2+
3+
const char *msgs[] = {
4+
[Event_default] = "이제 내가 싫어진 것이다?",
5+
[Event_sigint ] = "도망갈 수 있을 거라 생각하지 마는 것이다",
6+
[Event_sigquit] = "발버둥치지 않는 것이다",
7+
[Event_sigterm] = "설마 도망가려는 것이다?"
8+
};
9+
10+
volatile sig_atomic_t event;
11+
12+
char buf[BUFMAX];

yandere/c/global.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#ifndef GLOBAL_H
2+
#define GLOBAL_H
3+
4+
/************
5+
* INCLUDES *
6+
************/
7+
#include <signal.h>
8+
9+
/**********
10+
* MACROS *
11+
**********/
12+
#define PROGNAME "yandere"
13+
#define BUFMAX 128
14+
15+
/************
16+
* TYPEDEFS *
17+
************/
18+
typedef void sighandler_t(int sig);
19+
20+
typedef enum {
21+
Event_default,
22+
Event_sigint,
23+
Event_sigquit,
24+
Event_sigterm
25+
} event_t;
26+
27+
/********************
28+
* EXTERN VARIABLES *
29+
********************/
30+
extern const char *msgs[];
31+
extern volatile sig_atomic_t event;
32+
extern char buf[];
33+
34+
#endif

yandere/c/noise.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include "noise.h"
2+
3+
extern void noise(const char *msg) {
4+
int i, k;
5+
int rv, chlen;
6+
7+
for (i = k = 0; msg[i] != '\0' && k < BUFMAX - 1; /* empty */) {
8+
rv = rand_range(0, 6);
9+
chlen = mblen_(msg[i]);
10+
11+
if (rv == 0) { /* 1/6 chance */
12+
buf[k++] = *("#?@" + rand_range(0, 3));
13+
i += chlen;
14+
}
15+
else for (int m = 0; m < chlen; m++)
16+
buf[k++] = msg[i++];
17+
}
18+
buf[k] = '\0';
19+
}

0 commit comments

Comments
 (0)