304 lines
8.5 KiB
C
304 lines
8.5 KiB
C
#include <stdio.h>
|
|
|
|
#include "structure.h"
|
|
|
|
/*
|
|
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(creneau* edt, int len_creneau, date start) { /*
|
|
1) print names
|
|
2) print weeks
|
|
3) print groups */
|
|
//resetRenderer(renderer);
|
|
|
|
//int wd = 75/3;
|
|
//int ht = 105/3;
|
|
|
|
int i = 0;
|
|
|
|
// 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, edt[i].date, 10+5*wd, 10, wd, ht);
|
|
|
|
// print the corresponding week
|
|
while(i < len_creneau && (date_dist(start, edt[i].date) < 7)) {
|
|
printf("Colle at [%d-%d-%d] (%dh for %dh) with group ", edt[i].date.day, edt[i].date.month, edt[i].date.year, edt[i].date.hour, edt[i].length);
|
|
if(edt[i].group == 0) {
|
|
printf("NONE ");
|
|
} else {
|
|
printf("%d ", edt[i].group);
|
|
}
|
|
printf("and colleur ");
|
|
if(str_equal(edt[i].name, "empty")) {
|
|
printf("NONE");
|
|
} else {
|
|
printf("%s", edt[i].name);
|
|
}
|
|
printf("\n");
|
|
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);
|
|
}
|
|
|
|
void print_all_edt(creneau* edt, int len_edt, int n_weeks, int len_oneweek) {
|
|
for(int k = 0; k < n_weeks; k++) {
|
|
print_one_week(edt, len_edt, edt[k*len_oneweek].date);
|
|
}
|
|
}
|
|
|
|
void print_all_colleurs(colleur* chads, int n_chads) {
|
|
for(int c = 0; c < n_chads; c++) {
|
|
printf("Colleur %s with %d available :\n", chads[c].name, chads[c].n_disp);
|
|
}
|
|
}
|