]> git.sur5r.net Git - c128-kasse/blob - src/general.c
replace getchar() with cgetc() in more places, implement backspace support, beautify...
[c128-kasse] / src / general.c
1 /* 
2  * RGB2R-C128-Kassenprogramm
3  * © 2007-2009 phil_fry, sECuRE, sur5r
4  * See LICENSE for license information
5  *
6  */
7 #include <stdlib.h>
8 #include <stdio.h>
9 #include <string.h>
10 #include <conio.h>
11
12 #include "general.h"
13
14 /*
15  * Liest (maximal 31) Zeichen ein, bis Enter gedrückt wird.
16  * Vorsicht: Es wird ein statischer Buffer benutzt, sodass man
17  * das Ergebnis via strdup() retten muss, bevor man get_input()
18  * erneut aufruft
19  *
20  */
21 char *get_input() {
22         BYTE i = 0;
23         BYTE c, x, y;
24         static char output[32];
25         x = wherex();
26         y = wherey();
27         memset(output, '\0', 32);
28         while (1) {
29                 if (i == 31)
30                         break;
31                 c = cgetc();
32                 if (c == 13)
33                         break;
34                 /* backspace? */
35                 if (c == 20) {
36                         i--;
37                         cputcxy(x+i, y, ' ');
38                         gotoxy(x+i, y);
39                         continue;
40                 }
41                 cputc(c);
42                 output[i++] = c;
43         }
44         return output;
45 }
46
47 char retry_or_quit() {
48         char *c;
49         do {
50                 cprintf("\r\nr)etry or q)uit?\r\n");
51                 c = get_input();
52         } while ((*c != 'r') && (*c != 'q'));
53         return *c;
54 }
55
56 char *format_euro(char *s, int maxlen, int cent){
57         int tmp = cent;
58         int len = strlen(",EUR");
59         while ((tmp /= 10) > 0)
60                 ++len;
61         if (len >= maxlen)
62                 return NULL;
63         // workaround to produce a leading zero for cents.. %0.2d won't work 
64         sprintf(s, "%3d,%s%dEUR", cent / 100, ((cent%100)<10?"0":""), cent % 100);
65         return s;
66 }
67
68 void c128_perror(BYTE c, char *msg) {
69         cprintf("\r\nError (Code %d) while: %s\r\nOS Error = %d\r\n", c, msg, _oserror);
70 }