Skip to content
Snippets Groups Projects
plugins.c 2.52 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * Statically-compiled "plugin" initialization for partiview.
     * Stuart Levy, slevy@ncsa.uiuc.edu
     * National Center for Supercomputing Applications,
     * University of Illinois 2001.
    
     * This file is part of partiview, released under the
     * Illinois Open Source License; see the file LICENSE.partiview for details.
    
    slevy's avatar
    slevy committed
    extern void kira_parti_init(void);
    extern void warp_init(void);
    extern void parti_ieee_init(void);
    extern void parti_model_init(void);
    
    extern void conste_init(void);
    
    slevy's avatar
    slevy committed
    
    extern void pp_spi_init(void);
    extern void nethack_init(void);
    extern void sixdof_init(void);
    
    slevy's avatar
    slevy committed
    #ifdef WIN32
    # include "winjunk.h"
    #endif
    
    
    #include <stdlib.h>
    #include "specks.h"
    #include "partiviewc.h"
    #include "shmem.h"
    
    slevy's avatar
    slevy committed
    #ifdef USE_KIRA
      kira_parti_init();
    #endif
    
    #ifdef USE_ELUMENS
      pp_spi_init();
    #endif
    #ifdef USE_NETHACK
      nethack_init();
    #endif
    #ifdef USE_SIXDOF	/* spaceball, etc. */
      sixdof_init();
    #endif
    #ifdef USE_MODEL
      parti_model_init();
    #endif
    #ifdef USE_WARP
      warp_init();
    #endif
    #ifdef USE_IEEEIO
      parti_ieee_init();
    #endif
    
    #ifdef USE_CONSTE
      conste_init();
    #endif
    
    static struct parser *parsers = NULL;   /* PJT: double declared ?? */
    
    static struct parser *reader_parsers = NULL;
    static void (*cmdtracefunc)( struct stuff **, int argc, char *argv[] );
    
    void parti_cmdtrace( void (*func)( struct stuff **, int argc, char *argv[] ) ) {
      cmdtracefunc = func;
    }
    
    int parti_parse_args( struct stuff **stp, int argc, char *argv[], char *fname ) {
      struct parser *pp;
      int val;
    
      if(cmdtracefunc)
          (*cmdtracefunc)( stp, argc, argv );
      for(pp = parsers; pp; pp = pp->next)
        if(pp->parsefunc && (val = (*pp->parsefunc)( stp, argc, argv, fname, pp->etc )) != 0)
    	return val;
      return 0;
    }
    
    void parti_add_commands( int (*parsefunc)(struct stuff **, int, char *[], char *fname, void *), char *whose, void *etc ) {
      struct parser *pp = NewN( struct parser, 1 );
      pp->next = parsers;
      pp->whose = whose;
      pp->etc = etc;
      pp->parsefunc = parsefunc;
      parsers = pp;
    }
    
    int parti_read( struct stuff **stp, int argc, char *argv[], char *fname ) {
      struct parser *pp;
      int val;
      for(pp = reader_parsers; pp; pp = pp->next)
        if(pp->parsefunc && (val = (*pp->parsefunc)( stp, argc, argv, fname, pp->etc )) != 0)
    	return val;
      return 0;
    }
    
    void parti_add_reader( int (*parsefunc)(struct stuff **, int, char *[], char *, void *), char *whose, void *etc ) {
      struct parser *pp = NewN( struct parser, 1 );
      pp->next = reader_parsers;
      pp->whose = whose;
      pp->etc = etc;
      pp->parsefunc = parsefunc;
      reader_parsers = pp;
    }