#include #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); } }