final_realms_fluffos_v1/
final_realms_fluffos_v1/bin/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/ChangeLog.old/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/Win32/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/simuls/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/clone/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/command/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/data/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/etc/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/master/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/log/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/compiler/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/efuns/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/operators/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/u/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/tmp/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/windows/
final_realms_fluffos_v1/lib/baseobs/guilds/
final_realms_fluffos_v1/lib/baseobs/misc/
final_realms_fluffos_v1/lib/baseobs/races/shadows/
final_realms_fluffos_v1/lib/cmds/god/
final_realms_fluffos_v1/lib/cmds/handlers/
final_realms_fluffos_v1/lib/cmds/handlers/cmds/
final_realms_fluffos_v1/lib/d/heaven/
final_realms_fluffos_v1/lib/d/heaven/heaven/ave/
final_realms_fluffos_v1/lib/d/mudlib/
final_realms_fluffos_v1/lib/d/newbie/
final_realms_fluffos_v1/lib/d/newbie/docs/
final_realms_fluffos_v1/lib/d/newbie/drow/armour/
final_realms_fluffos_v1/lib/d/newbie/drow/items/
final_realms_fluffos_v1/lib/d/newbie/drow/mobs/
final_realms_fluffos_v1/lib/d/newbie/drow/oldmobs/
final_realms_fluffos_v1/lib/d/newbie/drow/weapons/
final_realms_fluffos_v1/lib/d/newbie/duergar/weapons/
final_realms_fluffos_v1/lib/d/newbie/dwarf/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/cafe/
final_realms_fluffos_v1/lib/d/newbie/elf/chars/equip/
final_realms_fluffos_v1/lib/d/newbie/elf/items/armours/
final_realms_fluffos_v1/lib/d/newbie/elf/items/obj/
final_realms_fluffos_v1/lib/d/newbie/elf/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/quick_fix/
final_realms_fluffos_v1/lib/d/newbie/gnome/armour/
final_realms_fluffos_v1/lib/d/newbie/gnome/buildings/
final_realms_fluffos_v1/lib/d/newbie/gnome/items/
final_realms_fluffos_v1/lib/d/newbie/gnome/npcs/clones/
final_realms_fluffos_v1/lib/d/newbie/gnome/rooms/northrooms/
final_realms_fluffos_v1/lib/d/newbie/gnome/weapons/
final_realms_fluffos_v1/lib/d/newbie/goblin/armour/
final_realms_fluffos_v1/lib/d/newbie/goblin/items/
final_realms_fluffos_v1/lib/d/newbie/grads/log/
final_realms_fluffos_v1/lib/d/newbie/grads/npcs/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/cave1/
final_realms_fluffos_v1/lib/d/newbie/grads/temp/
final_realms_fluffos_v1/lib/d/newbie/guests/weapons/
final_realms_fluffos_v1/lib/d/newbie/half-elf/items/
final_realms_fluffos_v1/lib/d/newbie/half-elf/newroomss/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/castle/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/drows/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/savannah/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/secret/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/town/
final_realms_fluffos_v1/lib/d/newbie/halfling/
final_realms_fluffos_v1/lib/d/newbie/halfling/misc/
final_realms_fluffos_v1/lib/d/newbie/halfling/rooms/cave/
final_realms_fluffos_v1/lib/d/newbie/human/
final_realms_fluffos_v1/lib/d/newbie/human/armour/
final_realms_fluffos_v1/lib/d/newbie/human/monsters/
final_realms_fluffos_v1/lib/d/newbie/human/obj/
final_realms_fluffos_v1/lib/d/newbie/human/weapons/
final_realms_fluffos_v1/lib/d/newbie/lizard/armour/
final_realms_fluffos_v1/lib/d/newbie/lizard/items/
final_realms_fluffos_v1/lib/d/newbie/lizard/underwater/
final_realms_fluffos_v1/lib/d/newbie/lizard/weapons/
final_realms_fluffos_v1/lib/d/newbie/logs/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/rooms/
final_realms_fluffos_v1/lib/d/newbie/newelf/
final_realms_fluffos_v1/lib/d/newbie/newelf/chars/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/recopied/
final_realms_fluffos_v1/lib/d/newbie/newelf/obj/
final_realms_fluffos_v1/lib/d/newbie/newelf/quest_docs./
final_realms_fluffos_v1/lib/d/newbie/newken/
final_realms_fluffos_v1/lib/d/newbie/newken/chars/
final_realms_fluffos_v1/lib/d/newbie/newken/misc/
final_realms_fluffos_v1/lib/d/newbie/newken/npcs/
final_realms_fluffos_v1/lib/d/newbie/newken/obj/
final_realms_fluffos_v1/lib/d/newbie/newliz/
final_realms_fluffos_v1/lib/d/newbie/newliz/cave/
final_realms_fluffos_v1/lib/d/newbie/newliz/npcs/
final_realms_fluffos_v1/lib/d/newbie/orc/items/misc/
final_realms_fluffos_v1/lib/d/newbie/orc/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/orc/tower/
final_realms_fluffos_v1/lib/d/vehicle/
final_realms_fluffos_v1/lib/doc/
final_realms_fluffos_v1/lib/doc/driver/
final_realms_fluffos_v1/lib/doc/driver/concepts/
final_realms_fluffos_v1/lib/doc/driver/driver/
final_realms_fluffos_v1/lib/doc/driver/efuns/arrays/
final_realms_fluffos_v1/lib/doc/driver/efuns/bitstrings/
final_realms_fluffos_v1/lib/doc/driver/efuns/communication/
final_realms_fluffos_v1/lib/doc/driver/efuns/core/
final_realms_fluffos_v1/lib/doc/driver/efuns/debugging/
final_realms_fluffos_v1/lib/doc/driver/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/driver/efuns/interactive/
final_realms_fluffos_v1/lib/doc/driver/efuns/mappings/
final_realms_fluffos_v1/lib/doc/driver/efuns/objects/
final_realms_fluffos_v1/lib/doc/driver/efuns/security/
final_realms_fluffos_v1/lib/doc/driver/efuns/strings/
final_realms_fluffos_v1/lib/doc/driver/efuns/system/
final_realms_fluffos_v1/lib/doc/driver/efuns/types/
final_realms_fluffos_v1/lib/doc/driver/lpc/constructs/
final_realms_fluffos_v1/lib/doc/driver/lpc/types/
final_realms_fluffos_v1/lib/doc/driver/platforms/
final_realms_fluffos_v1/lib/doc/lpc/
final_realms_fluffos_v1/lib/doc/mail/
final_realms_fluffos_v1/lib/doc/man/
final_realms_fluffos_v1/lib/doc/man/html/
final_realms_fluffos_v1/lib/doc/man/html/applies/
final_realms_fluffos_v1/lib/doc/man/html/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/html/driver/
final_realms_fluffos_v1/lib/doc/man/html/efuns/
final_realms_fluffos_v1/lib/doc/man/html/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/html/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/html/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/html/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/html/efuns/general/
final_realms_fluffos_v1/lib/doc/man/html/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/
final_realms_fluffos_v1/lib/doc/man/local/applies/
final_realms_fluffos_v1/lib/doc/man/local/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/local/applies/master/
final_realms_fluffos_v1/lib/doc/man/local/concepts/
final_realms_fluffos_v1/lib/doc/man/local/defines/
final_realms_fluffos_v1/lib/doc/man/local/driver/
final_realms_fluffos_v1/lib/doc/man/local/efuns/
final_realms_fluffos_v1/lib/doc/man/local/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/local/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/local/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/local/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/local/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/local/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/local/efuns/general/
final_realms_fluffos_v1/lib/doc/man/local/efuns/interactive/
final_realms_fluffos_v1/lib/doc/man/local/efuns/internals/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/local/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/objects/
final_realms_fluffos_v1/lib/doc/man/local/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/efuns/sockets/
final_realms_fluffos_v1/lib/doc/man/local/efuns/strings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/system/
final_realms_fluffos_v1/lib/doc/man/local/historical/
final_realms_fluffos_v1/lib/doc/man/local/lfun/QC/
final_realms_fluffos_v1/lib/doc/man/local/lfun/events/
final_realms_fluffos_v1/lib/doc/man/local/lfun/monster/
final_realms_fluffos_v1/lib/doc/man/local/lfun/properties/
final_realms_fluffos_v1/lib/doc/man/local/lpc/
final_realms_fluffos_v1/lib/doc/man/local/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/local/lpc/types/
final_realms_fluffos_v1/lib/doc/man/local/standards/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/basic/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/intermediate/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/concepts/
final_realms_fluffos_v1/lib/doc/man/mudos/driver/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/general/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mixed/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/types/
final_realms_fluffos_v1/lib/doc/races/
final_realms_fluffos_v1/lib/doc/races/old_race/
final_realms_fluffos_v1/lib/global/virtual/
final_realms_fluffos_v1/lib/global/wiz_backup/
final_realms_fluffos_v1/lib/net/config/
final_realms_fluffos_v1/lib/net/daemon/chars/
final_realms_fluffos_v1/lib/net/inherit/
final_realms_fluffos_v1/lib/net/intermud3/
final_realms_fluffos_v1/lib/net/intermud3/cmds/
final_realms_fluffos_v1/lib/net/intermud3/save/
final_realms_fluffos_v1/lib/net/intermud3/services/
final_realms_fluffos_v1/lib/net/obj/
final_realms_fluffos_v1/lib/net/old/
final_realms_fluffos_v1/lib/net/old/intermud/
final_realms_fluffos_v1/lib/net/old/intermud/adm/
final_realms_fluffos_v1/lib/net/old/intermud/services/
final_realms_fluffos_v1/lib/net/old/intermud/udp/
final_realms_fluffos_v1/lib/net/virtual/
final_realms_fluffos_v1/lib/obj/b_day/
final_realms_fluffos_v1/lib/obj/chars/
final_realms_fluffos_v1/lib/obj/handlers/lists/
final_realms_fluffos_v1/lib/obj/handlers/useless/
final_realms_fluffos_v1/lib/obj/monsters/
final_realms_fluffos_v1/lib/obj/roomgen/
final_realms_fluffos_v1/lib/obj/soul/
final_realms_fluffos_v1/lib/obj/vegetation/
final_realms_fluffos_v1/lib/obj/weapons/oldsys/
final_realms_fluffos_v1/lib/open/
final_realms_fluffos_v1/lib/players/g/
final_realms_fluffos_v1/lib/releasefiles/d/heaven/
final_realms_fluffos_v1/lib/releasefiles/d/mudlib/
final_realms_fluffos_v1/lib/releasefiles/d/newbie/
final_realms_fluffos_v1/lib/releasefiles/doc/
final_realms_fluffos_v1/lib/releasefiles/players/g/
final_realms_fluffos_v1/lib/releasefiles/save/
final_realms_fluffos_v1/lib/releasefiles/save/environ/
final_realms_fluffos_v1/lib/releasefiles/save/roomgen/
final_realms_fluffos_v1/lib/releasefiles/secure/
final_realms_fluffos_v1/lib/releasefiles/w/
final_realms_fluffos_v1/lib/releasefiles/w/god/
final_realms_fluffos_v1/lib/room/
final_realms_fluffos_v1/lib/save/
final_realms_fluffos_v1/lib/save/environ/
final_realms_fluffos_v1/lib/save/roomgen/
final_realms_fluffos_v1/lib/scripts/
final_realms_fluffos_v1/lib/secure/crerem/
final_realms_fluffos_v1/lib/secure/dom/
final_realms_fluffos_v1/lib/secure/log/
final_realms_fluffos_v1/lib/secure/misc/
final_realms_fluffos_v1/lib/std/adnd/
final_realms_fluffos_v1/lib/std/commands/shadows/
final_realms_fluffos_v1/lib/std/creator/
final_realms_fluffos_v1/lib/std/curses/
final_realms_fluffos_v1/lib/std/curses/old_sys/
final_realms_fluffos_v1/lib/std/curses/shadows/
final_realms_fluffos_v1/lib/std/dom/
final_realms_fluffos_v1/lib/std/effects/
final_realms_fluffos_v1/lib/std/effects/healing/
final_realms_fluffos_v1/lib/std/effects/other/
final_realms_fluffos_v1/lib/std/effects/poisons/
final_realms_fluffos_v1/lib/std/environ/
final_realms_fluffos_v1/lib/std/guilds/
final_realms_fluffos_v1/lib/std/guilds/priests/samples/
final_realms_fluffos_v1/lib/std/guilds/wizards/
final_realms_fluffos_v1/lib/std/living/baldy/
final_realms_fluffos_v1/lib/std/living/divstuff/
final_realms_fluffos_v1/lib/std/paran/
final_realms_fluffos_v1/lib/std/poisons/
final_realms_fluffos_v1/lib/std/poisons/shadows/
final_realms_fluffos_v1/lib/std/poisons/weapons/
final_realms_fluffos_v1/lib/std/race_groups/
final_realms_fluffos_v1/lib/std/room/
final_realms_fluffos_v1/lib/std/room/old/
final_realms_fluffos_v1/lib/std/rooms/
final_realms_fluffos_v1/lib/std/shadows/
final_realms_fluffos_v1/lib/std/shadows/test_shad/
final_realms_fluffos_v1/lib/std/socket/
final_realms_fluffos_v1/lib/std/spells/
final_realms_fluffos_v1/lib/std/vaults/
final_realms_fluffos_v1/lib/tmp/
final_realms_fluffos_v1/lib/w/
final_realms_fluffos_v1/lib/w/god/
final_realms_fluffos_v1/old/
final_realms_fluffos_v1/win32/
/*
 * A nroff like object for formating text files.
 *
 * This creates a saveable file format thingy.
 */
#include "nroff.h"

mixed *nroffed_file;
string nroffed_file_name;
int modified_time;

void create() {
  nroffed_file = ({ });
  seteuid("Root"); /* Security risk?  nahhhhh */
} /* create() */

#define do_bounds(bing) (bing<0?bing+cols:bing)

/*
 * Creates a string from a nroffed file
 *
 * If update is non zero it will try and find the file_name and return
 * 0 from here if it is either not found, or non existant...
 */
string cat_file(string fname, int update) {
  int i, cols;
  string ret;

  if (!"/secure/master"->valid_read(fname, geteuid(previous_object()),
                                    "restore_object"))
    return 0;
  nroffed_file_name = 0;
  modified_time = 0;
  if (!restore_object(fname,1))
    return 0;
  if (!nroffed_file_name && update)
    return 0;
  if (update) {
    mixed *something;

    if (!"/secure/master"->valid_read(nroffed_file_name,
                                      geteuid(previous_object()),
                                      "restore_object"))
      return 0;
    if (file_size(nroffed_file_name) <= 0)
      return 0;
    something = stat(nroffed_file_name);
    if (something[1] > modified_time)
      return 0;
  }
  ret = "";
  cols = (int)this_player()->query_cols();
  for (i=0;i<sizeof(nroffed_file);i++)
    if (stringp(nroffed_file[i]))
      ret += nroffed_file[i];
    else
      switch (nroffed_file[i]) {
        case V_CENTER :
          ret += sprintf("%|=*s", cols, nroffed_file[i+1]);
          i++;
          break;
        case V_ALL :
          ret += sprintf("%-*s%|*s%*s\n", nroffed_file[i+1],
                                        nroffed_file[i+2],
                                        cols - nroffed_file[i+1]*2,
                                        nroffed_file[i+3],
                                        nroffed_file[i+1],
                                        nroffed_file[i+4]);
          i += 4;
          break;
        case V_INDENT :
          ret += sprintf("%*=s%-=*s\n", nroffed_file[i+1], "",
                                        cols-nroffed_file[i+1], 
                                        nroffed_file[i+2]);
          i += 2;
          break;
        case V_PARA :
          ret += sprintf("%*=s%-=*s%=*s\n", nroffed_file[i+1], "",
                                            cols-nroffed_file[i+1]-
                                           nroffed_file[i+2], nroffed_file[i+3],
                                            nroffed_file[i+2], "");
          i += 3;
          break;
        case V_LEFT :
          ret += sprintf("%-=*s", cols, nroffed_file[i+1]);
          i++;
          break;
        case V_TABLE :
          ret += sprintf("%-#*s", cols, nroffed_file[i+1]);
          i++;
          break;
        case V_COLUMN : {
          int j;

          switch (sizeof(nroffed_file[i+1])) {
            case 2 :
              for (j=0;j<sizeof(nroffed_file[i+2]);j++)
                ret += sprintf("%*-=s%*-=s\n", do_bounds(nroffed_file[i+1][0]),
                                             nroffed_file[i+2][j],
                                             do_bounds(nroffed_file[i+1][1]),
                                             nroffed_file[i+3][j]);
              i += 3;
              break;
            case 3 :
              for (j=0;j<sizeof(nroffed_file[i+2]);j++)
                ret += sprintf("%*-=s%*-=s%*-=s\n",
                                                do_bounds(nroffed_file[i+1][0]),
                                                nroffed_file[i+2][j],
                                                do_bounds(nroffed_file[i+1][1]),
                                                nroffed_file[i+3][j],
                                                do_bounds(nroffed_file[i+1][2]),
                                                nroffed_file[i+4][j]);
              i += 4;
              break;
          }
          break;
        }
      }
  return " \n"+ret;
}

static int new_string, force_string;

void add_array(mixed *i) {
  if (!sizeof(nroffed_file))
    nroffed_file += ({ i });
  else if (force_string)
    nroffed_file += ({ "", i });
  else
    nroffed_file += ({ i });
  force_string = 0;
  new_string = 0;
}

void add_int(int i) {
  if (!sizeof(nroffed_file))
    nroffed_file += ({ i });
  else if (force_string)
    nroffed_file += ({ "", i });
  else
    nroffed_file += ({ i });
  force_string = 0;
  new_string = 0;
}

void add_string(string s) {
  if (!sizeof(nroffed_file) || new_string)
    nroffed_file += ({ s });
  else if (stringp(nroffed_file[sizeof(nroffed_file)-1]))
    nroffed_file[sizeof(nroffed_file)-1] += s;
  else
    nroffed_file += ({ s });
  new_string = 0;
  force_string = 0;
}

int create_nroff(string in_file, string out_file) {
  string text,
         tmp,
         *bits;
  string *bing;
  mixed  *cols;
  int strip_crs,
      col_mode,
      conv_tabs,
      i, j, k,
      num_cols;

  if (!"/secure/master"->valid_read(in_file, geteuid(previous_object()),
                                    "read_file"))
    return 0;
  if (!"/secure/master"->valid_write(out_file, geteuid(previous_object()),
                                    "save_object"))
    return 0;
  nroffed_file_name = in_file;
  modified_time = time();
  text = read_file(in_file);
  if (!text)
    return 0;
  bits = explode("#\n"+text, "\n.");
  bits[0] = bits[0][1..strlen(bits[0])-1];
  nroffed_file = ({ 0 });
  if (strlen(bits[0]))
    add_string(bits[0]);
  for (i=1;i<sizeof(bits);i++) {
/*
    if (!strlen(bits[i])) {
      if (col_mode) {
        for (j=0;j<num_cols;j++)
          cols[j] += "\n";
      } else if (strip_crs)
        add_string("\n\n");
      else
        add_string("\n");
    } else if (bits[i][0] == '.') {
 */
        if (sscanf(bits[i], "%s\n%s", tmp, bits[i]) != 2) {
          tmp = bits[i];
          bits[i] = "";
        }
        switch (tmp[0..1]) {
          case "SI" : /* Start indent */
            add_int(V_INDENT);
            j = 0;
            sscanf(tmp[2..1000], "%d%s", j, tmp);
            add_int(j);
            force_string = 1;
            break;
          case "EI" : /* End paragraph */
            new_string = 1;
            break;
          case "SP" : /* Start paragraph */
            add_int(V_PARA);
            j = 0;
            sscanf(tmp[2..1000], "%d%s", j, tmp);
            add_int(j);
            j = 0;
            sscanf(tmp, " %d%s", j, tmp);
            add_int(j);
            force_string = 1;
            strip_crs = 1;
            break;
          case "EP" : /* End paragraph */
            new_string = 1;
            strip_crs = 0;
            break;
          case "SC" : /* start centering */
            add_int(V_CENTER);
            force_string = 1;
            break;
          case "EC" : /* End centering */
            new_string = 1;
            break;
          case "SL" : /* Start left justify */
            add_int(V_LEFT);
            force_string = 1;
            break;
          case "EL " : /* End left justify */
            new_string = 1;
            break;
          case "ST" : /* Start table mode (Turn tabs into new lines) */
            add_int(V_TABLE);
            force_string = 1;
            conv_tabs = 1;
            break;
          case "ET" : /* End table mode */
            new_string = 1;
            conv_tabs = 0;
            break;
          case "DT" : /* Do title.  Take the next three lines... */
            bing = explode(bits[i], "\n");
            if (sizeof(bing) < i+3)
              return 0; /* failed! */
            add_int(V_ALL);
            if (strlen(bing[0]) > strlen(bing[2]))
              add_int(strlen(bing[0]));
            else
              add_int(strlen(bing[2]));
            new_string = 1;
            add_string(bing[0]);
            new_string = 1;
            add_string(bing[1]);
            new_string = 1;
            add_string(bing[2]);
            new_string = 1;
            bits[i] = implode(bing[3..1000], "\n");
            break;
          case "SO" : /* starts column mode. The numbers after it
                       * are column size */
            num_cols = 0;
            tmp = tmp[2..1000];
            cols = ({ });
            while (sscanf(tmp, "%d%s", j, tmp) == 2) {
              cols += ({ j });
              num_cols++;
              while (strlen(tmp) && tmp[0] == ' ')
                tmp = tmp[1..1000];
            }
            add_int(V_COLUMN);
            if (sscanf(tmp, "%d", j) == 1) {
              cols += ({ j });
              num_cols++;
            }
            add_array(cols);
            cols = allocate(num_cols);
            for (j=0;j<num_cols;j++) cols[j] = ({ });
            col_mode = 1;
            break;
          case "EO" : /* End column mode */
            for (j=0;j<num_cols;j++) {
              add_array(cols[j]);
            }
            col_mode = 0;
            break;
        }
/* Now dis bit...  */
      if (!strlen(bits[i])) continue;
      if (conv_tabs)
        bits[i] = replace(bits[i], "\t", "\n");
      if (col_mode) {
        string *frog;

        frog = explode(bits[i], "\n");
        for (k=0;k<sizeof(frog);k++) {
          bing = explode("#"+frog[k], "\t");
          bing[0] = bing[0][1..1000];
          for (j=0;j<num_cols && j < sizeof(bing);j++)
            cols[j] += ({ bing[j] });
          for (j=sizeof(bing);j<num_cols;j++)
            cols[j] += ({ "\n" });
        }
      } else if (strip_crs) {
        bits[i] = replace_string(bits[i], "\n\n", "$%^NeW_LiNe^%$");
        bits[i] = replace_string(bits[i], "\n", " ");
        bits[i] = replace_string(bits[i], "$%^NeW_LiNe^%$", "\n\n");
        add_string(bits[i]+" ");
      } else
        add_string(bits[i]+"\n");
/*
    }
 */
  }
  new_string = 0;
    force_string = 0;
  save_object(out_file,1);
  return 1;
}

void create_help(string path, string file) {
  if (path[0..4] == "/doc/")
    this_object()->create_nroff(path+file, NROFF_DIR+file);
  else
    write("Invalid path. "+path+"\n");
}

void create_chelp(string path, string file) {
  if (path[0..4] == "/doc/")
    this_object()->create_nroff(path+file, CNROFF_DIR+file);
  else
    write("Invalid path.\n");
}