home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
300-399
/
ff386.lzh
/
XLispStat
/
src3.lzh
/
Mac
/
macxsgraph.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-07-30
|
2KB
|
79 lines
/* macxsgraph - Macintosh lisp low level graphics functions */
/* XLISP-STAT 2.1 Copyright (c) 1990, by Luke Tierney */
/* Additions to Xlisp 2.1, Copyright (c) 1989 by David Michael Betz */
/* You may give out copies of this software; for conditions see the */
/* file COPYING included with this distribution. */
#ifdef MPWC
# include <Windows.h>
# include <Picker.h>
#else
# include <WindowMgr.h>
# include <Color.h>
#endif MPWC
# include "xlisp.h"
# define nil 0L
# define MULTIPLIER 62535
/* external variables */
/* external functions */
extern double makedouble();
extern LVAL mklist();
static RGBColor ListToRGB(x)
LVAL x;
{
RGBColor color;
if (! consp(x) || llength(x) != 3) xlerror("not a color list", x);
color.red = MULTIPLIER * makedouble(car(x)); x = cdr(x);
color.green = MULTIPLIER * makedouble(car(x)); x = cdr(x);
color.blue = MULTIPLIER * makedouble(car(x));
return(color);
}
static LVAL RGBToList(color)
RGBColor color;
{
LVAL result, rp;
xlsave1(result);
result = rp = mklist(3, NIL);
rplaca(rp, cvflonum((FLOTYPE) (((double) color.red) / MULTIPLIER)));
rp = cdr(rp);
rplaca(rp, cvflonum((FLOTYPE) (((double) color.green) / MULTIPLIER)));
rp = cdr(rp);
rplaca(rp, cvflonum((FLOTYPE) (((double) color.blue) / MULTIPLIER)));
xlpop();
return(result);
}
LVAL xspick_color()
{
Point where;
char *prompt;
RGBColor in_color, out_color;
int ok;
LVAL arg, sk_initial = xlenter(":INITIAL");
if (! StScreenHasColor()) return(NIL);
in_color.red = 0;
in_color.green = 0;
in_color.blue = 0;
if (moreargs()) {
prompt = (char *) getstring(xlgastring());
if (xlgetkeyarg(sk_initial, &arg)) in_color = ListToRGB(arg);
}
else prompt = "Pick a color";
where.h = 0; where.v = 0;
CtoPstr(prompt);
ok = GetColor(where, prompt, &in_color, &out_color);
PtoCstr(prompt);
return((ok) ? RGBToList(out_color) : NIL);
}