316 lines
18 KiB
C
316 lines
18 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdarg.h>
|
|
#include <assert.h>
|
|
#include <math.h>
|
|
#include <stdbool.h>
|
|
#include <unistd.h>
|
|
#include <termios.h>
|
|
#include <limits.h>
|
|
#include <time.h>
|
|
#include <glad/glad.h>
|
|
#include "../include/glad/glad.h"
|
|
//#include <GLFW/glfw3.h>
|
|
#include <cglm/cglm.h>
|
|
|
|
#include "hash.h"
|
|
#include "structure.h"
|
|
#include "base.h"
|
|
#include "entities.h"
|
|
#include "menus.h"
|
|
|
|
float rectDefault[18] ;
|
|
|
|
static mat4 scale, slide;
|
|
void initMenus() {
|
|
rectDefault[0] = -0.5f; rectDefault[1] = -0.5f; rectDefault[2] = -1.0f;
|
|
rectDefault[3] = -0.5f; rectDefault[4] = 0.5f; rectDefault[5] = -1.0f;
|
|
rectDefault[6] = 0.5f; rectDefault[7] = 0.5f; rectDefault[8] = -1.0f;
|
|
|
|
rectDefault[9] = -0.5f; rectDefault[10] = -0.5f; rectDefault[11] = -1.0f;
|
|
rectDefault[12] = 0.5f; rectDefault[13] = 0.5f; rectDefault[14] = -1.0f;
|
|
rectDefault[15] = 0.5f; rectDefault[16] = -0.5f; rectDefault[17] = -1.0f;
|
|
}
|
|
|
|
void gl_drawRect(unsigned int fragShader, float x, float y, float w, float h, int r, int g, int b) {
|
|
glm_mat4_identity(scale);
|
|
glm_mat4_identity(slide);
|
|
|
|
scale[0][0] = w;
|
|
scale[1][1] = h;
|
|
scale[2][2] = 0.5f;
|
|
|
|
glm_translate(slide, (vec3){x+w/2, y+h/2, 0.0f});
|
|
|
|
glUniformMatrix4fv(glGetUniformLocation(fragShader, "scale"), 1, GL_FALSE, (float*)scale);
|
|
glUniformMatrix4fv(glGetUniformLocation(fragShader, "slide"), 1, GL_FALSE, (float*)slide);
|
|
glUniform4f(glGetUniformLocation(fragShader, "u_color2"), r/255.0f, g/255.0f, b/255.0f, 0.5f);
|
|
|
|
glDrawArrays(GL_TRIANGLES, 0, 6);
|
|
}
|
|
|
|
void gl_drawDigit(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width) {
|
|
assert(n >= 0 && n < 10);
|
|
if(n == 0) {
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
} else if(n == 1) {
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
} else if(n == 2) {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(n == 3) {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(n == 4) {
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
} else if(n == 5) {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(n == 6) {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(n == 7) {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
} else if(n == 8) {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
}
|
|
}
|
|
|
|
// 7-segment display
|
|
// side can be -1 (aligned right) or 1 (aligned left)
|
|
void gl_drawInteger(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width, int side) {
|
|
int left = n;
|
|
float curx = x;
|
|
if(left < 0) {
|
|
left *= (-1);
|
|
}
|
|
if(side == 1) {
|
|
curx += ((ln_baseN(abs(n), 10)-1)*(size+4*width));
|
|
}
|
|
while(left > 0) {
|
|
gl_drawDigit(fragShader, left%10, curx, y, size, r, g, b, width);
|
|
curx -= (size+4*width);
|
|
left = left/10;
|
|
}
|
|
if(n == 0) {
|
|
gl_drawDigit(fragShader, 0, curx, y, size, r, g, b, width);
|
|
curx -= (size+4*width);
|
|
}
|
|
if(n < 0) {
|
|
gl_drawRect(fragShader, curx-size/2-width, y, size+2*width, 2*width, r, g, b);
|
|
}
|
|
}
|
|
|
|
void gl_drawChar(unsigned int fragShader, char ch, float x, float y, float size, int r, int g, int b, float width) {
|
|
if(ch == 'a' || ch == 'A') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
} else if(ch == 'b' || ch == 'B') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size+width, 2*width, 2*size-width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size, 2*width, r, g, b);
|
|
} else if(ch == 'c' || ch == 'C') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'd' || ch == 'D') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2+width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'e' || ch == 'E') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'f' || ch == 'F') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'g' || ch == 'G') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-width, y-width, size/2+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'h' || ch == 'H') {
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
} else if(ch == 'i' || ch == 'I') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'j' || ch == 'J') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size/2+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'k' || ch == 'K') {
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size/2+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-width, y-size/2-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y+size/2-width, 2*width, size/2+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size/2+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-width, y+size/2-width, size/2+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-width, y-size/2-width, size/2+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'l' || ch == 'L') {
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'm' || ch == 'M') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
} else if(ch == 'n' || ch == 'N') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
} else if(ch == 'o' || ch == 'O') {
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
} else if(ch == 'p' || ch == 'P') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
} else if(ch == 'q' || ch == 'Q') {
|
|
gl_drawRect(fragShader, x-size/2-width, y-size/2-width, 2*width, 3*size/2+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size/2-width, 2*width, 3*size/2+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size/2-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/4-width, y-size-width, 2*width, size/2+2*width, r, g, b);
|
|
} else if(ch == 'r' || ch == 'R') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/4-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
} else if(ch == 's' || ch == 'S') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(ch == 't' || ch == 'T') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
} else if(ch == 'u' || ch == 'U') {
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'v' || ch == 'V') {
|
|
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/4-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/4-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size/4+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/4-width, y-width, size/4+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/4-width, y-size-width, size/2+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'w' || ch == 'W') {
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
|
|
} else if(ch == 'x' || ch == 'X') {
|
|
gl_drawRect(fragShader, x-width, y-size/2-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y+size/2-width, 2*width, size/2+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size/2+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y+size/2-width, 2*width, size/2+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, size/2+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y+size/2-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size/2-width, size+2*width, 2*width, r, g, b);
|
|
} else if(ch == 'y' || ch == 'Y') {
|
|
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
} else if(ch == 'z' || ch == 'Z') {
|
|
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
|
|
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
|
|
}
|
|
}
|
|
|
|
int get_string_len(char* s) {
|
|
int k = 0;
|
|
while(s[k] != '\0') {
|
|
k+=1;
|
|
}
|
|
return k;
|
|
}
|
|
|
|
// 7-segment display
|
|
// side can be -1 (aligned right) or 1 (aligned left)
|
|
void gl_drawString(unsigned int fragShader, char* str, float x, float y, float size, int r, int g, int b, float width, int side) {
|
|
float curx = x;
|
|
int len = get_string_len(str);
|
|
if(side == 1) {
|
|
curx += ((len)*(size+4*width));
|
|
}
|
|
char c = str[len-1];
|
|
int i = len-1;
|
|
while(i >= 0) {
|
|
gl_drawChar(fragShader, c, curx, y, size, r, g, b, width);
|
|
curx -= (size+4*width);
|
|
i -= 1;
|
|
c = str[i];
|
|
}
|
|
}
|
|
|
|
void gl_printf(unsigned int fragShader, int count, ...) {
|
|
|
|
}
|
|
|
|
void gl_initDrawRect(unsigned int shaderProgram) {
|
|
glUseProgram(shaderProgram);
|
|
}
|
|
|
|
static onoff_button* buttonList;
|
|
static interface* interfaceList;
|
|
|
|
void init_interf() {
|
|
buttonList = malloc(sizeof(onoff_button)*256);
|
|
interfaceList = malloc(sizeof(interface)*64);
|
|
}
|
|
|
|
void free_interf() {
|
|
free(buttonList);
|
|
free(interfaceList);
|
|
} |