!	 $eterna: if,v 1.8 2021/03/21 04:29:43 mrg Exp $
!
! Copyright (c) 1990-2018  Michael Sandrof, Troy Rollo, Matthew Green,
! and other ircII contributors.
!
! All rights reserved.  See the HELP IRCII COPYRIGHT file for more
! information.
!
Usage: IF (<variable-expression>) {<true-command/s>} [{<false-command/s>}]
  IF tests the value of the variable expression for truth. An
  expression is true if it is either a non empty string or a non
  zero number. If the expression is true, the true-commands are
  executed. If it is false, and the false-commands are given, they
  are executed. Usually the expressions will be formed by using
  combinations of the following:
    ( exp )               ( exp1 ^^ exp2 )
    ( exp1 == exp2 )      ( exp1 >= exp2 )
    ( exp1 != exp2 )      ( exp1 <= exp2 )
    ( exp1 >  exp2 )      ( exp1 || exp2 )
    ( exp1 <  exp2 )      ( exp1 && exp2 )
        
  Here exp is evaluated as though it were in ${} which means that 
  if (blah)  expands the contents of $blah.  Numbers are treated 
  as constants and thus to expand $0 it must be passed to the 
  regular parser with [].   eg.  IF ([$0]) ...

  IF (!exp)  is also possible which will negate a number or a string.
  In the other expressions, if both exp1 and exp2 expand to numbers, 
  then the following cause true-command to be executed:
    ==     if exp1 is equal to exp2
    !=     if exp1 is not equal to exp2
    >      if exp1 is greater than exp2
    <      if exp1 is less than exp2
    >=     if exp1 is greater than or equal to exp2
    <=     if exp1 is less than or equal  to exp2
    ^^     Logical XOR of exp1 and exp2 (1 ^^ 1) == 0 
           (1 ^^ 0) or (0 ^^ 1) == 1
    ||     Logical OR of exp1 and exp2
    &&     Logical AND or exp1 and exp2

  Otherwise, false-command (if present) is executed.
  If both exp1 and exp2 are non-numeric, then the above operations
  are string value comparisons.  And for the logical operations 
  A NULL string is treated as 0 with the possible exception of the ^^
  operator.

  To put a string in an expression it must be passed to the 
  regular parser with [].   eg IF ([string1] == [string2]) ..
  All string comparisons are case-insensitive: so ([Hello]==[HELLO])
  is true.  

  Examples:
    IF (C) { set input_prompt $C } { set -input_prompt }
    IF (C!=0) { set input_prompt $C } { set -input_prompt }

  Both of the above evaluate the same way, since $C will either expand 
  to your current channel or 0 if none.  Notice the (C) format which 
  means that it will expand exactly like ${C}.
 
  $ expansion is always performed on the contents of an the true-commands
  and false commands, regardless of the setting of the INPUT_ALIASES
  variable. 

    IF (USER==[ms5n]) { echo Hello Mike! } { echo Who the hell are you? }

  This example will look for an ASSIGN'd variable named USER, and if found
  replace it and compare to ms5n.  If no ASSIGN'd variable exists, it
  will check the environment variables for USER and return that.  

    IF (index > max*2) { echo Limit reached }
  This checks the ASSIGN'd variable against the ASSIGN'd variable
  max times 2 and displays "Limit reached" if the first is greater than
  the second. It does nothing if this is not true.

  IF's can now be imbedded within each other. It is inconvient to write it 
  out on a single line, so I will show the format needed in a script file.

  if (time() - lasttime > 600)
  {
    if (thud == [gone home])
    {
      echo Bill went home over ten minutes ago
      echo $stime($time())
    }
    {
      echo Bill is still here.
    }
  }

  This will first expand the function time() and the ASSIGN'd var 'lasttime'
  to their current values, subtract (seconds) and see if its more than 
  600 seconds, (10 minutes).  If that is true, then it checks to see if the
  ASSIGN'd var 'thud' equals the string "gone home".  If that is ALSO true
  then it will echo "Bill went home over ten minutes ago" and the current
  date and time.  If the second IF is not true then it will display
  "Bill is still here.".   Note there is no 'false' clause for the first
  IF.

See Also:
  @
  FOREACH
  WHILE
  expressions
