long parse_color_name() { char *string; long color = -2; /* Terminal drivers call this after seeing a "background" option */ if (almost_equals(c_token,"rgb$color") && almost_equals(c_token-1,"back$ground")) c_token++; if ((string = try_to_get_string())) { int iret; iret = lookup_table_nth(pm3d_color_names_tbl, string); if (iret >= 0) color = pm3d_color_names_tbl[iret].value; else if (string[0] == '#') iret = sscanf(string,"#%lx",&color); else if (string[0] == '0' && (string[1] == 'x' || string[1] == 'X')) iret = sscanf(string,"%lx",&color); free(string); if (color == -2) int_error(c_token, "unrecognized color name and not a string \"#AARRGGBB\" or \"0xAARRGGBB\""); } else { color = int_expression(); } return (unsigned int)(color); }
long parse_color_name() { char *string; long color = -1; if (almost_equals(c_token,"rgb$color")) c_token++; if ((string = try_to_get_string())) { color = lookup_table_nth(pm3d_color_names_tbl, string); if (color >= 0) color = pm3d_color_names_tbl[color].value; else sscanf(string,"#%lx",&color); free(string); } if (color == -1) int_error(c_token, "not recognized as a color name or a string of form \"#RRGGBB\""); return (unsigned int)(color); }
void edf_filetype_function(void) { FILE *fp; char *header = NULL; int header_size = 0; char *p; int k; /* open (header) file */ fp = loadpath_fopen(df_filename, "rb"); if (!fp) os_error(NO_CARET, "Can't open data file \"%s\"", df_filename); /* read header: it is a multiple of 512 B ending by "}\n" */ while (header_size == 0 || strncmp(&header[header_size-2],"}\n",2)) { int header_size_prev = header_size; if (header_size > 12*512) /* protection against indefinite loop */ os_error(NO_CARET, "Damaged EDF header of %s: not multiple of 512 B.\n", df_filename); header_size += 512; if (!header) header = gp_alloc(header_size+1, "EDF header"); else header = gp_realloc(header, header_size+1, "EDF header"); header[header_size_prev] = 0; /* protection against empty file */ fread(header+header_size_prev, 512, 1, fp); header[header_size] = 0; /* end of string: protection against strstr later on */ } fclose(fp); /* make sure there is a binary record structure for each image */ if (df_num_bin_records < 1) df_add_binary_records(1-df_num_bin_records, DF_CURRENT_RECORDS); /* otherwise put here: number of images (records) from this file */ if ((p = edf_findInHeader(header, "EDF_BinaryFileName"))) { int plen = strcspn(p, " ;\n"); df_filename = gp_realloc(df_filename, plen+1, "datafile name"); strncpy(df_filename, p, plen); df_filename[plen] = '\0'; if ((p = edf_findInHeader(header, "EDF_BinaryFilePosition"))) df_bin_record[0].scan_skip[0] = atoi(p); else df_bin_record[0].scan_skip[0] = 0; } else df_bin_record[0].scan_skip[0] = header_size; /* skip header */ /* set default values */ df_bin_record[0].scan_dir[0] = 1; df_bin_record[0].scan_dir[1] = -1; df_bin_record[0].scan_generate_coord = TRUE; df_bin_record[0].cart_scan[0] = DF_SCAN_POINT; df_bin_record[0].cart_scan[1] = DF_SCAN_LINE; df_extend_binary_columns(1); df_set_skip_before(1,0); df_set_skip_after(1,0); df_no_use_specs = 1; use_spec[0].column = 1; /* now parse the header */ if ((p = edf_findInHeader(header, "Dim_1"))) df_bin_record[0].scan_dim[0] = atoi(p); if ((p = edf_findInHeader(header, "Dim_2"))) df_bin_record[0].scan_dim[1] = atoi(p); if ((p = edf_findInHeader(header, "DataType"))) { k = lookup_table4_nth(edf_datatype_table, p); if (k >= 0) { /* known EDF DataType */ int s = edf_datatype_table[k].sajzof; switch (edf_datatype_table[k].signum) { case 0: df_set_read_type(1,SIGNED_TEST(s)); break; case 1: df_set_read_type(1,UNSIGNED_TEST(s)); break; case 2: df_set_read_type(1,FLOAT_TEST(s)); break; } } } if ((p = edf_findInHeader(header, "ByteOrder"))) { k = lookup_table_nth(edf_byteorder_table, p); if (k >= 0) df_bin_file_endianess = edf_byteorder_table[k].value; } /* Origin vs center: EDF specs allows only Center, but it does not hurt if Origin is supported as well; however, Center rules if both specified. */ if ((p = edf_findInHeader(header, "Origin_1"))) { df_bin_record[0].scan_cen_or_ori[0] = atof(p); df_bin_record[0].scan_trans = DF_TRANSLATE_VIA_ORIGIN; } if ((p = edf_findInHeader(header, "Origin_2"))) { df_bin_record[0].scan_cen_or_ori[1] = atof(p); df_bin_record[0].scan_trans = DF_TRANSLATE_VIA_ORIGIN; } if ((p = edf_findInHeader(header, "Center_1"))) { df_bin_record[0].scan_cen_or_ori[0] = atof(p); df_bin_record[0].scan_trans = DF_TRANSLATE_VIA_CENTER; } if ((p = edf_findInHeader(header, "Center_2"))) { df_bin_record[0].scan_cen_or_ori[1] = atof(p); df_bin_record[0].scan_trans = DF_TRANSLATE_VIA_CENTER; } /* now pixel sizes and raster orientation */ if ((p = edf_findInHeader(header, "PSize_1"))) df_bin_record[0].scan_delta[0] = atof(p); if ((p = edf_findInHeader(header, "PSize_2"))) df_bin_record[0].scan_delta[1] = atof(p); if ((p = edf_findInHeader(header, "RasterAxes"))) { k = lookup_table_nth(edf_rasteraxes_table, p); switch (k) { case EDF_RASTER_AXES_XrightYup: df_bin_record[0].scan_dir[0] = 1; df_bin_record[0].scan_dir[1] = 1; df_bin_record[0].cart_scan[0] = DF_SCAN_POINT; df_bin_record[0].cart_scan[1] = DF_SCAN_LINE; break; default: /* also EDF_RASTER_AXES_XrightYdown */ df_bin_record[0].scan_dir[0] = 1; df_bin_record[0].scan_dir[1] = -1; df_bin_record[0].cart_scan[0] = DF_SCAN_POINT; df_bin_record[0].cart_scan[1] = DF_SCAN_LINE; } } free(header); }
/* * Parse the sub-options of text color specification * { def$ault | lt <linetype> | pal$ette { cb <val> | frac$tion <val> | z } * The ordering of alternatives shown in the line above is kept in the symbol definitions * TC_DEFAULT TC_LT TC_RGB TC_CB TC_FRAC TC_Z (0 1 2 3 4 5) * and the "options" parameter to parse_colorspec limits legal input to the * corresponding point in the series. So TC_LT allows only default or linetype * coloring, while TC_Z allows all coloring options up to and including pal z */ void parse_colorspec(struct t_colorspec *tc, int options) { c_token++; if (END_OF_COMMAND) int_error(c_token, "expected colorspec"); if (almost_equals(c_token,"def$ault")) { c_token++; tc->type = TC_DEFAULT; #ifdef KEYWORD_BGND } else if (equals(c_token,"bgnd")) { c_token++; tc->type = TC_LT; tc->lt = LT_BACKGROUND; #endif } else if (equals(c_token,"lt")) { c_token++; if (END_OF_COMMAND) int_error(c_token, "expected linetype"); tc->type = TC_LT; tc->lt = int_expression()-1; if (tc->lt < LT_BACKGROUND) { tc->type = TC_DEFAULT; int_warn(c_token,"illegal linetype"); } } else if (options <= TC_LT) { tc->type = TC_DEFAULT; int_error(c_token, "only tc lt <n> possible here"); } else if (equals(c_token,"ls") || almost_equals(c_token,"lines$tyle")) { c_token++; tc->type = TC_LINESTYLE; tc->lt = real_expression(); } else if (almost_equals(c_token,"rgb$color")) { char *color; int rgbtriple; c_token++; tc->type = TC_RGB; if (almost_equals(c_token, "var$iable")) { tc->value = -1.0; c_token++; return; } else tc->value = 0.0; if (!(color = try_to_get_string())) int_error(c_token, "expected a color name or a string of form \"#RRGGBB\""); if ((rgbtriple = lookup_table_nth(pm3d_color_names_tbl, color)) >= 0) rgbtriple = pm3d_color_names_tbl[rgbtriple].value; else sscanf(color,"#%x",&rgbtriple); free(color); if (rgbtriple < 0) int_error(c_token, "expected a known color name or a string of form \"#RRGGBB\""); tc->type = TC_RGB; tc->lt = rgbtriple; } else if (almost_equals(c_token,"pal$ette")) { c_token++; if (equals(c_token,"z")) { /* The actual z value is not yet known, fill it in later */ if (options >= TC_Z) { tc->type = TC_Z; } else { tc->type = TC_DEFAULT; int_error(c_token, "palette z not possible here"); } c_token++; } else if (equals(c_token,"cb")) { tc->type = TC_CB; c_token++; if (END_OF_COMMAND) int_error(c_token, "expected cb value"); tc->value = real_expression(); } else if (almost_equals(c_token,"frac$tion")) { tc->type = TC_FRAC; c_token++; if (END_OF_COMMAND) int_error(c_token, "expected palette fraction"); tc->value = real_expression(); if (tc->value < 0. || tc->value > 1.0) int_error(c_token, "palette fraction out of range"); } else { /* END_OF_COMMAND or palette <blank> */ if (options >= TC_Z) tc->type = TC_Z; } } else { int_error(c_token, "colorspec option not recognized"); } }