
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
