Subversion Repositories wimsdev

Rev

Rev 18558 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #include <assert.h>
  2. #include "../../Lib/libwims.h"
  3. #define MAX_INT 128
  4. #define MAX_BUFFER   65536
  5. #define MAX_DRAGSTUFF 27
  6. #define MAX_MULTI_PRIMITIVES 29
  7. /* wims : MAX_FWRITE_SIZE 64*1024=65536 == 2*MAX_BUFFER */
  8. #define MAX_COLOR_STRING 32
  9. #define MAX_SLIDERS  16
  10. /* the commmand / keyword name collection */
  11. typedef enum {
  12.   COMMENT=-2,END,SIZE=1,XRANGE,YRANGE,FONTFAMILY,MATHML,INPUT,TEXTAREA,LINEWIDTH,POLYLINE,POLY,
  13.   SEGMENT=15,LINE,DLINE,RECT,ARC,NEW,STRING,STRINGUP,COPY,COPYRESIZED,TRANSPARENT,POINT,CIRCLE,
  14.   GETPIXEL,SQUARE,ELLIPSE=31,ROTATE,TYPE,QUALITY,CSS,POINTS,TRIANGLE,HLINE,VLINE,GRID,ZOOM,ARROW,
  15.   DARROW,AXIS,FONTSIZE=46,CURVE=50,PLOTSTEPS,TRANGE=53,MOUSE_PRECISION,FLY_TEXT,FLY_TEXTUP,BGIMAGE,
  16.   DASHED,PARALLEL,LATTICE,OPACITY,AXIS_NUMBERING,RAYS,OUTPUT,CLOCK,STYLE,USERDRAW,MOUSE,AUDIO,
  17.   AUDIOOBJECT,STOP,RESTART,FILLCOLOR,CUBE,CLEARBUTTON,ONCLICK,CROSSHAIR,CROSSHAIRS,BLINK,DASHTYPE,
  18.   HTML,CROSSHAIRSIZE,ARROWHEAD,DRAG,HTTP,SLIDER,CLICKTILE=88,CLICKTILE_COLORS,TRANSLATION,
  19.   KILLTRANSLATION,ARROW2,DARROW2,SVGCODE=95,ROUNDRECT,HATCHFILL,PATTERNFILL,DIAMONDFILL,DOTFILL,
  20.   GRIDFILL,IMAGEFILL,FILL,FILLED,XYLOGSCALE,XLOGSCALE,YLOGSCALE,XLOGBASE,INTOOLTIP,REPLYFORMAT,
  21.   VIDEO,BGCOLOR,FLOODFILL,FILLTOBORDER,SETPIXEL,PIXELS,PIXELSIZE,X_AXIS_STRINGS=121,Y_AXIS_STRINGS,
  22.   FONTCOLOR,PIECHART,LEGEND,BARCHART,LINEGRAPH,STROKECOLOR,XLABEL,YLABEL,LEGENDCOLORS,ANIMATE,STATUS,
  23.   SNAPTOGRID,XSNAPTOGRID,YSNAPTOGRID,USERINPUT_XY,SGRAPH=139,YLOGBASE,AFFINE,KILLAFFINE,LEVELCURVE,
  24.   JSMATH,TRACE_JSCURVE,SETLIMITS,JSCURVE,CENTERSTRING,MOUSEX,MOUSEY,MOUSE_DEGREE,MOUSE_DISPLAY,XUNIT,
  25.   YUNIT,KILLSLIDER,ANGLE,USERINPUT_FUNCTION,USERINPUT,HALFLINE,FUNCTION_LABEL,SEGMENTS,ARROWS,
  26.   CIRCLES,ARROWS2,LINES,RECTS,HALFLINES,HLINES,VLINES,ROUNDRECTS,BEZIER,SNAPTOPOINTS,GROUP,
  27.   SNAPTOFUNCTION=175,MULTIDRAW,MULTILINEWIDTH,MULTISTROKECOLORS,MULTISTROKEOPACITY,MULTIFILLCOLORS,
  28.   MULTIFILLOPACITY,MULTIFILL,MULTILABEL,MULTIDASH,MULTISNAPTOGRID,MULTIUSERINPUT,PROTRACTOR,RULER,
  29.   TRIANGLES, POPUP,X_AXIS_STRINGS_UP,CURSOR,XERRORBARS,YERRORBARS, BOXPLOTDATA=196,USERBOXPLOT,
  30.   USERBOXPLOTDATA, ROTATION_CENTER,KILLROTATE,CANVASTYPE, NOXAXIS,NOYAXIS,BOXPLOT,COLORPALETTE,
  31.   FILLALL,XYOFFSET, XOFFSET,YOFFSET,CENTERED,RESETOFFSET,TEXTFILL,FILLPATTERN,NUMBERLINE,ELLIPSES,
  32.   IMAGEPALETTE, CURVEDARROW2,CURVEDARROW,CURVEDARROWS,CURVEDARROWS2,LATEX,ALLOW_DUPLICATES=223,
  33.   LINEAR,KILLLINEAR, OBABEL,CHEMTEX,NORESET,ARCARROW,KILL,RANGE,NEWRANGE,RESET,
  34.   HYPCIRCLES,HYPSEGMENTS,HYPLINES,HYPPOLY,HYPRAYS,STROKEOPACITY,FILLOPACITY} keyword;
  35.  
  36. /* the js_function[] dcollection : js-code without configurable argumens see canvasutil.c  */
  37. enum {DRAW_GRID, DRAW_CROSSHAIRS,DRAW_GRIDFILL,DRAW_XML,DRAW_ARCS,DRAW_LATTICE,DRAW_INPUTS,
  38.   DRAW_TEXTAREAS,DRAW_HTTP,DRAW_AUDIO,DRAW_VIDEO,DRAW_DOTFILL,DRAW_HATCHFILL,DRAW_IMAGEFILL,
  39.   DRAW_FLOODFILL,DRAW_FILLTOBORDER,DRAW_PIXELS,DRAW_LINES,DRAW_PIECHART,DRAW_CLOCK,DRAW_EXTERNAL_IMAGE,
  40.   DRAW_DIAMONDFILL,DRAW_SGRAPH,DRAW_YLOGSCALE,DRAW_XLOGSCALE,DRAW_XYLOGSCALE,DRAW_CENTERSTRING,
  41.   DRAW_JSFUNCTION,DRAW_BEZIER,DRAW_BOXPLOT,DRAW_JSBOXPLOT,DRAW_NUMBERLINE,JS_FIND_ANGLE,DRAW_TEXTFILL,
  42.   INTERACTIVE,JS_ROTATE_MOUSE,JS_TRANSFORM_MOUSE,DRAW_FILL_PATTERN,JS_ZOOM,DRAG_AND_ZOOM,
  43.   USERDRAW_AND_ZOOM,JS_RAWMATH,JS_LOAD_IMAGE,JS_SAFE_EVAL,JS_PLOT,JS_MATH,DRAW_TEXTS,
  44.   DRAG_EXTERNAL_IMAGE,ADD_USER_INPUTS,JSPLOT_AND_ZOOM,JS_ARROWHEAD,DRAW_SUBSUP,MAX_JS_FUNCTIONS};
  45. /*  end js_function[]  */
  46. /* default canvasses, eg png images xsize x ysize */
  47. enum{EXTERNAL_IMAGE_CANVAS, /* this is created first !!! in order to draw on it */
  48.   BG_CANVAS,STATIC_CANVAS,MOUSE_CANVAS,GRID_CANVAS,DRAG_CANVAS,DRAW_CANVAS,TEXT_CANVAS,CLOCK_CANVAS,ANIMATE_CANVAS,TRACE_CANVAS,
  49.   JSPLOT_CANVAS=100,
  50.   /* JSPLOT_canvas will be increased with every added inputfield...should not conflict with other images*/
  51.   FILL_CANVAS=200,
  52.   /* will be increase with every fill */
  53.   USERDRAW_JSPLOT=300,
  54.   /* USERDRAW_JSPLOT will be increased with every added inputfield...should not conflict with other images*/
  55.   CLICKFILL_CANVAS=400, /* will be increase with every click fill */
  56.   BOXPLOT_CANVAS=500, /* will increase with every new boxplot */
  57.   NUMBERLINE_CANVAS=600,
  58.   MULTIDRAW_CANVAS=1000, /* + >25 draw types... 1001=points*/
  59.   ZOOM_CANVAS=1100,
  60.   STATIC_IMAGE_CANVAS=700};
  61.  
  62. #ifndef STD_H
  63. #define STD_H
  64.  
  65. #ifndef bool
  66. #define bool            char
  67. #endif
  68. #ifndef TRUE
  69. #define TRUE            1
  70. #endif
  71. #ifndef FALSE
  72. #define FALSE           0
  73. #endif
  74.  
  75. #endif
  76. void add_to_buffer(char *tmp); /* add tmp_buffer to the buffer */
  77. void check_string_length(int length);
  78. extern void *tmp_buffer;
  79.  
  80. void rotate(int num,double angle,double center[],int incr);
  81. void transform(int num,int incr);
  82. void add_read_canvas(int type_reply,int reply_precision);
  83. void add_javascript_function();
  84. void add_drag_code(int canvas_cnt,int use_dragstuff, int stuff[],int reply_format);
  85. void add_trace_js_mouse(int canvas_cnt,char *stroke_color,char *jsmath,int font_size,double stroke_opacity,int line_width,int crosshair_size,char *css_class);
  86. void add_setlimits(int font_size,char *css_class);
  87. void add_safe_eval();
  88. void add_calc_y(char *jsmath,int font_size,char *css_class);
  89. void add_slider(int anim);
  90. void add_slider_display(int precision,int font_size,char *font_color,double stroke_opacity);
  91. void add_xyslider(double v1,double v2,int width,int height,char *use_slider,char *label,int slider_cnt,char *stroke_color,char *fill_color,int line_width,double opacity,char *font_family,char *font_color,int use_slider_display);
  92. void *my_newmem(size_t size);
  93. void canvas_error(char *msg);
  94. char *eval(int xsize,int ysize,char *fun,double xmin,double xmax,double ymin,double ymax,int xsteps,int precision,double rotationcenter[]);
  95. char *eval_parametric(int xsize,int ysize,char *fun1,char* fun2,double xmin,double xmax,double ymin,double ymax, double tmin,double tmax,int plotsteps,int precision,double rotationcenter[]);
  96. char *eval_levelcurve(int xsize,int ysize,char *fun,double xmin,double xmax,double ymin,double ymax,int plotsteps,int precision,double level);
  97. char *getMML(char *tex);
  98. char *getSVGMOL(char *inputtype,char *keys);
  99. char *data2js_array(int data[],int len);
  100. char *double_xy2js_array(double xy[],int len,int decimals);
  101. char *doubledata2js_array(double data[],int len, int decimals);
  102. char *list2js_array(char *list,char *s);
  103. int find_number_of_digits(int i);
  104. int x2px(double x);
  105. int y2px(double y);
  106. char *str_replace(const char *str, const char *old, const char *new);
  107. void add_clear_button(char *css_class,char *button_text);
  108. void add_js_mouse(int canvas_cnt,int precision,char *stroke_color,int font_size,double stroke_opacity,int type);
  109. void add_js_filltoborder(int canvas_type);
  110. void add_js_multidraw(char *draw_types,char *button_style,int use_offset,int use_controls,int crosshair_size,int use_zoom);
  111. extern void add_js_userdraw(char *draw_type,char *stroke_color,double stroke_opacity,int crosshair_size,int arrow_head,int use_offset, char *css_class,int use_snap,int canvas_type,int use_filled,char * fill_color,double fill_opacity,int line_width,char *font_family);
  112. /* these should  be harmonized via switch key !!*/
  113. void add_input_circle(int type,int num);
  114. void add_input_segment(int num);
  115. void add_input_demiline(int num);
  116. void add_input_line(int num);
  117. void add_input_polyline();
  118. void add_input_crosshair(int num);
  119. void add_input_arrow(int num);
  120. void add_input_xy(int font_size,char *css_class);
  121. void add_input_xyr(int font_size,char *css_class);
  122. void add_input_x1y1x2y2(int font_size,char *css_class);
  123. void add_textarea_xy(char *css_class);
  124. void add_js_zoom_buttons(char *stroke_color,double stroke_opacity);
  125. void add_js_tooltip(char *tooltip_text,char *bgcolor);
  126. void add_js_popup(char *getfile_cmd);
  127. void add_input_jsfunction(char *css_class,char *input_label,int input_cnt,char *stroke_color,float stroke_opacity,int line_width,int use_dashed,int dashtype0,int dashtype1,int font_size);
  128. void add_js_protractor(int type,double xcenter,double ycenter,int size,char *font,char *stroke_color,double stroke_opacity,char *fill_color,double fill_opacity,int line_width,int use_scale,int dynamic,int use_snap);
  129. void add_js_ruler(double x,double y,double sizex,double sizey,char *font,char *stroke_color,double stroke_opacity,char *fill_color,double fill_opacity,int line_width,int dynamic,int use_snap);
  130. void add_color_palette(char *css_class);
  131. void add_js_images(int use_offset,int snap);
  132. int count_substring(char* string, char* substring);
  133. extern int NUMBER_OF_COLORNAMES;
  134. extern struct colors { char *hex; char *name; char *rgb; } colors[];
  135. extern int js_function[MAX_JS_FUNCTIONS];
  136. extern int reply_format;
  137. extern int xsize;
  138. extern int ysize;
  139. extern unsigned int canvas_root_id;
  140. extern int user_input_xy;
  141. extern char *css_class;
  142. extern int font_size;
  143. extern char *draw_type;
  144. extern char *function_label;
  145. extern int input_cnt;
  146. extern int use_dashed;
  147. extern int dashtype[];
  148. extern int jsplot_cnt;
  149. extern int linegraph_cnt;
  150. extern int barchart_cnt;
  151. extern int legend_cnt;
  152. extern int use_axis;
  153. extern int use_axis_numbering;
  154.  
  155. extern FILE *js_include_file;
  156. /* used multidraw primitives : identifier in canvasmultidraw.c is index of this array
  157. static char multidraw_primitives[MAX_MULTI_PRIMITIVES][32] = {"point","points","circle","circles",
  158. "line","lines","segment","segments",
  159. "arrow","arrows","triangle","triangles",
  160. "closedpoly","text","rect","rects",
  161. "poly","polys","parallelogram","parallelograms",
  162. "images","curvedarrow","curvedarrows","curvedarrow2","curvedarrows2",
  163. "crosshair","crosshairs"};
  164. size of words "point","points",... == 6,7,..
  165. static int multidraw_primitives_length[MAX_MULTI_PRIMITIVES] = {7,6,8,7,6,5,9,8,7,6,10,9,11,5,6,5,6,5,15,14,7,14,
  166. 13,13,12,10,11};
  167. */
  168.