premier commit

This commit is contained in:
Imran Tierce 2020-01-03 22:14:31 +01:00
commit 8b7d46114b
3 changed files with 139 additions and 0 deletions

7
.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
assets-cg
assets-fx
build-fx
Makefile
project.cfg
uitest.g1a
src/main.c

6
include/userinput.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef USERINPUT_H
#define USERINPUT_H
uint64_t input_uint();
#endif

126
src/userinput.c Normal file
View File

@ -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;
}
}