[CODE] A nifty Perl script...

From: Daniel Houghton (dasher@TEZ.NET)
Date: 03/10/98


While greatly modifying my MUD's skill list, I tired quickly of
rewriting the spells[] string array to reflect the defines I was making
in spells.h.  I'm sure I'm not the first.

Hence, something to scratch that itch.  I wrote a Perl script that
writes to a new file, spells.writeout, an automatically generated
spells[] array that can be easily cut and pasted into spell_parser.c.
No more mismatch errors! :)

I hope this proves useful to someone.

        Daniel Houghton AKA Garadon

--8<--

#!/usr/bin/perl

# spellwriteout.pl
# Daniel Houghton
# March 8, 1998

# Purpose:  Scan Phase ]['s spells.h for defines of skill numbers, writing
# out a formatted spells[] array to match it.

$debug = 0;

open (SPELLSH, "< spells.h");

# Skip all lines previous to the first sphere.
while ($linein = <SPELLSH>) {
  last if ($linein =~ /\#define\s+SPELL\_RESERVED\_DBC/);
}

while ($linein = <SPELLSH>) {

  # Quit out if we have the last skill number.
  if (($linein =~ /^\s*\#define\s+TOP_SPELL_DEFINE\s+(\d+)/)) {
    $last_skill_num = $1 + 1;
    last;
  }

  if (($linein =~ /^\s*\#define\s+SKILL\_(\w+)\s+(\d+)/) ||
      ($linein =~ /^\s*\#define\s+SPELL\_(\w+)\s+(\d+)/)) {
    $skillname = $1;
    $skillnum = $2;

    $skillname =~ tr/A-Z/a-z/;
    $skillname =~ tr/\_/ /;
    $spells[$skillnum] = $skillname;
  }
}
close (SPELLSH);

open (SPELLOUT, "> ./spells.writeout");

if ($debug) {
  print SPELLOUT "last_skill_num:  $last_skill_num\n";
  print SPELLOUT"@spells\n\n\n\n\n";
}

print SPELLOUT "char *spells[] =\n{\n",
               "  \"\!RESERVED\!\",                   /* 0 - reserved */";

for ($i = 1; $i < $last_skill_num; ++$i, $i) {

  if ($spells[$i]) {

    print SPELLOUT "\n";
    print SPELLOUT "  \"$spells[$i]\"\,";
    print SPELLOUT "\t\t\/\* $i \*\/" unless ($i % 5);

    $lastunused = 0;    # A toggle used to choose formatting on the next line.

  } else {

    print SPELLOUT "\n  " unless ($lastunused);
    print SPELLOUT "\"\!UNUSED$i\!\"\, ";

    unless ($i % 5) {

      print SPELLOUT " \/\* $i \*\/";
      $lastunused = 0;

    } else {

      $lastunused = 1;

    }
  }
}

print SPELLOUT "\n  \"\\n\"\n};\n\n";   # close out the spells array.

close (SPELLOUT);

     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/15/00 PST