Added non-working LED test
git-svn-id: http://picoc.googlecode.com/svn/trunk@454 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
parent
7700f11893
commit
73a5d6a11b
6
picoc.c
6
picoc.c
|
@ -63,9 +63,9 @@ int main(int argc, char **argv)
|
|||
|
||||
if (argc < 2)
|
||||
{
|
||||
printf("Format: picoc <csource1.c>... - run a program (calls main() to start it)\n"
|
||||
" picoc -i - interactive mode\n"
|
||||
" picoc -m <csource1.c>... - run a program without calling main()\n");
|
||||
printf("Format: picoc <csource1.c>... [- <arg1>...] : run a program (calls main() to start it)\n"
|
||||
" picoc -m <csource1.c>... [- <arg1>...] : run a program without calling main()\n"
|
||||
" picoc -i : interactive mode\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
|
262
tests/32_led.c
Normal file
262
tests/32_led.c
Normal file
|
@ -0,0 +1,262 @@
|
|||
/* example from http://barnyard.syr.edu/quickies/led.c */
|
||||
|
||||
/* led.c: print out number as if on 7 line led display. I.e., write integer
|
||||
given on command line like this:
|
||||
_ _ _
|
||||
| _| _| |_| |_
|
||||
| |_ _| | _| etc.
|
||||
|
||||
We assume the terminal behaves like a classical teletype. So the top
|
||||
lines of all digits have to be printed first, then the middle lines of
|
||||
all digits, etc.
|
||||
|
||||
By Terry R. McConnell
|
||||
|
||||
compile: cc -o led led.c
|
||||
|
||||
If you just want to link in the subroutine print_led that does all the
|
||||
work, compile with -DNO_MAIN, and declare the following in any source file
|
||||
that uses the call:
|
||||
|
||||
extern void print_led(unsigned long x, char *buf);
|
||||
|
||||
Bug: you cannot call repeatedly to print more than one number to a line.
|
||||
That would require curses or some other terminal API that allows moving the
|
||||
cursor to a previous line.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define MAX_DIGITS 32
|
||||
#define NO_MAIN
|
||||
|
||||
|
||||
/* Print the top line of the digit d into buffer.
|
||||
Does not null terminate buffer. */
|
||||
|
||||
void topline(int d, char *p){
|
||||
|
||||
*p++ = ' ';
|
||||
switch(d){
|
||||
|
||||
/* all these have _ on top line */
|
||||
|
||||
case 0:
|
||||
case 2:
|
||||
case 3:
|
||||
case 5:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
*p++ = '_';
|
||||
break;
|
||||
default:
|
||||
*p++=' ';
|
||||
|
||||
}
|
||||
*p++=' ';
|
||||
}
|
||||
|
||||
/* Print the middle line of the digit d into the buffer.
|
||||
Does not null terminate. */
|
||||
|
||||
void midline(int d, char *p){
|
||||
|
||||
switch(d){
|
||||
|
||||
/* those that have leading | on middle line */
|
||||
|
||||
case 0:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 8:
|
||||
case 9:
|
||||
*p++='|';
|
||||
break;
|
||||
default:
|
||||
*p++=' ';
|
||||
}
|
||||
switch(d){
|
||||
|
||||
/* those that have _ on middle line */
|
||||
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 8:
|
||||
case 9:
|
||||
*p++='_';
|
||||
break;
|
||||
default:
|
||||
*p++=' ';
|
||||
|
||||
}
|
||||
switch(d){
|
||||
|
||||
/* those that have closing | on middle line */
|
||||
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
*p++='|';
|
||||
break;
|
||||
default:
|
||||
*p++=' ';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* Print the bottom line of the digit d. Does not null terminate. */
|
||||
|
||||
void botline(int d, char *p){
|
||||
|
||||
|
||||
switch(d){
|
||||
|
||||
/* those that have leading | on bottom line */
|
||||
|
||||
case 0:
|
||||
case 2:
|
||||
case 6:
|
||||
case 8:
|
||||
*p++='|';
|
||||
break;
|
||||
default:
|
||||
*p++=' ';
|
||||
}
|
||||
switch(d){
|
||||
|
||||
/* those that have _ on bottom line */
|
||||
|
||||
case 0:
|
||||
case 2:
|
||||
case 3:
|
||||
case 5:
|
||||
case 6:
|
||||
case 8:
|
||||
*p++='_';
|
||||
break;
|
||||
default:
|
||||
*p++=' ';
|
||||
|
||||
}
|
||||
switch(d){
|
||||
|
||||
/* those that have closing | on bottom line */
|
||||
|
||||
case 0:
|
||||
case 1:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
*p++='|';
|
||||
break;
|
||||
default:
|
||||
*p++=' ';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* Write the led representation of integer to string buffer. */
|
||||
|
||||
void print_led(unsigned long x, char *buf)
|
||||
{
|
||||
|
||||
int i=0,n;
|
||||
static int d[MAX_DIGITS];
|
||||
|
||||
|
||||
/* extract digits from x */
|
||||
|
||||
n = ( x == 0L ? 1 : 0 ); /* 0 is a digit, hence a special case */
|
||||
|
||||
while(x){
|
||||
d[n++] = (int)(x%10L);
|
||||
if(n >= MAX_DIGITS)break;
|
||||
x = x/10L;
|
||||
}
|
||||
|
||||
/* print top lines of all digits */
|
||||
|
||||
for(i=n-1;i>=0;i--){
|
||||
topline(d[i],buf);
|
||||
buf += 3;
|
||||
*buf++=' ';
|
||||
}
|
||||
*buf++='\n'; /* move teletype to next line */
|
||||
|
||||
/* print middle lines of all digits */
|
||||
|
||||
for(i=n-1;i>=0;i--){
|
||||
midline(d[i],buf);
|
||||
buf += 3;
|
||||
*buf++=' ';
|
||||
}
|
||||
*buf++='\n';
|
||||
|
||||
/* print bottom lines of all digits */
|
||||
|
||||
for(i=n-1;i>=0;i--){
|
||||
botline(d[i],buf);
|
||||
buf += 3;
|
||||
*buf++=' ';
|
||||
}
|
||||
*buf++='\n';
|
||||
*buf='\0';
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
char buf[5*MAX_DIGITS];
|
||||
print_led(1234567, buf);
|
||||
printf("%s\n",buf);
|
||||
}
|
||||
|
||||
#ifndef NO_MAIN
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
|
||||
int i=0,n;
|
||||
long x;
|
||||
static int d[MAX_DIGITS];
|
||||
char buf[5*MAX_DIGITS];
|
||||
|
||||
if(argc != 2){
|
||||
fprintf(stderr,"led: usage: led integer\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* fetch argument from command line */
|
||||
|
||||
x = atol(argv[1]);
|
||||
|
||||
/* sanity check */
|
||||
|
||||
if(x<0){
|
||||
fprintf(stderr,"led: %d must be non-negative\n",x);
|
||||
return 1;
|
||||
}
|
||||
|
||||
print_led(x,buf);
|
||||
printf("%s\n",buf);
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
#endif
|
Loading…
Reference in a new issue