[IDEA] External argument parser

From: Andrey Fidrya (andrey@ALEX-UA.COM)
Date: 08/26/98


I want to suggest a new type of command argument parser for CircleMUD. Instead
of passing full argument to ACMD and then converting it to few strings and
processing it with get_char_vis, get_obj_vis etc we can parse all arguments
before calling ACMD, and pass only pointers to prepared linked lists to it.
This way, most ACMD functions will become a lot smaller and easier to
understand and even some parsing bugs will disappear. (for example: do_stat...
currently if you have a sword in your hand and two swords in inventory, you
_can't_ access first sword in inventory).
Also, this system gives few additional features to players, for example:
put 10 coins purse - will put 10 coins to purse.
I already implemented this system in RMUD (aka 3MoonsWorld) and it works
great!
Compare this do_give (arguments given by external parser) with original one:

ACMD(do_give)
{
  struct obj_data *obj, *next_obj;

  if (!aobj1)
    send_to_char("Give what to whom?\r\n", ch);
  else if (!ach2)
    send_to_char("Give it to whom?\r\n", ch);
  else {
    for (obj = aobj1; obj; obj = next_obj) {
      next_obj = obj->ll1_next;
      if (GET_OBJ_TYPE(obj) == ITEM_MONEY)
        perform_give_gold(ch, ach2, obj);
      else
        perform_give(ch, ach2, obj);
    }
  }
}

aobj1, aobj2 - pointers to linked lists of objects (argument 1 & argument 2)
ach1, ach2 - pointers to linked lists of chars
Also, there is arg1 and arg2 - pointers to plain text arguments and
argument - unparsed remainings of string.

It took me only 3 days to implement this system. Alas, I can't make a patch
since RMUD is heavily modified (more than 200 major code changes), but if
Jeremy is interested in converting Circle to external parsing of arguments, I
will provide all required information.

  Andrey (andrey@alex-ua.com)
    aka Zmey // RMUD


     +------------------------------------------------------------+
     | 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