here we go
This commit is contained in:
commit
e12fe8d1f7
|
@ -0,0 +1,275 @@
|
|||
#include "structure.c"
|
||||
|
||||
void remove_lanes(int n) {
|
||||
for(int i = 0; i < n; i++) {
|
||||
printf("\x1b[1F");
|
||||
printf("\x1b[2K");
|
||||
}
|
||||
}
|
||||
|
||||
void updateRenderer(SDL_Renderer* renderer) {
|
||||
SDL_RenderPresent(renderer);
|
||||
}
|
||||
|
||||
void resetRenderer(SDL_Renderer* renderer) {
|
||||
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
|
||||
SDL_RenderClear(renderer);
|
||||
}
|
||||
|
||||
void refreshRenderer(SDL_Renderer* renderer) {
|
||||
resetRenderer(renderer);
|
||||
updateRenderer(renderer);
|
||||
}
|
||||
|
||||
void drawRectToRenderer(SDL_Renderer* renderer, SDL_Rect* rect, int R, int G, int B, int A) {
|
||||
SDL_SetRenderDrawColor(renderer, R, G, B, A);
|
||||
SDL_RenderFillRect(renderer, rect);
|
||||
}
|
||||
|
||||
void placeRectToRenderer(SDL_Renderer* renderer, int X, int Y, int W, int H, int R, int G, int B, int A) {
|
||||
SDL_Rect rect;
|
||||
rect.x = X;
|
||||
rect.y = Y;
|
||||
rect.w = W;
|
||||
rect.h = H;
|
||||
SDL_SetRenderDrawColor(renderer, R, G, B, A);
|
||||
SDL_RenderFillRect(renderer, &rect);
|
||||
}
|
||||
|
||||
int ln_baseN(int n, int b) {
|
||||
int r = 0;
|
||||
while(n != 0) {
|
||||
n = n / b;
|
||||
r++;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
int pw(int x, int n) {
|
||||
if(n == 1) {
|
||||
return x;
|
||||
}
|
||||
return x*pw(x, n-1);
|
||||
}
|
||||
|
||||
void drawCharToRenderer(SDL_Renderer* renderer, char c, int X, int Y, int W, int H) {
|
||||
SDL_Rect rect;
|
||||
rect.x = X;
|
||||
rect.y = Y;
|
||||
rect.w = W;
|
||||
rect.h = H;
|
||||
SDL_Surface* img;
|
||||
switch(c) {
|
||||
case 'a':
|
||||
img = SDL_LoadBMP("./letters/letter-a.bmp");
|
||||
break;
|
||||
case 'b':
|
||||
img = SDL_LoadBMP("./letters/letter-b.bmp");
|
||||
break;
|
||||
case 'c':
|
||||
img = SDL_LoadBMP("./letters/letter-c.bmp");
|
||||
break;
|
||||
case 'd':
|
||||
img = SDL_LoadBMP("./letters/letter-d.bmp");
|
||||
break;
|
||||
case 'e':
|
||||
img = SDL_LoadBMP("./letters/letter-e.bmp");
|
||||
break;
|
||||
case 'f':
|
||||
img = SDL_LoadBMP("./letters/letter-f.bmp");
|
||||
break;
|
||||
case 'g':
|
||||
img = SDL_LoadBMP("./letters/letter-g.bmp");
|
||||
break;
|
||||
case 'h':
|
||||
img = SDL_LoadBMP("./letters/letter-h.bmp");
|
||||
break;
|
||||
case 'i':
|
||||
img = SDL_LoadBMP("./letters/letter-i.bmp");
|
||||
break;
|
||||
case 'j':
|
||||
img = SDL_LoadBMP("./letters/letter-j.bmp");
|
||||
break;
|
||||
case 'k':
|
||||
img = SDL_LoadBMP("./letters/letter-k.bmp");
|
||||
break;
|
||||
case 'l':
|
||||
img = SDL_LoadBMP("./letters/letter-l.bmp");
|
||||
break;
|
||||
case 'm':
|
||||
img = SDL_LoadBMP("./letters/letter-m.bmp");
|
||||
break;
|
||||
case 'n':
|
||||
img = SDL_LoadBMP("./letters/letter-n.bmp");
|
||||
break;
|
||||
case 'o':
|
||||
img = SDL_LoadBMP("./letters/letter-o.bmp");
|
||||
break;
|
||||
case 'p':
|
||||
img = SDL_LoadBMP("./letters/letter-p.bmp");
|
||||
break;
|
||||
case 'q':
|
||||
img = SDL_LoadBMP("./letters/letter-q.bmp");
|
||||
break;
|
||||
case 'r':
|
||||
img = SDL_LoadBMP("./letters/letter-r.bmp");
|
||||
break;
|
||||
case 's':
|
||||
img = SDL_LoadBMP("./letters/letter-s.bmp");
|
||||
break;
|
||||
case 't':
|
||||
img = SDL_LoadBMP("./letters/letter-t.bmp");
|
||||
break;
|
||||
case 'u':
|
||||
img = SDL_LoadBMP("./letters/letter-u.bmp");
|
||||
break;
|
||||
case 'v':
|
||||
img = SDL_LoadBMP("./letters/letter-v.bmp");
|
||||
break;
|
||||
case 'w':
|
||||
img = SDL_LoadBMP("./letters/letter-w.bmp");
|
||||
break;
|
||||
case 'x':
|
||||
img = SDL_LoadBMP("./letters/letter-x.bmp");
|
||||
break;
|
||||
case 'y':
|
||||
img = SDL_LoadBMP("./letters/letter-y.bmp");
|
||||
break;
|
||||
case 'z':
|
||||
img = SDL_LoadBMP("./letters/letter-z.bmp");
|
||||
break;
|
||||
case '-':
|
||||
img = SDL_LoadBMP("./digits/sign-minus.bmp");
|
||||
break;
|
||||
default:
|
||||
printf("Wait, thats illegal (%c)\n", c);
|
||||
break;
|
||||
}
|
||||
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, img);
|
||||
SDL_FreeSurface(img);
|
||||
SDL_RenderCopy(renderer, texture, NULL, &rect);
|
||||
}
|
||||
|
||||
void drawStringToRenderer(SDL_Renderer* renderer, char* str, int X, int Y, int W, int H) {
|
||||
char c = str[0];
|
||||
int i = 0;
|
||||
int cX = X;
|
||||
while((int)(c) != 0) {
|
||||
if(c != ' ') {
|
||||
drawCharToRenderer(renderer, c, cX, Y, W, H);
|
||||
}
|
||||
i++;
|
||||
cX += W;
|
||||
c = str[i];
|
||||
}
|
||||
}
|
||||
|
||||
void drawDigitToRenderer(SDL_Renderer* renderer, int digit, int X, int Y, int W, int H) {
|
||||
assert(digit - digit%10 == 0 && digit >= 0);
|
||||
SDL_Rect rect;
|
||||
rect.x = X;
|
||||
rect.y = Y;
|
||||
rect.w = W;
|
||||
rect.h = H;
|
||||
SDL_Surface* img;
|
||||
switch(digit) {
|
||||
case 0 :
|
||||
img = SDL_LoadBMP("./digits/digit-0.bmp");
|
||||
break;
|
||||
case 1 :
|
||||
img = SDL_LoadBMP("./digits/digit-1.bmp");
|
||||
break;
|
||||
case 2 :
|
||||
img = SDL_LoadBMP("./digits/digit-2.bmp");
|
||||
break;
|
||||
case 3 :
|
||||
img = SDL_LoadBMP("./digits/digit-3.bmp");
|
||||
break;
|
||||
case 4 :
|
||||
img = SDL_LoadBMP("./digits/digit-4.bmp");
|
||||
break;
|
||||
case 5 :
|
||||
img = SDL_LoadBMP("./digits/digit-5.bmp");
|
||||
break;
|
||||
case 6 :
|
||||
img = SDL_LoadBMP("./digits/digit-6.bmp");
|
||||
break;
|
||||
case 7 :
|
||||
img = SDL_LoadBMP("./digits/digit-7.bmp");
|
||||
break;
|
||||
case 8 :
|
||||
img = SDL_LoadBMP("./digits/digit-8.bmp");
|
||||
break;
|
||||
case 9 :
|
||||
img = SDL_LoadBMP("./digits/digit-9.bmp");
|
||||
break;
|
||||
default:
|
||||
printf("Wait, thats illegal\n");
|
||||
break;
|
||||
}
|
||||
|
||||
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, img);
|
||||
SDL_FreeSurface(img);
|
||||
SDL_RenderCopy(renderer, texture, NULL, &rect);
|
||||
}
|
||||
|
||||
void drawNumberToRenderer(SDL_Renderer* renderer, int n, int X, int Y, int W, int H, int Woffset) {
|
||||
if(n == 0) {
|
||||
drawDigitToRenderer(renderer, 0, X + W, Y, W, H);
|
||||
} else {
|
||||
int toDraw = 0, remaining = n, nIter = ln_baseN(n, 10);
|
||||
while(nIter != 0) {
|
||||
toDraw = remaining%10;
|
||||
remaining = remaining / 10;
|
||||
drawDigitToRenderer(renderer, toDraw, X + (W-Woffset)*nIter, Y, W, H);
|
||||
nIter--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void drawDateToRenderer(SDL_Renderer* renderer, date d, int X, int Y, int W, int H) {
|
||||
int cX = X;
|
||||
drawNumberToRenderer(renderer, d.day, cX, Y, W, H, 0);
|
||||
cX += (1+ln_baseN(d.day, 10))*W;
|
||||
drawCharToRenderer(renderer, '-', cX, Y, W, H);
|
||||
drawNumberToRenderer(renderer, d.month, cX, Y, W, H, 0);
|
||||
cX += (1+ln_baseN(d.day, 10))*W;
|
||||
drawCharToRenderer(renderer, '-', cX, Y, W, H);
|
||||
drawNumberToRenderer(renderer, d.year, cX, Y, W, H, 0);
|
||||
}
|
||||
|
||||
void print_one_week(SDL_Renderer* renderer, creneau* edt, int len_creneau, date start, int w, int h, int offset_x, int offset_y) { /*
|
||||
1) print names
|
||||
2) print weeks
|
||||
3) print groups */
|
||||
resetRenderer(renderer);
|
||||
|
||||
int wd = 75/3;
|
||||
int ht = 105/3;
|
||||
|
||||
int i = 0;
|
||||
|
||||
//printf("%d \n", date_dist(start, edt[i].date));
|
||||
|
||||
// locate the specified week in edt
|
||||
while(i < len_creneau && (date_dist(start, edt[i].date) == -1)) {
|
||||
i++;
|
||||
}
|
||||
|
||||
drawStringToRenderer(renderer, "from", 10, 10, wd, ht);
|
||||
drawDateToRenderer(renderer, start, 10+5*wd, 10, wd, ht);
|
||||
// print the corresponding week
|
||||
while(i < len_creneau && (date_dist(start, edt[i].date) < 7)) {
|
||||
printf("%d %d %d %d\n", edt[i].date.hour, edt[i].date.day, edt[i].date.month, edt[i].date.year);
|
||||
i++;
|
||||
}
|
||||
if(i < len_creneau) {
|
||||
drawStringToRenderer(renderer, "to", width/2+3*wd, 10, wd, ht);
|
||||
drawDateToRenderer(renderer, edt[i].date, width/2+5*wd, 10, wd, ht);
|
||||
} else {
|
||||
drawStringToRenderer(renderer, "to", width/2+3*wd, 10, wd, ht);
|
||||
drawDateToRenderer(renderer, edt[i-1].date, width/2+5*wd, 10, wd, ht);
|
||||
}
|
||||
updateRenderer(renderer);
|
||||
usleep(3000000);
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
18 1 1 2024
|
||||
18 2 1 2024
|
||||
13 3 1 2024
|
||||
14 3 1 2024
|
||||
15 3 1 2024
|
||||
17 3 1 2024
|
||||
17 4 1 2024
|
||||
18 4 1 2024
|
||||
16 5 1 2024
|
||||
17 5 1 2024
|
||||
18 5 1 2024
|
||||
17 7 1 2024
|
||||
18 7 1 2024
|
||||
18 8 1 2024
|
||||
14 9 1 2024
|
||||
15 9 1 2024
|
||||
16 9 1 2024
|
||||
17 10 1 2024
|
||||
18 10 1 2024
|
||||
18 11 1 2024
|
||||
|
||||
$
|
Binary file not shown.
|
@ -0,0 +1,37 @@
|
|||
#include "display.c"
|
||||
|
||||
// gcc -g -Wall -Wextra -Wpedantic main.c -lSDL2 -lSDL2_image -lm -o main
|
||||
|
||||
int main() {
|
||||
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
|
||||
printf("error initializing SDL: %s\n", SDL_GetError());
|
||||
}
|
||||
SDL_Window* win = SDL_CreateWindow("a game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, 0);
|
||||
|
||||
Uint32 render_flags = SDL_RENDERER_ACCELERATED;
|
||||
SDL_Renderer* rend = SDL_CreateRenderer(win, -1, render_flags);
|
||||
SDL_SetRenderDrawBlendMode(rend, SDL_BLENDMODE_BLEND);
|
||||
|
||||
creneau* edt = import_creneaux("file.txt", 20);
|
||||
|
||||
//printf("%d %d %d %d\n", edt[10].date.hour, edt[10].date.day, edt[10].date.month, edt[10].date.year);
|
||||
|
||||
date d1 = {17, 4, 1, 2024};
|
||||
//printf("%d %d %d %d\n", edt[0].date.hour, edt[0].date.day, edt[0].date.month, edt[0].date.year);
|
||||
|
||||
print_one_week(rend, edt, 20, d1, 10, 10, 10, 10);
|
||||
|
||||
|
||||
/*
|
||||
date d1 = {19, 20, 2, 2023};
|
||||
date d2 = {18, 3, 4, 2023};
|
||||
|
||||
printf("%d\n", date_dist(d1, d2));
|
||||
*/
|
||||
|
||||
|
||||
SDL_DestroyRenderer(rend);
|
||||
SDL_DestroyWindow(win);
|
||||
SDL_Quit();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL_image.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
|
||||
typedef enum topic {MATH, PHYSICS, ENGLISH, FRENCH, INFO} topic;
|
||||
// colles subjects
|
||||
|
||||
typedef struct date {int hour; int day; int month; int year;} date;
|
||||
// nothing to say here
|
||||
|
||||
typedef struct creneau {date date; int group; char* name; topic mat;} creneau;
|
||||
// créneau de colle
|
||||
// /!\ creneau has to be sorted by ascending dates
|
||||
|
||||
typedef struct colleur {char* name; topic mat; date* disp; int n_disp;} colleur;
|
||||
// available creneaux for the colleurs
|
||||
|
||||
static int width = 1200;
|
||||
static int height = 900;
|
||||
|
||||
int date_dist(date d1, date d2) {
|
||||
// returns distance between d1 and d2 in days
|
||||
// if d2 is sooner than d1, it will return -1
|
||||
if(d2.month == d1.month && d2.year == d1.year) {
|
||||
if(d2.day < d1.day) {
|
||||
return -1;
|
||||
}
|
||||
return d2.day - d1.day;
|
||||
} else {
|
||||
int is_31 = 0;
|
||||
if(d1.month == 1 || d1.month == 3 || d1.month == 5 || d1.month == 7 || d1.month == 8 || d1.month == 10 || d1.month == 12) {
|
||||
is_31 = 1;
|
||||
} else {
|
||||
is_31 = (d1.month == 2)*(-2) + (d1.month == 2 && d1.year%4 == 0 && d1.year%100 != 0);
|
||||
}
|
||||
if(d2.month - d1.month < 0 && d2.year <= d1.year) {
|
||||
return -1;
|
||||
} else if(d2.month - d1.month == 1 && d2.year == d1.year) {
|
||||
return d2.day + (30 + is_31 - d1.day);
|
||||
} else {
|
||||
date copy;
|
||||
copy.day = d1.day;
|
||||
copy.month = d1.month;
|
||||
copy.year = d1.year;
|
||||
copy.month = (copy.month + 1);
|
||||
if(copy.month == 13) {
|
||||
copy.month = 1;
|
||||
copy.year += 1;
|
||||
}
|
||||
return (30 + is_31 + date_dist(copy, d2));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
creneau* import_creneaux(char* filename, int size) {
|
||||
// import creneau data from a file
|
||||
// see file.txt for an example
|
||||
FILE* ptr = fopen(filename, "r");
|
||||
char c = fgetc(ptr);
|
||||
|
||||
creneau* edt = malloc(sizeof(creneau)*size);
|
||||
int i = 0;
|
||||
int to_fill = 0;
|
||||
|
||||
int buffer = 0;
|
||||
|
||||
while(c != EOF && c != '$') {
|
||||
if((int)(c) >= 48 && (int)(c) <= 57) {
|
||||
buffer *= 10;
|
||||
buffer += (int)(c) - 48;
|
||||
} else {
|
||||
if(to_fill == 0) {
|
||||
edt[i].date.hour = buffer;
|
||||
} else if(to_fill == 1) {
|
||||
edt[i].date.day = buffer;
|
||||
} else if(to_fill == 2) {
|
||||
edt[i].date.month = buffer;
|
||||
} else {
|
||||
edt[i].date.year = buffer;
|
||||
}
|
||||
to_fill++;
|
||||
buffer = 0;
|
||||
if(c == '\n') {
|
||||
i++;
|
||||
to_fill = 0;
|
||||
}
|
||||
}
|
||||
c = fgetc(ptr);
|
||||
}
|
||||
|
||||
fclose(ptr);
|
||||
return edt;
|
||||
}
|
Loading…
Reference in New Issue