@DATABASE "ARBGl"
@INDEX "ARB:Misc/Index.Text/Main"
@HELP "ARB:Misc/Help/Main"
@NODE "Main" "ARexx For Beginners - Glossary"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS

GLOSSARY

BY FRANK BUNTON@{UB}@{UU}

@{" COPYRIGHT © FRANK P. BUNTON 1995-1997 " LINK "ARB:Misc/Read_Me_First!!/Copyright"}@{UB}@{UU}


@{" AmigaDOS                     " LINK "AmigaDOS"}
@{" Arguments                    " LINK "Arguments"}
@{" ASCII                        " LINK "ASCII"}
@{" Assignments                  " LINK "Assignment"}

@{" Boolean Values               " LINK "Boolean"}

@{" Commodore Hornsby User Group " LINK "CHUG"}
@{" Clauses                      " LINK "Clauses"}
@{" CLI and Shell                " LINK "CLI_&_Shell"}
@{" Commands                     " LINK "Commands"}
@{" Comments                     " LINK "Comments"}
@{" Console Window '*'           " LINK "Console"}

@{" Directory Utilities          " LINK "DirUtility"}

@{" Expressions                  " LINK "Expressions"}

@{" Files                        " LINK "Files"}
@{" Format of Instructions       " LINK "Format"}
@{" Functions                    " LINK "Functions"}

@{" Instructions                 " LINK "Instructions"}
@{" Integer Numbers              " LINK "Integer_Numbers"}
@{" Inter Process Communication  " LINK "IPC"}

@{" Keywords                     " LINK "Keywords"}

@{" Labels                       " LINK "Labels"}
@{" Logical Devices              " LINK "Devices"}

@{" Number Notations             " LINK "Number_Notations"}
@{" Number Systems               " LINK "Number_Systems"}

@{" Operators                    " LINK "Operators"}

@{" Path                         " LINK "Path"}
@{" Public Domain                " LINK "PD"}
@{" Program Elements             " LINK "Program_Elements"}

@{" Special Characters           " LINK "Special_Characters"}
@{" Statements                   " LINK "Statements"}
@{" Streams                      " LINK "Streams"}
@{" Strings                      " LINK "Strings"}
@{" Symbols                      " LINK "Symbols"}

@{" Tokens                       " LINK "Tokens"}

@{" Using The Shell & CLI        " LINK "Using_CLI"}

@{" Viruses                      " LINK "Viruses"}


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "AmigaDOS" "Glossary - AmigaDOS"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}AMIGADOS@{UB}@{UU}
@{JLEFT}
@{B}AmigaDOS@{UB} is the term applied to Amiga's equivalent of MS-DOS that is used
on IBM compatible computers.

DOS was originally an acronym for "Disk Operating System". Some say it
should be "Disk Based Operating System" as it does a lot more than operate
a disk and that it was really an operating system based (stored) on a
disks. Some say it should be "Device Operating System". These days a lot
of the operating system is hard coded into the Amiga's ROM chips so that
it is no longer disk based. It is best to forget that DOS ever stood for
anything.

AmigaDOS is not just a set of commands nor is it just a @{"Shell or CLI" LINK "CLI_&_Shell"} window.
It is the software side of the Amiga's complete operating system. It
controls all the functions of the computer such as multitasking,
peripheral control and disk filing systems.

To learn all about AmigaDOS you should get hold of a copy of my disk called
@{"AmigaDOS For Beginners" LINK "ARB:Misc/Read_Me_First!!/ADB"}.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Arguments" "Glossary - Arguments"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}ARGUMENTS@{UB}@{UU}
@{JLEFT}
An @{B}ARGUMENT@{UB} is a piece of information that is transferred:-

1. - FROM the @{"CLI/Shell" LINK "CLI_&_Shell"} which starts the ARexx program TO the
     program
2. - FROM the ARexx program TO a @{"function" LINK "Functions"}
3. - FROM the ARexx program TO another program with which it is
     communicating.

Examples of these three categories are shown below.

1. Passing information to the ARexx program when it is @{"started up" LINK "Using_CLI"}
   from @{"Shell/CLI" LINK "CLI_&_Shell"} can be illustrated with:-

   > RX MyProgram.rexx 10,'Fred Bloggs'

   The items @{B}10@{UB} and @{B}'Fred Bloggs'@{UB} are two arguments whose values can
   be picked by the program "MyProgram.rexx" and used during its
   operation.

2. Passing information from the ARexx program to a function can be
   illustrated with:-

   SAY CENTRE('This is a Test',55)

   The two items @{B}'This is a Test'@{UB} and @{B}55@{UB} are the
   arguments that are passed from the program to the function CENTRE.

3. Passing information to another program can be illustrated with:-

   ADDRESS 'COMMAND'
   'DIR' 'Disk:Directory/fileName'

   After using the ADDRESS instruction to tell the program
   "AMIGADOS" that we are going to talk to it, we send the command
   "DIR" together with the @{B}argument@{UB} 'Disk:Directory/fileName'.

The contents of the argument can be varied at the discretion of the
programmer, within the guidelines of the syntax of the function or external
program, to suit the way the program is meant to work. Compare this to a
@{"Sub Keyword" LINK "keywords"} which @{B}cannot@{UB} be varied by the programmer.

@{B}Arguments@{UB} could be considered as a special type of @{"Expression" LINK "Expressions"}.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "ASCII" "Glossary - ASCII"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}ASCII@{UB}@{UU}
@{JLEFT}
@{B}ASCII@{UB}, pronounced "Askey", stands for American Standard Code for
Information Interchange. Basically, it is a system of allocating a unique
@{"CODE" LINK "ARB:Appendices/App-C_ASCII_Codes/MAIN"} number for each character such as 65 for "A", 66 for "B", etc. Most
computers store files containing only text in standard ASCII codes thus
making them easily transferrable.

Text files containing only standard ASCII codes can be read by programs
called "Text Readers" which are capable of reading ASCII only files. A
(poor) example of such a text reader is the "More" program provided on
all workbench disks. There are much better ones in the
@{"Public Domain" LINK "PD"}.

Programs such as Word Processors, Desk Top Publishers and Data Base
Programs, although they contain a lot of straight text, also contain a lot
of non ASCII codes that control the formatting of the document. For
instance, the bold, underlining, tabulation, page layout, etc. in text, and
the column and row information, formulae, etc. in data bases.

Some of these programs (word processors, data bases, etc.) will store
the document as ASCII codes for text and other codes for formatting. In
this case, a text reader program will show you readable text interspersed
with strange characters in place of the formatting codes.

Other such programs will use some other method than ASCII codes to store
@{B}all@{UB} the data, i.e. formatting @{B}and@{UB} text. In this case, a text reader program
will @{B}not@{UB} show you @{B}any@{UB} text.

An @{B}ASCII file@{UB} (in word processing or data base terminology) is one saved
without all the special formatting codes used by the word processor to
indicate bold, underlining and other special features or such as those
used by the data base program to indicate column and row information,
formulae, etc. Thus the @{B}ASCII file@{UB} contains only the ASCII codes
for the text itself.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Assignment" "Glossary - Assignment"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}ASSIGNMENT@{UB}@{UU}
@{JLEFT}
@{B}Assignment@{UB} is the process of giving a value to a @{"Variable Symbol" LINK "Symbols"}.

For example:-

  Name = 'Joe Bloggs'
  Age = 53
  Score = Score + 10

The variable symbol "Name" has been assigned a value of "Joe
Bloggs"

The variable symbol "Age" has been assigned a value of 53

The symbol "Score" has been assigned a new value equal to what is was
before plus 10.

Assignments can also be made via the keyboard by using the @{"PULL" LINK "ARB:ARTICLES_01-10/08.SYMBOLS_EX_KEYBOARD/Main"}
instruction.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Boolean" "Glossary - Boolean Values"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}BOOLEAN VALUES@{UB}@{UU}
@{JLEFT}
The term @{B}BOOLEAN@{UB} comes from the English mathematician George Boole
(1815-1864) who developed a system for formulating logical statements
symbolically.

Briefly, it works on the premise that all expressions can be evaluated
as @{B}TRUE@{UB} or @{B}FALSE@{UB} and the values of 1 and 0 are assigned as the
@{B}Boolean Value@{UB} of the expression.

       TRUE  = 1
       FALSE = 0

Thus the expression:-

  12 = 12

is TRUE so that if you SAY the expression you will get 1:-

  SAY 12 = 12
  --> 1

but the expression:-

  'Me' = 'You'

is FALSE so that if you SAY the expression you will get 0:-

  SAY 'Me' = 'You'
  --> 0

Some functions can take on a Boolean value. For example, the function
EXISTS() tests to see if a disk file exists so that:-

  EXISTS('s:startup-sequence')

has a value of 1 if the file "s:startup-sequence" exists and 0 if it does
not exists.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "CHUG" "ARexx For Beginners - Glossary - C.H.U.G."

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY

COMMODORE HORNSBY USER GROUP INC. (C.H.U.G.)

P.O. BOX 1578 HORNSBY NORTHGATE N.S.W. 2077 AUSTRALIA@{UB}@{UU}
@{JLEFT}
C.H.U.G. is a club where owners of Commodore and Amiga computers can get
together to help each other to better understanding their computers and
to get the most possible out of them.

There are two subgroups - The Amiga Group (all models)
                        - The Commodore Group (64 and 128 machines)

Commodore PC (IBM compatible) computers are@{B} not@{UB} supported

@{B}@{U}FACILITIES@{UB}@{UU}

- Club meetings twice a month
- SIG (Special Interest Group) meetings on demand
- Public Domain Software Library (free catalogue disk for members)
- Club Magazine 6 times per year
- Club Newsletter every month
- Magazine Library of commercial publications
- Help for Beginners and others with problems
- Club "shop" (at meetings only) for purchase of disks and some
  other goods


For more information about C.H.U.G., please write to:-

                  Commodore Hornsby User Group Inc.
                  P.O. Box 1578
                  Hornsby Northgate
                  N.S.W. 2077
                  AUSTRALIA

@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Clauses" "Glossary - Clauses"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}CLAUSES@{UB}@{UU}
@{JLEFT}
A clause is the smallest piece of program coding that can be executed
by ARexx without an error resulting. A clause is made up of a number of
@{"TOKENS" LINK "Tokens"}. A clause could be compared, in plain English, to a @{B}sentence@{UB}
made up of a number of @{B}words.@{UB}

There are a number of different types of clauses.

@{B}INSTRUCTION CLAUSE@{UB} is one that contains one or more of the many ARexx
@{"INSTRUCTIONS" LINK "Instructions"} and the @{"expressions" LINK "Expressions"} that the programmer uses with the
instruction. For example, this line is an Instruction clause:-

  IF Count = 10 THEN SAY 'The End'

@{B}COMMAND CLAUSE@{UB} is one that sends a @{"COMMAND" LINK "Commands"} to an external program. For
example, this line is a command clause:-

  'Dir DH0:System'

This clause cannot be recognised by ARexx as any of the other types of
clauses so ARexx assumes it must be a command clause and therefore sends
it off to the external program with which it is currently communicating.
If ARexx were currently communicating with @{"AmigaDOS" LINK "AmigaDOS"} then AmigaDOS would
receive the above command line and show you the contents of the "System"
directory on drive "DH0:".

@{B}LABEL CLAUSE@{UB} is one that contains only a @{"LABEL" LINK "Labels"} to mark the start of a
piece of coding. For example, this is a label clause:-

  Multiply:

@{B}ASSIGNMENT CLAUSE@{UB} is one that is used to @{"ASSIGN" LINK "Assignment"} values to @{"SYMBOLS" LINK "Symbols"}. For
example, this is an assignment clause:-

  Score = Score + 10

@{B}NULL CLAUSE@{UB} is one that @{B}does nothing.@{UB} It may be one of:-

- A blank line inserted to make the program easier to read
- A @{"COMMENT" LINK "Comments"}

For example, these three lines, including the blank line between the two
comments, are all null clauses:-

  /* A comment line is a null clause */

  /* This is another one */


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Cli_&_Shell" "Glossary - CLI and Shell"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}CLI AND SHELL@{UB}@{UU}
@{JLEFT}
@{B}CLI@{UB} is an acronym for "Command Line Interface". It is a program that displays
a window into which the user can "Interface" with the Amiga by typing
"Lines" of "Commands".

@{B}Shell@{UB} is the more recent version of CLI (Command Line Interface). Workbench
1.2 and earlier had only CLI. Workbench 1.3 had the old CLI plus the new
CLI enhancements which they called "Shell". In wb1.3 CLI and Shell could
both be used individually. From Workbench 2 onwards, the Shell enhancements
were incorporated into the standard CLI so that they became one and the
same thing.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Commands" "Glossary - Commands"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}COMMANDS@{UB}@{UU}
@{JLEFT}
In ARexx, a @{B}COMMAND@{UB} is an order sent from ARexx to an external program
with which ARexx is communicating. The command is part of the external
program's own system. Apart from being able to be sent from ARexx to the
program, a command is not really a part of the ARexx system at all.

Commands should not be confused with @{"Instructions" LINK "Instructions"}.

For example, in this line:-

  ADDRESS 'AMIGAGUIDE.1' 'WINDOWTOFRONT'

the word "ADDRESS" is an ARexx instruction which tells the program
"AmigaGuide" to use its own command "WINDOWTOFRONT" to bring its own window
to the front of all the others.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Comments" "Glossary - Comments"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}COMMENTS@{UB}@{UU}
@{JLEFT}
A @{B}COMMENT@{UB} is a part of a program that explains something about the program.
It has no effect on the operation of the program as ARexx completely ignores
comments.

A comment is started with:-

  /*

and ended with:-

  */

For example:-

  /* This is a comment */

See Article 2 @{"Program Elements" LINK "ARB:Articles_01-10/02.PROGRAM_ELEMENTS/MAIN"} for more details.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Devices" "Glossary - Logical Devices"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}LOGICAL DEVICES@{UB}@{UU}
@{JLEFT}
Most people think of @{B}DEVICES@{UB} as physical things such as disk drives and
printers. These physical devices all have names ending with a colon (:)
such as:-

  df0: df1: dh0: Prt:

The colon is an indication to the Amiga that the text to the left of it
is a @{B}device@{UB} name or, if referring to the @{B}name@{UB} of a disk, the colon is
an indication of a @{B}volume@{UB} (disk) name that is in, or can be put in, a
drive. For example:-

  Workbench2.1:

The Amiga can be set up to recognise @{B}logical devices@{UB} . Such logical device
names also have a colon at the end of them. For example, the following
logical device names are some of those that are automatically set up when
your Amiga is booted:-

  Logical
  Device
  @{U}Name  @{UU}   @{U}Directory that the logical device is referencing@{UU}

  SYS:    root directory of the boot disk
  Fonts:  fonts directory of the boot disk
  Libs:   libs directory of the boot disk
  C:      c directory of the boot disk
  S:      s directory of the boot disk
  L:      l directory of the boot disk
  Devs:   devs directory of the boot disk

Assignments to logical device names can be made with the @{"AmigaDOS" LINK "AmigaDOS"} command
ASSIGN as follows:-

  ASSIGN Name: Directory

where:-

- @{B}Name:@{UB}     is the name you are going to give the logical device
- @{B}Directory@{UB} is the name of the directory including its @{"path" LINK "path"} to
            which the "Name:" is to refer.

For example, to change the assigned "Fonts:" directory, you could
use:-

  ASSIGN Fonts: df1:Fonts

Now, when the system wants some fonts, it will @{B}no longer@{UB} look in the fonts
directory of the boot disk but, instead, it will look in the fonts directory
of the disk in df1:

When using ARexx, the @{"RX" LINK "ARB:Articles_01-10/03.COMMAND_UTILITIES/RX"} command needs an assigned logical device named
"Rexx:" in which to look for its programs to run. This assignment is usually
made with the line:-

  ASSIGN Rexx: Sys:S

However, if you wanted your ARexx programs in a separate directory to
all the other "S" directory files, then you could make a new directory
called, say, ArexxS, and use:-

  ASSIGN Rexx: Sys:ARexxS

and then, when RX looks in the logical device "Rexx:" it will look in
your directory "Sys:ARexxS".


@{JCENTER}=== End of Text ===
@{JLEFT}









@ENDNODE

@NODE "Console" "Glossary - Directory Utilities"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}CONSOLE WINDOW "*"@{UB}@{UU}
@{JLEFT}

A @{B}Console@{UB} is a window into which input (e.g. from the keyboard or disk
drive) can be displayed and into which a user can enter data via the
keyboard.

The input and output are referred to as @{"Streams" LINK "Streams"}.

A @{B}Console Handler@{UB} is the program that controls this window and its
streams.

The current console can be referred to as "*". For example, if you enter
into a Shell/CLI window:-

  > COPY * Ram:MyFile

or

  > COPY * Prt:

Then anything typed into the the Shell/CLI after that is sent to the file
in Ram: called "MyFile" or to the printer respectively.

For a Shell/CLI window, the output is returned to that window by
entering:-

  CTRL\\

This means:-

  Hold down the CTRL key and press \\


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "DirUtility" "Glossary - Directory Utilities"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}DIRECTORY UTILITY@{UB}@{UU}
@{JLEFT}
A @{B}Directory Utility@{UB} is a program that lets you examine the contents of
disks and directories by directory and file name rather than by workbench
icons. A good Directory Utility will have two windows side by side in
which are shown the contents of two different directories, either on the
same or different disks.

The program allows you to see files not normally visible by icons.

It allows you to do a lot of @{"AmigaDOS" LINK "AmigaDOS"} functions such as copying, deleting,
renaming, viewing, etc. without having to learn all the CLI commands.
You can, for instance, click on a file name in one window and then click
on a button called COPY and the file will be copied from the directory
represented in that window to the one represented in the other
window.

Modern directory utilities such as "DirWork 2" and "Directory Opus" (both
commercial products) have an extremely large range of capabilities and
can be configured to suit you own purposes.

There are also quite a few in the @{"Public Domain" LINK "PD"}.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Expressions" "Glossary - Expressions"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}EXPRESSIONS@{UB}@{UU}
@{JLEFT}
An @{B}expression@{UB} is one or more @{"TOKENS" LINK "Tokens"} that are put together by the programmer
at his/her discretion. I guess you could say that it is a statement
(expression) made by the programmer as opposed to the rigidity of the
@{"KEYWORDS" LINK "Keywords"} that must conform to the syntax of ARexx.

An expression can consist of these tokens:-

  @{"SYMBOLS     " LINK "Symbols"}
  @{"STRINGS     " LINK "Strings"}
  @{"OPERATORS   " LINK "Operators"}
  @{"PARENTHESES " LINK "Special_Characters"}

In these examples, the KEYWORDS are in upper case and the expressions
are in lower case and in bold:-


  SAY @{B}'This string is an expression'@{UB}
  @{B}Count = Count + 1@{UB}
  DO WHILE @{B}Number < 100@{UB}
  IF @{B}Name = 'Q'@{UB} THEN SAY @{B}'Quitting Program'@{UB}
  SAY @{B}(Count + Score) * 100@{UB}

1st Line - SAY is the Keyword
         - 'This string is an expression' is the expression

2nd Line - there is no Keyword
         - Count = Count + 1 is the expression

3rd Line - DO and WHILE are Keywords
         - Number < 100 is the expression

4th Line - IF, THEN and SAY are Keywords
         - Name = 'Q' is the expression linked to IF ... THEN
         - 'Quitting program' is the expression linked to THEN SAY

5th Line - SAY is the Keyword
         - (Count + Score) * 100 is the expression


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Files" "Glossary - Files"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}FILES@{UB}@{UU}
@{JLEFT}
In general terms, a file is:-

  A collection of data that is:-
  - organised into the one unit and,
  - can be referenced by name.

The most common form of file is a disk file which can be a program, a
letter, a picture, an icon, or anything else that can be saved to
disk.

Other types of files are not quite so easy to understand but can still
referred to as files by an ARexx program.

A @{B}printer@{UB} file is a collection of data sent to your printer. When you
select @{B}Print@{UB} from your word processor menu, it collects all the data in
your document and send it to the printer as one unit. At the end of the
document, the word processor sends an @{B}End Of File@{UB} signal to the
printer.

In the same way, files can be sent over @{B}modems@{UB} or can be sent to a @{"console" LINK "Console"}
window.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Format" "Glossary - Format of Instructions"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}FORMAT OF INSTRUCTIONS@{UB}@{UU}
@{JLEFT}
ARexx manuals all tend to use the @{B}FORMAT@{UB} at the start of the instruction
description.

This format has a number of items in it (see examples below):-

@{"KEYWORD" LINK "Keywords"}     - This is the instruction or function itself
               or one of its sub keywords.

SUB-KEYWORD - This is another keyword used in conjunction with the
              main keyword. It may be essential or optional.

KEYWORDS &  - These are shown in UPPER CASE to distinguish them from
SUB-KEYWORDS  arguments. However, their case can be upper or lower when
              used by the programmer. The @{B}spelling@{UB} of keywords and
              sub-keywords must be  exactly as shown.

@{"ARGUMENTS" LINK "Arguments"}  - These are items that are inserted by the programmer to
              give ARexx some information about the way the instruction
              should work or the @{"string" LINK "strings"} or number on which the instruction
              should work.

              Arguments are usually shown in lower case to
              distinguish them from keywords.

              The text of arguments is determined by the programmer
              and thus is not normally the word shown in the manuals.
              The word used is merely an indication to the programmer of
              the type of insert that should be made at that spot. For
              example "filename" might indicate that the name of a
              disk file should be inserted in lieu of "filename".

              The case may or may not be important. This will have to
              be determined by the context of the instructions.

Whereas the @{B}NAME@{UB} of the instruction or function (i.e. the MAIN keyword) is
always necessary, other parts of the format (including SUBKEYWORDS) may be
optional or essential. This is indicated by the use of these symbols:-

 |  the vertical bar is used to separate alternate selections of
    which only one can be used.

 {} braces (curly brackets) are used to enclose arguments or
    sub-keywords where it is essential that one of the alternatives
    separated by the | be included.

 [] brackets are used to enclose arguments or sub-keywords that are
    optional. These may be single items or alternative items separated
    by the | symbol.

    Items not enclosed by {} or [] are essential.

 () parentheses are used to enclose the arguments used for
    @{"functions" LINK "Functions"}

@{B}@{U}Examples@{UB}@{UU}

  @{B}SELECT@{UB}

  Nothing follows the keyword so it is used on its own.

  @{B}SAY@{UB} [expression]

  The "expression" is enclosed in [] so it is optional.
  It is in lower case so it is not a keyword but an argument the text
  of which which is set by the programmer.

  @{B}NUMERIC@{UB} FORM {SCIENTIFIC|ENGINEERING}

  The sub-keyword "FORM" is not enclosed in any form of brackets so
  it is essential.

  The SCIENTIFIC|ENGINEERING is enclosed in braces and the two
  sub-keywords are separated by the vertical bar | so one and only one
  of them is essential.

  @{B}OPEN@{UB}(file,filename [,'APPEND'|'WRITE'|'READ']

  The parentheses () indicate this is a function, not an
  instruction. The "file" and "filename" are in lowercase so they are not
  keywords but arguments. Their actual text is therefore set by the
  programmer. The part in brackets [] is optional but if used, must be only
  one of the sub-keywords separated by the vertical bars.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Functions" "Glossary - Functions"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}FUNCTIONS@{UB}@{UU}
@{JLEFT}
A @{B}FUNCTION@{UB} is a piece of programming code written for a special purpose,
i.e. to carry out specific @{B}function.@{UB} These pieces of coding can be invoked,
or called into use, at any point of a program whenever that function is
to be performed. After the function has completed its job the program
returns to the point in the program from which the program was
called.

There are three types of functions recognised by ARexx. They are:-

- Internal Functions
- Built In Functions
- Function Libraries

@{B}Internal Functions@{UB} are ones that are written into the program's coding
by you, the programmer. They could be considered as a "sub-program" within
the main program and need to be called or invoked from the main program.
Some programming languages call them "Sub Routines". Read @{"Article 16" LINK "ARB:Articles_11-20/16.FUNCTIONS-Internal/MAIN"} for
more details.

@{B}Built In Functions@{UB} are ones that are a part of the ARexx interpreter system
and so are @{B}not@{UB} part of the program. However, they can still be likened
to "sub-programs" and can be called or invoked from within your own program.
They are often distinguished from @{"Instructions" LINK "Instructions"} by the parentheses () that
follow the function name. For example CENTRE(). Read @{"Articles 17" LINK "ARB:Articles_11-20/17.FUNCTIONS-Built_In/MAIN"} for more
details.

@{B}Function Libraries@{UB} are files external to both the ARexx program and the
ARexx interpreter system. A "Function Library" is a single file that is
a collection of functions organised in the manner of "Amiga Shared
Libraries"*. However, it must have been written in such a way as to make
it suitable for use by ARexx. An example of a "Function Library" is the
"rexxsupport.library" file that contains 11 functions. Read @{"Articles 39" LINK "ARB:Articles_31-40/39.Support.Library/MAIN"}
for more details.

* An "Amiga Shared Library" is one of the many files stored in the "Libs"
directory (or, in later Amigas, may be stored in ROM chips) that can be
used by any program that calls upon it. They can be "shared" by all programs.
Examples are:-

  diskfont.library
  icon.library
  mathtrans.lirary


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Instructions"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}INSTRUCTIONS@{UB}@{UU}
@{JLEFT}
An ARexx @{B}INSTRUCTION@{UB} is one of the 29 @{"Keywords" LINK "keywords"} that the ARexx interpreter
recognises as an order to do something. In this @{"statement" LINK "Statements"} for
example:-

 SAY "Peter Piper picked a peck of pickled peppers"

The word SAY is an instruction to ARexx to put the @{"string" LINK "Strings"} that follows
it into the display window so that the user can see it.

Instructions should not be confused with @{"Commands" LINK "Commands"}.

For example, in this line:-

  ADDRESS 'AMIGAGUIDE.1' 'WINDOWTOFRONT'

the word "ADDRESS" is an ARexx instruction which tells the program "AmigaGuide"
to use its own command "WINDOWTOFRONT" to bring its own window to the
front of all the others.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Integer_Numbers" "Glossary - Integer Numbers"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}INTEGER NUMBERS@{UB}@{UU}
@{JLEFT}
An INTEGER number is, simply, a number without a fractional part.

These numbers are integers:-

  1     -345     59000

These numbers are @{B}NOT@{UB} integers:-

  1.234     -0.456     1-1/2

An integer can be positive or negative.

Zero is also considered to be an integer number.

In some circumstances, the syntax of ARexx instructions or functions will
require you to use only integer numbers and an error stoppage will result
if a non integer number is used.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "IPC" "Glossary - Inter Process Communication"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}INTER PROCESS COMMUNICATION (IPC)@{UB}@{UU}
@{JLEFT}
"Inter Process Communication", or "IPC" as it is frequently called, is
the process by which a program (process) can send messages to, and receive
messages from, another program.

To participate in IPC a program must have been written with a "Message
Port" which is really just a small segment of the program's coding which
allows it to "Listen" for messages sent to it and to send messages out
to other programs.

The multitasking ability of the Amiga makes it ideally suited for
IPC.


@{JCENTER}=== End of Text ===
@{JLEFT}








@ENDNODE

@NODE "Keywords" "Glossary - Keywords"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}KEYWORDS@{UB}@{UU}
@{JLEFT}
A @{B}KEYWORD@{UB} is a special word that is recognised by the ARexx interpreter
as being the name of an @{"Instruction" LINK "Instructions"} or @{"function" LINK "Functions"}. In some contexts, the term
KEYWORD can also include SUBKEYWORD.

A @{B}SUB KEYWORD@{UB} is a special word that comes after a keyword and modifies
the way in which the instruction will act.

Both keywords and sub keywords are contained within the coding of the
ARexx interpreter and therefore their usage (spelling, etc.) @{B}cannot@{UB} be
varied by the programmer. Compare this with @{"arguments" LINK "Arguments"} the contents of
which can be varied to suit the purposes of the program.

To make the distinction in these articles I will put:-

  KEYWORDS in upper case

  Arguments in lower case with, possibly, an upper case initial

For example, the keyword, or instruction DO can have these sub keywords
used with it:-

  TO   BY   FOR   FOREVER   WHILE   UNTIL

Keywords and sub keywords can,in some cases, be used in conjunction with
user defined @{"arguments" LINK "Arguments"}.

In the following examples the keywords are in bold upper case and the
arguments are in non bold lower case:-

  @{B}DO@{UB} Count = 1 @{B}TO@{UB} 20 @{B}BY@{UB} 2

  @{B}DO FOR@{UB} 20

  @{B}DO FOREVER@{UB}

  @{B}DO WHILE@{UB} Count < 20

  @{B}DO UNTIL@{UB} Count = 20


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Labels" "Glossary - Labels"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}LABELS@{UB}@{UU}
@{JLEFT}
A @{B}Label@{UB} is a special type of @{"Fixed Symbol" LINK "Symbols"} that is followed by a colon
(:).

For example:-

  Multiply:

is the label "Multiply" which could be used to mark the section of the
program that carries out multiplications.

A label can be used to mark the start of a section of the program coding
for one of these purposes:-

- making the program easier to read,
- indicating the start of an @{"Internal function" LINK "Functions"}.
- indicating the point in a program to which the @{"SIGNAL" LINK "ARB:Articles_31-40/33.Signalling/Signal"} instruction is
  to divert program flow.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Number_Notations" "Glossary - Scientific & Engineering Notations"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}SCIENTIFIC AND ENGINEERING NOTATIONS@{UB}@{UU}
@{JLEFT}
These two methods of number notation have the format:-

  mantissa E exponent

For example:-

  4.567E+4

where:-

  "mantissa" is a number between:-

      1 and 9.99999999    for SCIENTIFIC Notation
      1 and 999.99999999  for ENGINEERING Notation

   "E" is the "Exponential" indicator

   "exponent" is the power to which 10 is raised and is a positive
              or negative @{"integer number" LINK "Integer_Numbers"}

              For SCIENTIFIC it can be any integer number
              For ENGINEERING it is any integer number that is
                              a multiple of three.

The "mantissa" is multiplied by 10 raised to the power of the "exponent".
For example:-

  4.567E+4 = 4.567 times 10 to power 4
           = 4.567 times 10000
           = 45670

or, if the exponent is negative:-

  4.567E-4 = 4.567 times 10 to power -4
           = 4.567 times 0.0001
           = 0.0004567

@{B}Note@{UB} that the + or - sign used in the exponent is @{B}not@{UB} a sign of addition
or subtraction. It is a sign of positivity or negativity.

@{B}@{U}When does ARexx Use These Notations?@{UB}@{UU}

One of these two notations is used for very large or very small numbers
as it makes it easier to display them. Any number resulting from a
calculation that is:-

  1000000000 or more i.e. 1E+9 or more

or

  less than 0.0000000001 i.e. less than 1E-10

will appear in scientific or engineering notation.

AREXX uses SCIENTIFIC as the default format for very large or very small
numbers.

If ENGINEERING is needed for these large or small numbers then the user
must tell ARexx to use it with this instruction:-

  NUMERIC FORM Engineering

then, if SCIENTIFIC is later required in the same program, revert to it
with the instruction:-

  NUMERIC FORM Scientific


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Number_Systems" "Glossary - Number Systems"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}NUMBER SYSTEMS@{UB}@{UU}
@{JLEFT}
There are at least three number systems used in the computer world. These
are:-
@{JCENTER}
@{"Decimal System     " LINK "Decimal"} - Base 10
@{"Binary System      " LINK "Binary"} - Base 2 
@{"Hexadecimal System " LINK "Hexadecimal"} - Base 16
@{JLEFT}
Prefixes are sometimes used to distinguish between the systems:-

  No prefix - Decimal
  Prefix %  - Binary
  Prefix $  - Hexadecimal

For example, the decimal number 13 can be represented by the other two
systems as:-

  %00001101

  $0D


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Decimal" "Glossary - Number Systems - Decimal"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}NUMBER SYSTEMS - DECIMAL@{UB}@{UU}
@{JLEFT}
To say a number system has a base ten means that there are 10 digits (0-9)
that can be used before we start to use double digit numbers. This system
has developed because humans have 10 fingers and primitive humans counted
on their fingers. Maybe some of us still do! If the powers that be had
created us with 6 fingers on each hand we would have a number system based
on 12 digits!


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Binary" "Glossary - Number Systems - Binary"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}NUMBER SYSTEMS - BINARY@{UB}@{UU}
@{JLEFT}

Computers, to create an analogy with humans, have only one finger on each
hand, or a total of two digits. So computers use a @{B}Binary System@{UB} with
only the two digits of 0 and 1. This is really not a good analogy. A better
one is to consider that a computer can be compared to millions of little
switches which can only have two states - on and off:-

- When a switch is @{B}off@{UB} it holds a value of @{B}0@{UB}
- When a switch is @{B}on@{UB} it holds a value of @{B}1@{UB}

The switches are the @{B}bits@{UB} of the computer memory. 8 bits make up one
byte.

Thus a byte can have each of its switches on or off, i.e. holding a value
of 0 or 1. The byte can therefore hold numbers of decimal value from 0
to 255. In the following example the bits are numbered from 0 (rightmost)
to 7 (leftmost) and the binary numbers are represented by the 0's and
1's below the bit numbers. For example, decimal 5 is binary
00000101.

        @{U}Bit number values@{UU}   @{U}Decimal Number@{UU}

        7 6 5 4 3 2 1 0

        0 0 0 0 0 0 0 0           0
        0 0 0 0 0 0 0 1           1
        0 0 0 0 0 0 1 0           2
        0 0 0 0 0 0 1 1           3
        0 0 0 0 0 1 0 0           4
        0 0 0 0 0 1 0 1           5
        0 0 0 0 0 1 1 0           6
        0 0 0 0 0 1 1 1           7
        0 0 0 0 1 0 0 0           8
        ...............         ...
        0 0 0 0 1 1 1 1          15
        0 0 0 1 0 0 0 0          16
        ...............         ...
        ...............         ...
        1 1 1 1 1 1 1 1         255

Thus the binary number, which is represented by the 0's and 1's in the
above table, is directly related to the on and off condition of each bit
of a byte

We can convert from decimal to binary and vice versa with the use of these
@{"functions" LINK "Functions"}:-

   BinaryNumber  = C2B(D2C(DecimalNumber))

   DecimalNumber = C2D(B2C(BinaryNumber))

For example:-

  SAY C2B(D2C(200))       --> 11001000
  SAY C2D(B2C(11001000))  --> 200


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Hexadecimal" "Glossary - Number Systems - Hexadecimal"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}NUMBER SYSTEMS - HEXADECIMAL@{UB}@{UU}
@{JLEFT}

The hexadecimal system is used because it is too hard for humans to work
in the binary system and hexadecimal relates more closely to binary than
does decimal.

Hexadecimal uses 16 digits for the decimal numbers 0 to 15. It does not
start to get into double digit numbers until the decimal number 16. Because
we only have 10 digits at our disposal, the letter A - F are used for
the extra 6 digits and represent the decimal number 10 to 15
respectively.

It is common practice to always represent hexadecimal numbers with two
digits, using a leading zero if necessary (as shown below).

A short table of hexadecimal numbers and their decimal and binary equivalents
is as follows:-

  @{U}Hexadecimal@{UU}  @{U} Binary @{UU}  @{U}Decimal@{UU}

       01      00000001     1
       02      00000010     2
       03      00000011     3
       04      00000100     4
       05      00000101     5
       06      00000110     6
       07      00000111     7
       08      00001000     8
       09      00001001     9
       0A      00001010    10
       0B      00001011    11
       0C      00001100    12
       0D      00001101    13
       0E      00001110    14
       0F      00001111    15
       10      00010000    16
       11      00010001    17
       ..      ........    ..
       1F      00011111    31
       20      00100000    32
       ..      ........    ..
       3F      00111111    63
       40      01000000    64
       ..      ........    ..
       ..      ........    ..
       FF      11111111   255
      100      100000000  256

We can convert from decimal to hexadecimal and vice versa with the use
of these @{"functions" LINK "Functions"}:-

  Hexadecimal = D2X(Decimal)

  Decimal     = X2D(Hexadecimal)

For example:-

  SAY D2X(7998)  -->  1F3E
  SAY X2D(1F3E)  -->  7998


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Operators" "Glossary - Operators"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}OPERATORS@{UB}@{UU}
@{JLEFT}
An @{B}Operator@{UB} is a @{"token" LINK "Tokens"} that can perform @{B}operations@{UB} such as arithmetic
and comparisons on symbols, numbers and strings.

They can be any one, or a combination of two, of these characters:-

  ~   %   ^   &   *   -   +   =   /   |   <   >

There are four types of operators which are:-

  @{" ARITHMETIC OPERATORS    " LINK "ARB:ARTICLES_01-10/09.ARITHMETIC_OPERATORS/Main"}  +  -  *  /  **  %  //
  @{" COMPARISON OPERATORS    " LINK "ARB:ARTICLES_11-20/11.COMPARISON_OPERATORS/Main"}  =  ~=  ==  ~==  >  <  >=  <=  ~>  ~<
  @{" LOGICAL OPERATORS       " LINK "ARB:ARTICLES_11-20/13.LOGICAL_OPERATORS/Main"}  ~  &  |  ^  &&
  @{" CONCATENATION OPERATORS " LINK "ARB:ARTICLES_11-20/15.STRINGS_More/Concatenation"}  ||  Space  None


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Path" "Glossary - Path"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}PATH@{UB}@{UU}
@{JLEFT}
The term @{B}Path@{UB} refers to the device or disk name and directory (drawer)
names for the specified file.

The name of the path consists of:-

* The name of a device or disk followed by a colon. For example:-

    df1:
    dh0:
    Work:
    My_Disk:
    Libs:

* The name of the directory or directories (if any) in which the file
  is held. These names come after the colon. For example:-

    @{B}df1:Programs@{UB}
    = The directory "Programs" on disk in df1:

    @{B}Workbench2.1:Devs@{UB}
    = The directory "Devs" on the Workbench disk.

  If there is a sub directory in a directory then the two names are
  separated by a slash (/). For example:-

    @{B}df1:Programs/ARexxPrgs@{UB}
    = The sub directory "ARexxPrgs" in the "Programs" directory.

    @{B}Workbench2.1:Devs/Printers@{UB}
    = The sub directory "Printers" in the "Devs" directory.

* The name of the file itself.

  If it is in a directory then the file name and the directory name
  are separated by a slash. For example:-

    @{B}df1:Programs/Phonebook.rexx@{UB}
    = The file "Phonebook.rexx" in the "Programs" directory.

    @{B}Workbench2.1:Devs/Printers/EpsonQ@{UB}
    = The file "EpsonQ" in the "Printers" sub directory
      of the "Devs" directory.

  If the file is in the root directory of the disk then the file
  name comes immediately after the colon. For example:-

    @{B}df1:database.rexx@{UB}
    = The file "database.rexx" in the root directory of the disk in
    df1:

    @{B}Workbench2.1:System.info@{UB}
    = The file "System.info" in the root directory of the workbench
    disk.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "PD" "Glossary - Public Domain"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}PUBLIC DOMAIN@{UB}@{UU}
@{JLEFT}
@{B}@{U}Public Domain@{UB}@{UU}

Public Domain (P.D.) is software that has @{B}no copyright@{UB} on it. It can be
legally copied and distributed freely by anybody to anybody. The author
has donated the program to the public. Anyone is free to do what they
like with it such as use it in their own programs or disks, modify it
to enhance its abilities, etc.

Also loosely described as Public domain, but not really so, are the following
categories of software. These categories are often included in what is
commonly called Public Domain libraries.

@{B}@{U}Freeware@{UB}@{UU}

Freeware is similar to public domain in that it can be legally copied
and distributed freely by private individuals to private individuals @{B}but@{UB}
it usually has a copyright on it and restrictions as to its usage.

It would be necessary to read the copyright notices that come with each
individual program but some common restrictions on its usage are:-

- Copying fees must be nominal only, i.e. only enough to cover
  disks and copying costs. No one is allowed to profit from it.

- Distribution can only be made on the proviso that all nominated
  files are distributed along with the program.

- No modifications can be made to the program.

- No commercial usage or copying is allowed without the authors
  written permission.

@{B}@{U}Shareware@{UB}@{UU}

Shareware is copyright software with similar distribution restrictions
as those mentioned above for Freeware.

It works under an honour system. Normally, it can be freely copied and
used for a short trial period. If you intend to continue using it then,
legally, you must pay the author the requested shareware fee. If you do
not pay the shareware fee then you are supposed to discontinue using
it.

Sometimes some key part of the program is missing which is provided when
the fee is paid. Sometimes fee payment requests annoyingly pop up every
few minutes. Other means of encouraging payment are also employed.

On payment of the fee you will often receive the latest version of the
program which has the missing parts included and/or the pestering requesters
deleted. You may also go on a list and be advised of future
updates.


@{JCENTER}=== End of Text ===
@{JLEFT}






@ENDNODE

@NODE "Program_Elements" "Glossary - Program Elements"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}PROGRAM ELEMENTS@{UB}@{UU}
@{JLEFT}
An ARexx Program is made up of a number of @{B}elements@{UB} which are:-

  @{"TOKENS      " LINK "Tokens"}
  @{"CLAUSES     " LINK "Clauses"}
  @{"EXPRESSIONS " LINK "Expressions"}


In learning to program in ARexx, you will learn how to put these various
elements together.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Special_Characters" "Glossary - Special Characters"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}SPECIAL CHARACTERS@{UB}@{UU}
@{JLEFT}
One group in the definition of @{"TOKEN" LINK "Tokens"} are called, for want of something
better, @{B}Special Characters.@{UB}

They are:-

  Colon :

  Semicolon ;

  Comma ,

  Parentheses ()

A @{B}Colon@{UB} is used to distinguish a @{"Label" LINK "Labels"} (which is a special form of fixed
symbol) from a variable @{"Symbol" LINK "Symbols"}. For example, this is a label:-

   Multiply:

A @{B}Semicolon@{UB} is used to separate @{"clauses" LINK "Clauses"} or @{"statements" LINK "Statements"} that are on the
same line. For example, if you had:-

   x = 3
   y = 4
   SAY x + y

you could replace it with:-

   x = 3 ; y = 4 ; SAY x + y

A @{B}Comma@{UB} is used in situations where a single @{"clause" LINK "Clauses"} or @{"statement" LINK "Statements"} statement
cannot all fit on the one line in your text editor. By putting a comma
at the end of one line we are telling ARexx that the following line is
part of the same clause or statement. For example:-

  Quotation = 'Now is the time for all good men to come to',
  'the aid of their country'

  SAY Quotation

As the first line ends in a comma, all of the quotation "Now is the time
for all good men to come to the aid of their country" is considered as
the one item and is assigned to the symbol "Quotation".

A @{B}Comma@{UB} is also used as a separator for the @{"Arguments" LINK "Arguments"} that are used for
@{"Functions" LINK "Functions"}. For example:-

  SAY COPIES('*',5)

In this statement the comma separates the two arguments enclosed in the
parentheses.

The @{B}Parentheses@{UB} are the () characters. They are used to indicate to ARexx
that a group of symbols or tokens etc. are to be taken as the one unit.
They can be used after a function name (as in the SAY COPIES example above)
or to indicate the order in which calculations will occur. For example,
in this:-

   5 * (3 + 4)

The parentheses tell ARexx to add 3 and 4 before multiplying by 5.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Statements" "Glossary - Statements"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}STATEMENTS@{UB}@{UU}
@{JLEFT}
A @{B}Statement@{UB} can be any of:-

  @{"Assignment " LINK "Assignment"}
  @{"Command    " LINK "Commands"}
  @{"Instruction" LINK "Instructions"}

For example:-

   Count = 10                   is an assignment statement

   SAY 'Hi There Jack'          is an instruction statement

   ADDRESS 'COMMAND' ; 'Dir'    is an instruction statement
                                followed by a command statement


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Streams" "Glossary - Streams"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}STREAMS@{UB}@{UU}
@{JLEFT}
To put it simply for the beginner, a @{B}stream@{UB} could be said to be a pathway
through which data can flow.

ARexx uses three streams which are called:-

  STDIN
  STDOUT
  STDERR

The default streams for ARexx are:-

@{B}STDIN@{UB}  - the normal input source, i.e. the console window into
         which data is entered via the keyboard.

@{B}STDOUT@{UB} - the normal output source, i.e. the console window to
         which data is sent for display.

@{B}STDERR@{UB} - a special "Global Tracing Console" which can be opened by
         the @{"command utility" LINK "ARB:Articles_01-10/03.COMMAND_UTILITIES/Utilities"} called TCO.

If an ARexx program is started from a Shell/CLI window, and if it does
not open any other window for input or output, then it uses the same console
window for both STDIN and STDOUT, i.e. the window used to start it
from.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Strings" "Glossary - Strings"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}STRINGS@{UB}@{UU}
@{JLEFT}
To put it rather simply, a "string" is a single unit of data that contains
one or more characters all of which have been enclosed within the one
set of quotation marks, or @{B}string delimiters.@{UB} For example:-

  'This is a string'

A string is distinguished from a @{"SYMBOL" LINK "Symbols"} by the fact that the string is
enclosed in delimiters (e.g. quotation marks) whereas a symbol is not
enclosed in delimiters.

A @{B}String Delimiter@{UB} is a character that @{B}sets the limits@{UB} of a string, i.e.
it marks the start and end of the string.

The delimiter characters in ARexx are:-

    Single opening quote -   '
    Double quote -           "

No other characters, including the closing single quote `, can be
used.

Each string must use only one type of delimiter so that :-

   'This is a string'  is legitimate
   "This is a string"  is legitimate
   'This is a string"  is illegitimate
   "This is a string'  is illegitimate

Read @{"Article 5" LINK "ARB:Articles_01-10/05.INFO_TO_WINDOW/Delimiters"} for more information about string delimiters.

A string can contain any of the characters that can be entered via the
keyboard (as well as some that can't!!). For example, all these are
strings:-

  'A String is not a Symbol'
  '!@#$%^&*()'
  ' A1 b2 C3 '
  ' 12 + 3 is Fifteen'
  ' : ; / ? . < '

Note that strings can contain the space character so that a single strings
can be made up of a number of words separated by spaces.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Symbols" "Glossary - Symbols"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}SYMBOLS@{UB}@{UU}
@{JLEFT}

A @{B}SYMBOL@{UB} is a @{"token" LINK "Tokens"} that can hold a value.

A @{B}Fixed@{UB} symbol is one whose value does not change during the course of
the program.

A @{B}Variable@{UB} symbol is one whose value can change during the course of a
program by having @{"assignments" LINK "Assignment"} of values made to it.

A symbol is usually distinguished from a @{"String" LINK "Strings"} by the fact that it is
@{B}not@{UB} enclosed within quotation marks.


See Article 7 @{"Symbol Introduction" LINK "ARB:Articles_01-10/07.SYMBOLS_INTRO/What"} for more details.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Tokens" "Glossary - Tokens"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}TOKENS@{UB}@{UU}
@{JLEFT}
A @{B}TOKEN@{UB} is the smallest individual part of a @{"CLAUSE" LINK "Clauses"}. It could be compared,
in English, to a @{B}word@{UB} within a sentence.

There are a number of different types of @{B}tokens.@{UB} These are:-

  @{"COMMENTS          " LINK "Comments"}
  @{"SYMBOLS           " LINK "Symbols"}
  @{"STRINGS           " LINK "Strings"}
  @{"OPERATORS         " LINK "Operators"}
  @{"SPECIAL CHARACTERS" LINK "Special_Characters"}


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Using_CLI" "Glossary - Using The CLI or Shell"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}USING THE CLI OR SHELL@{UB}@{UU}
@{JLEFT}
I would expect that anyone learning ARexx should have at least an elementary
knowledge of how to use a @{"Shell or CLI" LINK "CLI_&_Shell"} window.

In these articles, when I want to indicate that a line is to be typed
in at a CLI or Shell prompt, I will use the following sort of
thing:-

  > RX MyProgram

the ">" represents the CLI or Shell window's prompt. It may appear as
one of the following or something similar, depending on your version of
AmigaDOS:-

  >

  1.>

  1.Workbench2.1 >

Whatever you have in your CLI or Shell window, you can take it that the
">" in these articles means the prompt that appears in your CLI or Shell
window.

When you enter command lines at the prompt as a result of seeing things
like:-

  > RX MyProgram

then @{B}do not@{UB} enter the ">"!!!

Start your entry at the text that appears @{B}after@{UB} the prompt indicator.
so that for the above example you would type in:-

  RX MyProgram

I only show the ">" symbol to indicate to you that it is an entry to be
made in a Shell or CLI window.

You @{B}must press return@{UB} at the end of each command line.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE

@NODE "Viruses" "Glossary - Viruses"

@{B}@{U}@{JCENTER}AREXX FOR BEGINNERS - GLOSSARY@{UU}

@{U}VIRUSES@{UB}@{UU}
@{JLEFT}
A @{B}virus@{UB} is a small program that has been written to cause problems to
computer users. Some viruses are in a disk's boot block and some are attached
to other programs such as @{"AmigaDOS" LINK "AmigaDOS"} commands. Viruses can be "benign" and
only cause minor problems or silly messages, or they can be "malignant"
and cause considerable damage to the data on your disks. You could find
that ALL data has been completely wiped from your hard drive. To the best
of my knowledge, they cannot do physical damage to your computer.

A decent Virus Checking and Killing program (such as "Virus_Checker")
to detect and remove viruses is essential!.


@{JCENTER}=== End of Text ===
@{JLEFT}
@ENDNODE
