Main Page   Data Structures   File List   Data Fields   Globals  

Sadie_FileIO.c

Go to the documentation of this file.
00001 /*
00002 ##########################################
00003 # Sadie_FileIO.c -
00004 #   Set of routines for linking SADIE file I/O routines to tcl/tk.
00005 #
00006 # RCS: $Id: Sadie_FileIO.c,v 2.6 2000/08/15 00:14:49 giri Exp $ 
00007 # 
00008 # Digital Image Analysis Lab
00009 # Dept. of Electrical and Computer Engineering
00010 # University of Arizona
00011 ##########################################
00012 */
00013 
00014 #include <tcl.h>
00015 #include <tk.h>
00016 #include <stdio.h>
00017 #include <string.h>
00018 #include "sadie.h"
00019 #include <math.h>
00020 
00021 
00022 /* RCS Indentification information */
00023 static char rcsid[] = "$Id: Sadie_FileIO.c,v 2.6 2000/08/15 00:14:49 giri Exp $";
00024 
00025 
00026 int Sadie_FileIO_OpenCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00027 {
00028   int addrstr;
00029   long filesize;
00030   IMAGE *theimg=NULL;
00031   char   msg[SLEN];
00032   Tcl_Obj* tclvar=NULL;
00033 
00034   if( argc <= 3 ) {
00035     sprintf(msg, "Usage: Sadie_FileIO_Open filename filesize title");
00036     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00037     return TCL_ERROR;
00038   }
00039 
00040   /* Read the size of the file */
00041   tclvar = Tcl_NewStringObj(argv[2],-1);
00042   if (Tcl_GetLongFromObj(interp, tclvar, &filesize) == TCL_ERROR) {
00043       return TCL_ERROR;
00044   }
00045   Tcl_DecrRefCount(tclvar);
00046   
00047   DISK2IMG (argv[1],filesize,&theimg);
00048   
00049   if (theimg) sprintf( theimg->text, "%s", argv[3]);
00050   addrstr = (int) theimg;
00051 
00052   sprintf(msg, "%x", addrstr);
00053   Tcl_SetResult(interp, msg, TCL_VOLATILE);
00054 
00055   return TCL_OK;
00056 }
00057 
00058 int Sadie_FileIO_OpenTIFFCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00059 {
00060   int addrstr;
00061   IMAGE *theimg=NULL;
00062   char   msg[SLEN];
00063 
00064   if( argc <= 2 ) {
00065     sprintf(msg, "Usage: Sadie_FileIO_OpenTIFF filename title");
00066     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00067     return TCL_ERROR;
00068   }
00069 
00070   TIFF2IMG (argv[1],&theimg);
00071   
00072   if (theimg) sprintf( theimg->text, "%s", argv[2]);
00073   addrstr = (int) theimg;
00074 
00075   sprintf(msg, "%x", addrstr);
00076   Tcl_SetResult(interp, msg, TCL_VOLATILE);
00077 
00078   return TCL_OK;
00079 }
00080 
00081 int Sadie_FileIO_OpenPNMCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00082 {
00083   int addrstr;
00084   IMAGE *theimg=NULL;
00085   char   msg[SLEN];
00086 
00087   if( argc <= 2 ) {
00088     sprintf(msg, "Usage: Sadie_FileIO_OpenPNM filename title");
00089     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00090     return TCL_ERROR;
00091   }
00092 
00093   PNM2IMG (argv[1],&theimg);
00094   
00095   if (theimg) sprintf( theimg->text, "%s", argv[2]);
00096   addrstr = (int) theimg;
00097 
00098   sprintf(msg, "%x", addrstr);
00099   Tcl_SetResult(interp, msg, TCL_VOLATILE);
00100 
00101   return TCL_OK;
00102 }
00103 
00104 
00105 
00106 int Sadie_FileIO_ImportCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00107 {
00108   int addrstr;
00109   long filesize;
00110   IMAGE *theimg=NULL;
00111   char* name;
00112   int hdrsize;
00113   int nbnd;
00114   int nlin;
00115   int npix;
00116   int nbit;
00117   int option;
00118   int subsamp;
00119   int fromband, toband, incrband, fromline, toline, incrline, frompixel, topixel, incrpixel;
00120   char   msg[SLEN];
00121   Tcl_Obj* tclvar=NULL;
00122   
00123   if( argc <= 19 ) {
00124     sprintf(msg, "Sadie_FileIO_Import expects a minimum of 18 arguments");
00125     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00126     return TCL_ERROR;
00127   }
00128 
00129 
00130 
00131   name = argv[1];
00132 
00133   if( Tcl_GetInt (interp, argv[2], &hdrsize) != TCL_OK ) {
00134     return TCL_ERROR;
00135   }
00136 
00137   if( Tcl_GetInt (interp, argv[3], &nbnd) != TCL_OK ) {
00138     return TCL_ERROR;
00139   }
00140   
00141   if( Tcl_GetInt (interp, argv[4], &nlin) != TCL_OK ) {
00142     return TCL_ERROR;
00143   }
00144 
00145   if( Tcl_GetInt (interp, argv[5], &npix) != TCL_OK ) {
00146     return TCL_ERROR;
00147   }
00148   
00149   if( Tcl_GetInt (interp, argv[6], &nbit) != TCL_OK ) {
00150     return TCL_ERROR;
00151   }
00152 
00153   if( Tcl_GetInt (interp, argv[7], &option) != TCL_OK ) {
00154     return TCL_ERROR;
00155   }
00156 
00157   if( Tcl_GetInt (interp, argv[8], &subsamp) != TCL_OK ) {
00158     return TCL_ERROR;
00159   }
00160 
00161   if (subsamp) {
00162     if( Tcl_GetInt (interp, argv[9], &fromband) != TCL_OK ) {
00163       return TCL_ERROR;
00164     }
00165   
00166     if( Tcl_GetInt (interp, argv[10], &toband) != TCL_OK ) {
00167       return TCL_ERROR;
00168     }
00169 
00170     if( Tcl_GetInt (interp, argv[11], &incrband) != TCL_OK ) {
00171       return TCL_ERROR;
00172     }
00173 
00174     if( Tcl_GetInt (interp, argv[12], &fromline) != TCL_OK ) {
00175       return TCL_ERROR;
00176     }
00177 
00178     if( Tcl_GetInt (interp, argv[13], &toline) != TCL_OK ) {
00179       return TCL_ERROR;
00180     }
00181 
00182     if( Tcl_GetInt (interp, argv[14], &incrline) != TCL_OK ) {
00183       return TCL_ERROR;
00184     }
00185 
00186     if( Tcl_GetInt (interp, argv[15], &frompixel) != TCL_OK ) {
00187       return TCL_ERROR;
00188     }
00189 
00190     if( Tcl_GetInt (interp, argv[16], &topixel) != TCL_OK ) {
00191       return TCL_ERROR;
00192     }
00193 
00194     if( Tcl_GetInt (interp, argv[17], &incrpixel) != TCL_OK ) {
00195       return TCL_ERROR;
00196     }
00197     
00198     if (fromband > 0) fromband--;
00199     if (toband > 0) toband--;
00200     if (fromline > 0) fromline--;
00201     if (toline > 0) toline--;
00202     if (frompixel > 0) frompixel--;
00203     if (topixel > 0) topixel--;
00204   }
00205   else {
00206     fromband = 0;
00207     fromline = 0;
00208     frompixel = 0;
00209     
00210     toband = nbnd-1;
00211     toline = nlin-1;
00212     topixel = npix-1;
00213     
00214     incrband = 1;
00215     incrline = 1;
00216     incrpixel = 1;
00217   }
00218 
00219 
00220   /* Read the size of the file */
00221   tclvar = Tcl_NewStringObj(argv[18],-1);
00222   if (Tcl_GetLongFromObj(interp, tclvar, &filesize) == TCL_ERROR) {
00223       return TCL_ERROR;
00224   }
00225   Tcl_DecrRefCount(tclvar);
00226     
00227 
00228   IMPORT(name,option,hdrsize,nbnd,nlin,npix,nbit,fromband,fromline,frompixel,
00229     incrband,incrline,incrpixel,toband,toline,topixel,filesize,&theimg);
00230   
00231   if (theimg) sprintf( theimg->text, "%s", name);
00232   addrstr = (int) theimg;
00233 
00234   sprintf(msg, "%x", addrstr);
00235   Tcl_SetResult(interp, msg, TCL_VOLATILE);
00236 
00237   return TCL_OK;
00238 }
00239 
00240 
00241 
00242 int Sadie_FileIO_SaveCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00243 {
00244   int imgaddr;
00245   IMAGE *theimg=NULL;
00246   char* name;
00247   int bitsperpix;
00248   char   msg[SLEN];
00249   
00250 
00251   if( argc <= 3 ) {
00252     sprintf(msg, "Usage: Sadie_FileIO_Save image_address filename bitsperpixel");
00253     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00254     return TCL_ERROR;
00255   }
00256 
00257   sscanf(argv[1], "%x", &imgaddr);
00258   theimg = (IMAGE *) imgaddr;
00259 
00260   sscanf(argv[3], "%d", &bitsperpix);
00261 
00262   name = argv[2];
00263 
00264 
00265   IMG2DISK (theimg,bitsperpix,name);
00266   
00267   return TCL_OK;
00268 }
00269 
00270 
00271 int Sadie_FileIO_SaveEPSCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00272 {
00273   int imgaddr;
00274   IMAGE *theimg=NULL;
00275   char* name;
00276   int bitsperpix;
00277   char   msg[SLEN];
00278   
00279 
00280   if( argc <= 3 ) {
00281     sprintf(msg, "Usage: Sadie_FileIO_SaveEPS image_address filename bitsperpixel");
00282     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00283     return TCL_ERROR;
00284   }
00285 
00286   sscanf(argv[1], "%x", &imgaddr);
00287   theimg = (IMAGE *) imgaddr;
00288 
00289   sscanf(argv[3], "%d", &bitsperpix);
00290 
00291   name = argv[2];
00292 
00293 
00294   IMG2EPSF (theimg,name,bitsperpix);
00295   
00296   return TCL_OK;
00297 }
00298 
00299 
00300 
00301 int Sadie_FileIO_SaveTIFFCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00302 {
00303   int imgaddr;
00304   IMAGE *theimg=NULL;
00305   char* name;
00306   int bitsperpix;
00307   char   msg[SLEN];
00308   
00309 
00310   if( argc <= 3 ) {
00311     sprintf(msg, "Usage: Sadie_FileIO_SaveTIFF image_address filename bitsperpixel");
00312     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00313     return TCL_ERROR;
00314   }
00315 
00316   sscanf(argv[1], "%x", &imgaddr);
00317   theimg = (IMAGE *) imgaddr;
00318 
00319   sscanf(argv[3], "%d", &bitsperpix);
00320 
00321   name = argv[2];
00322 
00323 
00324   IMG2TIFF (theimg,name,bitsperpix);
00325   
00326   return TCL_OK;
00327 }
00328 
00329 
00330 int Sadie_FileIO_SavePNMCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00331 {
00332   int imgaddr;
00333   IMAGE *theimg=NULL;
00334   char* name;
00335   int bitsperpix;
00336   char   msg[SLEN];
00337   
00338 
00339   if( argc <= 2 ) {
00340     sprintf(msg, "Usage: Sadie_FileIO_SavePNM image_address filename");
00341     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00342     return TCL_ERROR;
00343   }
00344 
00345   sscanf(argv[1], "%x", &imgaddr);
00346   theimg = (IMAGE *) imgaddr;
00347 
00348   name = argv[2];
00349 
00350 
00351   IMG2PNM(theimg,name);
00352   
00353   return TCL_OK;
00354 }
00355 
00356 
00357 int Sadie_FileIO_SaveTEXTCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00358 {
00359   int imgaddr;
00360   IMAGE *theimg=NULL;
00361   char* name;
00362   char   msg[SLEN];
00363   
00364 
00365   if( argc <= 2 ) {
00366     sprintf(msg, "Usage: Sadie_FileIO_SaveTEXT image_address filename");
00367     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00368     return TCL_ERROR;
00369   }
00370 
00371   sscanf(argv[1], "%x", &imgaddr);
00372   theimg = (IMAGE *) imgaddr;
00373 
00374   name = argv[2];
00375 
00376   IMG2TEXT(theimg,name);
00377   
00378   return TCL_OK;
00379 }
00380 
00381 
00382 /*************************************************************************
00383  *
00384  * This procedure initializes the the Sadie_FileIO procedures when
00385  * this package is loaded.
00386  *
00387  *************************************************************************/
00388 int Sadie_FileIO_Init(Tcl_Interp *interp) {
00389   Tcl_CreateCommand(interp, "Sadie_FileIO_Open", Sadie_FileIO_OpenCmd, 
00390         (ClientData) NULL, NULL);
00391   Tcl_CreateCommand(interp, "Sadie_FileIO_OpenTIFF", Sadie_FileIO_OpenTIFFCmd, 
00392         (ClientData) NULL, NULL);
00393   Tcl_CreateCommand(interp, "Sadie_FileIO_OpenPNM", Sadie_FileIO_OpenPNMCmd, 
00394         (ClientData) NULL, NULL);
00395   Tcl_CreateCommand(interp, "Sadie_FileIO_Import", Sadie_FileIO_ImportCmd, 
00396         (ClientData) NULL, NULL);
00397   Tcl_CreateCommand(interp, "Sadie_FileIO_Save", Sadie_FileIO_SaveCmd, 
00398         (ClientData) NULL, NULL);
00399   Tcl_CreateCommand(interp, "Sadie_FileIO_SaveEPS", Sadie_FileIO_SaveEPSCmd, 
00400         (ClientData) NULL, NULL);
00401   Tcl_CreateCommand(interp, "Sadie_FileIO_SaveTIFF", Sadie_FileIO_SaveTIFFCmd, 
00402         (ClientData) NULL, NULL);
00403   Tcl_CreateCommand(interp, "Sadie_FileIO_SavePNM", Sadie_FileIO_SavePNMCmd, 
00404         (ClientData) NULL, NULL);
00405   Tcl_CreateCommand(interp, "Sadie_FileIO_SaveTEXT", Sadie_FileIO_SaveTEXTCmd, 
00406         (ClientData) NULL, NULL);
00407 
00408   return TCL_OK;
00409 }
00410 
00411 

Generated on Wed Apr 9 08:56:11 2003 for TREES by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002