summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2008-06-05 17:49:22 +0000
committerDimitri Sokolyuk <demon@dim13.org>2008-06-05 17:49:22 +0000
commita0a0b6006ce10522e393c7590a13efe176511d13 (patch)
tree15eada32b1e84d29b057914836e4718fa8f6e7ee
parentf57da717c82b46fe32dfdbe3c220a08e51c24f43 (diff)
write into string buffer instead of directly to terminal
-rw-r--r--7seg.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/7seg.c b/7seg.c
index 1339065..941fae8 100644
--- a/7seg.c
+++ b/7seg.c
@@ -16,6 +16,7 @@
*/
#include <stdio.h>
+#include <stdlib.h>
/*
* _ a
@@ -46,31 +47,44 @@ const char sym[] = "_|_||_|";
int
main(int argc, char **argv)
{
- int i, j;
- char *c;
+ int i, j;
+ char *c;
+ char *p;
+ char *s[4];
+ size_t len;
if ((c = argv[1]) == NULL)
return(-1);
+ len = strlen(argv[1]);
+ s[3] = malloc(1);
+ *s[3] = '\0';
+
for (i = 0; i < 3; i++) {
+ p = malloc(len + 1);
+ s[i] = p;
do {
if (*c < '0' || *c > '9')
continue;
if (i == 0)
- putchar(' ');
+ *p++ = ' ';
for (j = 0; j < 3; j++) {
- putchar(seg[*c - '0'] & 1 << i * i + j ?
- sym[i * i + j] : ' ');
+ *p++ = seg[*c - '0'] & 1 << i * i + j ?
+ sym[i * i + j] : ' ';
if (i == 0) {
- putchar(' ');
+ *p++ = ' ';
break;
}
}
} while (*++c);
- putchar('\n');
+ *p = '\0';
c = argv[1];
}
- putchar('\n');
+
+ for (i = 0; i < 4; i++) {
+ puts(s[i]);
+ free(s[i]);
+ }
return(0);
}