00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <tcl.h>
00015 #include <tk.h>
00016 #include "sadie.h"
00017 #include "proto.h"
00018
00019
00020 static char rcsid[] = "$Id: Sadie_Proto.c,v 1.5 1999/05/24 21:54:51 conner Exp $";
00021
00022
00023
00024
00025
00026 extern short nlev;
00027 extern short csize;
00028 extern double weight;
00029 extern double *count;
00030 extern PIXEL gain;
00031 extern PIXEL bias;
00032 extern PIXEL gmin;
00033 extern PIXEL gmax;
00034 extern PIXEL thresh;
00035 extern PIXEL gbrk[2][4];
00036 extern PIXEL *table;
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 int Sadie_Proto_Img2AsciiCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00056 {
00057 Tcl_Obj* tclobj=NULL;
00058 Tcl_Obj* tclarrayname = NULL;
00059 Tcl_Obj* tclindexname = NULL;
00060 char msg[SLEN];
00061 char* array=NULL;
00062 char* tempstr=NULL;
00063 int strlen;
00064 int inimgaddr;
00065 IMAGE* inimg=NULL;
00066
00067 if( argc != 2 ) {
00068 Tcl_AppendResult(interp,"wrong # args: should be \"",
00069 argv[0], " arrayname\"", (char *) NULL);
00070 return TCL_ERROR;
00071 }
00072 array=argv[1];
00073
00074
00075 tclarrayname = Tcl_NewStringObj(array,-1);
00076 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00077 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname, tclindexname, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00078 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00079 if (strlen <= 0) return TCL_ERROR;
00080 sscanf(tempstr,"%x",&inimgaddr);
00081 inimg = (IMAGE *) inimgaddr;
00082 } else {
00083 return TCL_ERROR;
00084 }
00085 Tcl_DecrRefCount(tclarrayname);
00086 Tcl_DecrRefCount(tclindexname);
00087
00088 IMG2ASCII(inimg);
00089
00090 return TCL_OK;
00091
00092 }
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109 int Sadie_Proto_BinGridCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00110 {
00111 Tcl_Obj* tclobj=NULL;
00112 Tcl_Obj* tclarrayname = NULL;
00113 Tcl_Obj* tclindexname = NULL;
00114 char msg[SLEN];
00115 char* array=NULL;
00116 char* tempstr=NULL;
00117 int strlen;
00118 int inimgaddr;
00119 IMAGE* inimg=NULL;
00120 int outimgaddr;
00121 IMAGE* outimg=NULL;
00122 char* outname=NULL;
00123
00124 if( argc != 2 ) {
00125 Tcl_AppendResult(interp,"wrong # args: should be \"",
00126 argv[0], " arrayname\"", (char *) NULL);
00127 return TCL_ERROR;
00128 }
00129 array=argv[1];
00130
00131
00132
00133 tclarrayname = Tcl_NewStringObj(array,-1);
00134 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00135 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00136
00137
00138 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00139 if (strlen <= 0) return TCL_ERROR;
00140 sscanf(tempstr,"%x",&inimgaddr);
00141 inimg = (IMAGE *) inimgaddr;
00142 } else {
00143 return TCL_ERROR;
00144 }
00145 Tcl_DecrRefCount(tclarrayname);
00146 Tcl_DecrRefCount(tclindexname);
00147
00148
00149
00150 tclarrayname = Tcl_NewStringObj(array,-1);
00151 tclindexname = Tcl_NewStringObj("outname",-1);
00152 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00153
00154
00155 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00156 if (strlen <= 0) return TCL_ERROR;
00157 } else {
00158 return TCL_ERROR;
00159 }
00160 Tcl_DecrRefCount(tclarrayname);
00161 Tcl_DecrRefCount(tclindexname);
00162
00163
00164 BINGRID(inimg, &outimg);
00165
00166 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00167
00168 outimgaddr = (int) outimg;
00169 sprintf(msg, "%x", outimgaddr);
00170 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00171
00172 return TCL_OK;
00173
00174 }
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 int Sadie_Proto_SectorCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00192 {
00193 Tcl_Obj* tclobj=NULL;
00194 Tcl_Obj* tclarrayname = NULL;
00195 Tcl_Obj* tclindexname = NULL;
00196 char msg[SLEN];
00197 char* array=NULL;
00198 char* tempstr=NULL;
00199 int strlen;
00200 int inimgaddr;
00201 IMAGE* inimg=NULL;
00202 int outimgaddr;
00203 IMAGE* outimg=NULL;
00204 char* outname=NULL;
00205
00206 if( argc != 2 ) {
00207 Tcl_AppendResult(interp,"wrong # args: should be \"",
00208 argv[0], " arrayname\"", (char *) NULL);
00209 return TCL_ERROR;
00210 }
00211 array=argv[1];
00212
00213
00214
00215 tclarrayname = Tcl_NewStringObj(array,-1);
00216 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00217 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00218
00219
00220 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00221 if (strlen <= 0) return TCL_ERROR;
00222 sscanf(tempstr,"%x",&inimgaddr);
00223 inimg = (IMAGE *) inimgaddr;
00224 } else {
00225 return TCL_ERROR;
00226 }
00227 Tcl_DecrRefCount(tclarrayname);
00228 Tcl_DecrRefCount(tclindexname);
00229
00230
00231
00232 tclarrayname = Tcl_NewStringObj(array,-1);
00233 tclindexname = Tcl_NewStringObj("outname",-1);
00234 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00235
00236
00237 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00238 if (strlen <= 0) return TCL_ERROR;
00239 } else {
00240 return TCL_ERROR;
00241 }
00242 Tcl_DecrRefCount(tclarrayname);
00243 Tcl_DecrRefCount(tclindexname);
00244
00245
00246 SECTOR(inimg, &outimg);
00247
00248 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00249
00250 outimgaddr = (int) outimg;
00251 sprintf(msg, "%x", outimgaddr);
00252 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00253
00254 return TCL_OK;
00255
00256 }
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272 int Sadie_Proto_Sector8Cmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00273 {
00274 Tcl_Obj* tclobj=NULL;
00275 Tcl_Obj* tclarrayname = NULL;
00276 Tcl_Obj* tclindexname = NULL;
00277 char msg[SLEN];
00278 char* array=NULL;
00279 char* tempstr=NULL;
00280 int strlen;
00281 int inimgaddr;
00282 IMAGE* inimg=NULL;
00283 int outimgaddr;
00284 IMAGE* outimg=NULL;
00285 char* outname=NULL;
00286
00287 if( argc != 2 ) {
00288 Tcl_AppendResult(interp,"wrong # args: should be \"",
00289 argv[0], " arrayname\"", (char *) NULL);
00290 return TCL_ERROR;
00291 }
00292 array=argv[1];
00293
00294
00295
00296 tclarrayname = Tcl_NewStringObj(array,-1);
00297 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00298 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00299
00300
00301 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00302 if (strlen <= 0) return TCL_ERROR;
00303 sscanf(tempstr,"%x",&inimgaddr);
00304 inimg = (IMAGE *) inimgaddr;
00305 } else {
00306 return TCL_ERROR;
00307 }
00308 Tcl_DecrRefCount(tclarrayname);
00309 Tcl_DecrRefCount(tclindexname);
00310
00311
00312
00313 tclarrayname = Tcl_NewStringObj(array,-1);
00314 tclindexname = Tcl_NewStringObj("outname",-1);
00315 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00316
00317
00318 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00319 if (strlen <= 0) return TCL_ERROR;
00320 } else {
00321 return TCL_ERROR;
00322 }
00323 Tcl_DecrRefCount(tclarrayname);
00324 Tcl_DecrRefCount(tclindexname);
00325
00326
00327 SECTOR8(inimg, &outimg);
00328
00329 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00330
00331 outimgaddr = (int) outimg;
00332 sprintf(msg, "%x", outimgaddr);
00333 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00334
00335 return TCL_OK;
00336
00337 }
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355 int Sadie_Proto_IsolateCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00356 {
00357 Tcl_Obj* tclobj=NULL;
00358 Tcl_Obj* tclarrayname = NULL;
00359 Tcl_Obj* tclindexname = NULL;
00360 char msg[SLEN];
00361 char* array=NULL;
00362 char* tempstr=NULL;
00363 int strlen;
00364 int inimgaddr;
00365 IMAGE* inimg=NULL;
00366 int outimgaddr;
00367 IMAGE* outimg=NULL;
00368 char* outname=NULL;
00369 double value;
00370
00371 if( argc != 2 ) {
00372 Tcl_AppendResult(interp,"wrong # args: should be \"",
00373 argv[0], " arrayname\"", (char *) NULL);
00374 return TCL_ERROR;
00375 }
00376 array=argv[1];
00377
00378
00379
00380 tclarrayname = Tcl_NewStringObj(array,-1);
00381 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00382 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00383 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00384 if (strlen <= 0) return TCL_ERROR;
00385 sscanf(tempstr,"%x",&inimgaddr);
00386 inimg = (IMAGE *) inimgaddr;
00387 } else {
00388 return TCL_ERROR;
00389 }
00390 Tcl_DecrRefCount(tclarrayname);
00391 Tcl_DecrRefCount(tclindexname);
00392
00393
00394
00395 tclarrayname = Tcl_NewStringObj(array,-1);
00396 tclindexname = Tcl_NewStringObj("value",-1);
00397 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00398 if (Tcl_GetDoubleFromObj(interp,tclobj,&value) == TCL_ERROR) return TCL_ERROR;
00399 } else {
00400 return TCL_ERROR;
00401 }
00402 Tcl_DecrRefCount(tclarrayname);
00403 Tcl_DecrRefCount(tclindexname);
00404
00405
00406
00407 tclarrayname = Tcl_NewStringObj(array,-1);
00408 tclindexname = Tcl_NewStringObj("outname",-1);
00409 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00410 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00411 if (strlen <= 0) return TCL_ERROR;
00412 } else {
00413 return TCL_ERROR;
00414 }
00415 Tcl_DecrRefCount(tclarrayname);
00416 Tcl_DecrRefCount(tclindexname);
00417
00418
00419 ISOLATE(inimg,value,&outimg);
00420
00421
00422 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00423 outimgaddr = (int) outimg;
00424
00425
00426 sprintf(msg, "%x", outimgaddr);
00427 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00428
00429 return TCL_OK;
00430 }
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451 int Sadie_Proto_SizeThreshCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00452 {
00453 Tcl_Obj* tclobj=NULL;
00454 Tcl_Obj* tclarrayname = NULL;
00455 Tcl_Obj* tclindexname = NULL;
00456 char msg[SLEN];
00457 char* array=NULL;
00458 char* tempstr=NULL;
00459 int strlen;
00460 int inimgaddr;
00461 IMAGE* inimg=NULL;
00462 int outimgaddr;
00463 IMAGE* outimg=NULL;
00464 char* outname=NULL;
00465 int thresh;
00466
00467 if( argc != 2 ) {
00468 Tcl_AppendResult(interp,"wrong # args: should be \"",
00469 argv[0], " arrayname\"", (char *) NULL);
00470 return TCL_ERROR;
00471 }
00472 array=argv[1];
00473
00474
00475
00476 tclarrayname = Tcl_NewStringObj(array,-1);
00477 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00478 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00479 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00480 if (strlen <= 0) return TCL_ERROR;
00481 sscanf(tempstr,"%x",&inimgaddr);
00482 inimg = (IMAGE *) inimgaddr;
00483 } else {
00484 return TCL_ERROR;
00485 }
00486 Tcl_DecrRefCount(tclarrayname);
00487 Tcl_DecrRefCount(tclindexname);
00488
00489
00490
00491 tclarrayname = Tcl_NewStringObj(array,-1);
00492 tclindexname = Tcl_NewStringObj("thresh",-1);
00493 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00494 if (Tcl_GetIntFromObj(interp,tclobj,&thresh) == TCL_ERROR) return TCL_ERROR;
00495 } else {
00496 return TCL_ERROR;
00497 }
00498 Tcl_DecrRefCount(tclarrayname);
00499 Tcl_DecrRefCount(tclindexname);
00500
00501
00502
00503 tclarrayname = Tcl_NewStringObj(array,-1);
00504 tclindexname = Tcl_NewStringObj("outname",-1);
00505 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00506 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00507 if (strlen <= 0) return TCL_ERROR;
00508 } else {
00509 return TCL_ERROR;
00510 }
00511 Tcl_DecrRefCount(tclarrayname);
00512 Tcl_DecrRefCount(tclindexname);
00513
00514
00515 SIZEFILTER(inimg,thresh,&outimg);
00516
00517
00518 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00519 outimgaddr = (int) outimg;
00520
00521
00522 sprintf(msg, "%x", outimgaddr);
00523 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00524
00525 return TCL_OK;
00526 }
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544 int Sadie_Proto_CreateGaussCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00545 {
00546 Tcl_Obj* tclobj=NULL;
00547 Tcl_Obj* tclarrayname = NULL;
00548 Tcl_Obj* tclindexname = NULL;
00549 char msg[SLEN];
00550 char* array=NULL;
00551 char* tempstr=NULL;
00552 int strlen;
00553 int outimgaddr;
00554 IMAGE* outimg=NULL;
00555 char* outname=NULL;
00556 double sigma;
00557 int size;
00558
00559 if( argc != 2 ) {
00560 Tcl_AppendResult(interp,"wrong # args: should be \"",
00561 argv[0], " arrayname\"", (char *) NULL);
00562 return TCL_ERROR;
00563 }
00564 array=argv[1];
00565
00566
00567
00568 tclarrayname = Tcl_NewStringObj(array,-1);
00569 tclindexname = Tcl_NewStringObj("size",-1);
00570 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00571 if (Tcl_GetIntFromObj(interp,tclobj,&size) == TCL_ERROR) return TCL_ERROR;
00572 } else {
00573 return TCL_ERROR;
00574 }
00575 Tcl_DecrRefCount(tclarrayname);
00576 Tcl_DecrRefCount(tclindexname);
00577
00578
00579
00580 tclarrayname = Tcl_NewStringObj(array,-1);
00581 tclindexname = Tcl_NewStringObj("sigma",-1);
00582 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00583 if (Tcl_GetDoubleFromObj(interp,tclobj,&sigma) == TCL_ERROR) return TCL_ERROR;
00584 } else {
00585 return TCL_ERROR;
00586 }
00587 Tcl_DecrRefCount(tclarrayname);
00588 Tcl_DecrRefCount(tclindexname);
00589
00590
00591
00592 tclarrayname = Tcl_NewStringObj(array,-1);
00593 tclindexname = Tcl_NewStringObj("outname",-1);
00594 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00595 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00596 if (strlen <= 0) return TCL_ERROR;
00597 } else {
00598 return TCL_ERROR;
00599 }
00600 Tcl_DecrRefCount(tclarrayname);
00601 Tcl_DecrRefCount(tclindexname);
00602
00603
00604 CREATEGAUSS(size,sigma,&outimg);
00605
00606
00607 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00608 outimgaddr = (int) outimg;
00609
00610
00611 sprintf(msg, "%x", outimgaddr);
00612 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00613
00614 return TCL_OK;
00615 }
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632 int Sadie_Proto_NonMaxSuppressXCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00633 {
00634 Tcl_Obj* tclobj=NULL;
00635 Tcl_Obj* tclarrayname = NULL;
00636 Tcl_Obj* tclindexname = NULL;
00637 char msg[SLEN];
00638 char* array=NULL;
00639 char* tempstr=NULL;
00640 int strlen;
00641 int inimgaddr;
00642 IMAGE* inimg=NULL;
00643 int outimgaddr;
00644 IMAGE* outimg=NULL;
00645 char* outname=NULL;
00646
00647 if( argc != 2 ) {
00648 Tcl_AppendResult(interp,"wrong # args: should be \"",
00649 argv[0], " arrayname\"", (char *) NULL);
00650 return TCL_ERROR;
00651 }
00652 array=argv[1];
00653
00654
00655
00656 tclarrayname = Tcl_NewStringObj(array,-1);
00657 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00658 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00659
00660
00661 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00662 if (strlen <= 0) return TCL_ERROR;
00663 sscanf(tempstr,"%x",&inimgaddr);
00664 inimg = (IMAGE *) inimgaddr;
00665 } else {
00666 return TCL_ERROR;
00667 }
00668 Tcl_DecrRefCount(tclarrayname);
00669 Tcl_DecrRefCount(tclindexname);
00670
00671
00672
00673 tclarrayname = Tcl_NewStringObj(array,-1);
00674 tclindexname = Tcl_NewStringObj("outname",-1);
00675 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00676
00677
00678 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00679 if (strlen <= 0) return TCL_ERROR;
00680 } else {
00681 return TCL_ERROR;
00682 }
00683 Tcl_DecrRefCount(tclarrayname);
00684 Tcl_DecrRefCount(tclindexname);
00685
00686
00687 NONMAXSUPRX(inimg, &outimg);
00688
00689 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00690
00691 outimgaddr = (int) outimg;
00692 sprintf(msg, "%x", outimgaddr);
00693 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00694
00695 return TCL_OK;
00696 }
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716 int Sadie_Proto_CannyCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00717 {
00718 Tcl_Obj* tclobj=NULL;
00719 Tcl_Obj* tclarrayname = NULL;
00720 Tcl_Obj* tclindexname = NULL;
00721 char msg[SLEN];
00722 char* array=NULL;
00723 char* tempstr=NULL;
00724 int strlen;
00725 int inimgaddr;
00726 IMAGE* inimg=NULL;
00727 int outimgaddr;
00728 IMAGE* outimg=NULL;
00729 char* outname=NULL;
00730 int size;
00731 double sigma;
00732
00733 if( argc != 2 ) {
00734 Tcl_AppendResult(interp,"wrong # args: should be \"",
00735 argv[0], " arrayname\"", (char *) NULL);
00736 return TCL_ERROR;
00737 }
00738 array=argv[1];
00739
00740
00741
00742 tclarrayname = Tcl_NewStringObj(array,-1);
00743 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00744 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00745 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00746 if (strlen <= 0) return TCL_ERROR;
00747 sscanf(tempstr,"%x",&inimgaddr);
00748 inimg = (IMAGE *) inimgaddr;
00749 } else {
00750 return TCL_ERROR;
00751 }
00752 Tcl_DecrRefCount(tclarrayname);
00753 Tcl_DecrRefCount(tclindexname);
00754
00755
00756
00757 tclarrayname = Tcl_NewStringObj(array,-1);
00758 tclindexname = Tcl_NewStringObj("size",-1);
00759 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00760 if (Tcl_GetIntFromObj(interp,tclobj,&size) == TCL_ERROR) return TCL_ERROR;
00761 } else {
00762 return TCL_ERROR;
00763 }
00764 Tcl_DecrRefCount(tclarrayname);
00765 Tcl_DecrRefCount(tclindexname);
00766
00767
00768
00769 tclarrayname = Tcl_NewStringObj(array,-1);
00770 tclindexname = Tcl_NewStringObj("sigma",-1);
00771 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00772 if (Tcl_GetDoubleFromObj(interp,tclobj,&sigma) == TCL_ERROR) return TCL_ERROR;
00773 } else {
00774 return TCL_ERROR;
00775 }
00776 Tcl_DecrRefCount(tclarrayname);
00777 Tcl_DecrRefCount(tclindexname);
00778
00779
00780
00781 tclarrayname = Tcl_NewStringObj(array,-1);
00782 tclindexname = Tcl_NewStringObj("outname",-1);
00783 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00784 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00785 if (strlen <= 0) return TCL_ERROR;
00786 } else {
00787 return TCL_ERROR;
00788 }
00789 Tcl_DecrRefCount(tclarrayname);
00790 Tcl_DecrRefCount(tclindexname);
00791
00792
00793 CANNY(inimg, sigma, size, &outimg);
00794
00795
00796 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00797 outimgaddr = (int) outimg;
00798
00799
00800 sprintf(msg, "%x", outimgaddr);
00801 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00802
00803 return TCL_OK;
00804 }
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820 int Sadie_Proto_CCL8Cmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00821 {
00822 Tcl_Obj* tclobj=NULL;
00823 Tcl_Obj* tclarrayname = NULL;
00824 Tcl_Obj* tclindexname = NULL;
00825 char msg[SLEN];
00826 char* array=NULL;
00827 char* tempstr=NULL;
00828 int strlen;
00829 int inimgaddr;
00830 IMAGE* inimg=NULL;
00831 int outimgaddr;
00832 IMAGE* outimg=NULL;
00833 char* outname=NULL;
00834
00835 if( argc != 2 ) {
00836 Tcl_AppendResult(interp,"wrong # args: should be \"",
00837 argv[0], " arrayname\"", (char *) NULL);
00838 return TCL_ERROR;
00839 }
00840 array=argv[1];
00841
00842
00843
00844 tclarrayname = Tcl_NewStringObj(array,-1);
00845 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00846 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00847
00848
00849 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00850 if (strlen <= 0) return TCL_ERROR;
00851 sscanf(tempstr,"%x",&inimgaddr);
00852 inimg = (IMAGE *) inimgaddr;
00853 } else {
00854 return TCL_ERROR;
00855 }
00856 Tcl_DecrRefCount(tclarrayname);
00857 Tcl_DecrRefCount(tclindexname);
00858
00859
00860
00861 tclarrayname = Tcl_NewStringObj(array,-1);
00862 tclindexname = Tcl_NewStringObj("outname",-1);
00863 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00864
00865
00866 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00867 if (strlen <= 0) return TCL_ERROR;
00868 } else {
00869 return TCL_ERROR;
00870 }
00871 Tcl_DecrRefCount(tclarrayname);
00872 Tcl_DecrRefCount(tclindexname);
00873
00874
00875 CMPLBL8(inimg, &outimg);
00876
00877 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00878
00879 outimgaddr = (int) outimg;
00880 sprintf(msg, "%x", outimgaddr);
00881 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00882
00883 return TCL_OK;
00884
00885 }
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902 int Sadie_Proto_ChainCodeCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00903 {
00904 Tcl_Obj* tclobj=NULL;
00905 Tcl_Obj* tclarrayname = NULL;
00906 Tcl_Obj* tclindexname = NULL;
00907 char msg[SLEN];
00908 char* array=NULL;
00909 char* tempstr=NULL;
00910 int strlen;
00911 int inimgaddr;
00912 IMAGE* inimg=NULL;
00913 int outimgaddr;
00914 IMAGE* outimg=NULL;
00915 char* outname=NULL;
00916
00917 if( argc != 2 ) {
00918 Tcl_AppendResult(interp,"wrong # args: should be \"",
00919 argv[0], " arrayname\"", (char *) NULL);
00920 return TCL_ERROR;
00921 }
00922 array=argv[1];
00923
00924
00925
00926 tclarrayname = Tcl_NewStringObj(array,-1);
00927 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00928 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00929
00930
00931 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00932 if (strlen <= 0) return TCL_ERROR;
00933 sscanf(tempstr,"%x",&inimgaddr);
00934 inimg = (IMAGE *) inimgaddr;
00935 } else {
00936 return TCL_ERROR;
00937 }
00938 Tcl_DecrRefCount(tclarrayname);
00939 Tcl_DecrRefCount(tclindexname);
00940
00941
00942
00943 tclarrayname = Tcl_NewStringObj(array,-1);
00944 tclindexname = Tcl_NewStringObj("outname",-1);
00945 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00946
00947
00948 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00949 if (strlen <= 0) return TCL_ERROR;
00950 } else {
00951 return TCL_ERROR;
00952 }
00953 Tcl_DecrRefCount(tclarrayname);
00954 Tcl_DecrRefCount(tclindexname);
00955
00956
00957 CHAINCODE(inimg, &outimg);
00958
00959 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00960
00961 outimgaddr = (int) outimg;
00962 sprintf(msg, "%x", outimgaddr);
00963 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00964
00965 return TCL_OK;
00966 }
00967
00968
00969
00970
00971
00972
00973
00974
00975
00976
00977
00978
00979
00980
00981 int Sadie_Proto_FourierDescCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00982 {
00983 Tcl_Obj* tclobj=NULL;
00984 Tcl_Obj* tclarrayname = NULL;
00985 Tcl_Obj* tclindexname = NULL;
00986 char msg[SLEN];
00987 char* array=NULL;
00988 char* tempstr=NULL;
00989 int strlen;
00990 int inimgaddr;
00991 IMAGE* inimg=NULL;
00992
00993 if( argc != 2 ) {
00994 Tcl_AppendResult(interp,"wrong # args: should be \"",
00995 argv[0], " arrayname\"", (char *) NULL);
00996 return TCL_ERROR;
00997 }
00998 array=argv[1];
00999
01000
01001 tclarrayname = Tcl_NewStringObj(array,-1);
01002 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
01003 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname, tclindexname, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01004 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01005 if (strlen <= 0) return TCL_ERROR;
01006 sscanf(tempstr,"%x",&inimgaddr);
01007 inimg = (IMAGE *) inimgaddr;
01008 } else {
01009 return TCL_ERROR;
01010 }
01011 Tcl_DecrRefCount(tclarrayname);
01012 Tcl_DecrRefCount(tclindexname);
01013
01014 FOURIERDESC(inimg);
01015
01016 return TCL_OK;
01017 }
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035
01036
01037
01038 int Sadie_Proto_HoughCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01039 {
01040 Tcl_Obj* tclobj=NULL;
01041 Tcl_Obj* tclarrayname = NULL;
01042 Tcl_Obj* tclindexname = NULL;
01043 char msg[SLEN];
01044 char* array=NULL;
01045 char* tempstr=NULL;
01046 int strlen;
01047 int inimgaddr;
01048 IMAGE* inimg=NULL;
01049 int outimgaddr1, outimgaddr2;
01050 IMAGE *outimg1=NULL, *outimg2=NULL;
01051 char *outname1=NULL, *outname2;
01052 int thresh, rhobins, thetabins;
01053
01054 if( argc != 2 ) {
01055 Tcl_AppendResult(interp,"wrong # args: should be \"",
01056 argv[0], " arrayname\"", (char *) NULL);
01057 return TCL_ERROR;
01058 }
01059 array=argv[1];
01060
01061
01062
01063 tclarrayname = Tcl_NewStringObj(array,-1);
01064 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
01065 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01066 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01067 if (strlen <= 0) return TCL_ERROR;
01068 sscanf(tempstr,"%x",&inimgaddr);
01069 inimg = (IMAGE *) inimgaddr;
01070 } else {
01071 return TCL_ERROR;
01072 }
01073 Tcl_DecrRefCount(tclarrayname);
01074 Tcl_DecrRefCount(tclindexname);
01075
01076
01077
01078 tclarrayname = Tcl_NewStringObj(array,-1);
01079 tclindexname = Tcl_NewStringObj("thresh",-1);
01080 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01081 if (Tcl_GetIntFromObj(interp,tclobj,&thresh) == TCL_ERROR) return TCL_ERROR;
01082 } else {
01083 return TCL_ERROR;
01084 }
01085 Tcl_DecrRefCount(tclarrayname);
01086 Tcl_DecrRefCount(tclindexname);
01087
01088
01089
01090 tclarrayname = Tcl_NewStringObj(array,-1);
01091 tclindexname = Tcl_NewStringObj("rhobins",-1);
01092 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01093 if (Tcl_GetIntFromObj(interp,tclobj,&rhobins) == TCL_ERROR) return TCL_ERROR;
01094 } else {
01095 return TCL_ERROR;
01096 }
01097 Tcl_DecrRefCount(tclarrayname);
01098 Tcl_DecrRefCount(tclindexname);
01099
01100
01101
01102 tclarrayname = Tcl_NewStringObj(array,-1);
01103 tclindexname = Tcl_NewStringObj("thetabins",-1);
01104 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01105 if (Tcl_GetIntFromObj(interp,tclobj,&thetabins) == TCL_ERROR) return TCL_ERROR;
01106 } else {
01107 return TCL_ERROR;
01108 }
01109 Tcl_DecrRefCount(tclarrayname);
01110 Tcl_DecrRefCount(tclindexname);
01111
01112
01113
01114 tclarrayname = Tcl_NewStringObj(array,-1);
01115 tclindexname = Tcl_NewStringObj("outname1",-1);
01116 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01117 outname1 = Tcl_GetStringFromObj(tclobj,&strlen);
01118 if (strlen <= 0) return TCL_ERROR;
01119 } else {
01120 return TCL_ERROR;
01121 }
01122 Tcl_DecrRefCount(tclarrayname);
01123 Tcl_DecrRefCount(tclindexname);
01124
01125
01126
01127 tclarrayname = Tcl_NewStringObj(array,-1);
01128 tclindexname = Tcl_NewStringObj("outname2",-1);
01129 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01130 outname2 = Tcl_GetStringFromObj(tclobj,&strlen);
01131 if (strlen <= 0) return TCL_ERROR;
01132 } else {
01133 return TCL_ERROR;
01134 }
01135 Tcl_DecrRefCount(tclarrayname);
01136 Tcl_DecrRefCount(tclindexname);
01137
01138
01139 HOUGH(inimg, thresh, rhobins, thetabins, &outimg1, &outimg2);
01140
01141
01142 if (CHECKIMG(outimg1)) sprintf(outimg1->text, "%s", outname1);
01143 outimgaddr1 = (int) outimg1;
01144
01145 if (CHECKIMG(outimg2)) sprintf(outimg2->text, "%s", outname2);
01146 outimgaddr2 = (int) outimg2;
01147
01148
01149 sprintf(msg, "%x %x", outimgaddr1, outimgaddr2);
01150 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01151
01152 return TCL_OK;
01153 }
01154
01155
01156
01157
01158
01159
01160
01161
01162
01163
01164
01165
01166
01167
01168
01169
01170
01171 int Sadie_Proto_PeriodogramCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01172 {
01173 Tcl_Obj* tclobj=NULL;
01174 Tcl_Obj* tclarrayname = NULL;
01175 Tcl_Obj* tclindexname = NULL;
01176 char msg[SLEN];
01177 char* array=NULL;
01178 char* tempstr=NULL;
01179 int strlen;
01180 int inimgaddr;
01181 IMAGE* inimg=NULL;
01182 int outimgaddr;
01183 IMAGE* outimg=NULL;
01184 char* outname=NULL;
01185
01186 if( argc != 2 ) {
01187 Tcl_AppendResult(interp,"wrong # args: should be \"",
01188 argv[0], " arrayname\"", (char *) NULL);
01189 return TCL_ERROR;
01190 }
01191 array=argv[1];
01192
01193
01194
01195 tclarrayname = Tcl_NewStringObj(array,-1);
01196 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
01197 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01198
01199
01200 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01201 if (strlen <= 0) return TCL_ERROR;
01202 sscanf(tempstr,"%x",&inimgaddr);
01203 inimg = (IMAGE *) inimgaddr;
01204 } else {
01205 return TCL_ERROR;
01206 }
01207 Tcl_DecrRefCount(tclarrayname);
01208 Tcl_DecrRefCount(tclindexname);
01209
01210
01211
01212 tclarrayname = Tcl_NewStringObj(array,-1);
01213 tclindexname = Tcl_NewStringObj("outname",-1);
01214 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01215
01216
01217 outname = Tcl_GetStringFromObj(tclobj,&strlen);
01218 if (strlen <= 0) return TCL_ERROR;
01219 } else {
01220 return TCL_ERROR;
01221 }
01222 Tcl_DecrRefCount(tclarrayname);
01223 Tcl_DecrRefCount(tclindexname);
01224
01225
01226 PERIODOGRAM(inimg, &outimg);
01227
01228 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
01229
01230 outimgaddr = (int) outimg;
01231 sprintf(msg, "%x", outimgaddr);
01232 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01233
01234 return TCL_OK;
01235 }
01236
01237
01238
01239
01240
01241
01242
01243
01244
01245
01246
01247
01248
01249
01250
01251 int Sadie_Proto_FindBestFocusCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01252 {
01253 Tcl_Obj* tclobj=NULL;
01254 Tcl_Obj* tclarrayname = NULL;
01255 Tcl_Obj* tclindexname = NULL;
01256 char msg[SLEN];
01257 char* array=NULL;
01258 char* tempstr=NULL;
01259 int strlen;
01260 int inimgaddr;
01261 IMAGE **inimg=NULL;
01262 int i, nimg, best;
01263
01264 if( argc != 2 ) {
01265 Tcl_AppendResult(interp,"wrong # args: should be \"",
01266 argv[0], " arrayname\"", (char *) NULL);
01267 return TCL_ERROR;
01268 }
01269 array=argv[1];
01270
01271
01272
01273 tclarrayname = Tcl_NewStringObj(array,-1);
01274 tclindexname = Tcl_NewStringObj("nimg",-1);
01275 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01276 if (Tcl_GetIntFromObj(interp,tclobj,&nimg) == TCL_ERROR) return TCL_ERROR;
01277 } else {
01278 return TCL_ERROR;
01279 }
01280 Tcl_DecrRefCount(tclarrayname);
01281 Tcl_DecrRefCount(tclindexname);
01282
01283
01284 inimg = (IMAGE **) malloc(nimg * sizeof(IMAGE *));
01285
01286
01287 for (i=0; i<nimg; i++) {
01288 tclarrayname = Tcl_NewStringObj(array,-1);
01289 sprintf(msg,"inimg,addr%d",i+1);
01290 tclindexname = Tcl_NewStringObj(msg,-1);
01291 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01292 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01293 if (strlen <= 0) return TCL_ERROR;
01294 sscanf(tempstr,"%x",&inimgaddr);
01295 inimg[i] = (IMAGE *) inimgaddr;
01296 } else {
01297 return TCL_ERROR;
01298 }
01299 Tcl_DecrRefCount(tclarrayname);
01300 Tcl_DecrRefCount(tclindexname);
01301 }
01302
01303
01304 FINDBESTFOCUS(inimg,nimg,&best);
01305 printf("best focus = %d\n",best);
01306
01307 sprintf(msg, "%d", best);
01308 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01309
01310 if (inimg) free(inimg);
01311
01312 return TCL_OK;
01313 }
01314
01315
01316
01317
01318
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328
01329
01330
01331
01332
01333 int Sadie_Proto_ColorOverlayCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01334 {
01335 Tcl_Obj* tclobj=NULL;
01336 Tcl_Obj* tclarrayname = NULL;
01337 Tcl_Obj* tclindexname = NULL;
01338 char msg[SLEN];
01339 char* array=NULL;
01340 char* tempstr=NULL;
01341 int strlen;
01342 int inimgaddr, binimgaddr;
01343 IMAGE *inimg=NULL, *binimg=NULL;
01344 int outimgaddr;
01345 IMAGE* outimg=NULL;
01346 char* outname=NULL;
01347 int color;
01348
01349 if( argc != 2 ) {
01350 Tcl_AppendResult(interp,"wrong # args: should be \"",
01351 argv[0], " arrayname\"", (char *) NULL);
01352 return TCL_ERROR;
01353 }
01354 array=argv[1];
01355
01356
01357
01358 tclarrayname = Tcl_NewStringObj(array,-1);
01359 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
01360 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01361 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01362 if (strlen <= 0) return TCL_ERROR;
01363 sscanf(tempstr,"%x",&inimgaddr);
01364 inimg = (IMAGE *) inimgaddr;
01365 } else {
01366 return TCL_ERROR;
01367 }
01368 Tcl_DecrRefCount(tclarrayname);
01369 Tcl_DecrRefCount(tclindexname);
01370
01371
01372
01373 tclarrayname = Tcl_NewStringObj(array,-1);
01374 tclindexname = Tcl_NewStringObj("binimg,addr",-1);
01375 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01376 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01377 if (strlen <= 0) return TCL_ERROR;
01378 sscanf(tempstr,"%x",&binimgaddr);
01379 binimg = (IMAGE *) binimgaddr;
01380 } else {
01381 return TCL_ERROR;
01382 }
01383 Tcl_DecrRefCount(tclarrayname);
01384 Tcl_DecrRefCount(tclindexname);
01385
01386
01387
01388 tclarrayname = Tcl_NewStringObj(array,-1);
01389 tclindexname = Tcl_NewStringObj("color",-1);
01390 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01391 if (Tcl_GetIntFromObj(interp,tclobj,&color) == TCL_ERROR) return TCL_ERROR;
01392 } else {
01393 return TCL_ERROR;
01394 }
01395 Tcl_DecrRefCount(tclarrayname);
01396 Tcl_DecrRefCount(tclindexname);
01397
01398
01399
01400 tclarrayname = Tcl_NewStringObj(array,-1);
01401 tclindexname = Tcl_NewStringObj("outname",-1);
01402 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01403 outname = Tcl_GetStringFromObj(tclobj,&strlen);
01404 if (strlen <= 0) return TCL_ERROR;
01405 } else {
01406 return TCL_ERROR;
01407 }
01408 Tcl_DecrRefCount(tclarrayname);
01409 Tcl_DecrRefCount(tclindexname);
01410
01411
01412 COLOR_OVERLAY(inimg, binimg, color, &outimg);
01413
01414
01415 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
01416 outimgaddr = (int) outimg;
01417
01418
01419 sprintf(msg, "%x", outimgaddr);
01420 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01421
01422 return TCL_OK;
01423 }
01424
01425
01426
01427
01428
01429
01430
01431
01432
01433
01434
01435
01436
01437
01438
01439
01440
01441
01442
01443
01444 int Sadie_Proto_TreeRingCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01445 {
01446 Tcl_Obj* tclobj=NULL;
01447 Tcl_Obj* tclarrayname = NULL;
01448 Tcl_Obj* tclindexname = NULL;
01449 char msg[SLEN];
01450 char* array=NULL;
01451 char* tempstr=NULL;
01452 int strlen;
01453 int inimgaddr;
01454 IMAGE* inimg=NULL;
01455 int outimgaddr;
01456 IMAGE* outimg=NULL;
01457 char* outname=NULL;
01458 int size;
01459 double sigma;
01460
01461 if( argc != 2 ) {
01462 Tcl_AppendResult(interp,"wrong # args: should be \"",
01463 argv[0], " arrayname\"", (char *) NULL);
01464 return TCL_ERROR;
01465 }
01466 array=argv[1];
01467
01468
01469
01470 tclarrayname = Tcl_NewStringObj(array,-1);
01471 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
01472 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01473 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01474 if (strlen <= 0) return TCL_ERROR;
01475 sscanf(tempstr,"%x",&inimgaddr);
01476 inimg = (IMAGE *) inimgaddr;
01477 } else {
01478 return TCL_ERROR;
01479 }
01480 Tcl_DecrRefCount(tclarrayname);
01481 Tcl_DecrRefCount(tclindexname);
01482
01483
01484
01485 tclarrayname = Tcl_NewStringObj(array,-1);
01486 tclindexname = Tcl_NewStringObj("size",-1);
01487 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01488 if (Tcl_GetIntFromObj(interp,tclobj,&size) == TCL_ERROR) return TCL_ERROR;
01489 } else {
01490 return TCL_ERROR;
01491 }
01492 Tcl_DecrRefCount(tclarrayname);
01493 Tcl_DecrRefCount(tclindexname);
01494
01495
01496
01497 tclarrayname = Tcl_NewStringObj(array,-1);
01498 tclindexname = Tcl_NewStringObj("sigma",-1);
01499 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01500 if (Tcl_GetDoubleFromObj(interp,tclobj,&sigma) == TCL_ERROR) return TCL_ERROR;
01501 } else {
01502 return TCL_ERROR;
01503 }
01504 Tcl_DecrRefCount(tclarrayname);
01505 Tcl_DecrRefCount(tclindexname);
01506
01507
01508
01509 tclarrayname = Tcl_NewStringObj(array,-1);
01510 tclindexname = Tcl_NewStringObj("outname",-1);
01511 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01512 outname = Tcl_GetStringFromObj(tclobj,&strlen);
01513 if (strlen <= 0) return TCL_ERROR;
01514 } else {
01515 return TCL_ERROR;
01516 }
01517 Tcl_DecrRefCount(tclarrayname);
01518 Tcl_DecrRefCount(tclindexname);
01519
01520
01521 TREERINGMAG(inimg, sigma, size, &outimg);
01522
01523
01524 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
01525 outimgaddr = (int) outimg;
01526
01527
01528 sprintf(msg, "%x", outimgaddr);
01529 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01530
01531 return TCL_OK;
01532 }
01533
01534
01535
01536
01537
01538
01539
01540
01541
01542
01543
01544
01545
01546
01547
01548
01549
01550
01551 int Sadie_Proto_LinkDoubleThreshCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01552 {
01553 Tcl_Obj* tclobj=NULL;
01554 Tcl_Obj* tclarrayname = NULL;
01555 Tcl_Obj* tclindexname = NULL;
01556 char msg[SLEN];
01557 char* array=NULL;
01558 char* tempstr=NULL;
01559 int strlen;
01560 int thresh1addr, thresh2addr;
01561 IMAGE *thresh1=NULL, *thresh2=NULL;
01562 int outlinksaddr, outedgesaddr;
01563 IMAGE *outlinks=NULL, *outedges=NULL;
01564 char *outlinksname=NULL, *outedgesname=NULL;
01565 int maxlinkdist;
01566
01567 if( argc != 2 ) {
01568 Tcl_AppendResult(interp,"wrong # args: should be \"",
01569 argv[0], " arrayname\"", (char *) NULL);
01570 return TCL_ERROR;
01571 }
01572 array=argv[1];
01573
01574
01575
01576 tclarrayname = Tcl_NewStringObj(array,-1);
01577 tclindexname = Tcl_NewStringObj("thresh1,addr",-1);
01578 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01579 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01580 if (strlen <= 0) return TCL_ERROR;
01581 sscanf(tempstr,"%x",&thresh1addr);
01582 thresh1 = (IMAGE *) thresh1addr;
01583 } else {
01584 return TCL_ERROR;
01585 }
01586 Tcl_DecrRefCount(tclarrayname);
01587 Tcl_DecrRefCount(tclindexname);
01588
01589
01590
01591 tclarrayname = Tcl_NewStringObj(array,-1);
01592 tclindexname = Tcl_NewStringObj("thresh2,addr",-1);
01593 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01594 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01595 if (strlen <= 0) return TCL_ERROR;
01596 sscanf(tempstr,"%x",&thresh2addr);
01597 thresh2 = (IMAGE *) thresh2addr;
01598 } else {
01599 return TCL_ERROR;
01600 }
01601 Tcl_DecrRefCount(tclarrayname);
01602 Tcl_DecrRefCount(tclindexname);
01603
01604
01605
01606 tclarrayname = Tcl_NewStringObj(array,-1);
01607 tclindexname = Tcl_NewStringObj("maxlinkdist",-1);
01608 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01609 if (Tcl_GetIntFromObj(interp,tclobj,&maxlinkdist) == TCL_ERROR) return TCL_ERROR;
01610 } else {
01611 return TCL_ERROR;
01612 }
01613 Tcl_DecrRefCount(tclarrayname);
01614 Tcl_DecrRefCount(tclindexname);
01615
01616
01617
01618 tclarrayname = Tcl_NewStringObj(array,-1);
01619 tclindexname = Tcl_NewStringObj("outlinksname",-1);
01620 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01621 outlinksname = Tcl_GetStringFromObj(tclobj,&strlen);
01622 if (strlen <= 0) return TCL_ERROR;
01623 } else {
01624 return TCL_ERROR;
01625 }
01626 Tcl_DecrRefCount(tclarrayname);
01627 Tcl_DecrRefCount(tclindexname);
01628
01629
01630
01631 tclarrayname = Tcl_NewStringObj(array,-1);
01632 tclindexname = Tcl_NewStringObj("outedgesname",-1);
01633 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01634 outedgesname = Tcl_GetStringFromObj(tclobj,&strlen);
01635 if (strlen <= 0) return TCL_ERROR;
01636 } else {
01637 return TCL_ERROR;
01638 }
01639 Tcl_DecrRefCount(tclarrayname);
01640 Tcl_DecrRefCount(tclindexname);
01641
01642
01643 LINK_DOUBLETHRESH(thresh1, thresh2, maxlinkdist, &outlinks, &outedges);
01644
01645
01646 if (CHECKIMG(outlinks)) sprintf(outlinks->text, "%s", outlinksname);
01647 outlinksaddr = (int) outlinks;
01648 if (CHECKIMG(outedges)) sprintf(outedges->text, "%s", outedgesname);
01649 outedgesaddr = (int) outedges;
01650
01651
01652 sprintf(msg, "%x %x", outlinksaddr, outedgesaddr);
01653 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01654
01655 return TCL_OK;
01656 }
01657
01658
01659
01660
01661
01662
01663
01664
01665
01666
01667
01668
01669
01670
01671
01672
01673
01674
01675 int Sadie_Proto_LinkTreeRingsCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01676 {
01677 Tcl_Obj* tclobj=NULL;
01678 Tcl_Obj* tclarrayname = NULL;
01679 Tcl_Obj* tclindexname = NULL;
01680 char msg[SLEN];
01681 char* array=NULL;
01682 char* tempstr=NULL;
01683 int strlen;
01684 int inputaddr;
01685 IMAGE *inimg=NULL;
01686 int outlinksaddr, outedgesaddr;
01687 IMAGE *outlinks=NULL, *outedges=NULL;
01688 char *outlinksname=NULL, *outedgesname=NULL;
01689 int discardedges;
01690
01691 if( argc != 2 ) {
01692 Tcl_AppendResult(interp,"wrong # args: should be \"",
01693 argv[0], " arrayname\"", (char *) NULL);
01694 return TCL_ERROR;
01695 }
01696 array=argv[1];
01697
01698
01699
01700 tclarrayname = Tcl_NewStringObj(array,-1);
01701 tclindexname = Tcl_NewStringObj("input,addr",-1);
01702 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01703 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01704 if (strlen <= 0) return TCL_ERROR;
01705 sscanf(tempstr,"%x",&inputaddr);
01706 inimg = (IMAGE *) inputaddr;
01707 } else {
01708 return TCL_ERROR;
01709 }
01710 Tcl_DecrRefCount(tclarrayname);
01711 Tcl_DecrRefCount(tclindexname);
01712
01713
01714
01715 tclarrayname = Tcl_NewStringObj(array,-1);
01716 tclindexname = Tcl_NewStringObj("discardedges",-1);
01717 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01718 if (Tcl_GetIntFromObj(interp,tclobj,&discardedges) == TCL_ERROR) return TCL_ERROR;
01719 } else {
01720 return TCL_ERROR;
01721 }
01722 Tcl_DecrRefCount(tclarrayname);
01723 Tcl_DecrRefCount(tclindexname);
01724
01725
01726
01727 tclarrayname = Tcl_NewStringObj(array,-1);
01728 tclindexname = Tcl_NewStringObj("outlinksname",-1);
01729 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01730 outlinksname = Tcl_GetStringFromObj(tclobj,&strlen);
01731 if (strlen <= 0) return TCL_ERROR;
01732 } else {
01733 return TCL_ERROR;
01734 }
01735 Tcl_DecrRefCount(tclarrayname);
01736 Tcl_DecrRefCount(tclindexname);
01737
01738
01739
01740 tclarrayname = Tcl_NewStringObj(array,-1);
01741 tclindexname = Tcl_NewStringObj("outedgesname",-1);
01742 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01743 outedgesname = Tcl_GetStringFromObj(tclobj,&strlen);
01744 if (strlen <= 0) return TCL_ERROR;
01745 } else {
01746 return TCL_ERROR;
01747 }
01748 Tcl_DecrRefCount(tclarrayname);
01749 Tcl_DecrRefCount(tclindexname);
01750
01751
01752 LINK_TREERINGS(inimg, discardedges, &outlinks, &outedges);
01753
01754
01755 if (CHECKIMG(outlinks)) sprintf(outlinks->text, "%s", outlinksname);
01756 outlinksaddr = (int) outlinks;
01757 if (CHECKIMG(outedges)) sprintf(outedges->text, "%s", outedgesname);
01758 outedgesaddr = (int) outedges;
01759
01760
01761 sprintf(msg, "%x %x", outlinksaddr, outedgesaddr);
01762 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01763
01764 return TCL_OK;
01765 }
01766
01767
01768
01769
01770
01771
01772
01773
01774
01775
01776
01777
01778
01779
01780
01781 int Sadie_Proto_Detect_TreeRingsCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01782 {
01783 Tcl_Obj* tclobj=NULL;
01784 Tcl_Obj* tclarrayname = NULL;
01785 Tcl_Obj* tclindexname = NULL;
01786 char msg[SLEN];
01787 char* array=NULL;
01788 char* tempstr=NULL;
01789 int strlen;
01790 int inimgaddr;
01791 IMAGE* inimg=NULL;
01792 int outimgaddr;
01793 IMAGE* outimg=NULL;
01794 char* outname=NULL;
01795
01796 if( argc != 2 ) {
01797 Tcl_AppendResult(interp,"wrong # args: should be \"",
01798 argv[0], " arrayname\"", (char *) NULL);
01799 return TCL_ERROR;
01800 }
01801 array=argv[1];
01802
01803
01804
01805 tclarrayname = Tcl_NewStringObj(array,-1);
01806 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
01807 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01808
01809
01810 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01811 if (strlen <= 0) return TCL_ERROR;
01812 sscanf(tempstr,"%x",&inimgaddr);
01813 inimg = (IMAGE *) inimgaddr;
01814 } else {
01815 return TCL_ERROR;
01816 }
01817 Tcl_DecrRefCount(tclarrayname);
01818 Tcl_DecrRefCount(tclindexname);
01819
01820
01821
01822 tclarrayname = Tcl_NewStringObj(array,-1);
01823 tclindexname = Tcl_NewStringObj("outname",-1);
01824 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01825
01826
01827 outname = Tcl_GetStringFromObj(tclobj,&strlen);
01828 if (strlen <= 0) return TCL_ERROR;
01829 } else {
01830 return TCL_ERROR;
01831 }
01832 Tcl_DecrRefCount(tclarrayname);
01833 Tcl_DecrRefCount(tclindexname);
01834
01835
01836 TREERING_DETECT(inimg, &outimg);
01837
01838 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
01839
01840 outimgaddr = (int) outimg;
01841 sprintf(msg, "%x", outimgaddr);
01842 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01843
01844 return TCL_OK;
01845 }
01846
01847
01848
01849
01850
01851
01852
01853
01854
01855
01856
01857
01858
01859
01860
01861
01862
01863
01864
01865 int Sadie_Proto_RingWidthsCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01866 {
01867 Tcl_Obj* tclobj=NULL;
01868 Tcl_Obj* tclarrayname = NULL;
01869 Tcl_Obj* tclindexname = NULL;
01870 char msg[SLEN];
01871 char* array=NULL;
01872 char* tempstr=NULL;
01873 int strlen;
01874 int inimgaddr, ringsimgaddr, graddirimgaddr;
01875 IMAGE *inimg=NULL, *ringsimg=NULL, *graddirimg=NULL;
01876 int outimgaddr;
01877 IMAGE* outimg=NULL;
01878 char* outname=NULL;
01879
01880 if( argc != 2 ) {
01881 Tcl_AppendResult(interp,"wrong # args: should be \"",
01882 argv[0], " arrayname\"", (char *) NULL);
01883 return TCL_ERROR;
01884 }
01885 array=argv[1];
01886
01887
01888
01889 tclarrayname = Tcl_NewStringObj(array,-1);
01890 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
01891 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01892 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01893 if (strlen <= 0) return TCL_ERROR;
01894 sscanf(tempstr,"%x",&inimgaddr);
01895 inimg = (IMAGE *) inimgaddr;
01896 } else {
01897 return TCL_ERROR;
01898 }
01899 Tcl_DecrRefCount(tclarrayname);
01900 Tcl_DecrRefCount(tclindexname);
01901
01902
01903
01904 tclarrayname = Tcl_NewStringObj(array,-1);
01905 tclindexname = Tcl_NewStringObj("ringsimg,addr",-1);
01906 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01907 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01908 if (strlen <= 0) return TCL_ERROR;
01909 sscanf(tempstr,"%x",&ringsimgaddr);
01910 ringsimg = (IMAGE *) ringsimgaddr;
01911 } else {
01912 return TCL_ERROR;
01913 }
01914 Tcl_DecrRefCount(tclarrayname);
01915 Tcl_DecrRefCount(tclindexname);
01916
01917
01918
01919 tclarrayname = Tcl_NewStringObj(array,-1);
01920 tclindexname = Tcl_NewStringObj("graddirimg,addr",-1);
01921 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01922 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01923 if (strlen <= 0) return TCL_ERROR;
01924 sscanf(tempstr,"%x",&graddirimgaddr);
01925 graddirimg = (IMAGE *) graddirimgaddr;
01926 } else {
01927 return TCL_ERROR;
01928 }
01929 Tcl_DecrRefCount(tclarrayname);
01930 Tcl_DecrRefCount(tclindexname);
01931
01932
01933
01934 tclarrayname = Tcl_NewStringObj(array,-1);
01935 tclindexname = Tcl_NewStringObj("outname",-1);
01936 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01937 outname = Tcl_GetStringFromObj(tclobj,&strlen);
01938 if (strlen <= 0) return TCL_ERROR;
01939 } else {
01940 return TCL_ERROR;
01941 }
01942 Tcl_DecrRefCount(tclarrayname);
01943 Tcl_DecrRefCount(tclindexname);
01944
01945
01946 RINGWIDTHS(inimg, ringsimg, graddirimg, &outimg);
01947
01948
01949 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
01950 outimgaddr = (int) outimg;
01951
01952
01953 sprintf(msg, "%x", outimgaddr);
01954 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01955
01956 return TCL_OK;
01957 }
01958
01959
01960
01961
01962
01963
01964
01965
01966
01967
01968
01969
01970
01971
01972
01973
01974
01975 int Sadie_Proto_RingWidths_NoCheckCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01976 {
01977 Tcl_Obj* tclobj=NULL;
01978 Tcl_Obj* tclarrayname = NULL;
01979 Tcl_Obj* tclindexname = NULL;
01980 char msg[SLEN];
01981 char* array=NULL;
01982 char* tempstr=NULL;
01983 int strlen;
01984 int inimgaddr, ringsimgaddr, graddirimgaddr;
01985 IMAGE *inimg=NULL, *ringsimg=NULL, *graddirimg=NULL;
01986 int outimgaddr;
01987 IMAGE* outimg=NULL;
01988 char* outname=NULL;
01989
01990 if( argc != 2 ) {
01991 Tcl_AppendResult(interp,"wrong # args: should be \"",
01992 argv[0], " arrayname\"", (char *) NULL);
01993 return TCL_ERROR;
01994 }
01995 array=argv[1];
01996
01997
01998
01999 tclarrayname = Tcl_NewStringObj(array,-1);
02000 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
02001 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02002 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
02003 if (strlen <= 0) return TCL_ERROR;
02004 sscanf(tempstr,"%x",&inimgaddr);
02005 inimg = (IMAGE *) inimgaddr;
02006 } else {
02007 return TCL_ERROR;
02008 }
02009 Tcl_DecrRefCount(tclarrayname);
02010 Tcl_DecrRefCount(tclindexname);
02011
02012
02013
02014 tclarrayname = Tcl_NewStringObj(array,-1);
02015 tclindexname = Tcl_NewStringObj("ringsimg,addr",-1);
02016 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02017 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
02018 if (strlen <= 0) return TCL_ERROR;
02019 sscanf(tempstr,"%x",&ringsimgaddr);
02020 ringsimg = (IMAGE *) ringsimgaddr;
02021 } else {
02022 return TCL_ERROR;
02023 }
02024 Tcl_DecrRefCount(tclarrayname);
02025 Tcl_DecrRefCount(tclindexname);
02026
02027
02028
02029 tclarrayname = Tcl_NewStringObj(array,-1);
02030 tclindexname = Tcl_NewStringObj("graddirimg,addr",-1);
02031 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02032 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
02033 if (strlen <= 0) return TCL_ERROR;
02034 sscanf(tempstr,"%x",&graddirimgaddr);
02035 graddirimg = (IMAGE *) graddirimgaddr;
02036 } else {
02037 return TCL_ERROR;
02038 }
02039 Tcl_DecrRefCount(tclarrayname);
02040 Tcl_DecrRefCount(tclindexname);
02041
02042
02043
02044 tclarrayname = Tcl_NewStringObj(array,-1);
02045 tclindexname = Tcl_NewStringObj("outname",-1);
02046 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02047 outname = Tcl_GetStringFromObj(tclobj,&strlen);
02048 if (strlen <= 0) return TCL_ERROR;
02049 } else {
02050 return TCL_ERROR;
02051 }
02052 Tcl_DecrRefCount(tclarrayname);
02053 Tcl_DecrRefCount(tclindexname);
02054
02055
02056 RINGWIDTHS_NOCHECK(inimg, ringsimg, graddirimg, &outimg);
02057
02058
02059 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
02060 outimgaddr = (int) outimg;
02061
02062
02063 sprintf(msg, "%x", outimgaddr);
02064 Tcl_SetResult(interp, msg, TCL_VOLATILE);
02065
02066 return TCL_OK;
02067 }
02068
02069
02070
02071
02072
02073
02074
02075
02076
02077
02078
02079
02080
02081
02082
02083
02084
02085
02086
02087
02088
02089 int Sadie_Proto_RegisterCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
02090 {
02091 Tcl_Obj* tclobj=NULL;
02092 Tcl_Obj* tclarrayname = NULL;
02093 Tcl_Obj* tclindexname = NULL;
02094 char msg[SLEN];
02095 char* array=NULL;
02096 char* tempstr=NULL;
02097 int strlen;
02098 int inimg1addr, inimg2addr;
02099 IMAGE *inimg1=NULL, *inimg2=NULL;
02100 int outtargetaddr, outsearchaddr, outcorraddr, outimgaddr;
02101 IMAGE *outtarget=NULL, *outsearch=NULL, *outcorr=NULL, *outimg=NULL;
02102 char *outtargetname=NULL, *outsearchname=NULL, *outcorrname=NULL, *outimgname=NULL;
02103 int est_x_offset, est_y_offset;
02104
02105 if( argc != 2 ) {
02106 Tcl_AppendResult(interp,"wrong # args: should be \"",
02107 argv[0], " arrayname\"", (char *) NULL);
02108 return TCL_ERROR;
02109 }
02110 array=argv[1];
02111
02112
02113
02114 tclarrayname = Tcl_NewStringObj(array,-1);
02115 tclindexname = Tcl_NewStringObj("inimg1,addr",-1);
02116 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02117 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
02118 if (strlen <= 0) return TCL_ERROR;
02119 sscanf(tempstr,"%x",&inimg1addr);
02120 inimg1 = (IMAGE *) inimg1addr;
02121 } else {
02122 return TCL_ERROR;
02123 }
02124 Tcl_DecrRefCount(tclarrayname);
02125 Tcl_DecrRefCount(tclindexname);
02126
02127
02128
02129 tclarrayname = Tcl_NewStringObj(array,-1);
02130 tclindexname = Tcl_NewStringObj("inimg2,addr",-1);
02131 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02132 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
02133 if (strlen <= 0) return TCL_ERROR;
02134 sscanf(tempstr,"%x",&inimg2addr);
02135 inimg2 = (IMAGE *) inimg2addr;
02136 } else {
02137 return TCL_ERROR;
02138 }
02139 Tcl_DecrRefCount(tclarrayname);
02140 Tcl_DecrRefCount(tclindexname);
02141
02142
02143
02144 tclarrayname = Tcl_NewStringObj(array,-1);
02145 tclindexname = Tcl_NewStringObj("est_x_offset",-1);
02146 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02147 if (Tcl_GetIntFromObj(interp,tclobj,&est_x_offset) == TCL_ERROR) return TCL_ERROR;
02148 } else {
02149 return TCL_ERROR;
02150 }
02151 Tcl_DecrRefCount(tclarrayname);
02152 Tcl_DecrRefCount(tclindexname);
02153
02154
02155
02156 tclarrayname = Tcl_NewStringObj(array,-1);
02157 tclindexname = Tcl_NewStringObj("est_y_offset",-1);
02158 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02159 if (Tcl_GetIntFromObj(interp,tclobj,&est_y_offset) == TCL_ERROR) return TCL_ERROR;
02160 } else {
02161 return TCL_ERROR;
02162 }
02163 Tcl_DecrRefCount(tclarrayname);
02164 Tcl_DecrRefCount(tclindexname);
02165
02166
02167
02168 tclarrayname = Tcl_NewStringObj(array,-1);
02169 tclindexname = Tcl_NewStringObj("outtargetname",-1);
02170 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02171 outtargetname = Tcl_GetStringFromObj(tclobj,&strlen);
02172 if (strlen <= 0) return TCL_ERROR;
02173 } else {
02174 return TCL_ERROR;
02175 }
02176 Tcl_DecrRefCount(tclarrayname);
02177 Tcl_DecrRefCount(tclindexname);
02178
02179
02180
02181 tclarrayname = Tcl_NewStringObj(array,-1);
02182 tclindexname = Tcl_NewStringObj("outsearchname",-1);
02183 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02184 outsearchname = Tcl_GetStringFromObj(tclobj,&strlen);
02185 if (strlen <= 0) return TCL_ERROR;
02186 } else {
02187 return TCL_ERROR;
02188 }
02189 Tcl_DecrRefCount(tclarrayname);
02190 Tcl_DecrRefCount(tclindexname);
02191
02192
02193
02194 tclarrayname = Tcl_NewStringObj(array,-1);
02195 tclindexname = Tcl_NewStringObj("outcorrname",-1);
02196 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02197 outcorrname = Tcl_GetStringFromObj(tclobj,&strlen);
02198 if (strlen <= 0) return TCL_ERROR;
02199 } else {
02200 return TCL_ERROR;
02201 }
02202 Tcl_DecrRefCount(tclarrayname);
02203 Tcl_DecrRefCount(tclindexname);
02204
02205
02206
02207 tclarrayname = Tcl_NewStringObj(array,-1);
02208 tclindexname = Tcl_NewStringObj("outimgname",-1);
02209 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02210 outimgname = Tcl_GetStringFromObj(tclobj,&strlen);
02211 if (strlen <= 0) return TCL_ERROR;
02212 } else {
02213 return TCL_ERROR;
02214 }
02215 Tcl_DecrRefCount(tclarrayname);
02216 Tcl_DecrRefCount(tclindexname);
02217
02218
02219 REGISTER(inimg1, inimg2, est_x_offset, est_y_offset, &outtarget, &outsearch, &outcorr, &outimg);
02220
02221
02222 if (CHECKIMG(outtarget)) sprintf(outtarget->text, "%s", outtargetname);
02223 outtargetaddr = (int) outtarget;
02224 if (CHECKIMG(outsearch)) sprintf(outsearch->text, "%s", outsearchname);
02225 outsearchaddr = (int) outsearch;
02226 if (CHECKIMG(outcorr)) sprintf(outcorr->text, "%s", outcorrname);
02227 outcorraddr = (int) outcorr;
02228 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outimgname);
02229 outimgaddr = (int) outimg;
02230
02231
02232 sprintf(msg, "%x %x %x %x", outtargetaddr, outsearchaddr, outcorraddr, outimgaddr);
02233 Tcl_SetResult(interp, msg, TCL_VOLATILE);
02234
02235 return TCL_OK;
02236 }
02237
02238
02239
02240
02241
02242
02243
02244
02245
02246
02247
02248
02249
02250
02251
02252
02253
02254 int Sadie_Proto_FindRegisterCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
02255 {
02256 Tcl_Obj* tclobj=NULL;
02257 Tcl_Obj* tclarrayname = NULL;
02258 Tcl_Obj* tclindexname = NULL;
02259 char msg[SLEN];
02260 char* array=NULL;
02261 char* tempstr=NULL;
02262 int strlen;
02263 int inimg1addr, inimg2addr;
02264 IMAGE *inimg1=NULL, *inimg2=NULL;
02265 int est_x_offset, est_y_offset;
02266 int x_offset, y_offset;
02267 PIXEL bias_adj, gain_adj;
02268
02269 if( argc != 2 ) {
02270 Tcl_AppendResult(interp,"wrong # args: should be \"",
02271 argv[0], " arrayname\"", (char *) NULL);
02272 return TCL_ERROR;
02273 }
02274 array=argv[1];
02275
02276
02277
02278 tclarrayname = Tcl_NewStringObj(array,-1);
02279 tclindexname = Tcl_NewStringObj("inimg1,addr",-1);
02280 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02281 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
02282 if (strlen <= 0) return TCL_ERROR;
02283 sscanf(tempstr,"%x",&inimg1addr);
02284 inimg1 = (IMAGE *) inimg1addr;
02285 } else {
02286 return TCL_ERROR;
02287 }
02288 Tcl_DecrRefCount(tclarrayname);
02289 Tcl_DecrRefCount(tclindexname);
02290
02291
02292
02293 tclarrayname = Tcl_NewStringObj(array,-1);
02294 tclindexname = Tcl_NewStringObj("inimg2,addr",-1);
02295 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02296 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
02297 if (strlen <= 0) return TCL_ERROR;
02298 sscanf(tempstr,"%x",&inimg2addr);
02299 inimg2 = (IMAGE *) inimg2addr;
02300 } else {
02301 return TCL_ERROR;
02302 }
02303 Tcl_DecrRefCount(tclarrayname);
02304 Tcl_DecrRefCount(tclindexname);
02305
02306
02307
02308 tclarrayname = Tcl_NewStringObj(array,-1);
02309 tclindexname = Tcl_NewStringObj("est_x_offset",-1);
02310 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02311 if (Tcl_GetIntFromObj(interp,tclobj,&est_x_offset) == TCL_ERROR) return TCL_ERROR;
02312 } else {
02313 return TCL_ERROR;
02314 }
02315 Tcl_DecrRefCount(tclarrayname);
02316 Tcl_DecrRefCount(tclindexname);
02317
02318
02319
02320 tclarrayname = Tcl_NewStringObj(array,-1);
02321 tclindexname = Tcl_NewStringObj("est_y_offset",-1);
02322 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02323 if (Tcl_GetIntFromObj(interp,tclobj,&est_y_offset) == TCL_ERROR) return TCL_ERROR;
02324 } else {
02325 return TCL_ERROR;
02326 }
02327 Tcl_DecrRefCount(tclarrayname);
02328 Tcl_DecrRefCount(tclindexname);
02329
02330
02331 FIND_REGISTER(inimg1, inimg2, est_x_offset, est_y_offset, &x_offset, &y_offset, &bias_adj, &gain_adj);
02332
02333 sprintf(msg, "%d %d %f %f", x_offset, y_offset, bias_adj, gain_adj);
02334 Tcl_SetResult(interp, msg, TCL_VOLATILE);
02335
02336 return TCL_OK;
02337 }
02338
02339
02340
02341
02342
02343
02344
02345
02346
02347
02348
02349
02350
02351
02352
02353
02354
02355
02356
02357
02358
02359
02360
02361 int Sadie_Proto_CreateMosaicCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
02362 {
02363 Tcl_Obj* tclobj=NULL;
02364 Tcl_Obj* tclarrayname = NULL;
02365 Tcl_Obj* tclindexname = NULL;
02366 char msg[SLEN];
02367 char* array=NULL;
02368 char* tempstr=NULL;
02369 int strlen;
02370 int i;
02371 char* imgname[200];
02372 int width, height, nimg;
02373 int yoffset[200], xoffset[200];
02374 PIXEL gain[200], bias[200];
02375 PIXEL fillvalue;
02376 double tempdouble;
02377 int outimgaddr;
02378 IMAGE* outimg=NULL;
02379 char* outname=NULL;
02380
02381 if( argc != 2 ) {
02382 Tcl_AppendResult(interp,"wrong # args: should be \"",
02383 argv[0], " arrayname\"", (char *) NULL);
02384 return TCL_ERROR;
02385 }
02386 array=argv[1];
02387
02388
02389
02390 tclarrayname = Tcl_NewStringObj(array,-1);
02391 tclindexname = Tcl_NewStringObj("nimg",-1);
02392 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02393 if (Tcl_GetIntFromObj(interp,tclobj,&nimg) == TCL_ERROR) return TCL_ERROR;
02394 } else {
02395 return TCL_ERROR;
02396 }
02397 Tcl_DecrRefCount(tclarrayname);
02398 Tcl_DecrRefCount(tclindexname);
02399
02400
02401 tclarrayname = Tcl_NewStringObj(array,-1);
02402 tclindexname = Tcl_NewStringObj("height",-1);
02403 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02404 if (Tcl_GetIntFromObj(interp,tclobj,&height) == TCL_ERROR) return TCL_ERROR;
02405 } else {
02406 return TCL_ERROR;
02407 }
02408 Tcl_DecrRefCount(tclarrayname);
02409 Tcl_DecrRefCount(tclindexname);
02410
02411
02412 tclarrayname = Tcl_NewStringObj(array,-1);
02413 tclindexname = Tcl_NewStringObj("width",-1);
02414 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02415 if (Tcl_GetIntFromObj(interp,tclobj,&width) == TCL_ERROR) return TCL_ERROR;
02416 } else {
02417 return TCL_ERROR;
02418 }
02419 Tcl_DecrRefCount(tclarrayname);
02420 Tcl_DecrRefCount(tclindexname);
02421
02422
02423
02424 for (i=0; i<nimg; i++) {
02425
02426 tclarrayname = Tcl_NewStringObj(array,-1);
02427 sprintf(msg,"imgname,%d",i+1);
02428 tclindexname = Tcl_NewStringObj(msg,-1);
02429 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02430 imgname[i] = Tcl_GetStringFromObj(tclobj,&strlen);
02431 if (strlen <= 0) return TCL_ERROR;
02432 } else {
02433 return TCL_ERROR;
02434 }
02435 Tcl_DecrRefCount(tclarrayname);
02436 Tcl_DecrRefCount(tclindexname);
02437
02438
02439 tclarrayname = Tcl_NewStringObj(array,-1);
02440 sprintf(msg,"xoffset,%d",i+1);
02441 tclindexname = Tcl_NewStringObj(msg,-1);
02442 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02443 if (Tcl_GetIntFromObj(interp,tclobj,&xoffset[i]) == TCL_ERROR) return TCL_ERROR;
02444 } else {
02445 return TCL_ERROR;
02446 }
02447 Tcl_DecrRefCount(tclarrayname);
02448 Tcl_DecrRefCount(tclindexname);
02449
02450
02451 tclarrayname = Tcl_NewStringObj(array,-1);
02452 sprintf(msg,"yoffset,%d",i+1);
02453 tclindexname = Tcl_NewStringObj(msg,-1);
02454 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02455 if (Tcl_GetIntFromObj(interp,tclobj,&yoffset[i]) == TCL_ERROR) return TCL_ERROR;
02456 } else {
02457 return TCL_ERROR;
02458 }
02459 Tcl_DecrRefCount(tclarrayname);
02460 Tcl_DecrRefCount(tclindexname);
02461
02462
02463 tclarrayname = Tcl_NewStringObj(array,-1);
02464 sprintf(msg,"gain,%d",i+1);
02465 tclindexname = Tcl_NewStringObj(msg,-1);
02466 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02467 if (Tcl_GetDoubleFromObj(interp,tclobj,&tempdouble) == TCL_ERROR) return TCL_ERROR;
02468 gain[i] = (PIXEL) tempdouble;
02469 } else {
02470 return TCL_ERROR;
02471 }
02472 Tcl_DecrRefCount(tclarrayname);
02473 Tcl_DecrRefCount(tclindexname);
02474
02475
02476 tclarrayname = Tcl_NewStringObj(array,-1);
02477 sprintf(msg,"bias,%d",i+1);
02478 tclindexname = Tcl_NewStringObj(msg,-1);
02479 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02480 if (Tcl_GetDoubleFromObj(interp,tclobj,&tempdouble) == TCL_ERROR) return TCL_ERROR;
02481 bias[i] = (PIXEL) tempdouble;
02482 } else {
02483 return TCL_ERROR;
02484 }
02485 Tcl_DecrRefCount(tclarrayname);
02486 Tcl_DecrRefCount(tclindexname);
02487 }
02488
02489
02490 tclarrayname = Tcl_NewStringObj(array,-1);
02491 tclindexname = Tcl_NewStringObj("outname",-1);
02492 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02493 outname = Tcl_GetStringFromObj(tclobj,&strlen);
02494 if (strlen <= 0) return TCL_ERROR;
02495 } else {
02496 return TCL_ERROR;
02497 }
02498 Tcl_DecrRefCount(tclarrayname);
02499 Tcl_DecrRefCount(tclindexname);
02500
02501
02502 CREATEMOSAIC((char **)imgname,nimg,height,width,(int *)xoffset,(int *)yoffset,(PIXEL *)bias,(PIXEL *)gain,fillvalue,(IMAGE **)&outimg);
02503
02504
02505 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
02506 outimgaddr = (int) outimg;
02507
02508
02509 sprintf(msg, "%x", outimgaddr);
02510 Tcl_SetResult(interp, msg, TCL_VOLATILE);
02511
02512 return TCL_OK;
02513 }
02514
02515
02516
02517
02518
02519
02520
02521
02522
02523
02524
02525
02526
02527
02528 int Sadie_Proto_FindCenterCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
02529 {
02530 Tcl_Obj* tclobj=NULL;
02531 Tcl_Obj* tclarrayname = NULL;
02532 Tcl_Obj* tclindexname = NULL;
02533 char msg[SLEN];
02534 char* array=NULL;
02535 char* tempstr=NULL;
02536 int strlen;
02537 int inimgaddr;
02538 IMAGE* inimg=NULL;
02539
02540 if( argc != 2 ) {
02541 Tcl_AppendResult(interp,"wrong # args: should be \"",
02542 argv[0], " arrayname\"", (char *) NULL);
02543 return TCL_ERROR;
02544 }
02545 array=argv[1];
02546
02547
02548 tclarrayname = Tcl_NewStringObj(array,-1);
02549 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
02550 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname, tclindexname, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02551 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
02552 if (strlen <= 0) return TCL_ERROR;
02553 sscanf(tempstr,"%x",&inimgaddr);
02554 inimg = (IMAGE *) inimgaddr;
02555 } else {
02556 return TCL_ERROR;
02557 }
02558 Tcl_DecrRefCount(tclarrayname);
02559 Tcl_DecrRefCount(tclindexname);
02560
02561 FINDCENTER(inimg);
02562
02563 return TCL_OK;
02564 }
02565
02566
02567
02568
02569
02570
02571
02572
02573
02574
02575
02576
02577
02578
02579
02580
02581
02582 int Sadie_Proto_SetMeanCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
02583 {
02584 Tcl_Obj* tclobj=NULL;
02585 Tcl_Obj* tclarrayname = NULL;
02586 Tcl_Obj* tclindexname = NULL;
02587 char msg[SLEN];
02588 char* array=NULL;
02589 char* tempstr=NULL;
02590 int strlen;
02591 int inimgaddr;
02592 IMAGE* inimg=NULL;
02593 int outimgaddr;
02594 IMAGE* outimg=NULL;
02595 char* outname=NULL;
02596 double mean;
02597
02598 if( argc != 2 ) {
02599 Tcl_AppendResult(interp,"wrong # args: should be \"",
02600 argv[0], " arrayname\"", (char *) NULL);
02601 return TCL_ERROR;
02602 }
02603 array=argv[1];
02604
02605
02606
02607 tclarrayname = Tcl_NewStringObj(array,-1);
02608 tclindexname = Tcl_NewStringObj("inimg,addr",-1);
02609 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02610 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
02611 if (strlen <= 0) return TCL_ERROR;
02612 sscanf(tempstr,"%x",&inimgaddr);
02613 inimg = (IMAGE *) inimgaddr;
02614 } else {
02615 return TCL_ERROR;
02616 }
02617 Tcl_DecrRefCount(tclarrayname);
02618 Tcl_DecrRefCount(tclindexname);
02619
02620
02621
02622 tclarrayname = Tcl_NewStringObj(array,-1);
02623 tclindexname = Tcl_NewStringObj("mean",-1);
02624 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02625 if (Tcl_GetDoubleFromObj(interp,tclobj,&mean) == TCL_ERROR) return TCL_ERROR;
02626 } else {
02627 return TCL_ERROR;
02628 }
02629 Tcl_DecrRefCount(tclarrayname);
02630 Tcl_DecrRefCount(tclindexname);
02631
02632
02633
02634 tclarrayname = Tcl_NewStringObj(array,-1);
02635 tclindexname = Tcl_NewStringObj("outname",-1);
02636 if (tclobj = Tcl_ObjGetVar2(interp, tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
02637 outname = Tcl_GetStringFromObj(tclobj,&strlen);
02638 if (strlen <= 0) return TCL_ERROR;
02639 } else {
02640 return TCL_ERROR;
02641 }
02642 Tcl_DecrRefCount(tclarrayname);
02643 Tcl_DecrRefCount(tclindexname);
02644
02645
02646 SETMEAN(inimg, (PIXEL)mean, &outimg);
02647
02648
02649 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
02650 outimgaddr = (int) outimg;
02651
02652
02653 sprintf(msg, "%x", outimgaddr);
02654 Tcl_SetResult(interp, msg, TCL_VOLATILE);
02655
02656 return TCL_OK;
02657 }
02658
02659
02660
02661
02662
02663
02664
02665
02666
02667
02668
02669 int Sadie_Proto_Init(Tcl_Interp *interp) {
02670 Tcl_CreateCommand(interp, "Sadie_Proto_Img2Ascii", Sadie_Proto_Img2AsciiCmd,
02671 (ClientData) NULL, NULL);
02672 Tcl_CreateCommand(interp, "Sadie_Proto_BinGrid", Sadie_Proto_BinGridCmd,
02673 (ClientData) NULL, NULL);
02674
02675 Tcl_CreateCommand(interp, "Sadie_Proto_Sector", Sadie_Proto_SectorCmd,
02676 (ClientData) NULL, NULL);
02677 Tcl_CreateCommand(interp, "Sadie_Proto_Sector8", Sadie_Proto_Sector8Cmd,
02678 (ClientData) NULL, NULL);
02679 Tcl_CreateCommand(interp, "Sadie_Proto_Isolate", Sadie_Proto_IsolateCmd,
02680 (ClientData) NULL, NULL);
02681 Tcl_CreateCommand(interp, "Sadie_Proto_SizeThresh", Sadie_Proto_SizeThreshCmd,
02682 (ClientData) NULL, NULL);
02683
02684 Tcl_CreateCommand(interp, "Sadie_Proto_CreateGauss", Sadie_Proto_CreateGaussCmd,
02685 (ClientData) NULL, NULL);
02686 Tcl_CreateCommand(interp, "Sadie_Proto_NonMaxSuppressX", Sadie_Proto_NonMaxSuppressXCmd,
02687 (ClientData) NULL, NULL);
02688 Tcl_CreateCommand(interp, "Sadie_Proto_Canny", Sadie_Proto_CannyCmd,
02689 (ClientData) NULL, NULL);
02690 Tcl_CreateCommand(interp, "Sadie_Proto_ColorOverlay", Sadie_Proto_ColorOverlayCmd,
02691 (ClientData) NULL, NULL);
02692
02693 Tcl_CreateCommand(interp, "Sadie_Proto_CCL8", Sadie_Proto_CCL8Cmd,
02694 (ClientData) NULL, NULL);
02695 Tcl_CreateCommand(interp, "Sadie_Proto_ChainCode", Sadie_Proto_ChainCodeCmd,
02696 (ClientData) NULL, NULL);
02697 Tcl_CreateCommand(interp, "Sadie_Proto_FourierDesc", Sadie_Proto_FourierDescCmd,
02698 (ClientData) NULL, NULL);
02699
02700 Tcl_CreateCommand(interp, "Sadie_Proto_Hough", Sadie_Proto_HoughCmd,
02701 (ClientData) NULL, NULL);
02702
02703 Tcl_CreateCommand(interp, "Sadie_Proto_Periodogram", Sadie_Proto_PeriodogramCmd,
02704 (ClientData) NULL, NULL);
02705 Tcl_CreateCommand(interp, "Sadie_Proto_FindBestFocus", Sadie_Proto_FindBestFocusCmd,
02706 (ClientData) NULL, NULL);
02707
02708 Tcl_CreateCommand(interp, "Sadie_Proto_TreeRing", Sadie_Proto_TreeRingCmd,
02709 (ClientData) NULL, NULL);
02710
02711 Tcl_CreateCommand(interp, "Sadie_Proto_LinkTreeRings", Sadie_Proto_LinkTreeRingsCmd,
02712 (ClientData) NULL, NULL);
02713 Tcl_CreateCommand(interp, "Sadie_Proto_LinkDoubleThresh", Sadie_Proto_LinkDoubleThreshCmd,
02714 (ClientData) NULL, NULL);
02715
02716 Tcl_CreateCommand(interp, "Sadie_Proto_Detect_TreeRings", Sadie_Proto_Detect_TreeRingsCmd,
02717 (ClientData) NULL, NULL);
02718 Tcl_CreateCommand(interp, "Sadie_Proto_RingWidths", Sadie_Proto_RingWidthsCmd,
02719 (ClientData) NULL, NULL);
02720 Tcl_CreateCommand(interp, "Sadie_Proto_RingWidths_NoCheck", Sadie_Proto_RingWidths_NoCheckCmd,
02721 (ClientData) NULL, NULL);
02722
02723 Tcl_CreateCommand(interp, "Sadie_Proto_Register", Sadie_Proto_RegisterCmd,
02724 (ClientData) NULL, NULL);
02725 Tcl_CreateCommand(interp, "Sadie_Proto_FindRegister", Sadie_Proto_FindRegisterCmd,
02726 (ClientData) NULL, NULL);
02727
02728 Tcl_CreateCommand(interp, "Sadie_Proto_CreateMosaic", Sadie_Proto_CreateMosaicCmd,
02729 (ClientData) NULL, NULL);
02730
02731
02732 Tcl_CreateCommand(interp, "Sadie_Proto_FindCenter", Sadie_Proto_FindCenterCmd,
02733 (ClientData) NULL, NULL);
02734 Tcl_CreateCommand(interp, "Sadie_Proto_SetMean", Sadie_Proto_SetMeanCmd,
02735 (ClientData) NULL, NULL);
02736
02737 return TCL_OK;
02738 }
02739