premier commit
This commit is contained in:
commit
8b7d46114b
|
@ -0,0 +1,7 @@
|
|||
assets-cg
|
||||
assets-fx
|
||||
build-fx
|
||||
Makefile
|
||||
project.cfg
|
||||
uitest.g1a
|
||||
src/main.c
|
|
@ -0,0 +1,6 @@
|
|||
#ifndef USERINPUT_H
|
||||
#define USERINPUT_H
|
||||
|
||||
uint64_t input_uint();
|
||||
|
||||
#endif
|
|
@ -0,0 +1,126 @@
|
|||
#include <gint/display.h>
|
||||
#include <gint/keyboard.h>
|
||||
#include <stdint.h>
|
||||
#include <gint/std/stdio.h>
|
||||
#include <gint/std/string.h>
|
||||
|
||||
#define WIDTH 128
|
||||
#define HEIGHT 64
|
||||
#define TAILLE_INPUT_U64 20
|
||||
|
||||
uint64_t atoi(char *s);
|
||||
void draw_field(int h);
|
||||
void itoa(char *s, uint64_t a);
|
||||
void clear_field(int h);
|
||||
|
||||
uint64_t input_uint() {
|
||||
int key = 0, h;
|
||||
unsigned int curseur;
|
||||
char input[TAILLE_INPUT_U64+1];
|
||||
char nb_limite[TAILLE_INPUT_U64+1];
|
||||
|
||||
uint64_t limite = -1;
|
||||
|
||||
itoa(nb_limite, limite);
|
||||
|
||||
for(curseur = 0; curseur <= TAILLE_INPUT_U64; ++curseur) input[curseur] = 0;
|
||||
|
||||
curseur = 0;
|
||||
|
||||
dsize("0", NULL, NULL, &h);
|
||||
|
||||
draw_field(h);
|
||||
|
||||
while(1) {
|
||||
if(input[0] != '0' && curseur < TAILLE_INPUT_U64) {
|
||||
switch(key) {
|
||||
case KEY_0:
|
||||
input[curseur++] = '0';
|
||||
break;
|
||||
case KEY_1:
|
||||
input[curseur++] = '1';
|
||||
break;
|
||||
case KEY_2:
|
||||
input[curseur++] = '2';
|
||||
break;
|
||||
case KEY_3:
|
||||
input[curseur++] = '3';
|
||||
break;
|
||||
case KEY_4:
|
||||
input[curseur++] = '4';
|
||||
break;
|
||||
case KEY_5:
|
||||
input[curseur++] = '5';
|
||||
break;
|
||||
case KEY_6:
|
||||
input[curseur++] = '6';
|
||||
break;
|
||||
case KEY_7:
|
||||
input[curseur++] = '7';
|
||||
break;
|
||||
case KEY_8:
|
||||
input[curseur++] = '8';
|
||||
break;
|
||||
case KEY_9:
|
||||
input[curseur++] = '9';
|
||||
}
|
||||
if(curseur == TAILLE_INPUT_U64 && strcmp(input, nb_limite) > 0) input[--curseur] = 0;
|
||||
}
|
||||
if(curseur) {
|
||||
switch(key) {
|
||||
case KEY_DEL:
|
||||
clear_field(h);
|
||||
input[--curseur] = 0;
|
||||
break;
|
||||
case KEY_EXE:
|
||||
return atoi(input);
|
||||
}
|
||||
}
|
||||
|
||||
dtext(2, HEIGHT-2-h, input, C_BLACK, C_WHITE);
|
||||
dupdate();
|
||||
key = getkey().key;
|
||||
}
|
||||
}
|
||||
|
||||
void clear_field(int h) {
|
||||
drect(1, HEIGHT-2-h, WIDTH-2, HEIGHT-3, C_WHITE);
|
||||
}
|
||||
|
||||
void draw_field(int h) {
|
||||
clear_field(h);
|
||||
dhline(HEIGHT-4-h, C_BLACK);
|
||||
dhline(HEIGHT-1, C_BLACK);
|
||||
dline(0, HEIGHT-3-h, 0, HEIGHT-2, C_BLACK);
|
||||
dline(WIDTH-1, HEIGHT-3-h, WIDTH-1, HEIGHT-2, C_BLACK);
|
||||
}
|
||||
|
||||
uint64_t pow(const int n, unsigned int p) {
|
||||
uint64_t retour = 1;
|
||||
for(; p; --p) retour *= n;
|
||||
return retour;
|
||||
}
|
||||
|
||||
uint64_t atoi(char *s) {
|
||||
int taille = strlen(s);
|
||||
uint64_t retour = 0;
|
||||
for(int puissance = 0; puissance < taille; ++puissance) {
|
||||
retour += (s[taille-1-puissance] - '0') * pow(10, puissance);
|
||||
}
|
||||
return retour;
|
||||
}
|
||||
|
||||
void itoa(char *s, uint64_t a) {
|
||||
int i = 0, j;
|
||||
char c;
|
||||
while(a) {
|
||||
s[i++] = '0' + a%10;
|
||||
a/=10;
|
||||
}
|
||||
s[i] = 0;
|
||||
for(j = 0; j < i/2; ++j) {
|
||||
c = s[j];
|
||||
s[j] = s[i-j-1];
|
||||
s[i-j-1] = c;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue