00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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
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
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
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
00385
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