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
