#include "common.h"
#include <math.h>
#ifndef M_PI
# define M_PI 3.14159265358979323846
#endif
typedef struct
{
int type;
union
{
float number;
char *string;
} value;
} param_t;
#define PARAM_ABSOLUTE 0
#define PARAM_RELATIVE 1
#define PARAM_STRING 2
typedef struct
{
int typeface,
posture,
weight;
float height;
float x, y;
} font_t;
typedef struct
{
float rgb[3];
float width;
} pen_t;
#ifdef _HPGL_MAIN_C_
# define VAR
# define VALUE(x) =x
# define VALUE2(x,y) ={x,y}
#else
# define VAR extern
# define VALUE(x)
# define VALUE2(x,y)
#endif
VAR ppd_file_t *PPD VALUE(NULL);
VAR float P1[2],
P2[2],
IW1[2],
IW2[2];
VAR int Rotation VALUE(0);
VAR int ScalingType VALUE(-1);
VAR float Scaling1[2],
Scaling2[2];
VAR float Transform[2][3];
VAR int PageRotation VALUE(0);
VAR char StringTerminator VALUE('\003');
VAR font_t StandardFont,
AlternateFont;
VAR float PenPosition[2] VALUE2(0.0f, 0.0f),
PenScaling VALUE(1.0f),
PenWidth VALUE(1.0f);
VAR pen_t Pens[1024];
VAR int PenMotion VALUE(0),
PenNumber VALUE(1),
PenCount VALUE(8),
PenDown VALUE(0),
PolygonMode VALUE(0),
PageCount VALUE(0),
PageDirty VALUE(0),
WidthUnits VALUE(0);
VAR float PlotSize[2] VALUE2(2592.0f, 3456.0f);
VAR int PlotSizeSet VALUE(0);
VAR int CharFillMode VALUE(0),
CharPen VALUE(0),
CharFont VALUE(0);
VAR float CharHeight[2] VALUE2(11.5f,11.5f);
VAR int FitPlot VALUE(0);
VAR float ColorRange[3][2]
#ifdef _HPGL_MAIN_C_
= {
{ 0.0, 255.0 },
{ 0.0, 255.0 },
{ 0.0, 255.0 }
}
#endif
;
VAR int LineCap VALUE(0);
VAR int LineJoin VALUE(0);
VAR float MiterLimit VALUE(3.0f);
extern int ParseCommand(FILE *fp, char *name, param_t **params);
extern void FreeParameters(int num_params, param_t *params);
extern void update_transform(void);
extern void BP_begin_plot(int num_params, param_t *params);
extern void DF_default_values(int num_params, param_t *params);
extern void IN_initialize(int num_params, param_t *params);
extern void IP_input_absolute(int num_params, param_t *params);
extern void IR_input_relative(int num_params, param_t *params);
extern void IW_input_window(int num_params, param_t *params);
extern void PG_advance_page(int num_params, param_t *params);
extern void PS_plot_size(int num_params, param_t *params);
extern void RO_rotate(int num_params, param_t *params);
extern void RP_replot(int num_params, param_t *params);
extern void SC_scale(int num_params, param_t *params);
extern void AA_arc_absolute(int num_params, param_t *params);
extern void AR_arc_relative(int num_params, param_t *params);
extern void AT_arc_absolute3(int num_params, param_t *params);
extern void CI_circle(int num_params, param_t *params);
extern void PA_plot_absolute(int num_params, param_t *params);
extern void PD_pen_down(int num_params, param_t *params);
extern void PE_polyline_encoded(int num_params, param_t *params);
extern void PR_plot_relative(int num_params, param_t *params);
extern void PU_pen_up(int num_params, param_t *params);
extern void RT_arc_relative3(int num_params, param_t *params);
extern void EA_edge_rect_absolute(int num_params, param_t *params);
extern void EP_edge_polygon(int num_params, param_t *params);
extern void ER_edge_rect_relative(int num_params, param_t *params);
extern void EW_edge_wedge(int num_params, param_t *params);
extern void FP_fill_polygon(int num_params, param_t *params);
extern void PM_polygon_mode(int num_params, param_t *params);
extern void RA_fill_rect_absolute(int num_params, param_t *params);
extern void RR_fill_rect_relative(int num_params, param_t *params);
extern void WG_fill_wedge(int num_params, param_t *params);
extern void AD_define_alternate(int num_params, param_t *params);
extern void CF_character_fill(int num_params, param_t *params);
extern void CP_character_plot(int num_params, param_t *params);
extern void DI_absolute_direction(int num_params, param_t *params);
extern void DR_relative_direction(int num_params, param_t *params);
extern void DT_define_label_term(int num_params, param_t *params);
extern void DV_define_variable_path(int num_params, param_t *params);
extern void ES_extra_space(int num_params, param_t *params);
extern void LB_label(int num_params, param_t *params);
extern void LO_label_origin(int num_params, param_t *params);
extern void SA_select_alternate(int num_params, param_t *params);
extern void SD_define_standard(int num_params, param_t *params);
extern void SI_absolute_size(int num_params, param_t *params);
extern void SL_character_slant(int num_params, param_t *params);
extern void SR_relative_size(int num_params, param_t *params);
extern void SS_select_standard(int num_params, param_t *params);
extern void TD_transparent_data(int num_params, param_t *params);
extern void AC_anchor_corner(int num_params, param_t *params);
extern void CR_color_range(int num_params, param_t *params);
extern void FT_fill_type(int num_params, param_t *params);
extern void LA_line_attributes(int num_params, param_t *params);
extern void LT_line_type(int num_params, param_t *params);
extern void NP_number_pens(int num_params, param_t *params);
extern void PC_pen_color(int num_params, param_t *params);
extern void PW_pen_width(int num_params, param_t *params);
extern void RF_raster_fill(int num_params, param_t *params);
extern void SM_symbol_mode(int num_params, param_t *params);
extern void SP_select_pen(int num_params, param_t *params);
extern void UL_user_line_type(int num_params, param_t *params);
extern void WU_width_units(int num_params, param_t *params);
extern void OutputProlog(char *title, char *user, int shading);
extern void OutputTrailer(void);
extern int Outputf(const char *format, ...);