More()

FUNKTION:
     varargs public void More(string txt, int file,
                              mixed ctrl, mixed *ctrlargs, int flags);

DEFINIERT IN:
     /std/util/pager.c

ARGUMENTE:
     txt  - entweder ein Text der ausgegeben werden soll, oder ein filename.
     file - das flag file gibt an, ob es sich bei <txt> um einen text oder
            einen Filenamen handelt. Bei einem Filenamen wird der Inhalt
            dieses Files eingelesen und ausgegeben.
     ctrl - Eine closure, die aufgerufen wird, falls kein <txt> angegeben
            wurde.
     ctrlargs - ctrlargs wird als Parameter an ctrl uebergeben.
     flags - flags wird mit den im Spieler definierten P_MORE_FLAGS
             kombiniert.

BESCHREIBUNG:

     More() dient der Ausgabe von Texten an Spieler. Mit Hilfe eines
     PL->More(txt) oder PL->More(txt, 1) ist es sehr einfach laengere Texte
     an Spieler auszugeben. Bei der Ausgabe werden die persoenlichen
     Einstellungen des Spielern (wie z.b. Zeilen pro Bildschirmseite)
     automatisch beruecksichtigt und der Text dadurch ggf. zerstueckelt
     und in mehreren Schritten nacheinander angezeigt.

RUeCKGABEWERT:
     keiner

BEMERKUNGEN:
     Beim einlesen des Files sind die Leserechte des Spieler in dem More()
     aufgerufen wird von Bedeutung und nicht die Rechte des Objektes das
     More() aufruft. Spielerobjekte haben im MorgenGrauen jedoch nur sehr
     eingeschraenkte Leserechte! Ausgegeben werden koennen nur files
     aus /p/*, /gilden/* und /d/* die _keinen_ code enthalten. Als Code
     wird hierbei jedes File betrachtet das als vorletztes Zeichen einen .
     hat (also .c, .h, .o usw.).
     Will man aus irgendwelchen Gruenden ein File (z.b. aus /players/)
     ausgeben, so sollte man stattdessen folgendes verwenden:
     this_player()->More(read_file(filename))

BEISPIELE:

     // Ausgabe eines normalen textes...
     this_player()->More("Einfach nur mal so ein Test...\n");

     // Ausgabe eines kompletten files
     this_player()->More("/etc/WIZRULES", 1);

SIEHE AUCH:

----------------------------------------------------------------------------
Last modified: Mon Feb 22 15:09:18 1999 by Padreic
