/* * inc/gks_ifunc.h * Include file with low level function declarations * Microsoft C 5.0 - Turbo C 2.0 - VAX C 3.0 * Grupo de Tecnologia em Computacao Grafica - PUC/RIO * 23 Ago 91 */ #ifndef _GKS_IFUNC_ #define _GKS_IFUNC_ #include Stddef #include Stdio #ifndef _GKS_TYPE_ #include Gks_type #endif #ifndef _GKS_TAB_ #include Gks_tab #endif #ifndef _PARAMETRO_ #include Parametr #endif /* funcao minmax - limita o segundo parametro entre o primeiro e o terceiro */ #define minmax(m,v,M) (((v)<(m))?(m):(((v)>(M))?(M):(v))) /* map to a valid value ( [-min..-1,1..mp] ) */ #define MAPVALID(n,ne,mp,d) \ ((((n)>(mp))||((n)==0)||((n)<-((ne)-(mp))))\ ?((d)-1)\ :(((n)<0)?(-(n)+(mp)-1):((n)-1))) /* envia a um driver primitivas de saida e atributos */ void _gks_puc_driver_caller ( int, Gwsl *, const Gdrvparam * ); /* distribui comandos */ void _gks_puc_dispat ( int, const Gdrvparam *); /* atualiza atributos do driver */ void _gks_puc_update_driver ( Gwsl * ); /* faz o tratamento necessario a atualizacao de uma wk viewport */ void _gks_puc_wk_viewport ( Gwsl * ); /* faz o tratamento necessario a atualizacao de uma wk window */ void _gks_puc_wk_window ( Gwsl * ); /* verifica se a rotina pode ser chamada pelo usuario */ Gerror _gke_check ( Gint ); /* tratamento de erro generico */ Gerror _gke_error ( Gint funcname, /* GKS function number */ Gerror errnum); /* error number */ /* calcula o modulo de um vetor em wc */ Gfloat _gks_puc_cal_mvt ( Gwpoint ); /* calcula o modulo de um vetor normalizado */ Gfloat _gks_puc_cal_mvtn ( Gnpoint ); /* calcula os parametros para executar o mapeamento window - viewport */ void _gks_puc_cal_par_norm ( void ); /* mapeia um conjunto de pontos em wc para o espaco ndc */ void _gks_puc_map_wc_to_ndc ( Gint , /* number of points to be converted */ const Gwpoint *, /* point array wc */ Gnpoint *); /* point array ndc */ /* mapeia um conjunto de pontos em ndc para o espaco wc */ void _gks_puc_map_ndc_to_wc ( Gint , /* number of points to be converted */ const Gnpoint *, /* point array ndc */ Gwpoint *); /* point array wc */ /* transforma um comprimento especificado em wc para um comprimento em ndc */ Gnpoint _gks_puc_map_cwc_to_cndc ( Gwpoint );/* point to be converted */ /* transforma um comprimento especificado em ndc para um comprimento em wc */ Gwpoint _gks_puc_map_cndc_to_cwc ( Gnpoint );/* point to be converted */ /* distorce os vetores charup e charbase pela aplicacao do mapeamento window - viewport */ void _gks_puc_cal_rot_texto ( Gnpoint * , Gnpoint * ); /* calcula os parametros para executar o mapeamento wkwindow - wkviewport */ void _gks_puc_cal_par_trwk ( Gwsl * ); /* mapeia um conjunto de pontos em ndc para o espaco dc */ void _gks_puc_map_ndc_to_dc ( Gwsl *, /* pointer to workstation state list */ Gint , /* number of points to be converted */ const Gnpoint *, /* point array ndc */ Gipoint *); /* point array dc */ /* mapeia um conjunto de pontos em dc para o espaco ndc */ void _gks_puc_map_dc_to_ndc ( Gwsl *, /* pointer to workstation state list */ Gint , /* number of points to be converted */ const Gipoint *, /* point array dc */ Gnpoint *); /* point array ndc */ /* transforma um comprimento especificado em ndc para um comprimento em dc */ Gipoint _gks_puc_map_cndc_to_cdc ( Gwsl *, Gnpoint );/* point to be converted */ /* transforma um comprimento especificado em dc para um comprimento em ndc */ Gnpoint _gks_puc_map_cdc_to_cndc ( Gwsl *, Gipoint );/* point to be converted */ /* calcula a intersecao do retangulo de clipping corrente com a wkwindow */ void _gks_puc_cal_rec_clip ( Gwsl * ); /* converte limite em dc (metros) para limite em rc (raster) */ void _gks_puc_map_ldc_to_lrc ( Gwsl *, Gdlimit , Gipoint *, Gipoint * ); /* redraw all segments */ void _gks_puc_redraw_all_segs ( Gwsl *, Gtoggle ); /* redraw all segments on workstation - interna */ void _gks_puc_redraw_int ( Gwsl *, Gwdt * ); /* update workstation - interna */ void _gks_puc_update_wk ( Gwsl *, Gwdt *, Gregen ); /* malloc - atualizando */ void *_gks_puc_malloc ( Gint , size_t ); /* malloc - atualizando e segura */ void *_gks_puc_safe_malloc ( Gint , size_t ); /* free - atualizando */ void _gks_puc_free ( void * ); /* realloc - nova */ void *_gks_puc_new_realloc ( void *, size_t ); /* realloc - atualizando */ void *_gks_puc_realloc ( Gint , void *, size_t ); /* realloc - atualizando e segura */ void *_gks_puc_safe_realloc ( Gint , void *, size_t ); /* string duplicate - atualizando */ char *_gks_puc_strdup ( Gint , const char * ); /* string duplicate - atualizando e segura */ char *_gks_puc_safe_strdup ( Gint , const char * ); /* file search and open - procura o arquivo pela variavel GKSDIR */ FILE *_gks_puc_search_file ( const char *, const char * ); /* Tratamento de erro padrao para funcoes de input */ Gerror _gks_puc_inp_err( Gint , /* nome da funcao */ Gws , /* identificador da workstation */ Gidevno , /* identificador do dispositivo de entrada */ Gtoggle , /* indica se testa erro 37 ou 38 */ Giclass , /* classe do dispositivo de entrada */ Gwsl ** ); /* ponteiro para ws */ /* pos-multiplica um vetor 2x3 (terceira componente = 1) por uma matriz 2x3 */ void _gks_puc_mult_23 ( const Gsegtran *, Gnpoint, Gnpoint * ); /* pos-multiplica um vetor 2x2 por uma matriz 2x2 */ void _gks_puc_mult_22 ( const Gsegtran *, Gnpoint, Gnpoint * ); /* identifica um retangulo */ Gint _gks_puc_e_ret ( Gipoint * ); #endif