#include "hpgltops.h"
void
AD_define_alternate(int num_params,
param_t *params)
{
int i;
AlternateFont.typeface = 48;
AlternateFont.posture = 0;
AlternateFont.weight = 0;
AlternateFont.height = 11.5;
for (i = 0; i < (num_params - 1); i += 2)
switch ((int)params[i].value.number)
{
case 4 :
AlternateFont.height = params[i + 1].value.number;
break;
case 5 :
AlternateFont.posture = (int)params[i + 1].value.number;
break;
case 6 :
AlternateFont.weight = (int)params[i + 1].value.number;
break;
case 7 :
AlternateFont.typeface = (int)params[i + 1].value.number;
break;
}
if (PageDirty)
printf("/SA {\n"
" /%s%s%s%s findfont\n"
" [ %f %f %f %f 0.0 0.0 ] makefont\n"
" setfont\n"
"} bind def\n",
AlternateFont.typeface == 48 ? "Courier" : "Helvetica",
(AlternateFont.weight != 0 || AlternateFont.posture != 0) ? "-" : "",
AlternateFont.weight != 0 ? "Bold" : "",
AlternateFont.posture != 0 ? "Oblique" : "",
AlternateFont.x * AlternateFont.height,
-AlternateFont.y * AlternateFont.height,
AlternateFont.y * AlternateFont.height,
AlternateFont.x * AlternateFont.height);
CharHeight[1] = AlternateFont.height;
}
void
CF_character_fill(int num_params,
param_t *params)
{
if (num_params == 0)
CharFillMode = 0;
else
CharFillMode = (int)params[0].value.number;
if (num_params == 2)
CharPen = (int)params[1].value.number;
}
void
CP_character_plot(int num_params,
param_t *params)
{
if (num_params < 2)
return;
switch (Rotation)
{
case 0:
PenPosition[0] += params[0].value.number * 1.2f / CharHeight[CharFont];
PenPosition[1] += params[1].value.number * CharHeight[CharFont];
break;
case 90:
PenPosition[0] -= params[1].value.number * 1.2f / CharHeight[CharFont];
PenPosition[1] += params[0].value.number * CharHeight[CharFont];
break;
case 180:
PenPosition[0] -= params[0].value.number * 1.2f / CharHeight[CharFont];
PenPosition[1] -= params[1].value.number * CharHeight[CharFont];
break;
case 270:
PenPosition[0] += params[1].value.number * 1.2f / CharHeight[CharFont];
PenPosition[1] -= params[0].value.number * CharHeight[CharFont];
break;
}
}
void
DI_absolute_direction(int num_params,
param_t *params)
{
if (CharFont)
{
if (num_params == 2)
{
AlternateFont.x = params[0].value.number;
AlternateFont.y = params[1].value.number;
}
if (PageDirty)
{
printf("/SA {\n"
" /%s%s%s%s findfont\n"
" [ %f %f %f %f 0.0 0.0 ] makefont\n"
" setfont\n"
"} bind def\n",
AlternateFont.typeface == 48 ? "Courier" : "Helvetica",
(AlternateFont.weight != 0 || AlternateFont.posture != 0) ? "-" : "",
AlternateFont.weight != 0 ? "Bold" : "",
AlternateFont.posture != 0 ? "Oblique" : "",
AlternateFont.x * AlternateFont.height,
-AlternateFont.y * AlternateFont.height,
AlternateFont.y * AlternateFont.height,
AlternateFont.x * AlternateFont.height);
puts("SA");
}
}
else
{
if (num_params == 2)
{
StandardFont.x = params[0].value.number;
StandardFont.y = params[1].value.number;
}
if (PageDirty)
{
printf("/SS {\n"
" /%s%s%s%s findfont\n"
" [ %f %f %f %f 0.0 0.0 ] makefont\n"
" setfont\n"
"} bind def\n",
StandardFont.typeface == 48 ? "Courier" : "Helvetica",
(StandardFont.weight != 0 || StandardFont.posture != 0) ? "-" : "",
StandardFont.weight != 0 ? "Bold" : "",
StandardFont.posture != 0 ? "Oblique" : "",
StandardFont.x * StandardFont.height,
-StandardFont.y * StandardFont.height,
StandardFont.y * StandardFont.height,
StandardFont.x * StandardFont.height);
puts("SS");
}
}
}
void
DR_relative_direction(int num_params,
param_t *params)
{
(void)num_params;
(void)params;
}
void
DT_define_label_term(int num_params,
param_t *params)
{
if (num_params == 0)
StringTerminator = '\003';
else
StringTerminator = params[0].value.string[0];
}
void
DV_define_variable_path(int num_params,
param_t *params)
{
(void)num_params;
(void)params;
}
void
ES_extra_space(int num_params,
param_t *params)
{
(void)num_params;
(void)params;
}
void
LB_label(int num_params,
param_t *params)
{
char *s;
if (num_params == 0)
return;
Outputf("gsave\n");
Outputf("currentmiterlimit 1.0 \n");
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
Outputf("(");
for (s = params[0].value.string; *s != '\0'; s ++)
if (strchr("()\\", *s) != NULL)
Outputf("\\%c", *s);
else
Outputf("%c", *s);
Outputf(") true charpath\n");
if (CharFillMode != 1)
Outputf("FI\n");
if (CharFillMode == 1 || CharFillMode == 3)
{
Outputf("%.3f %.3f %.3f %.2f SP ST\n", Pens[CharPen].rgb[0],
Pens[CharPen].rgb[CharPen], Pens[CharPen].rgb[2],
Pens[CharPen].width * PenScaling);
Outputf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],
Pens[PenNumber].rgb[1], Pens[PenNumber].rgb[2],
Pens[PenNumber].width * PenScaling);
}
Outputf("setmiterlimit\n");
Outputf("grestore\n");
}
void
LO_label_origin(int num_params,
param_t *params)
{
(void)num_params;
(void)params;
}
void
SA_select_alternate(int num_params,
param_t *params)
{
(void)num_params;
(void)params;
if (PageDirty)
puts("SA");
CharFont = 1;
}
void
SD_define_standard(int num_params,
param_t *params)
{
int i;
StandardFont.typeface = 48;
StandardFont.posture = 0;
StandardFont.weight = 0;
StandardFont.height = 11.5;
StandardFont.x = 1.0;
StandardFont.y = 0.0;
for (i = 0; i < (num_params - 1); i += 2)
switch ((int)params[i].value.number)
{
case 4 :
StandardFont.height = params[i + 1].value.number;
break;
case 5 :
StandardFont.posture = (int)params[i + 1].value.number;
break;
case 6 :
StandardFont.weight = (int)params[i + 1].value.number;
break;
case 7 :
StandardFont.typeface = (int)params[i + 1].value.number;
break;
}
if (PageDirty)
printf("/SS {\n"
" /%s%s%s%s findfont\n"
" [ %f %f %f %f 0.0 0.0 ] makefont\n"
" setfont\n"
"} bind def\n",
StandardFont.typeface == 48 ? "Courier" : "Helvetica",
(StandardFont.weight != 0 || StandardFont.posture != 0) ? "-" : "",
StandardFont.weight != 0 ? "Bold" : "",
StandardFont.posture != 0 ? "Oblique" : "",
StandardFont.x * StandardFont.height,
-StandardFont.y * StandardFont.height,
StandardFont.y * StandardFont.height,
StandardFont.x * StandardFont.height);
CharHeight[0] = StandardFont.height;
}
void
SI_absolute_size(int num_params,
param_t *params)
{
(void)num_params;
(void)params;
}
void
SL_character_slant(int num_params,
param_t *params)
{
(void)num_params;
(void)params;
}
void
SR_relative_size(int num_params,
param_t *params)
{
(void)num_params;
(void)params;
}
void
SS_select_standard(int num_params,
param_t *params)
{
(void)num_params;
(void)params;
if (PageDirty)
puts("SS");
CharFont = 0;
}
void
TD_transparent_data(int num_params,
param_t *params)
{
(void)num_params;
(void)params;
}