home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-387-Vol-3of3.iso
/
c
/
cuj9301.zip
/
1101029A
< prev
next >
Wrap
Text File
|
1992-11-06
|
4KB
|
96 lines
#include <stdio.h>
#define PENUP() pen_up=1
#define PENDOWN() pen_up=0
#define SETCOLOR(x) color=x
#define SETWIDTH(x) width=x
#define BLACK 0
#define RED 1
#define GREEN 2
#define BLUE 3
#define FAT 0
#define MEDIUM 1
#define THIN 2
#define TRUE 1
#define FALSE 0
int pen_up;
int color;
int width;
int x1, x2, y1, y2;
int gotx1, gotx2, goty1, goty2;
/* Function Draw - demonstrates use of the Simple Drawing Language
Does not actually draw lines, simple parses the first parameter and
prints commands on screen */
Draw (char *str, int val)
{
int *pval=&val; //points to optional parameters
//restore defaults
gotx1=goty1=gotx2=goty2=FALSE;
x1=x2=y1=y2=0;
pen_up=1;
color = BLACK;
width=MEDIUM;
//loop to parse the command string
while (TRUE)
{
switch (*str++)
{
case 'p': PENUP(); break; //pick pen up
case 'P': PENDOWN(); break; //put pen down
case 'c': //set color
switch (*str++)
{
case 'R': SETCOLOR(RED); printf ("Color set to red\n");break;
case 'G': SETCOLOR(GREEN); printf ("Color set to green\n");break;
case 'B': SETCOLOR(BLUE); printf ("Color set to blue\n");break;
case 'b': SETCOLOR(BLACK); printf ("Color set to black\n");break;
default: return -1;
} //End switch (on character)
break;
case 'w': //set width
switch (*str++)
{
case 'T': SETWIDTH(THIN); printf ("Width set to thin\n");break;
case 'M': SETWIDTH(MEDIUM); printf ("Width set to medium\n");break;
case 'F': SETWIDTH(FAT); printf ("Width set to fat\n");break;
default: return -1;
} //End switch (on character)
break;
case '%': //get next optional parameter
switch (*str++)
{
case 'x': //set x coordinate
if (gotx2) {x1=x2; x2=*pval++; break;}
if (!gotx1) {x1=*pval++; gotx1=TRUE; break;}
if (!gotx2) {x2=*pval++; gotx2=TRUE; break;}
break;
case 'y': //set y coordinate
if (goty2) {y1=y2; y2=*pval++; break;}
if (!goty1) {y1=*pval++; goty1=TRUE; break;}
if (!goty2) {y2=*pval++; goty2=TRUE; break;}
break;
default: return -1;
} //End switch (token)
//do we have enough info to draw the line?
if (gotx2 && goty2 && !pen_up)
{
printf ("Drawing line <%d,%d>-<%d,%d>\n", x1,y1,x2,y2);
x1 = x2;
y1 = y2;
goty2 = FALSE;
gotx2 = FALSE;
} //end if (got both coordinates - draw line)
break;
case '\0': //end of command string
return 0;
default: return -1;
} //End switch (on character)
} //End while (TRUE)
return 0;
} //End function (Draw)
WRAP_EOF