Changeset 20862
- Timestamp:
- Dec 1, 2008, 4:25:00 AM (17 years ago)
- Location:
- branches/eam_branch_20081124/Ohana/src/opihi
- Files:
-
- 6 edited
-
dvo/Makefile (modified) (1 diff)
-
dvo/avextract.c (modified) (7 diffs)
-
dvo/dbExtractImages.c (modified) (9 diffs)
-
dvo/dbExtractMeasures.c (modified) (1 diff)
-
dvo/imextract.c (modified) (8 diffs)
-
include/dvoshell.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branch_20081124/Ohana/src/opihi/dvo/Makefile
r20857 r20862 35 35 $(SRC)/dbExtractAverages.$(ARCH).o \ 36 36 $(SRC)/dbExtractMeasures.$(ARCH).o \ 37 $(SRC)/dbExtractImages.$(ARCH).o \ 37 38 $(SRC)/dbFields.$(ARCH).o \ 38 39 $(SRC)/dbRPN.$(ARCH).o \ -
branches/eam_branch_20081124/Ohana/src/opihi/dvo/avextract.c
r20860 r20862 6 6 int Nsecfilt, mode, VERBOSE; 7 7 char **cstack, name[1024]; 8 void *Signal; 9 10 Catalog catalog; 11 12 Vector **vec; 13 PhotCode *code; 14 dbStack *stack; 15 dbField *fields; 8 16 dbValue *values; 9 void *Signal;10 11 Catalog catalog;12 17 SkyList *skylist; 13 18 SkyRegionSelection *selection; 14 PhotCode *code;15 Vector **vec;16 dbField *fields;17 dbStack *stack;18 19 19 20 /* defaults */ 21 vec = NULL; 22 code = NULL; 23 stack = NULL; 24 fields = NULL; 25 values = NULL; 20 26 skylist = NULL; 21 27 selection = NULL; 22 code = NULL; 28 23 29 mode = MAG_AVE; 24 fields = NULL;25 stack = NULL;26 30 27 31 if ((N = get_argument (argc, argv, "-h"))) goto help; … … 66 70 Nreturn = Nfields; 67 71 if (!dbCheckStack (stack, Nstack, DVO_TABLE_AVERAGE, &fields, &Nfields)) goto escape; 68 // XXX handle errors69 72 70 73 /* load region corresponding to selection above */ … … 81 84 } 82 85 if ((vec[i] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) goto escape; 86 ResetVector (vec[i], fields[i].type, NPTS); 83 87 } 84 88 … … 109 113 110 114 m = catalog.average[j].measureOffset; 111 dbExtractAveragesInit (); // reset counters for saved fields 115 116 // reset counters for saved fields, extract fields 117 dbExtractAveragesInit (); 112 118 for (n = 0; n < Nfields; n++) { 113 119 values[n] = dbExtractAverages (&catalog.average[j], &catalog.secfilt[j*Nsecfilt], &catalog.measure[m], &fields[n]); 114 120 } 121 115 122 // test the conditional statement 116 123 if (!dbBooleanCond (stack, Nstack, values)) continue; … … 126 133 NPTS += 2000; 127 134 for (n = 0; n < Nreturn; n++) { 128 REALLOCATE (vec[n][0].elements.Flt, opihi_flt, NPTS); 135 if (vec[n][0].type == OPIHI_FLT) { 136 REALLOCATE (vec[n][0].elements.Flt, opihi_flt, NPTS); 137 } else { 138 REALLOCATE (vec[n][0].elements.Int, opihi_int, NPTS); 139 } 129 140 } 130 141 } … … 136 147 for (n = 0; n < Nreturn; n++) { 137 148 vec[n][0].Nelements = Npts; 138 REALLOCATE (vec[n][0].elements.Flt, opihi_flt, MAX(1,Npts)); 139 } 140 141 free (values); 149 if (vec[n][0].type == OPIHI_FLT) { 150 REALLOCATE (vec[n][0].elements.Flt, opihi_flt, MAX(1,Npts)); 151 } else { 152 REALLOCATE (vec[n][0].elements.Int, opihi_int, MAX(1,Npts)); 153 } 154 } 155 156 if (vec) free (vec); 157 if (values) free (values); 142 158 dbFreeFields (fields, Nfields); 143 159 dbFreeStack (stack, Nstack); 144 free (stack);160 if (stack) free (stack); 145 161 SkyListFree (skylist); 146 162 FreeSkyRegionSelection (selection); … … 148 164 149 165 escape: 150 free (values); 166 if (vec) free (vec); 167 if (values) free (values); 151 168 dbFreeFields (fields, Nfields); 152 169 dbFreeStack (stack, Nstack); 153 free (stack);170 if (stack) free (stack); 154 171 SkyListFree (skylist); 155 172 FreeSkyRegionSelection (selection); -
branches/eam_branch_20081124/Ohana/src/opihi/dvo/dbExtractImages.c
r20861 r20862 1 1 # include "dvoshell.h" 2 3 /* time concepts */ 4 static time_t TimeReference; 5 static int TimeFormat; 2 6 3 7 static CoordTransform *celestial_to_galactic = NULL; … … 11 15 static double ELON = 0.0; 12 16 static double ELAT = 0.0; 17 18 static int haveCelestial = FALSE; 19 static double RAo = 0.0; 20 static double DECo = 0.0; 13 21 14 22 // define a locally-static transform … … 34 42 35 43 int dbExtractImagesInit () { 36 haveGalactic = FALSE; 37 haveEcliptic = FALSE; 44 GetTimeFormat (&TimeReference, &TimeFormat); 38 45 return (TRUE); 39 46 } 40 47 48 int dbExtractImagesReset () { 49 haveGalactic = FALSE; 50 haveEcliptic = FALSE; 51 haveCelestial = FALSE; 52 return (TRUE); 53 } 54 41 55 /* return image.field based on the selection */ 42 dbValue dbExtractImages (Image *image, dbField *field) { 43 56 dbValue dbExtractImages (Image *image, int Nimage, int N, dbField *field) { 57 58 double x, y; 59 time_t t; 44 60 int i, Nsec; 45 61 dbValue value; … … 51 67 switch (field->ID) { 52 68 case IMAGE_RA: 53 XXX : need a better implementation of this... 54 if (!FindMosaicForImage (image, Nimage, j)) continue; 55 x = 0.5*image[0].NX; 56 y = 0.5*image[0].NY; 57 XY_to_RD (&ra, &dec, x, y, &image[0].coords); 58 value.Flt = ra; 69 if (!haveCelestial) { 70 if (!FindMosaicForImage (image, Nimage, N)) return value; 71 x = 0.5*image[N].NX; 72 y = 0.5*image[N].NY; 73 XY_to_RD (&RAo, &DECo, x, y, &image[N].coords); 74 haveCelestial = TRUE; 75 } 76 value.Flt = RAo; 59 77 break; 60 78 case IMAGE_DEC: 61 if (!FindMosaicForImage (image, Nimage, j)) continue; 62 x = 0.5*image[0].NX; 63 y = 0.5*image[0].NY; 64 XY_to_RD (&ra, &dec, x, y, &image[0].coords); 65 value.Flt = dec; 79 if (!haveCelestial) { 80 if (!FindMosaicForImage (image, Nimage, N)) return value; 81 x = 0.5*image[N].NX; 82 y = 0.5*image[N].NY; 83 XY_to_RD (&RAo, &DECo, x, y, &image[N].coords); 84 haveCelestial = TRUE; 85 } 86 value.Flt = DECo; 66 87 break; 67 88 case IMAGE_GLON: 68 89 if (!haveGalactic) { 90 if (!haveCelestial) { 91 if (!FindMosaicForImage (image, Nimage, N)) return value; 92 x = 0.5*image[N].NX; 93 y = 0.5*image[N].NY; 94 XY_to_RD (&RAo, &DECo, x, y, &image[N].coords); 95 haveCelestial = TRUE; 96 } 69 97 ApplyTransform (&GLON, &GLAT, RAo, DECo, celestial_to_galactic); 70 98 haveGalactic = TRUE; … … 74 102 case IMAGE_GLAT: 75 103 if (!haveGalactic) { 104 if (!haveCelestial) { 105 if (!FindMosaicForImage (image, Nimage, N)) return value; 106 x = 0.5*image[N].NX; 107 y = 0.5*image[N].NY; 108 XY_to_RD (&RAo, &DECo, x, y, &image[N].coords); 109 haveCelestial = TRUE; 110 } 76 111 ApplyTransform (&GLON, &GLAT, RAo, DECo, celestial_to_galactic); 77 112 haveGalactic = TRUE; … … 81 116 case IMAGE_ELON: 82 117 if (!haveEcliptic) { 118 if (!haveCelestial) { 119 if (!FindMosaicForImage (image, Nimage, N)) return value; 120 x = 0.5*image[N].NX; 121 y = 0.5*image[N].NY; 122 XY_to_RD (&RAo, &DECo, x, y, &image[N].coords); 123 haveCelestial = TRUE; 124 } 83 125 ApplyTransform (&ELON, &ELAT, RAo, DECo, celestial_to_ecliptic); 84 126 haveEcliptic = TRUE; … … 88 130 case IMAGE_ELAT: 89 131 if (!haveEcliptic) { 132 if (!haveCelestial) { 133 if (!FindMosaicForImage (image, Nimage, N)) return value; 134 x = 0.5*image[N].NX; 135 y = 0.5*image[N].NY; 136 XY_to_RD (&RAo, &DECo, x, y, &image[N].coords); 137 haveCelestial = TRUE; 138 } 90 139 ApplyTransform (&ELON, &ELAT, RAo, DECo, celestial_to_ecliptic); 91 140 haveEcliptic = TRUE; … … 93 142 value.Flt = ELAT; 94 143 break; 95 case IMAGE_X m:96 value.Flt = pow(10.0, 0.01*image[ 0].Xm);144 case IMAGE_XM: 145 value.Flt = pow(10.0, 0.01*image[N].Xm); 97 146 break; 98 147 case IMAGE_AIRMASS: 99 value.Flt = image[ 0].secz;148 value.Flt = image[N].secz; 100 149 break; 101 150 case IMAGE_MCAL: 102 value.Flt = image[ 0].Mcal;151 value.Flt = image[N].Mcal; 103 152 break; 104 153 case IMAGE_dMCAL: 105 value.Flt = image[ 0].dMcal;154 value.Flt = image[N].dMcal; 106 155 break; 107 156 case IMAGE_PHOTCODE: 108 value.Flt = image[ 0].photcode;157 value.Flt = image[N].photcode; 109 158 break; 110 159 case IMAGE_TIME: 111 t = image[ 0].tzero + 0.5*image[0].NY * image[0].trate / 10000;160 t = image[N].tzero + 0.5*image[N].NY * image[N].trate / 10000; 112 161 value.Flt = TimeValue (t, TimeReference, TimeFormat); 113 162 break; 114 163 case IMAGE_FWHM: 115 value.Flt = image[ 0].fwhm_x / 25.0;164 value.Flt = image[N].fwhm_x / 25.0; 116 165 break; 117 166 case IMAGE_EXPTIME: 118 value.Flt = image[ 0].exptime;167 value.Flt = image[N].exptime; 119 168 break; 120 169 case IMAGE_NSTAR: 121 value.Flt = image[ 0].nstar;170 value.Flt = image[N].nstar; 122 171 break; 123 172 case IMAGE_NCAL: 124 value.Flt = image[ 0].Mxxxx;173 value.Flt = image[N].Mxxxx; 125 174 break; 126 175 case IMAGE_SKY: 127 value.Flt = image[ 0].Myyyy + 0x8000;176 value.Flt = image[N].Myyyy + 0x8000; 128 177 break; 129 178 case IMAGE_FLAG: 130 value.Flt = image[ 0].code;179 value.Flt = image[N].code; 131 180 break; 132 181 case IMAGE_NX_PIX: 133 value.Flt = image[ 0].NX;182 value.Flt = image[N].NX; 134 183 break; 135 184 case IMAGE_NY_PIX: 136 value.Flt = image[ 0].NY;185 value.Flt = image[N].NY; 137 186 break; 138 187 case IMAGE_IMAGE_ID: 139 value.Flt = image[ 0].imageID;188 value.Flt = image[N].imageID; 140 189 break; 141 190 case IMAGE_THETA: { 142 191 double theta1, theta2, s1, s2; 143 s1 = SIGN(image[ 0].coords.pc1_1);144 s2 = SIGN(image[ 0].coords.pc2_2);145 theta1 = DEG_RAD*atan2 (+s1*image[ 0].coords.pc1_2, s1*image[0].coords.pc1_1);146 theta2 = DEG_RAD*atan2 (-s2*image[ 0].coords.pc2_1, s2*image[0].coords.pc2_2);192 s1 = SIGN(image[N].coords.pc1_1); 193 s2 = SIGN(image[N].coords.pc2_2); 194 theta1 = DEG_RAD*atan2 (+s1*image[N].coords.pc1_2, s1*image[N].coords.pc1_1); 195 theta2 = DEG_RAD*atan2 (-s2*image[N].coords.pc2_1, s2*image[N].coords.pc2_2); 147 196 value.Flt = 0.5*(theta1+theta2); 148 197 break; } 149 198 case IMAGE_SKEW: { 150 199 double theta1, theta2, s1, s2; 151 s1 = SIGN(image[ 0].coords.pc1_1);152 s2 = SIGN(image[ 0].coords.pc2_2);153 theta1 = DEG_RAD*atan2 (+s1*image[ 0].coords.pc1_2, s1*image[0].coords.pc1_1);154 theta2 = DEG_RAD*atan2 (-s2*image[ 0].coords.pc2_1, s2*image[0].coords.pc2_2);200 s1 = SIGN(image[N].coords.pc1_1); 201 s2 = SIGN(image[N].coords.pc2_2); 202 theta1 = DEG_RAD*atan2 (+s1*image[N].coords.pc1_2, s1*image[N].coords.pc1_1); 203 theta2 = DEG_RAD*atan2 (-s2*image[N].coords.pc2_1, s2*image[N].coords.pc2_2); 155 204 value.Flt = (theta1-theta2); 156 205 break; } 157 206 case IMAGE_SCALE: { 158 207 double scale1, scale2; 159 scale1 = fabs(image[ 0].coords.cdelt1);160 scale2 = fabs(image[ 0].coords.cdelt2);208 scale1 = fabs(image[N].coords.cdelt1); 209 scale2 = fabs(image[N].coords.cdelt2); 161 210 value.Flt = 0.5*(scale1+scale2); 162 211 break; } 163 212 case IMAGE_DSCALE: { 164 213 double scale1, scale2; 165 scale1 = fabs(image[ 0].coords.cdelt1);166 scale2 = fabs(image[ 0].coords.cdelt2);214 scale1 = fabs(image[N].coords.cdelt1); 215 scale2 = fabs(image[N].coords.cdelt2); 167 216 value.Flt = (scale1-scale2); 168 217 break; } … … 177 226 case IMAGE_X_LR_CHIP: 178 227 case IMAGE_X_UR_CHIP: 179 value.Flt = image[ 0].NX;228 value.Flt = image[N].NX; 180 229 break; 181 230 case IMAGE_Y_UL_CHIP: 182 231 case IMAGE_Y_UR_CHIP: 183 value.Flt = image[ 0].NX;232 value.Flt = image[N].NX; 184 233 break; 185 234 186 235 case IMAGE_X_LL_FP: 187 236 case IMAGE_Y_LL_FP: 188 XY_to_LM (&x, &y, 0.0, 0.0, &image[ 0].coords);189 value.Flt = ( mode ==X_LL_FP) ? x : y;237 XY_to_LM (&x, &y, 0.0, 0.0, &image[N].coords); 238 value.Flt = (field->ID == IMAGE_X_LL_FP) ? x : y; 190 239 break; 191 240 case IMAGE_X_LR_FP: 192 241 case IMAGE_Y_LR_FP: 193 XY_to_LM (&x, &y, image[ 0].NX, 0.0, &image[0].coords);194 value.Flt = ( mode ==X_LR_FP) ? x : y;242 XY_to_LM (&x, &y, image[N].NX, 0.0, &image[N].coords); 243 value.Flt = (field->ID == IMAGE_X_LR_FP) ? x : y; 195 244 break; 196 245 case IMAGE_X_UL_FP: 197 246 case IMAGE_Y_UL_FP: 198 XY_to_LM (&x, &y, 0.0, image[ 0].NY, &image[0].coords);199 value.Flt = ( mode ==X_UL_FP) ? x : y;247 XY_to_LM (&x, &y, 0.0, image[N].NY, &image[N].coords); 248 value.Flt = (field->ID == IMAGE_X_UL_FP) ? x : y; 200 249 break; 201 250 case IMAGE_X_UR_FP: 202 251 case IMAGE_Y_UR_FP: 203 XY_to_LM (&x, &y, image[ 0].NX, image[0].NY, &image[0].coords);204 value.Flt = ( mode ==X_UR_FP) ? x : y;252 XY_to_LM (&x, &y, image[N].NX, image[N].NY, &image[N].coords); 253 value.Flt = (field->ID == IMAGE_X_UR_FP) ? x : y; 205 254 break; 206 255 } -
branches/eam_branch_20081124/Ohana/src/opihi/dvo/dbExtractMeasures.c
r20857 r20862 31 31 static double ELAT_MEAS = 0.0; 32 32 33 voiddbExtractMeasuresInit () {33 int dbExtractMeasuresInit () { 34 34 TimeRefPM = ohana_date_to_sec ("2000/01/01"); 35 35 GetTimeFormat (&TimeReference, &TimeFormat); 36 return (TRUE); 36 37 } 37 38 -
branches/eam_branch_20081124/Ohana/src/opihi/dvo/imextract.c
r20861 r20862 3 3 int imextract (int argc, char **argv) { 4 4 5 int i, j, Nimage, mode, N, PhotcodeSelect; 6 int TimeSelect, *subset, Nsubset, TimeFormat, FlagSelect, FlagValue; 7 double x, y, ra, dec, t, trange; 8 time_t tzero, TimeReference; 5 // int *subset, Nsubset; -- not sure if we need to use this or not... 6 7 int i, j, n, m, N, Npts, NPTS, last, next, state, Nfields, Nreturn, Ncstack, Nstack; 8 int Nimage, VERBOSE; 9 char **cstack, name[1024]; 10 void *Signal; 11 12 Vector **vec; 13 Image *image; 14 dbStack *stack; 15 dbField *fields; 16 dbValue *values; 9 17 SkyRegionSelection *selection; 10 18 11 PhotCode *code; 12 Image *image; 13 Vector *vec; 19 /* defaults */ 20 vec = NULL; 21 image = NULL; 22 stack = NULL; 23 fields = NULL; 24 values = NULL; 25 selection = NULL; 14 26 15 27 if ((N = get_argument (argc, argv, "-h"))) goto help; … … 30 42 } 31 43 32 // command-line is of the form: avextract field,field, field [where (field op value)...]44 // command-line is of the form: imextract field,field, field [where (field op value)...] 33 45 34 46 // parse the fields to be extracted and returned … … 48 60 49 61 // add the skyregion limits to the where statement (or create) 62 // XXX we may want to drop this and use just the image_subset function 50 63 dbAstroRegionLimits (&stack, &Nstack, selection, DVO_TABLE_IMAGE); 51 64 … … 64 77 } 65 78 if ((vec[i] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) goto escape; 79 ResetVector (vec[i], fields[i].type, NPTS); 66 80 } 67 81 … … 69 83 NPTS = 1; 70 84 85 if ((image = LoadImages (&Nimage)) == NULL) goto escape; 86 BuildChipMatch (image, Nimage); 87 dbExtractImagesInit (); 88 89 // XXX do I need to use this, or the region portion 90 // image_subset (image, Nimage, &subset, &Nsubset, selection, tzero, trange, TimeSelect); 91 71 92 // grab data from all selected sky regions 72 93 Signal = signal (SIGINT, handle_interrupt); 73 94 interrupt = FALSE; 74 75 if ((image = LoadImages (&Nimage)) == NULL) return (FALSE);76 77 // XXX do I need to use this, or the region portion78 image_subset (image, Nimage, &subset, &Nsubset, selection, tzero, trange, TimeSelect);79 if ((mode == RA) || (mode == DEC)) BuildChipMatch (image, Nimage);80 81 GetTimeFormat (&TimeReference, &TimeFormat);82 83 /* create storage vector */84 ResetVector (vec, OPIHI_FLT, Nimage);85 86 95 for (j = 0; (j < Nimage) && !interrupt; j++) { 87 96 88 dbExtractImagesInit (); // reset counters for saved fields 97 // reset counters for saved fields, extract fields 98 dbExtractImagesReset (); 89 99 for (n = 0; n < Nfields; n++) { 90 values[n] = dbExtractImages ( &image[j], &fields[n]);100 values[n] = dbExtractImages (image, Nimage, j, &fields[n]); 91 101 } 102 92 103 // test the conditional statement 93 104 if (!dbBooleanCond (stack, Nstack, values)) continue; … … 103 114 NPTS += 2000; 104 115 for (n = 0; n < Nreturn; n++) { 105 REALLOCATE (vec[n][0].elements.Flt, opihi_flt, NPTS); 116 if (vec[n][0].type == OPIHI_FLT) { 117 REALLOCATE (vec[n][0].elements.Flt, opihi_flt, NPTS); 118 } else { 119 REALLOCATE (vec[n][0].elements.Int, opihi_int, NPTS); 120 } 106 121 } 107 122 } … … 111 126 for (n = 0; n < Nreturn; n++) { 112 127 vec[n][0].Nelements = Npts; 113 REALLOCATE (vec[n][0].elements.Flt, opihi_flt, MAX(1,Npts)); 128 if (vec[n][0].type == OPIHI_FLT) { 129 REALLOCATE (vec[n][0].elements.Flt, opihi_flt, MAX(1,Npts)); 130 } else { 131 REALLOCATE (vec[n][0].elements.Int, opihi_int, MAX(1,Npts)); 132 } 114 133 } 115 134 116 free (subset);135 // free (subset); 117 136 free (image); 137 138 if (vec) free (vec); 139 if (values) free (values); 140 dbFreeFields (fields, Nfields); 141 dbFreeStack (stack, Nstack); 142 if (stack) free (stack); 118 143 return (TRUE); 119 144 120 145 escape: 146 if (vec) free (vec); 147 if (values) free (values); 148 dbFreeFields (fields, Nfields); 149 dbFreeStack (stack, Nstack); 150 if (stack) free (stack); 121 151 return (FALSE); 122 152 … … 130 160 return (FALSE); 131 161 } 132 gprint (GP_ERR, " avextract --help fields : for a complete listing of allowed fields\n");162 gprint (GP_ERR, " imextract --help fields : for a complete listing of allowed fields\n"); 133 163 return (FALSE); 134 164 } -
branches/eam_branch_20081124/Ohana/src/opihi/include/dvoshell.h
r20861 r20862 138 138 IMAGE_RA, 139 139 IMAGE_DEC, 140 IMAGE_Xm, 140 IMAGE_GLON, 141 IMAGE_GLAT, 142 IMAGE_ELON, 143 IMAGE_ELAT, 144 IMAGE_XM, 141 145 IMAGE_AIRMASS, 142 146 IMAGE_MCAL, … … 175 179 }; 176 180 177 enum {DVO_TABLE_AVERAGE, DVO_TABLE_MEASURE };181 enum {DVO_TABLE_AVERAGE, DVO_TABLE_MEASURE, DVO_TABLE_IMAGE}; 178 182 enum {DVO_DB_CMDLINE_ERROR, DVO_DB_CMDLINE_IS_END, DVO_DB_CMDLINE_IS_WHERE, DVO_DB_CMDLINE_IS_MATCH}; 179 183 … … 308 312 dbValue dbExtractAverages PROTO((Average *average, SecFilt *secfilt, Measure *measure, dbField *field)); 309 313 dbValue dbExtractMeasures PROTO((Average *average, SecFilt *secfilt, Measure *measure, dbField *field)); 310 void dbExtractMeasuresInit PROTO(());314 dbValue dbExtractImages PROTO((Image *image, int Nimage, int N, dbField *field)); 311 315 312 316 void dbInitField PROTO((dbField *field)); … … 322 326 int wordhash (char *word); 323 327 324 int dbExtractAverageInitTransform (CoordTransformSystem target);325 int dbExtractAverageInit ();326 327 328 int dbExtractMeasuresInitTransform (CoordTransformSystem target); 328 329 int dbExtractMeasuresInitAve (); 329 330 int dbExtractMeasuresInitMeas (); 331 int dbExtractMeasuresInit (); 330 332 331 333 int dbExtractAveragesInitTransform (CoordTransformSystem target); 332 334 int dbExtractAveragesInit (); 333 335 336 int dbExtractImagesInitTransform (CoordTransformSystem target); 337 int dbExtractImagesInit (); 338 int dbExtractImagesReset (); 339 334 340 # endif
Note:
See TracChangeset
for help on using the changeset viewer.
