00001
00002
00003
00004
00005
00006
00007 #ifndef _AFNI_PLUGIN_HEADER_
00008 #define _AFNI_PLUGIN_HEADER_
00009
00010
00011
00012
00013
00014
00015 #define PLUTO_X11_display (GLOBAL_library.dc->display)
00016 #define PLUTO_Xt_appcontext (GLOBAL_library.dc->appcontext)
00017
00018 #ifdef ALLOW_PLUGINS
00019
00020 #if defined(__cplusplus) || defined(c_plusplus)
00021 # define DEFINE_PLUGIN_PROTOTYPE \
00022 extern "C" { PLUGIN_interface * PLUGIN_init( int ncall ) ; }
00023 #else
00024 # define DEFINE_PLUGIN_PROTOTYPE
00025 #endif
00026
00027
00028 #include <sys/types.h>
00029 #include <stdio.h>
00030 #include <stdlib.h>
00031 #include <string.h>
00032 #include <math.h>
00033 #include <sys/time.h>
00034 #include <sys/errno.h>
00035 #include <sys/times.h>
00036 #include <limits.h>
00037
00038 struct AFNI_plugin_array ;
00039
00040 #include "afni.h"
00041
00042 #include <Xm/XmAll.h>
00043
00044
00045
00046
00047
00048
00049
00050
00051 typedef int int_func() ;
00052 typedef void * vptr_func() ;
00053 typedef char * cptr_func() ;
00054
00055
00056
00057 #ifdef DYNAMIC_LOADING_VIA_DL
00058
00059 #ifndef DARWIN
00060 # include <dlfcn.h>
00061 #else
00062 # include "dlcompat/dlfcn.h"
00063 #endif
00064
00065 typedef void * DYNAMIC_handle ;
00066
00067 # define ISVALID_DYNAMIC_handle(handle) ((handle) != (DYNAMIC_handle) 0)
00068
00069 # define DYNAMIC_OPEN(libname,handle) \
00070 (handle) = dlopen( (libname) , RTLD_LAZY )
00071
00072 # define DYNAMIC_ERROR_STRING dlerror()
00073
00074 # define DYNAMIC_CLOSE(handle) \
00075 (void) dlclose( (handle) )
00076
00077 # define DYNAMIC_SYMBOL(handle,symbol,address) \
00078 (address) = dlsym( (handle) , (symbol) )
00079
00080 # define DYNAMIC_suffix ".so"
00081 #endif
00082
00083
00084
00085 #ifdef DYNAMIC_LOADING_VIA_SHL
00086 # include <dl.h>
00087 # include <errno.h>
00088
00089 typedef shl_t DYNAMIC_handle ;
00090
00091 # define ISVALID_DYNAMIC_handle(handle) ((handle) != (DYNAMIC_handle) 0)
00092
00093 # define DYNAMIC_OPEN(libname,handle) \
00094 (handle) = shl_load( (libname) , BIND_DEFERRED , 0L )
00095
00096 # define DYNAMIC_ERROR_STRING strerror(errno)
00097
00098 # define DYNAMIC_CLOSE(handle) \
00099 (void) shl_unload( (handle) )
00100
00101 # define DYNAMIC_SYMBOL(handle,symbol,address) \
00102 do{ (address) = NULL ; \
00103 (void) shl_findsym( &(handle) , (symbol) , \
00104 TYPE_UNDEFINED , &(address) ) ; } while(0)
00105
00106 # define DYNAMIC_suffix ".sl"
00107 #endif
00108
00109 #ifdef NO_DYNAMIC_LOADING
00110 # define DYNAMIC_suffix ".fixed"
00111 typedef int DYNAMIC_handle ;
00112 #endif
00113
00114 #ifndef DYNAMIC_suffix
00115 # error "Plugins not properly set up -- see machdep.h"
00116 #endif
00117
00118
00119
00120
00121
00122
00123
00124 #define PLUGIN_LABEL_SIZE 32
00125 #define PLUGIN_STRING_SIZE 64
00126
00127 #if 1
00128 #define PLUGIN_MAX_STRING_RANGE 99
00129 #else
00130 #define PLUGIN_MAX_STRING_RANGE 34
00131 #endif
00132
00133 #define PLUGIN_MAX_SUBVALUES 7
00134
00135
00136
00137
00138 #define PLUGIN_NOTHING_TYPE 0
00139 #define PLUGIN_NUMBER_TYPE 1
00140 #define PLUGIN_STRING_TYPE 2
00141 #define PLUGIN_DATASET_TYPE 3
00142 #define PLUGIN_DATASET_LIST_TYPE 4
00143 #define PLUGIN_TIMESERIES_TYPE 5
00144 #define PLUGIN_TIMESERIES_LIST_TYPE 6
00145 #define PLUGIN_2DIMAGE_TYPE 7
00146 #define PLUGIN_2DIMAGE_LIST_TYPE 8
00147 #define PLUGIN_3DIMAGE_TYPE 9
00148 #define PLUGIN_3DIMAGE_LIST_TYPE 10
00149 #define PLUGIN_4DIMAGE_TYPE 11
00150 #define PLUGIN_4DIMAGE_LIST_TYPE 12
00151 #define PLUGIN_OVERLAY_COLOR_TYPE 13
00152
00153
00154
00155
00156 #define PLUGIN_LABEL_strcpy(plab,str) \
00157 do{ int ll=strlen((str)) , ii ; \
00158 if( ll >= PLUGIN_LABEL_SIZE ) ll = PLUGIN_LABEL_SIZE - 1 ; \
00159 for( ii=0 ; ii < ll ; ii++ ) (plab)[ii] = (str)[ii] ; \
00160 for( ; ii < PLUGIN_LABEL_SIZE - 1 ; ii++ ) (plab)[ii] = ' ' ; \
00161 plab[PLUGIN_LABEL_SIZE - 1] = '\0' ; } while(0)
00162
00163
00164
00165
00166 extern int PLUG_nonblank_len(char *) ;
00167
00168
00169
00170
00171 typedef struct {
00172 int data_type ;
00173
00174 char label[PLUGIN_LABEL_SIZE] ;
00175 char * hint ;
00176
00177
00178
00179 int int_range_bot , int_range_top , int_range_decim ;
00180
00181 int string_range_count ;
00182 char * string_range[PLUGIN_MAX_STRING_RANGE] ;
00183
00184 int dset_anat_mask , dset_func_mask , dset_ctrl_mask ;
00185
00186
00187
00188 int value_default ;
00189
00190
00191
00192 int editable ;
00193
00194 } PLUGIN_subvalue ;
00195
00196
00197
00198
00199 typedef struct {
00200 char label[PLUGIN_LABEL_SIZE] ;
00201 char tag[PLUGIN_STRING_SIZE] ;
00202 char * hint ;
00203
00204 int subvalue_count ;
00205 PLUGIN_subvalue subvalue[PLUGIN_MAX_SUBVALUES] ;
00206
00207 int mandatory ;
00208
00209 int chosen ;
00210 void * callvalue[PLUGIN_MAX_SUBVALUES] ;
00211 } PLUGIN_option ;
00212
00213
00214
00215
00216 #define OP_CHOOSER_NONE 0
00217 #define OP_CHOOSER_DSET 1
00218 #define OP_CHOOSER_OPTMENU 2
00219 #define OP_CHOOSER_STRING 3
00220 #define OP_CHOOSER_NUMBER 4
00221 #define OP_CHOOSER_TEXTFIELD 5
00222 #define OP_CHOOSER_TIMESERIES 6
00223 #define OP_CHOOSER_COLORMENU 7
00224
00225 #define OP_OPTMENU_LIMIT 99
00226 #define OP_OPTMENU_COLSIZE 20
00227
00228 typedef struct {
00229 Widget rowcol , label , textf ;
00230 } PLUGIN_strval ;
00231
00232 typedef struct {
00233 char title[THD_MAX_NAME] ;
00234 MCW_idcode idcode ;
00235 } PLUGIN_dataset_link ;
00236
00237 extern void make_PLUGIN_dataset_link( THD_3dim_dataset *, PLUGIN_dataset_link * ) ;
00238 extern void patch_PLUGIN_dataset_links( int , PLUGIN_dataset_link * ) ;
00239
00240 typedef struct {
00241 Widget rowcol , label , pb ;
00242
00243 int dset_count ;
00244 PLUGIN_dataset_link * dset_link ;
00245 PLUGIN_subvalue * sv ;
00246
00247 int dset_choice ;
00248
00249 int multi , nchosen , * chosen ;
00250 int current ;
00251 MCW_idcode * idclist ;
00252 } PLUGIN_dsetval ;
00253
00254 typedef PLUGIN_dsetval MCW_idclist ;
00255
00256 typedef struct {
00257 Widget rowcol , label , pb ;
00258
00259 MRI_IMARR * tsimar ;
00260 PLUGIN_subvalue * sv ;
00261
00262 MRI_IMAGE * tsim ;
00263 int ts_choice ;
00264 } PLUGIN_tsval ;
00265
00266 typedef struct {
00267 Widget toggle , label ;
00268 void * chooser[PLUGIN_MAX_SUBVALUES] ;
00269 Widget chtop[PLUGIN_MAX_SUBVALUES] ;
00270 int chooser_type[PLUGIN_MAX_SUBVALUES] ;
00271 } PLUGIN_option_widgets ;
00272
00273
00274
00275
00276 typedef struct {
00277 Widget shell , form , label , scrollw , workwin ;
00278 PLUGIN_option_widgets ** opwid ;
00279 Widget meter ;
00280 } PLUGIN_widgets ;
00281
00282
00283
00284
00285 #define PLUGIN_CALL_IMMEDIATELY 77
00286 #define PLUGIN_CALL_VIA_MENU 88
00287 #define PLUGIN_CALL_VIA_CUSTOM 99
00288
00289 typedef struct PLUGIN_interface {
00290 char label[PLUGIN_LABEL_SIZE] ;
00291 char description[PLUGIN_STRING_SIZE] ;
00292 char * helpstring ;
00293 char * hint ;
00294
00295 int call_method ;
00296 cptr_func * call_func ;
00297
00298 int option_count ;
00299 PLUGIN_option ** option ;
00300 PLUGIN_widgets * wid ;
00301
00302 Three_D_View * im3d ;
00303
00304 int opnum , svnum ;
00305
00306 char seqcode[PLUGIN_STRING_SIZE] ;
00307 char butcolor[PLUGIN_STRING_SIZE] ;
00308
00309 int flags ;
00310
00311 char run_label [PLUGIN_LABEL_SIZE] ;
00312 char doit_label[PLUGIN_LABEL_SIZE] ;
00313 } PLUGIN_interface ;
00314
00315 #define SHORT_CHOOSE_FLAG 1
00316 #define SHORT_NUMBER_FLAG 2
00317
00318 #define PLUTO_short_choose(pl) (pl->flags |= SHORT_CHOOSE_FLAG)
00319 #define PLUTO_short_number(pl) (pl->flags |= SHORT_NUMBER_FLAG)
00320
00321
00322
00323 #define SESSION_ALL_MASK (1<<0)
00324
00325 #define ANAT_NONE_MASK 0
00326 #define FUNC_NONE_MASK 0
00327
00328 #define DIMEN_3D_MASK (1<<1)
00329 #define DIMEN_4D_MASK (1<<2)
00330 #define DIMEN_ALL_MASK (DIMEN_3D_MASK | DIMEN_4D_MASK)
00331
00332 #define WARP_ON_DEMAND_MASK (1<<3)
00333
00334 #define BRICK_BYTE_MASK (1<<8)
00335 #define BRICK_SHORT_MASK (1<<9)
00336 #define BRICK_FLOAT_MASK (1<<10)
00337 #define BRICK_COMPLEX_MASK (1<<11)
00338 #define BRICK_RGB_MASK (1<<12)
00339 #define BRICK_ALLTYPE_MASK ( BRICK_BYTE_MASK | BRICK_SHORT_MASK | \
00340 BRICK_FLOAT_MASK | BRICK_COMPLEX_MASK | \
00341 BRICK_RGB_MASK )
00342
00343 #define BRICK_ALLREAL_MASK ( BRICK_BYTE_MASK | BRICK_SHORT_MASK | \
00344 BRICK_FLOAT_MASK )
00345
00346 extern int PLUGIN_dset_check( int,int , THD_3dim_dataset * ) ;
00347 extern int PLUTO_dset_check ( int,int,int, THD_3dim_dataset * ) ;
00348
00349 #define PLUTO_add_option add_option_to_PLUGIN_interface
00350 #define PLUTO_add_number add_number_to_PLUGIN_interface
00351 #define PLUTO_add_string add_string_to_PLUGIN_interface
00352 #define PLUTO_add_dataset add_dataset_to_PLUGIN_interface
00353 #define PLUTO_add_timeseries add_timeseries_to_PLUGIN_interface
00354 #define PLUTO_add_dataset_list add_dataset_list_to_PLUGIN_interface
00355 #define PLUTO_add_overlaycolor add_overlaycolor_to_PLUGIN_interface
00356
00357 #define PLUTO_register_environment_numeric ENV_add_numeric
00358 #define PLUTO_register_environment_string ENV_add_string
00359 #define PLUTO_register_environment_yesno ENV_add_yesno
00360
00361 extern void PLUTO_add_hint( PLUGIN_interface * , char * ) ;
00362
00363 extern void PLUTO_set_sequence( PLUGIN_interface *, char * ) ;
00364 extern void PLUTO_set_butcolor( PLUGIN_interface *, char * ) ;
00365
00366
00367
00368 #define PLUTO_new_interface(a,b,c,d,e) new_PLUGIN_interface_1999(a,b,c,d,e,__DATE__)
00369
00370 extern PLUGIN_interface * new_PLUGIN_interface( char *, char *, char *,
00371 int, cptr_func * ) ;
00372
00373 extern PLUGIN_interface * new_PLUGIN_interface_1999( char *, char *, char *,
00374 int, cptr_func * , char * ) ;
00375
00376 void PLUTO_set_runlabels( PLUGIN_interface *, char *, char * ) ;
00377
00378 extern void add_option_to_PLUGIN_interface( PLUGIN_interface *,
00379 char *, char *, int ) ;
00380
00381 extern void add_number_to_PLUGIN_interface( PLUGIN_interface *, char *,
00382 int, int, int, int, int ) ;
00383
00384 extern void add_string_to_PLUGIN_interface( PLUGIN_interface *,
00385 char *, int, char **, int) ;
00386
00387 extern void add_dataset_to_PLUGIN_interface( PLUGIN_interface *,
00388 char *, int,int,int ) ;
00389
00390 extern void add_dataset_list_to_PLUGIN_interface( PLUGIN_interface *,
00391 char *, int,int,int ) ;
00392
00393 extern void add_timeseries_to_PLUGIN_interface( PLUGIN_interface *, char * ) ;
00394
00395 extern void add_overlaycolor_to_PLUGIN_interface( PLUGIN_interface *, char * );
00396
00397 extern void PLUG_fillin_values( PLUGIN_interface * plint ) ;
00398 extern void PLUG_freeup_values( PLUGIN_interface * plint ) ;
00399
00400 extern char * PLUTO_commandstring( PLUGIN_interface * plint ) ;
00401
00402 #define PLUTO_get_label get_label_from_PLUGIN_interface
00403 #define PLUTO_get_descripton get_description_from_PLUGIN_interface
00404 #define PLUTO_get_optiontag get_optiontag_from_PLUGIN_interface
00405 #define PLUTO_get_callvalue get_callvalue_from_PLUGIN_interface
00406 #define PLUTO_get_number get_number_from_PLUGIN_interface
00407 #define PLUTO_get_string get_string_from_PLUGIN_interface
00408 #define PLUTO_get_idcode get_idcode_from_PLUGIN_interface
00409 #define PLUTO_get_timeseries get_timeseries_from_PLUGIN_interface
00410 #define PLUTO_peek_callvalue peek_callvalue_type_from_PLUGIN_interface
00411 #define PLUTO_peek_optiontag peek_optiontag_from_PLUGIN_interface
00412 #define PLUTO_get_idclist get_idclist_from_PLUGIN_interface
00413 #define PLUTO_get_overlaycolor get_overlaycolor_from_PLUGIN_interface
00414
00415 #define PLUTO_idclist_count(ll) ( ((ll) != NULL) ? (ll)->nchosen : 0 )
00416 #define PLUTO_idclist_reset(ll) ((ll)->current = 0)
00417 #define PLUTO_idclist_next(ll) (((ll)->current < (ll)->nchosen) \
00418 ? ((ll)->idclist+((ll)->current)++) : NULL)
00419
00420 extern char * get_label_from_PLUGIN_interface ( PLUGIN_interface * ) ;
00421 extern char * get_description_from_PLUGIN_interface ( PLUGIN_interface * ) ;
00422 extern char * get_optiontag_from_PLUGIN_interface ( PLUGIN_interface * ) ;
00423 extern void * get_callvalue_from_PLUGIN_interface ( PLUGIN_interface * , int ) ;
00424 extern float get_number_from_PLUGIN_interface ( PLUGIN_interface * ) ;
00425 extern char * get_string_from_PLUGIN_interface ( PLUGIN_interface * ) ;
00426 extern int get_overlaycolor_from_PLUGIN_interface( PLUGIN_interface * ) ;
00427
00428 extern MCW_idcode * get_idcode_from_PLUGIN_interface( PLUGIN_interface * ) ;
00429 extern MRI_IMAGE * get_timeseries_from_PLUGIN_interface( PLUGIN_interface * ) ;
00430 extern MCW_idclist * get_idclist_from_PLUGIN_interface( PLUGIN_interface * ) ;
00431
00432 extern int peek_callvalue_type_from_PLUGIN_interface( PLUGIN_interface * ) ;
00433 extern char * peek_optiontag_from_PLUGIN_interface ( PLUGIN_interface * ) ;
00434
00435 #define NEXT_PLUGIN_OPTION(pl) (void)get_optiontag_from_PLUGIN_interface((pl))
00436 #define NEXT_OPTION NEXT_PLUGIN_OPTION
00437 #define PLUTO_next_option NEXT_PLUGIN_OPTION
00438
00439 #define BAD_NUMBER (-31416.666)
00440 #define PLUTO_BAD_NUMBER BAD_NUMBER
00441
00442
00443
00444
00445 #define AFNI_PLUGIN_TYPE 9754
00446 #define ISVALID_AFNI_PLUGIN(pl) ((pl)!=NULL && (pl)->type==AFNI_PLUGIN_TYPE)
00447
00448 #define MAX_PLUGIN_NAME 128
00449
00450
00451
00452 typedef struct {
00453 int type ;
00454
00455 char libname[MAX_PLUGIN_NAME] ;
00456 DYNAMIC_handle libhandle ;
00457 vptr_func * libinit_func ;
00458
00459 int interface_count ;
00460 PLUGIN_interface ** interface ;
00461
00462 char seqcode[PLUGIN_STRING_SIZE] ;
00463 } AFNI_plugin ;
00464
00465
00466
00467 typedef struct AFNI_plugin_array {
00468 int num , nall ;
00469 AFNI_plugin ** plar ;
00470 } AFNI_plugin_array ;
00471
00472
00473
00474 #define INC_PLUGIN_ARRAY 8
00475
00476
00477
00478 #define INIT_PLUGIN_ARRAY(name) \
00479 do{ int iq ; \
00480 (name) = (AFNI_plugin_array *) malloc(sizeof(AFNI_plugin_array)) ; \
00481 (name)->num = 0 ; \
00482 (name)->nall = INC_PLUGIN_ARRAY ; \
00483 (name)->plar = (AFNI_plugin **)malloc(sizeof(AFNI_plugin*)*(name)->nall) ; \
00484 for( iq=(name)->num ; iq < (name)->nall ; iq++ ) (name)->plar[iq] = NULL ; \
00485 } while(0)
00486
00487
00488
00489 #define ADDTO_PLUGIN_ARRAY(name,plug) \
00490 do{ int nn , iq ; \
00491 if( (name)->num == (name)->nall ){ \
00492 nn = (name)->nall = 1.1*(name)->nall + INC_PLUGIN_ARRAY ; \
00493 (name)->plar = (AFNI_plugin **) \
00494 realloc( (name)->plar,sizeof(AFNI_plugin *)*nn ) ; \
00495 for( iq=(name)->num ; iq < (name)->nall ; iq++ ) (name)->plar[iq] = NULL ;} \
00496 nn = (name)->num ; ((name)->num)++ ; \
00497 (name)->plar[nn] = (plug) ; \
00498 } while(0)
00499
00500
00501
00502 #define DESTROY_PLUGIN_ARRAY(name) \
00503 do{ int nn ; \
00504 if( (name) != NULL ){ \
00505 for( nn=0 ; nn < (name)->num ; nn++ ) \
00506 if( (name)->plar[nn] != NULL ) free( (name)->plar[nn] ) ; \
00507 free( (name)->plar ) ; free((name)) ; (name) = NULL ; \
00508 } } while(0)
00509
00510
00511
00512
00513 #define FREE_PLUGIN_ARRAY(name) \
00514 do{ int nn ; \
00515 if( (name) != NULL ){ \
00516 free( (name)->plar ) ; free((name)) ; (name) = NULL ; \
00517 } } while(0)
00518
00519
00520
00521
00522
00523 extern AFNI_plugin_array * PLUG_get_all_plugins( char * dname ) ;
00524 extern AFNI_plugin * PLUG_read_plugin( char * fname ) ;
00525 extern AFNI_plugin_array * PLUG_get_many_plugins(char *) ;
00526
00527 extern void PLUG_setup_widgets( PLUGIN_interface *, MCW_DC * ) ;
00528
00529 extern void PLUG_action_CB ( Widget , XtPointer , XtPointer ) ;
00530 extern void PLUG_delete_window_CB ( Widget , XtPointer , XtPointer ) ;
00531 extern void PLUG_optional_toggle_CB ( Widget , XtPointer , XtPointer ) ;
00532 extern void PLUG_choose_dataset_CB ( Widget , XtPointer , XtPointer ) ;
00533 extern void PLUG_startup_plugin_CB ( Widget , XtPointer , XtPointer ) ;
00534 extern void PLUG_choose_timeseries_CB( Widget , XtPointer , XtPointer ) ;
00535
00536 extern void PLUTO_turnoff_options( PLUGIN_interface * ) ;
00537
00538 extern void PLUG_finalize_dataset_CB (Widget, XtPointer, MCW_choose_cbs *);
00539 extern void PLUG_finalize_timeseries_CB(Widget, XtPointer, MCW_choose_cbs *);
00540
00541 extern void PLUTO_popup_dset_chooser( Widget, int, int,
00542 int_func *, void_func *, void * ) ;
00543
00544 extern void PLUG_finalize_user_dset_CB( Widget, XtPointer, MCW_choose_cbs * ) ;
00545
00546 extern void AFNI_plugin_button( Three_D_View * ) ;
00547
00548 #define DSET_ACTION_NONE 0
00549 #define DSET_ACTION_MAKE_CURRENT 1
00550
00551 extern int PLUTO_add_dset( PLUGIN_interface *, THD_3dim_dataset *, int ) ;
00552
00553 extern THD_3dim_dataset * PLUTO_copy_dset( THD_3dim_dataset *, char * ) ;
00554
00555 extern void PLUTO_dset_redisplay_mode( THD_3dim_dataset * , int ) ;
00556 extern void PLUTO_dset_redisplay( THD_3dim_dataset * ) ;
00557
00558 extern int PLUTO_prefix_ok( char * ) ;
00559 extern int PLUTO_string_index( char * , int , char ** ) ;
00560
00561 #define PLUTO_popup_message(pl,ch) \
00562 PLUTO_popup_worker((pl),(ch),MCW_USER_KILL)
00563
00564 #define PLUTO_popup_transient(pl,ch) \
00565 PLUTO_popup_worker((pl),(ch),MCW_USER_KILL|MCW_TIMER_KILL);
00566
00567 #define PLUTO_popup_textwin(pl,ch) \
00568 PLUTO_popup_worker((pl),(ch),-1)
00569
00570 extern void PLUTO_fixup_names(void) ;
00571 extern void PLUTO_popup_worker( PLUGIN_interface * , char * , int ) ;
00572 extern void PLUTO_beep(void) ;
00573
00574 extern void PLUTO_popup_meter( PLUGIN_interface * ) ;
00575 extern void PLUTO_popdown_meter( PLUGIN_interface * ) ;
00576 extern void PLUTO_set_meter( PLUGIN_interface * , int ) ;
00577
00578 extern void PLUTO_set_topshell( PLUGIN_interface *, Widget ) ;
00579
00580
00581
00582 typedef struct {
00583 MCW_imseq * seq ;
00584 MRI_IMAGE * im ;
00585 } PLUGIN_impopper ;
00586
00587 extern void * PLUTO_popup_image( void * , MRI_IMAGE * ) ;
00588 extern XtPointer PLUGIN_imseq_getim( int , int , XtPointer ) ;
00589 extern void PLUGIN_seq_send_CB( MCW_imseq * , XtPointer , ISQ_cbs * ) ;
00590
00591 #define PLUTO_popdown_image(hh) (void)PLUTO_popup_image((hh),NULL)
00592
00593 #define PLUTO_popup_open(hh) \
00594 ( (hh) != NULL && ISQ_REALZ(((PLUGIN_impopper *)(hh))->seq) )
00595
00596 #define PLUTO_popkill_image(hh) \
00597 ( PLUTO_popdown_image(hh) , XtFree((char *)(hh)) , (hh)=NULL )
00598
00599
00600
00601 typedef struct {
00602 MCW_imseq * seq ;
00603 MRI_IMARR * imar ;
00604 int rgb_count ;
00605 generic_func * kill_func ;
00606 void * kill_data ;
00607 } PLUGIN_imseq ;
00608
00609 extern void * PLUTO_imseq_popup( MRI_IMARR *, generic_func *, void * ) ;
00610 extern void * PLUTO_imseq_popim( MRI_IMAGE *, generic_func *, void * ) ;
00611
00612 extern void PLUTO_imseq_addto( void * , MRI_IMAGE * ) ;
00613 extern void PLUTO_imseq_destroy( void * ) ;
00614 extern void PLUTO_imseq_retitle( void * , char * ) ;
00615 extern void PLUTO_imseq_rekill( void *, generic_func *, void * ) ;
00616 extern void PLUTO_imseq_setim( void * , int ) ;
00617
00618 extern XtPointer PLUTO_imseq_getim( int , int , XtPointer ) ;
00619 extern void PLUTO_imseq_send_CB( MCW_imseq * , XtPointer , ISQ_cbs * ) ;
00620
00621
00622
00623 extern THD_3dim_dataset * PLUTO_4D_to_typed_fim( THD_3dim_dataset * old_dset ,
00624 char * new_prefix , int new_datum ,
00625 int ignore , int detrend ,
00626 generic_func * user_func ,
00627 void * user_data ) ;
00628
00629 #define PLUTO_4D_to_fim(ds,np,ig,dtr,uf,ud) \
00630 PLUTO_4D_to_typed_fim( (ds),(np), MRI_short , (ig),(dtr),(uf),(ud) )
00631
00632
00633 extern THD_3dim_dataset * PLUTO_4D_to_typed_fith( THD_3dim_dataset * old_dset ,
00634 char * new_prefix , int new_datum ,
00635 int ignore , int detrend ,
00636 generic_func * user_func ,
00637 void * user_data ) ;
00638
00639 #define PLUTO_4D_to_fith(ds,np,ig,dtr,uf,ud) \
00640 PLUTO_4D_to_typed_fith( (ds),(np), MRI_short , (ig),(dtr),(uf),(ud) )
00641
00642
00643
00644 extern THD_3dim_dataset * PLUTO_4D_to_typed_fbuc( THD_3dim_dataset * old_dset ,
00645 char * new_prefix , int new_datum ,
00646 int ignore , int detrend ,
00647 int nbrik ,
00648 generic_func * user_func ,
00649 void * user_data ) ;
00650
00651 extern void PLUTO_report( PLUGIN_interface * , char * ) ;
00652
00653 #define PLUTO_output_header(ds) THD_write_3dim_dataset(NULL,NULL,(ds),False)
00654
00655 extern PLUGIN_strval * new_PLUGIN_strval( Widget , char * ) ;
00656 extern void destroy_PLUGIN_strval( PLUGIN_strval * ) ;
00657 extern void alter_PLUGIN_strval_width( PLUGIN_strval * , int ) ;
00658 extern void set_PLUGIN_strval( PLUGIN_strval * , char * ) ;
00659 extern char * get_PLUGIN_strval( PLUGIN_strval * ) ;
00660
00661
00662 extern int PLUTO_set_v2s_addrs(void ** vopt, char *** maps, char ** hist);
00663
00664
00665 #endif
00666
00667
00668
00669
00670
00671 #define PLUTO_extract_series(ijk,ds) THD_extract_series((ijk),(ds),0)
00672 #define PLUTO_extract_series_raw(ijk,ds) THD_extract_series((ijk),(ds),1)
00673
00674 #define PLUTO_register_0D_function AFNI_register_0D_function
00675 #define PLUTO_register_1D_function AFNI_register_1D_function
00676 #define PLUTO_register_2D_function AFNI_register_2D_function
00677
00678 #define PLUTO_register_1D_funcstr AFNI_register_1D_funcstr
00679
00680 #define PLUTO_cursorize(w) NORMAL_cursorize(w)
00681
00682 extern void PLUTO_register_timeseries( char * , MRI_IMAGE * ) ;
00683
00684 extern THD_3dim_dataset * PLUTO_find_dset( MCW_idcode * ) ;
00685 extern THD_3dim_dataset * PLUTO_find_dset_idc( char * ) ;
00686 extern THD_slist_find PLUTO_dset_finder( char * ) ;
00687
00688 extern void PLUTO_histoplot( int, float, float, int *,
00689 char *, char *, char * , int,int ** ) ;
00690
00691 extern void PLUTO_scatterplot( int , float *, float *,
00692 char *, char *, char * , float,float ) ;
00693
00694 extern void PLUTO_force_redisplay( void ) ;
00695 extern void PLUTO_force_rebar( void ) ;
00696
00697 extern void PLUTO_register_workproc( XtWorkProc , XtPointer ) ;
00698 extern void PLUTO_remove_workproc ( XtWorkProc ) ;
00699 extern Boolean PLUG_workprocess( XtPointer ) ;
00700 extern void PLUTO_register_timeout( int, generic_func *, XtPointer ) ;
00701 extern double PLUTO_cpu_time(void) ;
00702 extern double PLUTO_elapsed_time(void) ;
00703
00704 #endif