//=========================================================================
// Summary  :
// Filename : Process.h
// Author   : marsh
// Project  :
// Revision : 1
// Created  : 2000/08/19
// Modified : 2000/08/19
//=========================================================================
// Description :
//=========================================================================
#ifndef _PROCESS_H
#define _PROCESS_H

#include "VehicleConfigurationIF.h"
#include "ourTypes.h"
#include "Item.h"

const short PROCESS_ID = 0x01;

class Process : public Item
{
public:

     Process( const char *, short,
	      debug_t defaultDebug );

     virtual ~Process();

     char *port()
	  { return (_port != NULL) ? _port : ""; };
     char *server()
	  { return (_server != NULL) ? _server : ""; };
     char *driver()
	  { return (_driver != NULL) ? _driver : ""; };
     char *driver2()
	  { return (_driver2 != NULL) ? _driver2 : ""; };
     char *driver3()
	  { return (_driver3 != NULL) ? _driver3 : ""; };
     short priority()
	  { return _priority; };
     short stratum()
	  { return _stratum; };
     short classID()
	  { return _classID; };
     char *IFName()
	  { return (_IFName != NULL) ? _IFName : ""; };
     short node()
	 { return (short)_node; };
     short logNode()
	 { return (short)_logNode; };
     pid_t pid()
	  { return _pid; };
     long circuit()
	  { return _circuit; };
     debug_t debug()
	  { return _processDebug; };
     
     char *onFault()
	 { return (_onFault != NULL) ? _onFault : ""; };
     char *onFailure()
	 { return (_onFailure != NULL) ? _onFailure : ""; };

     pid_t setPid( pid_t inPid )
	  { return _pid = inPid; };
     
     char *setIFName( const char *newIFName );
     char *getIFName()
	  { return (_IFName == NULL) ? "" : _IFName; };
     
     Boolean getDriverPersists(short index);

     short registerIFName( const char *newIFName );
     short getIFNameCount()
	  { return _ifNames.size(); };
     int getIFByIndex( int index, char *name, int namelen );
     int findIFByName( char *name );
     Boolean hasIFName( char *name );

     short invalidate();

protected:

     char *_port;
     char *_server;
     char *_driver;
     char *_driver2;
     char *_driver3;
     Boolean _driver1Persists;
     Boolean _driver2Persists;
     Boolean _driver3Persists;
     long _priority;
     long _circuit;
	 
     char *_IFName;

     char *_onFault;
     char *_onFailure;
     
     long _node;
     long _logNode;

     pid_t _pid;

     // Debug value for the attendant process
     debug_t _processDebug;

     short _stratum;

     short _classID;
     
     DynamicArray<char *> _ifNames;

};

#endif
