summaryrefslogtreecommitdiff
path: root/support/dktools/wxdrd.ctr
diff options
context:
space:
mode:
Diffstat (limited to 'support/dktools/wxdrd.ctr')
-rw-r--r--support/dktools/wxdrd.ctr2691
1 files changed, 0 insertions, 2691 deletions
diff --git a/support/dktools/wxdrd.ctr b/support/dktools/wxdrd.ctr
deleted file mode 100644
index 550d4acad3..0000000000
--- a/support/dktools/wxdrd.ctr
+++ /dev/null
@@ -1,2691 +0,0 @@
-%% options
-
-copyright owner = Dirk Krause
-copyright year = 2018-xxxx
-SPDX-License-Identifier: BSD-3-Clause
-
-%% header
-
-#ifndef DK4APP_H_INCLUDED
-#include "dk4app.h"
-#endif
-
-#ifndef WXDTYPES_H_INCLUDED
-#include "wxdtypes.h"
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/** Open a drawing from file.
- @param fn File name.
- @param job Job structure.
- @return Valid pointer to drawing on success, NULL on error.
-*/
-
-wxd_drawing_t *
-wxdrd_open_from_file(const dkChar *fn, wxd2lat_job_t *job);
-
-
-/** Open a new empty drawing.
- @return Valid pointer to drawing on success, NULL on error.
-*/
-
-wxd_drawing_t *
-wxdrd_open_empty(void);
-
-
-/** Apply file contents to empty drawing.
- @param drw Drawing to modify.
- @param fipo File pointer, opened for text reading.
- @param fn File name, may be NULL.
- @param job Job structure.
- @return 1 on success, 0 on error.
-*/
-
-int
-wxdrd_apply_file(
- wxd_drawing_t *drw,
- FILE *fipo,
- const dkChar *fn,
- wxd2lat_job_t *job
-);
-
-
-/** Close drawing and release resources.
- @param drw Drawing to close.
-*/
-
-void
-wxdrd_close(wxd_drawing_t *drw);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-/* vim: set ai sw=4 ts=4 : */
-%% module
-
-#include "wxd2lat.h"
-
-
-
-$!trace-include
-
-
-
-/** Context used while applying file contents.
- For initialization search for text INITCONTEXT .
-*/
-typedef struct {
- wxd_object_t tobj; /**< Temporary object filled from line. */
- wxd_object_t *pobj; /**< Object currently created. */
- char **parts; /**< Tokens from input line. */
- dk4_app_t *app; /**< Application structure for diagnostics. */
- const dkChar * const *msg; /**< Localized message texts. */
- const dkChar *fn; /**< File name currently processed. */
- wxd_drawing_t *drw; /**< Drawing to modify. */
- dk4_um_t grdepth; /**< Grouping depth. */
- dk4_um_t lineno; /**< Current line number to process. */
- size_t szparts; /**< Number of elements in parts array. */
- size_t nparts; /**< Number of elements used in parts array. */
- size_t sz_msg; /**< Number of texts in msg array. */
- uint16_t curp; /**< Index of current point to add. */
- int st; /**< Reader state. */
- int cc; /**< Continue: 1=yes, 0=finished, 2=abort. */
- int back; /**< Reader process result */
-} wxd_reader_context_t;
-
-
-
-/** Reader states
-*/
-enum {
- /** Error occured, can not continue.
- */
- ST_ERROR = -1 ,
-
- /** Expecting first line containing file format info.
- */
- ST_FIRSTLINE = 0 ,
-
- /** Expecting line to start an object.
- */
- ST_OBJECT_LINE ,
-
- /** Expecting details line.
- */
- ST_DETAIL_LINE ,
-
- /** Expecting text to export.
- */
- ST_TEXT_EXPORT ,
-
- /** Expecting text to show on screen.
- */
- ST_TEXT_SCREEN ,
-
- /** Expecting image file name.
- */
- ST_IMAGE_NAME ,
-
- /** Attempt to resume processing.
- */
- ST_RESUME
-};
-
-
-
-/** Constant text fragments used by module.
-*/
-
-static const char * const wxdrd_kwnl8[] = {
-$!string-table
-#
-# 0 Keyword wxd
-#
-WXD
-$!end
-};
-
-
-
-static
-void
-wxd_object_initialize(wxd_object_t *pobj)
-{
- DK4_MEMRES(pobj,sizeof(wxd_object_t));
- pobj->lino = (dk4_um_t)0UL;
-}
-
-
-
-void
-wxdrd_close(wxd_drawing_t *drw)
-{
- wxd_object_t *obj;
-
- if (NULL != drw) {
- if (NULL != drw->s_flat) {
- if (NULL != drw->i_flat) {
- dk4sto_it_reset(drw->i_flat);
- do {
- obj = (wxd_object_t *)dk4sto_it_next(drw->i_flat);
- if (NULL != obj) {
- wxd2lat_object_delete(obj);
- }
- } while(NULL != obj);
- dk4sto_it_close(drw->i_flat);
- }
- dk4sto_close(drw->s_flat);
- }
- dk4mem_free(drw);
- }
-}
-
-
-
-/** Initialize a drawing after allocating the memory.
- @param drw Drawing to initialize.
-*/
-static
-void
-wxdrd_initialize_empty_drawing(wxd_drawing_t *drw)
-{
- drw->s_flat = NULL;
- drw->i_flat = NULL;
- drw->bbxl = drw->bbxr = drw->bbyb = drw->bbyt = 0.0;
- drw->fv_maj = 1;
- drw->fv_min = 0;
- drw->baselw = 0.45;
-}
-
-
-
-wxd_drawing_t *
-wxdrd_open_empty(void)
-{
- wxd_drawing_t *back = NULL;
- int ok = 0;
- back = dk4mem_new(wxd_drawing_t,1,NULL);
- if (NULL != back) {
- wxdrd_initialize_empty_drawing(back);
- back->s_flat = dk4sto_open(NULL);
- if (NULL != back->s_flat) {
- dk4sto_set_comp(back->s_flat, wxd2lat_compare_object, 0);
- back->i_flat = dk4sto_it_open(back->s_flat, NULL);
- if (NULL != back->i_flat) {
- ok = 1;
- }
- }
- if (0 == ok) {
- wxdrd_close(back);
- back = NULL;
- }
- }
- return back;
-}
-
-
-
-/** Check drawing file format version against version given by numbers.
- @param drw Drawing to check.
- @param maj Major number of version to compare against.
- @param min Minor number of version to compare against.
- @return 1 if drawing version is higher, 0 for equal versions, -1
- if drawing version is less than specified version.
-*/
-static
-int
-wxdrd_check_version(wxd_drawing_t *drw, uint16_t maj, uint16_t min)
-{
- int back = 0;
- if (drw->fv_maj > maj) {
- back = 1;
- }
- else {
- if (drw->fv_maj < maj) {
- back = -1;
- }
- else {
- if (drw->fv_min > min) {
- back = 1;
- }
- else {
- if (drw->fv_min < min) {
- back = -1;
- }
- }
- }
- }
- return back;
-}
-
-
-
-/** Check whether a character is a white space.
- @param c Character to test.
- @return 1 for space or tabulator, 0 otherwise.
-*/
-static
-int
-is_whsp(char c)
-{
- if (' ' == c) return 1;
- if ('\t' == c) return 1;
- return 0;
-}
-
-
-
-/** Read double value from one of the parts, if we can still continue.
- @param rp Address of destination variable.
- @param pctx Context to use.
- @param pind Index of source text in parts array.
-*/
-
-static
-void
-wxdrd_input_double(
- double *rp,
- wxd_reader_context_t *pctx,
- size_t pind
-)
-{
- const char *ep = NULL;
- double v = 0.0;
- int res = 0;
- if (1 == pctx->cc) {
- res = dk4ma_input_c8_double(&v, pctx->parts[pind], &ep, 1, NULL);
- if (0 != res) {
- *rp = v;
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
-#if DK4_CHAR_SIZE == 1
- dk4app_log_3(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR,
- 22, 23,
- pctx->parts[pind]
- );
-#else
- /* ##### TODO: ERROR Message */
-#endif
- }
- }
-}
-
-
-
-static
-void
-wxdrd_input_u8(
- uint8_t *rp,
- wxd_reader_context_t *pctx,
- size_t pind
-)
-{
- const char *ep = NULL;
- int res = 0;
- uint8_t v = 0U;
-
- res = dk4ma_input_c8_dec_u8(&v, pctx->parts[pind], &ep, 1, NULL);
- if (0 != res) {
- *rp = v;
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
-#if DK4_CHAR_SIZE == 1
- dk4app_log_3(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR,
- 82, 83, pctx->parts[pind]
- );
-#else
- /* ##### TODO: ERROR message */
-#endif
- }
-}
-
-
-
-static
-void
-wxdrd_input_i8(
- int8_t *rp,
- wxd_reader_context_t *pctx,
- size_t pind
-)
-{
- const char *ep = NULL;
- int res = 0;
- int8_t v = 0U;
-
- res = dk4ma_input_c8_dec_i8(&v, pctx->parts[pind], &ep, 1, NULL);
- if (0 != res) {
- *rp = v;
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
-#if DK4_CHAR_SIZE == 1
- dk4app_log_3(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR,
- 84, 85, pctx->parts[pind]
- );
-#else
- /* ##### ERROR: Syntax */
-#endif
- }
-}
-
-
-
-static
-void
-wxdrd_input_u16(
- uint16_t *rp,
- wxd_reader_context_t *pctx,
- size_t pind
-)
-{
- const char *ep = NULL;
- int res = 0;
- uint16_t v = 0U;
-
- res = dk4ma_input_c8_dec_u16(&v, pctx->parts[pind], &ep, 1, NULL);
- if (0 != res) {
- *rp = v;
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
-#if DK4_CHAR_SIZE == 1
- dk4app_log_3(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR,
- 86, 87, pctx->parts[pind]
- );
-#else
- /* ##### TODO: Error message */
-#endif
- }
-}
-
-
-
-static
-void
-wxdrd_input_i16(
- int16_t *rp,
- wxd_reader_context_t *pctx,
- size_t pind
-)
-{
- const char *ep = NULL;
- int res = 0;
- int16_t v = 0U;
-
- res = dk4ma_input_c8_dec_i16(&v, pctx->parts[pind], &ep, 1, NULL);
- if (0 != res) {
- *rp = v;
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
-#if DK4_CHAR_SIZE == 1
- dk4app_log_3(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR,
- 88, 89, pctx->parts[pind]
- );
-#else
- /* ##### TODO: Error message */
-#endif
- }
-}
-
-
-
-static
-void
-wxdrd_input_u32(
- uint32_t *rp,
- wxd_reader_context_t *pctx,
- size_t pind
-)
-{
- const char *ep = NULL;
- int res = 0;
- uint32_t v = 0U;
-
- res = dk4ma_input_c8_dec_u32(&v, pctx->parts[pind], &ep, 1, NULL);
- if (0 != res) {
- *rp = v;
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
-#if DK4_CHAR_SIZE == 1
- dk4app_log_3(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR,
- 90, 91, pctx->parts[pind]
- );
-#else
- /* ##### TODO: Error message */
-#endif
- }
-}
-
-
-
-static
-void
-wxdrd_input_i32(
- int32_t *rp,
- wxd_reader_context_t *pctx,
- size_t pind
-)
-{
- const char *ep = NULL;
- int res = 0;
- int32_t v = 0U;
-
- res = dk4ma_input_c8_dec_i32(&v, pctx->parts[pind], &ep, 1, NULL);
- if (0 != res) {
- *rp = v;
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
-#if DK4_CHAR_SIZE == 1
- dk4app_log_3(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR,
- 92, 93, pctx->parts[pind]
- );
-#else
- /* ##### TODO: Error message */
-#endif
- }
-}
-
-
-
-/** Process first line of file containing the file type.
- @param pctx Context to modify.
- @param il Input line to process.
-*/
-static
-void
-wxdrd_process_filetype_line(wxd_reader_context_t *pctx, char *il)
-{
- const char *ep;
- int res;
- $? "+ wxdrd_process_filetype_line"
- pctx->nparts = dk4str8_tokenize(
- &(pctx->parts[0]), pctx->szparts, il, NULL, NULL
- );
- if (3 == pctx->nparts) {
- if (0 == strcmp(wxdrd_kwnl8[0], pctx->parts[0])) {
- ep = NULL;
- res = dk4ma_input_c8_dec_u16(
- &(pctx->drw->fv_maj), pctx->parts[1], &ep, 1, NULL
- );
- if (0 != res) {
- ep = NULL;
- res = dk4ma_input_c8_dec_u16(
- &(pctx->drw->fv_min), pctx->parts[2], &ep, 1, NULL
- );
- if (0 != res) {
- pctx->st = ST_OBJECT_LINE;
- if (0 < wxdrd_check_version(pctx->drw, 1, 0)) {
- /* WARNING: File format version too high! */
- /*
- While reading the input file object of types
- not supported by format 1.0 are ignored.
- */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg,
- DK4_LL_WARNING, 94
- );
- }
- }
- else { $? "! missing minor version"
- pctx->cc = -1;
- /* ERROR: Not a wxd file */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 4
- );
- }
- }
- else { $? "! missing major version"
- pctx->cc = -1;
- /* ERROR: Not a wxd file */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 4
- );
- }
- }
- else { $? "! no WXD"
- pctx->cc = -1;
- /* ERROR: Not a wxd file */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 4
- );
- }
- }
- else { $? "! nparts != 3"
- pctx->cc = -1;
- /* ERROR: Not a wxd file */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 4
- );
- }
- $? "- wxdrd_process_filetype_line cc=%d", pctx->cc
-}
-
-
-
-/** Process configuration line for bounding box.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_bounding_box_line(wxd_reader_context_t *pctx)
-{
- int32_t i32[4];
- const char *ep = NULL;
- size_t i;
- int ok = 1;
- int res;
- $? "+ wxdrd_process_bounding_box_line"
- if (6 == pctx->nparts) {
- for (i = 0; i < 4; i++) {
- ep = NULL;
- res = dk4ma_input_c8_dec_i32(
- &(i32[i]), pctx->parts[i + 2], &ep, 1, NULL
- );
- if (0 == res) { $? "! not a number"
- ok = 0 ;
-#if DK4_CHAR_SIZE == 1
- dk4app_log_3(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR,
- 92, 93, pctx->parts[i + 2]
- );
-#else
- /* ##### TODO: Error message */
-#endif
- }
- }
- if (1 == ok) {
- pctx->drw->bbxl = (double)(i32[0]);
- pctx->drw->bbxr = (double)(i32[1]);
- pctx->drw->bbyb = (double)(i32[2]);
- pctx->drw->bbyt = (double)(i32[3]);
- if (
- (pctx->drw->bbxl >= pctx->drw->bbxr)
- || (pctx->drw->bbyb >= pctx->drw->bbyt)
- ) {
- /* ERROR: Illegal bounding box */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 95
- );
- pctx->cc = -1;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- }
- }
- else { $? "! nparts"
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_bounding_box_line cc=%d", pctx->cc
-}
-
-
-
-/** Process configuration line for base line width.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_base_line_width_line(wxd_reader_context_t *pctx)
-{
- const char *ep = NULL;
- int res;
- uint32_t u32;
- $? "+ wxdrd_process_base_line_width_line"
- if (3 == pctx->nparts) {
- res = dk4ma_input_c8_dec_u32(&u32, pctx->parts[2], &ep, 1, NULL);
- if (0 != res) {
- pctx->drw->baselw = ((9.0 * (double)u32) / 2032000.0);
- if ((uint32_t)0U == u32) {
- pctx->cc = -1;
- /* ERROR: Base line width 0 not allowed */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 97
- );
- }
- }
- else { $? "! not a number"
- pctx->cc = -1;
- /* ERROR: Syntax */
-#if DK4_CHAR_SIZE == 1
- dk4app_log_3(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR,
- 90, 91, pctx->parts[2]
- );
-#else
- /* ##### TODO: Error message */
-#endif
- }
- }
- else { $? "! nparts"
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_base_line_width_line cc=%d", pctx->cc
-}
-
-
-
-/** Process configuration line.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_config_option_line(wxd_reader_context_t *pctx)
-{
- const char *ep = NULL;
- int res;
- int16_t st;
- $? "+ wxdrd_process_config_option_line"
- if (1 < pctx->nparts) {
- res = dk4ma_input_c8_dec_i16(&st, pctx->parts[1], &ep, 1, NULL);
- if (0 != res) {
- switch (st) {
- case 0 : { /* Bounding box */
- wxdrd_process_bounding_box_line(pctx);
- } break;
- case 1 : { /* Base line width */
- wxdrd_process_base_line_width_line(pctx);
- } break;
- case 2 : { /* Zoom level */
- /* Zoom level is used in the drawing application only */
- } break;
- case 3 : { /* Zoom center */
- /* Zoom center is used in the drawing application only */
- } break;
- case 4 : { /* Grid unit */
- /* Grid unit is used in the drawing application only */
- } break;
- case 5 : { /* Grid divisor base */
- /* Grid divisor is used in the drawing application only */
- } break;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax - Too few numbers */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 98
- );
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax - Too few numbers */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 98
- );
- }
- $? "- wxdrd_process_config_option_line cc=%d", pctx->cc
-}
-
-
-
-/** Read layer and colour.
- No memory is allocated for the identifier, we just check existance.
- @param pctx Context to modify.
- @param isst Colour purpose (is stroke): 1=stroke, 0=fill.
-*/
-static
-void
-wxd_layer_colour(wxd_reader_context_t *pctx, int isst)
-{
- size_t i;
- $? "+ wxd_layer_colour"
- wxdrd_input_i16(&(pctx->tobj.lay), pctx, 1);
- if (0 != isst) {
- for (i = 0; ((i < 3) && (1 == pctx->cc)); i++) {
- wxdrd_input_u8(&(pctx->tobj.sc[i]), pctx, (2 + i));
- }
- }
- else {
- for (i = 0; ((i < 3) && (1 == pctx->cc)); i++) {
- wxdrd_input_u8(&(pctx->tobj.fc[i]), pctx, (2 + i));
- }
- }
- $? "- wxd_layer_colour cc=%d", pctx->cc
-}
-
-
-
-/** Retrieve attributes for stroked object.
- @param pctx Context to use and modify.
- @param addi Offset to add to indices (0 for objects without
- a number of points, 1 for objects with variable point number).
- @param jm Offset to add to indices (0 for objects without
- join style and miter limit, 2 for objects with these information).
-*/
-static
-void
-wxd_stroke_attributes(wxd_reader_context_t *pctx, size_t addi, size_t jm)
-{
- size_t i;
- uint16_t u16 = (uint16_t)0U;
- $? "+ wxd_stroke_attributes"
- wxdrd_input_i16(&(pctx->tobj.lay), pctx, (1 + addi));
- for (i = 0; ((i < 3) && (1 == pctx->cc)); i++) {
- wxdrd_input_u8(&(pctx->tobj.sc[i]), pctx, (2 + addi + i));
- }
- wxdrd_input_u16(&u16, pctx, (5 + addi));
- pctx->tobj.lw = (double)u16;
- wxdrd_input_u8(&(pctx->tobj.ls), pctx, (6 + addi));
- if (WXD_LS_DASH_DOT_DOT_DOT < pctx->tobj.ls) {
- pctx->tobj.ls = WXD_LS_DASH_DOT_DOT_DOT;
- /* WARNING: Line style corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 99
- );
- }
- wxdrd_input_u8(&(pctx->tobj.sl), pctx, (7 + addi));
- if (1 > pctx->tobj.sl) {
- pctx->tobj.sl = 1;
- /* WARNING: Style length corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 100
- );
- }
- wxdrd_input_u8(&(pctx->tobj.csfs), pctx, (8 + addi));
- if (WXD_LC_PROJECTING < pctx->tobj.csfs) {
- pctx->tobj.csfs = WXD_LC_PROJECTING;
- /* WARNING: Cap style corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 101
- );
- }
- if (2 == jm) {
- wxdrd_input_u8(&(pctx->tobj.js), pctx, (9 + addi));
- if (WXD_LJ_BEVELED < pctx->tobj.js) {
- pctx->tobj.js = WXD_LJ_BEVELED;
- /* WARNING: Join style corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 102
- );
- }
- wxdrd_input_u8(&(pctx->tobj.ml), pctx, (10 + addi));
- $? ". ml = %u", (unsigned)(pctx->tobj.ml)
- if (1U > pctx->tobj.ml) {
- pctx->tobj.ml = 1U;
- /* WARNING: Miter limit corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 103
- );
- }
- }
- wxdrd_input_u8(&(pctx->tobj.af.type), pctx, ( 9 + jm + addi));
- if (29U < pctx->tobj.af.type) {
- pctx->tobj.af.type = 29U;
- /* WARNING: Forward arrow type corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 104
- );
- }
- wxdrd_input_u8(&(pctx->tobj.af.length), pctx, (10 + jm + addi));
- if (1U > pctx->tobj.af.length) {
- pctx->tobj.af.length = 1U;
- /* WARNING: Forward arrow length corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 106
- );
- }
- wxdrd_input_u8(&(pctx->tobj.af.width), pctx, (11 + jm + addi));
- if (1U > pctx->tobj.af.width) {
- pctx->tobj.af.width = 1U;
- /* WARNING: Forward arrow width corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 108
- );
- }
- wxdrd_input_u8(&(pctx->tobj.ab.type), pctx, (12 + jm + addi));
- if (29U < pctx->tobj.ab.type) {
- pctx->tobj.ab.type = 29U;
- /* WARNING: Backward arrow type corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 105
- );
- }
- wxdrd_input_u8(&(pctx->tobj.ab.length), pctx, (13 + jm + addi));
- if (1U > pctx->tobj.ab.length) {
- pctx->tobj.ab.length = 1U;
- /* WARNING: Backward arrow length corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 107
- );
- }
- wxdrd_input_u8(&(pctx->tobj.ab.width), pctx, (14 + jm + addi));
- if (1U > pctx->tobj.ab.width) {
- pctx->tobj.ab.width = 1U;
- /* WARNING: Backward arrow width corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 109
- );
- }
- $? "- wxd_stroke_attributes cc=%d", pctx->cc
-}
-
-
-
-static
-void
-wxd_fill_stroke_attributes(wxd_reader_context_t *pctx, size_t addi, int js)
-{
- size_t i;
- uint16_t u16 = (uint16_t)0U;
- $? "+ wxd_fill_stroke_attributes"
- wxdrd_input_i16(&(pctx->tobj.lay), pctx, (1 + addi));
- for (i = 0; ((i < 3) && (1 == pctx->cc)); i++) {
- wxdrd_input_u8(&(pctx->tobj.sc[i]), pctx, (2 + addi + i));
- }
- for (i = 0; ((i < 3) && (1 == pctx->cc)); i++) {
- wxdrd_input_u8(&(pctx->tobj.fc[i]), pctx, (5 + addi + i));
- }
- wxdrd_input_u16(&u16, pctx, (8 + addi));
- pctx->tobj.lw = (double)u16;
- wxdrd_input_u8(&(pctx->tobj.ls), pctx, (9 + addi));
- if (WXD_LS_DASH_DOT_DOT_DOT < pctx->tobj.ls) {
- pctx->tobj.ls = WXD_LS_DASH_DOT_DOT_DOT;
- /* WARNING: Line style corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 99
- );
- }
- wxdrd_input_u8(&(pctx->tobj.sl), pctx, (10 + addi));
- if (1 > pctx->tobj.sl) {
- pctx->tobj.sl = 1;
- /* WARNING: Style length corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 100
- );
- }
- if (1 == js) {
- wxdrd_input_u8(&(pctx->tobj.js), pctx, (11 + addi));
- if (WXD_LJ_BEVELED < pctx->tobj.js) {
- pctx->tobj.js = WXD_LJ_BEVELED;
- /* WARNING: Join style corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 102
- );
- }
- wxdrd_input_u8(&(pctx->tobj.ml), pctx, (12 + addi));
- $? ". ml = %u", (unsigned)(pctx->tobj.ml)
- if (1U > pctx->tobj.ml) {
- pctx->tobj.ml = 1U;
- /* WARNING: Miter limit corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 103
- );
- }
- wxdrd_input_u8(&(pctx->tobj.csfs), pctx, (13 + addi));
- if (WXD_FS_VERTICAL_TIRES < pctx->tobj.csfs) {
- pctx->tobj.csfs = WXD_FS_VERTICAL_TIRES;
- /* WARNING: Fill style corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 110
- );
- }
- }
- else {
- wxdrd_input_u8(&(pctx->tobj.csfs), pctx, (11 + addi));
- if (WXD_FS_VERTICAL_TIRES < pctx->tobj.csfs) {
- pctx->tobj.csfs = WXD_FS_VERTICAL_TIRES;
- /* WARNING: Fill style corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 110
- );
- }
- }
- $? "- wxd_fill_stroke_attributes cc=%d", pctx->cc
-}
-
-
-
-/** Add object pobj to drawing.
- @param pctx Context to modify, contains both drw and pobj.
- @param idin Index of identifier in parts array.
-*/
-static
-void
-wxdrd_add_object(wxd_reader_context_t *pctx)
-{
- if ((NULL != pctx->pobj) && (1 == pctx->cc)) {
- if (0 == dk4sto_add(pctx->drw->s_flat, pctx->pobj, NULL)) {
- wxd2lat_object_delete(pctx->pobj);
- pctx->pobj = NULL;
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
-}
-
-
-
-/** Process object start line for text object.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_text_start_line(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_text_start_line"
- if (5 == pctx->nparts) {
- wxd_layer_colour(pctx, 0);
- if (1 == pctx->cc) {
- /*
- Set details to reasonable defaults before creating
- a dynamic copy of the object
- */
- pctx->tobj.det.t.t = NULL;
- pctx->tobj.det.t.tsc = NULL;
- pctx->tobj.det.t.a = 0.0;
- pctx->tobj.det.t.x = 0.0;
- pctx->tobj.det.t.y = 0.0;
- pctx->tobj.det.t.fsz = 12U;
- pctx->tobj.det.t.find = 0;
- pctx->tobj.det.t.al = WXD_TA_LEFT;
- pctx->tobj.det.t.fl = 0;
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- /*
- Create dynamic copy and register interest in the details
- */
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_text_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for polyline object.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_polyline_start_line(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_polyline_start_line"
- if (18 == pctx->nparts) {
- pctx->tobj.det.p.p = NULL;
- pctx->tobj.det.p.n = 0;
- wxdrd_input_u16(&(pctx->tobj.det.p.n), pctx, 1);
- if (1 == pctx->cc) {
- wxd_stroke_attributes(pctx, 1, 2);
- if (2 > pctx->tobj.det.p.n) {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 59
- );
- }
- if (1 == pctx->cc) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- pctx->pobj->det.p.p =
- dk4mem_new(wxd_point_t,pctx->tobj.det.p.n,NULL);
- if (NULL != pctx->pobj->det.p.p) {
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- dk4mem_free(pctx->pobj);
- pctx->pobj = NULL;
- pctx->cc = -1;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_polyline_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for open spline.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_ospline_start_line(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_ospline_start_line"
- if (18 == pctx->nparts) {
- pctx->tobj.det.s.p = NULL;
- pctx->tobj.det.s.sl = NULL;
- pctx->tobj.det.s.n = 0;
- pctx->tobj.det.s.ts = 0.0;
- wxdrd_input_u16(&(pctx->tobj.det.s.n), pctx, 1);
- pctx->tobj.det.s.te = (double)((pctx->tobj).det.s.n - (uint16_t)1U);
- if (1 == pctx->cc) {
- wxd_stroke_attributes(pctx, 1, 2);
- if (2 > pctx->tobj.det.s.n) {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 59
- );
- }
- if (1 == pctx->cc) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- pctx->pobj->det.s.p =
- dk4mem_new(wxd_spline_point_t,pctx->tobj.det.s.n,NULL);
- if (NULL != pctx->pobj->det.s.p) {
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- dk4mem_free(pctx->pobj);
- pctx->pobj = NULL;
- pctx->cc = -1;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_ospline_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for open arc.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_oarc_start_line(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_oarc_start_line"
- if (15 == pctx->nparts) {
- pctx->tobj.det.a.a = 0.0;
- pctx->tobj.det.a.b = 0.0;
- pctx->tobj.det.a.x = 0L;
- pctx->tobj.det.a.y = 0L;
- pctx->tobj.det.a.r = 0UL;
- wxd_stroke_attributes(pctx, 0, 0);
- if (1 == pctx->cc) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_oarc_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for polygon.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_polygon_start_line(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_polygon_start_line"
- if (15 == pctx->nparts) {
- pctx->tobj.det.p.p = NULL;
- pctx->tobj.det.p.n = 0;
- wxdrd_input_u16(&(pctx->tobj.det.p.n), pctx, 1);
- if (1 == pctx->cc) {
- wxd_fill_stroke_attributes(pctx, 1, 1);
- if (2 > pctx->tobj.det.p.n) {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 59
- );
- }
- if (1 == pctx->cc) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- pctx->pobj->det.p.p =
- dk4mem_new(wxd_point_t,pctx->tobj.det.p.n,NULL);
- if (NULL != pctx->pobj->det.p.p) {
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- dk4mem_free(pctx->pobj);
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_polygon_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for closed spline.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_cspline_start_line(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_cspline_start_line"
- if (15 == pctx->nparts) {
- pctx->tobj.det.s.p = NULL;
- pctx->tobj.det.s.sl = NULL;
- pctx->tobj.det.s.n = 0;
- wxdrd_input_u16(&(pctx->tobj.det.s.n), pctx, 1);
- if (1 == pctx->cc) {
- wxd_fill_stroke_attributes(pctx, 1, 1);
- if (2 > pctx->tobj.det.s.n) {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 59
- );
- }
- if (1 == pctx->cc) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- pctx->pobj->det.s.p =
- dk4mem_new(wxd_spline_point_t,pctx->tobj.det.s.n,NULL);
- if (NULL != pctx->pobj->det.s.p) {
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- dk4mem_free(pctx->pobj);
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_cspline_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for closed arc.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_carc_start_line(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_carc_start_line"
- if (14 == pctx->nparts) {
- pctx->tobj.det.a.a = 0.0;
- pctx->tobj.det.a.b = 0.0;
- pctx->tobj.det.a.x = 0L;
- pctx->tobj.det.a.y = 0L;
- pctx->tobj.det.a.r = 0UL;
- wxd_fill_stroke_attributes(pctx, 0, 1);
- if (1 == pctx->cc) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_carc_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for ellipse.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_ellipse_start_line(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_ellipse_start_line"
- if (12 == pctx->nparts) {
- pctx->tobj.det.e.a = 0.0;
- pctx->tobj.det.e.x = 0.0;
- pctx->tobj.det.e.y = 0.0;
- pctx->tobj.det.e.rx = 0.0;
- pctx->tobj.det.e.ry = 0.0;
- wxd_fill_stroke_attributes(pctx, 0, 0);
- if (1 == pctx->cc) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- else {
- pctx->cc = -1;
- }
- $? "- wxdrd_process_ellipse_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for box.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_box_start_line(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_box_start_line"
- if (12 == pctx->nparts) {
- pctx->tobj.det.b.xl = 0.0;
- pctx->tobj.det.b.xr = 0.0;
- pctx->tobj.det.b.yb = 0.0;
- pctx->tobj.det.b.yt = 0.0;
- pctx->tobj.det.b.r = -1.0;
- wxd_fill_stroke_attributes(pctx, 0, 0);
- pctx->tobj.js = WXD_LJ_MITERED;
- pctx->tobj.ml = 8U; $? ". ml = 8"
- if (1 == pctx->cc) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_box_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for embedded image.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_image_start_line(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_image_start_line"
- if (5 == pctx->nparts) {
- pctx->tobj.det.i.fn = NULL;
- pctx->tobj.det.i.x = 0.0;
- pctx->tobj.det.i.y = 0.0;
- pctx->tobj.det.i.w = 0.0;
- pctx->tobj.det.i.h = 0.0;
- pctx->tobj.det.i.fl = 0U;
- pctx->tobj.det.i.r2g = 0;
- pctx->tobj.det.i.r2c = 0;
- wxd_layer_colour(pctx, 0);
- if (1 == pctx->cc) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_image_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for filled dot.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_filled_dot_start_line(wxd_reader_context_t *pctx)
-{
- size_t i;
- $? "+ wxdrd_process_filled_dot_start_line"
- if (5 == pctx->nparts) {
- pctx->tobj.det.d.x = 0.0;
- pctx->tobj.det.d.y = 0.0;
- pctx->tobj.det.d.d = 0.0;
- pctx->tobj.lw = 0.0;
- wxd_layer_colour(pctx, 0);
- for (i = 0; i < 3; i++) { pctx->tobj.sc[i] = pctx->tobj.fc[i]; }
- pctx->tobj.csfs = WXD_FS_PURE;
- if (1 == pctx->cc ) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_filled_dot_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for white filled dot.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_white_dot_start_line(wxd_reader_context_t *pctx)
-{
- size_t i;
- $? "+ wxdrd_process_white_dot_start_line"
- if (5 == pctx->nparts) {
- pctx->tobj.det.d.x = 0.0;
- pctx->tobj.det.d.y = 0.0;
- pctx->tobj.det.d.d = 0.0;
- pctx->tobj.lw = 0.0;
- wxd_layer_colour(pctx, 1);
- for (i = 0; i < 3; i++) { pctx->tobj.fc[i] = 255; }
- pctx->tobj.csfs = WXD_FS_PURE;
- if (1 == pctx->cc) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_white_dot_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process object start line for circle.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_circle_start_line(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_circle_start_line"
- if (12 == pctx->nparts) {
- pctx->tobj.det.e.a = 0.0;
- pctx->tobj.det.e.x = 0.0;
- pctx->tobj.det.e.y = 0.0;
- pctx->tobj.det.e.rx = 0.0;
- pctx->tobj.det.e.ry = 0.0;
- wxd_fill_stroke_attributes(pctx, 0, 0);
- if (1 == pctx->cc) {
- pctx->pobj = dk4mem_new(wxd_object_t,1,NULL);
- if (NULL != pctx->pobj) {
- DK4_MEMCPY(pctx->pobj, &(pctx->tobj), sizeof(wxd_object_t));
- wxdrd_add_object(pctx);
- if (1 == pctx->cc) {
- pctx->st = ST_DETAIL_LINE;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_circle_start_line cc=%d", pctx->cc
-}
-
-
-
-/** Process first line of new object.
- @param pctx Context to modify.
- @param il Input line to process.
-*/
-static
-void
-wxdrd_process_object_line(wxd_reader_context_t *pctx, char *il)
-{
- const char *ep = NULL;
- int res;
- $? "+ wxdrd_process_object_line"
- pctx->nparts = dk4str8_tokenize(
- &(pctx->parts[0]), pctx->szparts, il, NULL, NULL
- );
- wxd_object_initialize(&(pctx->tobj));
- (pctx->tobj).lino = pctx->lineno;
- pctx->pobj = NULL;
- pctx->curp = 0U;
- if (0 < pctx->nparts) {
- res = dk4ma_input_c8_dec_i16(
- &(pctx->tobj.ot), pctx->parts[0], &ep, 1, NULL
- );
- if (0 != res) {
- switch (pctx->tobj.ot) {
- case WXD_OT_GROUP_END : {
- $? ". grdepth = %lu", (unsigned long)(pctx->grdepth)
- if ((dk4_um_t)0UL < pctx->grdepth) {
- pctx->grdepth -= (dk4_um_t)1UL;
- $? ". grdepth = %lu", (unsigned long)(pctx->grdepth)
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax - Closing too many groups */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg,
- DK4_LL_ERROR, 111
- );
- }
- } break;
- case WXD_OT_GROUP_BEGIN : {
- $? ". grdepth = %lu", (unsigned long)(pctx->grdepth)
- if (DK4_UM_MAX > pctx->grdepth) {
- pctx->grdepth += (dk4_um_t)1UL;
- $? ". grdepth = %lu", (unsigned long)(pctx->grdepth)
- }
- else { $? "! too many groups"
- pctx->cc = -1;
- /* ERROR: Syntax - Opening too many groups */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg,
- DK4_LL_ERROR, 112
- );
- }
- } break;
- case WXD_OT_CONFIG : {
- wxdrd_process_config_option_line(pctx);
- } break;
- case WXD_OT_TEXT : {
- wxdrd_process_text_start_line(pctx);
- } break;
- case WXD_OT_POLYLINE : {
- wxdrd_process_polyline_start_line(pctx);
- } break;
- case WXD_OT_O_SPLINE : {
- wxdrd_process_ospline_start_line(pctx);
- } break;
- case WXD_OT_O_ARC : {
- wxdrd_process_oarc_start_line(pctx);
- } break;
- case WXD_OT_POLYGON : {
- wxdrd_process_polygon_start_line(pctx);
- } break;
- case WXD_OT_C_SPLINE : {
- wxdrd_process_cspline_start_line(pctx);
- } break;
- case WXD_OT_C_ARC : {
- wxdrd_process_carc_start_line(pctx);
- } break;
- case WXD_OT_CIRCLE : {
- wxdrd_process_circle_start_line(pctx);
- } break;
- case WXD_OT_ELLIPSE : {
- wxdrd_process_ellipse_start_line(pctx);
- } break;
- case WXD_OT_BOX : {
- wxdrd_process_box_start_line(pctx);
- } break;
- case WXD_OT_IMAGE : {
- wxdrd_process_image_start_line(pctx);
- } break;
- case WXD_OT_DOT_FILLED : {
- wxdrd_process_filled_dot_start_line(pctx);
- } break;
- case WXD_OT_DOT_WHITE : {
- wxdrd_process_white_dot_start_line(pctx);
- } break;
- default : {
- if (0 < wxdrd_check_version(pctx->drw, 1, 0)) {
- pctx->st = ST_RESUME;
- /* WARNING: Skipping object */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg,
- DK4_LL_WARNING, 113
- );
- }
- else { $? "! version number"
- pctx->cc = -1;
- /* ERROR: Syntax - Illegal object type */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg,
- DK4_LL_ERROR, 114
- );
- }
- } break;
- }
- }
- else { $? "! input type is not a number"
- pctx->cc = -1;
- /* ERROR: Syntax - Missing object type */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 115
- );
- }
- }
- else { $? "! missing object type"
- pctx->cc = -1;
- /* ERROR: Syntax - No object type */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 115
- );
- }
- $? "- wxdrd_process_object_line cc=%d", pctx->cc
-}
-
-
-
-/** Process details for a text.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_details_text(wxd_reader_context_t *pctx)
-{
- int32_t i32;
- int16_t i16;
- uint8_t u8;
- $? "+ wxdrd_process_details_text"
- wxdrd_input_u8(&(pctx->pobj->det.t.find), pctx, 0);
- if (1 == pctx->cc) {
- if (34 < pctx->pobj->det.t.find) {
- pctx->pobj->det.t.find = 34;
- /* WARNING: Font index corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 116
- );
- }
- }
- wxdrd_input_u16(&(pctx->pobj->det.t.fsz), pctx, 1);
- if (1 > pctx->pobj->det.t.fsz) {
- pctx->pobj->det.t.fsz = 1;
- /* WARNING: Font size corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 116
- );
- }
- wxdrd_input_u8(&u8, pctx, 2);
- if (1 == pctx->cc) {
- if (2 < u8) {
- u8 = 2;
- /* WARNING: Text align corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 117
- );
- }
- pctx->pobj->det.t.al = u8;
- }
- wxdrd_input_u8(&(pctx->pobj->det.t.fl), pctx, 3);
- wxdrd_input_i32(&i32, pctx, 4);
- pctx->pobj->det.t.x = (double)i32;
- wxdrd_input_i32(&i32, pctx, 5);
- pctx->pobj->det.t.y = (double)i32;
- wxdrd_input_i16(&i16, pctx, 6);
- pctx->pobj->det.t.a = (double)i16;
- if (1 == pctx->cc) {
- pctx->st = ST_TEXT_EXPORT;
- }
- $? "- wxdrd_process_details_text cc=%d", pctx->cc
-}
-
-
-
-/** Process details for a polyline.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_details_polyline(wxd_reader_context_t *pctx)
-{
- int32_t i32;
- $? "+ wxdrd_process_details_polyline"
- if (pctx->curp < pctx->pobj->det.p.n) {
- wxdrd_input_i32(&i32, pctx, 0);
- (pctx->pobj->det.p.p)[pctx->curp].x = (double)i32;
- wxdrd_input_i32(&i32, pctx, 1);
- (pctx->pobj->det.p.p)[pctx->curp].y = (double)i32;
- pctx->curp += 1U;
- if (pctx->curp >= pctx->pobj->det.p.n) {
- pctx->st = ST_OBJECT_LINE;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- $? "- wxdrd_process_details_polyline cc=%d", pctx->cc
-}
-
-
-
-/** Process details for a spline.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_details_spline(wxd_reader_context_t *pctx)
-{
- int32_t i32;
- $? "+ wxdrd_process_details_spline"
- if (pctx->curp < pctx->pobj->det.s.n) {
- wxdrd_input_i32(&i32, pctx, 0);
- (pctx->pobj->det.s.p)[pctx->curp].x = (double)i32;
- wxdrd_input_i32(&i32, pctx, 1);
- (pctx->pobj->det.s.p)[pctx->curp].y = (double)i32;
- wxdrd_input_double(&((pctx->pobj->det.s.p)[pctx->curp].s), pctx, 2);
- if (-1.0 > (pctx->pobj->det.s.p)[pctx->curp].s) {
- (pctx->pobj->det.s.p)[pctx->curp].s = -1.0;
- /* WARNING: s parameter corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 118
- );
- }
- if ( 1.0 < (pctx->pobj->det.s.p)[pctx->curp].s) {
- (pctx->pobj->det.s.p)[pctx->curp].s = 1.0;
- /* WARNING: s parameter corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 118
- );
- }
- pctx->curp += 1U;
- if (pctx->curp >= pctx->pobj->det.s.n) {
- pctx->st = ST_OBJECT_LINE;
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 59
- );
- }
- $? "- wxdrd_process_details_spline cc=%d", pctx->cc
-}
-
-
-
-/** Process details for an arc.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_details_arc(wxd_reader_context_t *pctx)
-{
- $? "+ wxdrd_process_details_arc"
- wxdrd_input_i32(&(pctx->pobj->det.a.x1), pctx, 0);
- wxdrd_input_i32(&(pctx->pobj->det.a.y1), pctx, 1);
- wxdrd_input_i32(&(pctx->pobj->det.a.x2), pctx, 2);
- wxdrd_input_i32(&(pctx->pobj->det.a.y2), pctx, 3);
- wxdrd_input_i32(&(pctx->pobj->det.a.x3), pctx, 4);
- wxdrd_input_i32(&(pctx->pobj->det.a.y3), pctx, 5);
- pctx->st = ST_OBJECT_LINE;
- wxdarc_calculation(
- &((((pctx->pobj)->det).a).x),
- &((((pctx->pobj)->det).a).y),
- &((((pctx->pobj)->det).a).r),
- &((((pctx->pobj)->det).a).a),
- &((((pctx->pobj)->det).a).b),
- &((((pctx->pobj)->det).a).d),
- (((pctx->pobj)->det).a).x1,
- (((pctx->pobj)->det).a).y1,
- (((pctx->pobj)->det).a).x2,
- (((pctx->pobj)->det).a).y2,
- (((pctx->pobj)->det).a).x3,
- (((pctx->pobj)->det).a).y3
- );
- $? "- wxdrd_process_details_arc cc=%d", pctx->cc
-}
-
-
-
-/** Process details for a circle
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_details_circle(wxd_reader_context_t *pctx)
-{
- int32_t i32;
- uint32_t u32;
- $? "+ wxdrd_process_details_circle"
- wxdrd_input_i32(&i32, pctx, 0);
- pctx->pobj->det.e.x = (double)i32;
- wxdrd_input_i32(&i32, pctx, 1);
- pctx->pobj->det.e.y = (double)i32;
- wxdrd_input_u32(&u32, pctx, 2);
- pctx->pobj->det.e.rx = (double)u32;
- if ((uint32_t)1UL > u32) {
- pctx->pobj->det.e.rx = 1.0;
- /* WARNING: Radius corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 119
- );
- }
- if ((uint32_t)80UL > u32) {
- /* WARNING: Very small radius */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 120
- );
- }
- pctx->pobj->det.e.ry = pctx->pobj->det.e.rx;
- pctx->st = ST_OBJECT_LINE;
- $? "- wxdrd_process_details_circle cc=%d", pctx->cc
-}
-
-
-
-/** Process details for an ellipse.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_details_ellipse(wxd_reader_context_t *pctx)
-{
- int32_t i32;
- uint32_t u32;
- int16_t i16;
- $? "+ wxdrd_process_details_ellipse"
- wxdrd_input_i32(&i32, pctx, 0);
- pctx->pobj->det.e.x = (double)i32;
- wxdrd_input_i32(&i32, pctx, 1);
- pctx->pobj->det.e.y = (double)i32;
- wxdrd_input_u32(&u32, pctx, 2);
- pctx->pobj->det.e.rx = (double)u32;
- if ((uint32_t)1UL > u32) {
- pctx->pobj->det.e.rx = 1.0;
- /* WARNING: X radius corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 119
- );
- }
- if ((uint32_t)80UL > u32) {
- /* WARNING: Unusual small x radius */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 120
- );
- }
- wxdrd_input_u32(&u32, pctx, 3);
- pctx->pobj->det.e.ry = (double)u32;
- if ((uint32_t)1UL > u32) {
- pctx->pobj->det.e.ry = 1.0;
- /* WARNING: Y radius corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 119
- );
- }
- if ((uint32_t)80UL > u32) {
- /* WARNING: Unusual small y radius */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 120
- );
- }
- wxdrd_input_i16(&i16, pctx, 4);
- pctx->pobj->det.e.a = (double)i16;
- pctx->st = ST_OBJECT_LINE;
- $? "- wxdrd_process_details_ellipse cc=%d", pctx->cc
-}
-
-
-
-/** Process details for a box.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_details_box(wxd_reader_context_t *pctx)
-{
- double dv;
- double dw;
- double dh;
- int32_t i32;
- uint32_t u32;
- $? "+ wxdrd_process_details_box"
- wxdrd_input_i32(&i32, pctx, 0);
- pctx->pobj->det.b.xl = (double)i32;
- wxdrd_input_i32(&i32, pctx, 1);
- pctx->pobj->det.b.xr = (double)i32;
- if (pctx->pobj->det.b.xl > pctx->pobj->det.b.xr) {
- dv = pctx->pobj->det.b.xl;
- pctx->pobj->det.b.xl = pctx->pobj->det.b.xr;
- pctx->pobj->det.b.xr = dv;
- }
- wxdrd_input_i32(&i32, pctx, 2);
- pctx->pobj->det.b.yb = (double)i32;
- wxdrd_input_i32(&i32, pctx, 3);
- pctx->pobj->det.b.yt = (double)i32;
- if (pctx->pobj->det.b.yb > pctx->pobj->det.b.yt) {
- dv = pctx->pobj->det.b.yb;
- pctx->pobj->det.b.yb = pctx->pobj->det.b.yt;
- pctx->pobj->det.b.yt = dv;
- }
- wxdrd_input_u32(&u32, pctx, 4);
- pctx->pobj->det.b.r = (double)u32;
- if ((uint32_t)0UL == u32) {
- pctx->pobj->det.b.r = -1.0;
- }
- dw = pctx->pobj->det.b.xr - pctx->pobj->det.b.xl;
- dh = pctx->pobj->det.b.yt - pctx->pobj->det.b.yb;
- if (dh < dw) {
- dw = dh;
- }
- if ((dw / 2.0) < pctx->pobj->det.b.r) {
- pctx->pobj->det.b.r = dw / 2.0;
- /* WARNING: Corner radius corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 119
- );
- }
- pctx->st = ST_OBJECT_LINE;
- $? "- wxdrd_process_details_box cc=%d", pctx->cc
-}
-
-
-
-/** Process details for an embedded image.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_details_image(wxd_reader_context_t *pctx)
-{
- int32_t i32;
- uint32_t u32;
- $? "+ wxdrd_process_details_image"
- wxdrd_input_u8(&(pctx->pobj->det.i.fl), pctx, 0);
- wxdrd_input_i8(&(pctx->pobj->det.i.r2g), pctx, 1);
- if ((int8_t)(-1) > pctx->pobj->det.i.r2g) {
- pctx->pobj->det.i.r2g = (int8_t)(-1);
- /* WARNING: RGB to gray method corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 121
- );
- }
- if (
- (int8_t)(DK4_CS_CONV_RGB_TO_GRAY_CHANNEL_BLUE) < pctx->pobj->det.i.r2g
- ) {
- pctx->pobj->det.i.r2g = (int8_t)(DK4_CS_CONV_RGB_TO_GRAY_CHANNEL_BLUE);
- /* WARNING: RGB to gray method corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 121
- );
- }
- wxdrd_input_i8(&(pctx->pobj->det.i.r2c), pctx, 2);
- wxdrd_input_i32(&i32, pctx, 3);
- pctx->pobj->det.i.x = (double)i32;
- wxdrd_input_i32(&i32, pctx, 4);
- pctx->pobj->det.i.y = (double)i32;
- wxdrd_input_u32(&u32, pctx, 5);
- pctx->pobj->det.i.w = (double)u32;
- wxdrd_input_u32(&u32, pctx, 6);
- pctx->pobj->det.i.h = (double)u32;
- if (1.0 > pctx->pobj->det.i.w) {
- pctx->cc = -1;
- /* ERROR: Invalid image width */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 122
- );
- }
- if (1.0 > pctx->pobj->det.i.h) {
- pctx->cc = -1;
- /* ERROR: Invalid image height */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 122
- );
- }
- pctx->st = ST_IMAGE_NAME;
- $? "- wxdrd_process_details_image cc=%d", pctx->cc
-}
-
-
-
-/** Process details for a dot.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_details_dot(wxd_reader_context_t *pctx)
-{
- int32_t i32;
- uint16_t u16;
- $? "+ wxdrd_process_details_dot"
- wxdrd_input_i32(&i32, pctx, 0);
- pctx->pobj->det.d.x = (double)i32;
- wxdrd_input_i32(&i32, pctx, 1);
- pctx->pobj->det.d.y = (double)i32;
- wxdrd_input_u16(&u16, pctx, 2);
- pctx->pobj->det.d.d = (double)u16;
- if (1.0 > pctx->pobj->det.d.d) {
- pctx->pobj->det.d.d = 1.0;
- /* WARNING: Dot diameter corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 123
- );
- }
- pctx->st = ST_OBJECT_LINE;
- $? "- wxdrd_process_details_dot cc=%d", pctx->cc
-}
-
-
-
-/** Process details for a white filled dot.
- @param pctx Context to modify.
-*/
-static
-void
-wxdrd_process_details_white_dot(wxd_reader_context_t *pctx)
-{
- int32_t i32;
- uint16_t u16;
- $? "+ wxdrd_process_details_white_dot"
- wxdrd_input_i32(&i32, pctx, 0);
- pctx->pobj->det.d.x = (double)i32;
- wxdrd_input_i32(&i32, pctx, 1);
- pctx->pobj->det.d.y = (double)i32;
- wxdrd_input_u16(&u16, pctx, 2);
- if ((uint16_t)0U == u16) {
- u16 = (uint16_t)1U;
- /* WARNING: Dot diameter corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 123
- );
- }
- pctx->pobj->det.d.d = (double)u16;
- wxdrd_input_u16(&u16, pctx, 3);
- pctx->pobj->lw = (double)u16;
- if (1.0 > pctx->pobj->lw) {
- pctx->pobj->lw = 1.0;
- /* WARNING: Dot line width corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 124
- );
- }
-#if 0
- if (pctx->pobj->det.d.d < pctx->pobj->lw) {
- pctx->pobj->det.d.d = pctx->pobj->lw;
- /* WARNING: Dot diameter corrected */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 123
- );
- }
-#endif
- pctx->st = ST_OBJECT_LINE;
- $? "- wxdrd_process_details_white_dot cc=%d", pctx->cc
-}
-
-
-
-/** Process details line from input file.
- @param pctx Context to modify.
- @param il Input line to process.
-*/
-static
-void
-wxdrd_process_details_line(wxd_reader_context_t *pctx, char *il)
-{
- $? "+ wxdrd_process_details_line"
- if (NULL != pctx->pobj) {
- pctx->nparts = dk4str8_tokenize(
- &(pctx->parts[0]), pctx->szparts, il, NULL, NULL
- );
- switch (pctx->pobj->ot) {
- case WXD_OT_TEXT : {
- if (7 == pctx->nparts) {
- wxdrd_process_details_text(pctx);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- } break;
- case WXD_OT_POLYLINE : case WXD_OT_POLYGON : {
- if (2 == pctx->nparts) {
- wxdrd_process_details_polyline(pctx);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- } break;
- case WXD_OT_O_SPLINE : case WXD_OT_C_SPLINE : {
- if (3 == pctx->nparts) {
- wxdrd_process_details_spline(pctx);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- } break;
- case WXD_OT_O_ARC : case WXD_OT_C_ARC : {
- if (6 == pctx->nparts) {
- wxdrd_process_details_arc(pctx);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- } break;
- case WXD_OT_CIRCLE : {
- if (3 == pctx->nparts) {
- wxdrd_process_details_circle(pctx);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- } break;
- case WXD_OT_ELLIPSE : {
- if (5 == pctx->nparts) {
- wxdrd_process_details_ellipse(pctx);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- } break;
- case WXD_OT_BOX : {
- if (5 == pctx->nparts) {
- wxdrd_process_details_box(pctx);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- } break;
- case WXD_OT_IMAGE : {
- if (7 == pctx->nparts) {
- wxdrd_process_details_image(pctx);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- } break;
- case WXD_OT_DOT_FILLED : {
- if (3 == pctx->nparts) {
- wxdrd_process_details_dot(pctx);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- } break;
- case WXD_OT_DOT_WHITE : {
- if (4 == pctx->nparts) {
- wxdrd_process_details_white_dot(pctx);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 96
- );
- }
- } break;
-
- }
- }
- else { $? "! BUG, no current object"
- pctx->cc = -1;
- /* BUG */
- }
- $? "- wxdrd_process_details_line cc=%d", pctx->cc
-}
-
-
-
-/** Process export text line.
- @param pctx Context to modify.
- @param il Input line to process.
-*/
-static
-void
-wxdrd_process_text_export(wxd_reader_context_t *pctx, char *il)
-{
- $? "+ wxdrd_process_text_export"
- if (0 < strlen(&(il[1]))) {
- pctx->pobj->det.t.t = dk4str8_dup(&(il[1]), NULL);
- if (NULL != pctx->pobj->det.t.t) {
- pctx->st = ST_TEXT_SCREEN;
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 125
- );
- }
- $? "- wxdrd_process_text_export cc=%d", pctx->cc
-}
-
-
-
-/** Process export text line.
- @param pctx Context to modify.
- @param il Input line to process.
-*/
-static
-void
-wxdrd_process_text_screen(wxd_reader_context_t *pctx, char *il)
-{
- $? "+ wxdrd_process_text_export"
- if (0 < strlen(&(il[1]))) {
- pctx->pobj->det.t.tsc = dk4str8_dup(&(il[1]), NULL);
- if (NULL != pctx->pobj->det.t.tsc) {
- pctx->st = ST_OBJECT_LINE;
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- else {
- pctx->pobj->det.t.tsc = NULL;
- pctx->st = ST_OBJECT_LINE;
- }
- $? "- wxdrd_process_text_export cc=%d", pctx->cc
-}
-
-
-
-/** Process the line containing the image file name.
- @param pctx Context to modify.
- @param il Input line to process.
-*/
-static
-void
-wxdrd_process_image_file_line(wxd_reader_context_t *pctx, char *il)
-{
- dk4str8_delnl(&(il[1]));
- if (0 < dk4str8_len(&(il[1]))) {
- pctx->pobj->det.i.fn = dk4str8_dup(&(il[1]), NULL);
- if (NULL != pctx->pobj->det.i.fn) {
- pctx->st = ST_OBJECT_LINE;
- }
- else {
- pctx->cc = -1;
- /* ERROR: Memory */
- dk4app_log_base1(pctx->app, DK4_LL_ERROR, 90);
- }
- }
- else {
- pctx->cc = -1;
- /* ERROR: Syntax */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 126
- );
- }
-}
-
-
-
-/** Process one non-comment line from input file.
- @param pctx Context to modify.
- @param il Input line to process.
-*/
-static
-void
-wxdrd_process_line(wxd_reader_context_t *pctx, char *il)
-{
- int sl = 1; /* Object start line */
- $? "+ wxdrd_process_line \"%!8s\"", il
- if (0 != is_whsp(il[0])) { sl = 0; }
- switch (pctx->st) {
- case ST_FIRSTLINE : {
- if (1 == sl) {
- wxdrd_process_filetype_line(pctx, il);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Not a wxd file */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 4
- );
- }
- } break;
- case ST_OBJECT_LINE : {
- if (1 == sl) {
- wxdrd_process_object_line(pctx, il);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Object start line expected! */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 127
- );
- }
- } break;
- case ST_DETAIL_LINE : {
- if (0 == sl) {
- wxdrd_process_details_line(pctx, il);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Details line expected! */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 128
- );
- }
- } break;
- case ST_TEXT_EXPORT : {
- if (0 == sl) {
- wxdrd_process_text_export(pctx, il);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Details line expected! */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 128
- );
- }
- } break;
- case ST_TEXT_SCREEN : {
- if (0 == sl) {
- wxdrd_process_text_screen(pctx, il);
- }
- else {
- /* WARNING: Details line expected! */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_WARNING, 128
- );
- pctx->st = ST_OBJECT_LINE;
- wxdrd_process_object_line(pctx, il);
- }
- } break;
- case ST_IMAGE_NAME : {
- if (0 == sl) {
- wxdrd_process_image_file_line(pctx, il);
- }
- else {
- pctx->cc = -1;
- /* ERROR: Details line expected! */
- dk4app_log_1(
- pctx->app, pctx->msg, pctx->sz_msg, DK4_LL_ERROR, 128
- );
- }
- } break;
- case ST_RESUME : {
- if (1 == sl) {
- pctx->st = ST_OBJECT_LINE;
- wxdrd_process_object_line(pctx, il);
- }
- } break;
- }
- $? "- wxdrd_process_line cc=%d", pctx->cc
-}
-
-
-
-int
-wxdrd_apply_file(
- wxd_drawing_t *drw,
- FILE *fipo,
- const dkChar *fn,
- wxd2lat_job_t *job
-)
-{
- char inbuf[WXD_LINE_LENGTH];
- wxd_reader_context_t ctx;
- char *parts[32];
- const dkChar *osf = NULL; /* Old source file */
- dk4_um_t osl = 0UL; /* Old source line number */
- int back = 0; /* Function result */
- $? "+ wxdrd_apply_file \"%!ds\"", fn
- /*
- Arguments check
- */
- if ((NULL == drw) || (NULL == fipo)) { goto finished; }
- /*
- Keep source file and line number
- */
- osf = dk4app_get_log_source_file(job->app);
- osl = dk4app_get_log_source_line(job->app);
- dk4app_set_log_source_file(job->app, fn);
- dk4app_set_log_source_line(job->app, 0UL);
- /*
- Initialize reader context. INITCONTEXT
- */
- DK4_MEMRES(&ctx,sizeof(wxd_reader_context_t));
- ctx.st = ST_FIRSTLINE;
- ctx.cc = 1;
- ctx.back = 1;
- ctx.parts = parts;
- ctx.szparts = DK4_SIZEOF(parts,DK4_PCHAR);
- ctx.nparts = 0;
- ctx.lineno = (dk4_um_t)0UL;
- ctx.grdepth = (dk4_um_t)0UL;
- $? ". grdepth = %lu", (unsigned long)(ctx.grdepth)
- ctx.fn = fn;
- ctx.app = job->app;
- ctx.msg = job->msg;
- ctx.sz_msg = job->sz_msg;
- ctx.drw = drw;
- ctx.pobj = NULL;
- ctx.curp = 0;
- wxd_object_initialize(&(ctx.tobj));
- /*
- Process input file
- */
- while (1 == ctx.cc) {
- if (NULL != fgets(inbuf, sizeof(inbuf), fipo)) {
- if (DK4_UM_MAX > ctx.lineno) { ctx.lineno += (dk4_um_t)1UL; }
- dk4app_set_log_source_line(job->app, ctx.lineno);
- dk4str8_delnl(inbuf);
- if ('#' != inbuf[0]) {
- wxdrd_process_line(&ctx, inbuf);
- }
- }
- else {
- ctx.cc = 0;
- }
- }
- if (0 > ctx.cc) {
- ctx.back = 0;
- }
- else {
- if (ST_OBJECT_LINE != ctx.st) {
- if (ST_TEXT_SCREEN == ctx.st) {
- /* WARNING: Expecting screen text */
- dk4app_log_1(
- ctx.app, ctx.msg, ctx.sz_msg, DK4_LL_WARNING, 129
- );
- }
- else {
- ctx.back = 0;
- /* ERROR: Syntax - Unexpected end of file */
- dk4app_log_1(
- ctx.app, ctx.msg, ctx.sz_msg, DK4_LL_ERROR, 130
- );
- }
- }
- }
- back = ctx.back;
- /*
- Restore source file and line number
- */
- dk4app_set_log_source_file(job->app, osf);
- dk4app_set_log_source_line(job->app, osl);
- finished:
- $? "- wxdrd_apply_file %d", back
- return back;
-}
-
-
-
-wxd_drawing_t *
-wxdrd_open_from_file(const dkChar *fn, wxd2lat_job_t *job)
-{
- wxd_drawing_t *back = NULL;
- FILE *fipo = NULL;
- const dkChar *osf = NULL;
- dk4_um_t osl = 0UL;
- int res = 0;
-
- osf = dk4app_get_log_source_file(job->app);
- osl = dk4app_get_log_source_line(job->app);
- dk4app_set_log_source_file(job->app, fn);
- dk4app_set_log_source_line(job->app, 0UL);
- back = wxdrd_open_empty();
- if (NULL != back) {
- fipo = dk4fopen_app(fn, dkT("r"), 0, job->app);
- if (NULL != fipo) {
- res = wxdrd_apply_file(back, fipo, fn, job);
- fclose(fipo);
- }
- else {
- /* ERROR: Failed to open file. Already reported. */
- }
- if (0 == res) {
- wxdrd_close(back);
- back = NULL;
- }
- }
- else {
- /* ERROR: Memory */
- dk4app_log_base1(job->app, DK4_LL_ERROR, 90);
- }
- dk4app_set_log_source_file(job->app, osf);
- dk4app_set_log_source_line(job->app, osl);
- return back;
-}
-
-
-
-
-/* vim: set ai sw=4 ts=4 : */
-