diff options
author | scuri <scuri> | 2008-10-17 06:10:33 +0000 |
---|---|---|
committer | scuri <scuri> | 2008-10-17 06:10:33 +0000 |
commit | 7b52cc13af4e85f1ca2deb6b6c77de9c95ea0dcf (patch) | |
tree | d0857278bde2eff784227c57dcaf930346ceb7ac /test/cdtest/list.c |
First commit - moving from LuaForge to SourceForge
Diffstat (limited to 'test/cdtest/list.c')
-rw-r--r-- | test/cdtest/list.c | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/test/cdtest/list.c b/test/cdtest/list.c new file mode 100644 index 0000000..a41c5bc --- /dev/null +++ b/test/cdtest/list.c @@ -0,0 +1,278 @@ +/*=========================================================================*/ +/* LIST.C 10/12/95 */ +/* Funcoes para a manipulacao da lista de primitivas. */ +/*=========================================================================*/ + +/*- Bibliotecas padrao usadas ---------------------------------------------*/ +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> + +/*- Inclusao das bibliotecas IUP e CD: ------------------------------------*/ +#include <iup.h> +#include <cd.h> +#include <cdiup.h> + +/*- Prototypes e declaracoes do CD Test: ----------------------------------*/ +#include "cdtest.h" + +/*- Contexto do CD Test (declarado em CDTEST.C): --------------------------*/ +extern tCTC ctgc; + +/*-------------------------------------------------------------------------*/ +/* Adiciona um ponto ao poligono temporario corrente. */ +/*-------------------------------------------------------------------------*/ +int newpolypoint(int x, int y) +{ + if (ctgc.num_points <= MAXPOINTS) { + ctgc.points[ctgc.num_points].x = x; + ctgc.points[ctgc.num_points].y = y; + ctgc.num_points++; + return TRUE; + } + else return FALSE; +} + +tList* newNode(void) +{ + tList *newnode = (tList *) malloc(sizeof (tList)); + newnode->next = NULL; + + if (ctgc.head != NULL) + { + tList *temp; + for(temp = ctgc.head; temp->next; temp = (tList *)temp->next); + temp->next = newnode; /* coloca o novo item no final da lista */ + } + else + ctgc.head = newnode; + + return newnode; +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona uma linha/rect/caixa a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ + +static int newtLB(int x1, int y1, int x2, int y2, int type) +{ + tList* newnode = newNode(); + + newnode->type = type; + newnode->par.lineboxpar.x1 = x1; + newnode->par.lineboxpar.x2 = x2; + newnode->par.lineboxpar.y1 = y1; + newnode->par.lineboxpar.y2 = y2; + newnode->par.lineboxpar.foreground = ctgc.foreground; + newnode->par.lineboxpar.background = ctgc.background; + newnode->par.lineboxpar.line_style = ctgc.line_style; + newnode->par.lineboxpar.line_width = ctgc.line_width; + newnode->par.lineboxpar.write_mode = ctgc.write_mode; + newnode->par.lineboxpar.line_cap = ctgc.line_cap; + newnode->par.lineboxpar.line_join = ctgc.line_join; + newnode->par.lineboxpar.interior_style = ctgc.interior_style; + newnode->par.lineboxpar.back_opacity = ctgc.back_opacity; + newnode->par.lineboxpar.hatch = ctgc.hatch; + + return TRUE; +} + +int newline(int x1, int y1, int x2, int y2) +{ + return newtLB(x1, y1, x2, y2, LINE); +} + +int newrect(int x1, int x2, int y1, int y2) +{ + return newtLB(x1, y1, x2, y2, RECT); +} + +int newbox(int x1, int x2, int y1, int y2) +{ + return newtLB(x1, y1, x2, y2, BOX); +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona um arc/sector/chord a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +static int newtAS(int xc, int yc, int w, int h, double angle1, double angle2, int type) +{ + tList* newnode = newNode(); + + newnode->type = type; + newnode->par.arcsectorpar.xc = xc; + newnode->par.arcsectorpar.yc = yc; + newnode->par.arcsectorpar.w = w; + newnode->par.arcsectorpar.h = h; + newnode->par.arcsectorpar.angle1 = angle1; + newnode->par.arcsectorpar.angle2 = angle2; + newnode->par.arcsectorpar.foreground = ctgc.foreground; + newnode->par.arcsectorpar.background = ctgc.background; + newnode->par.arcsectorpar.line_style = ctgc.line_style; + newnode->par.arcsectorpar.line_width = ctgc.line_width; + newnode->par.arcsectorpar.line_cap = ctgc.line_cap; + newnode->par.arcsectorpar.line_join = ctgc.line_join; + newnode->par.arcsectorpar.write_mode = ctgc.write_mode; + newnode->par.arcsectorpar.interior_style = ctgc.interior_style; + newnode->par.arcsectorpar.back_opacity = ctgc.back_opacity; + newnode->par.arcsectorpar.hatch = ctgc.hatch; + + return TRUE; +} + +int newarc(int xc, int yc, int w, int h, double angle1, double angle2) +{ + return newtAS(xc, yc, w, h, angle1, angle2, ARC); +} + +int newsector(int xc, int yc, int w, int h, double angle1, double angle2) +{ + return newtAS(xc, yc, w, h, angle1, angle2, SECTOR); +} + +int newchord(int xc, int yc, int w, int h, double angle1, double angle2) +{ + return newtAS(xc, yc, w, h, angle1, angle2, CHORD); +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona um pixel a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +int newpixel(int x, int y) +{ + tList* newnode = newNode(); + + newnode->type = PIXEL; + newnode->par.pixelpar.x = x; + newnode->par.pixelpar.y = y; + newnode->par.pixelpar.foreground = ctgc.foreground; + newnode->par.pixelpar.write_mode = ctgc.write_mode; + + return TRUE; +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona um metafile a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +int newmetafile(char *filename, cdContext* ctx) +{ + tList* newnode = newNode(); + + newnode->type = META; + newnode->par.metapar.filename = (char *) malloc(strlen(filename) + 1); + newnode->par.metapar.ctx = ctx; + strcpy(newnode->par.metapar.filename, filename); + + return TRUE; +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona uma marca a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +int newmark(int x, int y, int mark_size) +{ + tList* newnode = newNode(); + + newnode->type = MARK; + newnode->par.markpar.x = x; + newnode->par.markpar.y = y; + newnode->par.markpar.mark_size = mark_size; + newnode->par.markpar.foreground = ctgc.foreground; + newnode->par.markpar.write_mode = ctgc.write_mode; + newnode->par.markpar.mark_type = ctgc.mark_type; + + return TRUE; +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona um texto a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +int newtext(int x, int y, char *s) +{ + tList* newnode = newNode(); + + newnode->type = TEXT; + newnode->par.textpar.x = x; + newnode->par.textpar.y = y; + newnode->par.textpar.foreground = ctgc.foreground; + newnode->par.textpar.background = ctgc.background; + newnode->par.textpar.font_style = ctgc.font_style; + newnode->par.textpar.font_typeface = ctgc.font_typeface; + newnode->par.textpar.font_size = ctgc.font_size; + newnode->par.textpar.write_mode = ctgc.write_mode; + newnode->par.textpar.back_opacity = ctgc.back_opacity; + newnode->par.textpar.text_alignment = ctgc.text_alignment; + newnode->par.textpar.text_orientation = ctgc.text_orientation; + newnode->par.textpar.s = (char *) malloc(strlen(s) + 1); + strcpy(newnode->par.textpar.s, s); + + return TRUE; +} + +/*-------------------------------------------------------------------------*/ +/* Adiciona um poligono a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +int newpoly(void) +{ + tList* newnode = newNode(); + + newnode->type = POLY; + newnode->par.polypar.foreground = ctgc.foreground; + newnode->par.polypar.background = ctgc.background; + newnode->par.polypar.line_style = ctgc.line_style; + newnode->par.polypar.line_width = ctgc.line_width; + newnode->par.polypar.write_mode = ctgc.write_mode; + newnode->par.polypar.fill_mode = ctgc.fill_mode; + newnode->par.polypar.line_cap = ctgc.line_cap; + newnode->par.polypar.line_join = ctgc.line_join; + newnode->par.polypar.poly_mode = ctgc.poly_mode; + newnode->par.polypar.interior_style = ctgc.interior_style; + newnode->par.polypar.back_opacity = ctgc.back_opacity; + newnode->par.polypar.hatch = ctgc.hatch; + newnode->par.polypar.points = (tPoint *) malloc(ctgc.num_points*sizeof(tPoint)); + newnode->par.polypar.num_points = ctgc.num_points; + memcpy(newnode->par.polypar.points, ctgc.points, ctgc.num_points*sizeof(tPoint)); + newnode->next = NULL; + + return TRUE; +} + +/*-------------------------------------------------------------------------*/ +/* Mata a lista de primitivas. */ +/*-------------------------------------------------------------------------*/ +void dellist(void) +{ + tList *killer, *back; + + for (killer = ctgc.head; killer; killer = back) { + back = (tList *) (killer->next); + if (killer->type == TEXT) { /* se for TEXT... */ + free(killer->par.textpar.s); /* ...mata a string */ + } + if (killer->type == POLY) { /* se for POLY... */ + free(killer->par.polypar.points); /* ...mata os pontos */ + } + free(killer); + } + ctgc.head = NULL; +} + +/*-------------------------------------------------------------------------*/ +/* Mata a ultima primitiva. */ +/*-------------------------------------------------------------------------*/ +void dellast(void) +{ + tList *killer; + + if (ctgc.head == NULL ) return; + else if (ctgc.head->next == NULL) { + free(ctgc.head); + ctgc.head = NULL; + } + else { + for (killer = ctgc.head; killer->next->next; killer = killer->next); + free(killer->next); + killer->next = NULL; + } +} |