00001
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #if HAVE_CONFIG_H
00032 #include <config.h>
00033 #endif
00034 #include <tcl.h>
00035 #include <tk.h>
00036 #include <stdio.h>
00037 #include <string.h>
00038 #include <math.h>
00039 #include <sadie.h>
00040 #include "tclsadie.h"
00041
00060 int
00061 Sadie_FileIO_OpenCmd (ClientData client_data, Tcl_Interp* interp,
00062 int objc, Tcl_Obj * const objv[])
00063 {
00064 IMAGE *theimg = NULL;
00065 uint64_t filesize;
00066
00067 if (objc != 4)
00068 {
00069 Tcl_WrongNumArgs (interp, 1, objv, "filename filesize title");
00070 return TCL_ERROR;
00071 }
00072
00073 if (GetSadieUint64FromObj (interp, objv[2], &filesize) != TCL_OK)
00074 return TCL_ERROR;
00075 DISK2IMG (Tcl_GetString (objv[1]), 0, filesize, &theimg);
00076 return SetSadieNamedImageResult (interp, theimg, objv[3]);
00077 }
00078
00083 int
00084 Sadie_FileIO_OpenTIFFCmd (ClientData client_data, Tcl_Interp* interp,
00085 int objc, Tcl_Obj * const objv[])
00086 {
00087 IMAGE *theimg = NULL;
00088
00089 if (objc != 3)
00090 {
00091 Tcl_WrongNumArgs (interp, 1, objv, "filename title");
00092 return TCL_ERROR;
00093 }
00094
00095 return SetSadieNamedImageResult (interp, theimg, objv[2]);
00096 }
00097
00102 int
00103 Sadie_FileIO_OpenPNMCmd (ClientData client_data, Tcl_Interp* interp,
00104 int objc, Tcl_Obj * const objv[])
00105 {
00106 IMAGE *theimg = NULL;
00107
00108 if (objc != 3)
00109 {
00110 Tcl_WrongNumArgs (interp, 1, objv, "filename title");
00111 return TCL_ERROR;
00112 }
00113
00114 return SetSadieNamedImageResult (interp, theimg, objv[2]);
00115 }
00116
00151 int
00152 Sadie_FileIO_ImportCmd (ClientData client_data, Tcl_Interp* interp,
00153 int objc, Tcl_Obj * const objv[])
00154 {
00155 int option;
00156 uint64_t filesize;
00157 uint64_t hdrsize;
00158 uint32_t nbnd, nlin, npix, nbit;
00159 int subsamp;
00160 uint32_t fromband, toband, incrband;
00161 uint32_t fromline, toline, incrline;
00162 uint32_t frompixel, topixel, incrpixel;
00163 IMAGE *theimg = NULL;
00164
00165 if (objc < 19)
00166 {
00167 Tcl_WrongNumArgs (interp, 1, objv,
00168 "name hdrsize nbnd nlin npix nbit option subsamp fromband toband incrband fromline toline incrline frompixel topixel incrpixel filesize");
00169 return TCL_ERROR;
00170 }
00171 if ((GetSadieUint64FromObj (interp, objv[2], &hdrsize) != TCL_OK)
00172 || (GetSadieUintFromObj (interp, objv[3], &nbnd) != TCL_OK)
00173 || (GetSadieUintFromObj (interp, objv[4], &nlin) != TCL_OK)
00174 || (GetSadieUintFromObj (interp, objv[5], &npix) != TCL_OK)
00175 || (GetSadieUintFromObj (interp, objv[6], &nbit) != TCL_OK)
00176 || (Tcl_GetIntFromObj (interp, objv[7], &option) != TCL_OK)
00177 || (Tcl_GetBooleanFromObj (interp, objv[8], &subsamp) != TCL_OK))
00178 return TCL_ERROR;
00179 if (subsamp)
00180 {
00181 if ((GetSadieUintFromObj (interp, objv[9], &fromband) != TCL_OK)
00182 || (GetSadieUintFromObj (interp, objv[10], &toband) != TCL_OK)
00183 || (GetSadieUintFromObj (interp, objv[11], &incrband) != TCL_OK)
00184 || (GetSadieUintFromObj (interp, objv[12], &fromline) != TCL_OK)
00185 || (GetSadieUintFromObj (interp, objv[13], &toline) != TCL_OK)
00186 || (GetSadieUintFromObj (interp, objv[14], &incrline) != TCL_OK)
00187 || (GetSadieUintFromObj (interp, objv[15], &frompixel) != TCL_OK)
00188 || (GetSadieUintFromObj (interp, objv[16], &topixel) != TCL_OK)
00189 || (GetSadieUintFromObj (interp, objv[17], &incrpixel) != TCL_OK))
00190 return TCL_ERROR;
00191 if (fromband > 0)
00192 fromband--;
00193 if (toband > 0)
00194 toband--;
00195 if (fromline > 0)
00196 fromline--;
00197 if (toline > 0)
00198 toline--;
00199 if (frompixel > 0)
00200 frompixel--;
00201 if (topixel > 0)
00202 topixel--;
00203 }
00204 else
00205 {
00206 fromband = 0;
00207 fromline = 0;
00208 frompixel = 0;
00209 toband = nbnd-1;
00210 toline = nlin-1;
00211 topixel = npix-1;
00212 incrband = 1;
00213 incrline = 1;
00214 incrpixel = 1;
00215 }
00216 if (GetSadieUint64FromObj (interp, objv[18], &filesize) != TCL_OK)
00217 return TCL_ERROR;
00218 IMPORT (Tcl_GetString (objv[1]), 0, (short)option, filesize, hdrsize,
00219 nbnd, nlin, npix, nbit, fromband, fromline, frompixel,
00220 incrband, incrline, incrpixel, toband, toline, topixel, &theimg);
00221 return SetSadieNamedImageResult (interp, theimg, objv[1]);
00222 }
00223
00243 int
00244 Sadie_FileIO_SaveCmd(ClientData client_data, Tcl_Interp* interp,
00245 int objc, Tcl_Obj * const objv[])
00246 {
00247 IMAGE *theimg = NULL;
00248 uint32_t bitsperpix;
00249
00250 if (objc != 4)
00251 {
00252 Tcl_WrongNumArgs (interp, 1, objv,
00253 "image_ID filename bitsperpixel");
00254 return TCL_ERROR;
00255 }
00256 if ((GetSadieImageFromObj (objv[1], &theimg) != TCL_OK)
00257 || (GetSadieUintFromObj (interp, objv[3], &bitsperpix) != TCL_OK))
00258 return TCL_ERROR;
00259 IMG2DISK (theimg, Tcl_GetString (objv[2]), bitsperpix, 0, 0);
00260 return TCL_OK;
00261 }
00262
00280 int
00281 Sadie_FileIO_SaveEPSCmd (ClientData client_data, Tcl_Interp* interp,
00282 int objc, Tcl_Obj * const objv[])
00283 {
00284 IMAGE *theimg = NULL;
00285 uint32_t bitsperpix;
00286
00287 if (objc != 4)
00288 {
00289 Tcl_WrongNumArgs (interp, 1, objv, "image_ID filename bitsperpixel");
00290 return TCL_ERROR;
00291 }
00292 if ((GetSadieImageFromObj (objv[1], &theimg) != TCL_OK)
00293 || (GetSadieUintFromObj (interp, objv[3], &bitsperpix) != TCL_OK))
00294 return TCL_ERROR;
00295 IMG2EPSF (theimg, Tcl_GetString (objv[2]), bitsperpix, 0, 0);
00296 return TCL_OK;
00297 }
00298
00317 int
00318 Sadie_FileIO_SaveTIFFCmd (ClientData client_data, Tcl_Interp* interp,
00319 int objc, Tcl_Obj * const objv[])
00320 {
00321 IMAGE *theimg = NULL;
00322 uint32_t bitsperpix;
00323
00324 if (objc != 4)
00325 {
00326 Tcl_WrongNumArgs (interp, 1, objv, "image_ID filename bitsperpixel");
00327 return TCL_ERROR;
00328 }
00329 if ((GetSadieImageFromObj (objv[1], &theimg) != TCL_OK)
00330 || (GetSadieUintFromObj (interp, objv[3], &bitsperpix) != TCL_OK))
00331 return TCL_ERROR;
00332 IMG2TIFF (theimg, Tcl_GetString (objv[2]), bitsperpix, 0, 0);
00333 return TCL_OK;
00334 }
00335
00340 int
00341 Sadie_FileIO_SavePNMCmd (ClientData client_data, Tcl_Interp* interp,
00342 int objc, Tcl_Obj * const objv[])
00343 {
00344 IMAGE *theimg = NULL;
00345
00346 if (objc != 3)
00347 {
00348 Tcl_WrongNumArgs (interp, 1, objv, "image_ID filename");
00349 return TCL_ERROR;
00350 }
00351 if (GetSadieImageFromObj (objv[1], &theimg) != TCL_OK)
00352 return TCL_ERROR;
00353
00354 return TCL_OK;
00355 }
00356
00373 int
00374 Sadie_FileIO_SaveTEXTCmd (ClientData client_data, Tcl_Interp* interp,
00375 int objc, Tcl_Obj * const objv[])
00376 {
00377 IMAGE *theimg = NULL;
00378
00379 if (objc != 3)
00380 {
00381 Tcl_WrongNumArgs (interp, 1, objv, "image_ID filename");
00382 return TCL_ERROR;
00383 }
00384 if (GetSadieImageFromObj (objv[1], &theimg) != TCL_OK)
00385 return TCL_ERROR;
00386 IMG2TEXT (theimg, Tcl_GetString (objv[2]), 0, 0);
00387 return TCL_OK;
00388 }
00389
00396 int
00397 Sadie_FileIO_Init (Tcl_Interp *interp) {
00398 Tcl_CreateObjCommand (interp, "Sadie_FileIO_Open",
00399 Sadie_FileIO_OpenCmd, NULL, NULL);
00400 Tcl_CreateObjCommand (interp, "Sadie_FileIO_OpenTIFF",
00401 Sadie_FileIO_OpenTIFFCmd, NULL, NULL);
00402 Tcl_CreateObjCommand (interp, "Sadie_FileIO_OpenPNM",
00403 Sadie_FileIO_OpenPNMCmd, NULL, NULL);
00404 Tcl_CreateObjCommand (interp, "Sadie_FileIO_Import",
00405 Sadie_FileIO_ImportCmd, NULL, NULL);
00406 Tcl_CreateObjCommand (interp, "Sadie_FileIO_Save",
00407 Sadie_FileIO_SaveCmd, NULL, NULL);
00408 Tcl_CreateObjCommand (interp, "Sadie_FileIO_SaveEPS",
00409 Sadie_FileIO_SaveEPSCmd, NULL, NULL);
00410 Tcl_CreateObjCommand (interp, "Sadie_FileIO_SaveTIFF",
00411 Sadie_FileIO_SaveTIFFCmd, NULL, NULL);
00412 Tcl_CreateObjCommand (interp, "Sadie_FileIO_SavePNM",
00413 Sadie_FileIO_SavePNMCmd, NULL, NULL);
00414 Tcl_CreateObjCommand (interp, "Sadie_FileIO_SaveTEXT",
00415 Sadie_FileIO_SaveTEXTCmd, NULL, NULL);
00416 return TCL_OK;
00417 }