GIT repositories

Index page of all the GIT repositories that are clonable form this server via HTTPS. Übersichtsseite aller GIT-Repositories, die von diesem Server aus über git clone (HTTPS) erreichbar sind.

Services

A bunch of service scripts to convert, analyse and generate data. Ein paar Services zum Konvertieren, Analysieren und Generieren von Daten.

GNU octave web interface

A web interface for GNU Octave, which allows to run scientific calculations from netbooks, tables or smartphones. The interface provides a web form generator for Octave script parameters with pre-validation, automatic script list generation, as well presenting of output text, figures and files in a output HTML page. Ein Webinterface für GNU-Octave, mit dem wissenschaftliche Berechnungen von Netbooks, Tablets oder Smartphones aus durchgeführt werden können. Die Schnittstelle beinhaltet einen Formulargenerator für Octave-Scriptparameter, mit Einheiten und Einfabevalidierung. Textausgabe, Abbildungen und generierte Dateien werden abgefangen und in einer HTML-Seite dem Nutzer als Ergebnis zur Verfügung gestellt.

Kommandozeilen I/O Klasse

Command line i/o class

This is a simple wrapper class for getting arguments (more elaborated than getopt) and printing to stdout and stderr with colors.

Dies ist eine simple Wrapperklasse, um Kommanrozeilenargumente (besser als mit getopt) einzulesen, sowie auf stdout und stderr mit Farbigem Text auszugeben.

Sample source code

Anwendungsbeispiel

<?
require_once('swlib/swlib.class.php');
 
use sw\CommandLineInterface as cli;
 
 
// Parses the command line arguments and detects parameters.
// You can specify boolean options (e.g. --help, -h, --verbose) that evaluate
// to TRUE if they appear in the arument list.
//
// Returns an array containing the key-value paramters and positional
// arguments.
//
// Parameters are detected allowing the following formats:
//
//  --<KEY>=<VALUE>
//  --<KEY>= <VALUE>
//  --<KEY> = <VALUE>
//  -<KEY> <VALUE>
//  -<SINGLE CHARACTER BOOLEAN OPTION>
//  --<BOOLEAN OPTION>
//  -<OPT1><OPT2><OPT3><KEY> <VALUE>
//  -<OPT> [other options] -- <ARGUMENTS HERE ARE INTERPRETED POSITIONAL>
//
// Examples:
//
//  ./myscript -vczf 'file name' (e.g. like tar command)
//  ./myscript -v -c -z -f 'file'
//  ./myscript --verbose -c -z --file='file'
//  ./myscript -abc --key= value -- only positional arguments follow
 
// Here we use -h, -v, --help, --verbose as boolean options
$args = cli::getargs(array('h', 'v', 'help', 'verbose'));
 
// The text representation of the returned array
$args_text = print_r($args, true) . "\n";
 
// We colorise this is to demonstrate the class color constants:
$replace = array(
  "|( \[.*?\]     )|smix" => cli::COLOR_FG_RED  . "$1" . cli::COLOR_NO,
  "|( Array\s*\(  )|smix" => cli::COLOR_FG_BLUE . "$1" . cli::COLOR_NO,
  "|( \)          )|smix" => cli::COLOR_FG_BLUE . "$1" . cli::COLOR_NO,
  "|( =>          )|smix" => cli::COLOR_FG_GREEN . "$1" . cli::COLOR_NO,
);
 
$args_text = preg_replace(array_keys($replace), $replace, $args_text);
 
// And we print it to stderr
cli::stderr("\n" . $args_text . "\n\n");

Output

Ausgabe

$php cli.test.php -v --verbose --key1=value1 -key2 value2 -- DASH -NOT --INTERPRETED HERE

Array
(
    [0] => cli.test.php
    [v] => 1
    [verbose] => 1
    [key1] => value1
    [k] => 1
    [e] => 1
    [y] => 1
    [2] => value2
    [3] => DASH
    [4] => -NOT
    [5] => --INTERPRETED
    [6] => HERE
)

Class source code

Klassen-Quelltext

<?php
 
/**
 * Command line interface related functions
 * @gpackage de.atwillys.sw.php.swLib
 * @author Stefan Wilhelm
 * @copyright Stefan Wilhelm, 2007-2012
 * @license GPL2
 * @version 1.0
 */
 
namespace sw;
 
class CommandLineInterface {
 
  /**
   * Color codes
   */
  const COLOR_NO = "\033[0m";
  const COLOR_DEFAULT = "\033[0m";
  const COLOR_NORMAL = "\033[0m";
  const COLOR_FG_BLACK = "\033[0;30m";
  const COLOR_FG_DARK_GRAY = "\033[1;30m";
  const COLOR_FG_BLUE = "\033[0;34m";
  const COLOR_FG_LIGHT_BLUE = "\033[1;34m";
  const COLOR_FG_GREEN = "\033[0;32m";
  const COLOR_FG_LIGHT_GREEN = "\033[1;32m";
  const COLOR_FG_CYAN = "\033[0;36m";
  const COLOR_FG_LIGHT_CYAN = "\033[1;36m";
  const COLOR_FG_RED = "\033[0;31m";
  const COLOR_FG_LIGHT_RED = "\033[1;31m";
  const COLOR_FG_PURPLE = "\033[0;35m";
  const COLOR_FG_LIGHT_PURPLE = "\033[1;35m";
  const COLOR_FG_BROWN = "\033[0;33m";
  const COLOR_FG_YELLOW = "\033[1;33m";
  const COLOR_FG_LIGHT_GRAY = "\033[0;37m";
  const COLOR_FG_WHITE = "\033[1;37m";
  const COLOR_BG_BLACK = "\033[40m";
  const COLOR_BG_RED = "\033[41m";
  const COLOR_BG_GREEN = "\033[42m";
  const COLOR_BG_YELLOW = "\033[43m";
  const COLOR_BG_BLUE = "\033[44m";
  const COLOR_BG_MAGENTA = "\033[45m";
  const COLOR_BG_CYAN = "\033[46m";
  const COLOR_BG_LIGHT_GRAY = "\033[47m";
 
  /**
   * @function getargs
   *
   * Program argument parsing. $flag_params describes flag options without values.
   * Returns empty array on error.
   *
   * Test code:              print_r(getargs(array('a','b','alpha')));
   *
   * Test command: ./getargs -xvzf 'last character is value option' \
   *                         -xya 'a is bool, so this is a positional argument'\
   *                         --alpha 'alpha is bool, this is positional as well'\
   *                         --value1='text-value' --value2 'no "=" notation'\
   *                         --\
   *                         '+++ only positional follow after "--" +++'\
   *                         --help\
   *                         -abc
   *
   * @author stfwi
   * @license GPL2
   * @param array $bool_opts = array()
   * @return array
   * @throws -
   */
  public static function getargs($bool_opts = array()) {
    if (!isset($GLOBALS['argv']) || empty($GLOBALS['argv'])) {
      return array();
    }
    $args = $GLOBALS['argv'];
    $return = array();
    reset($args);
    while (list($k, $arg) = each($args)) {
      if (strlen($arg) == 0) {
        // argument is empty string '', as positional argument
        $return[] = $arg;
      } else if ($arg == '--') {
        // End of options, only operands follow (positional arguments)
        while (list($k, $arg) = each($args)) {
          $return[] = $arg;
        }
        return $return;
      } else if (strpos($arg, '--') === 0) {
        $arg = ltrim($arg, '-');
        if (in_array($arg, $bool_opts)) {
          $return[$arg] = true;
        } else if (strpos($arg, '=') !== false) {
          // Covers --arg=something, '--arg = something' and --arg=
          $arg = explode('=', $arg, 2);
          $return[trim($arg[0])] = trim($arg[1]);
        } else {
          // Problematic, could be --name '-=[MEEEEE]=-', or --verbose -k, we assume
          // the first as --verbose should be otherwise defined in $bool_opts.
          if (current($args) !== false) {
            // There is another arg after this one --> value
            list($k, $v) = each($args);
            $return[$arg] = $v;
          } else {
            // Then a unspecified bool option? Preferred
            $return[$arg] = '';
          }
        }
      } else if ($arg == '-') {
        // This is an error as positional argument (if no value of another argument)
        $return[] = $arg;
      } else if (strpos($arg, '-') === 0) {
        // "-" args can have only one character, can have a value following but
        // no "=", like "-k=1". In short notation, the last character can denote
        // a value arg.
        $arg = str_split(trim($arg, '- '));
        $last = array_pop($arg);
        // The first are all bool
        foreach ($arg as $v) {
          $return[$v] = true;
        }
        // The last has to be checked for bool, otherwise value arg
        if (in_array($last, $bool_opts)) {
          $return[$last] = true;
        } else if (current($args) !== false) {
          list($k, $v) = each($args);
          $return[$last] = $v;
        } else {
          $return[$last] = true;
        }
      } else {
        $return[] = $arg;
      }
    }
    return $return;
  }
 
  /**
   * Prints to STDOUT
   * @param string $text
   * @return void
   */
  public static function stdout($text) {
    print(@strval($text));
  }
 
  /**
   * Prints to STDERR
   * @param string $text
   * @return void
   */
  public static function stderr($text) {
    @file_put_contents('php://stderr', self::COLOR_FG_RED . "$text" . self::COLOR_NO, FILE_APPEND);
  }
 
}