//
// Copyright (C) 1999-2004 Toshikaz Hirabayashi
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// TOSHIKAZ HIRABAYASHI BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// Except as contained in this notice, the name of Toshikaz Hirabayashi shall
// not be used in advertising or otherwise to promote the sale, use or other
// dealings in this Software without prior written authorization from
// Toshikaz Hirabayashi.

#include <WScom.h>
#include <WSDexecute.h>

WSMFclassInit(WSDexecute,WSCroot);

WSDexecute* (*WSDexecute::_chandler)() = NULL;

WSDexecute::WSDexecute(){
  _pid =0;
  _data_receive = NULL;
  _handle = NULL;
  _mode = WS_EXEC_NONE;
  _data = 0;
}

WSDexecute::~WSDexecute(){}

WSDexecute* WSDexecute::getNewInstance(){
   if (_chandler == NULL){
     return new WSDexecute();
   }
   return _chandler();
}

void WSDexecute::setCreateInstanceHandler(void* hd){
  _chandler = (WSDexecute* (*)())hd;
}

long WSDexecute::execute(char* name,long mode){
WSMFtrace("WSDexecute Warring. This system does not support execute().\n");
WSMFtrace("command: %s mode=%d\n",name,mode);
  return WS_ERR;
}

long WSDexecute::read(char*,long){
WSMFtrace("WSDexecute Warring. This system does not support read().\n");
  return -1;
}
char* WSDexecute::gets(char*,long){
WSMFtrace("WSDexecute Warring. This system does not support gets().\n");
  return NULL;
}
long WSDexecute::write(char*,long){
WSMFtrace("WSDexecute Warring. This system does not support write().\n");
  return -1;
}

long WSDexecute::setReceiveProc(void (*proc)(WSDexecute*),void* data){
  _data_receive = proc;
  _data = data;
  return WS_NO_ERR;
}
void(* WSDexecute::getReceiveProc() )(WSDexecute*){
  return _data_receive;
}
void* WSDexecute::getHandle(){
  return _handle;
}
void* WSDexecute::getUserData(){
  return _data;
}
long WSDexecute::killProcess(){
WSMFtrace("WSDexecute Warring. This system does not support kill().\n");
  return WS_ERR;
}

long WSDexecute::getProcessId(){
  return _pid;
}
char* WSDexecute::getCurrentDir(){
  return (char*)_dir_name;
}
void WSDexecute::setCurrentDir(char* dir){
  _dir_name = dir;
}

