#!/usr/local/bin/php
<?php

#$init = ncurses_init(); 

error_reporting(E_ERROR | E_PARSE);

global $running;
$running = true;
global $args;
$args = array();
global $default_directory;
$default_directory = "/home/mcoan/phpsh/";
global $pwd;
$pwd = $default_directory;

function read_command($prompt) {
   global $args;
   $args = array();
   $line = trim(readline($prompt));
   readline_add_history($line);
   $token = strtok($line, " \r\n\t");
   $index = 0;
   do {
      $args[$index] = $token;
      $token = strtok(" \r\n\t");
      $index++;
   }
   while($token != null);
   $line = $args[0];
   return $line;
}

function read_script($name) {
   $fp = fopen("$name", "r");
   if($fp == null) {
      print("unable to read script: $name\n");
      return "true";
   }
   else {
      $script_text = "";
      while(($line = fgets($fp)) != null) {
         $script_text = $script_text . $line . "\n";  
      }
      fclose($fp);
      return $script_text;
   }
}

pcntl_signal(SIGTERM, "signal_handler");
pcntl_signal(SIGINT, "signal_handler");

function signal_handler($signal) {
    switch($signal) {
       case SIGTERM:
          print "Caught SIGTERM\n";
          break;
       case SIGKILL:
          print "Caught SIGKILL\n";
          break;
       case SIGINT:
          print "Caught SIGINT\n";
          break;
    }
}


while($running) {
   $command = read_command("\$ ");
   if(strlen($command) != 0) {
       eval(read_script($command));
   }
}

#ncurses_end();

?>
