Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

afni_splash.c File Reference

#include "afni.h"
#include "afni_splash.h"
#include <time.h>
#include "afni_broutim.h"

Go to the source code of this file.


Data Structures

struct  mday

Defines

#define USE_FADING
#define USE_WRITING
#define MMAX   82
#define NXY   128
#define JAN   1
#define FEB   2
#define MAR   3
#define APR   4
#define MAY   5
#define JUN   6
#define JUL   7
#define AUG   8
#define SEP   9
#define OCT   10
#define NOV   11
#define DEC   12
#define NTMAX   9
#define NLBUF   4096
#define ISTARRED(s)   ( (s)[0]=='*' && (s)[1]=='*' && (s)[2]=='*' )
#define NGMAX   32
#define ACTIVATE_MASK   (1)
#define NULL_MASK   (0)
#define NWBUF   128

Functions

void * SPLASH_popup_image (void *, MRI_IMAGE *)
MRI_IMAGESPLASH_decode26 (int, int, int, char **)
MRI_IMAGESPLASH_decodexx (int, int, int, int, byte *, byte *, byte *, char **)
int AFNI_find_jpegs (char *, char ***)
int AFNI_find_todays_face (void)
void AFNI_splashraise (void)
void AFNI_splashdown (void)
void AFNI_splashup (void)
XtPointer SPLASH_imseq_getim (int n, int type, XtPointer handle)
void AFNI_facedown (void *kd)
int gcd (int m, int n)
void AFNI_faceup (void)
void AFNI_broutim_CB (Widget w, XtPointer cd, XtPointer cbs)
int get_linbuf (char *str)
void AFNI_decode_geom (char *geom, int *ww, int *hh, int *xx, int *yy)
void AFNI_startup_layout_CB (XtPointer client_data, XtIntervalId *id)
void AFNI_save_layout_CB (Widget w, XtPointer cd, XtPointer cbs)
void AFNI_finalsave_layout_CB (Widget w, XtPointer cd, MCW_choose_cbs *cbs)
void AFNI_startup_script_CB (XtPointer client_data, XtIntervalId *id)
void AFNI_run_script_CB (Widget w, XtPointer cd, XtPointer cbs)
void AFNI_finalrun_script_CB (Widget w, XtPointer cd, MCW_choose_cbs *cbs)

Variables

MRI_IMAGEimspl = NULL
void * handle = NULL
int do_write = 2
int num_splash = 0
int first_splash = -1
char ** fname_splash = NULL
int num_face = 0
char ** fname_face = NULL
byte map26 [26]
char alpha [MMAX]
void * face_phan = NULL
mday facials []
char * linbuf

Define Documentation

#define ACTIVATE_MASK   (1)
 

Definition at line 881 of file afni_splash.c.

Referenced by AFNI_startup_layout_CB().

#define APR   4
 

Definition at line 735 of file afni_splash.c.

#define AUG   8
 

Definition at line 739 of file afni_splash.c.

#define DEC   12
 

Definition at line 743 of file afni_splash.c.

#define FEB   2
 

Definition at line 733 of file afni_splash.c.

#define ISTARRED      ( (s)[0]=='*' && (s)[1]=='*' && (s)[2]=='*' )
 

Definition at line 877 of file afni_splash.c.

#define JAN   1
 

Definition at line 732 of file afni_splash.c.

#define JUL   7
 

Definition at line 738 of file afni_splash.c.

#define JUN   6
 

Definition at line 737 of file afni_splash.c.

#define MAR   3
 

Definition at line 734 of file afni_splash.c.

#define MAY   5
 

Definition at line 736 of file afni_splash.c.

#define MMAX   82
 

Definition at line 486 of file afni_splash.c.

Referenced by SPLASH_decodexx().

#define NGMAX   32
 

Definition at line 879 of file afni_splash.c.

Referenced by AFNI_startup_layout_CB().

#define NLBUF   4096
 

Definition at line 817 of file afni_splash.c.

Referenced by AFNI_startup_layout_CB(), AFNI_startup_script_CB(), and get_linbuf().

#define NOV   11
 

Definition at line 742 of file afni_splash.c.

#define NTMAX   9
 

Definition at line 746 of file afni_splash.c.

Referenced by AFNI_find_todays_face().

#define NULL_MASK   (0)
 

Definition at line 882 of file afni_splash.c.

Referenced by AFNI_startup_layout_CB().

#define NWBUF   128
 

Definition at line 884 of file afni_splash.c.

Referenced by AFNI_startup_layout_CB().

#define NXY   128
 

Definition at line 637 of file afni_splash.c.

Referenced by AFNI_faceup().

#define OCT   10
 

Definition at line 741 of file afni_splash.c.

#define SEP   9
 

Definition at line 740 of file afni_splash.c.

#define USE_FADING
 

Definition at line 36 of file afni_splash.c.

#define USE_WRITING
 

Definition at line 38 of file afni_splash.c.


Function Documentation

void AFNI_broutim_CB Widget    w,
XtPointer    cd,
XtPointer    cbs
 

Definition at line 798 of file afni_splash.c.

References mri_free(), NC_broutim, NLINE_broutim, NX_broutim, NY_broutim, PLUTO_popup_image(), and SPLASH_decodexx().

00799 {
00800    MRI_IMAGE *imbr ;
00801    imbr = SPLASH_decodexx( NX_broutim,NY_broutim,NLINE_broutim,NC_broutim,
00802                            RMAP_broutim,GMAP_broutim,BMAP_broutim,BAR_broutim);
00803    (void) PLUTO_popup_image( NULL , imbr ) ;
00804    mri_free(imbr) ; return ;
00805 }

void AFNI_decode_geom char *    geom,
int *    ww,
int *    hh,
int *    xx,
int *    yy
 

Definition at line 852 of file afni_splash.c.

References geom.

Referenced by AFNI_drive_geom_graph(), AFNI_drive_open_plugin(), AFNI_drive_open_window(), and AFNI_startup_layout_CB().

00853 {
00854    int has_x , has_plus ;
00855 
00856    *ww = *hh = *xx = *yy = -1 ;
00857    if( geom == NULL || geom[0] == '\0' ) return ;
00858 
00859    has_x    = strstr(geom,"x") != NULL ;
00860    has_plus = strstr(geom,"+") != NULL ;
00861 
00862    if( has_x && has_plus )
00863       sscanf(geom,"%dx%d+%d+%d",ww,hh,xx,yy) ;
00864    else if( has_x )
00865       sscanf(geom,"%dx%d",ww,hh) ;
00866    else if( has_plus )
00867       sscanf(geom,"+%d+%d",xx,yy) ;
00868 
00869    return ;
00870 }

void AFNI_facedown void *    kd
 

Definition at line 634 of file afni_splash.c.

References face_phan.

Referenced by AFNI_faceup().

00634 { face_phan = NULL; }

void AFNI_faceup void   
 

Definition at line 647 of file afni_splash.c.

References AFNI_facedown(), AFNI_find_jpegs(), BEEPIT, AFNI_library_type::dc, drive_MCW_imseq(), ENTRY, face_phan, fim, fname_face, gcd(), generic_func, getenv(), GLOBAL_library, MCW_DC::height, isqDR_periodicmont, isqDR_record_disable, mri_dup2D(), mri_free(), mri_read_stuff(), mri_zeropad_2D(), NI_clock_time(), NI_sleep(), num_face, MRI_IMAGE::nx, NXY, MRI_IMAGE::ny, PLUTO_imseq_addto(), PLUTO_imseq_popim(), PLUTO_imseq_retitle(), PLUTO_imseq_setim(), and MCW_DC::width.

00648 {
00649    MRI_IMAGE *im , *fim ;
00650    int ii , nx,ny , nxdown,nxup , nydown,nyup ;
00651    int ctold,ctnew,mmss , ddss ;
00652    int jj , j0,dj=1 ;
00653 
00654 ENTRY("AFNI_faceup") ;
00655 
00656    if( num_face <  0 ){ BEEPIT; EXRETURN; }
00657    if( num_face == 0 ){
00658      num_face = AFNI_find_jpegs( "face_" , &fname_face ) ;
00659      if( num_face <= 0 ){ BEEPIT; EXRETURN; }
00660    }
00661    if( face_phan != NULL ){
00662      PLUGIN_imseq *ph = (PLUGIN_imseq *)face_phan ;
00663      XMapRaised( XtDisplay(ph->seq->wtop) , XtWindow(ph->seq->wtop) ) ;
00664      EXRETURN ;
00665    }
00666 
00667    ctold = NI_clock_time() ;
00668 
00669    ddss = num_face + 16449/num_face ; if( ddss > 222 ) ddss = 222 ;
00670 
00671    if( num_face > 4 ){
00672      ii = num_face / 2 ;
00673      do{ dj = 1 + lrand48() % ii ; } while( gcd(num_face,dj) > 1 ) ;
00674    }
00675    j0 = lrand48() % num_face ;
00676 
00677    for( ii=0 ; ii < num_face ; ii++ ){
00678      jj = (j0 + ii*dj) % num_face ;
00679      im = mri_read_stuff( fname_face[jj] ) ;
00680      if( im == NULL ) continue ;
00681      nx = im->nx ; ny = im->ny ;
00682 
00683      nxdown = (NXY-nx) / 2 ; nxup = NXY - nx - nxdown ;
00684      nydown = (NXY-ny) / 2 ; nyup = NXY - ny - nydown ;
00685      if( nxdown != 0 || nydown != 0 || nxup != 0 || nyup != 0 ){
00686        fim = mri_zeropad_2D( nxdown,nxup , nydown,nyup , im ) ;
00687        if( fim != NULL ){ mri_free(im) ; im = fim ; }
00688      }
00689      fim = mri_dup2D(2,im) ; mri_free(im) ;  /* double size for fun */
00690      if( face_phan == NULL ){
00691        int sxx,syy ; char *sen ; PLUGIN_imseq *ph ;
00692 
00693        face_phan = PLUTO_imseq_popim( fim,(generic_func *)AFNI_facedown,NULL );
00694        sxx = (GLOBAL_library.dc->width-4*NXY)/2 ; if( sxx < 1 ) sxx = 1 ;
00695        syy = 100 ;
00696        sen = getenv("AFNI_SPLASH_XY") ;
00697        if( sen != NULL ){
00698          int n,x,y ;
00699          n = sscanf(sen,"%d:%d",&x,&y) ;
00700          if( n == 2 && x >= 0 && x < GLOBAL_library.dc->width &&
00701                        y >= 0 && y < GLOBAL_library.dc->height  ){
00702             sxx = x ; syy = y ;
00703          }
00704        }
00705        ph = (PLUGIN_imseq *)face_phan ;
00706        XtVaSetValues( ph->seq->wtop , XmNx,sxx , XmNy,syy , NULL ) ;
00707        drive_MCW_imseq( ph->seq , isqDR_record_disable , (XtPointer)0 ) ;
00708        drive_MCW_imseq( ph->seq , isqDR_periodicmont   , (XtPointer)1 ) ;
00709 
00710      } else {
00711        PLUTO_imseq_addto( face_phan , fim ) ;
00712      }
00713      mri_free(fim) ;
00714 
00715      ctnew = NI_clock_time() ;      /* show 1 image every ddss ms [27 Dec 2004] */
00716      mmss  = ddss - (ctnew-ctold) ;
00717      ctold = ctnew ; ddss-- ;
00718      NI_sleep(mmss) ;
00719    }
00720    if( face_phan != NULL ){
00721      PLUTO_imseq_retitle( face_phan , "Faces of AFNI" ) ;
00722      PLUTO_imseq_setim( face_phan , 0 ) ;
00723    } else {
00724      BEEPIT ;
00725    }
00726 
00727    EXRETURN ;
00728 }

void AFNI_finalrun_script_CB Widget    w,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 1723 of file afni_splash.c.

References AFNI_startup_script_CB(), MCW_choose_cbs::cval, and ENTRY.

Referenced by AFNI_run_script_CB().

01724 {
01725    Three_D_View *im3d = (Three_D_View *) cd ;
01726 
01727 ENTRY("AFNI_finalrun_script_CB") ;
01728 
01729    AFNI_startup_script_CB( (XtPointer) cbs->cval , NULL ) ;
01730    EXRETURN ;
01731 }

void AFNI_finalsave_layout_CB Widget    w,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 1420 of file afni_splash.c.

References AFNI_controller_index(), AV_uformat_fval(), BEEPIT, MCW_pbar::bigmode, MCW_pbar::bigtop, AFNI_library_type::controllers, MCW_choose_cbs::cval, Three_D_View::dc, AFNI_library_type::dc, drive_MCW_imseq(), ENTRY, MCW_grapher::fdw_graph, AFNI_function_widgets::frame, AFNI_widget_set::func, AFNI_view_info::func_resam_mode, AFNI_view_info::func_thresh_top, AFNI_view_info::func_threshold, AFNI_view_info::func_visible, MCW_arrowval::fval, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, GLOBAL_library, IM3D_OPEN, MCW_imseq::image_frac, AFNI_function_widgets::inten_pbar, isq, isqDR_getopacity, MCW_DCOV::label_ov, MCW_grapher::mat, MAX_CONTROLLERS, MCW_widget_geom(), MCW_widget_visible(), MIN_PIN, MCW_pbar::mode, MCW_imseq::mont_gap, MCW_imseq::mont_gapcolor, MCW_imseq::mont_nx, MCW_imseq::mont_ny, MCW_imseq::mont_skip, MCW_DCOV::name_ov, MCW_DCOV::ncol_ov, AFNI_widget_set::nplugbut, MCW_pbar::num_panes, MCW_imseq::onoff_state, MCW_pbar::ov_index, MCW_DC::ovc, MCW_grapher::pin_top, AFNI_widget_set::plugint, AFNI_widget_set::pluglab, MCW_pbar::pval, AFNI_function_widgets::range_av, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, THD_filename_ok(), THR_FACTOR, AFNI_view_info::thr_resam_mode, AFNI_widget_set::top_shell, AFNI_view_info::use_autorange, Three_D_View::vinfo, Three_D_View::vwid, and MCW_imseq::wtop.

Referenced by AFNI_save_layout_CB().

01421 {
01422    Three_D_View *im3d = (Three_D_View *) cd ;
01423    int cc,ww , gww,ghh,gxx,gyy ;
01424    FILE *fp , *gp ;
01425    MCW_imseq   *isq ;
01426    MCW_grapher *gra ;
01427    float ifrac ;
01428    char mont[128] ;
01429    int matrix , pinnum ;
01430 
01431    char *abet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
01432    char *wnam[3] = { "axial" , "sagittal" , "coronal" } ;
01433 
01434    int ipl , qq , ll ;
01435    char *plab ;
01436 
01437    Three_D_View *qm3d         = GLOBAL_library.controllers[0]; /* already open */
01438 
01439 #ifdef ALLOW_PLUGINS
01440    int      npbut              = qm3d->vwid->nplugbut;      /* how many plugins */
01441    char **  pluglab            = qm3d->vwid->pluglab;       /* their labels     */
01442    PLUGIN_interface ** plugint = qm3d->vwid->plugint;       /* their interfaces */
01443 #endif
01444 
01445    MCW_DCOV     *ovc          = GLOBAL_library.dc->ovc ;   /* 22 Jan 2003 */
01446    Three_D_View *zm3d ;
01447 
01448 ENTRY("AFNI_finalsave_layout_CB") ;
01449 
01450    if( strcmp(cbs->cval,".afnirc") == 0 ){ BEEPIT; EXRETURN; } /* 12 Oct 2000 */
01451 
01452    /*-- 23 Jan 2003: open layout file if name is "OK", else don't use it --*/
01453 
01454    if( THD_filename_ok(cbs->cval) ){
01455      fp = fopen( cbs->cval , "w" ) ;
01456      if( fp == NULL ){ BEEPIT; EXRETURN; }
01457    } else {
01458      fp = NULL ;
01459    }
01460 
01461    if( fp != NULL ) fprintf(fp,"\n***LAYOUT\n") ;
01462 
01463    /*-- 22 Jan 2002: maybe write a startup script to do same things --*/
01464 
01465    if( fp == NULL )
01466      gp = fopen( ".afni.startup_script" , "w" ) ;
01467    else
01468      gp = NULL ;
01469 
01470    if( gp != NULL ){
01471 
01472      fprintf(gp,"// AFNI startup script, from Datamode->Misc->Save Layout\n") ;
01473 
01474      /* put in any extra overlay colors */
01475 
01476      for( qq=DEFAULT_NCOLOVR+1 ; qq < ovc->ncol_ov ; qq++ )
01477        fprintf(gp,"ADD_OVERLAY_COLOR %s %s\n",
01478                ovc->name_ov[qq] , ovc->label_ov[qq] ) ;
01479    } else {
01480      if( fp == NULL ){ BEEPIT; EXRETURN; }
01481    }
01482 
01483    /*-- loop over controllers --*/
01484 
01485    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
01486 
01487       /*-- controller open? */
01488 
01489       zm3d = GLOBAL_library.controllers[cc] ;
01490 
01491       if( !IM3D_OPEN(zm3d) ) continue ; /* skip */
01492 
01493       /* print controller info */
01494 
01495       MCW_widget_geom( zm3d->vwid->top_shell ,
01496                        NULL,NULL , &gxx,&gyy ) ;
01497 
01498       if( fp != NULL ) fprintf(fp,"  %c geom=+%d+%d\n" , abet[cc] , gxx,gyy ) ;
01499 
01500       /*-- 22 Jan 2003: parallel output for startup script --*/
01501 
01502       if( gp != NULL ){
01503         MCW_pbar *pbar = zm3d->vwid->func->inten_pbar ;
01504 
01505         fprintf(gp,"OPEN_WINDOW %c geom=+%d+%d\n" , abet[cc] , gxx,gyy ) ;
01506 
01507         if( XtIsManaged(zm3d->vwid->func->frame) )
01508           fprintf(gp,"OPEN_PANEL %c.Define_Overlay\n" , abet[cc] ) ;
01509 
01510         fprintf(gp,"SET_THRESHOLD %c.%04d %d\n" , abet[cc] ,
01511                     (int)(zm3d->vinfo->func_threshold/THR_FACTOR) ,
01512                     (int)(log10(zm3d->vinfo->func_thresh_top)+.01) ) ;
01513 
01514         if( !pbar->bigmode ){
01515           fprintf(gp,"SET_PBAR_ALL %c.%c%d" , abet[cc] ,
01516                      (pbar->mode) ? '+' : '-' , pbar->num_panes ) ;
01517           for( qq=0 ; qq < pbar->num_panes ; qq++ )
01518             fprintf(gp," %s=%s",
01519                        AV_uformat_fval(pbar->pval[qq]) ,
01520                        ovc->label_ov[pbar->ov_index[qq]] ) ;
01521           fprintf(gp,"\n") ;
01522         } else {
01523           fprintf(gp,"SET_PBAR_ALL %c.%c%d %f %s\n" , abet[cc] ,
01524                      (pbar->mode) ? '+' : '-' , 99 ,
01525                      pbar->bigtop , PBAR_get_bigmap(pbar) ) ;
01526         }
01527 
01528         fprintf(gp,"SET_FUNC_VISIBLE %c.%c\n" , abet[cc] ,
01529                 (zm3d->vinfo->func_visible) ? '+' : '-'   ) ;
01530 
01531         fprintf(gp,"SET_FUNC_RESAM %c.%s.%s\n" , abet[cc] ,
01532                 RESAM_shortstr[zm3d->vinfo->func_resam_mode] ,
01533                 RESAM_shortstr[zm3d->vinfo->thr_resam_mode]   ) ;
01534 
01535         if( im3d->vinfo->use_autorange )
01536           fprintf(gp,"SET_FUNC_AUTORANGE %c.+\n" , abet[cc] ) ;
01537         else
01538           fprintf(gp,"SET_FUNC_RANGE %c.%f\n" , abet[cc] ,
01539                   im3d->vwid->func->range_av->fval        ) ;
01540 
01541       } /* end of startup script stuff */
01542 
01543       /*-- loop over image viewers in this controller --*/
01544 
01545       for( ww=0 ; ww < 3 ; ww++ ){
01546 
01547          isq = (ww == 0) ? zm3d->s123     /* get the image */
01548               :(ww == 1) ? zm3d->s231     /* viewer struct */
01549               :            zm3d->s312 ;
01550 
01551          if( isq == NULL ) continue ;   /* skip */
01552 
01553          /* get and print image viewer info */
01554 
01555          MCW_widget_geom( isq->wtop , &gww,&ghh , &gxx,&gyy ) ;
01556 
01557          ifrac = (isq->onoff_state) ? isq->image_frac : 1.0 ;
01558 
01559          if( isq->mont_nx > 1 || isq->mont_ny > 1 ){
01560             sprintf(mont,"%dx%d:%d:%d:%s" ,
01561                     isq->mont_nx , isq->mont_ny , isq->mont_skip+1 , isq->mont_gap ,
01562                     zm3d->dc->ovc->label_ov[isq->mont_gapcolor]);
01563          } else {
01564             mont[0] = '\0' ;
01565          }
01566 
01567          if( fp != NULL ){
01568            if( mont[0] == '\0' ){
01569               fprintf(fp, "  %c.%simage geom=%dx%d+%d+%d ifrac=%s\n" ,
01570                           abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , AV_uformat_fval(ifrac) ) ;
01571            } else {
01572               fprintf(fp, "  %c.%simage geom=%dx%d+%d+%d ifrac=%s mont=%s\n" ,
01573                           abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , AV_uformat_fval(ifrac) , mont ) ;
01574            }
01575          }
01576 
01577          /*-- 22 Jan 2003: startup script stuff for image viewers --*/
01578 
01579          if( gp != NULL ){
01580            int opval=9 ;
01581            drive_MCW_imseq( isq , isqDR_getopacity , &opval ) ;
01582            if( mont[0] == '\0' ){
01583               fprintf(gp, "OPEN_WINDOW %c.%simage geom=+%d+%d ifrac=%s opacity=%d\n" ,
01584                           abet[cc] , wnam[ww] , gxx,gyy , AV_uformat_fval(ifrac) , opval ) ;
01585            } else {
01586               fprintf(gp, "OPEN_WINDOW %c.%simage geom=+%d+%d ifrac=%s mont=%s opacity=%d\n" ,
01587                           abet[cc] , wnam[ww] , gxx,gyy , AV_uformat_fval(ifrac) , mont , opval ) ;
01588            }
01589         }
01590       }
01591 
01592       /*-- loop over graph viewers --*/
01593 
01594       for( ww=0 ; ww < 3 ; ww++ ){
01595 
01596          gra = (ww == 0) ? zm3d->g123    /* get the graph */
01597               :(ww == 1) ? zm3d->g231    /* viewer struct */
01598               :            zm3d->g312 ;
01599 
01600          if( gra == NULL ) continue ;   /* ERROR */
01601 
01602          MCW_widget_geom( gra->fdw_graph , &gww,&ghh , &gxx,&gyy ) ;
01603 
01604          pinnum = (gra->pin_top < MIN_PIN) ? 0 : gra->pin_top ;
01605          matrix = gra->mat ;
01606 
01607          if( fp != NULL ){
01608            if( pinnum > 0 ){
01609               fprintf(fp , "  %c.%sgraph geom=%dx%d+%d+%d matrix=%d pinnum=%d\n" ,
01610                            abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , matrix,pinnum ) ;
01611            } else {
01612               fprintf(fp , "  %c.%sgraph geom=%dx%d+%d+%d matrix=%d\n" ,
01613                            abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , matrix ) ;
01614            }
01615          }
01616 
01617          /*-- 22 Jan 2003: startup script stuff for graph viewers --*/
01618 
01619          if( gp != NULL ){
01620            if( pinnum > 0 ){
01621               fprintf(gp , "OPEN_WINDOW %c.%sgraph geom=%dx%d+%d+%d matrix=%d pinnum=%d\n" ,
01622                            abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , matrix,pinnum ) ;
01623            } else {
01624               fprintf(gp , "OPEN_WINDOW %c.%sgraph geom=%dx%d+%d+%d matrix=%d\n" ,
01625                            abet[cc] , wnam[ww] , gww,ghh,gxx,gyy , matrix ) ;
01626            }
01627          }
01628       }
01629 
01630    } /* end of loop over controllers */
01631 
01632 #ifdef ALLOW_PLUGINS
01633    /*-- loop over plugins --*/
01634 
01635    for( ipl=0 ; ipl < npbut ; ipl++ ){
01636 
01637       if( plugint[ipl]->wid == NULL || plugint[ipl]->wid->shell == NULL ) continue ;
01638 
01639       cc = AFNI_controller_index( plugint[ipl]->im3d ) ;
01640 
01641       if( cc < 0 || cc >= MAX_CONTROLLERS || !IM3D_OPEN(plugint[ipl]->im3d) ) continue ;
01642 
01643       if( ! MCW_widget_visible(plugint[ipl]->wid->shell) ) continue ;
01644 
01645       /* it passed all the test, so get its location */
01646 
01647       MCW_widget_geom( plugint[ipl]->wid->shell , &gww,&ghh , &gxx,&gyy ) ;
01648 
01649       /* make a label for the plugin, stripping trailing
01650          blanks and replacing interior blanks with underscores */
01651 
01652       plab = strdup( pluglab[ipl] ) ;
01653       for( ll=strlen(plab) ;                         /* truncate trailing blanks */
01654            ll >= 0 && isspace(plab[ll]) ; ll-- ) plab[ll] = '\0' ;
01655       if( ll < 0 ) continue ;                        /* all blanks?! ERROR */
01656       ll++ ;
01657       for( qq=0 ; qq < ll ; qq++ ) if( isspace(plab[qq]) ) plab[qq] = '_' ;
01658 
01659       if( fp != NULL ) fprintf(fp , "  %c.plugin.%s geom=+%d+%d\n" ,
01660                                     abet[cc] , plab , gxx,gyy ) ;
01661    }
01662 #endif
01663 
01664    /*-- finito! --*/
01665 
01666    if( fp != NULL ) fclose(fp) ;
01667    if( gp != NULL ) fclose(gp) ;
01668    EXRETURN ;
01669 }

int AFNI_find_jpegs char *    prefix,
char ***    fname
[static]
 

Find all files of form 'prefix*.jpg' and 'prefix*.JPG' files in the path.

Definition at line 548 of file afni_splash.c.

References AFMALL, ENTRY, free, getenv(), malloc, MCW_free_wildcards, MCW_wildcards(), realloc, RETURN, and THD_MAX_NAME.

Referenced by AFNI_faceup(), and AFNI_splashup().

00549 {
00550    char *epath , *elocal , *eee ;
00551    char edir[THD_MAX_NAME] , *ename ;
00552    int epos , ll , ii , id , nfile , nx,ny , num_file=0 ;
00553    char **ffile , **fflist=NULL ;
00554 
00555 ENTRY("AFNI_find_jpegs") ;
00556 
00557    if( prefix == NULL || *prefix == '\0' || fname == NULL ) RETURN(-1) ;
00558 
00559    /*----- get path to search -----*/
00560 
00561                        epath = getenv("AFNI_PLUGINPATH") ;
00562    if( epath == NULL ) epath = getenv("AFNI_PLUGIN_PATH") ;
00563    if( epath == NULL ) epath = getenv("PATH") ;
00564    if( epath == NULL ) epath = getenv("HOME") ;
00565    if( epath == NULL ){ RETURN(-1) ; }
00566 
00567    /*----- copy path list into local memory -----*/
00568 
00569    ll = strlen(epath) ;
00570    elocal = AFMALL( char,  sizeof(char) * (ll+2) ) ;
00571 
00572    /*----- put a blank at the end -----*/
00573 
00574    strcpy( elocal , epath ) ; elocal[ll] = ' ' ; elocal[ll+1] = '\0' ;
00575 
00576    /*----- replace colons (if any) with blanks -----*/
00577 
00578    for( ii=0 ; ii < ll ; ii++ )
00579      if( elocal[ii] == ':' ) elocal[ii] = ' ' ;
00580 
00581    /*----- extract blank delimited strings from elocal;
00582            use as directory names to look for matching files -----*/
00583 
00584    ename = (char *) malloc( 2*THD_MAX_NAME+32 ) ;  /* string for wildcards */
00585    epos  = 0 ;                              /* scanning position in elocal */
00586 
00587    do{
00588      ii = sscanf( elocal+epos , "%s%n" , edir , &id ); /* next substring */
00589      if( ii < 1 ) break ;                              /* none -> done   */
00590 
00591      /** check if edir occurs earlier in elocal **/
00592 
00593      eee = strstr( elocal , edir ) ;
00594      if( eee != NULL && (eee-elocal) < epos ){ epos += id ; continue ; }
00595 
00596      epos += id ;                                 /* char after last scanned */
00597 
00598      ii = strlen(edir) ;                          /* make sure dirname has */
00599      if( edir[ii-1] != '/' ){                     /* a trailing '/' on it */
00600        edir[ii]  = '/' ; edir[ii+1] = '\0' ;
00601      }
00602 
00603      /* create wildcard for JPEG files in this directory */
00604 
00605      sprintf(ename,"%s%s*.jpg %s%s*.JPG" , edir,prefix,edir,prefix ) ;
00606 
00607      MCW_wildcards( ename , &nfile , &ffile ) ;  /* find matching files */
00608      if( nfile <= 0 ) continue ;                 /* no files found */
00609 
00610       /** add files we found to list **/
00611 
00612      fflist = (char **)realloc(fflist,sizeof(char *)*(num_file+nfile));
00613      for( ii=0 ; ii < nfile ; ii++ )
00614        if( strstr(ffile[ii],"face_wildman.jpg") != NULL )  /* 20 May 2005 */
00615          remove(ffile[ii]) ;
00616        else
00617          fflist[num_file++] = strdup(ffile[ii]) ;
00618 
00619      MCW_free_wildcards( nfile , ffile ) ;  /* toss the junk */
00620 
00621    } while( epos < ll ) ;  /* scan until 'epos' is after end of epath */
00622 
00623    free(elocal) ; free(ename) ;             /* toss more junk */
00624 
00625    if( num_file == 0 ) num_file = -1 ;      /* flag that nothing was found */
00626    *fname = fflist ;                        /* list of found files */
00627    RETURN(num_file) ;                       /* return number of files found */
00628 }

int AFNI_find_todays_face void    [static]
 

Definition at line 761 of file afni_splash.c.

References mday::day, fname_face, mday::label, mday::mon, NTMAX, num_face, and tt.

Referenced by AFNI_splashup().

00762 {
00763    time_t tt ;
00764    struct tm *lt ;
00765    int ii , ntar , dd , tar[NTMAX] ;
00766    static int iold=-1 ;
00767    char *flab ;
00768 
00769    if( num_face <= 0 || fname_face == NULL ) return -1 ;  /* bad */
00770    if( num_face == 1 )                       return  0 ;  /* duh */
00771 
00772    /* find if this day is in the 'facials' list */
00773 
00774    tt = time(NULL) ;         /* seconds since 01 Jan 1970 */
00775    lt = localtime( &tt ) ;   /* break into pieces */
00776    for( ii=0 ; facials[ii].day > 0 ; ii++ )
00777      if( facials[ii].mon == lt->tm_mon+1 && facials[ii].day == lt->tm_mday ) break ;
00778    if( facials[ii].day <= 0 ) return -1 ;  /* today is not special */
00779 
00780    /* OK, find face names that match */
00781 
00782    flab = facials[ii].label ;
00783 
00784    for( ntar=dd=0 ; ntar < NTMAX && dd < num_face ; dd++ )
00785      if( strstr(fname_face[dd],flab) != NULL ) tar[ntar++] = dd ;
00786 
00787    if( ntar == 0 ) return -1 ;
00788    if( ntar == 1 ) return tar[0] ;
00789    ii = (lrand48()>>8) % ntar ;
00790    if( ii == iold ) ii = (ii+1)%ntar ;
00791    iold = ii ; return tar[ii] ;
00792 }

void AFNI_run_script_CB Widget    w,
XtPointer    cd,
XtPointer    cbs
 

Get a filename to run as an AFNI script. 22 Jan 2003 - RWCox. -----------------------------------------------------------------------------

Definition at line 1709 of file afni_splash.c.

References AFNI_finalrun_script_CB(), ENTRY, MCW_choose_string(), AFNI_widget_set::picture, and Three_D_View::vwid.

01710 {
01711    Three_D_View *im3d = (Three_D_View *) cd ;
01712 
01713 ENTRY("AFNI_run_script_CB") ;
01714 
01715    MCW_choose_string( im3d->vwid->picture ,
01716                       "Enter AFNI script filename:" ,
01717                       NULL , AFNI_finalrun_script_CB , cd ) ;
01718    EXRETURN ;
01719 }

void AFNI_save_layout_CB Widget    w,
XtPointer    cd,
XtPointer    cbs
 

Definition at line 1406 of file afni_splash.c.

References AFNI_finalsave_layout_CB(), ENTRY, MCW_choose_string(), AFNI_widget_set::picture, and Three_D_View::vwid.

01407 {
01408    Three_D_View *im3d = (Three_D_View *) cd ;
01409 
01410 ENTRY("AFNI_save_layout_CB") ;
01411 
01412    MCW_choose_string( im3d->vwid->picture ,
01413                       "Layout filename [blank => .afni.startup_script]:" ,
01414                       NULL , AFNI_finalsave_layout_CB , cd ) ;
01415    EXRETURN ;
01416 }

void AFNI_splashdown void   
 

Definition at line 58 of file afni_splash.c.

References COX_clock_time(), do_write, drive_MCW_imseq(), ENTRY, getenv(), handle, isqDR_reimage, mri_data_pointer(), mri_free(), myXtFree, MRI_IMAGE::nvox, MRI_IMAGE::pixel_size, PLUGIN_impopper::seq, SPLASH_popup_image(), and strtod().

Referenced by AFNI_splashup(), AFNI_startup_layout_CB(), and MAIN_workprocess().

00059 {
00060    PLUGIN_impopper *ppp = (PLUGIN_impopper *) handle ;
00061 
00062 ENTRY("AFNI_splashdown") ;
00063 
00064    if( handle != NULL ){
00065 #ifdef USE_FADING
00066       float max_splash = 3.0 ;
00067       char *hh = getenv("AFNI_SPLASHTIME") ;
00068       if( hh != NULL ) max_splash = strtod(hh,NULL) ;
00069       if( max_splash > 0.0 ){
00070          if( imspl != NULL ){  /* fade gently away */
00071             byte *bspl ; int ii , nv , kk ; double et ;
00072             bspl = mri_data_pointer(imspl) ;
00073             nv   = (imspl->pixel_size) * (imspl->nvox) ;
00074             et   = COX_clock_time() ;
00075             do_write = 0 ;
00076             for( kk=0 ; kk < 10 ; kk++ ){
00077 #if 0
00078                for( ii=0 ; ii < nv ; ii++ ) bspl[ii] *= 0.92 ;
00079 #else
00080                for( ii=0 ; ii < nv ; ii++ ) bspl[ii] = (15*bspl[ii]) >> 4 ;
00081 #endif
00082                SPLASH_popup_image(handle,imspl) ;
00083                drive_MCW_imseq( ppp->seq , isqDR_reimage , (XtPointer) 0 ) ;
00084                if( COX_clock_time()-et > 2.1 ) break ;
00085             }
00086          }
00087       }
00088 #endif
00089       SPLASH_popup_image(handle,NULL); myXtFree(handle) ; /* get rid of window */
00090    }
00091    mri_free(imspl) ; imspl = NULL ;
00092    do_write = ( (lrand48() >> 8) % 3 == 0 ) ? 2 : 1 ;
00093    EXRETURN ;
00094 }

void AFNI_splashraise void   
 

Definition at line 46 of file afni_splash.c.

References handle, ISQ_REALZ, PLUGIN_impopper::seq, and MCW_imseq::wtop.

Referenced by AFNI_startup_layout_CB().

00046                                           : bring splash window to the top */
00047 {
00048    PLUGIN_impopper *ppp = (PLUGIN_impopper *) handle ;
00049 
00050    if( ppp != NULL && ISQ_REALZ(ppp->seq) )
00051       XMapRaised( XtDisplay(ppp->seq->wtop) , XtWindow(ppp->seq->wtop) ) ;
00052 
00053    return ;
00054 }

void AFNI_splashup void   
 

Definition at line 105 of file afni_splash.c.

References AFNI_find_jpegs(), AFNI_find_todays_face(), AFNI_splashdown(), AFNI_library_type::dc, drive_MCW_imseq(), ENTRY, first_splash, fname_face, fname_splash, getenv(), GLOBAL_library, handle, MCW_DC::height, ISQ_options::improc_code, ISQ_IMPROC_SHARP, ISQ_REALZ, isqDR_clearstat, isqDR_getoptions, isqDR_imhelptext, isqDR_offwid, isqDR_onoffwid, isqDR_options, isqDR_realize, isqDR_reimage, isqDR_title, IXOVER, JYOVER, malloc, MAX_XOVER, MAX_YOVER, mri_free(), mri_invert_inplace(), mri_overlay_2D(), mri_read_stuff(), mri_resize(), NC_blank, NC_facetitle, NLINE_facetitle, NORMAL_cursorize, NOVER, num_face, num_splash, MRI_IMAGE::nx, NX_facetitle, NX_TOPOVER, MRI_IMAGE::ny, NY_facetitle, NY_TOPOVER, PLUTO_popup_open, reload_DC_colordef(), PLUGIN_impopper::seq, SPLASH_decode26(), SPLASH_decodexx(), SPLASH_popup_image(), STATUS, MCW_DC::width, MCW_imseq::wimage, and MCW_imseq::wtop.

Referenced by MAIN_workprocess().

00106 {
00107    PLUGIN_impopper *ppp ;
00108    MRI_IMAGE *imov ;
00109    int    dd,ee ;
00110    char   bb ;
00111    byte *bspl ;
00112    int   sxx,syy ;
00113    char *sen ;
00114    static int ncall=0 , nov , dnov , nm=-1 ;
00115 
00116 ENTRY("AFNI_splashup") ;
00117 
00118    /*--- create splash image ---*/
00119 
00120    if( ! PLUTO_popup_open(handle) ){
00121 
00122       int nxov,nyov,ff ;
00123 
00124       /* get some fun stuff, first time in */
00125 
00126       if( ncall == 0 ){
00127         num_face   = AFNI_find_jpegs( "face_"   , &fname_face   ) ;
00128         num_splash = AFNI_find_jpegs( "splash_" , &fname_splash ) ;
00129         if( num_splash > 0 ){
00130           int np ;
00131           for( np=0 ; np < num_splash ; np++ )
00132             if( strstr(fname_splash[np],"sscc") != NULL ) break ;
00133           if( np < num_splash ) first_splash = np ;
00134 #if 0
00135           for( np=0 ; np < num_splash ; np++ )
00136            fprintf(stderr,"SPLASH: %s\n",fname_splash[np]) ;
00137 #endif
00138         }
00139       }
00140 
00141       /* create basic splash image */
00142 
00143       mri_free(imspl) ;
00144       imspl = SPLASH_decodexx( NX_blank, NY_blank, NLINE_blank, NC_blank,
00145                                RMAP_blank,GMAP_blank,BMAP_blank, BAR_blank ) ;
00146 
00147       if( ncall==0 ){                           /* initialize random */
00148         nov  =    (lrand48() >> 8) % NOVER  ;   /* sub-image overlay */
00149         dnov = 2*((lrand48() >> 8) % 2) - 1 ;   /* index & direction */
00150       }
00151 
00152       /* Facial overlay: */
00153       /*  if have face jpegs, use them; else, use builtin faces [28 Mar 2003] */
00154 
00155       imov = NULL ; ff = 0 ;
00156       if( num_face > 0 ){                       /* external face_*.jpg files */
00157         static int *dold=NULL, ndold=0 ; int qq ;
00158         dd = AFNI_find_todays_face() ;               /* 30 Mar 2005: find a */
00159         if( dd >= 0 ){ ff=-1; goto Have_dd; }     /* special face for today */
00160         if( ndold == 0 && num_face > 1 ){
00161           ndold = num_face/2 ;
00162           dold  = (int *) malloc(sizeof(int)*ndold) ;
00163           for( qq=0 ; qq < ndold ; qq++ ) dold[qq] = -1 ;
00164         }
00165       Retry_dd:
00166         dd = (lrand48() >> 8) % num_face ;              /* pick random file */
00167         if( num_face > 1 ){                       /* check if used recently */
00168           for( qq=0 ; qq < ndold && dold[qq] != dd ; qq++ ) ;       /* nada */
00169           if( qq < ndold ) goto Retry_dd ;                    /* was recent */
00170           for( qq=1 ; qq < ndold ; qq++ )        /* wasn't, so save in list */
00171             dold[qq-1] = dold[qq] ;
00172           dold[ndold-1] = dd ;
00173         }
00174       Have_dd:
00175         imov = mri_read_stuff( fname_face[dd] ) ;              /* read file */
00176         if( imov != NULL && (imov->nx > MAX_XOVER || imov->ny > MAX_YOVER) ){
00177           float xfac=MAX_XOVER/(float)(imov->nx),
00178                 yfac=MAX_YOVER/(float)(imov->ny) ;    /* rescale if too big */
00179           int nxnew,nynew ; MRI_IMAGE *imq ;
00180           if( xfac > yfac ) xfac = yfac ;
00181           nxnew = (int)(xfac*imov->nx) ; nynew = (int)(xfac*imov->ny) ;
00182           imq = mri_resize( imov , nxnew,nynew ) ;          /* kind of slow */
00183           mri_free(imov); imov = imq;        /* replace with rescaled image */
00184         }
00185         if( ff == 0 && imov != NULL ){       /* ff = 2 for me, 1 for everyone else */
00186           ff = (strstr(fname_face[dd],"_rwcox") != NULL) ? 2 : 1 ;
00187         }
00188       }
00189       if( imov == NULL ){                  /* if didn't get face jpeg above */
00190         nov  = (nov+dnov+NOVER) % NOVER ;
00191         imov = SPLASH_decode26( xover[nov], yover[nov], lover[nov], bover[nov] ) ;
00192       }
00193       nxov = imov->nx ; nyov = imov->ny ;          /* size of overlay image */
00194       dd = IXOVER + (MAX_XOVER-nxov)/2 ;          /* and location to put it */
00195       ee = JYOVER + (MAX_YOVER-nyov)/2 ;
00196       mri_overlay_2D( imspl, imov, dd,ee ); mri_free(imov);
00197       if( ff > 0 ){                             /* overlay title under face */
00198         imov = SPLASH_decodexx( NX_facetitle,NY_facetitle,NLINE_facetitle,
00199                                 NC_facetitle,RMAP_facetitle,
00200                                 RMAP_facetitle,RMAP_facetitle ,
00201                                 BAR_facetitle ) ;
00202         if( ff == 2 ) mri_invert_inplace( imov ) ;           /* for me only */
00203         dd = IXOVER + (MAX_XOVER-imov->nx)/2 ; ee += nyov+1 ;
00204         mri_overlay_2D( imspl, imov, dd,ee ) ; mri_free(imov) ;
00205       }
00206 
00207       /* possibly replace the splash image at the top [26 Nov 2003] */
00208 
00209       if( (ncall > 0 || first_splash >= 0) && num_splash > 0 &&
00210           (ncall <= num_splash  || ((lrand48() >> 8 ) % 7) != 0) ){
00211 
00212         static int np=-1 , dp ;
00213         if( np < 0 ){
00214           np = (first_splash >= 0) ? first_splash
00215                                    : (lrand48() >> 8) % num_splash ;
00216           dp = 2*((lrand48() >> 8)%2)-1 ;  /* -1 or +1 */
00217         } else
00218           np = (np+dp+num_splash)%(num_splash) ;
00219         imov = mri_read_stuff( fname_splash[np] ) ;
00220         if( imov != NULL ){
00221 #if 0
00222           reload_DC_colordef( GLOBAL_library.dc ) ;
00223           if( imov->nx != NX_TOPOVER || imov->ny != NY_TOPOVER ){
00224             MRI_IMAGE *imq ;
00225             imq = mri_resize( imov , NX_TOPOVER,NY_TOPOVER ) ; /* kind of slow */
00226             if( imq != NULL ){ mri_free(imov); imov = imq; }
00227           }
00228 #endif
00229           STATUS("overlaying splash image") ;
00230           mri_overlay_2D( imspl , imov , 0,0 ) ;
00231           mri_free(imov) ;
00232         }
00233 
00234       } /* end of replacing splash image */
00235 
00236       /*-- show the image at last! --*/
00237 
00238       handle = SPLASH_popup_image( handle, imspl ) ;
00239 #ifndef USE_FADING
00240       mri_free(imspl) ; imspl = NULL ;
00241 #endif
00242 
00243       /* modify image display properties */
00244 
00245       ppp = (PLUGIN_impopper *) handle ;
00246 
00247       if( ncall==0 ){ dd = MWM_DECOR_BORDER ;
00248                       ee = 0 ;
00249       } else        { dd = MWM_DECOR_BORDER | MWM_DECOR_TITLE | MWM_DECOR_MENU ;
00250                       ee = MWM_FUNC_MOVE | MWM_FUNC_CLOSE ;
00251       }
00252 
00253       /* 21 Sep 2000 -- allow user to control splash position */
00254 
00255       sxx = (GLOBAL_library.dc->width-NX_blank)/2 ;
00256       syy = 100 ;
00257       sen = getenv("AFNI_SPLASH_XY") ;
00258       if( sen != NULL ){
00259          int n,x,y ;
00260          n = sscanf(sen,"%d:%d",&x,&y) ;
00261          if( n == 2 && x >= 0 && x < GLOBAL_library.dc->width &&
00262                        y >= 0 && y < GLOBAL_library.dc->height  ){
00263 
00264             sxx = x ; syy = y ;
00265          }
00266       }
00267 
00268       XtVaSetValues( ppp->seq->wtop ,
00269                        XmNx , sxx ,
00270                        XmNy , syy ,
00271                        XmNmwmDecorations , dd ,
00272                        XmNmwmFunctions   , ee ,
00273                   /**  XmNoverrideRedirect , True , **/
00274                      NULL ) ;
00275 
00276       /* actually popup image display */
00277 
00278       drive_MCW_imseq( ppp->seq , isqDR_realize   , NULL                     ) ;
00279       drive_MCW_imseq( ppp->seq , isqDR_onoffwid  , (XtPointer) isqDR_offwid ) ;
00280       drive_MCW_imseq( ppp->seq , isqDR_clearstat , NULL                     ) ;
00281 #if 0
00282       drive_MCW_imseq( ppp->seq , isqDR_reimage   , (XtPointer) 0            ) ;
00283 #endif
00284 
00285       NORMAL_cursorize( ppp->seq->wimage ) ; /* 07 Dec 2001 */
00286 
00287       /* some super-frivolities */
00288 
00289       if( ncall==0 ){
00290          drive_MCW_imseq( ppp->seq , isqDR_title , (XtPointer) "AFNI!" ) ;
00291          drive_MCW_imseq( ppp->seq , isqDR_imhelptext,
00292                           (XtPointer)
00293                            " \n"
00294                            " Thou art indeed just, Lord, if I contend\n"
00295                            "  With thee; but, sir, so what I plead is just.\n"
00296                            "  Why do sinners' ways prosper? and why must\n"
00297                            "  Disappointment all I endeavour end?\n"
00298                            " Wert thou my enemy, O thou my friend,\n"
00299                            "  How wouldst thou worse, I wonder, than thou dost\n"
00300                            "  Defeat, thwart me? Oh, the sots and thralls of lust\n"
00301                            "  Do in spare hours more thrive than I that spend,\n"
00302                            "  Sir, life upon thy cause. See, banks and brakes\n"
00303                            "  Now, leaved how thick! laced they are again\n"
00304                            "  With fretty chervil, look, and fresh wind shakes\n"
00305                            "  Them; birds build -- but not I build; no, but strain,\n"
00306                            "  Time's eunuch, and not breed one work that wakes.\n"
00307                            " Mine, O thou lord of life, send my roots rain.\n"
00308                         ) ;
00309 
00310 #if 0
00311         {                      /* 21 Jun 2000 -- turn sharpening on */
00312          ISQ_options opt ;
00313          drive_MCW_imseq( ppp->seq , isqDR_getoptions , (XtPointer) &opt ) ;
00314          opt.improc_code |= ISQ_IMPROC_SHARP ;
00315          drive_MCW_imseq( ppp->seq , isqDR_options    , (XtPointer) &opt ) ;
00316         }
00317 #endif
00318       }
00319 
00320    /*--- destroy splash image ---*/
00321 
00322    } else {
00323       ppp = (PLUGIN_impopper *) handle ;
00324 
00325       /* bring splash window to the top */
00326 
00327       if( ISQ_REALZ(ppp->seq) )
00328          XMapRaised( XtDisplay(ppp->seq->wtop) , XtWindow(ppp->seq->wtop) ) ;
00329 
00330       AFNI_splashdown() ;  /* off with their heads */
00331    }
00332 
00333    ncall++ ; EXRETURN ;
00334 }

void AFNI_startup_layout_CB XtPointer    client_data,
XtIntervalId *    id
 

Definition at line 886 of file afni_splash.c.

References ACTIVATE_MASK, AFNI_crosshair_visible_CB(), AFNI_decode_geom(), AFNI_make_controller(), AFNI_splashdown(), AFNI_splashraise(), AFNI_suck_file(), AFNI_view_xyz_CB(), AFNI_XHAIRS_SINGLE, AV_assign_ival(), client_data, AFNI_library_type::controllers, AFNI_imaging_widgets::crosshair_av, Three_D_View::dc, DC_find_overlay_color(), drive_MCW_grapher(), drive_MCW_imseq(), ENTRY, MCW_grapher::fdw_graph, FRAC_MIN, free, Three_D_View::g123, Three_D_View::g231, Three_D_View::g312, get_linbuf(), GLOBAL_library, graDR_setmatrix, graDR_setpinnum, AFNI_imaging_widgets::graph_xyz_pb, AFNI_imaging_widgets::graph_yzx_pb, AFNI_imaging_widgets::graph_zxy_pb, AFNI_widget_set::imag, AFNI_imaging_widgets::image_xyz_pb, AFNI_imaging_widgets::image_yzx_pb, AFNI_imaging_widgets::image_zxy_pb, isq, isqDR_setifrac, isqDR_setmontage, ISTARRED, linbuf, malloc, MAX_CONTROLLERS, MONT_NMAX, mp, my_getenv(), NGMAX, NLBUF, AFNI_widget_set::nplugbut, NULL_MASK, NWBUF, PLUG_startup_plugin_CB(), AFNI_widget_set::plugbut, AFNI_widget_set::plugint, AFNI_widget_set::pluglab, Three_D_View::s123, Three_D_View::s231, Three_D_View::s312, STATUS, strtod(), AFNI_widget_set::top_shell, Three_D_View::vwid, MCW_imseq::wtop, and YESSISH.

00887 {
00888    char *fname = (char *) client_data ;
00889    int   nbuf , ii , goslow ;
00890    char *fbuf , *fptr ;
00891    char lword[NWBUF] ;
00892 
00893    int  controller_mask[MAX_CONTROLLERS]           ;
00894    char controller_geom[MAX_CONTROLLERS][NGMAX]    ;
00895 
00896    int  image_mask     [MAX_CONTROLLERS][3]        ;
00897    char image_geom     [MAX_CONTROLLERS][3][NGMAX] ;
00898    float image_ifrac   [MAX_CONTROLLERS][3]        ;
00899    char image_mont     [MAX_CONTROLLERS][3][NGMAX] ;
00900 
00901    int  graph_mask     [MAX_CONTROLLERS][3]        ;
00902    char graph_geom     [MAX_CONTROLLERS][3][NGMAX] ;
00903    int  graph_matrix   [MAX_CONTROLLERS][3]        ;
00904    int  graph_pinnum   [MAX_CONTROLLERS][3]        ;
00905 
00906    int cc,ww , gww,ghh,gxx,gyy ;
00907    char *e_asp ;
00908    int    e_turnoff=0 ;
00909 
00910    int *  plugin_cont = NULL ;
00911    char **plugin_geom = NULL ;
00912    int ipl ;
00913 
00914    Three_D_View *im3d         = GLOBAL_library.controllers[0] ; /* already open */
00915 
00916 #ifdef ALLOW_PLUGINS
00917    int      npbut              = im3d->vwid->nplugbut ;      /* how many plugins */
00918    char **  pluglab            = im3d->vwid->pluglab ;       /* their labels     */
00919    PLUGIN_interface ** plugint = im3d->vwid->plugint ;       /* their interfaces */
00920 #endif
00921 
00922 ENTRY("AFNI_startup_layout_CB") ;
00923 
00924    if( fname == NULL || fname[0] == '\0' ){ AFNI_splashdown(); EXRETURN; }
00925 
00926    /* read layout file */
00927 
00928    fbuf = AFNI_suck_file(fname); if( fbuf == NULL ){ AFNI_splashdown(); EXRETURN; }
00929    nbuf = strlen(fbuf) ;         if( nbuf == 0    ){ AFNI_splashdown(); EXRETURN; }
00930 
00931    fptr = fbuf ; linbuf = (char *) malloc(sizeof(char)*(NLBUF+1)) ;
00932 
00933 if(PRINT_TRACING)
00934 { char str[256] ;
00935   sprintf(str,"Reading AFNI layout file = %s (%d bytes)",fname,nbuf) ;
00936   STATUS(str);}
00937 
00938    /*-- read lines until find "***LAYOUT" --*/
00939 
00940    do {
00941       ii = get_linbuf( fptr ) ; fptr += ii ;
00942       if( linbuf[0] == '\0' || fptr-fbuf >= nbuf ){  /* didn't find it */
00943 STATUS("no ***LAYOUT found") ;
00944          fprintf(stderr,"\n*** LAYOUT not found in layout file %s\n",fname);
00945          free(fbuf); free(linbuf); AFNI_splashdown(); EXRETURN;
00946       }
00947    } while( strncmp(linbuf,"***LAYOUT",9) != 0 ) ;
00948 
00949    goslow = (strstr(linbuf,"slow") != NULL) ;  /* slow down the startup? */
00950 
00951    /*-- initialize controllers, images, and graphs to do nothing --*/
00952 
00953    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){
00954       controller_geom[cc][0] =
00955        image_geom[cc][0][0] = image_geom[cc][1][0] = image_geom[cc][2][0] =
00956        image_mont[cc][0][0] = image_mont[cc][1][0] = image_mont[cc][2][0] =
00957        graph_geom[cc][0][0] = graph_geom[cc][1][0] = graph_geom[cc][1][0] = '\0' ;
00958 
00959       controller_mask[cc] =
00960        image_mask[cc][0] = image_mask[cc][1] = image_mask[cc][2] =
00961        graph_mask[cc][0] = graph_mask[cc][1] = graph_mask[cc][2] = NULL_MASK ;
00962 
00963       image_ifrac[cc][0] = image_ifrac[cc][1] = image_ifrac[cc][2] = 0.0 ;
00964 
00965       graph_pinnum[cc][0] = graph_pinnum[cc][1] = graph_pinnum[cc][2] =
00966       graph_matrix[cc][0] = graph_matrix[cc][1] = graph_matrix[cc][2] = 0 ;
00967    }
00968 
00969    /*-- initialize list of plugins --*/
00970 
00971 #ifdef ALLOW_PLUGINS
00972    if( npbut > 0 ){
00973       plugin_cont = (int *)   malloc(sizeof(int)   *npbut) ;
00974       plugin_geom = (char **) malloc(sizeof(char *)*npbut) ;
00975       for( ipl=0 ; ipl < npbut ; ipl++ ){
00976          plugin_cont[ipl] = -1 ;      /* controller index to start it with */
00977          plugin_geom[ipl] = NULL ;    /* geometry string to start it with */
00978       }
00979    }
00980 #endif
00981 
00982    /*-- read and process further lines until a "***" line is found, or the end --*/
00983 
00984    do {
00985       ii = get_linbuf( fptr ) ; fptr += ii ;
00986       if( linbuf[0] == '\0' || ISTARRED(linbuf) ) break ;  /* end of layout commands */
00987 
00988       /*-- first character of command determines controller --*/
00989 
00990       cc = linbuf[0] - 'A' ;
00991       if( cc < 0 || cc >= MAX_CONTROLLERS ) continue ;     /* illegal value */
00992 
00993       controller_mask[cc] |= ACTIVATE_MASK ;               /* must activate this one */
00994 
00995       if( linbuf[1] == '\0' ) continue;                    /* nothing more to do */
00996 
00997       /*-- do controller options --*/
00998 
00999       if( isspace(linbuf[1]) ){
01000 
01001          int jj=1 , nn ;
01002 
01003          do {                                              /* scan option words */
01004             nn = 0 ; lword[0] = '\0' ;
01005             sscanf(linbuf+jj,"%s%n",lword,&nn) ;
01006             if( nn == 0 || lword[0] == '\0' ) break ;        /* no more options */
01007             jj += nn ;                                       /* position for next word */
01008 
01009             if( strncmp(lword,"geom=",5) == 0 ){             /* geom= */
01010                strcpy(controller_geom[cc],lword+5) ;
01011             } else {                                         /* ILLEGAL */
01012                fprintf(stderr,"\n** Illegal LAYOUT controller option: %s\n",lword) ;
01013                continue ;
01014             }
01015          } while(1) ;
01016 
01017       /*-- do sub-windows (images and graphs) --*/
01018 
01019       } else if( linbuf[1] == '.' && strncmp(linbuf+1,".plugin.",8) != 0 ){
01020 
01021          int jj=2 , nn ;
01022 
01023          nn = 0 ; lword[0] = '\0' ;                          /* get window name */
01024          sscanf(linbuf+jj,"%s%n",lword,&nn) ;
01025          if( nn == 0 || lword[0] == '\0' ) continue ;        /* not present -> goto next line */
01026          jj += nn ;
01027 
01028               if( strncmp(lword,"axial"   ,5) == 0 ) ww = 0 ; /* get window orientation */
01029          else if( strncmp(lword,"sagittal",8) == 0 ) ww = 1 ;
01030          else if( strncmp(lword,"coronal" ,7) == 0 ) ww = 2 ;
01031          else {
01032             fprintf(stderr,"\n** Illegal LAYOUT sub-window line: %s\n",linbuf) ;
01033             continue ;
01034          }
01035 
01036          /*-- images --*/
01037 
01038          if( strstr(lword,"image") != NULL ){
01039 
01040             image_mask[cc][ww] |= ACTIVATE_MASK ;              /* mark to open */
01041 
01042             do {                                               /* scan option words */
01043                nn = 0 ; lword[0] = '\0' ;
01044                sscanf(linbuf+jj,"%s%n",lword,&nn) ;
01045                if( nn == 0 || lword[0] == '\0' ) break ;           /* no more options */
01046                jj += nn ;
01047 
01048                if( strncmp(lword,"geom=",5) == 0 ){                /* geom= */
01049                   strcpy(image_geom[cc][ww],lword+5) ;
01050                } else if( strncmp(lword,"ifrac=",6) == 0 ){        /* ifrac= */
01051                   image_ifrac[cc][ww] = strtod( lword+6 , NULL ) ;
01052                } else if( strncmp(lword,"mont=",5) == 0 ){         /* mont= */
01053                   strcpy(image_mont[cc][ww],lword+5) ;
01054                } else {
01055                   fprintf(stderr,"\n** Illegal LAYOUT image option: %s\n",lword) ;
01056                   continue ;
01057                }
01058             } while(1) ;
01059 
01060          /*-- graphs --*/
01061 
01062          } else if( strstr(lword,"graph") != NULL ){         /* a graph window */
01063 
01064             graph_mask[cc][ww] |= ACTIVATE_MASK ;              /* mark to open */
01065 
01066             do {                                               /* scan option words */
01067                nn = 0 ; lword[0] = '\0' ;
01068                sscanf(linbuf+jj,"%s%n",lword,&nn) ;
01069                if( nn == 0 || lword[0] == '\0' ) break ;           /* no more options */
01070                jj += nn ;
01071 
01072                if( strncmp(lword,"geom=",5) == 0 ){                /* geom= */
01073                   strcpy(graph_geom[cc][ww],lword+5) ;
01074                } else if( strncmp(lword,"matrix=",7) == 0 ){       /* matrix= */
01075                   graph_matrix[cc][ww] = (int) strtod( lword+7 , NULL ) ;
01076                } else if( strncmp(lword,"pinnum=",7) == 0 ){       /* pinnum= */
01077                   graph_pinnum[cc][ww] = (int) strtod( lword+7 , NULL ) ;
01078                } else {
01079                   fprintf(stderr,"\n** Illegal LAYOUT image option: %s\n",lword) ;
01080                   continue ;
01081                }
01082             } while(1) ;
01083 
01084          } else {                                            /* ILLEGAL */
01085             fprintf(stderr,"\n** Illegal LAYOUT line: %s\n",linbuf) ;
01086             continue ;
01087          }
01088 
01089       /*-- plugin windows --*/
01090 
01091       } else if( strncmp(linbuf+1,".plugin.",8) == 0 ){
01092 
01093 #ifdef ALLOW_PLUGINS
01094          char *pname = linbuf+9 ;
01095          int pl,ll,qq , jj,nn ;
01096 
01097          /* check name after .plugin. to match a plugin
01098             (but skip blanks in the plugin's label)     */
01099 
01100          pl = strlen(pname) ;
01101          if( pl < 1 ){
01102             fprintf(stderr,"\n** LAYOUT: unknown plugin line: %s\n",linbuf) ;
01103             continue ;
01104          }
01105 
01106          for( ipl=0 ; ipl < npbut ; ipl++ ){
01107             for( ll=strlen(pluglab[ipl]) ;   /* truncate trailing blanks */
01108                  ll >= 0 && isspace(pluglab[ipl][ll]) ; ll-- ) ; /* nada */
01109             if( ll < 0 ) continue ;                        /* all blanks?! ERROR */
01110             if( pl < ll ) continue ;                       /* too short to match */
01111             for( qq=0 ; qq < ll ; qq++ )                   /* match each nonblank */
01112                if( !isspace(pluglab[ipl][qq]) && pname[qq]!=pluglab[ipl][qq] ) break ;
01113             if( qq == ll ) break ;  /* found a match */
01114          }
01115          if( ipl >= npbut ){
01116             fprintf(stderr,"\n** LAYOUT: unknown plugin line: %s\n",linbuf) ;
01117 
01118             if( strncmp(pname,"RT Options",10) == 0 ||
01119                 strncmp(pname,"RT_Options",10) == 0   )
01120               fprintf(stderr,"**         [Realtime plugin is not active!]\n") ;
01121 
01122             continue ;
01123          }
01124 
01125          /* mark plugin to be turned on by this controller */
01126 
01127          if( plugin_cont[ipl] >= 0 )
01128             fprintf(stderr,"\n** LAYOUT: 2nd callout for this plugin: %s\n",linbuf) ;
01129 
01130          plugin_cont[ipl] = cc ;
01131          if( plugin_geom[ipl] != NULL ){  /* in case was set earlier */
01132             free(plugin_geom[ipl]) ; plugin_geom[ipl] = NULL ;
01133          }
01134 
01135          jj = 9+ll ;
01136          do {                                              /* scan option words */
01137             nn = 0 ; lword[0] = '\0' ;
01138             sscanf(linbuf+jj,"%s%n",lword,&nn) ;
01139             if( nn == 0 || lword[0] == '\0' ) break ;        /* no more options */
01140             jj += nn ;                                       /* position for next word */
01141 
01142             if( strncmp(lword,"geom=",5) == 0 ){             /* geom= */
01143                plugin_geom[ipl] = strdup(lword+5) ;
01144             } else {                                         /* ILLEGAL */
01145                fprintf(stderr,"\n** Illegal LAYOUT .plugin. option: %s\n",lword) ;
01146                continue ;
01147             }
01148          } while(1) ;
01149 #endif
01150 
01151       /*-- Quien Sabe? --*/
01152 
01153       } else {                                             /* bad news city, Arizona */
01154 
01155          fprintf(stderr,"\n** Illegal LAYOUT line: %s\n",linbuf) ;
01156          continue ;
01157       }
01158 
01159    } while(1) ; /* end of loop over layout command lines */
01160 
01161    free(fbuf) ; free(linbuf) ;  /* toss the trash */
01162 
01163    /*-- if any image geom commands are present,
01164         we might need to enforce the aspect ratio --*/
01165 
01166    e_asp = my_getenv("AFNI_ENFORCE_ASPECT") ;
01167    if( !YESSISH(e_asp) ){
01168      putenv("AFNI_ENFORCE_ASPECT=YES") ;
01169      e_turnoff = 1 ;
01170    }
01171 
01172    /*-- now do the commanded work --*/
01173 
01174    for( cc=0 ; cc < MAX_CONTROLLERS ; cc++ ){  /* loop over controllers */
01175 
01176       MCW_imseq   *isq ;
01177       MCW_grapher *gra ;
01178       int          singleton=0 ;
01179 
01180       /*-- determine if this controller is to be active --*/
01181 
01182       if( (controller_mask[cc] & ACTIVATE_MASK) == 0 ) continue ; /* skip */
01183 
01184       AFNI_make_controller( cc ) ;  /* open this controller (if not already open) */
01185 
01186       if( GLOBAL_library.controllers[cc] == NULL ) continue ;   /* ERROR */
01187 
01188       if(goslow || PRINT_TRACING) sleep(1);
01189 
01190       /* set location (ignore size part of geometry, if present) */
01191 
01192       if( controller_geom[cc][0] != '\0' ){
01193          AFNI_decode_geom( controller_geom[cc] , &gww,&ghh,&gxx,&gyy ) ;
01194          if( gxx >= 0 && gyy >= 0 )
01195             XtVaSetValues( GLOBAL_library.controllers[cc]->vwid->top_shell ,
01196                            XmNx , gxx , XmNy , gyy , NULL ) ;
01197       }
01198 
01199       AFNI_splashraise() ;
01200 
01201       if(goslow || PRINT_TRACING) sleep(1);
01202 
01203       /*-- loop over image windows for this controller --*/
01204 
01205       for( ww=0 ; ww < 3 ; ww++ ){
01206 
01207          /* determine if this image is to be activated */
01208 
01209          if( (image_mask[cc][ww] & ACTIVATE_MASK) == 0 ) continue ;  /* skip */
01210 
01211          /* simulate the button press */
01212 
01213          AFNI_view_xyz_CB( (ww == 0) ? GLOBAL_library.controllers[cc]->vwid->imag->image_xyz_pb
01214                           :(ww == 1) ? GLOBAL_library.controllers[cc]->vwid->imag->image_yzx_pb
01215                           :            GLOBAL_library.controllers[cc]->vwid->imag->image_zxy_pb ,
01216                           GLOBAL_library.controllers[cc] , NULL ) ;
01217 
01218          isq = (ww == 0) ? GLOBAL_library.controllers[cc]->s123     /* get the image */
01219               :(ww == 1) ? GLOBAL_library.controllers[cc]->s231     /* viewer struct */
01220               :            GLOBAL_library.controllers[cc]->s312 ;
01221 
01222          if( isq == NULL ) continue ;   /* ERROR */
01223 
01224          if(goslow || PRINT_TRACING) sleep(1);
01225 
01226          /* change the image fraction? */
01227 
01228          if( image_ifrac[cc][ww] >= FRAC_MIN && image_ifrac[cc][ww] <= 1.0 ){
01229 
01230             drive_MCW_imseq( isq , isqDR_setifrac , (XtPointer) &(image_ifrac[cc][ww]) ) ;
01231 
01232             if(goslow || PRINT_TRACING) sleep(1);
01233          }
01234 
01235          /* change the image montage layout? */
01236 
01237          if( image_mont[cc][ww][0] != '\0' ){  /* decode montage WxH[:spacing[:gap[:color]]] */
01238             int mww=-1 , mhh=-1 , msp=-1 , mgap=-1 , nn ;
01239             char mcol[128] = "\0" ;
01240 
01241             nn = sscanf( image_mont[cc][ww] , "%dx%d:%d:%d:%s" , &mww,&mhh,&msp,&mgap,mcol ) ;
01242 
01243             if( nn >= 2 && mww >= 1 && mww <= MONT_NMAX && mhh >= 1 && mhh <= MONT_NMAX ){
01244                int mp[5] ;
01245                mp[0] = mww ; mp[1] = mhh ; mp[2] = msp ; mp[3] = mgap ;
01246                mp[4] = DC_find_overlay_color(GLOBAL_library.controllers[cc]->dc,mcol);
01247                drive_MCW_imseq( isq , isqDR_setmontage , (XtPointer) mp ) ;
01248 
01249                if( msp == 1 ) singleton++ ;
01250 
01251                if(goslow || PRINT_TRACING) sleep(1);
01252             }
01253          }
01254 
01255          /* change the image geometry? */
01256 
01257          if( image_geom[cc][ww][0] != '\0' ){
01258             AFNI_decode_geom( image_geom[cc][ww] , &gww,&ghh,&gxx,&gyy ) ;
01259             if( gxx >= 0 && gyy >= 0 )
01260                XtVaSetValues( isq->wtop , XmNx , gxx , XmNy , gyy , NULL ) ;
01261             if( gww > 0 && ghh > 0 )
01262                XtVaSetValues( isq->wtop , XmNwidth , gww , XmNheight , ghh , NULL ) ;
01263 
01264                if(goslow || PRINT_TRACING) sleep(1);
01265          }
01266 
01267          AFNI_splashraise() ;
01268 
01269       } /* end of loop over images */
01270 
01271       /* 11 Oct 2000: change crosshairs if any mont spacing=1 */
01272 
01273       if( singleton ){
01274          AV_assign_ival(
01275            GLOBAL_library.controllers[cc]->vwid->imag->crosshair_av ,
01276            AFNI_XHAIRS_SINGLE ) ;
01277 
01278          AFNI_crosshair_visible_CB(
01279            GLOBAL_library.controllers[cc]->vwid->imag->crosshair_av ,
01280            GLOBAL_library.controllers[cc] ) ;
01281       }
01282 
01283       /*-- loop over graphs --*/
01284 
01285       for( ww=0 ; ww < 3 ; ww++ ){
01286 
01287          /* is this graph to be opened? */
01288 
01289          if( (graph_mask[cc][ww] & ACTIVATE_MASK) == 0 ) continue ; /* skip */
01290 
01291          /* simulate the button press */
01292 
01293          AFNI_view_xyz_CB( (ww == 0) ? GLOBAL_library.controllers[cc]->vwid->imag->graph_xyz_pb
01294                           :(ww == 1) ? GLOBAL_library.controllers[cc]->vwid->imag->graph_yzx_pb
01295                           :            GLOBAL_library.controllers[cc]->vwid->imag->graph_zxy_pb ,
01296                           GLOBAL_library.controllers[cc] , NULL ) ;
01297 
01298          gra = (ww == 0) ? GLOBAL_library.controllers[cc]->g123    /* get the graph */
01299               :(ww == 1) ? GLOBAL_library.controllers[cc]->g231    /* viewer struct */
01300               :            GLOBAL_library.controllers[cc]->g312 ;
01301 
01302          if( gra == NULL ) continue ;   /* ERROR */
01303 
01304          if(goslow || PRINT_TRACING) sleep(1);
01305 
01306          /* change the graph matrix (i.e., how many sub-graphs)? */
01307 
01308          if( graph_matrix[cc][ww] > 0 ){
01309             drive_MCW_grapher( gra , graDR_setmatrix , (XtPointer) graph_matrix[cc][ww] ) ;
01310             if(goslow || PRINT_TRACING) sleep(1);
01311          }
01312 
01313          /* make the graph length pinned? */
01314 
01315          if( graph_pinnum[cc][ww] > 1 ){
01316            drive_MCW_grapher( gra, graDR_setpinnum, (XtPointer)graph_pinnum[cc][ww] );
01317            if(goslow || PRINT_TRACING) sleep(1);
01318          }
01319 
01320          /* change the graph window geometry? */
01321 
01322          if( graph_geom[cc][ww][0] != '\0' ){
01323             AFNI_decode_geom( graph_geom[cc][ww] , &gww,&ghh,&gxx,&gyy ) ;
01324             if( gxx >= 0 && gyy >= 0 )
01325                XtVaSetValues( gra->fdw_graph , XmNx , gxx , XmNy , gyy , NULL ) ;
01326             if( gww > 0 && ghh > 0 )
01327                XtVaSetValues( gra->fdw_graph , XmNwidth , gww , XmNheight , ghh , NULL ) ;
01328             if(goslow || PRINT_TRACING) sleep(1);
01329          }
01330 
01331          AFNI_splashraise() ;
01332 
01333       } /* end of loop over graphs */
01334 
01335 #if 0
01336       XmUpdateDisplay( im3d->vwid->top_shell ) ;
01337 #endif
01338 
01339    } /* end of loop over controllers */
01340 
01341 #ifdef ALLOW_PLUGINS
01342    /*-- now loop over plugins --*/
01343 
01344    for( ipl=0 ; ipl < npbut ; ipl++ ){
01345 
01346       cc = plugin_cont[ipl] ; if( cc < 0 ) continue ;
01347 
01348       if( GLOBAL_library.controllers[cc] == NULL ) continue ;  /* ERROR */
01349 
01350       PLUG_startup_plugin_CB( GLOBAL_library.controllers[cc]->vwid->plugbut[ipl] ,
01351                               GLOBAL_library.controllers[cc]->vwid->plugint[ipl] ,
01352                               NULL ) ;
01353 
01354       if(goslow || PRINT_TRACING) sleep(1);
01355 
01356       /* 13 Nov 2001: don't check interface widgets for customized plugins */
01357 
01358       if( GLOBAL_library.controllers[cc]->vwid->plugint[ipl]->call_method == PLUGIN_CALL_IMMEDIATELY )
01359         continue ;
01360 
01361       /* check interface widgets to see if plugin opened */
01362 
01363       if( GLOBAL_library.controllers[cc]->vwid->plugint[ipl]->wid        == NULL ||
01364           GLOBAL_library.controllers[cc]->vwid->plugint[ipl]->wid->shell == NULL   ){
01365 
01366          fprintf(stderr,"\n** LAYOUT: couldn't start plugin %s\n",pluglab[ipl]) ;
01367          continue ;
01368       }
01369 
01370       /* set the location of the interface widgets */
01371 
01372       if( plugin_geom[ipl] != NULL ){
01373             AFNI_decode_geom( plugin_geom[ipl] , &gww,&ghh,&gxx,&gyy ) ;
01374             if( gxx >= 0 && gyy >= 0 ){
01375                XtVaSetValues(
01376                   GLOBAL_library.controllers[cc]->vwid->plugint[ipl]->wid->shell,
01377                   XmNx , gxx , XmNy , gyy , NULL ) ;
01378                if(goslow || PRINT_TRACING) sleep(1);
01379             }
01380       }
01381 
01382       AFNI_splashraise() ;
01383 
01384    } /* end of loop over plugins */
01385 #endif
01386 
01387    /*--- done ---*/
01388 
01389 #ifdef ALLOW_PLUGINS
01390    if( npbut > 0 ){
01391       for( ipl=0 ; ipl < npbut ; ipl++ )
01392          if( plugin_geom[ipl] != NULL ) free(plugin_geom[ipl]) ;
01393       free(plugin_cont) ; free(plugin_geom) ;
01394    }
01395 #endif
01396 
01397    if( e_turnoff ) putenv("AFNI_ENFORCE_ASPECT=NO") ;
01398 
01399    AFNI_splashdown() ; EXRETURN ;
01400 }

void AFNI_startup_script_CB XtPointer    client_data,
XtIntervalId *    id
 

Run the startup script [21 Jan 2003].

Definition at line 1674 of file afni_splash.c.

References AFNI_driver(), AFNI_suck_file(), client_data, ENTRY, free, get_linbuf(), GLOBAL_library, AFNI_library_type::ignore_lock, linbuf, malloc, and NLBUF.

Referenced by AFNI_finalrun_script_CB().

01675 {
01676    char *fname = (char *)client_data ;
01677    char *fbuf , *fptr ;
01678    int ii , nbuf ;
01679 
01680 ENTRY("AFNI_startup_script_CB") ;
01681 
01682    if( fname == NULL ) EXRETURN ;
01683 
01684    if( strchr(fname,' ') != NULL ){  /* if contains a blank, */
01685      AFNI_driver(fname) ;            /* execute a single command */
01686      EXRETURN ;
01687    }
01688 
01689    fbuf = AFNI_suck_file(fname); if( fbuf == NULL ) EXRETURN ;
01690    nbuf = strlen(fbuf) ;         if( nbuf == 0    ) EXRETURN ;
01691 
01692    fptr = fbuf ; linbuf = (char *) malloc(sizeof(char)*(NLBUF+1)) ;
01693 
01694    GLOBAL_library.ignore_lock = 1 ;  /* 06 Feb 2004 */
01695 
01696    while(1){
01697      ii = get_linbuf( fptr ) ; fptr += ii ;
01698      if( linbuf[0] == '\0' || fptr-fbuf >= nbuf ){ free(linbuf); break; }
01699      AFNI_driver( linbuf ) ;
01700    }
01701 
01702    GLOBAL_library.ignore_lock = 0 ; EXRETURN ;
01703 }

int gcd int    m,
int    n
[static]
 

Definition at line 639 of file afni_splash.c.

Referenced by AFNI_faceup().

00639                                {
00640   while( m > 0 ){
00641     if( n > m ){ int t=m; m=n; n=t; } /* swap */
00642     m -= n;
00643   }
00644   return n;
00645 }

int get_linbuf char *    str [static]
 

Definition at line 820 of file afni_splash.c.

References linbuf, and NLBUF.

Referenced by AFNI_startup_layout_CB(), and AFNI_startup_script_CB().

00821 {
00822    int ii=0 , jj ;
00823 
00824    if( str == NULL || str[0] == '\0' ){ linbuf[0] = '\0'; return 0; }
00825 
00826    /* skip whitespace to find start of new line */
00827 
00828  SKIP_WHITESPACE:
00829    for( ; str[ii] != '\0' && isspace(str[ii]) ; ii++ ) ; /* nada */
00830 
00831    if( str[ii] == '\0' ){ linbuf[0] = '\0'; return ii; } /* at end of input */
00832 
00833    if( str[ii] == '!' || (str[ii]=='/' && str[ii+1]=='/') ){  /* skip comment */
00834       for( ; str[ii] != '\0' && str[ii] != '\n' ; ii++ ) ;    /* nada: skip to eol */
00835       goto SKIP_WHITESPACE ;                                  /* augh! a GOTO */
00836    }
00837 
00838    /* copy into linbuf */
00839 
00840    for( jj=0 ; jj < NLBUF      &&
00841                str[ii] != '\0' &&
00842                str[ii] != '\n' &&
00843                str[ii] != '!'  &&
00844                !(str[ii]=='/' && str[ii+1]=='/')
00845              ; ii++ , jj++                       ) linbuf[jj] = str[ii] ;
00846 
00847    linbuf[jj] = '\0' ; return ii ;
00848 }

MRI_IMAGE * SPLASH_decode26 int   ,
int   ,
int   ,
char **   
[static]
 

Definition at line 477 of file afni_splash.c.

References map26, and SPLASH_decodexx().

Referenced by AFNI_splashup().

00478 {
00479    return SPLASH_decodexx( nx, ny, nl, 26,map26,map26,map26,im26 ) ;
00480 }

MRI_IMAGE * SPLASH_decodexx int   ,
int   ,
int   ,
int   ,
byte  ,
byte  ,
byte  ,
char **   
[static]
 

Definition at line 491 of file afni_splash.c.

References alpha, ENTRY, map26, MMAX, mri_new(), MRI_RGB_PTR, MRI_IMAGE::nvox, and RETURN.

Referenced by AFNI_broutim_CB(), AFNI_splashup(), and SPLASH_decode26().

00494 {
00495    MRI_IMAGE *im ;
00496    byte *bim ;
00497    int ii,jj , cc,qq , dd,ee , kk ;
00498    char bb ;
00499    static int first=1 , ainv[256] ;
00500 
00501 ENTRY("SPLASH_decodexx") ;
00502 
00503    if( nmap == 0 ){                /* defaults from old to26.c program */
00504      nmap = 26 ;
00505      rmap = bmap = gmap = map26 ;
00506    }
00507 
00508    if( nx < 3       || ny < 3       || nl < 3 ||
00509        rmap == NULL || gmap == NULL ||
00510        bmap == NULL || imxx == NULL             ) RETURN(NULL) ;
00511 
00512    if( first ){
00513      for( ii=0 ; ii < 256 ; ii++ ) ainv[ii] = -1 ;
00514      for( ii=0 ; ii < MMAX ; ii++ ){
00515        bb = alpha[ii] ; ainv[bb] = ii ;
00516      }
00517      first = 0 ;
00518    }
00519 
00520    im  = mri_new( nx , ny , MRI_rgb ) ;
00521    bim = MRI_RGB_PTR(im) ;
00522 
00523    /* decode the RLE image data into a real image array */
00524 
00525    cc = qq = 0 ;
00526    for( ii=0 ; ii < 3*im->nvox && qq < nl ; ){
00527      bb = imxx[qq][cc++] ; if( bb == '\0' ) break ;
00528      jj = ainv[bb] ;
00529      if( jj >= 0 ){
00530        bim[ii++] = rmap[jj]; bim[ii++] = gmap[jj]; bim[ii++] = bmap[jj];
00531      } else {
00532        dd = bb - '0' ;
00533        bb = imxx[qq][cc++] ; if( bb == '\0' ) break ;
00534        jj = ainv[bb] ;
00535        for( ee=0 ; ee < dd && ii < 3*im->nvox ; ee++ ){
00536          bim[ii++] = rmap[jj]; bim[ii++] = gmap[jj]; bim[ii++] = bmap[jj];
00537        }
00538      }
00539      if( imxx[qq][cc] == '\0' ){ cc = 0 ; qq++ ; }
00540    }
00541 
00542    RETURN(im) ;
00543 }

XtPointer SPLASH_imseq_getim int    n,
int    type,
XtPointer    handle
[static]
 

XmNoverrideRedirect , True , *

Definition at line 341 of file afni_splash.c.

References AFNI_get_date_trivia(), AFNI_get_friend(), MCW_imseq_status::aux, create_memplot_surely(), do_write, ENTRY, get_active_memplot(), handle, PLUGIN_impopper::im, isqCR_getimage, isqCR_getmemplot, isqCR_getoverlay, isqCR_getqimage, isqCR_getstatus, mp, mri_copy(), mri_zeropad_2D(), myXtNew, MCW_imseq_status::num_series, MCW_imseq_status::num_total, MCW_imseq_status::parent, plotpak_pwritf(), RETURN, MCW_imseq_status::send_CB, set_color_memplot(), set_thick_memplot(), MCW_imseq_status::slice_proj, MCW_imseq_status::transforms0D, and MCW_imseq_status::transforms2D.

Referenced by SPLASH_popup_image().

00342 {
00343    PLUGIN_impopper *imp = (PLUGIN_impopper *) handle ;
00344 
00345 ENTRY("SPLASH_imseq_getim") ;
00346 
00347    if( imp == NULL ) RETURN(NULL) ;
00348 
00349    /*--- control info ---*/
00350 
00351    if( type == isqCR_getstatus ){
00352       MCW_imseq_status *stat = myXtNew( MCW_imseq_status ) ;
00353       stat->num_total  = 1 ;
00354       stat->num_series = 1 ;
00355       stat->send_CB    = PLUGIN_seq_send_CB ;
00356       stat->parent     = (XtPointer) imp  ;
00357       stat->aux        = NULL ;
00358 
00359       stat->transforms0D = NULL ;  /* 31 Jan 2002: remove all functions */
00360       stat->transforms2D = NULL ;
00361       stat->slice_proj   = NULL ;
00362 
00363       RETURN((XtPointer) stat) ;
00364    }
00365 
00366    /*--- no overlay ---*/
00367 
00368    if( type == isqCR_getoverlay ) RETURN(NULL) ;
00369 
00370    /*--- return a copy of the image
00371          (since the imseq will delete it when it is done) ---*/
00372 
00373    if( type == isqCR_getimage || type == isqCR_getqimage ){
00374       MRI_IMAGE *im = NULL ;
00375 #ifndef USE_WRITING
00376       if( imp->im != NULL ) im = mri_copy( imp->im ) ;
00377 #else
00378       if( imp->im != NULL ){
00379         if( do_write ) im = mri_zeropad_2D( 0,0,0,50 , imp->im ) ; /* 26 Feb 2001 */
00380         else           im = mri_copy( imp->im ) ;
00381       }
00382 #endif
00383       RETURN((XtPointer) im) ;
00384    }
00385 
00386 #ifdef USE_WRITING
00387    /*--- 26 Feb 2001: a line plot (for some more fun!)---*/
00388 
00389    if( do_write && type == isqCR_getmemplot ){
00390       int ii ;
00391       ii = create_memplot_surely("SPLASH memplot",1.0) ;
00392       if( ii == 0 ){
00393          MEM_plotdata *mp = get_active_memplot() ;
00394 
00395          set_thick_memplot(0.003) ;    /* slightly thick lines */
00396 
00397          if( do_write == 2 || 1 ){
00398            char *sf = AFNI_get_date_trivia() ;
00399            int   nn = strlen(sf) , ss=28 ;
00400            if( nn > 37 ) ss = (int)(28.0*37.0/nn) ;
00401            set_color_memplot(1.0,1.0,0.7) ;           /* whitish */
00402            plotpak_pwritf( 0.5,0.089 , "Today is:"  , 30 , 0 , 0 ) ;
00403            set_color_memplot(1.0,1.0,0.1) ;           /* yellow */
00404            plotpak_pwritf( 0.5,0.033 , sf           , ss , 0 , 0 ) ;
00405          } else {
00406            char *sf = AFNI_get_friend() ;
00407            char *mf = strstr(sf," for ") ;
00408            int    nn = strlen(sf) ;
00409            set_color_memplot(1.0,1.0,0.5) ;         /* orangish */
00410            if( nn < 36 || mf == NULL ){
00411               plotpak_pwritf( 0.5,0.060 , sf , 28 , 0 , 0 ) ;
00412            } else {
00413               *mf = '\0' ;
00414               plotpak_pwritf( 0.5,0.089 , sf  , 28 , 0 , 0 ) ;
00415               plotpak_pwritf( 0.5,0.033 , mf+1, 28 , 0 , 0 ) ;
00416            }
00417          }
00418          set_thick_memplot(0.0) ;
00419          RETURN((XtPointer)mp) ;  /* will be deleted by imseq */
00420       }
00421    }
00422 #endif
00423 
00424    RETURN(NULL) ; /* default action = return nothing */
00425 }

void * SPLASH_popup_image void *   ,
MRI_IMAGE  
[static]
 

Definition at line 431 of file afni_splash.c.

References AFNI_library_type::dc, drive_MCW_imseq(), ENTRY, GLOBAL_library, handle, PLUGIN_impopper::im, isqDR_destroy, mri_copy(), mri_free(), myXtNew, open_MCW_imseq(), RETURN, PLUGIN_impopper::seq, and SPLASH_imseq_getim().

Referenced by AFNI_splashdown(), and AFNI_splashup().

00432 {
00433    PLUGIN_impopper *imp = (PLUGIN_impopper *) handle ;
00434 
00435 ENTRY("SPLASH_popup_image") ;
00436 
00437    /*-- input image is NULL ==> popdown, if applicable --*/
00438 
00439    if( im == NULL ){
00440       if( imp != NULL )
00441          drive_MCW_imseq( imp->seq , isqDR_destroy , NULL ) ;
00442 
00443       RETURN ((void *) imp) ;
00444    }
00445 
00446    /*-- input = no popper handle ==> create one --*/
00447 
00448    if( imp == NULL ){
00449       imp      = myXtNew(PLUGIN_impopper) ;
00450       imp->seq = NULL ; imp->im  = NULL ;
00451    }
00452 
00453    /*-- input = non-null image ==> replace image --*/
00454 
00455    mri_free( imp->im ) ;      /* toss old copy */
00456    imp->im = mri_copy( im ) ; /* make new copy */
00457 
00458    /*-- input = inactive popper handle ==> activate it --*/
00459 
00460    if( imp->seq == NULL )
00461       imp->seq = open_MCW_imseq( GLOBAL_library.dc ,
00462                                  SPLASH_imseq_getim , (XtPointer) imp ) ;
00463 
00464    /*-- unlike PLUTO_popup_image, actual popup is left to caller --*/
00465 
00466    RETURN ((void *) imp) ;
00467 }

Variable Documentation

char alpha[MMAX] [static]
 

Initial value:

 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"        
                          "abcdefghijklmnopqrstuvwxyz"        
                          ",<.>/?;:'[{]}|=+-_)(*&^%$#@!`~"

Definition at line 487 of file afni_splash.c.

Referenced by SPLASH_decodexx().

int do_write = 2 [static]
 

Definition at line 39 of file afni_splash.c.

Referenced by AFNI_splashdown(), and SPLASH_imseq_getim().

void* face_phan = NULL [static]
 

add files we found to list *

Definition at line 632 of file afni_splash.c.

Referenced by AFNI_facedown(), and AFNI_faceup().

mday facials[] [static]
 

Initial value:

 {
 {MAR,30,"face_vincent" } ,
 {FEB,12,"face_lincoln" } ,
 {JAN, 3,"face_tolkien" } ,
 {MAR,14,"face_einstein"} ,
 {APR,27,"face_grant"   } ,
 {JUL,22,"face_rbirn"   } ,
 {SEP, 7,"face_rwcox"   } ,
 {OCT,16,"face_rwcox"   } ,
 {NOV,17,"face_brodman" } ,
{0,0,NULL} }

Definition at line 748 of file afni_splash.c.

int first_splash = -1 [static]
 

Definition at line 99 of file afni_splash.c.

Referenced by AFNI_splashup().

char** fname_face = NULL [static]
 

Definition at line 103 of file afni_splash.c.

Referenced by AFNI_faceup(), AFNI_find_todays_face(), and AFNI_splashup().

char** fname_splash = NULL [static]
 

Definition at line 100 of file afni_splash.c.

Referenced by AFNI_splashup().

void* handle = NULL [static]
 

Definition at line 34 of file afni_splash.c.

Referenced by AFNI_splashdown(), AFNI_splashraise(), AFNI_splashup(), SPLASH_imseq_getim(), and SPLASH_popup_image().

MRI_IMAGE* imspl = NULL [static]
 

Definition at line 33 of file afni_splash.c.

char* linbuf [static]
 

Definition at line 818 of file afni_splash.c.

Referenced by AFNI_startup_layout_CB(), AFNI_startup_script_CB(), and get_linbuf().

byte map26[26] [static]
 

Initial value:

  {  30,  50,  70,  90, 106, 118, 130, 140, 146, 152, 158, 164, 170,
    176, 182, 190, 198, 206, 212, 218, 224, 230, 236, 242, 248, 254 }

Definition at line 473 of file afni_splash.c.

Referenced by SPLASH_decode26(), and SPLASH_decodexx().

int num_face = 0 [static]
 

Definition at line 102 of file afni_splash.c.

Referenced by AFNI_faceup(), AFNI_find_todays_face(), and AFNI_splashup().

int num_splash = 0 [static]
 

Definition at line 98 of file afni_splash.c.

Referenced by AFNI_splashup().

 

Powered by Plone

This site conforms to the following standards: