1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: local uint16 tbom ; 33: tbom = ReadUShort ( 0 ) ; 34: if ( tbom == 0x4949 ) { 35: LittleEndian ( ) ; 36: } 37: else if ( tbom == 0x4D4D ) { 38: BigEndian ( ) ; 39: } 40: else { 41: Warning ( "Invalid TIFF File: Bad BOM (Byte Order Mark). Template Terminated." ) ; 42: return - 1 ; 43: } 44: 45: local quad nextIFD = 0 ; 46: 47: 48: 49: typedef enum < uint16 > eTAG { 50: GPSVersionID = 0 , GPSLatitudeRef , GPSLatitude , GPSLongitudeRef , GPSLongitude , GPSAltitudeRef , GPSAltitude , GPSTimeStamp , GPSSatellites , GPSStatus , GPSMeasureMode , GPSDOP , GPSSpeedRef , GPSSpeed , GPSTrackRef , GPSTrack , GPSImgDirectionRef , GPSImgDirection , GPSMapDatum , GPSDestLatitudeRef , GPSDestLatitude , GPSDestLongitudeRef , GPSDestLongitude , GPSDestBearingRef , GPSDestBearing , GPSDestDistanceRef , GPSDestDistance , GPSProcessingMethod , GPSAreaInformation , GPSDateStamp , GPSDifferential , 51: NewSubFileType = 254 , SubFileType , ImageWidth , ImageLength , BitsPerSample , Compression , 52: PhotometricInterpretation = 262 , Thresholding , CellWidth , CellLength , FillOrder , 53: DocumentName = 269 , ImageDescription , Make , Model , StripOffsets , Orientation , 54: SamplesPerPixel = 277 , RowsPerStrip , StripByteCounts , MinSampleValue , MaxSampleValue , XResolution , YResolution , PlanarConfiguration , PageName , XPosition , YPosition , FreeOffsets , FreeByteCounts , GrayResponseUnit , GrayResponseCurve , Group3Options , Group4Options , 55: ResolutionUnit = 296 , PageNumber , 56: ColorResponseUnit = 300 , TransferFunction , 57: Software = 305 , DateTime , 58: Artist = 315 , HostComputer , Predictor , WhitePoint , PrimaryChromacities , ColorMap , HalftoneHints , TileWidth , TileLength , TileOffsets , TileByteCounts , BadFaxLines , CleanFaxData , ConsecutiveBadFaxLines , 59: SubIFDs = 330 , 60: InkSet = 332 , InkNames , NumberOfInks , 61: DotRange = 336 , TargetPrinter , ExtraSamples , SampleFormat , SMinSampleValue , SMaxSampleValue , TransferRange , ClipPath , XClipPathUnits , YClipPathUnits , Indexed , JPEGTables , 62: OPIProxy = 351 , 63: GlobalParametersIFD = 400 , ProfileType , FaxProfile , CodingMethods , VersionYear , ModeNumber , 64: JPEGProc = 512 , JPEGInterchangeFormat , JPEGInterchangeFormatLength , JPEGRestartInterval , 65: JPEGLosslessPredictors = 517 , JPEGPointTransforms , JPEGQTables , JPEGDCTables , JPEGACTables , 66: YCbCrCoefficients = 529 , YCbCrSubsampling , YCbCrPositioning , ReferenceBlackWhite , 67: XMP = 700 , 68: ImageID = 32781 , 69: Wang_Annotation = 32932 , 70: Matteing = 32995 , DataType , ImageDepth , TileDepth , 71: CFARepeatPatternDim = 33421 , CFAPattern , BatteryLevel , 72: Copyright = 33432 , 73: ExposureTime = 33434 , 74: FNumber = 33437 , 75: ModelPixelScaleTag = 33550 , 76: IPTC_NAA = 33723 , 77: INGR_Packet_Data_Tag = 33918 , INGR_Flag_Registers , IntergraphMatrixTag , 78: ModelTiepointTag = 33922 , 79: Site = 34016 , ColorSequence , IT8Header , RasterPadding , BitsPerRunLength , BitsPerExtendedRunLength , ColorTable , ImageColorIndicator , BackgroundColorIndicator , ImageColorValue , BackgroundColorValue , PixelInensityRange , TransparencyIndicator , ColorCharacterization , HCUsage , 80: ModelTransformationTag = 34264 , 81: PhotoshopImageResources = 34377 , 82: ExifIFD = 34665 , 83: InterColourProfile = 34675 , 84: GeoKeyDirectoryTag = 34735 , GeoDoubleParamsTag , GeoAsciiParamsTag , 85: ExposureProgram = 34850 , 86: SpectralSensitibity = 34852 , GPSInfo , 87: ISOSpeedRatings = 34855 , OECF , Interlace , TimeZoneOffset , SelfTimerMode , 88: FaxRecvParams = 34908 , FaxSubAddress , FaxRecvTime , 89: ExifVersion = 36864 , 90: DateTimeOriginal = 36867 , DateTimeDigitized , 91: ComponentsConfiguration = 37121 , CompressedBitsPerPixel , 92: ShutterSpeedValue = 37377 , ApertureValue , BrightnessValue , ExposureBiasValue , MaxApertureValue , SubjectDistance , MeteringMode , LightSource , Flash , FocalLength , FlashEnergy , SpatialFrequencyResponse , Noise , FocalPlaneXResolution , FocalPlaneYResolution , FocalPlaneResolutionUnit , ImageNumber , SecurityClassification , ImageHistory , SubjectArea , ExposureIndex , TIFF_EPStandardID , SensingMethod , 93: StoNits = 37439 , 94: MakerNote = 37500 , 95: UserComment = 37510 , 96: SubSecTime = 37520 , SubSecTimeOriginal , SubSecTimeDigitized , 97: ImageSourceData = 37724 , 98: MSFax_CSID = 40001 , MSFax_TSID , MSFax_Device , MSFax_RoutingInfo , MSFax_CallerID , MSFax_RecipientName , MSFax_RecipientFaxNumber , MSFax_RecipientCompany , MSFax_RecipientAddress , MSFax_RecipientStreet , MSFax_RecipientCity , MSFax_RecipientZipCode , MSFax_RecipientCountry , MSFax_RecipientTitle , MSFax_RecipientDepartment , MSFax_RecipientOffice , MSFax_RecipientOfficePhone , MSFax_RecipientHomePhone , MSFax_Recipient40019 , MSFax_RecipientEmail , MSFax_SenderName , MSFax_SenderFaxNumber , MSFax_SenderCompany , MSFax_SenderAddress , MSFax_SenderStreet , MSFax_SenderCity , MSFax_SenderZipCode , MSFax_SenderCountry , MSFax_SenderTitle , MSFax_SenderDepartment , MSFax_SenderOffice , MSFax_SenderOfficePhone , MSFax_SenderHomePhone , MSFax_Sender40034 , MSFax_SenderEmail , MSFax_BillingCode , MSFax_UserName , MSFax_40038 , MSFax_Document , MSFax_CoverPageSubject , MSFax_Retries , MSFax_Priority , MSFax_ParentJobID , MSFax_SubmissionTime , MSFax_Scheduled , MSFax_TotalPages , MSFax_Type , MSFax_40048 , MSFax_ErrorCode , MSFax_40050 , MSFax_StartTime , MSFax_EndTime , MSFax_40053 , 99: FlashpixVersion = 40960 , ColorSpace , PixelXDimension , PixelYDimension , RelatedSoundFile , InteroperabilityIFD , 100: FlashEnergy_Exif = 41483 , SpatialFrequencyResponse_Exif , 101: FocalPlaneXResolution_Exif = 41486 , FocalPlaneYResolution_Exif , FocalPlaneResolutionUnit_Exif , 102: SubjectLocation_Exif = 41492 , ExposureIndex_Exif , 103: SensingMethod_Exif = 41495 , 104: FileSource = 41728 , SceneType , CFAPattern_Exif , 105: CustomRendered = 41985 , ExposureMode , WhiteBalance , DigitalZoomRatio , FocalLengthIn35mmFilm , SceneCaptureType , GainControl , Contrast , Saturation , Sharpness , DeviceSettingDescription , SubjectDistanceRange , 106: GDAL_METADATA = 42112 , GDAL_NODATA , 107: Oce_Scanjob_Description = 50215 , Oce_Application_Selector , Oce_Identification_Number , Oce_ImageLogic_Characteristics , 108: PhotoshopAnnotations = 50255 , 109: DNGVersion = 50706 , DNGBackwardVersion , UniqueCameraModel , LocalizedCameraModel , CFAPlaneColor , CFALayout , LinearizationTable , BlackLevelRepeatDim , BlackLevel , BlackLevelDeltaH , BlackLevelDeltaV , WhiteLevel , DefaultScale , DefaultCropOrigin , DefaultCropSize , ColorMatrix1 , ColorMatrix2 , CameraCalibration1 , CameraCalibration2 , ReductionMatrix1 , ReductionMatrix2 , AnalogBalnace , AsShortNeutral , AsShortWhiteXY , BaselineExposure , BaselineNoise , BaselineSharpness , BayerGreenSplit , LinearResponseLimit , CameraSerialNumber , LensInfo , ChromaBlurRadius , AntiAliasStrength , 110: DNGPrivateDatea = 50740 , MakerNoteSafety , 111: CalibrationIlluminant1 = 50778 , CalibrationIlluminant2 , BestQualityScale , 112: Alias_Layer_Metadata = 50784 113: } TAG ; 114: 115: 116: typedef enum < uint16 > eTAGTYPE { 117: eBYTE = 1 , eASCII , eSHORT , eLONG , eRATIONAL , 118: eSBYTE , eUNDEF , eSSHORT , eSLONG , eSRATIONAL , 119: eFLOAT , eDOUBLE 120: } TAGTYPE ; 121: 122: 123: typedef enum < uint16 > eCOMP { 124: Uncompressed = 1 , CCITT_1D , Group3Fax , Group4Fax , LZW , JPEG , JPEG2 , 125: Deflate = 8 , 126: NeXT2Bit = 32766 , CCITT_RLE = 32771 , PackBits = 32773 , 127: ThunderScan4bit = 32809 , cRasterPadding = 32895 , 128: RLEforLW = 32896 , RLEforHC , RLEforBL , 129: Pixar10bitLZW = 32908 , PixarCompanded11bitZIP , 130: PKZIP_Deflate = 32946 , 131: Kodak_DCS = 32947 , 132: JBIG = 34661 , 133: SGI32LogLum = 34676 , 134: SIG24LogLum = 34677 , 135: JPEG_2000 = 34712 136: } COMP ; 137: 138: 139: typedef enum < uint16 > ePHOTO { 140: WhiteIsZero , BlackIsZero , RGB , RGB_Palette , Transparency_Mask , CMYK , YCbCr , 141: CIELab = 8 , ICCLab , ITULab , CFA = 32803 , CIELog2L = 32844 , CIELog2Luv , LinearRaw = 34892 142: } PHOTO ; 143: 144: 145: typedef enum < uint16 > eRES { 146: None = 1 , Inch , Centimeter 147: } RES ; 148: 149: 150: typedef enum < uint16 > eKEYGeoTiff { 151: undefinedGeoKey = 1 , 152: 153: 154: 155: 156: 157: 158: 159: 160: GTModelTypeGeoKey = 1024 , 161: GTRasterTypeGeoKey = 1025 , 162: GTCitationGeoKey = 1026 , 163: 164: 165: 166: GeographicTypeGeoKey = 2048 , 167: GeogCitationGeoKey = 2049 , 168: GeogGeodeticDatumGeoKey = 2050 , 169: GeogPrimeMeridianGeoKey = 2051 , 170: GeogLinearUnitsGeoKey = 2052 , 171: GeogLinearUnitSizeGeoKey = 2053 , 172: GeogAngularUnitsGeoKey = 2054 , 173: GeogAngularUnitSizeGeoKey = 2055 , 174: GeogEllipsoidGeoKey = 2056 , 175: GeogSemiMajorAxisGeoKey = 2057 , 176: GeogSemiMinorAxisGeoKey = 2058 , 177: GeogInvFlatteningGeoKey = 2059 , 178: GeogAzimuthUnitsGeoKey = 2060 , 179: GeogPrimeMeridianLongGeoKey = 2061 , 180: GeogTOWGS84GeoKey = 2062 , 181: 182: 183: 184: 185: 186: ProjectedCSTypeGeoKey = 3072 , 187: PCSCitationGeoKey = 3073 , 188: ProjectionGeoKey = 3074 , 189: ProjCoordTransGeoKey = 3075 , 190: ProjLinearUnitsGeoKey = 3076 , 191: ProjLinearUnitSizeGeoKey = 3077 , 192: ProjStdParallel1GeoKey = 3078 , 193: 194: ProjStdParallel2GeoKey = 3079 , 195: ProjNatOriginLongGeoKey = 3080 , 196: 197: ProjNatOriginLatGeoKey = 3081 , 198: 199: ProjFalseEastingGeoKey = 3082 , 200: ProjFalseNorthingGeoKey = 3083 , 201: ProjFalseOriginLongGeoKey = 3084 , 202: ProjFalseOriginLatGeoKey = 3085 , 203: ProjFalseOriginEastingGeoKey = 3086 , 204: ProjFalseOriginNorthingGeoKey = 3087 , 205: ProjCenterLongGeoKey = 3088 , 206: ProjCenterLatGeoKey = 3089 , 207: ProjCenterEastingGeoKey = 3090 , 208: ProjCenterNorthingGeoKey = 3091 , 209: ProjScaleAtNatOriginGeoKey = 3092 , 210: 211: ProjScaleAtCenterGeoKey = 3093 , 212: ProjAzimuthAngleGeoKey = 3094 , 213: ProjStraightVertPoleLongGeoKey = 3095 , 214: ProjRectifiedGridAngleGeoKey = 3096 , 215: 216: 217: 218: VerticalCSTypeGeoKey = 4096 , 219: VerticalCitationGeoKey = 4097 , 220: VerticalDatumGeoKey = 4098 , 221: VerticalUnitsGeoKey = 4099 , 222: 223: 224: 225: userDefinedGeoKey = 32767 226: } GeoKEYlabel ; 227: 228: 229: 230: 231: 232: 233: 234: typedef enum < short > { 235: ModelTypeProjected = 1 , 236: ModelTypeGeographic = 2 , 237: ModelTypeGeocentric = 3 , 238: 239: 240: 241: } modeltype_t ; 242: 243: 244: typedef enum < short > { 245: RasterPixelIsArea = 1 , 246: RasterPixelIsPoint = 2 247: } rastertype_t ; 248: 249: 250: typedef enum < short > { 251: Linear_Meter = 9001 , 252: Linear_Foot = 9002 , 253: Linear_Foot_US_Survey = 9003 , 254: Linear_Foot_Modified_American = 9004 , 255: Linear_Foot_Clarke = 9005 , 256: Linear_Foot_Indian = 9006 , 257: Linear_Link = 9007 , 258: Linear_Link_Benoit = 9008 , 259: Linear_Link_Sears = 9009 , 260: Linear_Chain_Benoit = 9010 , 261: Linear_Chain_Sears = 9011 , 262: Linear_Yard_Sears = 9012 , 263: Linear_Yard_Indian = 9013 , 264: Linear_Fathom = 9014 , 265: Linear_Mile_International_Nautical = 9015 266: } LinearUnitCode_t ; 267: 268: 269: typedef enum < short > { 270: Angular_Radian = 9101 , 271: Angular_Degree = 9102 , 272: Angular_Arc_Minute = 9103 , 273: Angular_Arc_Second = 9104 , 274: Angular_Grad = 9105 , 275: Angular_Gon = 9106 , 276: Angular_DMS = 9107 , 277: Angular_DMS_Hemisphere = 9108 278: } AngularUnitCode_t ; 279: 280: 281: 282: typedef enum < short > { 283: GCS_Adindan = 4201 , 284: GCS_AGD66 = 4202 , 285: GCS_AGD84 = 4203 , 286: GCS_Ain_el_Abd = 4204 , 287: GCS_Afgooye = 4205 , 288: GCS_Agadez = 4206 , 289: GCS_Lisbon = 4207 , 290: GCS_Aratu = 4208 , 291: GCS_Arc_1950 = 4209 , 292: GCS_Arc_1960 = 4210 , 293: GCS_Batavia = 4211 , 294: GCS_Barbados = 4212 , 295: GCS_Beduaram = 4213 , 296: GCS_Beijing_1954 = 4214 , 297: GCS_Belge_1950 = 4215 , 298: GCS_Bermuda_1957 = 4216 , 299: GCS_Bern_1898 = 4217 , 300: GCS_Bogota = 4218 , 301: GCS_Bukit_Rimpah = 4219 , 302: GCS_Camacupa = 4220 , 303: GCS_Campo_Inchauspe = 4221 , 304: GCS_Cape = 4222 , 305: GCS_Carthage = 4223 , 306: GCS_Chua = 4224 , 307: GCS_Corrego_Alegre = 4225 , 308: GCS_Cote_d_Ivoire = 4226 , 309: GCS_Deir_ez_Zor = 4227 , 310: GCS_Douala = 4228 , 311: GCS_Egypt_1907 = 4229 , 312: GCS_ED50 = 4230 , 313: GCS_ED87 = 4231 , 314: GCS_Fahud = 4232 , 315: GCS_Gandajika_1970 = 4233 , 316: GCS_Garoua = 4234 , 317: GCS_Guyane_Francaise = 4235 , 318: GCS_Hu_Tzu_Shan = 4236 , 319: GCS_HD72 = 4237 , 320: GCS_ID74 = 4238 , 321: GCS_Indian_1954 = 4239 , 322: GCS_Indian_1975 = 4240 , 323: GCS_Jamaica_1875 = 4241 , 324: GCS_JAD69 = 4242 , 325: GCS_Kalianpur = 4243 , 326: GCS_Kandawala = 4244 , 327: GCS_Kertau = 4245 , 328: GCS_KOC = 4246 , 329: GCS_La_Canoa = 4247 , 330: GCS_PSAD56 = 4248 , 331: GCS_Lake = 4249 , 332: GCS_Leigon = 4250 , 333: GCS_Liberia_1964 = 4251 , 334: GCS_Lome = 4252 , 335: GCS_Luzon_1911 = 4253 , 336: GCS_Hito_XVIII_1963 = 4254 , 337: GCS_Herat_North = 4255 , 338: GCS_Mahe_1971 = 4256 , 339: GCS_Makassar = 4257 , 340: GCS_EUREF89 = 4258 , 341: GCS_Malongo_1987 = 4259 , 342: GCS_Manoca = 4260 , 343: GCS_Merchich = 4261 , 344: GCS_Massawa = 4262 , 345: GCS_Minna = 4263 , 346: GCS_Mhast = 4264 , 347: GCS_Monte_Mario = 4265 , 348: GCS_M_poraloko = 4266 , 349: GCS_NAD27 = 4267 , 350: GCS_NAD_Michigan = 4268 , 351: GCS_NAD83 = 4269 , 352: GCS_Nahrwan_1967 = 4270 , 353: GCS_Naparima_1972 = 4271 , 354: GCS_GD49 = 4272 , 355: GCS_NGO_1948 = 4273 , 356: GCS_Datum_73 = 4274 , 357: GCS_NTF = 4275 , 358: GCS_NSWC_9Z_2 = 4276 , 359: GCS_OSGB_1936 = 4277 , 360: GCS_OSGB70 = 4278 , 361: GCS_OS_SN80 = 4279 , 362: GCS_Padang = 4280 , 363: GCS_Palestine_1923 = 4281 , 364: GCS_Pointe_Noire = 4282 , 365: GCS_GDA94 = 4283 , 366: GCS_Pulkovo_1942 = 4284 , 367: GCS_Qatar = 4285 , 368: GCS_Qatar_1948 = 4286 , 369: GCS_Qornoq = 4287 , 370: GCS_Loma_Quintana = 4288 , 371: GCS_Amersfoort = 4289 , 372: GCS_RT38 = 4290 , 373: GCS_SAD69 = 4291 , 374: GCS_Sapper_Hill_1943 = 4292 , 375: GCS_Schwarzeck = 4293 , 376: GCS_Segora = 4294 , 377: GCS_Serindung = 4295 , 378: GCS_Sudan = 4296 , 379: GCS_Tananarive = 4297 , 380: GCS_Timbalai_1948 = 4298 , 381: GCS_TM65 = 4299 , 382: GCS_TM75 = 4300 , 383: GCS_Tokyo = 4301 , 384: GCS_Trinidad_1903 = 4302 , 385: GCS_TC_1948 = 4303 , 386: GCS_Voirol_1875 = 4304 , 387: GCS_Voirol_Unifie = 4305 , 388: GCS_Bern_1938 = 4306 , 389: GCS_Nord_Sahara_1959 = 4307 , 390: GCS_Stockholm_1938 = 4308 , 391: GCS_Yacare = 4309 , 392: GCS_Yoff = 4310 , 393: GCS_Zanderij = 4311 , 394: GCS_MGI = 4312 , 395: GCS_Belge_1972 = 4313 , 396: GCS_DHDN = 4314 , 397: GCS_Conakry_1905 = 4315 , 398: GCS_WGS_72 = 4322 , 399: GCS_WGS_72BE = 4324 , 400: GCS_WGS_84 = 4326 , 401: GCS_Bern_1898_Bern = 4801 , 402: GCS_Bogota_Bogota = 4802 , 403: GCS_Lisbon_Lisbon = 4803 , 404: GCS_Makassar_Jakarta = 4804 , 405: GCS_MGI_Ferro = 4805 , 406: GCS_Monte_Mario_Rome = 4806 , 407: GCS_NTF_Paris = 4807 , 408: GCS_Padang_Jakarta = 4808 , 409: GCS_Belge_1950_Brussels = 4809 , 410: GCS_Tananarive_Paris = 4810 , 411: GCS_Voirol_1875_Paris = 4811 , 412: GCS_Voirol_Unifie_Paris = 4812 , 413: GCS_Batavia_Jakarta = 4813 , 414: GCS_ATF_Paris = 4901 , 415: GCS_NDG_Paris = 4902 , 416: GCSE_Airy1830 = 4001 , 417: GCSE_AiryModified1849 = 4002 , 418: GCSE_AustralianNationalSpheroid = 4003 , 419: GCSE_Bessel1841 = 4004 , 420: GCSE_BesselModified = 4005 , 421: GCSE_BesselNamibia = 4006 , 422: GCSE_Clarke1858 = 4007 , 423: GCSE_Clarke1866 = 4008 , 424: GCSE_Clarke1866Michigan = 4009 , 425: GCSE_Clarke1880_Benoit = 4010 , 426: GCSE_Clarke1880_IGN = 4011 , 427: GCSE_Clarke1880_RGS = 4012 , 428: GCSE_Clarke1880_Arc = 4013 , 429: GCSE_Clarke1880_SGA1922 = 4014 , 430: GCSE_Everest1830_1937Adjustment = 4015 , 431: GCSE_Everest1830_1967Definition = 4016 , 432: GCSE_Everest1830_1975Definition = 4017 , 433: GCSE_Everest1830Modified = 4018 , 434: GCSE_GRS1980 = 4019 , 435: GCSE_Helmert1906 = 4020 , 436: GCSE_IndonesianNationalSpheroid = 4021 , 437: GCSE_International1924 = 4022 , 438: GCSE_International1967 = 4023 , 439: GCSE_Krassowsky1940 = 4024 , 440: GCSE_NWL9D = 4025 , 441: GCSE_NWL10D = 4026 , 442: GCSE_Plessis1817 = 4027 , 443: GCSE_Struve1860 = 4028 , 444: GCSE_WarOffice = 4029 , 445: GCSE_WGS84 = 4030 , 446: GCSE_GEM10C = 4031 , 447: GCSE_OSU86F = 4032 , 448: GCSE_OSU91A = 4033 , 449: GCSE_Clarke1880 = 4034 , 450: GCSE_Sphere = 4035 451: } GCSCode_t ; 452: 453: 454: 455: 456: typedef enum < short > { 457: Datum_Adindan = 6201 , 458: Datum_Australian_Geodetic_Datum_1966 = 6202 , 459: Datum_Australian_Geodetic_Datum_1984 = 6203 , 460: Datum_Ain_el_Abd_1970 = 6204 , 461: Datum_Afgooye = 6205 , 462: Datum_Agadez = 6206 , 463: Datum_Lisbon = 6207 , 464: Datum_Aratu = 6208 , 465: Datum_Arc_1950 = 6209 , 466: Datum_Arc_1960 = 6210 , 467: Datum_Batavia = 6211 , 468: Datum_Barbados = 6212 , 469: Datum_Beduaram = 6213 , 470: Datum_Beijing_1954 = 6214 , 471: Datum_Reseau_National_Belge_1950 = 6215 , 472: Datum_Bermuda_1957 = 6216 , 473: Datum_Bern_1898 = 6217 , 474: Datum_Bogota = 6218 , 475: Datum_Bukit_Rimpah = 6219 , 476: Datum_Camacupa = 6220 , 477: Datum_Campo_Inchauspe = 6221 , 478: Datum_Cape = 6222 , 479: Datum_Carthage = 6223 , 480: Datum_Chua = 6224 , 481: Datum_Corrego_Alegre = 6225 , 482: Datum_Cote_d_Ivoire = 6226 , 483: Datum_Deir_ez_Zor = 6227 , 484: Datum_Douala = 6228 , 485: Datum_Egypt_1907 = 6229 , 486: Datum_European_Datum_1950 = 6230 , 487: Datum_European_Datum_1987 = 6231 , 488: Datum_Fahud = 6232 , 489: Datum_Gandajika_1970 = 6233 , 490: Datum_Garoua = 6234 , 491: Datum_Guyane_Francaise = 6235 , 492: Datum_Hu_Tzu_Shan = 6236 , 493: Datum_Hungarian_Datum_1972 = 6237 , 494: Datum_Indonesian_Datum_1974 = 6238 , 495: Datum_Indian_1954 = 6239 , 496: Datum_Indian_1975 = 6240 , 497: Datum_Jamaica_1875 = 6241 , 498: Datum_Jamaica_1969 = 6242 , 499: Datum_Kalianpur = 6243 , 500: Datum_Kandawala = 6244 , 501: Datum_Kertau = 6245 , 502: Datum_Kuwait_Oil_Company = 6246 , 503: Datum_La_Canoa = 6247 , 504: Datum_Provisional_S_American_Datum_1956 = 6248 , 505: Datum_Lake = 6249 , 506: Datum_Leigon = 6250 , 507: Datum_Liberia_1964 = 6251 , 508: Datum_Lome = 6252 , 509: Datum_Luzon_1911 = 6253 , 510: Datum_Hito_XVIII_1963 = 6254 , 511: Datum_Herat_North = 6255 , 512: Datum_Mahe_1971 = 6256 , 513: Datum_Makassar = 6257 , 514: Datum_European_Reference_System_1989 = 6258 , 515: Datum_Malongo_1987 = 6259 , 516: Datum_Manoca = 6260 , 517: Datum_Merchich = 6261 , 518: Datum_Massawa = 6262 , 519: Datum_Minna = 6263 , 520: Datum_Mhast = 6264 , 521: Datum_Monte_Mario = 6265 , 522: Datum_M_poraloko = 6266 , 523: Datum_North_American_Datum_1927 = 6267 , 524: Datum_NAD_Michigan = 6268 , 525: Datum_North_American_Datum_1983 = 6269 , 526: Datum_Nahrwan_1967 = 6270 , 527: Datum_Naparima_1972 = 6271 , 528: Datum_New_Zealand_Geodetic_Datum_1949 = 6272 , 529: Datum_NGO_1948 = 6273 , 530: Datum_Datum_73 = 6274 , 531: Datum_Nouvelle_Triangulation_Francaise = 6275 , 532: Datum_NSWC_9Z_2 = 6276 , 533: Datum_OSGB_1936 = 6277 , 534: Datum_OSGB_1970_SN = 6278 , 535: Datum_OS_SN_1980 = 6279 , 536: Datum_Padang_1884 = 6280 , 537: Datum_Palestine_1923 = 6281 , 538: Datum_Pointe_Noire = 6282 , 539: Datum_Geocentric_Datum_of_Australia_1994 = 6283 , 540: Datum_Pulkovo_1942 = 6284 , 541: Datum_Qatar = 6285 , 542: Datum_Qatar_1948 = 6286 , 543: Datum_Qornoq = 6287 , 544: Datum_Loma_Quintana = 6288 , 545: Datum_Amersfoort = 6289 , 546: Datum_RT38 = 6290 , 547: Datum_South_American_Datum_1969 = 6291 , 548: Datum_Sapper_Hill_1943 = 6292 , 549: Datum_Schwarzeck = 6293 , 550: Datum_Segora = 6294 , 551: Datum_Serindung = 6295 , 552: Datum_Sudan = 6296 , 553: Datum_Tananarive_1925 = 6297 , 554: Datum_Timbalai_1948 = 6298 , 555: Datum_TM65 = 6299 , 556: Datum_TM75 = 6300 , 557: Datum_Tokyo = 6301 , 558: Datum_Trinidad_1903 = 6302 , 559: Datum_Trucial_Coast_1948 = 6303 , 560: Datum_Voirol_1875 = 6304 , 561: Datum_Voirol_Unifie_1960 = 6305 , 562: Datum_Bern_1938 = 6306 , 563: Datum_Nord_Sahara_1959 = 6307 , 564: Datum_Stockholm_1938 = 6308 , 565: Datum_Yacare = 6309 , 566: Datum_Yoff = 6310 , 567: Datum_Zanderij = 6311 , 568: Datum_Militar_Geographische_Institut = 6312 , 569: Datum_Reseau_National_Belge_1972 = 6313 , 570: Datum_Deutsche_Hauptdreiecksnetz = 6314 , 571: Datum_Conakry_1905 = 6315 , 572: Datum_WGS72 = 6322 , 573: Datum_WGS72_Transit_Broadcast_Ephemeris = 6324 , 574: Datum_WGS84 = 6326 , 575: Datum_Ancienne_Triangulation_Francaise = 6901 , 576: Datum_Nord_de_Guerre = 6902 , 577: 578: 579: 580: DatumE_Airy1830 = 6001 , 581: DatumE_AiryModified1849 = 6002 , 582: DatumE_AustralianNationalSpheroid = 6003 , 583: DatumE_Bessel1841 = 6004 , 584: DatumE_BesselModified = 6005 , 585: DatumE_BesselNamibia = 6006 , 586: DatumE_Clarke1858 = 6007 , 587: DatumE_Clarke1866 = 6008 , 588: DatumE_Clarke1866Michigan = 6009 , 589: DatumE_Clarke1880_Benoit = 6010 , 590: DatumE_Clarke1880_IGN = 6011 , 591: DatumE_Clarke1880_RGS = 6012 , 592: DatumE_Clarke1880_Arc = 6013 , 593: DatumE_Clarke1880_SGA1922 = 6014 , 594: DatumE_Everest1830_1937Adjustment = 6015 , 595: DatumE_Everest1830_1967Definition = 6016 , 596: DatumE_Everest1830_1975Definition = 6017 , 597: DatumE_Everest1830Modified = 6018 , 598: DatumE_GRS1980 = 6019 , 599: DatumE_Helmert1906 = 6020 , 600: DatumE_IndonesianNationalSpheroid = 6021 , 601: DatumE_International1924 = 6022 , 602: DatumE_International1967 = 6023 , 603: DatumE_Krassowsky1960 = 6024 , 604: DatumE_NWL9D = 6025 , 605: DatumE_NWL10D = 6026 , 606: DatumE_Plessis1817 = 6027 , 607: DatumE_Struve1860 = 6028 , 608: DatumE_WarOffice = 6029 , 609: DatumE_WGS84 = 6030 , 610: DatumE_GEM10C = 6031 , 611: DatumE_OSU86F = 6032 , 612: DatumE_OSU91A = 6033 , 613: DatumE_Clarke1880 = 6034 , 614: DatumE_Sphere = 6035 615: } DatumCode_t ; 616: 617: 618: 619: 620: typedef enum < short > { 621: Ellipse_Airy_1830 = 7001 , 622: Ellipse_Airy_Modified_1849 = 7002 , 623: Ellipse_Australian_National_Spheroid = 7003 , 624: Ellipse_Bessel_1841 = 7004 , 625: Ellipse_Bessel_Modified = 7005 , 626: Ellipse_Bessel_Namibia = 7006 , 627: Ellipse_Clarke_1858 = 7007 , 628: Ellipse_Clarke_1866 = 7008 , 629: Ellipse_Clarke_1866_Michigan = 7009 , 630: Ellipse_Clarke_1880_Benoit = 7010 , 631: Ellipse_Clarke_1880_IGN = 7011 , 632: Ellipse_Clarke_1880_RGS = 7012 , 633: Ellipse_Clarke_1880_Arc = 7013 , 634: Ellipse_Clarke_1880_SGA_1922 = 7014 , 635: Ellipse_Everest_1830_1937_Adjustment = 7015 , 636: Ellipse_Everest_1830_1967_Definition = 7016 , 637: Ellipse_Everest_1830_1975_Definition = 7017 , 638: Ellipse_Everest_1830_Modified = 7018 , 639: Ellipse_GRS_1980 = 7019 , 640: Ellipse_Helmert_1906 = 7020 , 641: Ellipse_Indonesian_National_Spheroid = 7021 , 642: Ellipse_International_1924 = 7022 , 643: Ellipse_International_1967 = 7023 , 644: Ellipse_Krassowsky_1940 = 7024 , 645: Ellipse_NWL_9D = 7025 , 646: Ellipse_NWL_10D = 7026 , 647: Ellipse_Plessis_1817 = 7027 , 648: Ellipse_Struve_1860 = 7028 , 649: Ellipse_War_Office = 7029 , 650: Ellipse_WGS_84 = 7030 , 651: Ellipse_GEM_10C = 7031 , 652: Ellipse_OSU86F = 7032 , 653: Ellipse_OSU91A = 7033 , 654: Ellipse_Clarke_1880 = 7034 , 655: Ellipse_Sphere = 7035 656: } EllipsoidCode_t ; 657: 658: 659: 660: typedef enum < short > { 661: PM_Greenwich = 8901 , 662: PM_Lisbon = 8902 , 663: PM_Paris = 8903 , 664: PM_Bogota = 8904 , 665: PM_Madrid = 8905 , 666: PM_Rome = 8906 , 667: PM_Bern = 8907 , 668: PM_Jakarta = 8908 , 669: PM_Ferro = 8909 , 670: PM_Brussels = 8910 , 671: PM_Stockholm = 8911 672: } PrimeMeridianCode_t ; 673: 674: 675: 676: 677: 678: 679: typedef enum < short > { 680: CT_TransverseMercator = 1 , 681: CT_TransvMercator_Modified_Alaska = 2 , 682: CT_ObliqueMercator = 3 , 683: CT_ObliqueMercator_Laborde = 4 , 684: CT_ObliqueMercator_Rosenmund = 5 , 685: CT_ObliqueMercator_Spherical = 6 , 686: CT_Mercator = 7 , 687: CT_LambertConfConic_2SP = 8 , 688: CT_LambertConfConic_Helmert = 9 , 689: CT_LambertAzimEqualArea = 10 , 690: CT_AlbersEqualArea = 11 , 691: CT_AzimuthalEquidistant = 12 , 692: CT_EquidistantConic = 13 , 693: CT_Stereographic = 14 , 694: CT_PolarStereographic = 15 , 695: CT_ObliqueStereographic = 16 , 696: CT_Equirectangular = 17 , 697: CT_CassiniSoldner = 18 , 698: CT_Gnomonic = 19 , 699: CT_MillerCylindrical = 20 , 700: CT_Orthographic = 21 , 701: CT_Polyconic = 22 , 702: CT_Robinson = 23 , 703: CT_Sinusoidal = 24 , 704: CT_VanDerGrinten = 25 , 705: CT_NewZealandMapGrid = 26 , 706: CT_TransvMercator_SouthOriented = 27 707: } CTCode_t ; 708: 709: 710: 711: 712: 713: typedef struct { 714: SetBackColor ( cLtAqua ) ; 715: GeoKEYlabel label ; 716: if ( ReadUShort ( FTell ( ) ) != 0 ) 717: { 718: TAG TiffTagLocation ; 719: uint16 Length ; 720: uint16 Offset ; 721: } 722: else 723: { 724: uint16 direct ; 725: uint16 size ; 726: 727: 728: switch ( size ) { 729: case 1 : 730: 731: 732: switch ( label ) { 733: case GTModelTypeGeoKey : 734: modeltype_t value ; 735: break ; 736: 737: case GTRasterTypeGeoKey : 738: rastertype_t value ; 739: break ; 740: 741: case GeographicTypeGeoKey : 742: GCSCode_t value ; 743: break ; 744: 745: case GeogGeodeticDatumGeoKey : 746: DatumCode_t value ; 747: break ; 748: 749: case GeogPrimeMeridianGeoKey : 750: PrimeMeridianCode_t value ; 751: break ; 752: 753: case GeogLinearUnitsGeoKey : 754: LinearUnitCode_t value ; 755: break ; 756: 757: case GeogAngularUnitsGeoKey : 758: AngularUnitCode_t value ; 759: break ; 760: 761: case GeogEllipsoidGeoKey : 762: EllipsoidCode_t value ; 763: break ; 764: 765: case GeogAzimuthUnitsGeoKey : 766: AngularUnitCode_t value ; 767: break ; 768: 769: case ProjectedCSTypeGeoKey : 770: short value ; 771: break ; 772: 773: case ProjectionGeoKey : 774: short value ; 775: break ; 776: 777: case ProjCoordTransGeoKey : 778: short value ; 779: break ; 780: 781: case ProjLinearUnitsGeoKey : 782: short value ; 783: break ; 784: 785: case VerticalCSTypeGeoKey : 786: short value ; 787: break ; 788: 789: case VerticalDatumGeoKey : 790: short value ; 791: break ; 792: 793: case VerticalUnitsGeoKey : 794: LinearUnitCode_t value ; 795: break ; 796: 797: default : 798: short value ; 799: } ; 800: break ; 801: 802: default : 803: double value ; 804: } ; 805: 806: } 807: } GEOKEY < read = readGEOKEY > ; 808: 809: 810: 811: 812: 813: 814: string readGEOKEY ( local GEOKEY & gk ) { 815: local string s ; 816: 817: SPrintf ( s , "%s (%d)" , EnumToString ( gk . label ) , gk . label ) ; 818: return s ; 819: } 820: 821: 822: typedef struct eGEOKEYDIR { 823: SetBackColor ( cLtAqua ) ; 824: uint16 GeoTiffVersion ; 825: uint16 GeoTiffRevMajor ; 826: uint16 GeoTiffRevMinor ; 827: uint16 GeoKeyCount ; 828: local uint16 i ; 829: for ( i == 0 ; i < GeoKeyCount ; i ++ ) 830: { 831: GEOKEY GeoKeyValue ; 832: } ; 833: } GEOKEYDIR ; 834: 835: 836: 837: 838: typedef struct { 839: uint32 num ; 840: uint32 dom ; 841: } RATIONAL < read = readRATIONAL , write = writeRATIONAL > ; 842: 843: string readRATIONAL ( local RATIONAL & r ) { 844: local string s ; 845: SPrintf ( s , "%d/%d" , r . num , r . dom ) ; 846: return s ; 847: } 848: 849: void writeRATIONAL ( local RATIONAL & r , local string s ) { 850: SScanf ( s , "%d/%d" , r . num , r . dom ) ; 851: } 852: 853: 854: 855: typedef struct { 856: int32 num ; 857: int32 dom ; 858: } SRATIONAL < read = readSRATIONAL , write = writeSRATIONAL > ; 859: 860: string readSRATIONAL ( local SRATIONAL & r ) { 861: local string s ; 862: SPrintf ( s , "%d/%d" , r . num , r . dom ) ; 863: return s ; 864: } 865: 866: void writeSRATIONAL ( local SRATIONAL & r , local string s ) { 867: SScanf ( s , "%d/%d" , r . num , r . dom ) ; 868: } 869: 870: 871: 872: 873: 874: typedef struct { 875: SetBackColor ( cLtGreen ) ; 876: TAG tag ; 877: TAGTYPE typ ; 878: uint32 count ; 879: if ( typ == eBYTE ) { 880: if ( count < 4 ) { 881: ubyte data [ count ] ; 882: ubyte padding [ 4 - count ] ; 883: } else if ( count == 4 ) { 884: ubyte data [ count ] ; 885: } else { 886: SetBackColor ( cLtBlue ) ; 887: uint32 offset < format = hex > ; 888: local quad curpos = FTell ( ) ; 889: FSeek ( offset ) ; 890: ubyte value [ count ] ; 891: FSeek ( curpos ) ; 892: } 893: } else if ( typ == eASCII ) { 894: if ( count < 4 ) { 895: char data [ count ] ; 896: char padding [ 4 - count ] ; 897: } else if ( count == 4 ) { 898: char data [ count ] ; 899: } else { 900: SetBackColor ( cLtBlue ) ; 901: uint32 offset < format = hex > ; 902: local quad curpos = FTell ( ) ; 903: FSeek ( offset ) ; 904: char data [ count ] ; 905: FSeek ( curpos ) ; 906: } 907: } else if ( typ == eSHORT ) { 908: if ( count == 1 ) { 909: if ( tag == Compression ) { 910: COMP value ; 911: } else if ( tag == PhotometricInterpretation ) { 912: PHOTO value ; 913: } else if ( tag == ResolutionUnit ) { 914: RES value ; 915: } else { 916: uint16 value ; 917: } 918: uint16 padding ; 919: } else if ( count == 2 ) { 920: uint16 value [ 2 ] ; 921: } else { 922: SetBackColor ( cLtBlue ) ; 923: uint32 offset < format = hex > ; 924: local quad curpos = FTell ( ) ; 925: FSeek ( offset ) ; 926: if ( tag == GeoKeyDirectoryTag ) { 927: GEOKEYDIR value ; 928: } else { 929: uint16 value [ count ] ; 930: } 931: FSeek ( curpos ) ; 932: } 933: } else if ( typ == eLONG ) { 934: if ( count == 1 ) { 935: uint32 value ; 936: } else { 937: SetBackColor ( cLtBlue ) ; 938: uint32 offset < format = hex > ; 939: local quad curpos = FTell ( ) ; 940: FSeek ( offset ) ; 941: uint32 value [ count ] ; 942: FSeek ( curpos ) ; 943: } 944: } else if ( typ == eRATIONAL ) { 945: SetBackColor ( cLtBlue ) ; 946: uint32 offset < format = hex > ; 947: local quad curpos = FTell ( ) ; 948: FSeek ( offset ) ; 949: if ( count == 1 ) { 950: RATIONAL value ; 951: } else { 952: RATIONAL value [ count ] ; 953: } 954: FSeek ( curpos ) ; 955: } else if ( typ == eSBYTE ) { 956: if ( count < 4 ) { 957: byte data [ count ] ; 958: ubyte padding [ 4 - count ] ; 959: } else if ( count == 4 ) { 960: byte data [ count ] ; 961: } else { 962: SetBackColor ( cLtBlue ) ; 963: uint32 offset < format = hex > ; 964: local quad curpos = FTell ( ) ; 965: FSeek ( offset ) ; 966: byte value [ count ] ; 967: FSeek ( curpos ) ; 968: } 969: } else if ( typ == eUNDEF ) { 970: if ( count < 4 ) { 971: ubyte data [ count ] ; 972: ubyte padding [ 4 - count ] ; 973: } else if ( count == 4 ) { 974: ubyte data [ count ] ; 975: } else { 976: SetBackColor ( cLtBlue ) ; 977: uint32 offset < format = hex > ; 978: local quad curpos = FTell ( ) ; 979: FSeek ( offset ) ; 980: ubyte value [ count ] ; 981: FSeek ( curpos ) ; 982: } 983: } else if ( typ == eSSHORT ) { 984: if ( count == 1 ) { 985: int16 value ; 986: int16 padding ; 987: } else if ( count == 2 ) { 988: int16 value [ 2 ] ; 989: } else { 990: SetBackColor ( cLtBlue ) ; 991: uint32 offset < format = hex > ; 992: local quad curpos = FTell ( ) ; 993: FSeek ( offset ) ; 994: int16 value [ count ] ; 995: FSeek ( curpos ) ; 996: } 997: } else if ( typ == eSLONG ) { 998: if ( count == 1 ) { 999: int32 value ; 1000: } else { 1001: SetBackColor ( cLtBlue ) ; 1002: uint32 offset < format = hex > ; 1003: local quad curpos = FTell ( ) ; 1004: FSeek ( offset ) ; 1005: int32 value [ count ] ; 1006: FSeek ( curpos ) ; 1007: } 1008: } else if ( typ == eSRATIONAL ) { 1009: SetBackColor ( cLtBlue ) ; 1010: uint32 offset < format = hex > ; 1011: local quad curpos = FTell ( ) ; 1012: FSeek ( offset ) ; 1013: if ( count == 1 ) { 1014: SRATIONAL value ; 1015: } else { 1016: SRATIONAL value [ count ] ; 1017: } 1018: FSeek ( curpos ) ; 1019: } else if ( typ == eFLOAT ) { 1020: if ( count == 1 ) { 1021: float value ; 1022: } else { 1023: SetBackColor ( cLtBlue ) ; 1024: uint32 offset < format = hex > ; 1025: local quad curpos = FTell ( ) ; 1026: FSeek ( offset ) ; 1027: float value [ count ] ; 1028: FSeek ( curpos ) ; 1029: } 1030: } else if ( typ == eDOUBLE ) { 1031: SetBackColor ( cLtBlue ) ; 1032: uint32 offset < format = hex > ; 1033: local quad curpos = FTell ( ) ; 1034: FSeek ( offset ) ; 1035: if ( count == 1 ) { 1036: double value ; 1037: } else { 1038: double value [ count ] ; 1039: } 1040: FSeek ( curpos ) ; 1041: } else { 1042: 1043: 1044: 1045: SetBackColor ( cLtRed ) ; 1046: uint32 valOffset < format = hex > ; 1047: } 1048: SetBackColor ( cNone ) ; 1049: } ENT < read = readENT > ; 1050: 1051: 1052: 1053: 1054: 1055: 1056: string readENT ( local ENT & ent ) { 1057: local string s ; 1058: 1059: SPrintf ( s , "%s (%d): %s" , EnumToString ( ent . tag ) , ent . tag , EnumToString ( ent . typ ) ) ; 1060: return s ; 1061: } 1062: 1063: 1064: typedef struct { 1065: uint16 numentries ; 1066: ENT dir [ numentries ] < optimize = false > ; 1067: uint32 offset < format = hex > ; 1068: nextIFD = ( quad ) offset ; 1069: } IFD < read = readIFD > ; 1070: 1071: 1072: 1073: 1074: 1075: 1076: string readIFD ( local IFD & ifd ) { 1077: local string s ; 1078: 1079: SPrintf ( s , "%d: %s" , ifd . numentries , ( ifd . numentries > 0 ) ? EnumToString ( ifd . dir [ 0 ] . tag ) : "" ) ; 1080: return s ; 1081: } 1082: 1083: 1084: typedef struct { 1085: char bom [ 2 ] ; 1086: uint16 magic ; 1087: if ( magic != 42 ) { 1088: Warning ( "Invalid TIFF File: Bad Magic number" ) ; 1089: return - 1 ; 1090: } 1091: uint32 offset < format = hex > ; 1092: 1093: 1094: if ( offset == 0 ) { 1095: Warning ( "Invalid TIFF File: No initial IFD" ) ; 1096: return - 1 ; 1097: } 1098: 1099: nextIFD = ( quad ) offset ; 1100: } IFH ; 1101: 1102: 1103: 1104: 1105: 1106: SetBackColor ( cLtAqua ) ; 1107: IFH ifh ; 1108: while ( nextIFD ) { 1109: FSeek ( nextIFD ) ; 1110: SetBackColor ( cLtGreen ) ; 1111: IFD ifd ; 1112: SetBackColor ( cNone ) ; 1113: } 1114: tok_eof