/
lib/banish/
lib/d/
lib/doc/
lib/doc/domains/
lib/doc/efun/
lib/doc/examples/
lib/doc/examples/armour/
lib/doc/examples/contain/
lib/doc/examples/food/
lib/doc/examples/magic/
lib/doc/examples/monster/
lib/doc/examples/room/
lib/doc/examples/weapons/
lib/include/
lib/include/fn_specs/
lib/include/skills/
lib/info/
lib/inherit/base/
lib/log/
lib/manuals/312/
lib/news/
lib/obj/party/
lib/objects/components/
lib/open/
lib/open/library/
lib/open/party/
lib/players/
lib/players/zilanthius/
lib/room/
lib/room/city/arena/
lib/room/city/creator/
lib/room/city/garden/monst/
lib/room/city/obj/
lib/room/city/shop/
lib/room/death/
lib/room/registry/
lib/secure/
lib/secure/UDP_CMD_DIR/
lib/skills/
lib/skills/fighter/
lib/skills/thief/
lib/usr/
lib/usr/creators/
lib/usr/players/
/* page through a string - nothing fancy */

#include <mudlib.h>
#include <move.h>

#define PAGE_LENGTH 15

object caller;
string caller_fn;

string *txt;
int position;

status id(string str) { return str == "pager"; }

string query_name()   { return "pager"; }

static void quit() {
  if(caller) {
    call_other(caller,"pager_quit", caller_fn);
  }
  destruct(this_object());
}

status drop() {
  quit();
  return 1;
}

void do_page(string answer) {
  int next;

  if(answer == "q") {
    write("Ok.\n");
    quit();
    return;
  }
  if(answer == "b") {
    position = position - (2 * PAGE_LENGTH);
    if(position < 0) position = 0;
  }
  next = position + PAGE_LENGTH;
  if(next > sizeof(txt)-1) next = sizeof(txt)-1;
  write(implode(txt[position..next],"\n") +"\n");
  if(next != sizeof(txt) - 1) {
    position = next + 1;
    write("\nContinue (y/q/b) [y]: ");
    input_to("do_page");
  }
  else {
    write("Ok.\n");
    quit();
  }
}
  
void page(string str, string return_fn) {
  caller = previous_object();
  caller_fn = return_fn;
  if(!str) {
    quit();
    return;
  }  
#ifdef OLD_EXPLODE
  txt = explode(str +"\n","\n");
#else
  txt = explode(str,"\n");
#endif
  if(txt[sizeof(txt)-1] == "") txt = txt[0..(sizeof(txt)-2)];
  position = 0;
  do_page("y");
}