gasp.info: Conditionals

Go forward to Loops
Go up to Commands
Go to the top op gasp

Conditional assembly

   The conditional-assembly directives allow you to include or exclude
portions of an assembly depending on how a pair of expressions, or a
pair of strings, compare.
   The overall structure of conditionals is familiar from many other
contexts.  `.AIF' marks the start of a conditional, and precedes
assembly for the case when the condition is true.   An optional
`.AELSE' precedes assembly for the converse case, and an `.AENDI' marks
the end of the condition.
   You may nest conditionals up to a depth of 100; GASP rejects nesting
beyond that, because it may indicate a bug in your macro structure.
   Conditionals are primarily useful inside macro definitions, where you
often need different effects depending on argument values.  *Note
Defining your own directives: Macros, for details about defining macros.
`.AIF EXPRA CMP EXPRB'
`.AIF "STRA" CMP "STRB"'
     The governing condition goes on the same line as the `.AIF'
     preprocessor command.  You may compare either two strings, or two
     expressions.
     When you compare strings, only two conditional CMP comparison
     operators are available: `EQ' (true if STRA and STRB are
     identical), and `NE' (the opposite).
     When you compare two expressions, _both expressions must be
     absolute_ (*note Arithmetic expressions in GASP: Expressions.).
     You can use these CMP comparison operators with expressions:
    `EQ'
          Are EXPRA and EXPRB equal?  (For strings, are STRA and STRB
          identical?)
    `NE'
          Are EXPRA and EXPRB different?  (For strings, are STRA and
          STRB different?
    `LT'
          Is EXPRA less than EXPRB?  (Not allowed for strings.)
    `LE'
          Is EXPRA less than or equal to EXPRB?  (Not allowed for
          strings.)
    `GT'
          Is EXPRA greater than EXPRB?  (Not allowed for strings.)
    `GE'
          Is EXPRA greater than or equal to EXPRB?  (Not allowed for
          strings.)
`.AELSE'
     Marks the start of assembly code to be included if the condition
     fails.  Optional, and only allowed within a conditional (between
     `.AIF' and `.AENDI').
`.AENDI'
     Marks the end of a conditional assembly.