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
00020
00021 static char rcsid[] =
00022 "$Id: Sadie_Multi.c,v 2.4 1999/02/11 14:33:03 conner Exp $";
00023
00024
00025
00026
00027 extern short nlev;
00028 extern short csize;
00029 extern double weight;
00030 extern double *count;
00031 extern PIXEL gain;
00032 extern PIXEL bias;
00033 extern PIXEL gmin;
00034 extern PIXEL gmax;
00035 extern PIXEL thresh;
00036 extern PIXEL gbrk[2][4];
00037 extern PIXEL *table;
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 int
00058 Sadie_Multi_CombineCmd (ClientData client_data, Tcl_Interp * interp, int argc,
00059 char *argv[])
00060 {
00061 Tcl_Obj *tclobj = NULL;
00062 Tcl_Obj *tclarrayname = NULL;
00063 Tcl_Obj *tclindexname = NULL;
00064 char msg[SLEN];
00065 char *array = NULL;
00066 char *tempstr = NULL;
00067 int strlen;
00068 int inimgaddr1, inimgaddr2;
00069 IMAGE *inimg1 = NULL, *inimg2 = NULL;
00070 int outimgaddr;
00071 IMAGE *outimg = NULL;
00072 char *outname = NULL;
00073 int option;
00074 double weight1, weight2;
00075
00076 if (argc != 2)
00077 {
00078 Tcl_AppendResult (interp, "wrong # args: should be \"",
00079 argv[0], " arrayname\"", (char *) NULL);
00080 return TCL_ERROR;
00081 }
00082 array = argv[1];
00083
00084
00085 tclarrayname = Tcl_NewStringObj (array, -1);
00086 tclindexname = Tcl_NewStringObj ("inimg,addr1", -1);
00087 if (tclobj =
00088 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00089 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00090 {
00091 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00092 if (strlen <= 0)
00093 return TCL_ERROR;
00094 sscanf (tempstr, "%x", &inimgaddr1);
00095 inimg1 = (IMAGE *) inimgaddr1;
00096 }
00097 else
00098 {
00099 return TCL_ERROR;
00100 }
00101 Tcl_DecrRefCount (tclarrayname);
00102 Tcl_DecrRefCount (tclindexname);
00103
00104
00105 tclarrayname = Tcl_NewStringObj (array, -1);
00106 tclindexname = Tcl_NewStringObj ("inimg,addr2", -1);
00107 if (tclobj =
00108 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00109 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00110 {
00111 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00112 if (strlen <= 0)
00113 return TCL_ERROR;
00114 sscanf (tempstr, "%x", &inimgaddr2);
00115 inimg2 = (IMAGE *) inimgaddr2;
00116 }
00117 else
00118 {
00119 return TCL_ERROR;
00120 }
00121 Tcl_DecrRefCount (tclarrayname);
00122 Tcl_DecrRefCount (tclindexname);
00123
00124
00125 tclarrayname = Tcl_NewStringObj (array, -1);
00126 tclindexname = Tcl_NewStringObj ("option", -1);
00127 if (tclobj =
00128 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00129 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00130 {
00131 if (Tcl_GetIntFromObj (interp, tclobj, &option) == TCL_ERROR)
00132 return TCL_ERROR;
00133 }
00134 else
00135 {
00136 return TCL_ERROR;
00137 }
00138 Tcl_DecrRefCount (tclarrayname);
00139 Tcl_DecrRefCount (tclindexname);
00140
00141
00142 tclarrayname = Tcl_NewStringObj (array, -1);
00143 tclindexname = Tcl_NewStringObj ("weight1", -1);
00144 if (tclobj =
00145 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00146 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00147 {
00148 if (Tcl_GetDoubleFromObj (interp, tclobj, &weight1) == TCL_ERROR)
00149 return TCL_ERROR;
00150 }
00151 else
00152 {
00153 return TCL_ERROR;
00154 }
00155 Tcl_DecrRefCount (tclarrayname);
00156 Tcl_DecrRefCount (tclindexname);
00157
00158
00159 tclarrayname = Tcl_NewStringObj (array, -1);
00160 tclindexname = Tcl_NewStringObj ("weight2", -1);
00161 if (tclobj =
00162 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00163 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00164 {
00165 if (Tcl_GetDoubleFromObj (interp, tclobj, &weight2) == TCL_ERROR)
00166 return TCL_ERROR;
00167 }
00168 else
00169 {
00170 return TCL_ERROR;
00171 }
00172 Tcl_DecrRefCount (tclarrayname);
00173 Tcl_DecrRefCount (tclindexname);
00174
00175
00176 tclarrayname = Tcl_NewStringObj (array, -1);
00177 tclindexname = Tcl_NewStringObj ("outname", -1);
00178 if (tclobj =
00179 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00180 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00181 {
00182 outname = Tcl_GetStringFromObj (tclobj, &strlen);
00183 if (strlen <= 0)
00184 return TCL_ERROR;
00185 }
00186 else
00187 {
00188 return TCL_ERROR;
00189 }
00190 Tcl_DecrRefCount (tclarrayname);
00191 Tcl_DecrRefCount (tclindexname);
00192
00193 COMBINE (inimg1, inimg2, option, weight1, weight2, &outimg);
00194
00195 if (CHECKIMG (outimg))
00196 sprintf (outimg->text, "%s", outname);
00197 outimgaddr = (int) outimg;
00198
00199 sprintf (msg, "%x", outimgaddr);
00200 Tcl_SetResult (interp, msg, TCL_VOLATILE);
00201
00202 return TCL_OK;
00203 }
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220 int
00221 Sadie_Multi_CompareCmd (ClientData client_data, Tcl_Interp * interp, int argc,
00222 char *argv[])
00223 {
00224 Tcl_Obj *tclobj = NULL;
00225 Tcl_Obj *tclarrayname = NULL;
00226 Tcl_Obj *tclindexname = NULL;
00227 char msg[SLEN];
00228 char *array = NULL;
00229 char *tempstr = NULL;
00230 int strlen;
00231 int inimgaddr1, inimgaddr2;
00232 IMAGE *inimg1 = NULL, *inimg2 = NULL;
00233 int outimgaddr;
00234 IMAGE *outimg = NULL;
00235 char *outname = NULL;
00236 int option;
00237
00238 if (argc != 2)
00239 {
00240 Tcl_AppendResult (interp, "wrong # args: should be \"",
00241 argv[0], " arrayname\"", (char *) NULL);
00242 return TCL_ERROR;
00243 }
00244 array = argv[1];
00245
00246
00247 tclarrayname = Tcl_NewStringObj (array, -1);
00248 tclindexname = Tcl_NewStringObj ("inimg,addr1", -1);
00249 if (tclobj =
00250 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00251 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00252 {
00253 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00254 if (strlen <= 0)
00255 return TCL_ERROR;
00256 sscanf (tempstr, "%x", &inimgaddr1);
00257 inimg1 = (IMAGE *) inimgaddr1;
00258 }
00259 else
00260 {
00261 return TCL_ERROR;
00262 }
00263 Tcl_DecrRefCount (tclarrayname);
00264 Tcl_DecrRefCount (tclindexname);
00265
00266
00267 tclarrayname = Tcl_NewStringObj (array, -1);
00268 tclindexname = Tcl_NewStringObj ("inimg,addr2", -1);
00269 if (tclobj =
00270 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00271 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00272 {
00273 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00274 if (strlen <= 0)
00275 return TCL_ERROR;
00276 sscanf (tempstr, "%x", &inimgaddr2);
00277 inimg2 = (IMAGE *) inimgaddr2;
00278 }
00279 else
00280 {
00281 return TCL_ERROR;
00282 }
00283 Tcl_DecrRefCount (tclarrayname);
00284 Tcl_DecrRefCount (tclindexname);
00285
00286
00287 tclarrayname = Tcl_NewStringObj (array, -1);
00288 tclindexname = Tcl_NewStringObj ("option", -1);
00289 if (tclobj =
00290 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00291 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00292 {
00293 if (Tcl_GetIntFromObj (interp, tclobj, &option) == TCL_ERROR)
00294 return TCL_ERROR;
00295 }
00296 else
00297 {
00298 return TCL_ERROR;
00299 }
00300 Tcl_DecrRefCount (tclarrayname);
00301 Tcl_DecrRefCount (tclindexname);
00302
00303
00304 tclarrayname = Tcl_NewStringObj (array, -1);
00305 tclindexname = Tcl_NewStringObj ("outname", -1);
00306 if (tclobj =
00307 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00308 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00309 {
00310 outname = Tcl_GetStringFromObj (tclobj, &strlen);
00311 if (strlen <= 0)
00312 return TCL_ERROR;
00313 }
00314 else
00315 {
00316 return TCL_ERROR;
00317 }
00318 Tcl_DecrRefCount (tclarrayname);
00319 Tcl_DecrRefCount (tclindexname);
00320
00321 COMPARE (inimg1, inimg2, option, &outimg);
00322
00323 if (CHECKIMG (outimg))
00324 sprintf (outimg->text, "%s", outname);
00325 outimgaddr = (int) outimg;
00326
00327 sprintf (msg, "%x", outimgaddr);
00328 Tcl_SetResult (interp, msg, TCL_VOLATILE);
00329
00330 return TCL_OK;
00331 }
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347 int
00348 Sadie_Multi_PCTCmd (ClientData client_data, Tcl_Interp * interp, int argc,
00349 char *argv[])
00350 {
00351 Tcl_Obj *tclobj = NULL;
00352 Tcl_Obj *tclarrayname = NULL;
00353 Tcl_Obj *tclindexname = NULL;
00354 char msg[SLEN];
00355 char *array = NULL;
00356 char *tempstr = NULL;
00357 int strlen;
00358 int inimgaddr;
00359 IMAGE *inimg = NULL;
00360 int outimgaddr;
00361 IMAGE *outimg = NULL;
00362 char *outname = NULL;
00363 int incr;
00364
00365 if (argc != 2)
00366 {
00367 Tcl_AppendResult (interp, "wrong # args: should be \"",
00368 argv[0], " arrayname\"", (char *) NULL);
00369 return TCL_ERROR;
00370 }
00371 array = argv[1];
00372
00373
00374 tclarrayname = Tcl_NewStringObj (array, -1);
00375 tclindexname = Tcl_NewStringObj ("inimg,addr", -1);
00376 if (tclobj =
00377 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00378 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00379 {
00380 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00381 if (strlen <= 0)
00382 return TCL_ERROR;
00383 sscanf (tempstr, "%x", &inimgaddr);
00384 inimg = (IMAGE *) inimgaddr;
00385 }
00386 else
00387 {
00388 return TCL_ERROR;
00389 }
00390 Tcl_DecrRefCount (tclarrayname);
00391 Tcl_DecrRefCount (tclindexname);
00392
00393
00394 tclarrayname = Tcl_NewStringObj (array, -1);
00395 tclindexname = Tcl_NewStringObj ("incr", -1);
00396 if (tclobj =
00397 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00398 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00399 {
00400 if (Tcl_GetIntFromObj (interp, tclobj, &incr) == TCL_ERROR)
00401 return TCL_ERROR;
00402 }
00403 else
00404 {
00405 return TCL_ERROR;
00406 }
00407 Tcl_DecrRefCount (tclarrayname);
00408 Tcl_DecrRefCount (tclindexname);
00409
00410
00411 tclarrayname = Tcl_NewStringObj (array, -1);
00412 tclindexname = Tcl_NewStringObj ("outname", -1);
00413 if (tclobj =
00414 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00415 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00416 {
00417 outname = Tcl_GetStringFromObj (tclobj, &strlen);
00418 if (strlen <= 0)
00419 return TCL_ERROR;
00420 }
00421 else
00422 {
00423 return TCL_ERROR;
00424 }
00425 Tcl_DecrRefCount (tclarrayname);
00426 Tcl_DecrRefCount (tclindexname);
00427
00428 PCT (inimg, incr, &outimg);
00429
00430 if (CHECKIMG (outimg))
00431 sprintf (outimg->text, "%s", outname);
00432 outimgaddr = (int) outimg;
00433
00434 sprintf (msg, "%x", outimgaddr);
00435 Tcl_SetResult (interp, msg, TCL_VOLATILE);
00436
00437 return TCL_OK;
00438 }
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454 int
00455 Sadie_Multi_PCSCmd (ClientData client_data, Tcl_Interp * interp, int argc,
00456 char *argv[])
00457 {
00458 Tcl_Obj *tclobj = NULL;
00459 Tcl_Obj *tclarrayname = NULL;
00460 Tcl_Obj *tclindexname = NULL;
00461 char msg[SLEN];
00462 char *array = NULL;
00463 char *tempstr = NULL;
00464 int strlen;
00465 int inimgaddr;
00466 IMAGE *inimg = NULL;
00467 int outimgaddr;
00468 IMAGE *outimg = NULL;
00469 char *outname = NULL;
00470 int incr;
00471
00472 if (argc != 2)
00473 {
00474 Tcl_AppendResult (interp, "wrong # args: should be \"",
00475 argv[0], " arrayname\"", (char *) NULL);
00476 return TCL_ERROR;
00477 }
00478 array = argv[1];
00479
00480
00481 tclarrayname = Tcl_NewStringObj (array, -1);
00482 tclindexname = Tcl_NewStringObj ("inimg,addr", -1);
00483 if (tclobj =
00484 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00485 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00486 {
00487 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00488 if (strlen <= 0)
00489 return TCL_ERROR;
00490 sscanf (tempstr, "%x", &inimgaddr);
00491 inimg = (IMAGE *) inimgaddr;
00492 }
00493 else
00494 {
00495 return TCL_ERROR;
00496 }
00497 Tcl_DecrRefCount (tclarrayname);
00498 Tcl_DecrRefCount (tclindexname);
00499
00500
00501 tclarrayname = Tcl_NewStringObj (array, -1);
00502 tclindexname = Tcl_NewStringObj ("incr", -1);
00503 if (tclobj =
00504 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00505 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00506 {
00507 if (Tcl_GetIntFromObj (interp, tclobj, &incr) == TCL_ERROR)
00508 return TCL_ERROR;
00509 }
00510 else
00511 {
00512 return TCL_ERROR;
00513 }
00514 Tcl_DecrRefCount (tclarrayname);
00515 Tcl_DecrRefCount (tclindexname);
00516
00517
00518 tclarrayname = Tcl_NewStringObj (array, -1);
00519 tclindexname = Tcl_NewStringObj ("outname", -1);
00520 if (tclobj =
00521 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00522 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00523 {
00524 outname = Tcl_GetStringFromObj (tclobj, &strlen);
00525 if (strlen <= 0)
00526 return TCL_ERROR;
00527 }
00528 else
00529 {
00530 return TCL_ERROR;
00531 }
00532 Tcl_DecrRefCount (tclarrayname);
00533 Tcl_DecrRefCount (tclindexname);
00534
00535 DECORSTR (inimg, incr, &outimg);
00536
00537 if (CHECKIMG (outimg))
00538 sprintf (outimg->text, "%s", outname);
00539 outimgaddr = (int) outimg;
00540
00541 sprintf (msg, "%x", outimgaddr);
00542 Tcl_SetResult (interp, msg, TCL_VOLATILE);
00543
00544 return TCL_OK;
00545 }
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560 int
00561 Sadie_Multi_RGB2HSVCmd (ClientData client_data, Tcl_Interp * interp, int argc,
00562 char *argv[])
00563 {
00564 Tcl_Obj *tclobj = NULL;
00565 Tcl_Obj *tclarrayname = NULL;
00566 Tcl_Obj *tclindexname = NULL;
00567 char msg[SLEN];
00568 char *array = NULL;
00569 char *tempstr = NULL;
00570 int strlen;
00571 int inimgaddr;
00572 IMAGE *inimg = NULL;
00573 int outimgaddr;
00574 IMAGE *outimg = NULL;
00575 char *outname = NULL;
00576
00577 if (argc != 2)
00578 {
00579 Tcl_AppendResult (interp, "wrong # args: should be \"",
00580 argv[0], " arrayname\"", (char *) NULL);
00581 return TCL_ERROR;
00582 }
00583 array = argv[1];
00584
00585
00586 tclarrayname = Tcl_NewStringObj (array, -1);
00587 tclindexname = Tcl_NewStringObj ("inimg,addr", -1);
00588 if (tclobj =
00589 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00590 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00591 {
00592 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00593 if (strlen <= 0)
00594 return TCL_ERROR;
00595 sscanf (tempstr, "%x", &inimgaddr);
00596 inimg = (IMAGE *) inimgaddr;
00597 }
00598 else
00599 {
00600 return TCL_ERROR;
00601 }
00602 Tcl_DecrRefCount (tclarrayname);
00603 Tcl_DecrRefCount (tclindexname);
00604
00605
00606 tclarrayname = Tcl_NewStringObj (array, -1);
00607 tclindexname = Tcl_NewStringObj ("outname", -1);
00608 if (tclobj =
00609 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00610 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00611 {
00612 outname = Tcl_GetStringFromObj (tclobj, &strlen);
00613 if (strlen <= 0)
00614 return TCL_ERROR;
00615 }
00616 else
00617 {
00618 return TCL_ERROR;
00619 }
00620 Tcl_DecrRefCount (tclarrayname);
00621 Tcl_DecrRefCount (tclindexname);
00622
00623 RGBTOHSV (inimg, &outimg);
00624
00625 if (CHECKIMG (outimg))
00626 sprintf (outimg->text, "%s", outname);
00627 outimgaddr = (int) outimg;
00628
00629 sprintf (msg, "%x", outimgaddr);
00630 Tcl_SetResult (interp, msg, TCL_VOLATILE);
00631
00632 return TCL_OK;
00633 }
00634
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648 int
00649 Sadie_Multi_HSV2RGBCmd (ClientData client_data, Tcl_Interp * interp, int argc,
00650 char *argv[])
00651 {
00652 Tcl_Obj *tclobj = NULL;
00653 Tcl_Obj *tclarrayname = NULL;
00654 Tcl_Obj *tclindexname = NULL;
00655 char msg[SLEN];
00656 char *array = NULL;
00657 char *tempstr = NULL;
00658 int strlen;
00659 int inimgaddr;
00660 IMAGE *inimg = NULL;
00661 int outimgaddr;
00662 IMAGE *outimg = NULL;
00663 char *outname = NULL;
00664
00665 if (argc != 2)
00666 {
00667 Tcl_AppendResult (interp, "wrong # args: should be \"",
00668 argv[0], " arrayname\"", (char *) NULL);
00669 return TCL_ERROR;
00670 }
00671 array = argv[1];
00672
00673
00674 tclarrayname = Tcl_NewStringObj (array, -1);
00675 tclindexname = Tcl_NewStringObj ("inimg,addr", -1);
00676 if (tclobj =
00677 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00678 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00679 {
00680 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00681 if (strlen <= 0)
00682 return TCL_ERROR;
00683 sscanf (tempstr, "%x", &inimgaddr);
00684 inimg = (IMAGE *) inimgaddr;
00685 }
00686 else
00687 {
00688 return TCL_ERROR;
00689 }
00690 Tcl_DecrRefCount (tclarrayname);
00691 Tcl_DecrRefCount (tclindexname);
00692
00693
00694 tclarrayname = Tcl_NewStringObj (array, -1);
00695 tclindexname = Tcl_NewStringObj ("outname", -1);
00696 if (tclobj =
00697 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00698 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00699 {
00700 outname = Tcl_GetStringFromObj (tclobj, &strlen);
00701 if (strlen <= 0)
00702 return TCL_ERROR;
00703 }
00704 else
00705 {
00706 return TCL_ERROR;
00707 }
00708 Tcl_DecrRefCount (tclarrayname);
00709 Tcl_DecrRefCount (tclindexname);
00710
00711 HSVTORGB (inimg, &outimg);
00712
00713 if (CHECKIMG (outimg))
00714 sprintf (outimg->text, "%s", outname);
00715 outimgaddr = (int) outimg;
00716
00717 sprintf (msg, "%x", outimgaddr);
00718 Tcl_SetResult (interp, msg, TCL_VOLATILE);
00719
00720 return TCL_OK;
00721 }
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738 int
00739 Sadie_Multi_BIL2BSQCmd (ClientData client_data, Tcl_Interp * interp, int argc,
00740 char *argv[])
00741 {
00742 Tcl_Obj *tclobj = NULL;
00743 Tcl_Obj *tclarrayname = NULL;
00744 Tcl_Obj *tclindexname = NULL;
00745 char msg[SLEN];
00746 char *array = NULL;
00747 char *tempstr = NULL;
00748 int strlen;
00749 int inimgaddr;
00750 IMAGE *inimg = NULL;
00751 int outimgaddr1, outimgaddr2, outimgaddr3;
00752 IMAGE *outimg[3];
00753 char *outname1 = NULL, *outname2 = NULL, *outname3 = NULL;
00754
00755 if (argc != 2)
00756 {
00757 Tcl_AppendResult (interp, "wrong # args: should be \"",
00758 argv[0], " arrayname\"", (char *) NULL);
00759 return TCL_ERROR;
00760 }
00761 array = argv[1];
00762
00763
00764 tclarrayname = Tcl_NewStringObj (array, -1);
00765 tclindexname = Tcl_NewStringObj ("inimg,addr", -1);
00766 if (tclobj =
00767 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00768 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00769 {
00770 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00771 if (strlen <= 0)
00772 return TCL_ERROR;
00773 sscanf (tempstr, "%x", &inimgaddr);
00774 inimg = (IMAGE *) inimgaddr;
00775 }
00776 else
00777 {
00778 return TCL_ERROR;
00779 }
00780 Tcl_DecrRefCount (tclarrayname);
00781 Tcl_DecrRefCount (tclindexname);
00782
00783
00784 tclarrayname = Tcl_NewStringObj (array, -1);
00785 tclindexname = Tcl_NewStringObj ("outname1", -1);
00786 if (tclobj =
00787 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00788 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00789 {
00790 outname1 = Tcl_GetStringFromObj (tclobj, &strlen);
00791 if (strlen <= 0)
00792 return TCL_ERROR;
00793 }
00794 else
00795 {
00796 return TCL_ERROR;
00797 }
00798 Tcl_DecrRefCount (tclarrayname);
00799 Tcl_DecrRefCount (tclindexname);
00800
00801
00802 tclarrayname = Tcl_NewStringObj (array, -1);
00803 tclindexname = Tcl_NewStringObj ("outname2", -1);
00804 if (tclobj =
00805 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00806 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00807 {
00808 outname2 = Tcl_GetStringFromObj (tclobj, &strlen);
00809 if (strlen <= 0)
00810 return TCL_ERROR;
00811 }
00812 else
00813 {
00814 return TCL_ERROR;
00815 }
00816 Tcl_DecrRefCount (tclarrayname);
00817 Tcl_DecrRefCount (tclindexname);
00818
00819
00820 tclarrayname = Tcl_NewStringObj (array, -1);
00821 tclindexname = Tcl_NewStringObj ("outname3", -1);
00822 if (tclobj =
00823 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00824 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00825 {
00826 outname3 = Tcl_GetStringFromObj (tclobj, &strlen);
00827 if (strlen <= 0)
00828 return TCL_ERROR;
00829 }
00830 else
00831 {
00832 return TCL_ERROR;
00833 }
00834 Tcl_DecrRefCount (tclarrayname);
00835 Tcl_DecrRefCount (tclindexname);
00836
00837 BILTOBSQ (inimg, (IMAGE **) & outimg);
00838
00839 if (CHECKIMG (outimg[0]))
00840 sprintf (outimg[0]->text, "%s", outname1);
00841 outimgaddr1 = (int) outimg[0];
00842
00843 if (CHECKIMG (outimg[1]))
00844 sprintf (outimg[1]->text, "%s", outname2);
00845 outimgaddr2 = (int) outimg[1];
00846
00847 if (CHECKIMG (outimg[2]))
00848 sprintf (outimg[2]->text, "%s", outname3);
00849 outimgaddr3 = (int) outimg[2];
00850
00851 sprintf (msg, "%x %x %x", outimgaddr1, outimgaddr2, outimgaddr3);
00852 Tcl_SetResult (interp, msg, TCL_VOLATILE);
00853
00854 return TCL_OK;
00855 }
00856
00857
00858
00859
00860
00861
00862
00863
00864
00865
00866
00867
00868
00869
00870
00871
00872 int
00873 Sadie_Multi_BSQ2BILCmd (ClientData client_data, Tcl_Interp * interp, int argc,
00874 char *argv[])
00875 {
00876 Tcl_Obj *tclobj = NULL;
00877 Tcl_Obj *tclarrayname = NULL;
00878 Tcl_Obj *tclindexname = NULL;
00879 char msg[SLEN];
00880 char *array = NULL;
00881 char *tempstr = NULL;
00882 int strlen;
00883 int inimgaddr1, inimgaddr2, inimgaddr3;
00884 IMAGE *inimg[3];
00885 int outimgaddr;
00886 IMAGE *outimg = NULL;
00887 char *outname = NULL;
00888
00889 if (argc != 2)
00890 {
00891 Tcl_AppendResult (interp, "wrong # args: should be \"",
00892 argv[0], " arrayname\"", (char *) NULL);
00893 return TCL_ERROR;
00894 }
00895 array = argv[1];
00896
00897
00898 tclarrayname = Tcl_NewStringObj (array, -1);
00899 tclindexname = Tcl_NewStringObj ("inimg,addr1", -1);
00900 if (tclobj =
00901 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00902 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00903 {
00904 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00905 if (strlen <= 0)
00906 return TCL_ERROR;
00907 sscanf (tempstr, "%x", &inimgaddr1);
00908 inimg[0] = (IMAGE *) inimgaddr1;
00909 }
00910 else
00911 {
00912 return TCL_ERROR;
00913 }
00914 Tcl_DecrRefCount (tclarrayname);
00915 Tcl_DecrRefCount (tclindexname);
00916
00917
00918 tclarrayname = Tcl_NewStringObj (array, -1);
00919 tclindexname = Tcl_NewStringObj ("inimg,addr2", -1);
00920 if (tclobj =
00921 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00922 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00923 {
00924 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00925 if (strlen <= 0)
00926 return TCL_ERROR;
00927 sscanf (tempstr, "%x", &inimgaddr2);
00928 inimg[1] = (IMAGE *) inimgaddr2;
00929 }
00930 else
00931 {
00932 return TCL_ERROR;
00933 }
00934 Tcl_DecrRefCount (tclarrayname);
00935 Tcl_DecrRefCount (tclindexname);
00936
00937
00938 tclarrayname = Tcl_NewStringObj (array, -1);
00939 tclindexname = Tcl_NewStringObj ("inimg,addr3", -1);
00940 if (tclobj =
00941 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00942 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00943 {
00944 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
00945 if (strlen <= 0)
00946 return TCL_ERROR;
00947 sscanf (tempstr, "%x", &inimgaddr3);
00948 inimg[2] = (IMAGE *) inimgaddr3;
00949 }
00950 else
00951 {
00952 return TCL_ERROR;
00953 }
00954 Tcl_DecrRefCount (tclarrayname);
00955 Tcl_DecrRefCount (tclindexname);
00956
00957
00958 tclarrayname = Tcl_NewStringObj (array, -1);
00959 tclindexname = Tcl_NewStringObj ("outname", -1);
00960 if (tclobj =
00961 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
00962 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
00963 {
00964 outname = Tcl_GetStringFromObj (tclobj, &strlen);
00965 if (strlen <= 0)
00966 return TCL_ERROR;
00967 }
00968 else
00969 {
00970 return TCL_ERROR;
00971 }
00972 Tcl_DecrRefCount (tclarrayname);
00973 Tcl_DecrRefCount (tclindexname);
00974
00975 BSQTOBIL (inimg, 3, &outimg);
00976
00977 if (CHECKIMG (outimg))
00978 sprintf (outimg->text, "%s", outname);
00979 outimgaddr = (int) outimg;
00980
00981 sprintf (msg, "%x", outimgaddr);
00982 Tcl_SetResult (interp, msg, TCL_VOLATILE);
00983
00984 return TCL_OK;
00985 }
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999
01000
01001
01002 int
01003 Sadie_Multi_Comp2RealCmd (ClientData client_data, Tcl_Interp * interp,
01004 int argc, char *argv[])
01005 {
01006 Tcl_Obj *tclobj = NULL;
01007 Tcl_Obj *tclarrayname = NULL;
01008 Tcl_Obj *tclindexname = NULL;
01009 char msg[SLEN];
01010 char *array = NULL;
01011 char *tempstr = NULL;
01012 int strlen;
01013 int inimgaddr;
01014 IMAGE *inimg = NULL;
01015 int outimgaddr1, outimgaddr2;
01016 IMAGE *outimg1 = NULL, *outimg2 = NULL;
01017 char *outname1 = NULL, *outname2 = NULL;
01018 int option;
01019
01020 if (argc != 2)
01021 {
01022 Tcl_AppendResult (interp, "wrong # args: should be \"",
01023 argv[0], " arrayname\"", (char *) NULL);
01024 return TCL_ERROR;
01025 }
01026 array = argv[1];
01027
01028
01029 tclarrayname = Tcl_NewStringObj (array, -1);
01030 tclindexname = Tcl_NewStringObj ("inimg,addr", -1);
01031 if (tclobj =
01032 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01033 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01034 {
01035 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
01036 if (strlen <= 0)
01037 return TCL_ERROR;
01038 sscanf (tempstr, "%x", &inimgaddr);
01039 inimg = (IMAGE *) inimgaddr;
01040 }
01041 else
01042 {
01043 return TCL_ERROR;
01044 }
01045 Tcl_DecrRefCount (tclarrayname);
01046 Tcl_DecrRefCount (tclindexname);
01047
01048
01049 tclarrayname = Tcl_NewStringObj (array, -1);
01050 tclindexname = Tcl_NewStringObj ("option", -1);
01051 if (tclobj =
01052 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01053 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01054 {
01055 if (Tcl_GetIntFromObj (interp, tclobj, &option) == TCL_ERROR)
01056 return TCL_ERROR;
01057 }
01058 else
01059 {
01060 return TCL_ERROR;
01061 }
01062 Tcl_DecrRefCount (tclarrayname);
01063 Tcl_DecrRefCount (tclindexname);
01064
01065
01066 tclarrayname = Tcl_NewStringObj (array, -1);
01067 tclindexname = Tcl_NewStringObj ("outname1", -1);
01068 if (tclobj =
01069 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01070 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01071 {
01072 outname1 = Tcl_GetStringFromObj (tclobj, &strlen);
01073 if (strlen <= 0)
01074 return TCL_ERROR;
01075 }
01076 else
01077 {
01078 return TCL_ERROR;
01079 }
01080 Tcl_DecrRefCount (tclarrayname);
01081 Tcl_DecrRefCount (tclindexname);
01082
01083
01084 tclarrayname = Tcl_NewStringObj (array, -1);
01085 tclindexname = Tcl_NewStringObj ("outname2", -1);
01086 if (tclobj =
01087 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01088 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01089 {
01090 outname2 = Tcl_GetStringFromObj (tclobj, &strlen);
01091 if (strlen <= 0)
01092 return TCL_ERROR;
01093 }
01094 else
01095 {
01096 return TCL_ERROR;
01097 }
01098 Tcl_DecrRefCount (tclarrayname);
01099 Tcl_DecrRefCount (tclindexname);
01100
01101 COM2REAL (inimg, option, &outimg1, &outimg2);
01102
01103 if (CHECKIMG (outimg1))
01104 sprintf (outimg1->text, "%s", outname1);
01105 outimgaddr1 = (int) outimg1;
01106
01107 if (CHECKIMG (outimg2))
01108 sprintf (outimg2->text, "%s", outname2);
01109 outimgaddr2 = (int) outimg2;
01110
01111 sprintf (msg, "%x %x", outimgaddr1, outimgaddr2);
01112 Tcl_SetResult (interp, msg, TCL_VOLATILE);
01113
01114 return TCL_OK;
01115 }
01116
01117
01118
01119
01120
01121
01122
01123
01124
01125
01126
01127
01128
01129
01130
01131
01132 int
01133 Sadie_Multi_Real2CompCmd (ClientData client_data, Tcl_Interp * interp,
01134 int argc, char *argv[])
01135 {
01136 Tcl_Obj *tclobj = NULL;
01137 Tcl_Obj *tclarrayname = NULL;
01138 Tcl_Obj *tclindexname = NULL;
01139 char msg[SLEN];
01140 char *array = NULL;
01141 char *tempstr = NULL;
01142 int strlen;
01143 int inimgaddr1, inimgaddr2;
01144 IMAGE *inimg1 = NULL, *inimg2 = NULL;
01145 int outimgaddr;
01146 IMAGE *outimg = NULL;
01147 char *outname = NULL;
01148 int option;
01149
01150 if (argc != 2)
01151 {
01152 Tcl_AppendResult (interp, "wrong # args: should be \"",
01153 argv[0], " arrayname\"", (char *) NULL);
01154 return TCL_ERROR;
01155 }
01156 array = argv[1];
01157
01158
01159 tclarrayname = Tcl_NewStringObj (array, -1);
01160 tclindexname = Tcl_NewStringObj ("inimg,addr1", -1);
01161 if (tclobj =
01162 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01163 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01164 {
01165 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
01166 if (strlen <= 0)
01167 return TCL_ERROR;
01168 sscanf (tempstr, "%x", &inimgaddr1);
01169 inimg1 = (IMAGE *) inimgaddr1;
01170 }
01171 else
01172 {
01173 return TCL_ERROR;
01174 }
01175 Tcl_DecrRefCount (tclarrayname);
01176 Tcl_DecrRefCount (tclindexname);
01177
01178
01179 tclarrayname = Tcl_NewStringObj (array, -1);
01180 tclindexname = Tcl_NewStringObj ("inimg,addr2", -1);
01181 if (tclobj =
01182 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01183 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01184 {
01185 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
01186 if (strlen <= 0)
01187 return TCL_ERROR;
01188 sscanf (tempstr, "%x", &inimgaddr2);
01189 inimg2 = (IMAGE *) inimgaddr2;
01190 }
01191 else
01192 {
01193 return TCL_ERROR;
01194 }
01195 Tcl_DecrRefCount (tclarrayname);
01196 Tcl_DecrRefCount (tclindexname);
01197
01198
01199 tclarrayname = Tcl_NewStringObj (array, -1);
01200 tclindexname = Tcl_NewStringObj ("option", -1);
01201 if (tclobj =
01202 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01203 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01204 {
01205 if (Tcl_GetIntFromObj (interp, tclobj, &option) == TCL_ERROR)
01206 return TCL_ERROR;
01207 }
01208 else
01209 {
01210 return TCL_ERROR;
01211 }
01212 Tcl_DecrRefCount (tclarrayname);
01213 Tcl_DecrRefCount (tclindexname);
01214
01215
01216 tclarrayname = Tcl_NewStringObj (array, -1);
01217 tclindexname = Tcl_NewStringObj ("outname", -1);
01218 if (tclobj =
01219 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01220 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01221 {
01222 outname = Tcl_GetStringFromObj (tclobj, &strlen);
01223 if (strlen <= 0)
01224 return TCL_ERROR;
01225 }
01226 else
01227 {
01228 return TCL_ERROR;
01229 }
01230 Tcl_DecrRefCount (tclarrayname);
01231 Tcl_DecrRefCount (tclindexname);
01232
01233 REAL2COM (inimg1, inimg2, option, &outimg);
01234
01235 if (CHECKIMG (outimg))
01236 sprintf (outimg->text, "%s", outname);
01237 outimgaddr = (int) outimg;
01238
01239 sprintf (msg, "%x", outimgaddr);
01240 Tcl_SetResult (interp, msg, TCL_VOLATILE);
01241
01242 return TCL_OK;
01243 }
01244
01245
01246
01247
01248
01249
01250
01251
01252
01253
01254
01255
01256
01257
01258
01259
01260
01261
01262
01263
01264 int
01265 Sadie_Multi_RotateCubeCmd (ClientData client_data, Tcl_Interp * interp,
01266 int argc, char *argv[])
01267 {
01268 Tcl_Obj *tclobj = NULL;
01269 Tcl_Obj *tclarrayname = NULL;
01270 Tcl_Obj *tclindexname = NULL;
01271 char msg[SLEN];
01272 char *array = NULL;
01273 char *tempstr = NULL;
01274 int strlen;
01275 int inimgaddr;
01276 IMAGE *inimg = NULL;
01277 int outimgaddr;
01278 IMAGE *outimg = NULL;
01279 char *outname = NULL;
01280 int xdir, ydir, zdir;
01281 int xaxis, yaxis, zaxis;
01282
01283 if (argc != 2)
01284 {
01285 Tcl_AppendResult (interp, "wrong # args: should be \"",
01286 argv[0], " arrayname\"", (char *) NULL);
01287 return TCL_ERROR;
01288 }
01289 array = argv[1];
01290
01291
01292 tclarrayname = Tcl_NewStringObj (array, -1);
01293 tclindexname = Tcl_NewStringObj ("inimg,addr", -1);
01294 if (tclobj =
01295 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01296 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01297 {
01298 tempstr = Tcl_GetStringFromObj (tclobj, &strlen);
01299 if (strlen <= 0)
01300 return TCL_ERROR;
01301 sscanf (tempstr, "%x", &inimgaddr);
01302 inimg = (IMAGE *) inimgaddr;
01303 }
01304 else
01305 {
01306 return TCL_ERROR;
01307 }
01308 Tcl_DecrRefCount (tclarrayname);
01309 Tcl_DecrRefCount (tclindexname);
01310
01311
01312 tclarrayname = Tcl_NewStringObj (array, -1);
01313 tclindexname = Tcl_NewStringObj ("x,sign", -1);
01314 if (tclobj =
01315 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01316 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01317 {
01318 if (Tcl_GetIntFromObj (interp, tclobj, &xdir) == TCL_ERROR)
01319 return TCL_ERROR;
01320 }
01321 else
01322 {
01323 return TCL_ERROR;
01324 }
01325 Tcl_DecrRefCount (tclarrayname);
01326 Tcl_DecrRefCount (tclindexname);
01327
01328
01329 tclarrayname = Tcl_NewStringObj (array, -1);
01330 tclindexname = Tcl_NewStringObj ("y,sign", -1);
01331 if (tclobj =
01332 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01333 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01334 {
01335 if (Tcl_GetIntFromObj (interp, tclobj, &ydir) == TCL_ERROR)
01336 return TCL_ERROR;
01337 }
01338 else
01339 {
01340 return TCL_ERROR;
01341 }
01342 Tcl_DecrRefCount (tclarrayname);
01343 Tcl_DecrRefCount (tclindexname);
01344
01345
01346 tclarrayname = Tcl_NewStringObj (array, -1);
01347 tclindexname = Tcl_NewStringObj ("z,sign", -1);
01348 if (tclobj =
01349 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01350 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01351 {
01352 if (Tcl_GetIntFromObj (interp, tclobj, &zdir) == TCL_ERROR)
01353 return TCL_ERROR;
01354 }
01355 else
01356 {
01357 return TCL_ERROR;
01358 }
01359 Tcl_DecrRefCount (tclarrayname);
01360 Tcl_DecrRefCount (tclindexname);
01361
01362
01363 tclarrayname = Tcl_NewStringObj (array, -1);
01364 tclindexname = Tcl_NewStringObj ("x,cubedim", -1);
01365 if (tclobj =
01366 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01367 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01368 {
01369 if (Tcl_GetIntFromObj (interp, tclobj, &xaxis) == TCL_ERROR)
01370 return TCL_ERROR;
01371 }
01372 else
01373 {
01374 return TCL_ERROR;
01375 }
01376 Tcl_DecrRefCount (tclarrayname);
01377 Tcl_DecrRefCount (tclindexname);
01378
01379
01380 tclarrayname = Tcl_NewStringObj (array, -1);
01381 tclindexname = Tcl_NewStringObj ("y,cubedim", -1);
01382 if (tclobj =
01383 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01384 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01385 {
01386 if (Tcl_GetIntFromObj (interp, tclobj, &yaxis) == TCL_ERROR)
01387 return TCL_ERROR;
01388 }
01389 else
01390 {
01391 return TCL_ERROR;
01392 }
01393 Tcl_DecrRefCount (tclarrayname);
01394 Tcl_DecrRefCount (tclindexname);
01395
01396
01397 tclarrayname = Tcl_NewStringObj (array, -1);
01398 tclindexname = Tcl_NewStringObj ("z,cubedim", -1);
01399 if (tclobj =
01400 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01401 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01402 {
01403 if (Tcl_GetIntFromObj (interp, tclobj, &zaxis) == TCL_ERROR)
01404 return TCL_ERROR;
01405 }
01406 else
01407 {
01408 return TCL_ERROR;
01409 }
01410 Tcl_DecrRefCount (tclarrayname);
01411 Tcl_DecrRefCount (tclindexname);
01412
01413
01414 tclarrayname = Tcl_NewStringObj (array, -1);
01415 tclindexname = Tcl_NewStringObj ("outname", -1);
01416 if (tclobj =
01417 Tcl_ObjGetVar2 (interp, tclarrayname, tclindexname,
01418 TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))
01419 {
01420 outname = Tcl_GetStringFromObj (tclobj, &strlen);
01421 if (strlen <= 0)
01422 return TCL_ERROR;
01423 }
01424 else
01425 {
01426 return TCL_ERROR;
01427 }
01428 Tcl_DecrRefCount (tclarrayname);
01429 Tcl_DecrRefCount (tclindexname);
01430
01431 ROTATECUBE (inimg, xdir, ydir, zdir, xaxis, yaxis, zaxis, &outimg);
01432
01433 if (CHECKIMG (outimg))
01434 sprintf (outimg->text, "%s", outname);
01435 outimgaddr = (int) outimg;
01436
01437 sprintf (msg, "%x", outimgaddr);
01438 Tcl_SetResult (interp, msg, TCL_VOLATILE);
01439
01440 return TCL_OK;
01441 }
01442
01443
01444
01445
01446
01447
01448
01449
01450
01451
01452
01453 int
01454 Sadie_Multi_Init (Tcl_Interp * interp)
01455 {
01456 Tcl_CreateCommand (interp, "Sadie_Multi_Combine", Sadie_Multi_CombineCmd,
01457 (ClientData) NULL, NULL);
01458 Tcl_CreateCommand (interp, "Sadie_Multi_Compare", Sadie_Multi_CompareCmd,
01459 (ClientData) NULL, NULL);
01460 Tcl_CreateCommand (interp, "Sadie_Multi_PCT", Sadie_Multi_PCTCmd,
01461 (ClientData) NULL, NULL);
01462 Tcl_CreateCommand (interp, "Sadie_Multi_PCS", Sadie_Multi_PCSCmd,
01463 (ClientData) NULL, NULL);
01464 Tcl_CreateCommand (interp, "Sadie_Multi_RGB2HSV", Sadie_Multi_RGB2HSVCmd,
01465 (ClientData) NULL, NULL);
01466 Tcl_CreateCommand (interp, "Sadie_Multi_HSV2RGB", Sadie_Multi_HSV2RGBCmd,
01467 (ClientData) NULL, NULL);
01468 Tcl_CreateCommand (interp, "Sadie_Multi_BIL2BSQ", Sadie_Multi_BIL2BSQCmd,
01469 (ClientData) NULL, NULL);
01470 Tcl_CreateCommand (interp, "Sadie_Multi_BSQ2BIL", Sadie_Multi_BSQ2BILCmd,
01471 (ClientData) NULL, NULL);
01472 Tcl_CreateCommand (interp, "Sadie_Multi_Comp2Real",
01473 Sadie_Multi_Comp2RealCmd, (ClientData) NULL, NULL);
01474 Tcl_CreateCommand (interp, "Sadie_Multi_Real2Comp",
01475 Sadie_Multi_Real2CompCmd, (ClientData) NULL, NULL);
01476 Tcl_CreateCommand (interp, "Sadie_Multi_RotateCube",
01477 Sadie_Multi_RotateCubeCmd, (ClientData) NULL, NULL);
01478 return TCL_OK;
01479 }