#ifndef lint static char sccsid[] = "@(#)color.c 9.3 88/01/19 Copyright 1987 Sun Micro"; #endif /* * Copyright (c) 1987 by Sun Microsystems, Inc. */ /*- PostScript primitives for manipulating color color.c, Sun Mar 23 12:15:55 1986 James Gosling, Sun Microsystems */ #ifdef REF #include #include #endif #include "PostScript.h" static currenthsbcolor(ee) register struct execution_environment *ee; { register struct object *optop = ee->optop; cs_frcurrenthsbcolor(&ee->gontext, &optop[0].value.fixed, &optop[1].value.fixed, &optop[2].value.fixed); set_typed_object(optop, fixed_type); set_typed_object(optop+1, fixed_type); set_typed_object(optop+2, fixed_type); ee->optop += 3; } static currentrgbcolor(ee) register struct execution_environment *ee; { register struct object *optop = ee->optop; cs_frcurrentrgbcolor(&ee->gontext, &optop[0].value.fixed, &optop[1].value.fixed, &optop[2].value.fixed); set_typed_object(optop, fixed_type); set_typed_object(optop+1, fixed_type); set_typed_object(optop+2, fixed_type); ee->optop += 3; } static sethsbcolor(ee) register struct execution_environment *ee; { register struct object *optop = ee->optop; if (optop[-1].type != fixed_type || optop[-2].type != fixed_type || optop[-3].type != fixed_type) { ee->error_code = typecheck_error_code; return; } cs_frsethsbcolor(&ee->gontext,optop[-3].value.fixed, optop[-2].value.fixed, optop[-1].value.fixed); ee->optop -= 3; } static setrgbcolor(ee) register struct execution_environment *ee; { register struct object *optop = ee->optop; if (optop[-1].type != fixed_type || optop[-2].type != fixed_type || optop[-3].type != fixed_type) { ee->error_code = typecheck_error_code; return; } cs_frsetrgbcolor(&ee->gontext,optop[-3].value.fixed, optop[-2].value.fixed, optop[-1].value.fixed); ee->optop -= 3; } static hsbcolor(ee) register struct execution_environment *ee; { register struct object *optop = ee->optop; if (optop[-1].type != fixed_type || optop[-2].type != fixed_type || optop[-3].type != fixed_type) { ee->error_code = typecheck_error_code; return; } if (ee->execee.value.def->index) optop[-3].value.color = cs_frrgbcolor(optop[-3].value.fixed, optop[-2].value.fixed, optop[-1].value.fixed); else optop[-3].value.color = cs_frhsbcolor(optop[-3].value.fixed, optop[-2].value.fixed, optop[-1].value.fixed); set_typed_object(optop - 3, color_type); ee->optop -= 2; } static currentcolor(ee) register struct execution_environment *ee; { register struct object *optop = ee->optop; optop->value.color = cs_currentcolor(&ee->gontext); set_typed_object(optop, color_type); ee->optop++; } static setcolor(ee) register struct execution_environment *ee; { register struct object *optop = ee->optop; if (optop[-1].type != color_type) { ee->error_code = typecheck_error_code; return; } cs_setcolor(&ee->gontext, optop[-1].value.color); ee->optop--; } static setrasteropcode(ee) register struct execution_environment *ee; { register struct object *optop = ee->optop; if (optop[-1].type != fixed_type) { ee->error_code = typecheck_error_code; return; } cs_setrasteropcode(&ee->gontext, cfloorfr(optop[-1].value.fixed)); ee->optop--; } static currentrasteropcode(ee) register struct execution_environment *ee; { set_fixed_object(ee->optop, fracti(cs_currentrasteropcode(&ee->gontext))); ee->optop++; } static contrastswithcurrent(ee) register struct execution_environment *ee; { register struct object *optop = ee->optop; if (optop[-1].type != color_type) { ee->error_code = typecheck_error_code; return; } set_typed_object(optop - 1, boolean_type); optop[-1].value.fixed = fracti(cs_contrastswithcurrent(&ee->gontext, optop[-1].value.color)); } static overlaydraw(ee) register struct execution_environment *ee; { cs_overlaydraw(&ee->gontext); } static overlayerase(ee) register struct execution_environment *ee; { cs_overlayerase(&ee->gontext); } initialize_color() { define_operator("currenthsbcolor", currenthsbcolor, 0, 0, 3); define_operator("currentrgbcolor", currentrgbcolor, 0, 0, 3); define_operator("sethsbcolor", sethsbcolor, 0, 3, 0); define_operator("setrgbcolor", setrgbcolor, 0, 3, 0); define_operator("hsbcolor", hsbcolor, 0, 3, 1); define_operator("rgbcolor", hsbcolor, 1, 3, 1); define_operator("currentcolor", currentcolor, 0, 0, 1); define_operator("setcolor", setcolor, 0, 1, 0); define_operator("contrastswithcurrent", contrastswithcurrent, 0, 1, 1); define_operator("overlaydraw", overlaydraw, 0, 0, 0); define_operator("overlayerase", overlayerase, 0, 0, 0); define_operator("setrasteropcode", setrasteropcode, 0, 1, 0); define_operator("currentrasteropcode", currentrasteropcode, 0, 0, 1); }