// MorgenGrauen MUDlib
//
// magier.h -- Magiererweiterung der Shell
//
// $Id: magier.h 9553 2016-05-03 20:22:47Z Zesstra $

#ifndef _MAGIER_H_
#define _MAGIER_H_

#define MAX_ARRAY_SIZE   3000 // MUSS EIGENTLICH NACH /sys/config.h oder so

#define ERROR(msg, arg, res)   (printf(msg, arg),res)

#define NO_READ         "%s: Keine Leserechte!\n"
#define NO_WRITE        "%s: Keine Schreibrechte!\n"
#define DOESNT_EXIST    "%s: Datei existiert nicht!\n"
#define ALREADY_EXISTS  "%s: Datei existiert schon.\n"
#define NO_DIRS          "%s ist ein Verzeichnis.\n"
#define SAME_FILE        "%s: Gleiches Quell- und Zielfile: uebergangen.\n"
#define NO_CREATE_DIR   "%s: Verzeichnis konnte nicht erstellt werden.\n"
#define DEST_IS_DIR     "%s: Zieldatei ist ein Verzeichnis.\n"
#define DEST_NO_DELETE  "%s: Zieldatei konnte nicht geloescht werden.\n"
#define NO_MOVE         "%s: Datei konnte nicht verschoben werden.\n"
#define NO_COPY         "%s: Datei konnte nicht kopiert werden.\n"
#define FILE_COPIED     "%s: kopiert.\n"
#define DIR_CREATED     "%s: Verzeichnis erzeugt.\n"
#define FILE_MOVED      "%s: verschoben.\n"
#define FILE_DELETED    "%s wurde geloescht.\n"
#define NO_DELETE       "%s konnte nicht geloescht werden.\n"

#define MAY_READ(x)   ({mixed})call_other(__MASTER_OBJECT__,"valid_read",x,getuid(this_object()))
#define MAY_WRITE(x)  ({mixed})call_other(__MASTER_OBJECT__,"valid_write",x,getuid(this_object()))
#define MAY_DELETE(x) ({mixed})call_other(__MASTER_OBJECT__,"remove_file",x,getuid(this_object()))

#define MAXLEN  50000

#define P_VARIABLES "variables"

#define MAN_OPTS   "mri"
#define MAN_M            1           // Matchen des Begriffs
#define MAN_R            2           // Regexp-Matchen
#define MAN_I            4           // Interaktive Hilfe (deaktiviert)

#define MKDIR_OPTS "vrp"
#define MKDIR_V          1           // Verbose: Ausgeben, was gemacht wird
#define MKDIR_R          2           // Rekursiv alle hoeheren
                                     // Verzeichnisse erstellen
#define MKDIR_P          2           // das gleiche wie MKDIR_R

#define RMDIR_OPTS "v"
#define RMDIR_V          1           // Verbose: Ausgeben, was gemacht wird

#define RM_OPTS   "vrmi"
#define RM_V            1            // Verbose: Ausgeben, was gemacht wird
#define RM_R            2            // Verzeichnisse rekursiv loeschen
#define RM_M            4            // DateiMASKE beachten
#define RM_I            8            // Interaktiv loeschen (immer fragen)

#define UPD_OPTS  "afilrmbvcdhsC"
#define UPD_A            1           // Alle Instanzen bearbeiten
#define UPD_F            2           // Alle Instanzen finden und anzeigen
#define UPD_I            4           // Geerbte Klassen aktualisieren
#define UPD_L            8           // zerstoeren und neu laden
#define UPD_R           16           // neu laden, falls zerstoert
#define UPD_M           32           // alle geerbten Klassen auf
                                     // aktualitaet Testen und
                                     // ggf. aktualisieren
#define UPD_B           64           // Backtrace bei Fehlern
#define UPD_V          128           // Erbschaftslisten mit ausgeben
#define UPD_C          256           // Properties erhalten
#define UPD_D          512           // Objektinhalt komplett destructen
#define UPD_H         1024           // Hard-Destruct (kein remove())
#define UPD_S         2048           // Silent
#define UPD_CONF      4096           // Configure() erzwingen (d.h. kein Update,
                                     // wenn Configure() nicht definiert ist)
#define UPD_LOAD      8192           // laden, falls nicht geladen (nur
                                     // intern fuer 'load)

#define CP_OPTS         "vrfmi"
#define CP_V            1            // Verbose: Ausgeben, was gemacht wird
#define CP_R            2            // Rekursiv kopieren
#define CP_F            4            // Force (nie fragen)
#define CP_M            8            // DateiMASKE beachten
#define CP_I           16            // Interaktiv kopieren (immer fragen)

#define MV_OPTS         "vrfmi"
#define MV_V            1            // Verbose: Ausgeben, was gemacht wird
#define MV_R            2            // Immer auch Dateien im Dir moven
#define MV_F            4            // Force (nie fragen)
#define MV_M            8            // DateiMASKE beachten
#define MV_I           16            // Interaktiv bewegen (immer fragen)

#define CD_OPTS         "ls"
#define CD_L            1            // .readme ausgeben
#define CD_S            2            // .readme unterdruecken
#define CD_B            4            // Zurueck zum letzten Verzeichnis

#define LS_OPTS         "alrtsug1"
#define LS_A            1            // ALLE Files anzeigen
#define LS_L            2            // Lange Ausgabe
#define LS_R            4            // Rueckwaerts ausgeben
#define LS_T            8            // Nach Zeit ordnen
#define LS_S            16           // Nach Groesse ordnen
#define LS_U            32           // UID anzeigen
#define LS_G            64           // Gruppe anzeigen
#define LS_1            128          // Einspaltige Anzeige

#define CLONE_OPTS      "f"
#define CLONE_F         1            // Auf jeden Fall versuchen zu clonen

#define GREP_OPTS       "chilnvrmf"
#define GREP_C          1            // Nur Zahl der Zeilen ausgeben
#define GREP_H          2            // Dateinamen nicht mit ausgeben
#define GREP_I          4            // Gross-/Kleinschreibung ignorieren
#define GREP_L          8            // Dateinamen immer mit ausgeben
#define GREP_N          16           // Zeilennummern mit ausgeben
#define GREP_V          32           // Nur Zeilen matchen, die NICHT passen
#define GREP_R          64           // Rekursiv suchen
#define GREP_M          128          // Dateimaske angegeben
#define GREP_F          256          // Ausgabe in Datei

#define ACCESS_OPTS     "arlfgm"
#define ACCESS_A        1            // Berechtigung hinzufuegen
#define ACCESS_R        2            // Berechtigung entfernen
#define ACCESS_L        4            // Berechtigungen anzeigen
#define ACCESS_F        8            // Berechtigung fuer Dateien anzeigen
#define ACCESS_G        16           // Das ganze fuer Gruppen
#define ACCESS_M        32           // Das ganze fuer Gruppenleiter

// Funktioniert nur, wenn SNOOP_L == SF_LOCKED und SNOOP_F == SF_FORCE
// (Definitionen aus /sys/snooping.h)
#define SNOOP_OPTS      "lf"
#define SNOOP_L         1            // Niedriger Magier kann sich nicht
                                     // dazwischenklinken
#define SNOOP_F         2            // Snoope snoopenden Magier, wenn der
                                     // Charakter schon gesnoopt wird

#define GOTO_OPTS       "rl"
#define GOTO_R          1            // Nur Raeume
#define GOTO_L          2            // Nur Livings

#define NO_CHECK        M_GO|M_SILENT|M_NO_SHOW|M_NO_ATTACK|M_NOCHECK

#define INV_SAVE        "/room/void.c"

#define USAGE(str)      (_notify_fail(break_string(sprintf("Syntax: %s\n", str),77)), 0)

#define BASENAME 0
#define FILESIZE 1
#define FILEDATE 2
#define FULLNAME 3
#define PATHNAME 4
#define DESTNAME 5
#define SUBDIRSIZE 6

#define RET_OK 1
#define RET_FAIL 0
#define RET_JUMP -1
#define RET_DELETE -2

#define MODE_LSA   0
#define MODE_LSB   1
#define MODE_CP    2
#define MODE_MV    3
#define MODE_RM    4
#define MODE_CD    5
#define MODE_CAT   6
#define MODE_GREP  7
#define MODE_ED    8
#define MODE_UPD   9
#define MODE_MORE  10
#define MODE_RMDIR 11
#define MODE_CLONE 12

#define COLORS ([ "none": ANSI_NORMAL, \
                  "bold": ANSI_BOLD, \
                  "blink": ANSI_BLINK, \
                  "invers": ANSI_INVERS, \
                  "black": ANSI_BLACK, \
                  "red": ANSI_RED, \
                  "green": ANSI_GREEN, \
                  "yellow": ANSI_YELLOW, \
                  "blue": ANSI_BLUE, \
                  "purple": ANSI_PURPLE, \
                  "cyan": ANSI_CYAN, \
                  "white": ANSI_WHITE, \
                  "bblack": ANSI_BG_BLACK, \
                  "bred": ANSI_BG_RED, \
                  "bgreen": ANSI_BG_GREEN, \
                  "byellow": ANSI_BG_YELLOW, \
                  "bblue": ANSI_BG_BLUE, \
                  "bpurple": ANSI_BG_PURPLE, \
                  "bcyan": ANSI_BG_CYAN, \
                  "bwhite": ANSI_BG_WHITE, \
                ])

#define VALID_READ_CL  symbol_function("valid_read",__MASTER_OBJECT__)
#define VALID_WRITE_CL symbol_function("valid_write",__MASTER_OBJECT__)
#define CREATOR_CL  symbol_function("creator_file",__MASTER_OBJECT__)

#define DIR "directory"
#define OBJ "loaded"
#define VC  "virtual"

#ifdef DEBUG
#undef DEBUG
#endif
#define DEBUG(x) this_object()->ReceiveMsg(x, 536870912 /*MT_DEBUG*/, 0, "Shell: ")

#endif // _MAGIER_H_


#ifdef NEED_PROTOTYPES
#ifndef _MAGIER_H_PROTOS_
#define _MAGIER_H_PROTOS_
static string *parseargs(string cmdline,int flags,string opts,int build_fn);
static varargs void asynchron(mixed* array, closure cmd, mixed data, mixed flags, int c);
static varargs mixed *file_list(string *files, int mode, int recursive, string dest, string mask);
static string to_filename(string str);
static int _verfolge(string str);
static string glob2regexp(string str);

varargs public void More(string txt, int file,mixed ctrl, mixed *ctrlargs, int flags);
#endif // _MAGIER_H_PROTOS_
#endif // NEED_PROTOTYPES


