List of modifications done by Happy Iny.

*** New and modified commands:

Command: loop - added evaluation of the parameters (MODIFIED)
Syntax:  #loop {a,b} {do this}
Example: The update means that the following line now works
           #loop {$a,$b} {#shomwe %0}
         provided 'a' and 'b' are variables which contain numbers.

Command: ifexists - checks if a variable exists or not (NEW)
Syntax:  #ifexists {varname} {do this} else {do this instead}
Example: #ife {leader} {say My leader is $leader!} else {say I have no leader!}

Command: ifmatch - checks a string for a mask containing text and *'s (NEW)
Syntax:  #ifmatch {mask} {string} {do this} else {do this instead}
Example: #ifm {*Iny*} {This is a test string: Iny!} {#shomwe Works fine!} else {#showme Call 911 - the procedure
         doesn't work!}

Command: ifstrequal - string comparisment (NEW)
Syntax:  #ifstrequal {string1} {string2} {do this} else {do this instead}
Example: #alias {tell} {#ifs {$1} {$whoami} {#showme [Tell to self]: %0} else {Tell %0}}

Command: getvarvalue - get the contents of a variable (NEW)
Syntax:  #getvarvalue {dest var} {source var}
Example: #getv {numberofmobs} {mobThe Spirit Guard}
Info:    The variable name can contain any character; not just alpha chars!
         This function was made more or less redundant when I introduced the
         improved naming of variables by allowing brackets around the name.
         ( ${variablename} ). But it's kept for compability with earlier
	 comfiles.


Command: revstring - reverses a string/stores it backwards (NEW)
Syntax:  #revstring {dest var} {string}
Example: #revs myname Happy Iny <-- stores 'ynI yppaH' in the variable 'myname'

Command: postpad - pads a variable with spaces AFTER given text until variable
                   is of desired length (truncates if too long)  (NEW)
Syntax:  #postpad {dest var} {length} {text}
Example: #postpad mobname 15 A huge, ancient tree, walking on giant roots,
         #postpad myname 15 Iny

Command: postpad - pads a variable with spaces BEFORE given text until variable
                   is of desired length (truncates if too long)  (NEW) 
Syntax: #prepad {dest var} {length} {text}
Syntax: #prepad mobname 15 A huge, ancient tree, walking on giant roots,
        #prepad myname 15 Iny

*** Commands which can be used to simulate lists/arrays:


I've defined a list the following way:
  1. is a textstring
  2. contains any number of elements
  3. each element is either ONE word OR enclosed in a set of brackets

Examples:
#var alignlist {evil neutral good}   <--- creates a list with 3 elements: 1. evil, 2. neutral, 3. good
#var rndsocial {smile {say WHEE!} bounce}  <---- creates a list with 3 elements: 1. smile, 2. say WHEE!, 3. bounce

The following commands have been created to allow manipulations of lists:

Command: getlistlength - returns the length of a list (NEW)
Syntax:  #getlistlength {dest var} {list}
Example: #getl Length {$alignlist}   <--- returns 3 in the Length variable

Command: getitemnr - retrieves specified element from a list (NEW)
Syntax:  #getitemnr {destination variable} {item number} {list}
Example: #geti {dothis} {2} {smile {say Hi!} flip bounce}  <--- sets dothis to 'say Hi!'
Example: #getl Length {$rndsocial};#ran itemnr {1,$Length};#geti temp {$itemnr} {$rndsocial};{$temp}
         (will perform a random social from the 'rndsocial' list)


*** Added features:

IMPROVED VARIABLE NAMING:
Added the possibility to add non-alpha characters (numbers,space,etc.) in variable names.
(Which kind of makes the #getvarvalue command redundant, but it's kept for compatibility).
Usage will hopefully be demonstrated by this example:
#var {spellcost holy sphere} {150}
#ali {holy} {#if {$manaleft < ${spellcost holy sphere}} {say Don't have enough mana to cast holy!}
     else {cas 'holy sphere'}}

OR this more complex one:

----->8---- cut here ---->8-------
#nop GENERAL STUFF
#ali {===}  {#nop}
#ali {clv}  {#var %0 0}
#ali {incv} {#math {%%0} {$%%0+1}}

=== GENERAL LOG THINGIE ===
#var logname Default; === Set the default logname
#var {GETLOGSIZE}   {#ifex {$logname} {#var logsize ${$logname}} else {clv logsize;#var {$$logname} 0}}
#var {SHOWLOGTITLE} {#showme {== LOG: $logname ==  SIZE: $logsize ==}}
#var {SHOWCONTENTS} {#loop {1,$$logsize} {#var logmsg ${$logname %%0};#showme {$logmsg}};#unvar logmsg}

#ali {writelog}     {$$GETLOGSIZE;incv logsize;{#var {$$logname} {$$logsize}};{#var {$$logname $$logsize}
                    {%%%0}}}

#ali {showlog}      {$$GETLOGSIZE;$$SHOWLOGTITLE;#if {$logsize>0} {$$$SHOWCONTENTS}}
#ali {clearlog}     {#unvar {$$logname*};MSG The log "$logname" has been cleared !}

=== MOB COUNTER THINGIE ===
#act {%0 is dead! R.I.P.} {#var ripname %0}

#act {^You receive %1 experience points.} {#ifex {mob $$ripname} {#var MobCount ${mob $ripname};incv MobCount;
     {#var {mob $$ripname} $MobCount}} else {#var {mob $$ripname} 1;#var logname Mobs;writelog $ripname}}

#var {SHOWMOBS} {#loop {1,$$logsize} {#var logmsg ${$logname %%0};
     {#showme {$logmsg - RIPS: ${mob $logmsg}}}};#unvar logmsg}

#ali {showmobs} {#var logname Mobs;$$GETLOGSIZE;#if {$logsize>0} {$$$SHOWMOBS}}
#ali {clearmoblog} {#var logname Mobs;clearlog;#unvar mob *}

=== Clear temporary variables ===
#unvar GETLOGSIZE;#unvar SHOWLOGTITLE;#unvar SHOWCONTENTS
#unvar SHOWMOBS

--->8--- cut here --->8----

Example which uses the commands above:
Let's say the text inside the ---cut--- lines have been loaded and that the following lines
has been received on the mud:
  The Spirit Guard is dead! R.I.P.                       ] occured 3 times
  You receive your share of 354325 experience points.    ]

  The Spirit Sergeant is dead! R.I.P.                    ] occured 2 times
  You receive your share of 345552 experience points.    ]

Using the alias 'showmobs' will then display the following list
(providing the alias 'clearmoblog' was run first):
---
The Spirit Guard - RIPS: 3
The Spirit Sergeant - RIPS: 2
---

TICKCOUNTER:
============
A variable containing the number of seconds to tick from tintin's internal tickcounter
has been implemented.
NB! The variable is only SIMULATED which means it won't be shown in the #variable list.
Example: say There's approximately $secstotick seconds again to the tick.

I also removed the annoying TICK messages from tintin... which means the tickcounter will
run silently.


FUNCTIONS:
==========
Added a new list type which I decided to call functions. These are a mixture of aliases and
variables. The following examples will have to do to explain how to use functions:

Example:
#function {rnd} {#random {temp} {%1,%2};#result {$temp};#unvar temp}
#showme A random number between 0 and 100: @rnd{0 100}

Functions are treated much like variables. Their value is
a command-line which is executed, and the functions are substituted
by the parameter last sent to the #result command

Example:
#function {lastfuncresult} {#nop}
#showme Last use of a function gave @lastfuncresult as result.

NB! Functions are NOT evaluated at all the same places as variables so before
you decide to write a long comfile using functions - check if it works first! :)
I might finish my work on the functions later, right now I'm too lazy to though.

=== FUNCTIONS ARE FOR INSTANCE _NOT_ EVALUATED INSIDE AN IF STATEMENT - YET! ===

*** Function related commands:

Command: result - write a string to the function buffer (NEW)
Syntax:  #result {-result-}
Example: #func {ctof} {#math result %0*9/5+32;{#result $result degrees fahrenheit};#unvar result}
         #showme 30 degrees celsius equals @ctof{30}.
Example: #func {ftoc} {#math result (%0-32)*5/9;{#result $result degrees celsius};#unvar result}
         #showme 80 degrees fahrenheit equals @ftoc{80}.

Command: function - make a function (NEW)
Syntax:  #function {func name} {-function contents- (;#result -function result-)}
Info:    Will display all functions if no parameter is given
Example: (see example for the 'result' command)

Command: unfunction - remove a function (NEW)
Syntax:  #unfunction {func name}

Note: Functions also allow the 'new' format used for variables. that is
      @{name}{params} to allow complex names containing non-alpha chars.


That's all I could think of that I've modified on the 1.61dev version. If you find any bugs or
errors in the docs above please write me a note about it.

I'd also like suggestions to new commands/features or changes which can be made to
already existing commands.


NB! I do not officially support this version in any way! :)


//Sverre is Happy Iny (sverreno@stud.ntnu.no)
  (www.stud.ntnu.no/~sverreno)