

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.amigaos.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rob+Cranley</id>
	<title>AmigaOS Documentation Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.amigaos.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rob+Cranley"/>
	<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/wiki/Special:Contributions/Rob_Cranley"/>
	<updated>2026-05-29T15:56:49Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Math_Libraries&amp;diff=12365</id>
		<title>Math Libraries</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Math_Libraries&amp;diff=12365"/>
		<updated>2023-08-03T09:53:32Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* FFP Floating Point Data Format */ Added &amp;quot;(bit 7)&amp;quot; to identify the sign bit as it was not otherwise obvious&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The math libraries described in this section are implemented in 68K assembly language and are designed to only be callable from 68K code. They are provided for backwards compatibility with pre-4.0 versions of AmigaOS.&lt;br /&gt;
&lt;br /&gt;
For AmigaOS 4.0 and higher the math libraries you choose will depend on the application. A vast majority of the time the built-in math routines provided by the [[Newlib_Library|Newlib Library]] and built-in functions of GCC will suffice.&lt;br /&gt;
&lt;br /&gt;
== Math Libraries ==&lt;br /&gt;
&lt;br /&gt;
This chapter describes the structure and calling sequences required to access the Motorola Fast Floating Point (FFP), the IEEE single-precision math libraries and the IEEE double-precision math libraries via the Amiga-supplied interfaces.&lt;br /&gt;
&lt;br /&gt;
In its present state, the FFP library consists of three separate entities: the basic math library, the transcendental math library, and C and assembly-language interfaces to the basic math library plus FFP conversion functions. The IEEE single-precision and the double-precision libraries each presently consists of two entities: the basic math library and the transcendental math library.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Open Each Library Separately|text=Each Task using an IEEE math library must open the library itself. Library base pointers to these libraries may &#039;&#039;not&#039;&#039; be shared. Libraries can be context sensitive and may use the Task structure to keep track of the current context. Sharing of library bases by Tasks may seem to work in some systems. This is true for any of the IEEE math libraries.}}&lt;br /&gt;
&lt;br /&gt;
Depending on the compiler used, it is not always necessary to explicitly call the library functions for basic floating point operations as adding, subtracting, dividing, etc. Consult the manual supplied with the compiler for information regarding the compiler options for floating point functions.&lt;br /&gt;
&lt;br /&gt;
== Math Libraries and Functions ==&lt;br /&gt;
&lt;br /&gt;
There are six math libraries providing functions ranging from adding two floating point numbers to calculating a hyperbolic cosine. They are:&lt;br /&gt;
&lt;br /&gt;
; mathffp.library&lt;br /&gt;
: the basic function library&lt;br /&gt;
&lt;br /&gt;
; mathtrans.library&lt;br /&gt;
: the FFP transcendental math library&lt;br /&gt;
&lt;br /&gt;
; mathieeesingbas.library&lt;br /&gt;
: the IEEE single-precision library&lt;br /&gt;
&lt;br /&gt;
; mathieesingtrans.library&lt;br /&gt;
: the IEEE single-precision transcendental library&lt;br /&gt;
&lt;br /&gt;
; mathieeedoubbas.library&lt;br /&gt;
: the IEEE double-precision library&lt;br /&gt;
&lt;br /&gt;
; mathieesingtrans.library&lt;br /&gt;
: the IEEE double-precision transcendental library&lt;br /&gt;
&lt;br /&gt;
== FFP Floating Point Data Format ==&lt;br /&gt;
&lt;br /&gt;
FFP floating-point variables are defined within C by the float or FLOAT directive. In assembly language they are simply defined by a DC.L/DS.L statement. All FFP floating-point variables are defined as 32-bit entities (longwords) with the following format:&lt;br /&gt;
&lt;br /&gt;
  _____________________________________________&lt;br /&gt;
 |                                             |&lt;br /&gt;
 | MMMMMMMM    MMMMMMMM    MMMMMMMM    EEEEEEE |&lt;br /&gt;
 | 31          23          15          7       |&lt;br /&gt;
 |_____________________________________________|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mantissa is considered to be a binary fixed-point fraction; except for 0, it is always normalized (the mantissa is shifted over and the exponent adjusted, so that the mantissa has a 1 bit in its highest position). Thus, it represents a value of less than 1 but greater than or equal to 1/2.&lt;br /&gt;
&lt;br /&gt;
The sign bit (bit 7) is reset (0) for a positive value and set (1) for a negative value.&lt;br /&gt;
&lt;br /&gt;
The exponent is the power of two needed to correctly position the mantissa to reflect the number&#039;s true arithmetic value. It is held in excess-64 notation, which means that the two&#039;s-complement values are adjusted upward by 64, thus changing $40 (-64) through $3F (+63) to $00 through $7F. This facilitates comparisons among floating-point values.&lt;br /&gt;
&lt;br /&gt;
The value of 0 is defined as all 32 bits being 0s. The sign, exponent, and mantissa are entirely cleared. Thus, 0s are always treated as positive.&lt;br /&gt;
&lt;br /&gt;
The range allowed by this format is as follows:&lt;br /&gt;
&lt;br /&gt;
; DECIMAL&lt;br /&gt;
: 9.22337177 * 10^18 &amp;gt; +VALUE &amp;gt; 5.42101070 * 10^-20&lt;br /&gt;
: -9.22337177 * 10^18 &amp;lt; -VALUE &amp;lt; -2.71050535 * 10^-20&lt;br /&gt;
&lt;br /&gt;
; BINARY (HEXADECIMAL):&lt;br /&gt;
: .FFFFFF * 2^63 &amp;gt; +VALUE &amp;gt; .800000 * 2^-63&lt;br /&gt;
: -.FFFFFF * 2^63 &amp;lt; -VALUE &amp;lt; -.800000 * 2^-64&lt;br /&gt;
&lt;br /&gt;
Remember that you cannot perform &#039;&#039;any&#039;&#039; arithmetic on these variables without using the fast floating-point libraries. The formats of the variables are &#039;&#039;incompatible&#039;&#039; with the arithmetic format of C-generated code; hence, all floating-point operations are performed through function calls.&lt;br /&gt;
&lt;br /&gt;
== FFP Basic Mathematics Library ==&lt;br /&gt;
&lt;br /&gt;
The FFP basic math library contains entries for the basic mathematics functions such as add, subtract and divide. It resides in ROM and is opened by calling OpenLibrary() with &amp;amp;quot;mathffp.library&amp;amp;quot; as the argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathffp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathffp_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
if (MathBase = OpenLibrary(&amp;quot;mathffp.library&amp;quot;, 0))&lt;br /&gt;
    {&lt;br /&gt;
           . . .&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathBase);&lt;br /&gt;
    }&lt;br /&gt;
else&lt;br /&gt;
    printf(&amp;quot;Can&#039;t open mathffp.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global variable &#039;&#039;&#039;MathBase&#039;&#039;&#039; is used internally for all future library references.&lt;br /&gt;
&lt;br /&gt;
=== FFP Basic Functions ===&lt;br /&gt;
&lt;br /&gt;
; SPAbs()    FLOAT SPAbs( FLOAT parm );&lt;br /&gt;
: Take absolute value of FFP variable.&lt;br /&gt;
&lt;br /&gt;
; SPAdd()    FLOAT SPAdd( FLOAT leftParm, FLOAT rightParm);&lt;br /&gt;
: Add two FFP variables.&lt;br /&gt;
&lt;br /&gt;
; SPCeil()   FLOAT SPCeil( FLOAT parm );&lt;br /&gt;
: Computer largest integer less than or equal to variable.&lt;br /&gt;
&lt;br /&gt;
; SPCmp()    LONG  SPCmp( FLOAT leftParm, FLOAT rightParm)&lt;br /&gt;
: Compare two FFP variables.&lt;br /&gt;
&lt;br /&gt;
; SPDiv()    FLOAT SPDiv( FLOAT leftParm, FLOAT rightParm);&lt;br /&gt;
: Divide two FFP variables.&lt;br /&gt;
&lt;br /&gt;
; SPFix()    LONG  SPFix( FLOAT parm );&lt;br /&gt;
: Convert FFP variable to integer.&lt;br /&gt;
&lt;br /&gt;
; SPFloor()  FLOAT SPFloor( FLOAT parm );&lt;br /&gt;
: Compute least integer greater than or equal to variable.&lt;br /&gt;
&lt;br /&gt;
; SPFlt()    FLOAT SPFlt( long integer );&lt;br /&gt;
: Convert integer variable to FFP.&lt;br /&gt;
&lt;br /&gt;
; SPMul()    FLOAT SPMul( FLOAT leftParm, FLOAT rightParm);&lt;br /&gt;
: Multiply two FFP variables.&lt;br /&gt;
&lt;br /&gt;
; SPNeg()    FLOAT SPNeg( FLOAT parm );&lt;br /&gt;
: Take two&#039;s complement of FFP variable.&lt;br /&gt;
&lt;br /&gt;
; SPSub()    FLOAT SPSub( FLOAT leftParm, FLOAT rightParm);&lt;br /&gt;
: Subtract two FFP variables.&lt;br /&gt;
&lt;br /&gt;
; SPTst()    LONG  SPTst( FLOAT parm );&lt;br /&gt;
: Test an FFP variable against zero.&lt;br /&gt;
&lt;br /&gt;
Be sure to include the proper data type definitions shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathffp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathffp_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
FLOAT f1, f2, f3;&lt;br /&gt;
LONG   i1;&lt;br /&gt;
&lt;br /&gt;
if (MathBase = OpenLibrary(&amp;quot;mathffp.library&amp;quot;, 0))&lt;br /&gt;
    {&lt;br /&gt;
    i1 = SPFix(f1);            /* Call SPFix entry */&lt;br /&gt;
    f1 = SPFlt(i1);            /* Call SPFlt entry */&lt;br /&gt;
&lt;br /&gt;
    if (SPCmp(f1,f2)) {};      /* Call SPCmp entry */&lt;br /&gt;
    if (!(SPTst(f1))) {};      /* Call SPTst entry */&lt;br /&gt;
&lt;br /&gt;
    f1 = SPAbs(f2);            /* Call SPAbs entry */&lt;br /&gt;
    f1 = SPNeg(f2);            /* Call SPNeg entry */&lt;br /&gt;
    f1 = SPAdd(f2, f3);        /* Call SPAdd entry */&lt;br /&gt;
    f1 = SPSub(f2, f3);        /* Call SPSub entry */&lt;br /&gt;
    f1 = SPMul(f2, f3);        /* Call SPMul entry */&lt;br /&gt;
    f1 = SPDiv(f2, f3);        /* Call SPDiv entry */&lt;br /&gt;
    f1 = SPCeil(f2);           /* Call SPCeil entry */&lt;br /&gt;
    f1 = SPFloor(f2);          /* Call SPFloor entry */&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathBase);&lt;br /&gt;
    }&lt;br /&gt;
else&lt;br /&gt;
    printf(&amp;quot;Can&#039;t open mathffp.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The assembly language interface to the FFP basic math routines is shown below, including some details about how the system flags are affected by each operation. The access mechanism is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MOVEA.L _MathBase,A6&lt;br /&gt;
JSR     _LVOSPFix(A6)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ FFP Basic Assembly Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Input&lt;br /&gt;
! Output&lt;br /&gt;
! Condition Codes&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPAbs&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = FFP absolute value&lt;br /&gt;
| N = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPAdd&lt;br /&gt;
| D1 = FFP argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = FFP addition&lt;br /&gt;
| D0 = FFP addition of arg1 + arg2&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if result overflowed&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPCeil&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = least integer &amp;gt;= arg&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPCmp&lt;br /&gt;
| D1 = FFP argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = FFP argument 2&amp;lt;br/&amp;gt;&lt;br /&gt;
| D0 = +1 if arg1 &amp;gt; arg2&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = -1 if arg1 &amp;lt; arg2&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = 0 if arg1 = arg2&lt;br /&gt;
| N = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
GT = arg2 &amp;gt; arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
GE = arg2 &amp;gt;= arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
EQ = arg2 = arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
NE = arg2 != arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
LT = arg2 &amp;lt; arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
LE = arg2 &amp;lt;= arg1&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPDiv&lt;br /&gt;
| D1 = FFP argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = FFP argument 2&lt;br /&gt;
| D0 = FFP division of arg2/arg1&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if result overflowed&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPFix&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = Integer (two&#039;s complement)&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if overflow occurred&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPFloor&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = largest integer &amp;lt;= argument&lt;br /&gt;
| N = 1 if result is negative&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPFlt&lt;br /&gt;
| D0 = Integer (two&#039;s complement)&lt;br /&gt;
| D0 = FFP result&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPMul&lt;br /&gt;
| D0 = FFP argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D1 = FFP argument 2&lt;br /&gt;
| D0 = FFP multiplication of arg1 * arg2&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if result overflowed&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPNeg&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = FFP negated&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPSub&lt;br /&gt;
| D1 = FFP argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = FFP argument 2&lt;br /&gt;
| D0 = FFP subtraction of arg2 - arg1&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if result overflowed&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPTst&lt;br /&gt;
| D1 = FFP argument&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: This routine trashes the argument in D1.&lt;br /&gt;
| D0 = +1 if arg &amp;gt; 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = -1 if arg &amp;lt; 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = 0 if arg = 0.0&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
EQ = arg = 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
NE = arg != 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
PL = arg &amp;gt;= 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
MI = arg &amp;lt; 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FFP Transcendental Mathematics Library ==&lt;br /&gt;
&lt;br /&gt;
The FFP transcendental math library contains entries for the transcendental math functions sine, cosine, and square root. It resides on disk and is opened by calling OpenLibrary() with &amp;amp;quot;mathtrans.library&amp;amp;quot; as the argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathffp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathffp_protos.h&amp;gt;&lt;br /&gt;
#include &amp;lt;clib/mathtrans_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathTransBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
if (MathTransBase = OpenLibrary(&amp;quot;mathtrans.library&amp;quot;,0))&lt;br /&gt;
    {&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
    CloseLibrary(MathTransBase);&lt;br /&gt;
    }&lt;br /&gt;
else&lt;br /&gt;
    printf(&amp;quot;Can&#039;t open mathtrans.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global variable MathTransBase is used internally for all future library references. Note that the transcendental math library is dependent upon the basic math library, which it will open if it is not open already. If you want to use the basic math functions in conjunction with the transcendental math functions however, you have to specifically open the basic math library yourself.&lt;br /&gt;
&lt;br /&gt;
=== FFP Transcendental Functions ===&lt;br /&gt;
&lt;br /&gt;
; SPAsin()   FLOAT SPAsin( FLOAT parm );&lt;br /&gt;
: Return arcsine of FFP variable.&lt;br /&gt;
&lt;br /&gt;
; SPAcos()   FLOAT SPAcos( FLOAT parm );&lt;br /&gt;
: Return arccosine of FFP variable.&lt;br /&gt;
&lt;br /&gt;
; SPAtan()   FLOAT SPAtan( FLOAT parm );&lt;br /&gt;
: Return arctangent of FFP variable.&lt;br /&gt;
&lt;br /&gt;
; SPSin()    FLOAT SPSin( FLOAT parm );&lt;br /&gt;
: Return sine of FFP variable. This function accepts an FFP radian argument and returns the trigonometric sine value. For extremely large arguments where little or no precision would result, the computation is aborted and the &amp;quot;V&amp;quot; condition code is set. A direct return to the caller is made.&lt;br /&gt;
&lt;br /&gt;
; SPCos()    FLOAT SPCos( FLOAT parm );&lt;br /&gt;
: Return cosine of FFP variable. This function accepts an FFP radian argument and returns the trigonometric cosine value. For extremely large arguments where little or no precision would result, the computation is aborted and the &amp;quot;V&amp;quot; condition code is set. A direct return to the caller is made.&lt;br /&gt;
&lt;br /&gt;
; SPTan()    FLOAT SPTan( FLOAT parm );&lt;br /&gt;
: Return tangent of FFP variable. This function accepts an FFP radian argument and returns the trigonometric tangent value. For extremely large arguments where little or no precision would result, the computation is aborted and the &amp;quot;V&amp;quot; condition code is set. A direct return to the caller is made.&lt;br /&gt;
&lt;br /&gt;
; SPSincos() FLOAT SPSincos( FLOAT *cosResult, FLOAT parm);&lt;br /&gt;
: Return sine and cosine of FFP variable. This function accepts an FFP radian argument and returns the trigonometric sine as its result and the trigonometric cosine in the first parameter. If both the sine and cosine are required for a single radian value, this function will result in almost twice the execution speed of calling the SPSin() and SPCos() functions independently. For extremely large arguments where little or no precision would result, the computation is aborted and the &amp;quot;V&amp;quot; condition code is set. A direct return to the caller is made.&lt;br /&gt;
&lt;br /&gt;
; SPSinh()   FLOAT SPSinh( FLOAT parm );&lt;br /&gt;
: Return hyperbolic sine of FFP variable.&lt;br /&gt;
&lt;br /&gt;
; SPCosh()   FLOAT SPCosh( FLOAT parm );&lt;br /&gt;
: Return hyperbolic cosine of FFP variable.&lt;br /&gt;
&lt;br /&gt;
; SPTanh()   FLOAT SPTanh( FLOAT parm );&lt;br /&gt;
: Return hyperbolic tangent of FFP variable.&lt;br /&gt;
&lt;br /&gt;
; SPExp()    FLOAT SPExp( FLOAT parm );&lt;br /&gt;
: Return &#039;&#039;e&#039;&#039; to the FFP variable power. This function accepts an FFP argument and returns the result representing the value of &#039;&#039;e&#039;&#039; (2.71828...) raised to that power.&lt;br /&gt;
&lt;br /&gt;
; SPLog()    FLOAT SPLog( FLOAT parm );&lt;br /&gt;
: Return natural log (base &#039;&#039;e&#039;&#039;) of FFP variable.&lt;br /&gt;
&lt;br /&gt;
; SPLog10()  FLOAT SPLog10( FLOAT parm );&lt;br /&gt;
: Return log (base 10) of FFP variable.&lt;br /&gt;
&lt;br /&gt;
; SPPow() FLOAT SPPow( FLOAT power, FLOAT arg );&lt;br /&gt;
: Return FFP arg2 to FFP arg1.&lt;br /&gt;
&lt;br /&gt;
; SPSqrt()   FLOAT SPSqrt( FLOAT parm );&lt;br /&gt;
: Return square root of FFP variable.&lt;br /&gt;
&lt;br /&gt;
; SPTieee()  FLOAT SPTieee( FLOAT parm );&lt;br /&gt;
: Convert FFP variable to IEEE format&lt;br /&gt;
&lt;br /&gt;
; SPFieee()  FLOAT SPFieee( FLOAT parm );&lt;br /&gt;
: Convert IEEE variable to FFP format.&lt;br /&gt;
&lt;br /&gt;
Be sure to include proper data type definitions, as shown in the example below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathffp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathffp_protos.h&amp;gt;&lt;br /&gt;
#include &amp;lt;clib/mathtrans_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathTransBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
FLOAT f1, f2, f3;&lt;br /&gt;
FLOAT i1;&lt;br /&gt;
&lt;br /&gt;
if (MathTransBase = OpenLibrary(&amp;quot;mathtrans.library&amp;quot;,33))&lt;br /&gt;
    {&lt;br /&gt;
    f1 = SPAsin(f2);        /* Call SPAsin entry */&lt;br /&gt;
    f1 = SPAcos(f2);        /* Call SPAcos entry */&lt;br /&gt;
    f1 = SPAtan(f2);        /* Call SPAtan entry */&lt;br /&gt;
&lt;br /&gt;
    f1 = SPSin(f2);         /* Call SPSin entry */&lt;br /&gt;
    f1 = SPCos(f2);         /* Call SPCos entry */&lt;br /&gt;
    f1 = SPTan(f2);         /* Call SPTan entry */&lt;br /&gt;
    f1 = SPSincos(&amp;amp;f3, f2); /* Call SPSincos entry */&lt;br /&gt;
&lt;br /&gt;
    f1 = SPSinh(f2);        /* Call SPSinh entry */&lt;br /&gt;
    f1 = SPCosh(f2);        /* Call SPCosh entry */&lt;br /&gt;
    f1 = SPTanh(f2);        /* Call SPTanh entry */&lt;br /&gt;
&lt;br /&gt;
    f1 = SPExp(f2);         /* Call SPExp entry */&lt;br /&gt;
    f1 = SPLog(f2);         /* Call SPLog entry */&lt;br /&gt;
    f1 = SPLog10(f2);       /* Call SPLog10 entry */&lt;br /&gt;
    f1 = SPPow(f2);         /* Call SPPow entry */&lt;br /&gt;
    f1 = SPSqrt(f2);        /* Call SPSqrt entry */&lt;br /&gt;
&lt;br /&gt;
    i1 = SPTieee(f2);       /* Call SPTieee entry */&lt;br /&gt;
    f1 = SPFieee(i1);       /* Call SPFieee entry */&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathTransBase);&lt;br /&gt;
    }&lt;br /&gt;
else&lt;br /&gt;
    printf(&amp;quot;Can&#039;t open mathtrans.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Amiga assembly language interface to the FFP transcendental math routines is shown below, including some details about how the system flags are affected by the operation. This interface resides in the library file &#039;&#039;amiga.lib&#039;&#039; and must be linked with the user code. Note that the access mechanism from assembly language is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MOVEA.L _MathTransBase,A6&lt;br /&gt;
JSR     _LVOSPAsin(A6)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ FFP Transcendental Assembly Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Input&lt;br /&gt;
! Output&lt;br /&gt;
! Condition Codes&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPAsin&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = FFP arcsine radian&lt;br /&gt;
| N = 0&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPAcos&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = FFP arccosine radian&lt;br /&gt;
| N = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if overflow occurred&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPAtan&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = FFP arctangent radian&lt;br /&gt;
| N = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPSin&lt;br /&gt;
| D0 = FFP argument in radians&lt;br /&gt;
| D0 = FFP sine&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if result is meaningless (that is, input magnitude too large)&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPCos&lt;br /&gt;
| D0 = FFP argument in radians&lt;br /&gt;
| D0 = FFP cosine&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if result is meaningless (that is, input magnitude too large)&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPTan&lt;br /&gt;
| D0 = FFP argument in radians&lt;br /&gt;
| D0 = FFP tangent&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if result is meaningless (that is, input magnitude too large)&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPSincos&lt;br /&gt;
| D0 = FFP argument in radians&amp;lt;br/&amp;gt;&lt;br /&gt;
D1 = Address to store cosine result&lt;br /&gt;
| D0 = FFP sine&amp;lt;br/&amp;gt;&lt;br /&gt;
(D1) = FFP cosine&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if result is meaningless (that is, input magnitude too large)&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPSinh&lt;br /&gt;
| D0 = FFP argument in radians&lt;br /&gt;
| D0 = FFP hyperbolic sine&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if overflow occurred&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPCosh&lt;br /&gt;
| D0 = FFP argument in radians&lt;br /&gt;
| D0 = FFP hyperbolic cosine&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if overflow occurred&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPTanh&lt;br /&gt;
| D0 = FFP argument in radians&lt;br /&gt;
| D0 = FFP hyperbolic tangent&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if overflow occurred&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPExp&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = FFP exponential&lt;br /&gt;
| N = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if overflow occurred&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPLog&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = FFP natural logarithm&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if argument negative or zero&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPLog10&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = FFP logarithm (base 10)&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if argument negative or zero&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPPow&lt;br /&gt;
| D0 = FFP exponent value&amp;lt;br/&amp;gt;&lt;br /&gt;
D1 = FFP argument value&lt;br /&gt;
| D0 = FFP result of arg taken to exp power&lt;br /&gt;
| N = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if result overflowed or arg &amp;lt; 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPSqrt&lt;br /&gt;
| D0 = FFP argument&lt;br /&gt;
| D0 = FFP square root&lt;br /&gt;
| N = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if argument was negative&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPTieee&lt;br /&gt;
| D0 = FFP format argument&lt;br /&gt;
| D0 = IEEE floating-point format&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOSPFieee&lt;br /&gt;
| D0 = IEEE floating-point format argument&lt;br /&gt;
| D0 = FFP format&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 1 if result overflowed&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FFP Mathematics Conversion Library ==&lt;br /&gt;
&lt;br /&gt;
The FFP mathematics conversion library provides functions to convert ASCII strings to their FFP equivalents and vice versa.&lt;br /&gt;
&lt;br /&gt;
It is accessed by linking code into the executable file being created. The name of the file to include in the library description of the link command line is &#039;&#039;amiga.lib&#039;&#039;. When this is included, direct calls are made to the conversion functions. Only a C interface exists for the conversion functions; there is no assembly language interface. The basic math library is required in order to access these functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathffp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathffp_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
if (MathBase = OpenLibrary(&amp;quot;mathffp.library&amp;quot;, 33))&lt;br /&gt;
    {&lt;br /&gt;
           . . .&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathBase);&lt;br /&gt;
    }&lt;br /&gt;
else&lt;br /&gt;
    printf(&amp;quot;Can&#039;t open mathffp.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Math Support Functions ===&lt;br /&gt;
&lt;br /&gt;
; afp()    FLOAT afp( BYTE *string );&lt;br /&gt;
: Convert ASCII string into FFP equivalent.&lt;br /&gt;
&lt;br /&gt;
; arnd()   VOID arnd( LONG place, LONG exp, BYTE *string);&lt;br /&gt;
: Round ASCII representation of FFP number.&lt;br /&gt;
&lt;br /&gt;
; dbf()    FLOAT dbf( ULONG exp, ULONG mant);&lt;br /&gt;
: Convert FFP dual-binary number to FFP equivalent.&lt;br /&gt;
&lt;br /&gt;
; fpa()    LONG fpa( FLOAT fnum, BYTE *string);&lt;br /&gt;
: Convert FFP variable into ASCII equivalent.&lt;br /&gt;
&lt;br /&gt;
Be sure to include proper data type definitions, as shown in the example below. Print statements have been included to help clarify the format of the math conversion function calls.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathffp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathffp_protos.h&amp;gt;&lt;br /&gt;
#include &amp;lt;clib/alib_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathBase;&lt;br /&gt;
&lt;br /&gt;
UBYTE st1[80] = &amp;quot;3.1415926535897&amp;quot;;&lt;br /&gt;
UBYTE st2[80] = &amp;quot;2.718281828459045&amp;quot;;&lt;br /&gt;
UBYTE st3[80], st4[80];&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
FLOAT num1, num2;&lt;br /&gt;
FLOAT n1, n2, n3, n4;&lt;br /&gt;
LONG  exp1, exp2, exp3, exp4;&lt;br /&gt;
LONG  mant1, mant2, mant3, mant4;&lt;br /&gt;
LONG  place1, place2;&lt;br /&gt;
&lt;br /&gt;
if (MathBase = OpenLibrary(&amp;quot;mathffp.library&amp;quot;, 33))&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    n1 = afp(st1);            /* Call afp entry */&lt;br /&gt;
    n2 = afp(st2);            /* Call afp entry */&lt;br /&gt;
    printf(&amp;quot;\n\nASCII %s converts to floating point %f&amp;quot;, st1, n1);&lt;br /&gt;
    printf(&amp;quot;\nASCII %s converts to floating point %f&amp;quot;, st2, n2);&lt;br /&gt;
&lt;br /&gt;
    num1 = 3.1415926535897;&lt;br /&gt;
    num2 = 2.718281828459045;&lt;br /&gt;
&lt;br /&gt;
    exp1 = fpa(num1, st3);    /* Call fpa entry */&lt;br /&gt;
    exp2 = fpa(num2, st4);    /* Call fpa entry */&lt;br /&gt;
    printf(&amp;quot;\n\nfloating point %f converts to ASCII %s&amp;quot;, num1, st3);&lt;br /&gt;
    printf(&amp;quot;\nfloating point %f converts to ASCII %s&amp;quot;, num2, st4);&lt;br /&gt;
&lt;br /&gt;
    place1 = -2;&lt;br /&gt;
    place2 = -1;&lt;br /&gt;
    arnd(place1, exp1, st3);    /* Call arnd entry */&lt;br /&gt;
    arnd(place2, exp2, st4);    /* Call arnd entry */&lt;br /&gt;
    printf(&amp;quot;\n\nASCII round of %f to %d places yields %s&amp;quot;, num1, place1, st3);&lt;br /&gt;
    printf(&amp;quot;\nASCII round of %f to %d places yields %s&amp;quot;, num2, place2, st4);&lt;br /&gt;
&lt;br /&gt;
    exp1  = -3;   exp2  = 3;    exp3  = -3;   exp4  = 3;&lt;br /&gt;
    mant1 = 12345;  mant2 = -54321;  mant3 = -12345; mant4 = 54321;&lt;br /&gt;
&lt;br /&gt;
    n1 = dbf(exp1, mant1);        /* Call dbf entry */&lt;br /&gt;
    n2 = dbf(exp2, mant2);        /* Call dbf entry */&lt;br /&gt;
    n3 = dbf(exp3, mant3);        /* Call dbf entry */&lt;br /&gt;
    n4 = dbf(exp4, mant4);        /* Call dbf entry */&lt;br /&gt;
    printf(&amp;quot;\n\ndbf of exp = %d and mant = %d yields FFP number of %f&amp;quot;, exp1, mant1, n1);&lt;br /&gt;
    printf(&amp;quot;\ndbf of exp = %d and mant = %d yields FFP number of %f&amp;quot;, exp2, mant2, n2);&lt;br /&gt;
    printf(&amp;quot;\ndbf of exp = %d and mant = %d yields FFP number of %f&amp;quot;, exp3, mant3, n3);&lt;br /&gt;
    printf(&amp;quot;\ndbf of exp = %d and mant = %d yields FFP number of %f&amp;quot;, exp4, mant4, n4);&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathBase);&lt;br /&gt;
    }&lt;br /&gt;
else&lt;br /&gt;
    printf(&amp;quot;Can&#039;t open mathffp.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IEEE Single-Precision Data Format ==&lt;br /&gt;
&lt;br /&gt;
The IEEE single-precision variables are defined as 32-bit entities with the following format:&lt;br /&gt;
&lt;br /&gt;
  ______________________________________________&lt;br /&gt;
 |                                              |&lt;br /&gt;
 | SEEEEEEE    MMMMMMMM    MMMMMMMM    MMMMMMMM |&lt;br /&gt;
 | 31          23          15          7        |&lt;br /&gt;
 |______________________________________________|&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Hidden Bit In The Mantissa|text=There is a &amp;quot;hidden&amp;quot; bit in the mantissa part of the IEEE numbers. Since all numbers are normalized, the &#039;&#039;integer&#039;&#039; (high) bit of the mantissa is dropped off. The IEEE single-precision range is 1.3E-38 (1.4E-45 de-normalized) to 3.4E+38.}}&lt;br /&gt;
&lt;br /&gt;
The exponent is the power of two needed to correctly position the mantissa to reflect the number&#039;s true arithmetic value. If both the exponent and the mantissa have zero in every position, the value is zero. If only the exponent has zero in every position, the value is an &#039;&#039;unnormal&#039;&#039; (extremely small). If all bits of the exponent are set to 1 the value is either a positive or negative infinity or a &#039;&#039;Not a Number (NaN)&#039;&#039;. NaN is sometimes used to indicate an uninitialized variable.&lt;br /&gt;
&lt;br /&gt;
== IEEE Single-Precision Basic Math Library ==&lt;br /&gt;
&lt;br /&gt;
The ROM-based IEEE single-precision basic math library was introduced in V36. This library contains entries for the basic IEEE single-precision mathematics functions, such as add, subtract, and divide.&lt;br /&gt;
&lt;br /&gt;
The library is opened by making calling OpenLibrary() with &amp;amp;quot;mathieeesingbas.library&amp;amp;quot; as the argument. Do not share the library base pointer between tasks - see note at beginning of chapter for details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathieeesp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathsingbas_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathIeeeSingBasBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
    /* do not share base pointer between tasks. */&lt;br /&gt;
if (MathIeeeSingBasBase = OpenLibrary(&amp;quot;mathieeesingbas.library&amp;quot;, 37))&lt;br /&gt;
    {&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
    CloseLibrary(MathIeeeSingBasBase);&lt;br /&gt;
    }&lt;br /&gt;
else&lt;br /&gt;
    printf(&amp;quot;Can&#039;t open mathieeesingbas.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global variable MathIeeeSingBasBase is used internally for all future library references.&lt;br /&gt;
&lt;br /&gt;
If an &#039;&#039;680x0&#039;&#039;/&#039;&#039;68881&#039;&#039;/&#039;&#039;68882&#039;&#039; processor combination is available, it will be used by the IEEE single-precision basic library instead of the software emulation. Also, if an autoconfigured math resource is available, that will be used. Typically this is a 68881 designed as a 16 bit I/O port, but it could be another device as well.&lt;br /&gt;
&lt;br /&gt;
=== SP IEEE Basic Functions (V36 or greater) ===&lt;br /&gt;
&lt;br /&gt;
; IEEESPAbs()    FLOAT ( FLOAT parm );&lt;br /&gt;
: Take absolute value of IEEE single-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPAdd()    FLOAT IEEESPAdd( FLOAT leftParm, FLOAT rightParm);&lt;br /&gt;
: Add two IEEE single-precision variables.&lt;br /&gt;
&lt;br /&gt;
; IEEESPCeil()   FLOAT IEEESPCeil( FLOAT parm );&lt;br /&gt;
: Compute least integer greater than or equal to variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPCmp()    LONG  IEEESPCmp( FLOAT leftParm, FLOAT rightParm );&lt;br /&gt;
: Compare two IEEE single-precision variables.&lt;br /&gt;
&lt;br /&gt;
; IEEESPDiv()    FLOAT IEEESPDiv( FLOAT dividend, FLOAT divisor );&lt;br /&gt;
: Divide two IEEE single-precision variables.&lt;br /&gt;
&lt;br /&gt;
; IEEESPFix()    LONG  IEEESPFix( FLOAT parm );&lt;br /&gt;
: Convert IEEE single-precision variable to integer.&lt;br /&gt;
&lt;br /&gt;
; IEEESPFloor()  FLOAT IEEESPFloor( FLOAT parm );&lt;br /&gt;
: Compute largest integer less than or equal to variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPFlt()    FLOAT IEEESPFlt( long integer );&lt;br /&gt;
: Convert integer variable to IEEE single-precision.&lt;br /&gt;
&lt;br /&gt;
; IEEESPMul()    FLOAT IEEESPMul( FLOAT leftParm, FLOAT rightParm );&lt;br /&gt;
: Multiply two IEEE single-precision variables.&lt;br /&gt;
&lt;br /&gt;
; IEEESPNeg()    FLOAT IEEESPNeg( FLOAT parm );&lt;br /&gt;
: Take two&#039;s complement of IEEE single-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPSub()    FLOAT IEEESPSub( FLOAT leftParm, FLOAT rightParm );&lt;br /&gt;
: Subtract two IEEE single-precision variables.&lt;br /&gt;
&lt;br /&gt;
; IEEESPTst()    LONG  IEEESPTst( FLOAT parm );&lt;br /&gt;
: Test an IEEE single-precision variable against zero.&lt;br /&gt;
&lt;br /&gt;
Be sure to include proper data type definitions, as shown in the example below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathieeesp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathsingbas_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathIeeeSingBasBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
FLOAT f1, f2, f3;&lt;br /&gt;
LONG   i1;&lt;br /&gt;
&lt;br /&gt;
if (MathIeeeSingBasBase = OpenLibrary(&amp;quot;mathieeesingbas.library&amp;quot;,37))&lt;br /&gt;
    {&lt;br /&gt;
    i1 = IEEESPFix(f1);                /* Call IEEESPFix entry */&lt;br /&gt;
    fi = IEEESPFlt(i1);                /* Call IEEESPFlt entry */&lt;br /&gt;
    switch (IEEESPCmp(f1, f2)) {};     /* Call IEEESPCmp entry */&lt;br /&gt;
    switch (IEEESPTst(f1)) {};         /* Call IEEESPTst entry */&lt;br /&gt;
    f1 = IEEESPAbs(f2);                /* Call IEEESPAbs entry */&lt;br /&gt;
    f1 = IEEESPNeg(f2);                /* Call IEEESPNeg entry */&lt;br /&gt;
    f1 = IEEESPAdd(f2, f3);            /* Call IEEESPAdd entry */&lt;br /&gt;
    f1 = IEEESPSub(f2, f3);            /* Call IEEESPSub entry */&lt;br /&gt;
    f1 = IEEESPMul(f2, f3);            /* Call IEEESPMul entry */&lt;br /&gt;
    f1 = IEEESPDiv(f2, f3);            /* Call IEEESPDiv entry */&lt;br /&gt;
    f1 = IEEESPCeil(f2);               /* Call IEEESPCeil entry */&lt;br /&gt;
    f1 = IEEESPFloor(f2);              /* Call IEEESPFloor entry */&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathIeeeSingBasBase);&lt;br /&gt;
    }&lt;br /&gt;
else&lt;br /&gt;
    printf(&amp;quot;Can&#039;t open mathieeesingbas.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Amiga assembly language interface to the IEEE single-precision basic math routines is shown below, including some details about how the system flags are affected by each operation. Note that the access mechanism from assembly language is as shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MOVEA.L _MathIeeeSingBasBase,A6&lt;br /&gt;
JSR     _LVOIEEESPFix(A6)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ SP IEEE Basic Assembly Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Input&lt;br /&gt;
! Output&lt;br /&gt;
! Condition Codes&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPFix&lt;br /&gt;
| D0 = IEEE double-precision argument&lt;br /&gt;
| D0 = Integer (two&#039;s complement)&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPFlt&lt;br /&gt;
| D0 = Integer argument (two&#039;s complement)&lt;br /&gt;
| D0 = IEEE single-precision&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPCmp&lt;br /&gt;
| D0 = IEEE single-precision argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D1 = IEEE single-precision argument 2&lt;br /&gt;
| D0 = +1 if arg1 &amp;gt; arg2&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = -1 if arg1 &amp;lt; arg2&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = 0 if arg1 = arg2&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
GT = arg2 &amp;gt; arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
GE = arg2 &amp;gt;= arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
EQ = arg2 = arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
NE = arg2 != arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
LT = arg2 &amp;lt; arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
E= arg2 &amp;lt;= arg1&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPTst&lt;br /&gt;
| D0 = IEEE single-precision argument&lt;br /&gt;
| D0 = +1 if arg &amp;gt; 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = -1 if arg &amp;lt; 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = 0 if arg = 0.0&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
EQ = arg = 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
NE = arg != 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
PL = arg &amp;gt;= 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
MI = arg &amp;lt; 0.0&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPAbs&lt;br /&gt;
| D0 = IEEE single-precision argument&lt;br /&gt;
| D0 = IEEE single-precision absolute value&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPNeg&lt;br /&gt;
| D0 = IEEE single-precision argument&lt;br /&gt;
| D0 = IEEE single-precision negated&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPAdd&lt;br /&gt;
| D0 = IEEE single-precision argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D1 = IEEE single-precision argument 2&lt;br /&gt;
| D0 = IEEE single-precision addition of arg1+arg2&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPSub&lt;br /&gt;
| D0 = IEEE single-precision argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D1 = IEEE single-precision argument 2&lt;br /&gt;
| D0 = IEEE single-precision subtraction of arg1-arg2&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPMul&lt;br /&gt;
| D0 = IEEE single-precision argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D1 = IEEE single-precision argument 2&lt;br /&gt;
| D0 = IEEE single-precision multiplication of arg1 * arg2&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPDiv&lt;br /&gt;
| D0 = IEEE single-precision argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D1 = IEEE single-precision argument 2&lt;br /&gt;
| D0 = IEEE single-precision division of arg1/arg2&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPCeil&lt;br /&gt;
| D0 = IEEE single-precision variable&lt;br /&gt;
| D0 = least integer &amp;gt;= variable&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPFloor&lt;br /&gt;
| D0 = IEEE single-precision variable&lt;br /&gt;
| D0 = largest integer &amp;lt;= argument&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IEEE Single-Precision Transcendental Math Library ==&lt;br /&gt;
&lt;br /&gt;
The IEEE single-precision transcendental math library was introduced in V36. It contains entries for transcendental math functions such as sine, cosine, and square root.&lt;br /&gt;
&lt;br /&gt;
This library resides on disk and is opened by calling OpenLibrary() with &amp;amp;quot;mathieeesingtrans.library&amp;amp;quot; as the argument. Do not share the library base pointer between tasks - see note at beginning of chapter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathieeesp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathIeeeSingTransBase;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathsingtrans_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
if (MathIeeeSingTransBase = OpenLibrary(&amp;quot;mathieeesingtrans.library&amp;quot;,37))&lt;br /&gt;
    {&lt;br /&gt;
           . . .&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathIeeeSingTransBase);&lt;br /&gt;
    }&lt;br /&gt;
else  printf(&amp;quot;Can&#039;t open mathieeesingtrans.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global variable MathIeeeSingTransBase is used internally for all future library references.&lt;br /&gt;
&lt;br /&gt;
The IEEE single-precision transcendental math library is dependent upon the IEEE single-precision basic math library, which it will open if it is not open already. If you want to use the IEEE single-precision basic math functions in conjunction with the transcendental math functions however, you have to specifically open the basic math library yourself.&lt;br /&gt;
&lt;br /&gt;
Just as the IEEE single-precision basic math library, the IEEE single-precision transcendental math library will take advantage of a &#039;&#039;680x0&#039;&#039;/&#039;&#039;68881&#039;&#039; combination or another math resource, if present.&lt;br /&gt;
&lt;br /&gt;
=== SP IEEE Transcendental Functions (V36 or greater) ===&lt;br /&gt;
&lt;br /&gt;
; IEEESPAsin()   FLOAT IEEESPAsin( FLOAT parm );&lt;br /&gt;
: Return arcsine of IEEE single-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPAcos()   FLOAT IEEESPAcos( FLOAT parm );&lt;br /&gt;
: Return arccosine of IEEE single-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPAtan()   FLOAT IEEESPAtan( FLOAT parm );&lt;br /&gt;
: Return arctangent of IEEE single-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPSin()    FLOAT IEEESPSin( FLOAT parm );&lt;br /&gt;
; Return sine of IEEE single-precision variable. This function accepts an IEEE radian argument and returns the trigonometric sine value.&lt;br /&gt;
&lt;br /&gt;
; IEEESPCos()    FLOAT IEEESPCos( FLOAT parm );&lt;br /&gt;
: Return cosine of IEEE single-precision variable. This function accepts an IEEE radian argument and returns the trigonometric cosine value.&lt;br /&gt;
&lt;br /&gt;
; IEEESPTan()    FLOAT IEEESPTan( FLOAT parm );&lt;br /&gt;
: Return tangent of IEEE single-precision variable. This function accepts an IEEE radian argument and returns the trigonometric tangent value.&lt;br /&gt;
&lt;br /&gt;
; IEEESPSincos() FLOAT IEEESPSincos( FLOAT *cosptr, FLOAT parm );&lt;br /&gt;
: Return sine and cosine of IEEE single-precision variable. This function accepts an IEEE radian argument and returns the trigonometric sine as its result and the cosine in the first parameter.&lt;br /&gt;
&lt;br /&gt;
; IEEESPSinh()   FLOAT IEEESPSinh( FLOAT parm );&lt;br /&gt;
: Return hyperbolic sine of IEEE single-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPCosh()   FLOAT IEEESPCosh( FLOAT parm );&lt;br /&gt;
: Return hyperbolic cosine of IEEE single-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPTanh()   FLOAT IEEESPTanh( FLOAT parm );&lt;br /&gt;
: Return hyperbolic tangent of IEEE single-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPExp()    FLOAT IEEESPExp( FLOAT parm );&lt;br /&gt;
: Return &#039;&#039;e&#039;&#039; to the IEEE variable power. This function accept an IEEE single-precision argument and returns the result representing the value of &#039;&#039;e&#039;&#039; (2.712828...) raised to that power.&lt;br /&gt;
&lt;br /&gt;
; IEEESPFieee()  FLOAT IEEESPFieee( FLOAT parm );&lt;br /&gt;
: Convert IEEE single-precision number to IEEE single-precision number. The only purpose of this function is to provide consistency with the double-precision math IEEE library.&lt;br /&gt;
&lt;br /&gt;
; IEEESPLog()    FLOAT IEEESPLog( FLOAT parm );&lt;br /&gt;
: Return natural log (base &#039;&#039;e&#039;&#039; of IEEE single-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPLog10()  FLOAT IEEESPLog10( FLOAT parm );&lt;br /&gt;
: Return log (base 10) of IEEE single-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPPow()    FLOAT IEEESPPow( FLOAT exp, FLOAT arg );&lt;br /&gt;
: Return IEEE single-precision arg2 to IEEE single-precision arg1.&lt;br /&gt;
&lt;br /&gt;
; IEEESPSqrt()   FLOAT IEEESPSqrt( FLOAT parm );&lt;br /&gt;
: Return square root of IEEE single-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEESPTieee()  FLOAT IEEESPTieee( FLOAT parm );&lt;br /&gt;
: Convert IEEE single-precision number to IEEE single-precision number. The only purpose of this function is to provide consistency with the double-precision math IEEE library.&lt;br /&gt;
&lt;br /&gt;
Be sure to include the proper data type definitions as shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathieeesp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathsingtrans_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathIeeeSingTransBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
FLOAT f1, f2, f3;&lt;br /&gt;
&lt;br /&gt;
if (MathIeeeSingTransBase = OpenLibrary(&amp;quot;mathieeesingtrans.library&amp;quot;,37))&lt;br /&gt;
    {&lt;br /&gt;
    f1 = IEEEDPAsin(f2);        /* Call IEEESPAsin entry */&lt;br /&gt;
    f1 = IEEEDPAcos(f2);        /* Call IEEESPAcos entry */&lt;br /&gt;
    f1 = IEEEDPAtan(f2);        /* Call IEEESPAtan entry */&lt;br /&gt;
    f1 = IEEEDPSin(f2);         /* Call IEEESPSin entry */&lt;br /&gt;
    f1 = IEEEDPCos(f2);         /* Call IEEESPCos entry */&lt;br /&gt;
    f1 = IEEEDPTan(f2);         /* Call IEEESPTan entry */&lt;br /&gt;
    f1 = IEEEDPSincos(&amp;amp;f3, f2); /* Call IEEESPSincos entry */&lt;br /&gt;
    f1 = IEEEDPSinh(f2);        /* Call IEEESPSinh entry */&lt;br /&gt;
    f1 = IEEEDPCosh(f2);        /* Call IEEESPCosh entry */&lt;br /&gt;
    f1 = IEEEDPTanh(f2);        /* Call IEEESPTanh entry */&lt;br /&gt;
    f1 = IEEEDPExp(f2);         /* Call IEEESPExp entry */&lt;br /&gt;
    f1 = IEEEDPLog(f2);         /* Call IEEESPLog entry */&lt;br /&gt;
    f1 = IEEEDPLog10(f2);       /* Call IEEESPLog10 entry */&lt;br /&gt;
    f1 = IEEEDPPow(d2, f3);     /* Call IEEESPPow entry */&lt;br /&gt;
    f1 = IEEEDPSqrt(f2);        /* Call IEEESPSqrt entry */&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathIeeeSingTransBase);&lt;br /&gt;
    }&lt;br /&gt;
else printf(&amp;quot;Can&#039;t open mathieeesingtrans.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The section below describes the Amiga assembly interface to the IEEE single-precision transcendental math library. The access mechanism from assembly language is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MOVEA.L _MathIeeeSingTransBase,A6&lt;br /&gt;
JSR     _LVOIEEESPAsin(A6)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ SP IEEE Transcendental Assembly Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Input&lt;br /&gt;
! Output&lt;br /&gt;
! Condition Codes&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPAsin&lt;br /&gt;
| D0 = IEEE argument&lt;br /&gt;
| D0 = IEEE arcsine radian&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPAcos&lt;br /&gt;
| D0 = IEEE single-precision argument&lt;br /&gt;
| D0 = IEEE arccosine radian&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPAtan&lt;br /&gt;
| D0 = IEEE single-precision argument&lt;br /&gt;
| D0 = IEEE arctangent radian&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPSin&lt;br /&gt;
| D0 = IEEE single-precision argument in radians&lt;br /&gt;
| D0 = IEEE sine&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPCos&lt;br /&gt;
| D0 = IEEE single-precision argument in radians&lt;br /&gt;
| D0 = IEEE cosine&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPTan&lt;br /&gt;
| D0 = IEEE single-precision argument in radians&lt;br /&gt;
| D0 = IEEE tangent&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPSincos&lt;br /&gt;
| A0 = Address to store cosine result&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = IEEE argument in radians&lt;br /&gt;
| D0 = IEEE sine&amp;lt;br/&amp;gt;&lt;br /&gt;
(A0) = IEEE cosine&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPSinh&lt;br /&gt;
| D0 = IEEE single-precision argument in radians&lt;br /&gt;
| D0 = IEEE hyperbolic sine&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPCosh&lt;br /&gt;
| D0 = IEEE single-precision argument in radians&lt;br /&gt;
| D0 = IEEE hyperbolic cosine&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPTanh&lt;br /&gt;
| D0 = IEEE single-precision argument in radians&lt;br /&gt;
| D0 = IEEE hyperbolic tangent&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPExp&lt;br /&gt;
| D0 = IEEE single-precision argument&lt;br /&gt;
| D0 = IEEE exponential&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPLog&lt;br /&gt;
| D0 = IEEE single-precision argument&lt;br /&gt;
| D0 = IEEE natural logarithm&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPLog10&lt;br /&gt;
| D0 = IEEE single-precision argument&lt;br /&gt;
| D0 = IEEE logarithm (base 10)&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPPow&lt;br /&gt;
| D0 = IEEE single-precision exponent value&amp;lt;br/&amp;gt;&lt;br /&gt;
D1 = IEEE single-precision argument value&lt;br /&gt;
| D0 = IEEE result of arg taken to exp power&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEESPSqrt&lt;br /&gt;
| D0 = IEEE single-precision argument&lt;br /&gt;
| D0 = IEEE square root&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IEEE Double-Precision Data Format ==&lt;br /&gt;
&lt;br /&gt;
The IEEE double-precision variables are defined as 64-bit entities with the following format:&lt;br /&gt;
&lt;br /&gt;
  ______________________________________________&lt;br /&gt;
 |                                              |&lt;br /&gt;
 | SEEEEEEE    EEEEEIMM    MMMMMMMM    MMMMMMMM |&lt;br /&gt;
 | 63          55          47          39       |&lt;br /&gt;
 |______________________________________________|&lt;br /&gt;
&lt;br /&gt;
  ______________________________________________&lt;br /&gt;
 |                                              |&lt;br /&gt;
 | MMMMMMMM    MMMMMMMM    MMMMMMMM    MMMMMMMM |&lt;br /&gt;
 | 31          23          15          7        |&lt;br /&gt;
 |______________________________________________|&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Hidden Bit In The Mantissa|text=There is a &amp;quot;hidden&amp;quot; bit in the mantissa part of the IEEE numbers. Since all numbers are normalized, the &#039;&#039;integer&#039;&#039; (high) bit of the mantissa is dropped off. The IEEE double-precision range is 2.2E-308 (4.9E-324 de-normalized) to 1.8E+307.}}&lt;br /&gt;
&lt;br /&gt;
The exponent is the power of two needed to correctly position the mantissa to reflect the number&#039;s true arithmetic value. If both the exponent and the mantissa have zero in every position, the value is zero. If only the exponent has zero in every position, the value is an &#039;&#039;unnormal&#039;&#039; (extremely small). If all bits of the exponent are set to 1 the value is either a positive or negative infinity or a &#039;&#039;Not a Number (NaN)&#039;&#039;. NaN is sometimes used to indicate an uninitialized variable.&lt;br /&gt;
&lt;br /&gt;
== IEEE Double-Precision Basic Math Library ==&lt;br /&gt;
&lt;br /&gt;
The IEEE double-precision basic math library contains entries for the basic IEEE mathematics functions, such as add, subtract, and divide. This library resides on disk and is opened by calling OpenLibrary() with &amp;amp;quot;mathieeedoubbas.library&amp;amp;quot; as the argument. Do not share the library base pointer between tasks - see note at beginning of chapter for details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathieeedp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathdoubbas_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathIeeeDoubBasBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
    /* do not share base pointer between tasks. */&lt;br /&gt;
if (MathIeeeDoubBasBase = OpenLibrary(&amp;quot;mathieeedoubbas.library&amp;quot;, 34))&lt;br /&gt;
    {&lt;br /&gt;
           . . .&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathIeeeDoubBasBase);&lt;br /&gt;
    }&lt;br /&gt;
else printf(&amp;quot;Can&#039;t open mathieeedoubbas.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global variable MathIeeeDoubBasBase is used internally for all future library references.&lt;br /&gt;
&lt;br /&gt;
If an &#039;&#039;680x0&#039;&#039;/&#039;&#039;68881&#039;&#039;/&#039;&#039;68882&#039;&#039; processor combination is available, it will be used by the IEEE basic library instead of the software emulation. Also, if an autoconfigured math resource is available, that will be used. Typically this is a 68881 designed as a 16 bit I/O port, but it could be another device as well.&lt;br /&gt;
&lt;br /&gt;
=== DP IEEE Basic Functions ===&lt;br /&gt;
&lt;br /&gt;
; IEEEDPAbs()    DOUBLE IEEEDPAbs( DOUBLE parm );&lt;br /&gt;
: Take absolute value of IEEE double-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPAdd()    DOUBLE IEEEDPAdd( DOUBLE leftParm, DOUBLE rightParm );&lt;br /&gt;
: Add two IEEE double-precision variables.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPCeil()   DOUBLE IEEEDPCeil( DOUBLE parm );&lt;br /&gt;
: Compute least integer greater than or equal to variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPCmp()    LONG IEEEDPCmp( DOUBLE leftParm, DOUBLE rightParm );&lt;br /&gt;
: Compare two IEEE double-precision variables.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPDiv()    DOUBLE IEEEDPDiv( DOUBLE dividend, DOUBLE divisor );&lt;br /&gt;
: Divide two IEEE double-precision variables.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPFix()    LONG IEEEDPFix( DOUBLE parm );&lt;br /&gt;
: Convert IEEE double-precision variable to integer.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPFloor()  DOUBLE IEEEDPFloor( DOUBLE parm );&lt;br /&gt;
: Compute largest integer less than or equal to variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPFlt()    DOUBLE IEEEDPFlt( long integer );&lt;br /&gt;
: Convert integer variable to IEEE double-precision.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPMul()    DOUBLE IEEEDPMul( DOUBLE factor1, DOUBLE factor2 );&lt;br /&gt;
: Multiply two IEEE double-precision variables.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPNeg()    DOUBLE IEEEDPNeg( DOUBLE parm );&lt;br /&gt;
: Take two&#039;s complement of IEEE double-precision variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPSub()    DOUBLE IEEEDPSub( DOUBLE leftParm, DOUBLE rightParm );&lt;br /&gt;
: Subtract two IEEE double-precision variables.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPTst()    LONG IEEEDPTst( DOUBLE parm );&lt;br /&gt;
: Test an IEEE double-precision variable against zero.&lt;br /&gt;
&lt;br /&gt;
Be sure to include proper data type definitions, as shown in the example below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathieeedp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathieeedoubbas_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathIeeeDoubBasBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
DOUBLE d1, d2, d3;&lt;br /&gt;
LONG   i1;&lt;br /&gt;
&lt;br /&gt;
if (MathIeeeDoubBasBase = OpenLibrary(&amp;quot;mathieeedoubbas.library&amp;quot;,34))&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
    i1 = IEEEDPFix(d1);                /* Call IEEEDPFix entry */&lt;br /&gt;
    fi = IEEEDPFlt(i1);                /* Call IEEEDPFlt entry */&lt;br /&gt;
    switch (IEEEDPCmp(d1, d2)) {};     /* Call IEEEDPCmp entry */&lt;br /&gt;
    switch (IEEEDPTst(d1)) {};         /* Call IEEEDPTst entry */&lt;br /&gt;
    d1 = IEEEDPAbs(d2);                /* Call IEEEDPAbs entry */&lt;br /&gt;
    d1 = IEEEDPNeg(d2);                /* Call IEEEDPNeg entry */&lt;br /&gt;
    d1 = IEEEDPAdd(d2, d3);            /* Call IEEEDPAdd entry */&lt;br /&gt;
    d1 = IEEEDPSub(d2, d3);            /* Call IEEEDPSub entry */&lt;br /&gt;
    d1 = IEEEDPMul(d2, d3);            /* Call IEEEDPMul entry */&lt;br /&gt;
    d1 = IEEEDPDiv(d2, d3);            /* Call IEEEDPDiv entry */&lt;br /&gt;
    d1 = IEEEDPCeil(d2);               /* Call IEEEDPCeil entry */&lt;br /&gt;
    d1 = IEEEDPFloor(d2);              /* Call IEEEDPFloor entry */&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathIeeeDoubBasBase);&lt;br /&gt;
    }&lt;br /&gt;
else printf(&amp;quot;Can&#039;t open mathieeedoubbas.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Amiga assembly language interface to the IEEE double-precision floating-point basic math routines is shown below, including some details about how the system flags are affected by each operation. The access mechanism from assembly language is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MOVEA.L _MathIeeeDoubBasBase,A6&lt;br /&gt;
JSR     _LVOIEEEDPFix(A6)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ DP IEEE Basic Assembly Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Input&lt;br /&gt;
! Output&lt;br /&gt;
! Condition Codes&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPFix&lt;br /&gt;
| D0/D1 = IEEE double-precision argument&lt;br /&gt;
| D0 = Integer (two&#039;s complement)&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPFl&lt;br /&gt;
| D0 = Integer (two&#039;s complement) argument&lt;br /&gt;
| D0/D1 = IEEE double-precision&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPCmp&lt;br /&gt;
| D0/D1 = IEEE double-precision argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D2/D3 = IEEE double-precision argument 2&lt;br /&gt;
| D0 = +1 if arg1 &amp;gt; arg2&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = -1 if arg1 &amp;lt; arg2&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = 0 if arg1 = arg2&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
GT = arg2 &amp;gt; arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
GE = arg2 &amp;gt;= arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
EQ = arg2 = arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
NE = arg2 != arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
LT = arg2 &amp;lt; arg1&amp;lt;br/&amp;gt;&lt;br /&gt;
LE = arg2 &amp;lt;= arg1&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPTst&lt;br /&gt;
| D0/D1 = IEEE double-precision argument&lt;br /&gt;
| D0 = +1 if arg &amp;gt; 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = -1 if arg &amp;lt; 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
D0 = 0 if arg = 0.0&lt;br /&gt;
| N = 1 if result is negative&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = 1 if result is zero&amp;lt;br/&amp;gt;&lt;br /&gt;
V = 0&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
EQ = arg = 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
NE = arg != 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
PL = arg &amp;gt;= 0.0&amp;lt;br/&amp;gt;&lt;br /&gt;
MI = arg &amp;lt; 0.0&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPAbs&lt;br /&gt;
| D0/D1 = IEEE double-precision argument&lt;br /&gt;
| D0/D1 = IEEE double-precision absolute value&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPNeg&lt;br /&gt;
| D0/D1 = IEEE double-precision argument&lt;br /&gt;
| D0/D1 = IEEE double-precision negated&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPAdd&lt;br /&gt;
| D0/D1 = IEEE double-precision argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D2/D3 = IEEE double-precision argument 2&lt;br /&gt;
| D0/D1 = IEEE double-precision addition of arg1+arg2&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPSub&lt;br /&gt;
| D0/D1 = IEEE double-precision argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D2/D3 = IEEE double-precision argument 2&lt;br /&gt;
| D0/D1 = IEEE double-precision subtraction of arg1-arg2&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPMul&lt;br /&gt;
| D0/D1 = IEEE double-precision argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D2/D3 = IEEE double-precision argument 2&lt;br /&gt;
| D0/D1 = IEEE double-precision multiplication of arg1*arg2&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPDiv&lt;br /&gt;
| D0/D1 = IEEE double-precision argument 1&amp;lt;br/&amp;gt;&lt;br /&gt;
D2/D3 = IEEE double-precision argument 2&lt;br /&gt;
| D0/D1 = IEEE double-precision division of arg1/arg2&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPCeil&lt;br /&gt;
| D0/D1 = IEEE double-precision argument&lt;br /&gt;
| D0/D1 = least integer &amp;gt;= argument&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPFloor&lt;br /&gt;
| D0/D1 = IEEE double-precision argument&lt;br /&gt;
| D0/D1 = largest integer &amp;lt;= argument&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IEEE Double-Precision Transcendental Math Library ==&lt;br /&gt;
&lt;br /&gt;
The IEEE double-precision transcendental math library contains entries for the transcendental math functions such as sine, cosine, and square root. The library resides on disk and is opened by calling OpenLibrary() with &amp;amp;quot;mathieeedoubtrans.library&amp;amp;quot; as the argument. Do not share the library base pointer between tasks - see note at beginning of chapter for details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathieeedp.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;clib/mathdoubtrans_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathIeeeDoubTransBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
if (MathIeeeDoubTransBase = OpenLibrary(&amp;quot;mathieeedoubtrans.library&amp;quot;,34))&lt;br /&gt;
    {&lt;br /&gt;
           . . .&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathIeeeDoubTransBase);&lt;br /&gt;
    }&lt;br /&gt;
else printf(&amp;quot;Can&#039;t open mathieeedoubtrans.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global variable MathIeeeDoubTransBase is used internally for all future library references.&lt;br /&gt;
&lt;br /&gt;
The IEEE double-precision transcendental math library is dependent upon the IEEE double-precision basic math library, which it will open if it is not open already. If you want to use the IEEE double-precision basic math functions in conjunction with the transcendental math functions however, you have to specifically open the basic math library yourself.&lt;br /&gt;
&lt;br /&gt;
Just as the IEEE double-precision basic math library, the IEEE double-precision transcendental math library will take advantage of a &#039;&#039;680x0&#039;&#039;/&#039;&#039;68881&#039;&#039; combination or another math resource, if present.&lt;br /&gt;
&lt;br /&gt;
=== DP IEEE Transcendental Functions ===&lt;br /&gt;
&lt;br /&gt;
; IEEEDPAsin()   DOUBLE IEEEDPAsin( DOUBLE parm );&lt;br /&gt;
: Return arcsine of IEEE variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPAcos()   DOUBLE IEEEDPAcos( DOUBLE parm );&lt;br /&gt;
: Return arccosine of IEEE variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPAtan()   DOUBLE IEEEDPAtan( DOUBLE parm );&lt;br /&gt;
: Return arctangent of IEEE variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPSin()    DOUBLE IEEEDPSin( DOUBLE parm );&lt;br /&gt;
: Return sine of IEEE variable. This function accepts an IEEE radian argument and returns the trigonometric sine value.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPCos()    DOUBLE IEEEDPCos( DOUBLE parm )&lt;br /&gt;
: Return cosine of IEEE variable. This function accepts an IEEE radian argument and returns the trigonometric cosine value.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPTan()    DOUBLE IEEEDPTan( DOUBLE parm );&lt;br /&gt;
: Return tangent of IEEE variable. This function accepts an IEEE radian argument and returns the trigonometric tangent value.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPSincos() DOUBLE IEEEDPSincos( DOUBLE *pf2, DOUBLE parm );&lt;br /&gt;
: Return sine and cosine of IEEE variable. This function accepts an IEEE radian argument and returns the trigonometric sine as its result and the trigonometric cosine in the first parameter.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPSinh()   DOUBLE IEEEDPSinh( DOUBLE parm );&lt;br /&gt;
: Return hyperbolic sine of IEEE variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPCosh()   DOUBLE IEEEDPCosh( DOUBLE parm );&lt;br /&gt;
: Return hyperbolic cosine of IEEE variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPTanh()   DOUBLE IEEEDPTanh( DOUBLE parm );&lt;br /&gt;
: Return hyperbolic tangent of IEEE variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPExp()    DOUBLE IEEEDPExp( DOUBLE parm );&lt;br /&gt;
: Return &#039;&#039;e&#039;&#039; to the IEEE variable power. This function accept an IEEE argument and returns the result representing the value of &#039;&#039;e&#039;&#039; (2.712828...) raised to that power.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPFieee()  DOUBLE IEEEDPFieee( FLOAT single );&lt;br /&gt;
: Convert IEEE single-precision number to IEEE double-precision number.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPLog()    DOUBLE IEEEDPLog( DOUBLE parm );&lt;br /&gt;
: Return natural log (base &#039;&#039;e&#039;&#039; of IEEE variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPLog10()  DOUBLE IEEEDPLog10( DOUBLE parm );&lt;br /&gt;
: Return log (base 10) of IEEE variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPPow()    DOUBLE IEEEDPPow( DOUBLE exp, DOUBLE arg );&lt;br /&gt;
: Return IEEE arg2 to IEEE arg1.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPSqrt()   DOUBLE IEEEDPSqrt( DOUBLE parm );&lt;br /&gt;
: Return square root of IEEE variable.&lt;br /&gt;
&lt;br /&gt;
; IEEEDPTieee()  FLOAT IEEEDPTieee( DOUBLE parm );&lt;br /&gt;
: Convert IEEE double-precision number to IEEE single-precision number.&lt;br /&gt;
&lt;br /&gt;
Be sure to include proper data type definitions as shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/mathieeedp.h&amp;gt;&lt;br /&gt;
#include &amp;lt;clib/mathdoubtrans_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Library *MathIeeeDoubTransBase;&lt;br /&gt;
&lt;br /&gt;
VOID main()&lt;br /&gt;
{&lt;br /&gt;
DOUBLE d1, d2, d3;&lt;br /&gt;
FLOAT f1;&lt;br /&gt;
&lt;br /&gt;
if (MathIeeeDoubTransBase = OpenLibrary(&amp;quot;mathieeedoubtrans.library&amp;quot;,34))&lt;br /&gt;
    {&lt;br /&gt;
    d1 = IEEEDPAsin(d2);        /* Call IEEEDPAsin entry */&lt;br /&gt;
    d1 = IEEEDPAcos(d2);        /* Call IEEEDPAcos entry */&lt;br /&gt;
    d1 = IEEEDPAtan(d2);        /* Call IEEEDPAtan entry */&lt;br /&gt;
    d1 = IEEEDPSin(d2);         /* Call IEEEDPSin entry */&lt;br /&gt;
    d1 = IEEEDPCos(d2);         /* Call IEEEDPCos entry */&lt;br /&gt;
    d1 = IEEEDPTan(d2);         /* Call IEEEDPTan entry */&lt;br /&gt;
    d1 = IEEEDPSincos(&amp;amp;d3, d2); /* Call IEEEDPSincos entry */&lt;br /&gt;
    d1 = IEEEDPSinh(d2);        /* Call IEEEDPSinh entry */&lt;br /&gt;
    d1 = IEEEDPCosh(d2);        /* Call IEEEDPCosh entry */&lt;br /&gt;
    d1 = IEEEDPTanh(d2);        /* Call IEEEDPTanh entry */&lt;br /&gt;
    d1 = IEEEDPExp(d2);         /* Call IEEEDPExp entry */&lt;br /&gt;
    d1 = IEEEDPLog(d2);         /* Call IEEEDPLog entry */&lt;br /&gt;
    d1 = IEEEDPLog10(d2);       /* Call IEEEDPLog10 entry */&lt;br /&gt;
    d1 = IEEEDPPow(d2, d3);     /* Call IEEEDPPow entry */&lt;br /&gt;
    d1 = IEEEDPSqrt(d2);        /* Call IEEEDPSqrt entry */&lt;br /&gt;
    f1 = IEEEDPTieee(d2);       /* Call IEEEDPTieee entry */&lt;br /&gt;
    d1 = IEEEDPFieee(f1);       /* Call IEEEDPFieee entry */&lt;br /&gt;
&lt;br /&gt;
    CloseLibrary(MathIeeeDoubTransBase);&lt;br /&gt;
    }&lt;br /&gt;
else printf(&amp;quot;Can&#039;t open mathieeedoubtrans.library\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The section below describes the Amiga assembly interface to the IEEE double-precision transcendental math library. The access mechanism from assembly language is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MOVEA.L _MathIeeeDoubTransBase,A6&lt;br /&gt;
JSR     _LVOIEEEDPAsin(A6)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ DP IEEE Transcendental Assembly Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Input&lt;br /&gt;
! Output&lt;br /&gt;
! Condition Codes&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPAsin&lt;br /&gt;
| D0/D1 = IEEE argument&lt;br /&gt;
| D0/D1 = IEEE arcsine radian&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPAcos&lt;br /&gt;
| D0/D1 = IEEE argument&lt;br /&gt;
| D0/D1 = IEEE arccosine radian&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPAtan&lt;br /&gt;
| D0/D1 = IEEE argument&lt;br /&gt;
| D0/D1 = IEEE arctangent radian&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPSin&lt;br /&gt;
| D0/D1 = IEEE argument in radians&lt;br /&gt;
| D0/D1 = IEEE sine&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPCos&lt;br /&gt;
| D0/D1 = IEEE argument in radians&lt;br /&gt;
| D0/D1 = IEEE cosine&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPTan&lt;br /&gt;
| D0/D1 = IEEE argument in radians&lt;br /&gt;
| D0/D1 = IEEE tangent&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPSincos&lt;br /&gt;
| A0 = Address to store cosine result&amp;lt;br/&amp;gt;&lt;br /&gt;
D0/D1 = IEEE argument in radians&lt;br /&gt;
| D0/D1 = IEEE sine&amp;lt;br/&amp;gt;&lt;br /&gt;
(A0) = IEEE cosine&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPSin&lt;br /&gt;
| D0/D1 = IEEE argument in radians&lt;br /&gt;
| D0/D1 = IEEE hyperbolic sine&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPCosh&lt;br /&gt;
| D0/D1 = IEEE argument in radians&lt;br /&gt;
| D0/D1 = IEEE hyperbolic cosine&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPTanh&lt;br /&gt;
| D0/D1 = IEEE argument in radians&lt;br /&gt;
| D0/D1 = IEEE hyperbolic tangent&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPExp&lt;br /&gt;
| D0/D1 = IEEE argument&lt;br /&gt;
| D0/D1 = IEEE exponential&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPLog&lt;br /&gt;
| D0/D1 = IEEE argument&lt;br /&gt;
| D0/D1 = IEEE natural logarithm&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPLog10&lt;br /&gt;
| D0/D1 = IEEE argument&lt;br /&gt;
| D0/D1 = IEEE logarithm (base 10)&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPPow&lt;br /&gt;
| D0/D1 = IEEE exponent&amp;lt;br/&amp;gt;&lt;br /&gt;
D2/D3 = IEEE argument&lt;br /&gt;
| D0/D1 = IEEE result of arg taken to exp power&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPSqrt&lt;br /&gt;
| D0/D1 = IEEE argument&lt;br /&gt;
| D0/D1 = IEEE square root&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|-&lt;br /&gt;
| _LVOIEEEDPTieee&lt;br /&gt;
| D0/D1 = IEEE format argument&lt;br /&gt;
| D0 = single-precision IEEE floating-point format&lt;br /&gt;
| N = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
Z = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
V = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
C = undefined&amp;lt;br/&amp;gt;&lt;br /&gt;
X = undefined&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Function Reference ==&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a brief summary of the functions covered in this chapter. Refer to the SDK for additional information.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ FFP Basic Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| SPAbs()&lt;br /&gt;
| Take absolute value of FFP variable&lt;br /&gt;
|-&lt;br /&gt;
| SPAdd()&lt;br /&gt;
| Add two FFP variables&lt;br /&gt;
|-&lt;br /&gt;
| SPCeil()&lt;br /&gt;
| Compute least integer greater than or equal to variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPCmp()&lt;br /&gt;
| Compare two FFP variables&lt;br /&gt;
|-&lt;br /&gt;
| SPDiv()&lt;br /&gt;
| Divide two FFP variables&lt;br /&gt;
|-&lt;br /&gt;
| SPFix()&lt;br /&gt;
| Convert FFP variable to integer&lt;br /&gt;
|-&lt;br /&gt;
| SPFloor()&lt;br /&gt;
| Computer largest integer less than or equal to variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPFlt()&lt;br /&gt;
| Convert integer variable to FFP&lt;br /&gt;
|-&lt;br /&gt;
| SPMul()&lt;br /&gt;
| Multiply two FFP variables&lt;br /&gt;
|-&lt;br /&gt;
| SPNeg()&lt;br /&gt;
| Take two‚Äôs complement of FFP variable&lt;br /&gt;
|-&lt;br /&gt;
| SPSub()&lt;br /&gt;
| Subtract two FFP variables&lt;br /&gt;
|-&lt;br /&gt;
| SPTst()&lt;br /&gt;
| Test an FFP variable against zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ FFP Transcendental Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| SPAcos()&lt;br /&gt;
| Return arccosine of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPAsin()&lt;br /&gt;
| Return arcsine of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPAtan()&lt;br /&gt;
| Return arctangent of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPCos()&lt;br /&gt;
| Return cosine of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPCosh()&lt;br /&gt;
| Return hyperbolic cosine of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPExp()&lt;br /&gt;
| Return &#039;&#039;e&#039;&#039; to the FFP variable power.&lt;br /&gt;
|-&lt;br /&gt;
| SPFieee()&lt;br /&gt;
| Convert IEEE variable to FFP format.&lt;br /&gt;
|-&lt;br /&gt;
| SPLog()&lt;br /&gt;
| Return natural log (base &#039;&#039;e&#039;&#039;) of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPLog10()&lt;br /&gt;
| Return log (base 10) of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPPow()&lt;br /&gt;
| Return FFP arg2 to FFP arg1.&lt;br /&gt;
|-&lt;br /&gt;
| SPSin()&lt;br /&gt;
| Return sine of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPSincos()&lt;br /&gt;
| Return sine and cosine of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPSinh()&lt;br /&gt;
| Return hyperbolic sine of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPSqrt()&lt;br /&gt;
| Return square root of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPTan()&lt;br /&gt;
| Return tangent of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPTanh()&lt;br /&gt;
| Return hyperbolic tangent of FFP variable.&lt;br /&gt;
|-&lt;br /&gt;
| SPTieee()&lt;br /&gt;
| Convert FFP variable to IEEE format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Math Support Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| afp()&lt;br /&gt;
| Convert ASCII string into FFP equivalent.&lt;br /&gt;
|-&lt;br /&gt;
| fpa()&lt;br /&gt;
| Convert FFP variable into ASCII equivalent.&lt;br /&gt;
|-&lt;br /&gt;
| arnd()&lt;br /&gt;
| Round ASCII representation of FFP number.&lt;br /&gt;
|-&lt;br /&gt;
| dbf()&lt;br /&gt;
| Convert FFP dual-binary number to FFP equivalent.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ SP IEEE Basic Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPAbs()&lt;br /&gt;
| Take absolute value of IEEE single-precision variable&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPAdd()&lt;br /&gt;
| Add two IEEE single-precision variables&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPCeil()&lt;br /&gt;
| Compute least integer greater than or equal to variable&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPCmp()&lt;br /&gt;
| Compare two IEEE single-precision variables&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPDiv()&lt;br /&gt;
| Divide two IEEE single-precision variables&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPFix()&lt;br /&gt;
| Convert IEEE single-precision variable to integer&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPFloor()&lt;br /&gt;
| Compute largest integer less than or equal to variable&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPFlt()&lt;br /&gt;
| Convert integer variable to IEEE single-precision&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPMul()&lt;br /&gt;
| Multiply two IEEE single-precision variables&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPNeg()&lt;br /&gt;
| Take two&#039;s complement of IEEE single-precision variable&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPSub()&lt;br /&gt;
| Subtract two IEEE single-precision variables&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPTst()&lt;br /&gt;
| Test an IEEE single-precision variable against zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ SP IEEE Transcendental Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPACos()&lt;br /&gt;
| Return arccosine of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPASin()&lt;br /&gt;
| Return arcsine of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPAtan()&lt;br /&gt;
| Return arctangent of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPCos()&lt;br /&gt;
| Return cosine of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPCosh()&lt;br /&gt;
| Return hyperbolic cosine of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPExp()&lt;br /&gt;
| Return &#039;&#039;e&#039;&#039; to the IEEE variable power.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPLog()&lt;br /&gt;
| Return natural log (base &#039;&#039;e&#039;&#039; of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPLog10()&lt;br /&gt;
| Return log (base 10) of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPPow()&lt;br /&gt;
| Return power of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPSin()&lt;br /&gt;
| Return sine of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPSincos()&lt;br /&gt;
| Return sine and cosine of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPSinh()&lt;br /&gt;
| Return hyperbolic sine of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPSqrt()&lt;br /&gt;
| Return square root of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPTan()&lt;br /&gt;
| Return tangent of IEEE single-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEESPTanh()&lt;br /&gt;
| Return hyperbolic tangent of IEEE single-precision variable.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ DP IEEE Basic Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPAbs()&lt;br /&gt;
| Take absolute value of IEEE double-precision variable&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPAdd()&lt;br /&gt;
| Add two IEEE double-precision variables&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPCeil()&lt;br /&gt;
| Compute least integer greater than or equal to variable&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPCmp()&lt;br /&gt;
| Compare two IEEE double-precision variables&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPDiv()&lt;br /&gt;
| Divide two IEEE double-precision variables&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPFix()&lt;br /&gt;
| Convert IEEE double-precision variable to integer&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPFloor()&lt;br /&gt;
| Compute largest integer less than or equal to variable&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPFlt()&lt;br /&gt;
| Convert integer variable to IEEE double-precision&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPMul()&lt;br /&gt;
| Multiply two IEEE double-precision variables&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPNeg()&lt;br /&gt;
| Take two&#039;s complement of IEEE double-precision variable&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPSub()&lt;br /&gt;
| Subtract two IEEE single-precision variables&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPTst()&lt;br /&gt;
| Test an IEEE double-precision variable against zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ DP IEEE Transcendental Functions&lt;br /&gt;
! Function&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPACos()&lt;br /&gt;
| Return arccosine of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPASin()&lt;br /&gt;
| Return arcsine of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPAtan()&lt;br /&gt;
| Return arctangent of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPCos()&lt;br /&gt;
| Return cosine of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPCosh()&lt;br /&gt;
| Return hyperbolic cosine of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPExp()&lt;br /&gt;
| Return &#039;&#039;e&#039;&#039; to the IEEE variable power.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPFieee()&lt;br /&gt;
| Convert IEEE single-precision number to IEEE double-precision number.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPLog()&lt;br /&gt;
| Return natural log (base &#039;&#039;e&#039;&#039; of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPLog10()&lt;br /&gt;
| Return log (base 10) of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPPow()&lt;br /&gt;
| Return power of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPSin()&lt;br /&gt;
| Return sine of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPSincos()&lt;br /&gt;
| Return sine and cosine of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPSinh()&lt;br /&gt;
| Return hyperbolic sine of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPSqrt()&lt;br /&gt;
| Return square root of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPTan()&lt;br /&gt;
| Return tangent of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPTanh()&lt;br /&gt;
| Return hyperbolic tangent of IEEE double-precision variable.&lt;br /&gt;
|-&lt;br /&gt;
| IEEEDPTieee()&lt;br /&gt;
| Convert IEEE double-precision number to IEEE single-precision number.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Workbench_ARexx_Port&amp;diff=12360</id>
		<title>Workbench ARexx Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Workbench_ARexx_Port&amp;diff=12360"/>
		<updated>2023-07-08T16:39:33Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* ARexx Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ARexx Interface =&lt;br /&gt;
&lt;br /&gt;
Workbench acts as an ARexx host under the name of &#039;&#039;&#039;WORKBENCH&#039;&#039;&#039;. It supports a number of commands as will be described below. Note that for the ARexx interface to work, rexxsyslib.library must be installed (this library is part of a regular Workbench installation) and the [[AmigaOS_Manual:_System_Tools#RexxMast|RexxMast]] program must have been started.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Command &lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Description&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#ACTIVATEWINDOW_command|ACTIVATEWINDOW]] WINDOW || This command will attempt to make a window the active one.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#CHANGEWINDOW_command|CHANGEWINDOW]] WINDOW,LEFTEDGE/N,TOPEDGE/N,WIDTH/N,HEIGHT/N || This command will attempt to change the size and the position of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#DELETE_command|DELETE]] NAME/A,ALL/S || This command is for deleting files and drawers (and their contents).&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#FAULT_command|FAULT]] CODE/A/N || This command will return a human readable explanation corresponding to an error code.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#GETATTR_command|GETATTR]] OBJECT/A,NAME/K,STEM/K,VAR/K || This command will retrieve information from the Workbench database, such the names of the drawers currently open and the icons currently selected.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#HELP_command|HELP]] COMMAND/K,MENUS/S,PROMPT/S || This command can be used to open the online help and to obtain information on the supported menus, commands and command parameters.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#ICON_command|ICON]] WINDOW,NAMES/M,OPEN/S,MAKEVISIBLE/S,SELECT/S,UNSELECT/S, UP/N,DOWN/N,LEFT/N,RIGHT/N,X/N,Y/N,ACTIVATE/K,CYCLE/K, MOVE/K || This command is for manipulating the icons displayed in a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#INFO_command|INFO]] NAME/A || This command is for opening the Workbench icon information requester.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#KEYBOARD_command|KEYBOARD]] NAME/A,ADD/S,REMOVE/S,KEY,CMD/F || This command can be used to bind ARexx commands to key combinations.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#LOCKGUI_command|LOCKGUI]] || This command will block access to all Workbench drawer windows.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#MENU_command|MENU]] WINDOW/K,INVOKE,NAME/K,TITLE/K,SHORTCUT/K,ADD/S,REMOVE/S,CMD/K/F || This command is for invoking items of the Workbench menu, as if the user had selected them with the mouse and for adding/removing user menus.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#MOVEWINDOW_command|MOVEWINDOW]] WINDOW,LEFTEDGE/N,TOPEDGE/N || This command will attempt to change the position of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#NEWDRAWER_command|NEWDRAWER]] NAME/A || This command is for creating new drawers.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#RENAME_command|RENAME]] OLDNAME/A,NEWNAME/A || This command is for renaming files, drawers and volumes.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#RX_command|RX]] CONSOLE/S,ASYNC/S,CMD/A/F || This command is for executing ARexx scripts and commands.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#SIZEWINDOW_command|SIZEWINDOW]] WINDOW,WIDTH/N,HEIGHT/N || This command will attempt to change the size of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#UNLOCKGUI_command|UNLOCKGUI]] || This command will allow access to all Workbench drawer windows locked with the LOCKGUI command.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#UNZOOMWINDOW_command|UNZOOMWINDOW]] WINDOW || This command will attempt to return a window to its original position and dimensions.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#VIEW_command|VIEW]] WINDOW,PAGE/S,PIXEL/S,UP/S,DOWN/S,LEFT/S,RIGHT/S || This command will change the position of the viewable display area of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#WINDOW_command|WINDOW]] WINDOWS/M/A,OPEN/S,CLOSE/S,SNAPSHOT/S,ACTIVATE/S,MIN/S,MAX/S, FRONT/S,BACK/S,CYCLE/K || This command will change, open, close or snapshot windows.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#WINDOWTOBACK_command|WINDOWTOBACK]] WINDOW || This command will push a window into the background.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#WINDOWTOFRONT_command|WINDOWTOFRONT]] WINDOW || This command will bring a window to the foreground.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[#ZOOMWINDOW_command|ZOOMWINDOW]] WINDOW || This command will change a window to alternate position and dimensions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ACTIVATEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to make a window the active one.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: ACTIVATEWINDOW [WINDOW] &amp;lt;ROOT|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: ACTIVATEWINDOW WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to activate the Workbench root window (where volume icons and AppIcons live) or the fully qualified name of a drawer window to activate. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be activated. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window activated that is not the root window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Activate the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
ACTIVATEWINDOW root&lt;br /&gt;
&lt;br /&gt;
/* Activate the &amp;quot;Work:&amp;quot; partition&#039;s window. */&lt;br /&gt;
ACTIVATEWINDOW &#039;Work:&#039; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CHANGEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to change the size and the position of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: CHANGEWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [[LEFTEDGE] &amp;lt;new left edge position&amp;gt;][[TOPEDGE] &amp;lt;new top edge position&amp;gt;][[WIDTH] &amp;lt;new window width&amp;gt;][[HEIGHT] &amp;lt;new window height&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: CHANGEWINDOW WINDOW,LEFTEDGE/N,TOPEDGE/N,WIDTH/N,HEIGHT/N&lt;br /&gt;
&lt;br /&gt;
; Parameter:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to resize/move the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to change the currently active Workbench window or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: LEFTEDGE&lt;br /&gt;
:: New left edge window position.&lt;br /&gt;
&lt;br /&gt;
: TOPEDGE&lt;br /&gt;
:: New top edge window position.&lt;br /&gt;
: WIDTH&lt;br /&gt;
:: New window width.&lt;br /&gt;
: HEIGHT&lt;br /&gt;
:: New window height.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be changed; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window changed that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window; move it to position 10,30 and change its size to 200x100 pixels. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
CHANGEWINDOW root LEFTEDGE 10 TOPEDGE 30 WIDTH 200 HEIGHT 100&lt;br /&gt;
&lt;br /&gt;
/* Change the currently active window. */&lt;br /&gt;
CHANGEWINDOW active 20 40 200 100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DELETE command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for deleting files and drawers (and their contents).&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: DELETE [NAME] &amp;lt;File or drawer name&amp;gt; [ALL]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: DELETE NAME/A,ALL/S&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the file or drawer or volume to delete.&lt;br /&gt;
&lt;br /&gt;
: ALL&lt;br /&gt;
:: If the object in question is a drawer, attempt to delete the contents of the drawer as well as the drawer itself. If this option is not specified, the DELETE command will only attempt to delete the drawer itself, which may fail if the drawer is not yet empty.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named file, drawer or volume could not be found or could not be deleted.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: The file name given must be an absolute path, such as in &amp;quot;RAM:Empty&amp;quot;. A relative path, such as &amp;quot;/fred/barney&amp;quot; will not work.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Delete the contents of the drawer RAM:Empty&amp;quot;. */&lt;br /&gt;
&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
DELETE &#039;RAM:Empty&#039; ALL &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FAULT command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will return a human readable explanation corresponding to an error code.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: FAULT [CODE] &amp;lt;Error code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: FAULT CODE/A/N&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: CODE&lt;br /&gt;
:: Error code to return a human readable explanation for.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Query the error message corresponding to error code #205. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
OPTIONS RESULTS&lt;br /&gt;
FAULT 205&lt;br /&gt;
SAY result &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GETATTR command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will retrieve information from the Workbench database, such the names of the drawers currently open and the icons currently selected.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: GETATTR [OBJECT] &amp;lt;Object name&amp;gt; [NAME &amp;lt;Item name&amp;gt;][STEM &amp;lt;Name of stem variable&amp;gt;] [VAR &amp;lt;Variable name&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: GETATTR OBJECT/A,NAME/K,STEM/K,VAR/K&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: OBJECT&lt;br /&gt;
:: Name of the database entry to retrieve. For a list of valid entries see below.&lt;br /&gt;
&lt;br /&gt;
: NAME&lt;br /&gt;
:: For some datatabase entries further information is required to identify the data to retrieve. This is when you will need to provide a name.&lt;br /&gt;
&lt;br /&gt;
: STEM&lt;br /&gt;
:: If you request more than one database entry you will need to provide a variable to store the information in. For an example of its use, see below.&lt;br /&gt;
&lt;br /&gt;
: VAR&lt;br /&gt;
:: If you want the queried information to be stored in a specific variable (other than the RESULT variable), this is where you provide its name.&lt;br /&gt;
&lt;br /&gt;
; Attributes:&lt;br /&gt;
: You can obtain information on the following attributes:&lt;br /&gt;
: APPLICATION.VERSION&lt;br /&gt;
:: Version number of workbench.library.&lt;br /&gt;
&lt;br /&gt;
:APPLICATION.SCREEN&lt;br /&gt;
:: Name of the public screen Workbench uses.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.AREXX&lt;br /&gt;
:: Name of the Workbench ARexx port.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.LASTERROR&lt;br /&gt;
:: Number of the last error caused by the ARexx interface.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.ICONBORDER&lt;br /&gt;
:: Sizes of the icon borders, returned as four numbers separated by blank spaces, e.g. &amp;quot;6 26 12 6&amp;quot;. The four numbers represent the left border width, the top border height, the right border width and the bottom border height (in exactly that order).&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SCREEN.NAME&lt;br /&gt;
:: Name of the Workbench screen font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SCREEN.WIDTH APPLICATION.FONT.SCREEN.HEIGHT&lt;br /&gt;
:: Size of a single character of the Workbench screen font. Please note that since the font in question may be proportionally spaced the width information may be of little value. To measure the accurate pixel width of a text in reference to the font, use the .SIZE attribute.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SCREEN.SIZE&lt;br /&gt;
:: Size of a text, measured in pixels, in reference to the screen font. The text to measure must be provided with the NAME parameter of the GETATTR command.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.ICON.NAME&lt;br /&gt;
:: Name of the Workbench icon font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.ICON.WIDTH APPLICATION.FONT.ICON.HEIGHT&lt;br /&gt;
:: Size of a single character of the Workbench icon font. Please note that since the font in question may be proportionally spaced the width information may be of little value. To measure the accurate pixel width of a text in reference to the font, use the .SIZE attribute.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.ICON.SIZE&lt;br /&gt;
:: Size of a text, measured in pixels, in reference to the icon font. The text to measure must be provided with the NAME parameter of the GETATTR command.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.NAME&lt;br /&gt;
:: Name of the system font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.WIDTH&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.HEIGHT&lt;br /&gt;
:: Size of a single character of the system font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.SIZE&lt;br /&gt;
:: Size of a text, measured in pixels, in reference to the system font. The text to measure must be provided with the NAME parameter of the GETATTR command.&lt;br /&gt;
&lt;br /&gt;
: WINDOWS.COUNT&lt;br /&gt;
:: Number of the drawer windows currently open. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOWS.0 .. WINDOWS.N&lt;br /&gt;
:: Names of the windows currently open.&lt;br /&gt;
&lt;br /&gt;
: WINDOWS.ACTIVE&lt;br /&gt;
:: Name of the currently active Workbench window; this will be &#039; &#039; if none of Workbench&#039;s windows is currently active.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.COUNT&lt;br /&gt;
:: Number of keyboard commands assigned. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.0 .. KEYCOMMANDS.N&lt;br /&gt;
:: Information on all the keyboard commands assigned.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the keyboard command.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.&amp;lt;n&amp;gt;.KEY&lt;br /&gt;
:: The key combination assigned to this keyboard command.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.&amp;lt;n&amp;gt;.COMMAND&lt;br /&gt;
:: The ARexx command assigned to this key combination.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.COUNT&lt;br /&gt;
:: Number of menu commands assigned (through the &amp;quot;MENU ADD ..&amp;quot; command). This can be 0.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.0 .. MENUCOMMANDS.N&lt;br /&gt;
:: Information on all the menu commands assigned.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of this menu item.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.TITLE&lt;br /&gt;
:: Title of this menu item.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.SHORTCUT&lt;br /&gt;
:: The keyboard shortcut assigned to this menu item.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.COMMAND&lt;br /&gt;
:: The ARexx command assigned to this menu item.&lt;br /&gt;
&lt;br /&gt;
: The following attributes require the name of the window to obtain information.&lt;br /&gt;
: WINDOW.LEFT&lt;br /&gt;
:: Left edge of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.TOP&lt;br /&gt;
:: Top edge of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.WIDTH&lt;br /&gt;
:: Width of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.HEIGHT&lt;br /&gt;
:: Height of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MIN.WIDTH&lt;br /&gt;
:: Minimum width of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MIN.HEIGHT&lt;br /&gt;
:: Minimum height of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MAX.WIDTH&lt;br /&gt;
:: Maximum width of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MAX.HEIGHT&lt;br /&gt;
:: Maximum height of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEW.LEFT&lt;br /&gt;
:: Horizontal offset of the drawer contents; this value corresponds to the horizontal window scroller position.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEW.TOP&lt;br /&gt;
:: Vertical offset of the drawer contents; this value corresponds to the vertical window scroller position.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SCREEN.NAME&lt;br /&gt;
:: Name of the public screen the window was opened on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SCREEN.WIDTH WINDOW.SCREEN.HEIGHT&lt;br /&gt;
:: Size of the public screen the window was opened on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.COUNT&lt;br /&gt;
:: Number of the icons displayed in the window. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.0 .. WINDOW.ICONS.ALL.N&lt;br /&gt;
:: Information on all the icons displayed in the window:&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.LEFT WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.TOP&lt;br /&gt;
:: Position of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.WIDTH WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.HEIGHT&lt;br /&gt;
:: Size of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.TYPE&lt;br /&gt;
:: Type of the icon; one of DISK, DRAWER, TOOL, PROJECT,GARBAGE, DEVICE, KICK or APPICON.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.STATUS&lt;br /&gt;
:: Whether the icon is selected and (if the icon is a drawer-like object, such as a disk, drawer or trashcan icon) whether the corresponding drawer is currently open or closed. This attribute is returned in the form of a string, such as &amp;quot;SELECTED OPEN&amp;quot; which means that the icon is selected and the corresponding drawer is currently open. The other options include &amp;quot;UNSELECTED&amp;quot; and &amp;quot;CLOSED&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.COUNT&lt;br /&gt;
:: Number of the selected icons displayed in the window. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.0 .. WINDOW.ICONS.SELECTED.N&lt;br /&gt;
:: Information on all selected the icons in the window:&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.LEFT WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.TOP&lt;br /&gt;
:: Position of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.WIDTH WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.HEIGHT&lt;br /&gt;
:: Size of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.TYPE&lt;br /&gt;
:: Type of the icon; one of DISK, DRAWER, TOOL, PROJECT,GARBAGE, DEVICE, KICK or APPICON.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.STATUS&lt;br /&gt;
:: Whether the icon is selected and (if the icon is a drawer-like object, such as a disk, drawer or trashcan icon) whether the corresponding drawer is currently open or closed. This attribute is returned in the form of a string, such as &amp;quot;SELECTED OPEN&amp;quot; which means that the icon is selected and the corresponding drawer is currently open. The other options include &amp;quot;UNSELECTED&amp;quot; and CLOSED&amp;quot;. Of course, for the WINDOW.ICONS.SELECTED stem the icon status will always be reported as &amp;quot;SELECTED&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.COUNT&lt;br /&gt;
:: Number of the unselected icons displayed in the window. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.0 .. WINDOW.ICONS.UNSELECTED.N&lt;br /&gt;
:: Information on all selected the icons in the window:&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.LEFT WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.TOP&lt;br /&gt;
:: Position of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.WIDTH WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.HEIGHT&lt;br /&gt;
:: Size of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.TYPE&lt;br /&gt;
:: Type of the icon; one of DISK, DRAWER, TOOL, PROJECT, GARBAGE, DEVICE, KICK or APPICON.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.STATUS&lt;br /&gt;
:: Whether the icon is selected and (if the icon is a drawer-like object, such as a disk, drawer or trashcan icon) whether the corresponding drawer is currently open or closed. This attribute is returned in the form of a string, such as &amp;quot;UNSELECTED OPEN&amp;quot; which means that the icon is selected and the corresponding drawer is currently open. The other options include &amp;quot;SELECTED&amp;quot; and CLOSED&amp;quot;. Of course, for the WINDOW.ICONS.UNSELECTED stem the icon status will always be reported as &amp;quot;UNSELECTED&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the requester information could not be retrieved, you requested more than one database entry and did not provide a stem variable or if you provided a stem variable but did not request more than one database entry. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: RESULT - The information retrieved from the database.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Query the Workbench version. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
OPTIONS RESULTS&lt;br /&gt;
&lt;br /&gt;
GETATTR application.version&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Query the Workbench version and store it in the * variable &#039;version_number&#039;. */&lt;br /&gt;
GETATTR application.version&lt;br /&gt;
VAR version_number&lt;br /&gt;
SAY version_number&lt;br /&gt;
&lt;br /&gt;
/* Query the names of all currently open windows, * then print them. */&lt;br /&gt;
GETATTR windows&lt;br /&gt;
STEM window_list&lt;br /&gt;
&lt;br /&gt;
DO i = 0 TO ( window_list.count - 1 )&lt;br /&gt;
   SAY window_list.i&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
/* Query name, position and size of the first icon * shown in the root window. */&lt;br /&gt;
GETATTR window.icons.all.0&lt;br /&gt;
NAME root&lt;br /&gt;
STEM root&lt;br /&gt;
&lt;br /&gt;
SAY root.name&lt;br /&gt;
SAY root.left&lt;br /&gt;
SAY root.top&lt;br /&gt;
SAY root.width&lt;br /&gt;
SAY root.height&lt;br /&gt;
SAY root.type&lt;br /&gt;
&lt;br /&gt;
/* Query the width and height of the root window. */&lt;br /&gt;
GETATTR window.width&lt;br /&gt;
NAME root&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
GETATTR window.height&lt;br /&gt;
NAME root&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Query the length of a text (in pixels) with reference * to the icon font. */&lt;br /&gt;
GETATTR application.font.icon.size&lt;br /&gt;
NAME &#039;Text to measure&#039;&lt;br /&gt;
SAY result &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HELP command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command can be used to open the online help and to obtain information on the supported menus, commands and command parameters.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: HELP [COMMAND &amp;lt;Command name&amp;gt;] [MENUS] [PROMPT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: HELP COMMAND/K,MENUS/S,PROMPT/S&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: COMMAND&lt;br /&gt;
:: Name of the command whose command template should be retrieved.&lt;br /&gt;
&lt;br /&gt;
: MENUS&lt;br /&gt;
:: Specify this parameter to retrieve a list of menu items currently available.&lt;br /&gt;
&lt;br /&gt;
: PROMPT&lt;br /&gt;
:: Specify this parameter to invoke the online help system.&lt;br /&gt;
&lt;br /&gt;
:: If no parameter is provided, a list of supported commands will be returned.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named command is not supported by the ARexx interface. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: RESULT&lt;br /&gt;
: The command template, list of menu items or commands, as specified in the command parameters.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Retrieve the list of supported commands. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
OPTIONS results&lt;br /&gt;
&lt;br /&gt;
HELP&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Retrieve the command template of the &#039;GETATTR&#039; command. */&lt;br /&gt;
HELP COMMAND getattr&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Retrieve the list of available menu items. */&lt;br /&gt;
HELP MENUS&lt;br /&gt;
SAY result &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICON command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for manipulating the icons displayed in a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: ICON [WINDOW] &amp;lt;Window name&amp;gt; &amp;lt;Icon name&amp;gt; .. &amp;lt;Icon name&amp;gt; [OPEN] [MAKEVISIBLE] [SELECT] [UNSELECT] [UP &amp;lt;Pixels&amp;gt;] [DOWN &amp;lt;Pixels&amp;gt;] [LEFT &amp;lt;Pixels&amp;gt;] [RIGHT &amp;lt;Pixels&amp;gt;] [X &amp;lt;Horizontal position&amp;gt;] [Y &amp;lt;Vertical position&amp;gt;] [ACTIVATE UP|DOWN|LEFT|RIGHT] [CYCLE PREVIOUS|NEXT] [MOVE IN|OUT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: ICON WINDOW,NAMES/M,OPEN/S,MAKEVISIBLE/S,SELECT/S,UNSELECT/S, UP/N,DOWN/N,LEFT/N,RIGHT/N,X/N,Y/N,ACTIVATE/K,CYCLE/K, MOVE/K&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window whose icons should be manipulated. This can be &amp;quot;ROOT&amp;quot; to work on the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to work on the currently active Workbench window or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: NAMES&lt;br /&gt;
:: Names of the icons to manipulate.&lt;br /&gt;
&lt;br /&gt;
: OPEN&lt;br /&gt;
:: Specifies that the named icons should be opened.&lt;br /&gt;
&lt;br /&gt;
: MAKEVISIBLE&lt;br /&gt;
:: Specifies that the named icons should be made visible. This generally works well for the first icon in a list but does not always work for a whole list.&lt;br /&gt;
&lt;br /&gt;
: SELECT&lt;br /&gt;
:: Select the named icons.&lt;br /&gt;
&lt;br /&gt;
: UNSELECT&lt;br /&gt;
:: Unselect the named icons.&lt;br /&gt;
&lt;br /&gt;
: UP, DOWN, LEFT, RIGHT&lt;br /&gt;
:: Move the named icons by the specified number of pixels.&lt;br /&gt;
&lt;br /&gt;
: X, Y&lt;br /&gt;
:: Move the named icons to the specified position.&lt;br /&gt;
&lt;br /&gt;
: ACTIVATE&lt;br /&gt;
:: This command is for activating the icon closest to the currently selected icon in the window. &amp;quot;Activating&amp;quot; in this context means selecting an icon, whilst at the same time unselecting all others. Thus, the &amp;quot;active&amp;quot; icon is the only selected icon in the window.&lt;br /&gt;
&lt;br /&gt;
:: You can indicate which direction the next icon to be activated should be searched for, relative to the currently active icon. &amp;quot;UP&amp;quot; searches upwards, &amp;quot;DOWN&amp;quot; searches downwards, &amp;quot;LEFT&amp;quot; searches to the left and &amp;quot;RIGHT&amp;quot; searches to the right.&lt;br /&gt;
&lt;br /&gt;
: CYCLE&lt;br /&gt;
:: This command is for cycling through all icons in a window, making each one the active one in turn (for a description of what &amp;quot;active&amp;quot; means in this context, see the &amp;quot;ACTIVATE&amp;quot; description above). You must indicate in which direction you want to cycle through the icons: you can either specify &amp;quot;PREVIOUS&amp;quot; or &amp;quot;NEXT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: MOVE&lt;br /&gt;
:: This command is not for moving icons but for moving through a file system hierarchy. Thus, moving &amp;quot;in&amp;quot; will open a drawer and moving &amp;quot;out&amp;quot; will open the drawer&#039;s parent directory. The &amp;quot;IN&amp;quot; parameter will cause the drawer represented by the active icon to be opened. Please note that an icon must be selected and it must be a drawer. The &amp;quot;OUT&amp;quot; parameter will open the drawer&#039;s parent directory, and it also requires that in the drawer there is an icon selected. This may sound strange, but this feature is not meant as a replacement for the &amp;quot;Open Parent&amp;quot; menu item.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found, none of the Workbench windows are currently active and the command was set to work on the currently active Workbench window. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Select the icons of the &amp;quot;Workbench&amp;quot; and &amp;quot;Work&amp;quot; volumes displayed in the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
ICON WINDOW root&lt;br /&gt;
NAMES Workbench Work SELECT&lt;br /&gt;
&lt;br /&gt;
/* Open the &amp;quot;Workbench&amp;quot; volume icon displayed in the root window. */&lt;br /&gt;
ICON WINDOW root&lt;br /&gt;
NAMES Workbench OPEN &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INFO command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for opening the Workbench icon information requester.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: INFO [NAME] &amp;lt;File, drawer or volume name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: INFO NAME/A&lt;br /&gt;
&lt;br /&gt;
; Parameters :&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the file, drawer or volume to open the information window for.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named file, drawer or volume could not be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Open the information window for SYS:&amp;quot;. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
INFO NAME &#039;SYS:&#039; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KEYBOARD command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command can be used to bind ARexx commands to key combinations.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: KEYBOARD [NAME] &amp;lt;Name of key combination&amp;gt; ADD|REMOVE [KEY &amp;lt;Key combination&amp;gt;] [CMD &amp;lt;ARexx command&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: KEYBOARD NAME/A,ADD/S,REMOVE/S,KEY,CMD/F&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the key combination to add or remove. Each key combination must have a name with which it is associated. The name must be unique.&lt;br /&gt;
&lt;br /&gt;
: ADD&lt;br /&gt;
:: This tells the KEYBOARD command to add a new keyboard combination. You will also need to specify the KEY and CMD parameters.&lt;br /&gt;
&lt;br /&gt;
: REMOVE&lt;br /&gt;
:: This tells the KEYBOARD command to remove an existing keyboard combination.&lt;br /&gt;
&lt;br /&gt;
: KEY&lt;br /&gt;
:: The keyboard combination to add; this must be in the same format as used by the Commodities programs.&lt;br /&gt;
&lt;br /&gt;
: CMD&lt;br /&gt;
:: This is the ARexx command to bind to the keyboard combination. The command can either be the name of an ARexx script to execute or a short ARexx program in a single line.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - The command will fail if you tried to add a duplicate of an existing key combination or if the key combination to remove does not exist. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Bind an ARexx script to the [Control]+A key combination.&lt;br /&gt;
 * When pressed, this will cause the ARexx script by the name &lt;br /&gt;
 * &amp;quot;test.wb&amp;quot; to be executed. ARexx will search for that program &lt;br /&gt;
 * in the &amp;quot;REXX:&amp;quot; directory. If no &amp;quot;test.wb&amp;quot; file can be found, ARexx will attempt to execute a script &lt;br /&gt;
 * by the name of &amp;quot;test.rexx&amp;quot;. */&lt;br /&gt;
&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
KEYBOARD ADD NAME test1 KEY ,&amp;quot;ctrl a&amp;quot;, CMD ,&#039;test&#039;&lt;br /&gt;
&lt;br /&gt;
/* Bind an ARexx script to the [Alt]+[F1] key combination. &lt;br /&gt;
 * When pressed, this will cause a short inline program to be &lt;br /&gt;
 * executed. */&lt;br /&gt;
KEYBOARD ADD NAME test2 KEY ,&amp;quot;alt f1&amp;quot;, CMD &amp;quot;say 42&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Bind an ARexx script to the [Shift]+[Help] key combination. &lt;br /&gt;
 * When pressed, this will cause the &amp;quot;Workbench About&amp;quot; menu item to be invoked. */&lt;br /&gt;
KEYBOARD ADD NAME test3 KEY ,&amp;quot;shift help&amp;quot;, CMD &amp;quot;MENU INVOKE WORKBENCH.ABOUT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Remove the first key combination we added above. */&lt;br /&gt;
KEYBOARD REMOVE NAME test1 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LOCKGUI command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will block access to all Workbench drawer windows.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: LOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: LOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: It takes as many UNLOCKGUI commands as there were LOCKGUI commands to make the Workbench drawer windows usable again. In other words, the LOCKGUI command &amp;quot;nests&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Block access to all Workbench drawer windows. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
LOCKGUI &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MENU command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for invoking items of the Workbench menu, as if the user had selected them with the mouse and for adding/removing user menus.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: MENU [WINDOW &amp;lt;Window name&amp;gt;] [INVOKE] &amp;lt;Menu name&amp;gt; [NAME &amp;lt;Menu name&amp;gt;] [TITLE &amp;lt;Menu title&amp;gt;] [SHORTCUT &amp;lt;Menu shortcut&amp;gt;] [ADD|REMOVE] [CMD &amp;lt;ARexx command&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: MENU WINDOW/K,INVOKE,NAME/K,TITLE/K,SHORTCUT/K,ADD/S,REMOVE/S,CMD/K/F&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: The following set of parameters can be used solely for invoking menu items.&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window whose menu should be invoked. This can be &amp;quot;ROOT&amp;quot; to work on the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to work on the currently active Workbench window or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: INVOKE&lt;br /&gt;
:: Name of the menu to invoke. See below for a list of available menu items.&lt;br /&gt;
&lt;br /&gt;
: The following set of parameters are for adding and removing menu items.&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the menu item to add or remove. Each menu item must have a name with which it is associated. The name must be unique and has nothing to do with the title of the item, as shown in the &amp;quot;Tools&amp;quot; menu.&lt;br /&gt;
&lt;br /&gt;
: TITLE&lt;br /&gt;
:: This is the text that will be used as the menu item title, as it will appear in the &amp;quot;Tools&amp;quot; menu. This parameter is required if you ADD a new menu item.&lt;br /&gt;
&lt;br /&gt;
: SHORTCUT&lt;br /&gt;
:: When adding a new menu item, this will be the menu shortcut associated with the item. Please note that the shortcut cannot be longer than a single character and that it will be ignored if there already is an item in any of the menus which uses this shortcut. This parameter is optional.&lt;br /&gt;
&lt;br /&gt;
: ADD&lt;br /&gt;
:: This tells the MENU command to add a new item to the &amp;quot;Tools&amp;quot; menu. When adding a menu item you will also need to specify the NAME, TITLE and CMD parameters.&lt;br /&gt;
&lt;br /&gt;
: REMOVE&lt;br /&gt;
:: This tells the MENU command to remove a menu item previously added via the ARexx interface. When removing a menu item you will also need to specify the NAME parameter.&lt;br /&gt;
&lt;br /&gt;
: CMD&lt;br /&gt;
:: This is the ARexx command to bind to the new menu item. The command can either be the name of an ARexx script to execute or a short ARexx program in a single line.&lt;br /&gt;
&lt;br /&gt;
: Menu items:&lt;br /&gt;
: WORKBENCH.BACKDROP&lt;br /&gt;
:: Toggles the Workbench &amp;quot;Backdrop&amp;quot; window switch.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.EXECUTE&lt;br /&gt;
:: Invokes the Workbench &amp;quot;Execute Command&amp;quot; requester. The user will be prompted to enter the command to be executed.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.REDRAWALL&lt;br /&gt;
:: Invokes the Workbench &amp;quot;Redraw All&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.UPDATEALL&lt;br /&gt;
:: Invokes the Workbench &amp;quot;Update All&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.LASTMESSAGE&lt;br /&gt;
:: Redisplays the last Workbench error message.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.ABOUT&lt;br /&gt;
:: Displays the &amp;quot;Workbench About...&amp;quot; requester.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.QUIT&lt;br /&gt;
:: Attempts to close Workbench; this may bring up a requester the user will have to answer.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.NEWDRAWER&lt;br /&gt;
:: Prompts the user to enter the name of a new drawer to be created.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.OPENPARENT&lt;br /&gt;
:: If possible, this will open the parent directory of the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLOSE&lt;br /&gt;
:: If possible, this will close the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.UPDATE&lt;br /&gt;
:: This will update the drawer the command operates on, i.e. the contents will be reread.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SELECTCONTENTS&lt;br /&gt;
:: This will select the contents of the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEARSELECTION&lt;br /&gt;
:: This unselects all icons selected in the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.COLUMN&lt;br /&gt;
:: This will sort the contents of the drawer and place the icons in columns.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.NAME&lt;br /&gt;
:: This will sort the contents of the drawer by name and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.DATE&lt;br /&gt;
:: This will sort the contents of the drawer by date and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.SIZE&lt;br /&gt;
:: This will sort the contents of the drawer by size and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.TYPE&lt;br /&gt;
:: This will sort the contents of the drawer by type and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.RESIZETOFIT&lt;br /&gt;
:: This will resize the drawer window, trying to make it just as large as to allow all its icons to fit.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SNAPSHOT.WINDOW&lt;br /&gt;
:: This will snapshot the drawer window, but none of its contents.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SNAPSHOT.ALL&lt;br /&gt;
:: This will snapshot the drawer window and its contents.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SHOW.ONLYICONS&lt;br /&gt;
:: This will change the display mode of the drawer to show only files and drawers which have icons attached.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SHOW.ALLFILES&lt;br /&gt;
:: This will change the display mode of the drawer to show all files and drawers, regardless of whether they have icons attached or not.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.ICON&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents as icons.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.NAME&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by name.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.DATE&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by date.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.SIZE&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by size.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.TYPE&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by type.&lt;br /&gt;
&lt;br /&gt;
: ICONS.OPEN&lt;br /&gt;
:: This will open the currently selected icons. Workbench may bring up a requester in case project icons are found which lack a default tool.&lt;br /&gt;
&lt;br /&gt;
: ICONS.COPY&lt;br /&gt;
:: This will duplicate the currently selected icons.&lt;br /&gt;
&lt;br /&gt;
: ICONS.RENAME&lt;br /&gt;
:: This will prompt the user to choose a new name for each currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.INFORMATION&lt;br /&gt;
:: This will open the information window for every currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.SNAPSHOT&lt;br /&gt;
:: This will lock the position of every currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.UNSNAPSHOT&lt;br /&gt;
:: This will unlock the position of every currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.LEAVEOUT&lt;br /&gt;
:: This will permanently put all currently selected icons on the Workbench root window.&lt;br /&gt;
&lt;br /&gt;
: ICONS.PUTAWAY&lt;br /&gt;
:: This will move all currently selected icons out of the root window and put them back into the drawers they belong.&lt;br /&gt;
&lt;br /&gt;
: ICONS.DELETE&lt;br /&gt;
:: This will cause all currently selected files to be deleted, provided the user confirms this action first.&lt;br /&gt;
&lt;br /&gt;
: ICONS.FORMATDISK&lt;br /&gt;
:: This will invoke the &amp;quot;Format&amp;quot; command on every currently selected disk icon. This will not format the disks immediately. The user will have to confirm this action first.&lt;br /&gt;
&lt;br /&gt;
: ICONS.EMPTYTRASH&lt;br /&gt;
:: With a trashcan icon selected, this will empty it.&lt;br /&gt;
&lt;br /&gt;
: TOOLS.RESETWB&lt;br /&gt;
:: This will close and reopen all Workbench windows.&lt;br /&gt;
&lt;br /&gt;
: The HELP command will provide a complete list of menu items that can be invoked. Depending on the state of each menu item (e.g. the &amp;quot;Open&amp;quot; menu item will be disabled if no icon is currently selected) the MENU command can silently fail to invoke the item you had in mind.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found, none of the Workbench windows is currently active and the command was set to work on the currently active Workbench window. The command can also fail if you tried to add a duplicate of an existing menu item or if the menu item to remove does not exist. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Invoke the &amp;quot;About&amp;quot; menu. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
MENU WINDOW root INVOKE WORKBENCH.ABOUT&lt;br /&gt;
&lt;br /&gt;
/* Add an item to the &amp;quot;Tools&amp;quot; menu; selecting it&lt;br /&gt;
 * will cause the ARexx script by the name &amp;quot;test.wb&amp;quot;&lt;br /&gt;
 * to be executed. ARexx will search for that program&lt;br /&gt;
 * in the &amp;quot;REXX:&amp;quot; directory. If no &amp;quot;test.wb&amp;quot; file can&lt;br /&gt;
 * be found, ARexx will attempt to execute a script&lt;br /&gt;
 * by the name of &amp;quot;test.rexx&amp;quot;. */&lt;br /&gt;
MENU ADD NAME test1 TITLE ,&amp;quot;Execute a script&amp;quot;, SHORTCUT ,&#039;!&#039; CMD ,&#039;test&#039;&lt;br /&gt;
&lt;br /&gt;
/* Add an item to the &amp;quot;Tools&amp;quot; menu; selecting it&lt;br /&gt;
 * will cause a short inline program to be executed. */&lt;br /&gt;
MENU ADD NAME test2 TITLE ,&amp;quot;Short inline program&amp;quot;, CMD &amp;quot;say 42&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Add an item to the &amp;quot;Tools&amp;quot; menu; selecting it&lt;br /&gt;
 * will cause the Workbench &amp;quot;About&amp;quot; menu item to be invoked. */&lt;br /&gt;
MENU ADD NAME test3 TITLE ,&amp;quot;About...&amp;quot;, CMD &amp;quot;MENU INVOKE WORKBENCH.ABOUT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Remove the first menu item we added above. */&lt;br /&gt;
MENU REMOVE NAME test1 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MOVEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to change the position of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: MOVEWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [[LEFTEDGE] &amp;lt;new left edge position&amp;gt;] [[TOPEDGE] &amp;lt;new top edge position&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: MOVEWINDOW WINDOW,LEFTEDGE/N,TOPEDGE/N&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to move the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to move the currently active Workbench window or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: LEFTEDGE&lt;br /&gt;
:: New left edge window position.&lt;br /&gt;
&lt;br /&gt;
: TOPEDGE&lt;br /&gt;
:: New top edge window position.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be moved; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window changed that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Move the root window to position 10,30. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
MOVEWINDOW root LEFTEDGE 10 TOPEDGE 30&lt;br /&gt;
&lt;br /&gt;
/* Move the currently active window. */&lt;br /&gt;
MOVEWINDOW active 20 40 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEWDRAWER command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for creating new drawers.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: NEWDRAWER [NAME] &amp;lt;Name of drawer to create&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: NEWDRAWER NAME/A&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the drawer to be created.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named drawer could not be created.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: The drawer name given must be an absolute path, such as in &amp;quot;RAM:Empty&amp;quot;. A relative path, such as &amp;quot;/fred/barney&amp;quot; will not work.&lt;br /&gt;
&lt;br /&gt;
; Example :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Create a drawer by the name of &amp;quot;Empty&amp;quot; in the RAM disk. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
NEWDRAWER &#039;RAM:Empty&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RENAME command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for renaming files, drawers and volumes.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: RENAME [OLDNAME] &amp;lt;Name of file/drawer/volume to rename&amp;gt; [NEWNAME] &amp;lt;New name of the file/drawer/volume&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: RENAME OLDNAME/A,NEWNAME/A&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: OLDNAME&lt;br /&gt;
:: Name of the file/drawer/volume to be renamed. This must be an absolute path, such as in &amp;quot;RAM:Empty&amp;quot;. A relative path, such as &amp;quot;/fred/barney&amp;quot;, will not work.&lt;br /&gt;
&lt;br /&gt;
: NEWNAME&lt;br /&gt;
:: The new name to assign to the file/drawer/volume. This must not be an absolute or relative path. For example, &amp;quot;wilma&amp;quot; is valid new name, &amp;quot;/wilma&amp;quot; or &amp;quot;wilma:&amp;quot; would be invalid names.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the object cannot be renamed.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: The RENAME command does not work like for example the AmigaDOS &amp;quot;Rename&amp;quot; command. For example, RENAME &#039;ram:empty&#039; ,&#039;newname&#039; will rename the file &#039;RAM:empty&#039; to &#039;RAM:newname&#039;.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Rename a drawer by the name of &amp;quot;Old&amp;quot; in the RAM disk to &amp;quot;New&amp;quot;. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
RENAME &#039;RAM:Old&#039; &#039;New&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RX command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for executing ARexx scripts and commands.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: RX [CONSOLE] [ASYNC] [CMD] &amp;lt;Command to execute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: RX CONSOLE/S,ASYNC/S,CMD/A/F&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: CONSOLE&lt;br /&gt;
:: This switch indicates that a console (for default I/O) is needed.&lt;br /&gt;
&lt;br /&gt;
: ASYNC&lt;br /&gt;
:: This switch indicates that the command should be run asynchronously, i.e. the &amp;quot;RX&amp;quot; command will return as soon as ARexx has been instructed to run the command you specified. Otherwise, the &amp;quot;RX&amp;quot; command will wait for the specified ARexx command to complete execution.&lt;br /&gt;
&lt;br /&gt;
: COMMAND&lt;br /&gt;
:: This is the name of the ARexx program to execute.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the given ARexx program could not be executed.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Execute an ARexx program by the name of &#039;test.wb&#039;;&lt;br /&gt;
 * its output should be sent to a console window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
RX CONSOLE CMD &#039;test.wb&#039; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SIZEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to change the size of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: SIZEWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [[WIDTH] &amp;lt;new window width&amp;gt;] [[HEIGHT] &amp;lt;new window height&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: SIZEWINDOW WINDOW,WIDTH/N,HEIGHT/N&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to resize the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to resize the currently active Workbench window or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: WIDTH&lt;br /&gt;
:: New window width.&lt;br /&gt;
&lt;br /&gt;
: HEIGHT&lt;br /&gt;
:: New window height.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be resized; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window resized that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window size to 200x100 pixels. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
SIZEWINDOW root 30 WIDTH 200 HEIGHT 100&lt;br /&gt;
&lt;br /&gt;
/* Resize the currently active window. */&lt;br /&gt;
SIZEWINDOW active 200 100 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UNLOCKGUI command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will allow access to all Workbench drawer windows locked with the LOCKGUI command.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: UNLOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: UNLOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: It takes as many UNLOCKGUI commands as there were LOCKGUI commands to make the Workbench drawer windows usable again. In other words, the LOCKGUI command &amp;quot;nests&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Reallow access to all Workbench drawer windows. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
UNLOCKGUI&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UNZOOMWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to return a window to its original position and dimensions.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: UNZOOMWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: UNZOOMWINDOW WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window to operate on. &amp;quot;ROOT&amp;quot; will use the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; will use the currently active Workbench window. Any other fully qualified path name will use the drawer window corresponding to the path.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
UNZOOMWINDOW root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VIEW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will change the position of the viewable display area of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: VIEW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [PAGE|PIXEL] [UP|DOWN|LEFT|RIGHT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: VIEW WINDOW,PAGE/S,PIXEL/S,UP/S,DOWN/S,LEFT/S,RIGHT/S&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to change the Workbench root window view (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to change the currently active Workbench window view or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: UP&lt;br /&gt;
:: Moves the view up by about 1/8 of the window height. If PAGE is specified, moves the view up by a whole page. If PIXEL is specified, moves the view up by a single pixel.&lt;br /&gt;
&lt;br /&gt;
: DOWN&lt;br /&gt;
:: Moves the view down by about 1/8 of the window height. If PAGE is specified, moves the view down by a whole page. If PIXEL is specified, moves the view down by a single pixel.&lt;br /&gt;
&lt;br /&gt;
: LEFT&lt;br /&gt;
:: Moves the view left by about 1/8 of the window width. If PAGE is specified, moves the view left by a whole page. If PIXEL is specified, moves the view left by a single pixel.&lt;br /&gt;
&lt;br /&gt;
: RIGHT&lt;br /&gt;
:: Moves the view right by about 1/8 of the window width. If PAGE is specified, moves the view right by a whole page. If PIXEL is specified, moves the view right by a single pixel.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window view cannot be changed; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window view changed that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
: To find out about a window&#039;s current view position, use the GETATTR command and query the window&#039;s WINDOW.VIEW.LEFT and WINDOW.VIEW.TOP attributes.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window view; move it up by a whole page. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
VIEW root PAGE UP &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will change, open, close or snapshot windows.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: WINDOW [WINDOWS] &amp;lt;Window name&amp;gt; .. &amp;lt;Window name&amp;gt; [OPEN|CLOSE] [SNAPSHOT] [ACTIVATE] [MIN|MAX] [FRONT|BACK] [CYCLE PREVIOUS|NEXT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: WINDOW WINDOWS/M/A,OPEN/S,CLOSE/S,SNAPSHOT/S,ACTIVATE/S,MIN/S,MAX/S, FRONT/S,BACK/S,CYCLE/K&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOWS&lt;br /&gt;
:: Names of the windows to operate on. This can be &amp;quot;ROOT&amp;quot; for the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; for the currently active Workbench window or the fully qualified name of a drawer window.&lt;br /&gt;
&lt;br /&gt;
: OPEN&lt;br /&gt;
:: Attempt to open the specified windows.&lt;br /&gt;
&lt;br /&gt;
: CLOSE&lt;br /&gt;
:: Close the specified windows. Note that if a window is closed no further operations (such as SNAPSHOT, ACTIVATE, etc.) can be performed on it.&lt;br /&gt;
&lt;br /&gt;
: SNAPSHOT&lt;br /&gt;
:: Snapshot the sizes and positions of the specified windows.&lt;br /&gt;
&lt;br /&gt;
: ACTIVATE&lt;br /&gt;
:: Activate the specified windows. With multiple windows to activate, only one window will wind up as the active one. Commonly, this will be the last window in the list.&lt;br /&gt;
&lt;br /&gt;
: MIN&lt;br /&gt;
:: Resize the windows to their minimum dimensions.&lt;br /&gt;
&lt;br /&gt;
: MAX&lt;br /&gt;
:: Resize the windows to their maximum dimensions.&lt;br /&gt;
&lt;br /&gt;
: FRONT&lt;br /&gt;
:: Move the windows into the foreground.&lt;br /&gt;
&lt;br /&gt;
: BACK&lt;br /&gt;
:: Move the windows into the background.&lt;br /&gt;
&lt;br /&gt;
: CYCLE&lt;br /&gt;
:: This command operates on the currently active drawer window. You can specify either &amp;quot;PREVIOUS&amp;quot;, to activate the previous drawer window in the list, or &amp;quot;NEXT&amp;quot;, to activate the next following drawer window in the list.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named windows cannot be opened or operated on; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as a window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window operated on that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Open the &amp;quot;Work:&amp;quot; drawer. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
WINDOW &#039;Work:&#039; OPEN&lt;br /&gt;
&lt;br /&gt;
/* Activate the root window. */&lt;br /&gt;
WINDOW root ACTIVATE &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WINDOWTOBACK command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will push a window into the background.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: WINDOWTOBACK [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: WINDOWTOBACK WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: &amp;quot;ROOT&amp;quot; to push the the Workbench root window (where volume icons and AppIcons live) into to the background, &amp;quot;ACTIVE&amp;quot; to push the currently active Workbench window into the background or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window pushed into the background that is not the root window or the currently active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Push the root window into the background. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
WINDOWTOBACK root &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WINDOWTOFRONT command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will bring a window to the foreground.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: WINDOWTOFRONT [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: WINDOWTOFRONT WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: &amp;quot;ROOT&amp;quot; to bring the the Workbench root window (where volume icons and AppIcons live) to the foreground, &amp;quot;ACTIVE&amp;quot; to bring the currently active Workbench window to the foreground or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window brought to the foreground that is not the root window or the currently active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Bring the root window to the foreground. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
WINDOWTOFRONT root &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZOOMWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will change a window to alternate position and dimensions.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: ZOOMWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: ZOOMWINDOW WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window to operate on. &amp;quot;ROOT&amp;quot; will use the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; will use the currently active Workbench window. Any other fully qualified path name will use the drawer window corresponding to the path.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
ZOOMWINDOW root &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Workbench_ARexx_Port&amp;diff=12359</id>
		<title>Workbench ARexx Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Workbench_ARexx_Port&amp;diff=12359"/>
		<updated>2023-07-08T16:38:46Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* ARexx Interface */ Fixed internal links in top table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ARexx Interface =&lt;br /&gt;
&lt;br /&gt;
Workbench acts as an ARexx host under the name of &#039;&#039;&#039;WORKBENCH&#039;&#039;&#039;. It supports a number of commands as will be described below. Note that for the ARexx interface to work, rexxsyslib.library must be installed (this library is part of a regular Workbench installation) and the [[AmigaOS_Manual:_System_Tools#RexxMast|RexxMast]] program must have been started.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Command &lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Description&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[ACTIVATEWINDOW_command|ACTIVATEWINDOW]] WINDOW || This command will attempt to make a window the active one.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[CHANGEWINDOW_command|CHANGEWINDOW]] WINDOW,LEFTEDGE/N,TOPEDGE/N,WIDTH/N,HEIGHT/N || This command will attempt to change the size and the position of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[DELETE_command|DELETE]] NAME/A,ALL/S || This command is for deleting files and drawers (and their contents).&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[FAULT_command|FAULT]] CODE/A/N || This command will return a human readable explanation corresponding to an error code.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[GETATTR_command|GETATTR]] OBJECT/A,NAME/K,STEM/K,VAR/K || This command will retrieve information from the Workbench database, such the names of the drawers currently open and the icons currently selected.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[HELP_command|HELP]] COMMAND/K,MENUS/S,PROMPT/S || This command can be used to open the online help and to obtain information on the supported menus, commands and command parameters.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[ICON_command|ICON]] WINDOW,NAMES/M,OPEN/S,MAKEVISIBLE/S,SELECT/S,UNSELECT/S, UP/N,DOWN/N,LEFT/N,RIGHT/N,X/N,Y/N,ACTIVATE/K,CYCLE/K, MOVE/K || This command is for manipulating the icons displayed in a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[INFO_command|INFO]] NAME/A || This command is for opening the Workbench icon information requester.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[KEYBOARD_command|KEYBOARD]] NAME/A,ADD/S,REMOVE/S,KEY,CMD/F || This command can be used to bind ARexx commands to key combinations.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[LOCKGUI_command|LOCKGUI]] || This command will block access to all Workbench drawer windows.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[MENU_command|MENU]] WINDOW/K,INVOKE,NAME/K,TITLE/K,SHORTCUT/K,ADD/S,REMOVE/S,CMD/K/F || This command is for invoking items of the Workbench menu, as if the user had selected them with the mouse and for adding/removing user menus.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[MOVEWINDOW_command|MOVEWINDOW]] WINDOW,LEFTEDGE/N,TOPEDGE/N || This command will attempt to change the position of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[NEWDRAWER_command|NEWDRAWER]] NAME/A || This command is for creating new drawers.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[RENAME_command|RENAME]] OLDNAME/A,NEWNAME/A || This command is for renaming files, drawers and volumes.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[RX_command|RX]] CONSOLE/S,ASYNC/S,CMD/A/F || This command is for executing ARexx scripts and commands.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[SIZEWINDOW_command|SIZEWINDOW]] WINDOW,WIDTH/N,HEIGHT/N || This command will attempt to change the size of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[UNLOCKGUI_command|UNLOCKGUI]] || This command will allow access to all Workbench drawer windows locked with the LOCKGUI command.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[UNZOOMWINDOW_command|UNZOOMWINDOW]] WINDOW || This command will attempt to return a window to its original position and dimensions.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[VIEW_command|VIEW]] WINDOW,PAGE/S,PIXEL/S,UP/S,DOWN/S,LEFT/S,RIGHT/S || This command will change the position of the viewable display area of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[WINDOW_command|WINDOW]] WINDOWS/M/A,OPEN/S,CLOSE/S,SNAPSHOT/S,ACTIVATE/S,MIN/S,MAX/S, FRONT/S,BACK/S,CYCLE/K || This command will change, open, close or snapshot windows.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[WINDOWTOBACK_command|WINDOWTOBACK]] WINDOW || This command will push a window into the background.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[WINDOWTOFRONT_command|WINDOWTOFRONT]] WINDOW || This command will bring a window to the foreground.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[ZOOMWINDOW_command|ZOOMWINDOW]] WINDOW || This command will change a window to alternate position and dimensions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ACTIVATEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to make a window the active one.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: ACTIVATEWINDOW [WINDOW] &amp;lt;ROOT|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: ACTIVATEWINDOW WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to activate the Workbench root window (where volume icons and AppIcons live) or the fully qualified name of a drawer window to activate. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be activated. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window activated that is not the root window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Activate the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
ACTIVATEWINDOW root&lt;br /&gt;
&lt;br /&gt;
/* Activate the &amp;quot;Work:&amp;quot; partition&#039;s window. */&lt;br /&gt;
ACTIVATEWINDOW &#039;Work:&#039; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CHANGEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to change the size and the position of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: CHANGEWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [[LEFTEDGE] &amp;lt;new left edge position&amp;gt;][[TOPEDGE] &amp;lt;new top edge position&amp;gt;][[WIDTH] &amp;lt;new window width&amp;gt;][[HEIGHT] &amp;lt;new window height&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: CHANGEWINDOW WINDOW,LEFTEDGE/N,TOPEDGE/N,WIDTH/N,HEIGHT/N&lt;br /&gt;
&lt;br /&gt;
; Parameter:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to resize/move the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to change the currently active Workbench window or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: LEFTEDGE&lt;br /&gt;
:: New left edge window position.&lt;br /&gt;
&lt;br /&gt;
: TOPEDGE&lt;br /&gt;
:: New top edge window position.&lt;br /&gt;
: WIDTH&lt;br /&gt;
:: New window width.&lt;br /&gt;
: HEIGHT&lt;br /&gt;
:: New window height.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be changed; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window changed that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window; move it to position 10,30 and change its size to 200x100 pixels. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
CHANGEWINDOW root LEFTEDGE 10 TOPEDGE 30 WIDTH 200 HEIGHT 100&lt;br /&gt;
&lt;br /&gt;
/* Change the currently active window. */&lt;br /&gt;
CHANGEWINDOW active 20 40 200 100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DELETE command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for deleting files and drawers (and their contents).&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: DELETE [NAME] &amp;lt;File or drawer name&amp;gt; [ALL]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: DELETE NAME/A,ALL/S&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the file or drawer or volume to delete.&lt;br /&gt;
&lt;br /&gt;
: ALL&lt;br /&gt;
:: If the object in question is a drawer, attempt to delete the contents of the drawer as well as the drawer itself. If this option is not specified, the DELETE command will only attempt to delete the drawer itself, which may fail if the drawer is not yet empty.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named file, drawer or volume could not be found or could not be deleted.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: The file name given must be an absolute path, such as in &amp;quot;RAM:Empty&amp;quot;. A relative path, such as &amp;quot;/fred/barney&amp;quot; will not work.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Delete the contents of the drawer RAM:Empty&amp;quot;. */&lt;br /&gt;
&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
DELETE &#039;RAM:Empty&#039; ALL &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FAULT command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will return a human readable explanation corresponding to an error code.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: FAULT [CODE] &amp;lt;Error code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: FAULT CODE/A/N&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: CODE&lt;br /&gt;
:: Error code to return a human readable explanation for.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Query the error message corresponding to error code #205. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
OPTIONS RESULTS&lt;br /&gt;
FAULT 205&lt;br /&gt;
SAY result &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GETATTR command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will retrieve information from the Workbench database, such the names of the drawers currently open and the icons currently selected.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: GETATTR [OBJECT] &amp;lt;Object name&amp;gt; [NAME &amp;lt;Item name&amp;gt;][STEM &amp;lt;Name of stem variable&amp;gt;] [VAR &amp;lt;Variable name&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: GETATTR OBJECT/A,NAME/K,STEM/K,VAR/K&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: OBJECT&lt;br /&gt;
:: Name of the database entry to retrieve. For a list of valid entries see below.&lt;br /&gt;
&lt;br /&gt;
: NAME&lt;br /&gt;
:: For some datatabase entries further information is required to identify the data to retrieve. This is when you will need to provide a name.&lt;br /&gt;
&lt;br /&gt;
: STEM&lt;br /&gt;
:: If you request more than one database entry you will need to provide a variable to store the information in. For an example of its use, see below.&lt;br /&gt;
&lt;br /&gt;
: VAR&lt;br /&gt;
:: If you want the queried information to be stored in a specific variable (other than the RESULT variable), this is where you provide its name.&lt;br /&gt;
&lt;br /&gt;
; Attributes:&lt;br /&gt;
: You can obtain information on the following attributes:&lt;br /&gt;
: APPLICATION.VERSION&lt;br /&gt;
:: Version number of workbench.library.&lt;br /&gt;
&lt;br /&gt;
:APPLICATION.SCREEN&lt;br /&gt;
:: Name of the public screen Workbench uses.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.AREXX&lt;br /&gt;
:: Name of the Workbench ARexx port.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.LASTERROR&lt;br /&gt;
:: Number of the last error caused by the ARexx interface.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.ICONBORDER&lt;br /&gt;
:: Sizes of the icon borders, returned as four numbers separated by blank spaces, e.g. &amp;quot;6 26 12 6&amp;quot;. The four numbers represent the left border width, the top border height, the right border width and the bottom border height (in exactly that order).&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SCREEN.NAME&lt;br /&gt;
:: Name of the Workbench screen font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SCREEN.WIDTH APPLICATION.FONT.SCREEN.HEIGHT&lt;br /&gt;
:: Size of a single character of the Workbench screen font. Please note that since the font in question may be proportionally spaced the width information may be of little value. To measure the accurate pixel width of a text in reference to the font, use the .SIZE attribute.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SCREEN.SIZE&lt;br /&gt;
:: Size of a text, measured in pixels, in reference to the screen font. The text to measure must be provided with the NAME parameter of the GETATTR command.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.ICON.NAME&lt;br /&gt;
:: Name of the Workbench icon font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.ICON.WIDTH APPLICATION.FONT.ICON.HEIGHT&lt;br /&gt;
:: Size of a single character of the Workbench icon font. Please note that since the font in question may be proportionally spaced the width information may be of little value. To measure the accurate pixel width of a text in reference to the font, use the .SIZE attribute.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.ICON.SIZE&lt;br /&gt;
:: Size of a text, measured in pixels, in reference to the icon font. The text to measure must be provided with the NAME parameter of the GETATTR command.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.NAME&lt;br /&gt;
:: Name of the system font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.WIDTH&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.HEIGHT&lt;br /&gt;
:: Size of a single character of the system font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.SIZE&lt;br /&gt;
:: Size of a text, measured in pixels, in reference to the system font. The text to measure must be provided with the NAME parameter of the GETATTR command.&lt;br /&gt;
&lt;br /&gt;
: WINDOWS.COUNT&lt;br /&gt;
:: Number of the drawer windows currently open. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOWS.0 .. WINDOWS.N&lt;br /&gt;
:: Names of the windows currently open.&lt;br /&gt;
&lt;br /&gt;
: WINDOWS.ACTIVE&lt;br /&gt;
:: Name of the currently active Workbench window; this will be &#039; &#039; if none of Workbench&#039;s windows is currently active.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.COUNT&lt;br /&gt;
:: Number of keyboard commands assigned. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.0 .. KEYCOMMANDS.N&lt;br /&gt;
:: Information on all the keyboard commands assigned.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the keyboard command.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.&amp;lt;n&amp;gt;.KEY&lt;br /&gt;
:: The key combination assigned to this keyboard command.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.&amp;lt;n&amp;gt;.COMMAND&lt;br /&gt;
:: The ARexx command assigned to this key combination.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.COUNT&lt;br /&gt;
:: Number of menu commands assigned (through the &amp;quot;MENU ADD ..&amp;quot; command). This can be 0.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.0 .. MENUCOMMANDS.N&lt;br /&gt;
:: Information on all the menu commands assigned.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of this menu item.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.TITLE&lt;br /&gt;
:: Title of this menu item.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.SHORTCUT&lt;br /&gt;
:: The keyboard shortcut assigned to this menu item.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.COMMAND&lt;br /&gt;
:: The ARexx command assigned to this menu item.&lt;br /&gt;
&lt;br /&gt;
: The following attributes require the name of the window to obtain information.&lt;br /&gt;
: WINDOW.LEFT&lt;br /&gt;
:: Left edge of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.TOP&lt;br /&gt;
:: Top edge of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.WIDTH&lt;br /&gt;
:: Width of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.HEIGHT&lt;br /&gt;
:: Height of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MIN.WIDTH&lt;br /&gt;
:: Minimum width of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MIN.HEIGHT&lt;br /&gt;
:: Minimum height of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MAX.WIDTH&lt;br /&gt;
:: Maximum width of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MAX.HEIGHT&lt;br /&gt;
:: Maximum height of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEW.LEFT&lt;br /&gt;
:: Horizontal offset of the drawer contents; this value corresponds to the horizontal window scroller position.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEW.TOP&lt;br /&gt;
:: Vertical offset of the drawer contents; this value corresponds to the vertical window scroller position.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SCREEN.NAME&lt;br /&gt;
:: Name of the public screen the window was opened on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SCREEN.WIDTH WINDOW.SCREEN.HEIGHT&lt;br /&gt;
:: Size of the public screen the window was opened on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.COUNT&lt;br /&gt;
:: Number of the icons displayed in the window. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.0 .. WINDOW.ICONS.ALL.N&lt;br /&gt;
:: Information on all the icons displayed in the window:&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.LEFT WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.TOP&lt;br /&gt;
:: Position of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.WIDTH WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.HEIGHT&lt;br /&gt;
:: Size of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.TYPE&lt;br /&gt;
:: Type of the icon; one of DISK, DRAWER, TOOL, PROJECT,GARBAGE, DEVICE, KICK or APPICON.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.STATUS&lt;br /&gt;
:: Whether the icon is selected and (if the icon is a drawer-like object, such as a disk, drawer or trashcan icon) whether the corresponding drawer is currently open or closed. This attribute is returned in the form of a string, such as &amp;quot;SELECTED OPEN&amp;quot; which means that the icon is selected and the corresponding drawer is currently open. The other options include &amp;quot;UNSELECTED&amp;quot; and &amp;quot;CLOSED&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.COUNT&lt;br /&gt;
:: Number of the selected icons displayed in the window. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.0 .. WINDOW.ICONS.SELECTED.N&lt;br /&gt;
:: Information on all selected the icons in the window:&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.LEFT WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.TOP&lt;br /&gt;
:: Position of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.WIDTH WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.HEIGHT&lt;br /&gt;
:: Size of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.TYPE&lt;br /&gt;
:: Type of the icon; one of DISK, DRAWER, TOOL, PROJECT,GARBAGE, DEVICE, KICK or APPICON.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.STATUS&lt;br /&gt;
:: Whether the icon is selected and (if the icon is a drawer-like object, such as a disk, drawer or trashcan icon) whether the corresponding drawer is currently open or closed. This attribute is returned in the form of a string, such as &amp;quot;SELECTED OPEN&amp;quot; which means that the icon is selected and the corresponding drawer is currently open. The other options include &amp;quot;UNSELECTED&amp;quot; and CLOSED&amp;quot;. Of course, for the WINDOW.ICONS.SELECTED stem the icon status will always be reported as &amp;quot;SELECTED&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.COUNT&lt;br /&gt;
:: Number of the unselected icons displayed in the window. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.0 .. WINDOW.ICONS.UNSELECTED.N&lt;br /&gt;
:: Information on all selected the icons in the window:&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.LEFT WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.TOP&lt;br /&gt;
:: Position of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.WIDTH WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.HEIGHT&lt;br /&gt;
:: Size of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.TYPE&lt;br /&gt;
:: Type of the icon; one of DISK, DRAWER, TOOL, PROJECT, GARBAGE, DEVICE, KICK or APPICON.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.STATUS&lt;br /&gt;
:: Whether the icon is selected and (if the icon is a drawer-like object, such as a disk, drawer or trashcan icon) whether the corresponding drawer is currently open or closed. This attribute is returned in the form of a string, such as &amp;quot;UNSELECTED OPEN&amp;quot; which means that the icon is selected and the corresponding drawer is currently open. The other options include &amp;quot;SELECTED&amp;quot; and CLOSED&amp;quot;. Of course, for the WINDOW.ICONS.UNSELECTED stem the icon status will always be reported as &amp;quot;UNSELECTED&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the requester information could not be retrieved, you requested more than one database entry and did not provide a stem variable or if you provided a stem variable but did not request more than one database entry. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: RESULT - The information retrieved from the database.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Query the Workbench version. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
OPTIONS RESULTS&lt;br /&gt;
&lt;br /&gt;
GETATTR application.version&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Query the Workbench version and store it in the * variable &#039;version_number&#039;. */&lt;br /&gt;
GETATTR application.version&lt;br /&gt;
VAR version_number&lt;br /&gt;
SAY version_number&lt;br /&gt;
&lt;br /&gt;
/* Query the names of all currently open windows, * then print them. */&lt;br /&gt;
GETATTR windows&lt;br /&gt;
STEM window_list&lt;br /&gt;
&lt;br /&gt;
DO i = 0 TO ( window_list.count - 1 )&lt;br /&gt;
   SAY window_list.i&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
/* Query name, position and size of the first icon * shown in the root window. */&lt;br /&gt;
GETATTR window.icons.all.0&lt;br /&gt;
NAME root&lt;br /&gt;
STEM root&lt;br /&gt;
&lt;br /&gt;
SAY root.name&lt;br /&gt;
SAY root.left&lt;br /&gt;
SAY root.top&lt;br /&gt;
SAY root.width&lt;br /&gt;
SAY root.height&lt;br /&gt;
SAY root.type&lt;br /&gt;
&lt;br /&gt;
/* Query the width and height of the root window. */&lt;br /&gt;
GETATTR window.width&lt;br /&gt;
NAME root&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
GETATTR window.height&lt;br /&gt;
NAME root&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Query the length of a text (in pixels) with reference * to the icon font. */&lt;br /&gt;
GETATTR application.font.icon.size&lt;br /&gt;
NAME &#039;Text to measure&#039;&lt;br /&gt;
SAY result &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HELP command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command can be used to open the online help and to obtain information on the supported menus, commands and command parameters.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: HELP [COMMAND &amp;lt;Command name&amp;gt;] [MENUS] [PROMPT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: HELP COMMAND/K,MENUS/S,PROMPT/S&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: COMMAND&lt;br /&gt;
:: Name of the command whose command template should be retrieved.&lt;br /&gt;
&lt;br /&gt;
: MENUS&lt;br /&gt;
:: Specify this parameter to retrieve a list of menu items currently available.&lt;br /&gt;
&lt;br /&gt;
: PROMPT&lt;br /&gt;
:: Specify this parameter to invoke the online help system.&lt;br /&gt;
&lt;br /&gt;
:: If no parameter is provided, a list of supported commands will be returned.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named command is not supported by the ARexx interface. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: RESULT&lt;br /&gt;
: The command template, list of menu items or commands, as specified in the command parameters.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Retrieve the list of supported commands. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
OPTIONS results&lt;br /&gt;
&lt;br /&gt;
HELP&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Retrieve the command template of the &#039;GETATTR&#039; command. */&lt;br /&gt;
HELP COMMAND getattr&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Retrieve the list of available menu items. */&lt;br /&gt;
HELP MENUS&lt;br /&gt;
SAY result &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICON command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for manipulating the icons displayed in a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: ICON [WINDOW] &amp;lt;Window name&amp;gt; &amp;lt;Icon name&amp;gt; .. &amp;lt;Icon name&amp;gt; [OPEN] [MAKEVISIBLE] [SELECT] [UNSELECT] [UP &amp;lt;Pixels&amp;gt;] [DOWN &amp;lt;Pixels&amp;gt;] [LEFT &amp;lt;Pixels&amp;gt;] [RIGHT &amp;lt;Pixels&amp;gt;] [X &amp;lt;Horizontal position&amp;gt;] [Y &amp;lt;Vertical position&amp;gt;] [ACTIVATE UP|DOWN|LEFT|RIGHT] [CYCLE PREVIOUS|NEXT] [MOVE IN|OUT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: ICON WINDOW,NAMES/M,OPEN/S,MAKEVISIBLE/S,SELECT/S,UNSELECT/S, UP/N,DOWN/N,LEFT/N,RIGHT/N,X/N,Y/N,ACTIVATE/K,CYCLE/K, MOVE/K&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window whose icons should be manipulated. This can be &amp;quot;ROOT&amp;quot; to work on the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to work on the currently active Workbench window or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: NAMES&lt;br /&gt;
:: Names of the icons to manipulate.&lt;br /&gt;
&lt;br /&gt;
: OPEN&lt;br /&gt;
:: Specifies that the named icons should be opened.&lt;br /&gt;
&lt;br /&gt;
: MAKEVISIBLE&lt;br /&gt;
:: Specifies that the named icons should be made visible. This generally works well for the first icon in a list but does not always work for a whole list.&lt;br /&gt;
&lt;br /&gt;
: SELECT&lt;br /&gt;
:: Select the named icons.&lt;br /&gt;
&lt;br /&gt;
: UNSELECT&lt;br /&gt;
:: Unselect the named icons.&lt;br /&gt;
&lt;br /&gt;
: UP, DOWN, LEFT, RIGHT&lt;br /&gt;
:: Move the named icons by the specified number of pixels.&lt;br /&gt;
&lt;br /&gt;
: X, Y&lt;br /&gt;
:: Move the named icons to the specified position.&lt;br /&gt;
&lt;br /&gt;
: ACTIVATE&lt;br /&gt;
:: This command is for activating the icon closest to the currently selected icon in the window. &amp;quot;Activating&amp;quot; in this context means selecting an icon, whilst at the same time unselecting all others. Thus, the &amp;quot;active&amp;quot; icon is the only selected icon in the window.&lt;br /&gt;
&lt;br /&gt;
:: You can indicate which direction the next icon to be activated should be searched for, relative to the currently active icon. &amp;quot;UP&amp;quot; searches upwards, &amp;quot;DOWN&amp;quot; searches downwards, &amp;quot;LEFT&amp;quot; searches to the left and &amp;quot;RIGHT&amp;quot; searches to the right.&lt;br /&gt;
&lt;br /&gt;
: CYCLE&lt;br /&gt;
:: This command is for cycling through all icons in a window, making each one the active one in turn (for a description of what &amp;quot;active&amp;quot; means in this context, see the &amp;quot;ACTIVATE&amp;quot; description above). You must indicate in which direction you want to cycle through the icons: you can either specify &amp;quot;PREVIOUS&amp;quot; or &amp;quot;NEXT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: MOVE&lt;br /&gt;
:: This command is not for moving icons but for moving through a file system hierarchy. Thus, moving &amp;quot;in&amp;quot; will open a drawer and moving &amp;quot;out&amp;quot; will open the drawer&#039;s parent directory. The &amp;quot;IN&amp;quot; parameter will cause the drawer represented by the active icon to be opened. Please note that an icon must be selected and it must be a drawer. The &amp;quot;OUT&amp;quot; parameter will open the drawer&#039;s parent directory, and it also requires that in the drawer there is an icon selected. This may sound strange, but this feature is not meant as a replacement for the &amp;quot;Open Parent&amp;quot; menu item.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found, none of the Workbench windows are currently active and the command was set to work on the currently active Workbench window. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Select the icons of the &amp;quot;Workbench&amp;quot; and &amp;quot;Work&amp;quot; volumes displayed in the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
ICON WINDOW root&lt;br /&gt;
NAMES Workbench Work SELECT&lt;br /&gt;
&lt;br /&gt;
/* Open the &amp;quot;Workbench&amp;quot; volume icon displayed in the root window. */&lt;br /&gt;
ICON WINDOW root&lt;br /&gt;
NAMES Workbench OPEN &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INFO command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for opening the Workbench icon information requester.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: INFO [NAME] &amp;lt;File, drawer or volume name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: INFO NAME/A&lt;br /&gt;
&lt;br /&gt;
; Parameters :&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the file, drawer or volume to open the information window for.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named file, drawer or volume could not be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Open the information window for SYS:&amp;quot;. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
INFO NAME &#039;SYS:&#039; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KEYBOARD command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command can be used to bind ARexx commands to key combinations.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: KEYBOARD [NAME] &amp;lt;Name of key combination&amp;gt; ADD|REMOVE [KEY &amp;lt;Key combination&amp;gt;] [CMD &amp;lt;ARexx command&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: KEYBOARD NAME/A,ADD/S,REMOVE/S,KEY,CMD/F&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the key combination to add or remove. Each key combination must have a name with which it is associated. The name must be unique.&lt;br /&gt;
&lt;br /&gt;
: ADD&lt;br /&gt;
:: This tells the KEYBOARD command to add a new keyboard combination. You will also need to specify the KEY and CMD parameters.&lt;br /&gt;
&lt;br /&gt;
: REMOVE&lt;br /&gt;
:: This tells the KEYBOARD command to remove an existing keyboard combination.&lt;br /&gt;
&lt;br /&gt;
: KEY&lt;br /&gt;
:: The keyboard combination to add; this must be in the same format as used by the Commodities programs.&lt;br /&gt;
&lt;br /&gt;
: CMD&lt;br /&gt;
:: This is the ARexx command to bind to the keyboard combination. The command can either be the name of an ARexx script to execute or a short ARexx program in a single line.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - The command will fail if you tried to add a duplicate of an existing key combination or if the key combination to remove does not exist. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Bind an ARexx script to the [Control]+A key combination.&lt;br /&gt;
 * When pressed, this will cause the ARexx script by the name &lt;br /&gt;
 * &amp;quot;test.wb&amp;quot; to be executed. ARexx will search for that program &lt;br /&gt;
 * in the &amp;quot;REXX:&amp;quot; directory. If no &amp;quot;test.wb&amp;quot; file can be found, ARexx will attempt to execute a script &lt;br /&gt;
 * by the name of &amp;quot;test.rexx&amp;quot;. */&lt;br /&gt;
&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
KEYBOARD ADD NAME test1 KEY ,&amp;quot;ctrl a&amp;quot;, CMD ,&#039;test&#039;&lt;br /&gt;
&lt;br /&gt;
/* Bind an ARexx script to the [Alt]+[F1] key combination. &lt;br /&gt;
 * When pressed, this will cause a short inline program to be &lt;br /&gt;
 * executed. */&lt;br /&gt;
KEYBOARD ADD NAME test2 KEY ,&amp;quot;alt f1&amp;quot;, CMD &amp;quot;say 42&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Bind an ARexx script to the [Shift]+[Help] key combination. &lt;br /&gt;
 * When pressed, this will cause the &amp;quot;Workbench About&amp;quot; menu item to be invoked. */&lt;br /&gt;
KEYBOARD ADD NAME test3 KEY ,&amp;quot;shift help&amp;quot;, CMD &amp;quot;MENU INVOKE WORKBENCH.ABOUT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Remove the first key combination we added above. */&lt;br /&gt;
KEYBOARD REMOVE NAME test1 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LOCKGUI command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will block access to all Workbench drawer windows.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: LOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: LOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: It takes as many UNLOCKGUI commands as there were LOCKGUI commands to make the Workbench drawer windows usable again. In other words, the LOCKGUI command &amp;quot;nests&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Block access to all Workbench drawer windows. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
LOCKGUI &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MENU command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for invoking items of the Workbench menu, as if the user had selected them with the mouse and for adding/removing user menus.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: MENU [WINDOW &amp;lt;Window name&amp;gt;] [INVOKE] &amp;lt;Menu name&amp;gt; [NAME &amp;lt;Menu name&amp;gt;] [TITLE &amp;lt;Menu title&amp;gt;] [SHORTCUT &amp;lt;Menu shortcut&amp;gt;] [ADD|REMOVE] [CMD &amp;lt;ARexx command&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: MENU WINDOW/K,INVOKE,NAME/K,TITLE/K,SHORTCUT/K,ADD/S,REMOVE/S,CMD/K/F&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: The following set of parameters can be used solely for invoking menu items.&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window whose menu should be invoked. This can be &amp;quot;ROOT&amp;quot; to work on the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to work on the currently active Workbench window or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: INVOKE&lt;br /&gt;
:: Name of the menu to invoke. See below for a list of available menu items.&lt;br /&gt;
&lt;br /&gt;
: The following set of parameters are for adding and removing menu items.&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the menu item to add or remove. Each menu item must have a name with which it is associated. The name must be unique and has nothing to do with the title of the item, as shown in the &amp;quot;Tools&amp;quot; menu.&lt;br /&gt;
&lt;br /&gt;
: TITLE&lt;br /&gt;
:: This is the text that will be used as the menu item title, as it will appear in the &amp;quot;Tools&amp;quot; menu. This parameter is required if you ADD a new menu item.&lt;br /&gt;
&lt;br /&gt;
: SHORTCUT&lt;br /&gt;
:: When adding a new menu item, this will be the menu shortcut associated with the item. Please note that the shortcut cannot be longer than a single character and that it will be ignored if there already is an item in any of the menus which uses this shortcut. This parameter is optional.&lt;br /&gt;
&lt;br /&gt;
: ADD&lt;br /&gt;
:: This tells the MENU command to add a new item to the &amp;quot;Tools&amp;quot; menu. When adding a menu item you will also need to specify the NAME, TITLE and CMD parameters.&lt;br /&gt;
&lt;br /&gt;
: REMOVE&lt;br /&gt;
:: This tells the MENU command to remove a menu item previously added via the ARexx interface. When removing a menu item you will also need to specify the NAME parameter.&lt;br /&gt;
&lt;br /&gt;
: CMD&lt;br /&gt;
:: This is the ARexx command to bind to the new menu item. The command can either be the name of an ARexx script to execute or a short ARexx program in a single line.&lt;br /&gt;
&lt;br /&gt;
: Menu items:&lt;br /&gt;
: WORKBENCH.BACKDROP&lt;br /&gt;
:: Toggles the Workbench &amp;quot;Backdrop&amp;quot; window switch.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.EXECUTE&lt;br /&gt;
:: Invokes the Workbench &amp;quot;Execute Command&amp;quot; requester. The user will be prompted to enter the command to be executed.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.REDRAWALL&lt;br /&gt;
:: Invokes the Workbench &amp;quot;Redraw All&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.UPDATEALL&lt;br /&gt;
:: Invokes the Workbench &amp;quot;Update All&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.LASTMESSAGE&lt;br /&gt;
:: Redisplays the last Workbench error message.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.ABOUT&lt;br /&gt;
:: Displays the &amp;quot;Workbench About...&amp;quot; requester.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.QUIT&lt;br /&gt;
:: Attempts to close Workbench; this may bring up a requester the user will have to answer.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.NEWDRAWER&lt;br /&gt;
:: Prompts the user to enter the name of a new drawer to be created.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.OPENPARENT&lt;br /&gt;
:: If possible, this will open the parent directory of the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLOSE&lt;br /&gt;
:: If possible, this will close the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.UPDATE&lt;br /&gt;
:: This will update the drawer the command operates on, i.e. the contents will be reread.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SELECTCONTENTS&lt;br /&gt;
:: This will select the contents of the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEARSELECTION&lt;br /&gt;
:: This unselects all icons selected in the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.COLUMN&lt;br /&gt;
:: This will sort the contents of the drawer and place the icons in columns.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.NAME&lt;br /&gt;
:: This will sort the contents of the drawer by name and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.DATE&lt;br /&gt;
:: This will sort the contents of the drawer by date and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.SIZE&lt;br /&gt;
:: This will sort the contents of the drawer by size and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.TYPE&lt;br /&gt;
:: This will sort the contents of the drawer by type and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.RESIZETOFIT&lt;br /&gt;
:: This will resize the drawer window, trying to make it just as large as to allow all its icons to fit.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SNAPSHOT.WINDOW&lt;br /&gt;
:: This will snapshot the drawer window, but none of its contents.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SNAPSHOT.ALL&lt;br /&gt;
:: This will snapshot the drawer window and its contents.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SHOW.ONLYICONS&lt;br /&gt;
:: This will change the display mode of the drawer to show only files and drawers which have icons attached.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SHOW.ALLFILES&lt;br /&gt;
:: This will change the display mode of the drawer to show all files and drawers, regardless of whether they have icons attached or not.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.ICON&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents as icons.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.NAME&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by name.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.DATE&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by date.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.SIZE&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by size.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.TYPE&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by type.&lt;br /&gt;
&lt;br /&gt;
: ICONS.OPEN&lt;br /&gt;
:: This will open the currently selected icons. Workbench may bring up a requester in case project icons are found which lack a default tool.&lt;br /&gt;
&lt;br /&gt;
: ICONS.COPY&lt;br /&gt;
:: This will duplicate the currently selected icons.&lt;br /&gt;
&lt;br /&gt;
: ICONS.RENAME&lt;br /&gt;
:: This will prompt the user to choose a new name for each currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.INFORMATION&lt;br /&gt;
:: This will open the information window for every currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.SNAPSHOT&lt;br /&gt;
:: This will lock the position of every currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.UNSNAPSHOT&lt;br /&gt;
:: This will unlock the position of every currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.LEAVEOUT&lt;br /&gt;
:: This will permanently put all currently selected icons on the Workbench root window.&lt;br /&gt;
&lt;br /&gt;
: ICONS.PUTAWAY&lt;br /&gt;
:: This will move all currently selected icons out of the root window and put them back into the drawers they belong.&lt;br /&gt;
&lt;br /&gt;
: ICONS.DELETE&lt;br /&gt;
:: This will cause all currently selected files to be deleted, provided the user confirms this action first.&lt;br /&gt;
&lt;br /&gt;
: ICONS.FORMATDISK&lt;br /&gt;
:: This will invoke the &amp;quot;Format&amp;quot; command on every currently selected disk icon. This will not format the disks immediately. The user will have to confirm this action first.&lt;br /&gt;
&lt;br /&gt;
: ICONS.EMPTYTRASH&lt;br /&gt;
:: With a trashcan icon selected, this will empty it.&lt;br /&gt;
&lt;br /&gt;
: TOOLS.RESETWB&lt;br /&gt;
:: This will close and reopen all Workbench windows.&lt;br /&gt;
&lt;br /&gt;
: The HELP command will provide a complete list of menu items that can be invoked. Depending on the state of each menu item (e.g. the &amp;quot;Open&amp;quot; menu item will be disabled if no icon is currently selected) the MENU command can silently fail to invoke the item you had in mind.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found, none of the Workbench windows is currently active and the command was set to work on the currently active Workbench window. The command can also fail if you tried to add a duplicate of an existing menu item or if the menu item to remove does not exist. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Invoke the &amp;quot;About&amp;quot; menu. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
MENU WINDOW root INVOKE WORKBENCH.ABOUT&lt;br /&gt;
&lt;br /&gt;
/* Add an item to the &amp;quot;Tools&amp;quot; menu; selecting it&lt;br /&gt;
 * will cause the ARexx script by the name &amp;quot;test.wb&amp;quot;&lt;br /&gt;
 * to be executed. ARexx will search for that program&lt;br /&gt;
 * in the &amp;quot;REXX:&amp;quot; directory. If no &amp;quot;test.wb&amp;quot; file can&lt;br /&gt;
 * be found, ARexx will attempt to execute a script&lt;br /&gt;
 * by the name of &amp;quot;test.rexx&amp;quot;. */&lt;br /&gt;
MENU ADD NAME test1 TITLE ,&amp;quot;Execute a script&amp;quot;, SHORTCUT ,&#039;!&#039; CMD ,&#039;test&#039;&lt;br /&gt;
&lt;br /&gt;
/* Add an item to the &amp;quot;Tools&amp;quot; menu; selecting it&lt;br /&gt;
 * will cause a short inline program to be executed. */&lt;br /&gt;
MENU ADD NAME test2 TITLE ,&amp;quot;Short inline program&amp;quot;, CMD &amp;quot;say 42&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Add an item to the &amp;quot;Tools&amp;quot; menu; selecting it&lt;br /&gt;
 * will cause the Workbench &amp;quot;About&amp;quot; menu item to be invoked. */&lt;br /&gt;
MENU ADD NAME test3 TITLE ,&amp;quot;About...&amp;quot;, CMD &amp;quot;MENU INVOKE WORKBENCH.ABOUT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Remove the first menu item we added above. */&lt;br /&gt;
MENU REMOVE NAME test1 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MOVEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to change the position of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: MOVEWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [[LEFTEDGE] &amp;lt;new left edge position&amp;gt;] [[TOPEDGE] &amp;lt;new top edge position&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: MOVEWINDOW WINDOW,LEFTEDGE/N,TOPEDGE/N&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to move the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to move the currently active Workbench window or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: LEFTEDGE&lt;br /&gt;
:: New left edge window position.&lt;br /&gt;
&lt;br /&gt;
: TOPEDGE&lt;br /&gt;
:: New top edge window position.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be moved; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window changed that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Move the root window to position 10,30. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
MOVEWINDOW root LEFTEDGE 10 TOPEDGE 30&lt;br /&gt;
&lt;br /&gt;
/* Move the currently active window. */&lt;br /&gt;
MOVEWINDOW active 20 40 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEWDRAWER command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for creating new drawers.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: NEWDRAWER [NAME] &amp;lt;Name of drawer to create&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: NEWDRAWER NAME/A&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the drawer to be created.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named drawer could not be created.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: The drawer name given must be an absolute path, such as in &amp;quot;RAM:Empty&amp;quot;. A relative path, such as &amp;quot;/fred/barney&amp;quot; will not work.&lt;br /&gt;
&lt;br /&gt;
; Example :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Create a drawer by the name of &amp;quot;Empty&amp;quot; in the RAM disk. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
NEWDRAWER &#039;RAM:Empty&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RENAME command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for renaming files, drawers and volumes.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: RENAME [OLDNAME] &amp;lt;Name of file/drawer/volume to rename&amp;gt; [NEWNAME] &amp;lt;New name of the file/drawer/volume&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: RENAME OLDNAME/A,NEWNAME/A&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: OLDNAME&lt;br /&gt;
:: Name of the file/drawer/volume to be renamed. This must be an absolute path, such as in &amp;quot;RAM:Empty&amp;quot;. A relative path, such as &amp;quot;/fred/barney&amp;quot;, will not work.&lt;br /&gt;
&lt;br /&gt;
: NEWNAME&lt;br /&gt;
:: The new name to assign to the file/drawer/volume. This must not be an absolute or relative path. For example, &amp;quot;wilma&amp;quot; is valid new name, &amp;quot;/wilma&amp;quot; or &amp;quot;wilma:&amp;quot; would be invalid names.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the object cannot be renamed.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: The RENAME command does not work like for example the AmigaDOS &amp;quot;Rename&amp;quot; command. For example, RENAME &#039;ram:empty&#039; ,&#039;newname&#039; will rename the file &#039;RAM:empty&#039; to &#039;RAM:newname&#039;.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Rename a drawer by the name of &amp;quot;Old&amp;quot; in the RAM disk to &amp;quot;New&amp;quot;. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
RENAME &#039;RAM:Old&#039; &#039;New&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RX command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for executing ARexx scripts and commands.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: RX [CONSOLE] [ASYNC] [CMD] &amp;lt;Command to execute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: RX CONSOLE/S,ASYNC/S,CMD/A/F&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: CONSOLE&lt;br /&gt;
:: This switch indicates that a console (for default I/O) is needed.&lt;br /&gt;
&lt;br /&gt;
: ASYNC&lt;br /&gt;
:: This switch indicates that the command should be run asynchronously, i.e. the &amp;quot;RX&amp;quot; command will return as soon as ARexx has been instructed to run the command you specified. Otherwise, the &amp;quot;RX&amp;quot; command will wait for the specified ARexx command to complete execution.&lt;br /&gt;
&lt;br /&gt;
: COMMAND&lt;br /&gt;
:: This is the name of the ARexx program to execute.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the given ARexx program could not be executed.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Execute an ARexx program by the name of &#039;test.wb&#039;;&lt;br /&gt;
 * its output should be sent to a console window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
RX CONSOLE CMD &#039;test.wb&#039; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SIZEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to change the size of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: SIZEWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [[WIDTH] &amp;lt;new window width&amp;gt;] [[HEIGHT] &amp;lt;new window height&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: SIZEWINDOW WINDOW,WIDTH/N,HEIGHT/N&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to resize the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to resize the currently active Workbench window or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: WIDTH&lt;br /&gt;
:: New window width.&lt;br /&gt;
&lt;br /&gt;
: HEIGHT&lt;br /&gt;
:: New window height.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be resized; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window resized that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window size to 200x100 pixels. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
SIZEWINDOW root 30 WIDTH 200 HEIGHT 100&lt;br /&gt;
&lt;br /&gt;
/* Resize the currently active window. */&lt;br /&gt;
SIZEWINDOW active 200 100 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UNLOCKGUI command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will allow access to all Workbench drawer windows locked with the LOCKGUI command.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: UNLOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: UNLOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: It takes as many UNLOCKGUI commands as there were LOCKGUI commands to make the Workbench drawer windows usable again. In other words, the LOCKGUI command &amp;quot;nests&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Reallow access to all Workbench drawer windows. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
UNLOCKGUI&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UNZOOMWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to return a window to its original position and dimensions.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: UNZOOMWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: UNZOOMWINDOW WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window to operate on. &amp;quot;ROOT&amp;quot; will use the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; will use the currently active Workbench window. Any other fully qualified path name will use the drawer window corresponding to the path.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
UNZOOMWINDOW root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VIEW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will change the position of the viewable display area of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: VIEW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [PAGE|PIXEL] [UP|DOWN|LEFT|RIGHT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: VIEW WINDOW,PAGE/S,PIXEL/S,UP/S,DOWN/S,LEFT/S,RIGHT/S&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to change the Workbench root window view (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to change the currently active Workbench window view or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: UP&lt;br /&gt;
:: Moves the view up by about 1/8 of the window height. If PAGE is specified, moves the view up by a whole page. If PIXEL is specified, moves the view up by a single pixel.&lt;br /&gt;
&lt;br /&gt;
: DOWN&lt;br /&gt;
:: Moves the view down by about 1/8 of the window height. If PAGE is specified, moves the view down by a whole page. If PIXEL is specified, moves the view down by a single pixel.&lt;br /&gt;
&lt;br /&gt;
: LEFT&lt;br /&gt;
:: Moves the view left by about 1/8 of the window width. If PAGE is specified, moves the view left by a whole page. If PIXEL is specified, moves the view left by a single pixel.&lt;br /&gt;
&lt;br /&gt;
: RIGHT&lt;br /&gt;
:: Moves the view right by about 1/8 of the window width. If PAGE is specified, moves the view right by a whole page. If PIXEL is specified, moves the view right by a single pixel.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window view cannot be changed; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window view changed that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
: To find out about a window&#039;s current view position, use the GETATTR command and query the window&#039;s WINDOW.VIEW.LEFT and WINDOW.VIEW.TOP attributes.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window view; move it up by a whole page. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
VIEW root PAGE UP &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will change, open, close or snapshot windows.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: WINDOW [WINDOWS] &amp;lt;Window name&amp;gt; .. &amp;lt;Window name&amp;gt; [OPEN|CLOSE] [SNAPSHOT] [ACTIVATE] [MIN|MAX] [FRONT|BACK] [CYCLE PREVIOUS|NEXT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: WINDOW WINDOWS/M/A,OPEN/S,CLOSE/S,SNAPSHOT/S,ACTIVATE/S,MIN/S,MAX/S, FRONT/S,BACK/S,CYCLE/K&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOWS&lt;br /&gt;
:: Names of the windows to operate on. This can be &amp;quot;ROOT&amp;quot; for the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; for the currently active Workbench window or the fully qualified name of a drawer window.&lt;br /&gt;
&lt;br /&gt;
: OPEN&lt;br /&gt;
:: Attempt to open the specified windows.&lt;br /&gt;
&lt;br /&gt;
: CLOSE&lt;br /&gt;
:: Close the specified windows. Note that if a window is closed no further operations (such as SNAPSHOT, ACTIVATE, etc.) can be performed on it.&lt;br /&gt;
&lt;br /&gt;
: SNAPSHOT&lt;br /&gt;
:: Snapshot the sizes and positions of the specified windows.&lt;br /&gt;
&lt;br /&gt;
: ACTIVATE&lt;br /&gt;
:: Activate the specified windows. With multiple windows to activate, only one window will wind up as the active one. Commonly, this will be the last window in the list.&lt;br /&gt;
&lt;br /&gt;
: MIN&lt;br /&gt;
:: Resize the windows to their minimum dimensions.&lt;br /&gt;
&lt;br /&gt;
: MAX&lt;br /&gt;
:: Resize the windows to their maximum dimensions.&lt;br /&gt;
&lt;br /&gt;
: FRONT&lt;br /&gt;
:: Move the windows into the foreground.&lt;br /&gt;
&lt;br /&gt;
: BACK&lt;br /&gt;
:: Move the windows into the background.&lt;br /&gt;
&lt;br /&gt;
: CYCLE&lt;br /&gt;
:: This command operates on the currently active drawer window. You can specify either &amp;quot;PREVIOUS&amp;quot;, to activate the previous drawer window in the list, or &amp;quot;NEXT&amp;quot;, to activate the next following drawer window in the list.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named windows cannot be opened or operated on; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as a window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window operated on that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Open the &amp;quot;Work:&amp;quot; drawer. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
WINDOW &#039;Work:&#039; OPEN&lt;br /&gt;
&lt;br /&gt;
/* Activate the root window. */&lt;br /&gt;
WINDOW root ACTIVATE &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WINDOWTOBACK command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will push a window into the background.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: WINDOWTOBACK [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: WINDOWTOBACK WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: &amp;quot;ROOT&amp;quot; to push the the Workbench root window (where volume icons and AppIcons live) into to the background, &amp;quot;ACTIVE&amp;quot; to push the currently active Workbench window into the background or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window pushed into the background that is not the root window or the currently active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Push the root window into the background. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
WINDOWTOBACK root &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WINDOWTOFRONT command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will bring a window to the foreground.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: WINDOWTOFRONT [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: WINDOWTOFRONT WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: &amp;quot;ROOT&amp;quot; to bring the the Workbench root window (where volume icons and AppIcons live) to the foreground, &amp;quot;ACTIVE&amp;quot; to bring the currently active Workbench window to the foreground or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window brought to the foreground that is not the root window or the currently active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Bring the root window to the foreground. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
WINDOWTOFRONT root &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZOOMWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will change a window to alternate position and dimensions.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: ZOOMWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: ZOOMWINDOW WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window to operate on. &amp;quot;ROOT&amp;quot; will use the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; will use the currently active Workbench window. Any other fully qualified path name will use the drawer window corresponding to the path.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
ZOOMWINDOW root &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_ARexx&amp;diff=12358</id>
		<title>AmigaOS Manual: ARexx</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_ARexx&amp;diff=12358"/>
		<updated>2023-07-04T21:50:00Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Sources of Additional Information */ Added link to Workbench ARexx port information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Welcome =&lt;br /&gt;
&lt;br /&gt;
ARexx, the Amiga counterpart of the IBM REXX programming language, provides the freedom to customize your work environment. It is especially useful as a scripting language which allows you to control and modify applications and to direct how they interact with each other.&lt;br /&gt;
&lt;br /&gt;
This manual introduces you to ARexx, tells you how to create ARexx programs and provides a reference section of ARexx commands.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Introducing ARexx|Chapter 1. Introducing ARexx]] This chapter gives an overview of ARexx, how it works on the Amiga, and the basic features of the programming language.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Getting Started|Chapter 2. Getting Started]] This chapter tells you where to store your ARexx programs, how to execute an ARexx program, and provides several programming examples.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Elements of ARexx|Chapter 3. Elements of ARexx]] This chapter details the rules and concepts that make up the ARexx programming language.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Instructions|Chapter 4. Instructions]] This chapter contains an alphabetical listing of ARexx instructions, which are language statements that dictate an action.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Functions|Chapter 5. Functions]] This chapter describes the use of functions, which are program statements used by ARexx, and provides an alphabetical listing of the built-in ARexx functions.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Debugging|Chapter 6. Debugging]] This chapter focuses on the source-level debugging features used in the development and testing of programs.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Parsing|Chapter 7. Parsing]] This chapter explains how to extract patterns of information from strings.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Input and Output|Chapter 8. Input and Output]] This chapter explains the ARexx&#039;s input and output model.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Sounds|Chapter 9. Sounds]] This chapter explains how to record and play sounds.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Printing|Chapter 10. Printing]] This chapter explains how to print.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Serial and parallel ports|Chapter 11. Serial and parallel ports]] This chapter explains how to receive and send data through the serial and parallel ports.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Network resources|Chapter 12. Network resources]] This chapter explains how you can connect to a remote server and exchange data with it.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Error Messages|Appendix A. Error Messages]] This appendix lists the ARexx error messages.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Command Utilities|Appendix B. Command Utilities]] This appendix lists the ARexx commands that can be run from the Shell.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Special Variables|Appendix C. Special Variables]] This appendix lists the ARexx special variables.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: External Function Libraries|Appendix D. External Function Libraries]] This appendix lists the external ARexx function libraries.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: External Function Hosts|Appendix E. External Function Hosts]] This appendix lists the external function hosts.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Compatible Applications|Appendix F. ARexx Compatible Applications]] This appendix lists the operating system applications which have an ARexx interface. &lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Control Sequences|Appendix G. Control Sequences]] This appendix lists the control sequences for the text output.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Limits|Appendix H. Limits]] This appendix lists the ARexx implementation limits.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: ARexx Glossary|Glossary]] The glossary contains common ARexx terms.&lt;br /&gt;
&lt;br /&gt;
= Document Conventions =&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this manual:&lt;br /&gt;
&lt;br /&gt;
; KEYWORDS&lt;br /&gt;
: Keywords are displayed in all uppercase letters, however, the arguments are case-insensitive.&lt;br /&gt;
&lt;br /&gt;
; | (vertical bar)&lt;br /&gt;
: Alternative selections are separated by a vertical bar.&lt;br /&gt;
&lt;br /&gt;
; { } (braces)&lt;br /&gt;
: Required alternatives are enclosed by braces.&lt;br /&gt;
&lt;br /&gt;
; [ ] (brackets)&lt;br /&gt;
: Optional instruction parts are enclosed in brackets.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;n&amp;gt;&lt;br /&gt;
: Variables are displayed in angle brackets. Do not enter the angle brackets when entering the variable.&lt;br /&gt;
&lt;br /&gt;
; Courier&lt;br /&gt;
: Text appearing in the Courier font represents output from your ARexx programs or other information that displays on your screen.&lt;br /&gt;
&lt;br /&gt;
; Key1 + Key2&lt;br /&gt;
: Key combinations displayed with a plus sign (+) connecting them indicates pressing the keys simultaneously.&lt;br /&gt;
&lt;br /&gt;
; Key1, Key2&lt;br /&gt;
: Key combinations displayed with a comma sign (,) separating them indicates pressing the keys in sequence.&lt;br /&gt;
&lt;br /&gt;
; Amiga keys&lt;br /&gt;
: Two keys on the Amiga keyboard used for special functions. The left Amiga key is to the left of the space bar and is marked with a large solid A. The right Amiga key is to the right of the space bar and is an outlined A.&lt;br /&gt;
&lt;br /&gt;
= Sources of Additional Information =&lt;br /&gt;
&lt;br /&gt;
Further information on learning and using ARexx can be found in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count: 2; font-size: 95%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Special:BookSources/978-0135973295|Modern Programming Using REXX]], by R.P. O&#039;Hara and D.G. Gomberg, Prentice-Hall, 1985.&lt;br /&gt;
* [[Special:BookSources/978-0137806515|The REXX Language: A Practical Approach to Programming]], by M.F. Cowlishaw, Prentice-Hall, 1985.&lt;br /&gt;
* [[Special:BookSources/978-0070153059|Programming in REXX]], J. Ranade IBM Series, by Charles Daney, McGraw-Hill Companies, 1990.&lt;br /&gt;
* [[Special:BookSources/978-1557551146|Using ARexx on the Amiga]], by Chris Zamara and Nick Sullivan, Abacus, 1991.&lt;br /&gt;
* [[Libraries|Libraries]]&lt;br /&gt;
* [[Workbench_ARexx_Port|The Workbench ARexx Port]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Communities&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count: 2; font-size: 95%;&amp;quot;&amp;gt;&lt;br /&gt;
* [http://www.rexxla.org/ The Rexx Language Association]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_Workbench_Using&amp;diff=12335</id>
		<title>AmigaOS Manual: Workbench Using</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_Workbench_Using&amp;diff=12335"/>
		<updated>2022-11-29T09:06:07Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* ARexx Interface */ Moved advanced reference documentation of ARexx interface to a more intuitive and suitable section than the basic Workbench use section for clarity, readability and consistency.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This chapter describes the Amiga Workbench, an icon-based environment that allows you to give instructions by manipulating graphic symbols with a mouse rather than by typing in commands at a keyboard. Included in this chapter are descriptions of the following:&lt;br /&gt;
&lt;br /&gt;
* The Workbench Screen&lt;br /&gt;
* The Workbench Window&lt;br /&gt;
* The Workbench Menus&lt;br /&gt;
* Workbench Programs &lt;br /&gt;
&lt;br /&gt;
= Workbench Screen =&lt;br /&gt;
&lt;br /&gt;
The Workbench screen, illustrated in Figure 4-1, is the primary visual component of your system. Icons and other windows appear on it.&lt;br /&gt;
&lt;br /&gt;
The Workbench screen is identified by the Amiga Workbench title bar located along the top border of the display. The Workbench screen&#039;s title bar also displays the number of bytes of graphics (Chip) memory and other (Fast) memory currently available when any window, except a Shell window is selected.&lt;br /&gt;
&lt;br /&gt;
The Amiga provides Preferences editors (described in Chapter 5) that allow you to customize the Workbench screen. You can define an extra-large virtual Workbench screen that is larger than the viewable area with more space for windows.&lt;br /&gt;
&lt;br /&gt;
== Workbench Window ==&lt;br /&gt;
&lt;br /&gt;
When you boot you Amiga, the Workbench window fills the Workbench screen. This window contains icons for any floppy disks inserted into floppy drives, the Ram Disk, and any other icons determined by your system&#039;s configuration.&lt;br /&gt;
&lt;br /&gt;
Although the Workbench window appears and functions like an application window, it is an essential part of the Workbench screen.&lt;br /&gt;
&lt;br /&gt;
[[File:WorkbenchFig4-1.png|frame|none|Workbench Screen]]&lt;br /&gt;
&lt;br /&gt;
= Workbench Menus =&lt;br /&gt;
&lt;br /&gt;
The workbench has the following four menus:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Workbench || Contains options for working with Workbench and windows opened on the Workbench screen.&lt;br /&gt;
|-&lt;br /&gt;
| Windows || Contains options for working within the currently selected window.&lt;br /&gt;
|-&lt;br /&gt;
| Icons || Contains options for working with the currently selected icon or group of icons.&lt;br /&gt;
|-&lt;br /&gt;
| Tools || Is available for applications to use or for user-created menu items. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Workbench Menu ==&lt;br /&gt;
&lt;br /&gt;
The Workbench menu contains general Workbench options and options for windows opened on the Workbench screen. You can, for example, use the Workbench menu to update the screen display or see which version of the system software is in use.&lt;br /&gt;
&lt;br /&gt;
On the Workbench menu you can select the following options:&lt;br /&gt;
&lt;br /&gt;
=== Update software ===&lt;br /&gt;
&lt;br /&gt;
=== Backdrop ===&lt;br /&gt;
&lt;br /&gt;
The Backdrop menu item creates more room on the Workbench screen for displaying windows and icons. Backdrop switches between a normal window for your Workbench and a special borderless window that is always behind other windows opened on the Workbench.&lt;br /&gt;
&lt;br /&gt;
Choosing Backdrop removes the Workbench window borders so that the disk icons appear to be on the Workbench screen without being enclosed in a window. To return to the normal Workbench window, choose Backdrop again. Backdrop is reset to off if you power off or reboot your computer. To save your Backdrop selection choose the Snapshot item in the Windows menu while the Workbench window is selected.&lt;br /&gt;
&lt;br /&gt;
=== Execute Command ===&lt;br /&gt;
&lt;br /&gt;
{{Note|This menu item is provided for users familiar with AmigaDOS.}}&lt;br /&gt;
&lt;br /&gt;
The Execute Command executes (starts) an AmigaDOS command without opening a Shell window. Figure 4-2 illustrates an Execute Command requester.&lt;br /&gt;
&lt;br /&gt;
[[File:WorkbenchFig4-2.png|frame|none|Execute Command Window]]&lt;br /&gt;
&lt;br /&gt;
Enter the command and all of its arguments in the requester.&lt;br /&gt;
&lt;br /&gt;
A Workbench Output Window is automatically opened when a command results in output and it remains there until you select its close gadget. The current directory for an Execute Command operation is RAM:.&lt;br /&gt;
&lt;br /&gt;
=== Open volume ===&lt;br /&gt;
&lt;br /&gt;
=== Redraw All ===&lt;br /&gt;
&lt;br /&gt;
Redraw All redraws all open Workbench windows in the Workbench screen and can be used in the event of a disturbance to the Workbench. If Redraw All does not restore the windows to their proper appearance, reboot the computer.&lt;br /&gt;
&lt;br /&gt;
=== Update All ===&lt;br /&gt;
&lt;br /&gt;
Update All reopens each open Workbench window, updating its appearance to show its current state.&lt;br /&gt;
&lt;br /&gt;
{{Note|If you have several windows open and have been using the Shell or an application to change to the contents of a disk, the changes may not be reflected in its windows until you close the windows and reopen them or choose Update All.}}&lt;br /&gt;
&lt;br /&gt;
=== Last Message ===&lt;br /&gt;
&lt;br /&gt;
Last Message retrieves the last information or error message that appeared on the title bar.&lt;br /&gt;
&lt;br /&gt;
=== About ===&lt;br /&gt;
&lt;br /&gt;
About opens a requester showing the internal version number of the Workbench and Kickstart software, as well as copyright information. Select the OK gadget to close the requester.&lt;br /&gt;
&lt;br /&gt;
=== Quit ===&lt;br /&gt;
&lt;br /&gt;
Quit closes all Workbench operations, making additional RAM available if needed. The Workbench does not close if there are any programs running, including programs that do not open a window and programs that are in your WBStartup drawer.&lt;br /&gt;
&lt;br /&gt;
The only windows that can remain open while using Quit are the disk, drawer, and Shell windows. Once you OK the Quit requester, a Shell window is your only link to the Amiga. You can use the Shell icon in the System drawer to open a Shell window before quitting the Workbench.&lt;br /&gt;
&lt;br /&gt;
Return to the Workbench by typing LOADWB (load Workbench) at the Shell prompt and pressing Return. If there is no Shell window open, you must reboot to return to the Workbench.&lt;br /&gt;
&lt;br /&gt;
The close gadget on the Workbench window is the same as choosing Quit.&lt;br /&gt;
&lt;br /&gt;
== Window Menu ==&lt;br /&gt;
&lt;br /&gt;
The Window menu is only available when a Workbench window is selected. The Window menu allows you to create new drawers, select the contents of the window, rearrange the contents, change how the contents are displayed, and close the window. The available window options are:&lt;br /&gt;
&lt;br /&gt;
=== New Drawer ===&lt;br /&gt;
&lt;br /&gt;
To create a new drawer:&lt;br /&gt;
&lt;br /&gt;
# Select the window in which you want to create the drawer.&lt;br /&gt;
# Choose New Drawer from the Window menu. The drawer is created and named &amp;quot;Unnamed1&amp;quot;.&lt;br /&gt;
# A Rename requester prompts you to change the name of the drawer.&lt;br /&gt;
# Delete the existing name using the DEL key, enter a new name, and press Return or select OK. Selecting Cancel leaves the default name on the new drawer. &lt;br /&gt;
&lt;br /&gt;
=== Open Parent ===&lt;br /&gt;
&lt;br /&gt;
A window&#039;s parent is the window that contains its icon. With the exception of the Workbench window, every Workbench disk window has a parent window.&lt;br /&gt;
&lt;br /&gt;
Open Parent opens the selected window&#039;s parent or brings it to the front of the display if it is already open.&lt;br /&gt;
&lt;br /&gt;
=== Close ===&lt;br /&gt;
&lt;br /&gt;
Close closes and removes the selected window from the screen.&lt;br /&gt;
&lt;br /&gt;
Mouse shortcut: For many windows, you can select the close gadget in the upper left corner of the window.&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Update redraws the selected window, including any changes made to the contents through the Shell or the Execute Command menu item. Such changes are not reflected until the window is updated or reopened.&lt;br /&gt;
&lt;br /&gt;
=== Select Contents ===&lt;br /&gt;
&lt;br /&gt;
Select Contents selects all of the icons in the current window.&lt;br /&gt;
&lt;br /&gt;
=== Clean Up ===&lt;br /&gt;
&lt;br /&gt;
Clean Up automatically arranges all the icons in the selected window so that they do not overlap. This arrangement is not saved until you use the Snapshot menu item described below.&lt;br /&gt;
&lt;br /&gt;
=== Snapshot ===&lt;br /&gt;
&lt;br /&gt;
Snapshot saves the arrangement and position of icons in a window. It is commonly used following Clean Up. Snapshot has a submenu containing two items: Window and All.&lt;br /&gt;
&lt;br /&gt;
Snapshot Window saves the position and size of the selected window, as well as the Show and View By settings described below. However, it does not save the position of the icons in the window.&lt;br /&gt;
&lt;br /&gt;
Snapshot All saves the position and other settings of all the icons in the selected window, as well as the position and size of the window.&lt;br /&gt;
&lt;br /&gt;
=== Show ===&lt;br /&gt;
&lt;br /&gt;
Show controls the types of icons that are displayed on a window. Show has two submenu items: Only Icons and All Files.&lt;br /&gt;
&lt;br /&gt;
Show Only Icons is the default Show mode, displaying only those files and drawers that have icons (.info files).&lt;br /&gt;
&lt;br /&gt;
Show All Files provides a pseudo-icon for each file or drawer in the selected window that does not have a real icon. Pseudo-icons can be treated like any other icon, including manipulating them with the menu items in the Icon menu.&lt;br /&gt;
&lt;br /&gt;
You may have to scroll in the window to see the new pseudo-icons.&lt;br /&gt;
&lt;br /&gt;
=== View By ===&lt;br /&gt;
&lt;br /&gt;
View By changes how the information in the window is displayed. View By has four submenu items: Icons, Name, Date, and Size.&lt;br /&gt;
&lt;br /&gt;
View By Icons is the window&#039;s default mode.&lt;br /&gt;
&lt;br /&gt;
Choosing View By Name, View By Date, or View By Size displays a window&#039;s contents in text form, including the size of the file, its attributes (whether it can be read, deleted, executed, or written to), and its timestamp.&lt;br /&gt;
&lt;br /&gt;
File and drawer names can be selected, opened, dragged, and manipulated just like icons.&lt;br /&gt;
&lt;br /&gt;
View By Name sorts the file list in alphabetical order.&lt;br /&gt;
&lt;br /&gt;
View By Date sorts the list in chronological order, with the most recently created file listed first.&lt;br /&gt;
&lt;br /&gt;
View By Size sorts the list by size, listing the smallest file first.&lt;br /&gt;
&lt;br /&gt;
== Icons Menu ==&lt;br /&gt;
&lt;br /&gt;
The Icons menu allows you to work with the icons on the screen. An icon must be selected before the menu options illustrated in Figure 4-3 become available.&lt;br /&gt;
&lt;br /&gt;
[[File:WorkbenchFig4-3.png|frame|none|Icons Menu]]&lt;br /&gt;
&lt;br /&gt;
=== Open ===&lt;br /&gt;
&lt;br /&gt;
Opening an icon makes a program or window available.&lt;br /&gt;
&lt;br /&gt;
When you open a disk or drawer icon, a window displays the icons contained on that disk or in that drawer. When an individual project or tool is opened, the corresponding program starts.&lt;br /&gt;
&lt;br /&gt;
Open an icon by selecting it an choosing Open.&lt;br /&gt;
&lt;br /&gt;
Mouse Shortcut: Point to the icon and double-click the selection button.&lt;br /&gt;
&lt;br /&gt;
=== Copy ===&lt;br /&gt;
&lt;br /&gt;
Copy allows you to duplicate disks, drawers, programs, or files within a window. To copy material to another window, use the drag-copy method described in Chapter 3. Drag-copying is the easiest method of copying a disk on a two-floppy-system.&lt;br /&gt;
&lt;br /&gt;
Use Copy for making backup copies of your disks.&lt;br /&gt;
&lt;br /&gt;
To copy a drawer, project, or icon:&lt;br /&gt;
&lt;br /&gt;
# Select the icon.&lt;br /&gt;
# Choose Copy from the Icons menu. &lt;br /&gt;
&lt;br /&gt;
Copying disks on single-floppy disk drive systems entails a process known as swapping. Source and destination disks are swapped in the single drive as the system first reads information from the source disk and the writes it to the destination disk. The destination disk must be write-enabled, but need not be formatted since Copy formats the disk as it writes to it. Be sure to copy to disks of the same density as the original disks.&lt;br /&gt;
&lt;br /&gt;
To copy a disk on a single-floppy disk drive system:&lt;br /&gt;
&lt;br /&gt;
# Insert the source disk into the Amiga&#039;s internal disk drive.&lt;br /&gt;
# Select the source disk&#039;s icon.&lt;br /&gt;
# Choose Copy from the Icons menu. Insert the Workbench disk, if necessary.&lt;br /&gt;
# If the disk copy requires at least five swaps, a requester tells you how many swaps are needed. Closing any unnecessary windows or stopping any unwanted programs helps reduce the number of swaps.&lt;br /&gt;
# Select the Continue gadget in the swap requester. During the disk copy, the icon for the disk being copied is unavailable and is labeled &amp;quot;BUSY&amp;quot;.&lt;br /&gt;
# Insert the source disk into the drive when prompted and select Continue. A horizontal bar gauge shows the percentage of the disk copy completed.&lt;br /&gt;
# Insert the destination disk into the drive when prompted and select Continue to copy the information read in from the source disk. Swap the disks as often as requested. When the copy is finished, a Disk Copy Finished message appears.&lt;br /&gt;
# Remove the destination disk from the drive and label it. The destination disk&#039;s icon is labeled with a copy_of_prefix (for example, copy_of_DataDisk). &lt;br /&gt;
&lt;br /&gt;
=== Rename ===&lt;br /&gt;
&lt;br /&gt;
Rename changes the name of an icon. It is used to remove the copy_of_prefix from something you copied, as well as for changing the names of drawers, disks, and files.&lt;br /&gt;
&lt;br /&gt;
To rename an icon:&lt;br /&gt;
&lt;br /&gt;
# Select the icon.&lt;br /&gt;
# Choose Rename from the Icons menu. A requester containing a text gadget displays the current name of the icon.&lt;br /&gt;
# Delete the old name using Backspace or right Amiga+X and enter the new name. Do not use spaces before or after the new name. Because embedded spaces are not visible, they can cause confusion if you have to type in the icon name again.&lt;br /&gt;
# Press Return. The new name appears under the icon.&lt;br /&gt;
&lt;br /&gt;
=== Information ===&lt;br /&gt;
&lt;br /&gt;
Information displays status information about the selected icon&#039;s file. Certain data can also be modified in the Information window. Figure 4-4 illustrates the Information window.&lt;br /&gt;
&lt;br /&gt;
[[File:WorkbenchFig4-4.png|frame|none|Icon Information Window]]&lt;br /&gt;
&lt;br /&gt;
Although the contents of the window varies with the icon, the following information is always displayed:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| title bar || The window title bar indicates the path to the icon.&lt;br /&gt;
|-&lt;br /&gt;
| name || The icon name and its type in parentheses (Volume, Drawer, Tool, Project, or Trashcan).&lt;br /&gt;
|-&lt;br /&gt;
| image || A picture of the icon.&lt;br /&gt;
|-&lt;br /&gt;
| size || The number of blocks and bytes that the disk, project, or tool fills.&lt;br /&gt;
|-&lt;br /&gt;
| stack || The amount of memory reserved as temporary storage for a specific tool.&lt;br /&gt;
|-&lt;br /&gt;
| last changed date || The date on which the icon was created or the last time it was changed (its timestamp).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For a disk icon, the window also shows whether a disk is write-enabled (Read/Write) or write-protected (Read Only).&lt;br /&gt;
&lt;br /&gt;
For a drawer, trashcan, project, or tool, the following attributes can be set or cleared by clicking on the attribute&#039;s check box.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Script || If set, the file is a script (a text file of AmigaDOS commands) and can be run without using the EXECUTE command.&lt;br /&gt;
|-&lt;br /&gt;
| Archived || This attribute is set by backup programs to indicate that a file or directory has been archived (backed up). It is cleared whenever the file is saved.&lt;br /&gt;
|-&lt;br /&gt;
| Readable || If set, information in the file can be read. If this attribute is clear, a tool will not run and a project cannot be loaded by its Default Tool.&lt;br /&gt;
|-&lt;br /&gt;
| Writable || If set, information can be written into the file. Unless Writable is set, you cannot make changes to the file.&lt;br /&gt;
|-&lt;br /&gt;
| Executable || If set, the file is a tool that can be run from Workbench or the Shell. If this attribute is clear, the tool cannot be run from the Shell.&lt;br /&gt;
|-&lt;br /&gt;
| Deletable || If set, the drawer, project, or tool can be erased from the disk. If clear, the object is protected from deletion.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the icon represents a project, there is a Default Tool gadget. This specifies the path to the tool that created the project. When the project icon is opened, the default toll is also opened to work on the project.&lt;br /&gt;
&lt;br /&gt;
If there is a Comments box, you can add a note of up to 79 characters by selecting the text gadget next to Comments, entering the text, and pressing Return.&lt;br /&gt;
&lt;br /&gt;
The Tool Types box specifies different startup options for some programs or files. Icon Tool Types are described in Chapter 3.&lt;br /&gt;
&lt;br /&gt;
To save any changes made to the Information window, select the Save gadget in the lower left corner.&lt;br /&gt;
&lt;br /&gt;
=== Snapshot ===&lt;br /&gt;
&lt;br /&gt;
Snapshot saves the positions of all the currently selected icons. The next time you open the window, the icons that you selected appear in their saved positions. You can save the positions of several icons at one time by using drag selection or extended selection.&lt;br /&gt;
&lt;br /&gt;
To save the position of an icon:&lt;br /&gt;
&lt;br /&gt;
# Select the icon.&lt;br /&gt;
# Choose Snapshot. &lt;br /&gt;
&lt;br /&gt;
=== UnSnapshot ===&lt;br /&gt;
&lt;br /&gt;
UnSnapshot cancels the snapshot position of an icon. The next time you open the window, the icons are rearranged.&lt;br /&gt;
&lt;br /&gt;
To release the snapshot position of an icon:&lt;br /&gt;
&lt;br /&gt;
# Select the icon.&lt;br /&gt;
# Choose UnSnapshot. &lt;br /&gt;
&lt;br /&gt;
=== Leave Out ===&lt;br /&gt;
&lt;br /&gt;
Leave Out moves an often-used icon out of its original window and into the Workbench window for faster access. The file represented by the icon remains in its original drawer on the disk; only the icon is moved. The icon remains in the Workbench window, even if the machine is rebooted. This menu item cannot be used with disks or the Trashcan.&lt;br /&gt;
&lt;br /&gt;
To use Leave Out:&lt;br /&gt;
&lt;br /&gt;
# Select the icon.&lt;br /&gt;
# Choose Leave Out. &lt;br /&gt;
&lt;br /&gt;
The icon moves into the Workbench window.&lt;br /&gt;
&lt;br /&gt;
=== Put Away ===&lt;br /&gt;
&lt;br /&gt;
Put Away returns an icon that was left out to its original drawer.&lt;br /&gt;
&lt;br /&gt;
To use Put Away:&lt;br /&gt;
&lt;br /&gt;
# Select the icon.&lt;br /&gt;
# Choose Put Away. &lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
&lt;br /&gt;
Delete erases files and their icons from your disks.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Caution|text=Use Delete with caution; you cannot retrieve something that was deleted.}}&lt;br /&gt;
&lt;br /&gt;
To delete a file or drawer:&lt;br /&gt;
&lt;br /&gt;
# Select its icon. Use drag selection or extended selection to choose more than one icon to be deleted. Disks and the Trashcan cannot be removed with Delete.&lt;br /&gt;
# Choose Delete from the Icons menu. A warning requester appears, listing the number of files and drawers currently selected. Verify that you want to erase permanently the items listed. Remember that if you delete a drawer, everything contained in it is also deleted.&lt;br /&gt;
# Select the OK gadget. The icon and the files associated with it are erased from your disk. If you do not want to delete everything currently selected, select the Cancel gadget. &lt;br /&gt;
&lt;br /&gt;
=== Format Disk ===&lt;br /&gt;
&lt;br /&gt;
Formatting a disk prepares it for storing information. Format disks that are new and unformatted, disks that develop errors, or disks on which you wish to use different file system options.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Caution|text=Formatting erases all information on a disk. Be careful not to format disks that hold information that you do not want to lose, particularly your original system and software applications disks.}}&lt;br /&gt;
&lt;br /&gt;
Select the icon of the disk to be formatted and choose Format Disk from the Icons menu. The Format window, illustrated in Figure 4-5, displays the current information about the disk. If the disk is already formatted, its volume name and the percentage of the disk currently in use are displayed. A text gadget allows you to enter a new Volume name for the disk.&lt;br /&gt;
&lt;br /&gt;
[[File:WorkbenchFig4-5.png|frame|none|Format Window]]&lt;br /&gt;
&lt;br /&gt;
Five items can be selected (checked) in the Format window:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Put Trashcan || Allows you to put a Trashcan on the disk.&lt;br /&gt;
|-&lt;br /&gt;
| Fast File System || Allows the Amiga to fit more information on a disk. It is faster than the standard file system. Fast File System disks are incompatible with Workbench software releases prior to Release 2.&lt;br /&gt;
|-&lt;br /&gt;
| International Mode || Fully supports international characters in file names. We recommend that you set this option on.&amp;lt;br/&amp;gt;International Mode is incompatible with Workbench software releases prior to Release 2.&lt;br /&gt;
|-&lt;br /&gt;
| Directory Cache || Speeds up the opening of drawers, file requesters, and listings. This option is off by default. Disks using Directory Cache are incompatible with Workbench software releases prior to Release 3. &lt;br /&gt;
|-&lt;br /&gt;
| Long names ||  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Fast File System, International Mode, and Directory Cache can only be specified for AmigaDOS disks. Selecting the Directory Cache option automatically selects International Mode. Disks created with the Directory Cache option can only be read by Amigas running Workbench Release 3.0 and above.&lt;br /&gt;
&lt;br /&gt;
Quick format is for reformatting a disk that was previously formatted. You cannot format a new blank disk with Quick Format. Choosing the Quick Format option is faster than formatting the entire disk; however, it does not detect any read/write errors on the disk that could be eliminated by a full format.&lt;br /&gt;
&lt;br /&gt;
When the disk is formatted, if you did not change he name in the Format window, it is labeled Empty. This name can be changed using the Rename item in the Icons menu.&lt;br /&gt;
&lt;br /&gt;
==== Formatting Hard Disks ====&lt;br /&gt;
&lt;br /&gt;
You must format your hard disk under the following conditions if:&lt;br /&gt;
&lt;br /&gt;
* It is a new unformatted disk.&lt;br /&gt;
* You have a serious unrecoverable disk error.&lt;br /&gt;
* You have repartitioned the disk.&lt;br /&gt;
* You wish to use a different file system option on the disk, such as the Directory Cache option. &lt;br /&gt;
&lt;br /&gt;
Before reformatting your hard disk, be sure to back up all important information from the disk.&lt;br /&gt;
&lt;br /&gt;
The Ram Disk cannot be formatted. If you accidentally select the Ram Disk for formatting, a requester reports that there is a format failure and requires you to select Cancel.&lt;br /&gt;
&lt;br /&gt;
If you have more than one disk icon selected, more than one Format window opens when the Format Disk item is selected from the Icons menu. The format windows open one on top of another so that only one Format window is initially visible. Drag the windows until all are visible. Be sure to check the Current Information field in the Format window for the intended Device and Volume names before allowing the format to continue.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Caution|text=Check the device and volume names carefully. If you accidentally reformat your hard disk instead of a floppy, you will eras all of your files.}}&lt;br /&gt;
&lt;br /&gt;
==== Formatting Floppy Disks ====&lt;br /&gt;
&lt;br /&gt;
The Amiga does not recognize floppy disks that are not formatted; therefore, blank disks must be formatted before anything can be written on them. Disks can be formatted at any time, including while running one or more applications. Disks usually have to be formatted only once.&lt;br /&gt;
&lt;br /&gt;
To determine if a floppy disk is formatted, insert it into a floppy drive and check the disk icon on the Workbench screen. If the Amiga cannot recognize the disk, four question marks (????) follow the drive designation in the icon&#039;s label.&lt;br /&gt;
&lt;br /&gt;
To format a blank disk:&lt;br /&gt;
&lt;br /&gt;
# Write-enable the disk and insert it into a floppy drive.&lt;br /&gt;
# Select its disk icon when it appears on the Workbench screen.&lt;br /&gt;
# Holding down the menu button, point to the Icons menu, move the pointer to the Format Disk item, and release the button.&lt;br /&gt;
# If you have a hard drive on your Amiga, skip to Step 7. If you do not have a hard drive on your Amiga, at the requester insert the workbench disk into any drive.&lt;br /&gt;
# When the Format program has been loaded from the Workbench disk remove the disk from the drive.&lt;br /&gt;
# At the requester, insert the blank disk and select the Continue gadget.&lt;br /&gt;
# In the Format window, change the volume name of the disk from the default Empty; choose whether to put the Trashcan on the disk an other options. Then select Format to continue.&lt;br /&gt;
# A requester warning that all data will be lost if you continue the format appears on the screen. Select either Format or Cancel.&lt;br /&gt;
# During the format a window is displayed that shows the percentage of disk that has been formatted. This window also has a Stop gadget that allows you to cancel the format at any time. &lt;br /&gt;
&lt;br /&gt;
A disk that is partially formatted is not usable.&lt;br /&gt;
&lt;br /&gt;
To format a disk as an MS-DOS disk through CrossDOS, you must have a CrossDos DOSdriver activated. If the PC0 DOSdriver is active, select the disk icon labeled PC0:???? for formatting.&lt;br /&gt;
&lt;br /&gt;
=== Empty Trash ===&lt;br /&gt;
&lt;br /&gt;
Empty Trash deletes the contents of the Trashcan. To use the Trashcan, drag an icon over the Trashcan icon and release the selection button. The icon is then stored in the Trashcan drawer until you decide to permanently throw it away with Empty Trash.&lt;br /&gt;
&lt;br /&gt;
To delete an icon with Empty Trash:&lt;br /&gt;
&lt;br /&gt;
# Drag the icon over the Trashcan and release the selection button. If you open the Trashcan, the icon appears in the Trashcan window.&lt;br /&gt;
# Make sure the Trashcan icon is selected (the lid is displayed open) and choose Empty Trash from the Icons menu. The Trashcan contents are deleted. &lt;br /&gt;
&lt;br /&gt;
An icon can be retrieved from the Trashcan as long as Empty Trash is not chosen. Retrieve an icon by opening the Trashcan window and dragging the icon into any window. You may wish to open the Trashcan window in Show All Files mode and verify its contents before choosing Empty Trash.&lt;br /&gt;
&lt;br /&gt;
The following rules apply to the Trashcan:&lt;br /&gt;
&lt;br /&gt;
* Icons can only be moved to a Trashcan on the same volume.&lt;br /&gt;
* Disks cannot be deleted using the Trashcan.&lt;br /&gt;
* The Trashcan cannot be moved into a drawer.&lt;br /&gt;
* The Trashcan cannot be left out.&lt;br /&gt;
* The Trashcan cannot be deleted with the Delete menu item.&lt;br /&gt;
&lt;br /&gt;
== Tools Menu ==&lt;br /&gt;
&lt;br /&gt;
The Tools Menu initially contains only ResetWB for resetting the Workbench. Other Amiga applications and utilities can add items to the Tools menu. Consult the documentation that came with your applications software for information on adding items to the Tools menu.&lt;br /&gt;
&lt;br /&gt;
= ARexx Interface =&lt;br /&gt;
&lt;br /&gt;
Workbench acts as an ARexx host under the name of &#039;&#039;&#039;WORKBENCH&#039;&#039;&#039;. It supports a number of commands as described in [[Workbench ARexx Port|Appendix F: Workbench ARexx Port]].&lt;br /&gt;
&lt;br /&gt;
= Workbench Programs =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Everything under this title is obsolete!&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WBStartup Drawer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;This drawer is obsolete!&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The WBStartup drawer is provided to hold icons for programs that you want opened at the time the Workbench is started. For example, you may want the Clock program running when you reboot or power on your Amiga. Drag the icon for each desired program into the WBStartup window. The WBStartup drawer is empty by default.&lt;br /&gt;
&lt;br /&gt;
=== Tool Types ===&lt;br /&gt;
&lt;br /&gt;
Programs in the WBStartup drawer can include the following Tool Types:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| DONOTWAIT || Normally the Workbench waits for one program to finish before it opens the next. DONOTWAIT overrides this, which can cause unwanted requesters after booting. DONOTWAIT does not take an argument.&lt;br /&gt;
|-&lt;br /&gt;
| WAIT=&amp;lt;seconds&amp;gt; || Specifies how many seconds the Workbench should wait before opening the next icon in the WBStartup drawer.&lt;br /&gt;
|-&lt;br /&gt;
| STARTPRI=&amp;lt;priority&amp;gt; || Assigns a priority to an icon so that it opens before or after other icons. By default, all icons have a priority of 0. The acceptable range is from -128 to +127; the higher the value, the higher the program&#039;s priority. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Expansion Drawer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;This drawer is obsolete!&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Expansion drawer is used to store software drivers for additional hardware devices that you install on your Amiga. If a hardware device uses the Expansion drawer, it is explained in the documentation packaged with that product. To activate the new device, drag the icon for the device&#039;s software driver into the Expansion drawer and then reboot your system to make the device available.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_Workbench&amp;diff=12334</id>
		<title>AmigaOS Manual: Workbench</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_Workbench&amp;diff=12334"/>
		<updated>2022-11-29T09:02:53Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: Added link to appendix for ARexx interface details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WIP}}&lt;br /&gt;
= Welcome =&lt;br /&gt;
&lt;br /&gt;
The Amiga line of personal computers offers a unique combination of versatility, computing power, and usability.&lt;br /&gt;
&lt;br /&gt;
By working with the Amiga&#039;s easy-to-learn, easy-to-use Workbench interface, any level user - even a beginner - can quickly accomplish tasks or run programs. With Workbench there is no need to memorize long lists of commands. All you have to do is use your mouse to select icons (small pictures that represent tasks) or items from list-like menus to control your Amiga.&lt;br /&gt;
&lt;br /&gt;
Workbench also offers you the freedom to design your own custom system configuration using the Preferences editors and Tools programs provided. You can, for example, create icons and menus for the tasks that you do most. You can fine-tune the system to take ultimate advantage of your Amiga&#039;s superior graphics capability.&lt;br /&gt;
&lt;br /&gt;
Workbench lets you work in your own language and use the monetary and numeric symbols with which you are familiar. Through a simple easy-to-follow process, you can display the Workbench in the language of your choice.&lt;br /&gt;
&lt;br /&gt;
Workbench is not only user-friendly and flexible, but it is also extremely powerful. The Workbench takes full advantage of the Amiga&#039;s ability to multitask, or run several independent programs simultaneously. By simply clicking on an icon, you can switch between programs when you need to. Not only can programs run at the same time on the Amiga, but they can also share information and computer resources, allowing you to do more work without requiring additional software and memory.&lt;br /&gt;
&lt;br /&gt;
Your Amiga and the Workbench provide you with a powerful tool for work or pleasure. Enjoy it!&lt;br /&gt;
&lt;br /&gt;
= Using This Manual =&lt;br /&gt;
&lt;br /&gt;
This manual provides operational instructions and reference material for using your Amiga Workbench. If you have never used an Amiga before, read the entire manual to become familiar with the general operations of your Amiga and the Workbench system. Once you learn the basics, this document can serve as a reference tool. If you are already familiar with the Amiga, be sure to read through the manual for new information that you may not know.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Before You Start|Chapter 1. Before You Start]] This chapter provides instructions for things you need to do and information you need to know before you start using your Amiga, including language selection and installation procedures.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Basic Operations|Chapter 2. Basic Operations]] This chapter describes starting your Amiga, creating and managing disks and files, and using your mouse and keyboard.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Fundamentals|Chapter 3. Fundaments of Workbench]] This chapter describes the elements that comprise the Workbench environment, including screens, windows, menus, icons, gadgets, and requesters.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Using|Chapter 4. Using Workbench]] This chapter provides an overview of the Amiga Workbench system and explains how to command Workbench through its ARexx interface.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Preferences|Chapter 5. Preferences]] This chapter details the information needed to set your Amiga to work monitors, printers, and other peripherals and how to customize your individual Workbench environment.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Emulation|Chapter 6. Classic Amiga Emulation]] This chapter provides information on how to run Classic Amiga programs.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Internet|Chapter 7. Internet]] This chapter explains the programs in the Internet drawer.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: System Tools|Chapter 8. System Tools]] This chapter explains the control programs in the System drawer.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Utilities|Chapter 9. Utilities]] This chapter explains the programs in the Utilities drawer.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Devices|Chapter 10. Devices]] In this chapter you will learn how to install and uninstall data types, DOS drivers, key maps, monitors, net interfaces, and printers.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Localization|Chapter 11. Localization]] This chapter describes the localization options available on the Amiga Workbench including language, date, time, and numeric format.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Monitors|Chapter 12. Monitors]] This chapter describes the monitors that you can use with your Amiga. It includes choosing a monitor and monitor settings for your system. Advanced Graphics Architecture (AGA or AA)-specific information, and a list of the monitor display modes.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Fonts|Chapter 13. Fonts]] This chapter explains how to install and use both bitmap and outline fonts on the Amiga.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Printers|Chapter 14. Printers]] This chapter describes printers and printer options for producing the output that best suits your needs and equipment.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Other Programs|Chapter 15. Other Amiga Programs]] This chapter explains the programs in the Utilities and Commodities drawers.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench CrossDOS|Chapter 16. CrossDOS]] This chapter describes CrossDOS, which allows you to read and write MS-DOS formatted disks on your Amiga.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS_Manual:_AmigaDOS_Using_the_Editors#ED|Chapter 17. ED Editor]] This chapter explains how to use the ED text editor to create and edit text files.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Troubleshooting|Appendix A. Troubleshooting]] This appendix provides solutions to common problems that can occur.&lt;br /&gt;
&lt;br /&gt;
Appendix B. Using Floppy-Only Systems: This appendix provides information for using floppy-only Amigas, including how to copy disks, how to set Preferences, and how to work faster. &#039;&#039;&#039;Obsolete&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: AmigaGuide|Appendix C. AmigaGuide]] This appendix describes AmigaGuide, a hypertext on-line help system available with some applications. Included in this chapter are instructions for using AmigaGuide and descriptions of its menus.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Early Startup|Appendix D. Special Early Startup Control Options]] This appendix provides information on special boot options that allow you to choose display options, diagnose expansion board failures, and to disable devices and processor caches for software compatibility.&lt;br /&gt;
&lt;br /&gt;
[[Keyboard Shortcuts|Appendix E. Keyboard Shortcuts]] This appendix lists the AmigaOS keyboard shortcuts.&lt;br /&gt;
&lt;br /&gt;
[[Workbench ARexx Port|Appendix F. Workbench ARexx Port]] This appendix documents the Workbench ARexx port and supported ARexx commands.&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS Manual: Workbench Glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
= Documentation Conventions =&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this manual:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| KEYWORDS || Keywords are displayed in all upper case letters, however, the arguments are not case-sensitive.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;n&amp;gt; || Angle brackets enclose variable information that you must supply. In place of &amp;lt;n&amp;gt;, substitute the value, text, or option desired. Do not enter the angle brackets when entering the variable.&lt;br /&gt;
|-&lt;br /&gt;
| Courier || Text appearing in the Courier font represents information displayed on your screen.&lt;br /&gt;
|-&lt;br /&gt;
| Key1 + Key2 || Key combinations displayed with a + (plus) sign connecting them indicate pressing the keys simultaneously. For example, &amp;lt;kbd class=&amp;quot;keyboard-key nowrap&amp;quot; style=&amp;quot;border: 1px solid #aaa; border-radius: 0.2em; box-shadow: 0.1em 0.2em 0.2em #ddd; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); padding: 0.1em 0.3em; font-family: inherit; font-size: 0.85em;&amp;quot;&amp;gt;Ctrl&amp;lt;/kbd&amp;gt; + &amp;lt;kbd class=&amp;quot;keyboard-key nowrap&amp;quot; style=&amp;quot;border: 1px solid #aaa; border-radius: 0.2em; box-shadow: 0.1em 0.2em 0.2em #ddd; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); padding: 0.1em 0.3em; font-family: inherit; font-size: 0.85em;&amp;quot;&amp;gt;O&amp;lt;/kbd&amp;gt; means to hold down the &amp;lt;kbd class=&amp;quot;keyboard-key nowrap&amp;quot; style=&amp;quot;border: 1px solid #aaa; border-radius: 0.2em; box-shadow: 0.1em 0.2em 0.2em #ddd; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); padding: 0.1em 0.3em; font-family: inherit; font-size: 0.85em;&amp;quot;&amp;gt;Ctrl&amp;lt;/kbd&amp;gt; key and, while holding it down, press &amp;lt;kbd class=&amp;quot;keyboard-key nowrap&amp;quot; style=&amp;quot;border: 1px solid #aaa; border-radius: 0.2em; box-shadow: 0.1em 0.2em 0.2em #ddd; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); padding: 0.1em 0.3em; font-family: inherit; font-size: 0.85em;&amp;quot;&amp;gt;O&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Key1, Key2 || Key combinations displayed with a comma separating them indicate pressing the keys in sequence. For example, &amp;lt;kbd class=&amp;quot;keyboard-key nowrap&amp;quot; style=&amp;quot;border: 1px solid #aaa; border-radius: 0.2em; box-shadow: 0.1em 0.2em 0.2em #ddd; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); padding: 0.1em 0.3em; font-family: inherit; font-size: 0.85em;&amp;quot;&amp;gt;Esc&amp;lt;/kbd&amp;gt;,&amp;lt;kbd class=&amp;quot;keyboard-key nowrap&amp;quot; style=&amp;quot;border: 1px solid #aaa; border-radius: 0.2em; box-shadow: 0.1em 0.2em 0.2em #ddd; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); padding: 0.1em 0.3em; font-family: inherit; font-size: 0.85em;&amp;quot;&amp;gt;O&amp;lt;/kbd&amp;gt;,&amp;lt;kbd class=&amp;quot;keyboard-key nowrap&amp;quot; style=&amp;quot;border: 1px solid #aaa; border-radius: 0.2em; box-shadow: 0.1em 0.2em 0.2em #ddd; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); padding: 0.1em 0.3em; font-family: inherit; font-size: 0.85em;&amp;quot;&amp;gt;P&amp;lt;/kbd&amp;gt; means to press the &amp;lt;kbd class=&amp;quot;keyboard-key nowrap&amp;quot; style=&amp;quot;border: 1px solid #aaa; border-radius: 0.2em; box-shadow: 0.1em 0.2em 0.2em #ddd; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); padding: 0.1em 0.3em; font-family: inherit; font-size: 0.85em;&amp;quot;&amp;gt;Esc&amp;lt;/kbd&amp;gt; key, followed by the &amp;lt;kbd class=&amp;quot;keyboard-key nowrap&amp;quot; style=&amp;quot;border: 1px solid #aaa; border-radius: 0.2em; box-shadow: 0.1em 0.2em 0.2em #ddd; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); padding: 0.1em 0.3em; font-family: inherit; font-size: 0.85em;&amp;quot;&amp;gt;O&amp;lt;/kbd&amp;gt; key, and then followed by the &amp;lt;kbd class=&amp;quot;keyboard-key nowrap&amp;quot; style=&amp;quot;border: 1px solid #aaa; border-radius: 0.2em; box-shadow: 0.1em 0.2em 0.2em #ddd; background-color: #f9f9f9; background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); padding: 0.1em 0.3em; font-family: inherit; font-size: 0.85em;&amp;quot;&amp;gt;P&amp;lt;/kbd&amp;gt; key.&lt;br /&gt;
|-&lt;br /&gt;
| Amiga keys || Two keys on the Amiga keyboard used for special functions. The left Amiga key is to the left of the space bar and is marked with a large solid A. The right Amiga key is to the right of the space bar and is an outlined A. &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Workbench_ARexx_Port&amp;diff=12333</id>
		<title>Workbench ARexx Port</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Workbench_ARexx_Port&amp;diff=12333"/>
		<updated>2022-11-29T09:02:06Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: Created new appendix as a more intuitive and suitable place for the Workbench ARexx documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ARexx Interface =&lt;br /&gt;
&lt;br /&gt;
Workbench acts as an ARexx host under the name of &#039;&#039;&#039;WORKBENCH&#039;&#039;&#039;. It supports a number of commands as will be described below. Note that for the ARexx interface to work, rexxsyslib.library must be installed (this library is part of a regular Workbench installation) and the [[AmigaOS_Manual:_System_Tools#RexxMast|RexxMast]] program must have been started.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Command &lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Description&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#ACTIVATEWINDOW_command|ACTIVATEWINDOW]] WINDOW || This command will attempt to make a window the active one.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#CHANGEWINDOW_command|CHANGEWINDOW]] WINDOW,LEFTEDGE/N,TOPEDGE/N,WIDTH/N,HEIGHT/N || This command will attempt to change the size and the position of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#DELETE_command|DELETE]] NAME/A,ALL/S || This command is for deleting files and drawers (and their contents).&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#FAULT_command|FAULT]] CODE/A/N || This command will return a human readable explanation corresponding to an error code.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#GETATTR_command|GETATTR]] OBJECT/A,NAME/K,STEM/K,VAR/K || This command will retrieve information from the Workbench database, such the names of the drawers currently open and the icons currently selected.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#HELP_command|HELP]] COMMAND/K,MENUS/S,PROMPT/S || This command can be used to open the online help and to obtain information on the supported menus, commands and command parameters.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#ICON_command|ICON]] WINDOW,NAMES/M,OPEN/S,MAKEVISIBLE/S,SELECT/S,UNSELECT/S, UP/N,DOWN/N,LEFT/N,RIGHT/N,X/N,Y/N,ACTIVATE/K,CYCLE/K, MOVE/K || This command is for manipulating the icons displayed in a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#INFO_command|INFO]] NAME/A || This command is for opening the Workbench icon information requester.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#KEYBOARD_command|KEYBOARD]] NAME/A,ADD/S,REMOVE/S,KEY,CMD/F || This command can be used to bind ARexx commands to key combinations.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#LOCKGUI_command|LOCKGUI]] || This command will block access to all Workbench drawer windows.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#MENU_command|MENU]] WINDOW/K,INVOKE,NAME/K,TITLE/K,SHORTCUT/K,ADD/S,REMOVE/S,CMD/K/F || This command is for invoking items of the Workbench menu, as if the user had selected them with the mouse and for adding/removing user menus.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#MOVEWINDOW_command|MOVEWINDOW]] WINDOW,LEFTEDGE/N,TOPEDGE/N || This command will attempt to change the position of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#NEWDRAWER_command|NEWDRAWER]] NAME/A || This command is for creating new drawers.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#RENAME_command|RENAME]] OLDNAME/A,NEWNAME/A || This command is for renaming files, drawers and volumes.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#RX_command|RX]] CONSOLE/S,ASYNC/S,CMD/A/F || This command is for executing ARexx scripts and commands.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#SIZEWINDOW_command|SIZEWINDOW]] WINDOW,WIDTH/N,HEIGHT/N || This command will attempt to change the size of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#UNLOCKGUI_command|UNLOCKGUI]] || This command will allow access to all Workbench drawer windows locked with the LOCKGUI command.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#UNZOOMWINDOW_command|UNZOOMWINDOW]] WINDOW || This command will attempt to return a window to its original position and dimensions.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#VIEW_command|VIEW]] WINDOW,PAGE/S,PIXEL/S,UP/S,DOWN/S,LEFT/S,RIGHT/S || This command will change the position of the viewable display area of a window.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#WINDOW_command|WINDOW]] WINDOWS/M/A,OPEN/S,CLOSE/S,SNAPSHOT/S,ACTIVATE/S,MIN/S,MAX/S, FRONT/S,BACK/S,CYCLE/K || This command will change, open, close or snapshot windows.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#WINDOWTOBACK_command|WINDOWTOBACK]] WINDOW || This command will push a window into the background.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#WINDOWTOFRONT_command|WINDOWTOFRONT]] WINDOW || This command will bring a window to the foreground.&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| [[AmigaOS_Manual:_Workbench_Using#ZOOMWINDOW_command|ZOOMWINDOW]] WINDOW || This command will change a window to alternate position and dimensions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ACTIVATEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to make a window the active one.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: ACTIVATEWINDOW [WINDOW] &amp;lt;ROOT|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: ACTIVATEWINDOW WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to activate the Workbench root window (where volume icons and AppIcons live) or the fully qualified name of a drawer window to activate. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be activated. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window activated that is not the root window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Activate the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
ACTIVATEWINDOW root&lt;br /&gt;
&lt;br /&gt;
/* Activate the &amp;quot;Work:&amp;quot; partition&#039;s window. */&lt;br /&gt;
ACTIVATEWINDOW &#039;Work:&#039; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CHANGEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to change the size and the position of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: CHANGEWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [[LEFTEDGE] &amp;lt;new left edge position&amp;gt;][[TOPEDGE] &amp;lt;new top edge position&amp;gt;][[WIDTH] &amp;lt;new window width&amp;gt;][[HEIGHT] &amp;lt;new window height&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: CHANGEWINDOW WINDOW,LEFTEDGE/N,TOPEDGE/N,WIDTH/N,HEIGHT/N&lt;br /&gt;
&lt;br /&gt;
; Parameter:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to resize/move the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to change the currently active Workbench window or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: LEFTEDGE&lt;br /&gt;
:: New left edge window position.&lt;br /&gt;
&lt;br /&gt;
: TOPEDGE&lt;br /&gt;
:: New top edge window position.&lt;br /&gt;
: WIDTH&lt;br /&gt;
:: New window width.&lt;br /&gt;
: HEIGHT&lt;br /&gt;
:: New window height.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be changed; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window changed that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window; move it to position 10,30 and change its size to 200x100 pixels. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
CHANGEWINDOW root LEFTEDGE 10 TOPEDGE 30 WIDTH 200 HEIGHT 100&lt;br /&gt;
&lt;br /&gt;
/* Change the currently active window. */&lt;br /&gt;
CHANGEWINDOW active 20 40 200 100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DELETE command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for deleting files and drawers (and their contents).&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: DELETE [NAME] &amp;lt;File or drawer name&amp;gt; [ALL]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: DELETE NAME/A,ALL/S&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the file or drawer or volume to delete.&lt;br /&gt;
&lt;br /&gt;
: ALL&lt;br /&gt;
:: If the object in question is a drawer, attempt to delete the contents of the drawer as well as the drawer itself. If this option is not specified, the DELETE command will only attempt to delete the drawer itself, which may fail if the drawer is not yet empty.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named file, drawer or volume could not be found or could not be deleted.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: The file name given must be an absolute path, such as in &amp;quot;RAM:Empty&amp;quot;. A relative path, such as &amp;quot;/fred/barney&amp;quot; will not work.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Delete the contents of the drawer RAM:Empty&amp;quot;. */&lt;br /&gt;
&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
DELETE &#039;RAM:Empty&#039; ALL &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FAULT command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will return a human readable explanation corresponding to an error code.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: FAULT [CODE] &amp;lt;Error code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: FAULT CODE/A/N&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: CODE&lt;br /&gt;
:: Error code to return a human readable explanation for.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Query the error message corresponding to error code #205. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
OPTIONS RESULTS&lt;br /&gt;
FAULT 205&lt;br /&gt;
SAY result &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GETATTR command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will retrieve information from the Workbench database, such the names of the drawers currently open and the icons currently selected.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: GETATTR [OBJECT] &amp;lt;Object name&amp;gt; [NAME &amp;lt;Item name&amp;gt;][STEM &amp;lt;Name of stem variable&amp;gt;] [VAR &amp;lt;Variable name&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: GETATTR OBJECT/A,NAME/K,STEM/K,VAR/K&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: OBJECT&lt;br /&gt;
:: Name of the database entry to retrieve. For a list of valid entries see below.&lt;br /&gt;
&lt;br /&gt;
: NAME&lt;br /&gt;
:: For some datatabase entries further information is required to identify the data to retrieve. This is when you will need to provide a name.&lt;br /&gt;
&lt;br /&gt;
: STEM&lt;br /&gt;
:: If you request more than one database entry you will need to provide a variable to store the information in. For an example of its use, see below.&lt;br /&gt;
&lt;br /&gt;
: VAR&lt;br /&gt;
:: If you want the queried information to be stored in a specific variable (other than the RESULT variable), this is where you provide its name.&lt;br /&gt;
&lt;br /&gt;
; Attributes:&lt;br /&gt;
: You can obtain information on the following attributes:&lt;br /&gt;
: APPLICATION.VERSION&lt;br /&gt;
:: Version number of workbench.library.&lt;br /&gt;
&lt;br /&gt;
:APPLICATION.SCREEN&lt;br /&gt;
:: Name of the public screen Workbench uses.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.AREXX&lt;br /&gt;
:: Name of the Workbench ARexx port.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.LASTERROR&lt;br /&gt;
:: Number of the last error caused by the ARexx interface.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.ICONBORDER&lt;br /&gt;
:: Sizes of the icon borders, returned as four numbers separated by blank spaces, e.g. &amp;quot;6 26 12 6&amp;quot;. The four numbers represent the left border width, the top border height, the right border width and the bottom border height (in exactly that order).&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SCREEN.NAME&lt;br /&gt;
:: Name of the Workbench screen font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SCREEN.WIDTH APPLICATION.FONT.SCREEN.HEIGHT&lt;br /&gt;
:: Size of a single character of the Workbench screen font. Please note that since the font in question may be proportionally spaced the width information may be of little value. To measure the accurate pixel width of a text in reference to the font, use the .SIZE attribute.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SCREEN.SIZE&lt;br /&gt;
:: Size of a text, measured in pixels, in reference to the screen font. The text to measure must be provided with the NAME parameter of the GETATTR command.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.ICON.NAME&lt;br /&gt;
:: Name of the Workbench icon font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.ICON.WIDTH APPLICATION.FONT.ICON.HEIGHT&lt;br /&gt;
:: Size of a single character of the Workbench icon font. Please note that since the font in question may be proportionally spaced the width information may be of little value. To measure the accurate pixel width of a text in reference to the font, use the .SIZE attribute.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.ICON.SIZE&lt;br /&gt;
:: Size of a text, measured in pixels, in reference to the icon font. The text to measure must be provided with the NAME parameter of the GETATTR command.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.NAME&lt;br /&gt;
:: Name of the system font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.WIDTH&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.HEIGHT&lt;br /&gt;
:: Size of a single character of the system font.&lt;br /&gt;
&lt;br /&gt;
: APPLICATION.FONT.SYSTEM.SIZE&lt;br /&gt;
:: Size of a text, measured in pixels, in reference to the system font. The text to measure must be provided with the NAME parameter of the GETATTR command.&lt;br /&gt;
&lt;br /&gt;
: WINDOWS.COUNT&lt;br /&gt;
:: Number of the drawer windows currently open. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOWS.0 .. WINDOWS.N&lt;br /&gt;
:: Names of the windows currently open.&lt;br /&gt;
&lt;br /&gt;
: WINDOWS.ACTIVE&lt;br /&gt;
:: Name of the currently active Workbench window; this will be &#039; &#039; if none of Workbench&#039;s windows is currently active.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.COUNT&lt;br /&gt;
:: Number of keyboard commands assigned. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.0 .. KEYCOMMANDS.N&lt;br /&gt;
:: Information on all the keyboard commands assigned.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the keyboard command.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.&amp;lt;n&amp;gt;.KEY&lt;br /&gt;
:: The key combination assigned to this keyboard command.&lt;br /&gt;
&lt;br /&gt;
: KEYCOMMANDS.&amp;lt;n&amp;gt;.COMMAND&lt;br /&gt;
:: The ARexx command assigned to this key combination.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.COUNT&lt;br /&gt;
:: Number of menu commands assigned (through the &amp;quot;MENU ADD ..&amp;quot; command). This can be 0.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.0 .. MENUCOMMANDS.N&lt;br /&gt;
:: Information on all the menu commands assigned.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of this menu item.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.TITLE&lt;br /&gt;
:: Title of this menu item.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.SHORTCUT&lt;br /&gt;
:: The keyboard shortcut assigned to this menu item.&lt;br /&gt;
&lt;br /&gt;
: MENUCOMMANDS.&amp;lt;n&amp;gt;.COMMAND&lt;br /&gt;
:: The ARexx command assigned to this menu item.&lt;br /&gt;
&lt;br /&gt;
: The following attributes require the name of the window to obtain information.&lt;br /&gt;
: WINDOW.LEFT&lt;br /&gt;
:: Left edge of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.TOP&lt;br /&gt;
:: Top edge of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.WIDTH&lt;br /&gt;
:: Width of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.HEIGHT&lt;br /&gt;
:: Height of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MIN.WIDTH&lt;br /&gt;
:: Minimum width of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MIN.HEIGHT&lt;br /&gt;
:: Minimum height of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MAX.WIDTH&lt;br /&gt;
:: Maximum width of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.MAX.HEIGHT&lt;br /&gt;
:: Maximum height of the window.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEW.LEFT&lt;br /&gt;
:: Horizontal offset of the drawer contents; this value corresponds to the horizontal window scroller position.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEW.TOP&lt;br /&gt;
:: Vertical offset of the drawer contents; this value corresponds to the vertical window scroller position.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SCREEN.NAME&lt;br /&gt;
:: Name of the public screen the window was opened on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SCREEN.WIDTH WINDOW.SCREEN.HEIGHT&lt;br /&gt;
:: Size of the public screen the window was opened on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.COUNT&lt;br /&gt;
:: Number of the icons displayed in the window. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.0 .. WINDOW.ICONS.ALL.N&lt;br /&gt;
:: Information on all the icons displayed in the window:&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.LEFT WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.TOP&lt;br /&gt;
:: Position of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.WIDTH WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.HEIGHT&lt;br /&gt;
:: Size of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.TYPE&lt;br /&gt;
:: Type of the icon; one of DISK, DRAWER, TOOL, PROJECT,GARBAGE, DEVICE, KICK or APPICON.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.ALL.&amp;lt;n&amp;gt;.STATUS&lt;br /&gt;
:: Whether the icon is selected and (if the icon is a drawer-like object, such as a disk, drawer or trashcan icon) whether the corresponding drawer is currently open or closed. This attribute is returned in the form of a string, such as &amp;quot;SELECTED OPEN&amp;quot; which means that the icon is selected and the corresponding drawer is currently open. The other options include &amp;quot;UNSELECTED&amp;quot; and &amp;quot;CLOSED&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.COUNT&lt;br /&gt;
:: Number of the selected icons displayed in the window. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.0 .. WINDOW.ICONS.SELECTED.N&lt;br /&gt;
:: Information on all selected the icons in the window:&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.LEFT WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.TOP&lt;br /&gt;
:: Position of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.WIDTH WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.HEIGHT&lt;br /&gt;
:: Size of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.TYPE&lt;br /&gt;
:: Type of the icon; one of DISK, DRAWER, TOOL, PROJECT,GARBAGE, DEVICE, KICK or APPICON.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.SELECTED.&amp;lt;n&amp;gt;.STATUS&lt;br /&gt;
:: Whether the icon is selected and (if the icon is a drawer-like object, such as a disk, drawer or trashcan icon) whether the corresponding drawer is currently open or closed. This attribute is returned in the form of a string, such as &amp;quot;SELECTED OPEN&amp;quot; which means that the icon is selected and the corresponding drawer is currently open. The other options include &amp;quot;UNSELECTED&amp;quot; and CLOSED&amp;quot;. Of course, for the WINDOW.ICONS.SELECTED stem the icon status will always be reported as &amp;quot;SELECTED&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.COUNT&lt;br /&gt;
:: Number of the unselected icons displayed in the window. This can be 0.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.0 .. WINDOW.ICONS.UNSELECTED.N&lt;br /&gt;
:: Information on all selected the icons in the window:&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.NAME&lt;br /&gt;
:: Name of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.LEFT WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.TOP&lt;br /&gt;
:: Position of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.WIDTH WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.HEIGHT&lt;br /&gt;
:: Size of the icon in question.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.TYPE&lt;br /&gt;
:: Type of the icon; one of DISK, DRAWER, TOOL, PROJECT, GARBAGE, DEVICE, KICK or APPICON.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.ICONS.UNSELECTED.&amp;lt;n&amp;gt;.STATUS&lt;br /&gt;
:: Whether the icon is selected and (if the icon is a drawer-like object, such as a disk, drawer or trashcan icon) whether the corresponding drawer is currently open or closed. This attribute is returned in the form of a string, such as &amp;quot;UNSELECTED OPEN&amp;quot; which means that the icon is selected and the corresponding drawer is currently open. The other options include &amp;quot;SELECTED&amp;quot; and CLOSED&amp;quot;. Of course, for the WINDOW.ICONS.UNSELECTED stem the icon status will always be reported as &amp;quot;UNSELECTED&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the requester information could not be retrieved, you requested more than one database entry and did not provide a stem variable or if you provided a stem variable but did not request more than one database entry. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: RESULT - The information retrieved from the database.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Query the Workbench version. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
OPTIONS RESULTS&lt;br /&gt;
&lt;br /&gt;
GETATTR application.version&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Query the Workbench version and store it in the * variable &#039;version_number&#039;. */&lt;br /&gt;
GETATTR application.version&lt;br /&gt;
VAR version_number&lt;br /&gt;
SAY version_number&lt;br /&gt;
&lt;br /&gt;
/* Query the names of all currently open windows, * then print them. */&lt;br /&gt;
GETATTR windows&lt;br /&gt;
STEM window_list&lt;br /&gt;
&lt;br /&gt;
DO i = 0 TO ( window_list.count - 1 )&lt;br /&gt;
   SAY window_list.i&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
/* Query name, position and size of the first icon * shown in the root window. */&lt;br /&gt;
GETATTR window.icons.all.0&lt;br /&gt;
NAME root&lt;br /&gt;
STEM root&lt;br /&gt;
&lt;br /&gt;
SAY root.name&lt;br /&gt;
SAY root.left&lt;br /&gt;
SAY root.top&lt;br /&gt;
SAY root.width&lt;br /&gt;
SAY root.height&lt;br /&gt;
SAY root.type&lt;br /&gt;
&lt;br /&gt;
/* Query the width and height of the root window. */&lt;br /&gt;
GETATTR window.width&lt;br /&gt;
NAME root&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
GETATTR window.height&lt;br /&gt;
NAME root&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Query the length of a text (in pixels) with reference * to the icon font. */&lt;br /&gt;
GETATTR application.font.icon.size&lt;br /&gt;
NAME &#039;Text to measure&#039;&lt;br /&gt;
SAY result &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HELP command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command can be used to open the online help and to obtain information on the supported menus, commands and command parameters.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: HELP [COMMAND &amp;lt;Command name&amp;gt;] [MENUS] [PROMPT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: HELP COMMAND/K,MENUS/S,PROMPT/S&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: COMMAND&lt;br /&gt;
:: Name of the command whose command template should be retrieved.&lt;br /&gt;
&lt;br /&gt;
: MENUS&lt;br /&gt;
:: Specify this parameter to retrieve a list of menu items currently available.&lt;br /&gt;
&lt;br /&gt;
: PROMPT&lt;br /&gt;
:: Specify this parameter to invoke the online help system.&lt;br /&gt;
&lt;br /&gt;
:: If no parameter is provided, a list of supported commands will be returned.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named command is not supported by the ARexx interface. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: RESULT&lt;br /&gt;
: The command template, list of menu items or commands, as specified in the command parameters.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Retrieve the list of supported commands. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
OPTIONS results&lt;br /&gt;
&lt;br /&gt;
HELP&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Retrieve the command template of the &#039;GETATTR&#039; command. */&lt;br /&gt;
HELP COMMAND getattr&lt;br /&gt;
SAY result&lt;br /&gt;
&lt;br /&gt;
/* Retrieve the list of available menu items. */&lt;br /&gt;
HELP MENUS&lt;br /&gt;
SAY result &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ICON command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for manipulating the icons displayed in a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: ICON [WINDOW] &amp;lt;Window name&amp;gt; &amp;lt;Icon name&amp;gt; .. &amp;lt;Icon name&amp;gt; [OPEN] [MAKEVISIBLE] [SELECT] [UNSELECT] [UP &amp;lt;Pixels&amp;gt;] [DOWN &amp;lt;Pixels&amp;gt;] [LEFT &amp;lt;Pixels&amp;gt;] [RIGHT &amp;lt;Pixels&amp;gt;] [X &amp;lt;Horizontal position&amp;gt;] [Y &amp;lt;Vertical position&amp;gt;] [ACTIVATE UP|DOWN|LEFT|RIGHT] [CYCLE PREVIOUS|NEXT] [MOVE IN|OUT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: ICON WINDOW,NAMES/M,OPEN/S,MAKEVISIBLE/S,SELECT/S,UNSELECT/S, UP/N,DOWN/N,LEFT/N,RIGHT/N,X/N,Y/N,ACTIVATE/K,CYCLE/K, MOVE/K&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window whose icons should be manipulated. This can be &amp;quot;ROOT&amp;quot; to work on the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to work on the currently active Workbench window or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: NAMES&lt;br /&gt;
:: Names of the icons to manipulate.&lt;br /&gt;
&lt;br /&gt;
: OPEN&lt;br /&gt;
:: Specifies that the named icons should be opened.&lt;br /&gt;
&lt;br /&gt;
: MAKEVISIBLE&lt;br /&gt;
:: Specifies that the named icons should be made visible. This generally works well for the first icon in a list but does not always work for a whole list.&lt;br /&gt;
&lt;br /&gt;
: SELECT&lt;br /&gt;
:: Select the named icons.&lt;br /&gt;
&lt;br /&gt;
: UNSELECT&lt;br /&gt;
:: Unselect the named icons.&lt;br /&gt;
&lt;br /&gt;
: UP, DOWN, LEFT, RIGHT&lt;br /&gt;
:: Move the named icons by the specified number of pixels.&lt;br /&gt;
&lt;br /&gt;
: X, Y&lt;br /&gt;
:: Move the named icons to the specified position.&lt;br /&gt;
&lt;br /&gt;
: ACTIVATE&lt;br /&gt;
:: This command is for activating the icon closest to the currently selected icon in the window. &amp;quot;Activating&amp;quot; in this context means selecting an icon, whilst at the same time unselecting all others. Thus, the &amp;quot;active&amp;quot; icon is the only selected icon in the window.&lt;br /&gt;
&lt;br /&gt;
:: You can indicate which direction the next icon to be activated should be searched for, relative to the currently active icon. &amp;quot;UP&amp;quot; searches upwards, &amp;quot;DOWN&amp;quot; searches downwards, &amp;quot;LEFT&amp;quot; searches to the left and &amp;quot;RIGHT&amp;quot; searches to the right.&lt;br /&gt;
&lt;br /&gt;
: CYCLE&lt;br /&gt;
:: This command is for cycling through all icons in a window, making each one the active one in turn (for a description of what &amp;quot;active&amp;quot; means in this context, see the &amp;quot;ACTIVATE&amp;quot; description above). You must indicate in which direction you want to cycle through the icons: you can either specify &amp;quot;PREVIOUS&amp;quot; or &amp;quot;NEXT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: MOVE&lt;br /&gt;
:: This command is not for moving icons but for moving through a file system hierarchy. Thus, moving &amp;quot;in&amp;quot; will open a drawer and moving &amp;quot;out&amp;quot; will open the drawer&#039;s parent directory. The &amp;quot;IN&amp;quot; parameter will cause the drawer represented by the active icon to be opened. Please note that an icon must be selected and it must be a drawer. The &amp;quot;OUT&amp;quot; parameter will open the drawer&#039;s parent directory, and it also requires that in the drawer there is an icon selected. This may sound strange, but this feature is not meant as a replacement for the &amp;quot;Open Parent&amp;quot; menu item.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found, none of the Workbench windows are currently active and the command was set to work on the currently active Workbench window. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Select the icons of the &amp;quot;Workbench&amp;quot; and &amp;quot;Work&amp;quot; volumes displayed in the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
ICON WINDOW root&lt;br /&gt;
NAMES Workbench Work SELECT&lt;br /&gt;
&lt;br /&gt;
/* Open the &amp;quot;Workbench&amp;quot; volume icon displayed in the root window. */&lt;br /&gt;
ICON WINDOW root&lt;br /&gt;
NAMES Workbench OPEN &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INFO command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for opening the Workbench icon information requester.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: INFO [NAME] &amp;lt;File, drawer or volume name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: INFO NAME/A&lt;br /&gt;
&lt;br /&gt;
; Parameters :&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the file, drawer or volume to open the information window for.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named file, drawer or volume could not be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Open the information window for SYS:&amp;quot;. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
INFO NAME &#039;SYS:&#039; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KEYBOARD command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command can be used to bind ARexx commands to key combinations.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: KEYBOARD [NAME] &amp;lt;Name of key combination&amp;gt; ADD|REMOVE [KEY &amp;lt;Key combination&amp;gt;] [CMD &amp;lt;ARexx command&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: KEYBOARD NAME/A,ADD/S,REMOVE/S,KEY,CMD/F&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the key combination to add or remove. Each key combination must have a name with which it is associated. The name must be unique.&lt;br /&gt;
&lt;br /&gt;
: ADD&lt;br /&gt;
:: This tells the KEYBOARD command to add a new keyboard combination. You will also need to specify the KEY and CMD parameters.&lt;br /&gt;
&lt;br /&gt;
: REMOVE&lt;br /&gt;
:: This tells the KEYBOARD command to remove an existing keyboard combination.&lt;br /&gt;
&lt;br /&gt;
: KEY&lt;br /&gt;
:: The keyboard combination to add; this must be in the same format as used by the Commodities programs.&lt;br /&gt;
&lt;br /&gt;
: CMD&lt;br /&gt;
:: This is the ARexx command to bind to the keyboard combination. The command can either be the name of an ARexx script to execute or a short ARexx program in a single line.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - The command will fail if you tried to add a duplicate of an existing key combination or if the key combination to remove does not exist. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Bind an ARexx script to the [Control]+A key combination.&lt;br /&gt;
 * When pressed, this will cause the ARexx script by the name &lt;br /&gt;
 * &amp;quot;test.wb&amp;quot; to be executed. ARexx will search for that program &lt;br /&gt;
 * in the &amp;quot;REXX:&amp;quot; directory. If no &amp;quot;test.wb&amp;quot; file can be found, ARexx will attempt to execute a script &lt;br /&gt;
 * by the name of &amp;quot;test.rexx&amp;quot;. */&lt;br /&gt;
&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
KEYBOARD ADD NAME test1 KEY ,&amp;quot;ctrl a&amp;quot;, CMD ,&#039;test&#039;&lt;br /&gt;
&lt;br /&gt;
/* Bind an ARexx script to the [Alt]+[F1] key combination. &lt;br /&gt;
 * When pressed, this will cause a short inline program to be &lt;br /&gt;
 * executed. */&lt;br /&gt;
KEYBOARD ADD NAME test2 KEY ,&amp;quot;alt f1&amp;quot;, CMD &amp;quot;say 42&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Bind an ARexx script to the [Shift]+[Help] key combination. &lt;br /&gt;
 * When pressed, this will cause the &amp;quot;Workbench About&amp;quot; menu item to be invoked. */&lt;br /&gt;
KEYBOARD ADD NAME test3 KEY ,&amp;quot;shift help&amp;quot;, CMD &amp;quot;MENU INVOKE WORKBENCH.ABOUT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Remove the first key combination we added above. */&lt;br /&gt;
KEYBOARD REMOVE NAME test1 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LOCKGUI command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will block access to all Workbench drawer windows.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: LOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: LOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: It takes as many UNLOCKGUI commands as there were LOCKGUI commands to make the Workbench drawer windows usable again. In other words, the LOCKGUI command &amp;quot;nests&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Block access to all Workbench drawer windows. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
LOCKGUI &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MENU command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for invoking items of the Workbench menu, as if the user had selected them with the mouse and for adding/removing user menus.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: MENU [WINDOW &amp;lt;Window name&amp;gt;] [INVOKE] &amp;lt;Menu name&amp;gt; [NAME &amp;lt;Menu name&amp;gt;] [TITLE &amp;lt;Menu title&amp;gt;] [SHORTCUT &amp;lt;Menu shortcut&amp;gt;] [ADD|REMOVE] [CMD &amp;lt;ARexx command&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: MENU WINDOW/K,INVOKE,NAME/K,TITLE/K,SHORTCUT/K,ADD/S,REMOVE/S,CMD/K/F&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: The following set of parameters can be used solely for invoking menu items.&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window whose menu should be invoked. This can be &amp;quot;ROOT&amp;quot; to work on the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to work on the currently active Workbench window or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: INVOKE&lt;br /&gt;
:: Name of the menu to invoke. See below for a list of available menu items.&lt;br /&gt;
&lt;br /&gt;
: The following set of parameters are for adding and removing menu items.&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the menu item to add or remove. Each menu item must have a name with which it is associated. The name must be unique and has nothing to do with the title of the item, as shown in the &amp;quot;Tools&amp;quot; menu.&lt;br /&gt;
&lt;br /&gt;
: TITLE&lt;br /&gt;
:: This is the text that will be used as the menu item title, as it will appear in the &amp;quot;Tools&amp;quot; menu. This parameter is required if you ADD a new menu item.&lt;br /&gt;
&lt;br /&gt;
: SHORTCUT&lt;br /&gt;
:: When adding a new menu item, this will be the menu shortcut associated with the item. Please note that the shortcut cannot be longer than a single character and that it will be ignored if there already is an item in any of the menus which uses this shortcut. This parameter is optional.&lt;br /&gt;
&lt;br /&gt;
: ADD&lt;br /&gt;
:: This tells the MENU command to add a new item to the &amp;quot;Tools&amp;quot; menu. When adding a menu item you will also need to specify the NAME, TITLE and CMD parameters.&lt;br /&gt;
&lt;br /&gt;
: REMOVE&lt;br /&gt;
:: This tells the MENU command to remove a menu item previously added via the ARexx interface. When removing a menu item you will also need to specify the NAME parameter.&lt;br /&gt;
&lt;br /&gt;
: CMD&lt;br /&gt;
:: This is the ARexx command to bind to the new menu item. The command can either be the name of an ARexx script to execute or a short ARexx program in a single line.&lt;br /&gt;
&lt;br /&gt;
: Menu items:&lt;br /&gt;
: WORKBENCH.BACKDROP&lt;br /&gt;
:: Toggles the Workbench &amp;quot;Backdrop&amp;quot; window switch.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.EXECUTE&lt;br /&gt;
:: Invokes the Workbench &amp;quot;Execute Command&amp;quot; requester. The user will be prompted to enter the command to be executed.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.REDRAWALL&lt;br /&gt;
:: Invokes the Workbench &amp;quot;Redraw All&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.UPDATEALL&lt;br /&gt;
:: Invokes the Workbench &amp;quot;Update All&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.LASTMESSAGE&lt;br /&gt;
:: Redisplays the last Workbench error message.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.ABOUT&lt;br /&gt;
:: Displays the &amp;quot;Workbench About...&amp;quot; requester.&lt;br /&gt;
&lt;br /&gt;
: WORKBENCH.QUIT&lt;br /&gt;
:: Attempts to close Workbench; this may bring up a requester the user will have to answer.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.NEWDRAWER&lt;br /&gt;
:: Prompts the user to enter the name of a new drawer to be created.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.OPENPARENT&lt;br /&gt;
:: If possible, this will open the parent directory of the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLOSE&lt;br /&gt;
:: If possible, this will close the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.UPDATE&lt;br /&gt;
:: This will update the drawer the command operates on, i.e. the contents will be reread.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SELECTCONTENTS&lt;br /&gt;
:: This will select the contents of the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEARSELECTION&lt;br /&gt;
:: This unselects all icons selected in the drawer the command operates on.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.COLUMN&lt;br /&gt;
:: This will sort the contents of the drawer and place the icons in columns.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.NAME&lt;br /&gt;
:: This will sort the contents of the drawer by name and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.DATE&lt;br /&gt;
:: This will sort the contents of the drawer by date and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.SIZE&lt;br /&gt;
:: This will sort the contents of the drawer by size and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.CLEANUPBY.TYPE&lt;br /&gt;
:: This will sort the contents of the drawer by type and place the icons in rows.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.RESIZETOFIT&lt;br /&gt;
:: This will resize the drawer window, trying to make it just as large as to allow all its icons to fit.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SNAPSHOT.WINDOW&lt;br /&gt;
:: This will snapshot the drawer window, but none of its contents.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SNAPSHOT.ALL&lt;br /&gt;
:: This will snapshot the drawer window and its contents.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SHOW.ONLYICONS&lt;br /&gt;
:: This will change the display mode of the drawer to show only files and drawers which have icons attached.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.SHOW.ALLFILES&lt;br /&gt;
:: This will change the display mode of the drawer to show all files and drawers, regardless of whether they have icons attached or not.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.ICON&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents as icons.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.NAME&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by name.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.DATE&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by date.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.SIZE&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by size.&lt;br /&gt;
&lt;br /&gt;
: WINDOW.VIEWBY.TYPE&lt;br /&gt;
:: This will change the display mode of the drawer to show its contents in textual format, sorted by type.&lt;br /&gt;
&lt;br /&gt;
: ICONS.OPEN&lt;br /&gt;
:: This will open the currently selected icons. Workbench may bring up a requester in case project icons are found which lack a default tool.&lt;br /&gt;
&lt;br /&gt;
: ICONS.COPY&lt;br /&gt;
:: This will duplicate the currently selected icons.&lt;br /&gt;
&lt;br /&gt;
: ICONS.RENAME&lt;br /&gt;
:: This will prompt the user to choose a new name for each currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.INFORMATION&lt;br /&gt;
:: This will open the information window for every currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.SNAPSHOT&lt;br /&gt;
:: This will lock the position of every currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.UNSNAPSHOT&lt;br /&gt;
:: This will unlock the position of every currently selected icon.&lt;br /&gt;
&lt;br /&gt;
: ICONS.LEAVEOUT&lt;br /&gt;
:: This will permanently put all currently selected icons on the Workbench root window.&lt;br /&gt;
&lt;br /&gt;
: ICONS.PUTAWAY&lt;br /&gt;
:: This will move all currently selected icons out of the root window and put them back into the drawers they belong.&lt;br /&gt;
&lt;br /&gt;
: ICONS.DELETE&lt;br /&gt;
:: This will cause all currently selected files to be deleted, provided the user confirms this action first.&lt;br /&gt;
&lt;br /&gt;
: ICONS.FORMATDISK&lt;br /&gt;
:: This will invoke the &amp;quot;Format&amp;quot; command on every currently selected disk icon. This will not format the disks immediately. The user will have to confirm this action first.&lt;br /&gt;
&lt;br /&gt;
: ICONS.EMPTYTRASH&lt;br /&gt;
:: With a trashcan icon selected, this will empty it.&lt;br /&gt;
&lt;br /&gt;
: TOOLS.RESETWB&lt;br /&gt;
:: This will close and reopen all Workbench windows.&lt;br /&gt;
&lt;br /&gt;
: The HELP command will provide a complete list of menu items that can be invoked. Depending on the state of each menu item (e.g. the &amp;quot;Open&amp;quot; menu item will be disabled if no icon is currently selected) the MENU command can silently fail to invoke the item you had in mind.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found, none of the Workbench windows is currently active and the command was set to work on the currently active Workbench window. The command can also fail if you tried to add a duplicate of an existing menu item or if the menu item to remove does not exist. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Invoke the &amp;quot;About&amp;quot; menu. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
MENU WINDOW root INVOKE WORKBENCH.ABOUT&lt;br /&gt;
&lt;br /&gt;
/* Add an item to the &amp;quot;Tools&amp;quot; menu; selecting it&lt;br /&gt;
 * will cause the ARexx script by the name &amp;quot;test.wb&amp;quot;&lt;br /&gt;
 * to be executed. ARexx will search for that program&lt;br /&gt;
 * in the &amp;quot;REXX:&amp;quot; directory. If no &amp;quot;test.wb&amp;quot; file can&lt;br /&gt;
 * be found, ARexx will attempt to execute a script&lt;br /&gt;
 * by the name of &amp;quot;test.rexx&amp;quot;. */&lt;br /&gt;
MENU ADD NAME test1 TITLE ,&amp;quot;Execute a script&amp;quot;, SHORTCUT ,&#039;!&#039; CMD ,&#039;test&#039;&lt;br /&gt;
&lt;br /&gt;
/* Add an item to the &amp;quot;Tools&amp;quot; menu; selecting it&lt;br /&gt;
 * will cause a short inline program to be executed. */&lt;br /&gt;
MENU ADD NAME test2 TITLE ,&amp;quot;Short inline program&amp;quot;, CMD &amp;quot;say 42&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Add an item to the &amp;quot;Tools&amp;quot; menu; selecting it&lt;br /&gt;
 * will cause the Workbench &amp;quot;About&amp;quot; menu item to be invoked. */&lt;br /&gt;
MENU ADD NAME test3 TITLE ,&amp;quot;About...&amp;quot;, CMD &amp;quot;MENU INVOKE WORKBENCH.ABOUT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/* Remove the first menu item we added above. */&lt;br /&gt;
MENU REMOVE NAME test1 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MOVEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to change the position of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: MOVEWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [[LEFTEDGE] &amp;lt;new left edge position&amp;gt;] [[TOPEDGE] &amp;lt;new top edge position&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: MOVEWINDOW WINDOW,LEFTEDGE/N,TOPEDGE/N&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to move the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to move the currently active Workbench window or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: LEFTEDGE&lt;br /&gt;
:: New left edge window position.&lt;br /&gt;
&lt;br /&gt;
: TOPEDGE&lt;br /&gt;
:: New top edge window position.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be moved; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window changed that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Move the root window to position 10,30. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
MOVEWINDOW root LEFTEDGE 10 TOPEDGE 30&lt;br /&gt;
&lt;br /&gt;
/* Move the currently active window. */&lt;br /&gt;
MOVEWINDOW active 20 40 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEWDRAWER command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for creating new drawers.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: NEWDRAWER [NAME] &amp;lt;Name of drawer to create&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: NEWDRAWER NAME/A&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: NAME&lt;br /&gt;
:: Name of the drawer to be created.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named drawer could not be created.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: The drawer name given must be an absolute path, such as in &amp;quot;RAM:Empty&amp;quot;. A relative path, such as &amp;quot;/fred/barney&amp;quot; will not work.&lt;br /&gt;
&lt;br /&gt;
; Example :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Create a drawer by the name of &amp;quot;Empty&amp;quot; in the RAM disk. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
NEWDRAWER &#039;RAM:Empty&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RENAME command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for renaming files, drawers and volumes.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: RENAME [OLDNAME] &amp;lt;Name of file/drawer/volume to rename&amp;gt; [NEWNAME] &amp;lt;New name of the file/drawer/volume&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: RENAME OLDNAME/A,NEWNAME/A&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: OLDNAME&lt;br /&gt;
:: Name of the file/drawer/volume to be renamed. This must be an absolute path, such as in &amp;quot;RAM:Empty&amp;quot;. A relative path, such as &amp;quot;/fred/barney&amp;quot;, will not work.&lt;br /&gt;
&lt;br /&gt;
: NEWNAME&lt;br /&gt;
:: The new name to assign to the file/drawer/volume. This must not be an absolute or relative path. For example, &amp;quot;wilma&amp;quot; is valid new name, &amp;quot;/wilma&amp;quot; or &amp;quot;wilma:&amp;quot; would be invalid names.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the object cannot be renamed.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: The RENAME command does not work like for example the AmigaDOS &amp;quot;Rename&amp;quot; command. For example, RENAME &#039;ram:empty&#039; ,&#039;newname&#039; will rename the file &#039;RAM:empty&#039; to &#039;RAM:newname&#039;.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Rename a drawer by the name of &amp;quot;Old&amp;quot; in the RAM disk to &amp;quot;New&amp;quot;. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
RENAME &#039;RAM:Old&#039; &#039;New&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RX command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command is for executing ARexx scripts and commands.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: RX [CONSOLE] [ASYNC] [CMD] &amp;lt;Command to execute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: RX CONSOLE/S,ASYNC/S,CMD/A/F&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: CONSOLE&lt;br /&gt;
:: This switch indicates that a console (for default I/O) is needed.&lt;br /&gt;
&lt;br /&gt;
: ASYNC&lt;br /&gt;
:: This switch indicates that the command should be run asynchronously, i.e. the &amp;quot;RX&amp;quot; command will return as soon as ARexx has been instructed to run the command you specified. Otherwise, the &amp;quot;RX&amp;quot; command will wait for the specified ARexx command to complete execution.&lt;br /&gt;
&lt;br /&gt;
: COMMAND&lt;br /&gt;
:: This is the name of the ARexx program to execute.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the given ARexx program could not be executed.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Execute an ARexx program by the name of &#039;test.wb&#039;;&lt;br /&gt;
 * its output should be sent to a console window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
RX CONSOLE CMD &#039;test.wb&#039; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SIZEWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to change the size of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: SIZEWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [[WIDTH] &amp;lt;new window width&amp;gt;] [[HEIGHT] &amp;lt;new window height&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: SIZEWINDOW WINDOW,WIDTH/N,HEIGHT/N&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to resize the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to resize the currently active Workbench window or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: WIDTH&lt;br /&gt;
:: New window width.&lt;br /&gt;
&lt;br /&gt;
: HEIGHT&lt;br /&gt;
:: New window height.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be resized; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window resized that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window size to 200x100 pixels. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
SIZEWINDOW root 30 WIDTH 200 HEIGHT 100&lt;br /&gt;
&lt;br /&gt;
/* Resize the currently active window. */&lt;br /&gt;
SIZEWINDOW active 200 100 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UNLOCKGUI command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will allow access to all Workbench drawer windows locked with the LOCKGUI command.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: UNLOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: UNLOCKGUI&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: It takes as many UNLOCKGUI commands as there were LOCKGUI commands to make the Workbench drawer windows usable again. In other words, the LOCKGUI command &amp;quot;nests&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Reallow access to all Workbench drawer windows. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
UNLOCKGUI&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UNZOOMWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will attempt to return a window to its original position and dimensions.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: UNZOOMWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: UNZOOMWINDOW WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window to operate on. &amp;quot;ROOT&amp;quot; will use the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; will use the currently active Workbench window. Any other fully qualified path name will use the drawer window corresponding to the path.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
UNZOOMWINDOW root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VIEW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will change the position of the viewable display area of a window.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: VIEW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt; [PAGE|PIXEL] [UP|DOWN|LEFT|RIGHT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: VIEW WINDOW,PAGE/S,PIXEL/S,UP/S,DOWN/S,LEFT/S,RIGHT/S&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Either &amp;quot;ROOT&amp;quot; to change the Workbench root window view (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; to change the currently active Workbench window view or the fully qualified name of a drawer window to change. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
: UP&lt;br /&gt;
:: Moves the view up by about 1/8 of the window height. If PAGE is specified, moves the view up by a whole page. If PIXEL is specified, moves the view up by a single pixel.&lt;br /&gt;
&lt;br /&gt;
: DOWN&lt;br /&gt;
:: Moves the view down by about 1/8 of the window height. If PAGE is specified, moves the view down by a whole page. If PIXEL is specified, moves the view down by a single pixel.&lt;br /&gt;
&lt;br /&gt;
: LEFT&lt;br /&gt;
:: Moves the view left by about 1/8 of the window width. If PAGE is specified, moves the view left by a whole page. If PIXEL is specified, moves the view left by a single pixel.&lt;br /&gt;
&lt;br /&gt;
: RIGHT&lt;br /&gt;
:: Moves the view right by about 1/8 of the window width. If PAGE is specified, moves the view right by a whole page. If PIXEL is specified, moves the view right by a single pixel.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window view cannot be changed; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as the window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window view changed that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
: To find out about a window&#039;s current view position, use the GETATTR command and query the window&#039;s WINDOW.VIEW.LEFT and WINDOW.VIEW.TOP attributes.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window view; move it up by a whole page. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
VIEW root PAGE UP &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will change, open, close or snapshot windows.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: WINDOW [WINDOWS] &amp;lt;Window name&amp;gt; .. &amp;lt;Window name&amp;gt; [OPEN|CLOSE] [SNAPSHOT] [ACTIVATE] [MIN|MAX] [FRONT|BACK] [CYCLE PREVIOUS|NEXT]&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: WINDOW WINDOWS/M/A,OPEN/S,CLOSE/S,SNAPSHOT/S,ACTIVATE/S,MIN/S,MAX/S, FRONT/S,BACK/S,CYCLE/K&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOWS&lt;br /&gt;
:: Names of the windows to operate on. This can be &amp;quot;ROOT&amp;quot; for the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; for the currently active Workbench window or the fully qualified name of a drawer window.&lt;br /&gt;
&lt;br /&gt;
: OPEN&lt;br /&gt;
:: Attempt to open the specified windows.&lt;br /&gt;
&lt;br /&gt;
: CLOSE&lt;br /&gt;
:: Close the specified windows. Note that if a window is closed no further operations (such as SNAPSHOT, ACTIVATE, etc.) can be performed on it.&lt;br /&gt;
&lt;br /&gt;
: SNAPSHOT&lt;br /&gt;
:: Snapshot the sizes and positions of the specified windows.&lt;br /&gt;
&lt;br /&gt;
: ACTIVATE&lt;br /&gt;
:: Activate the specified windows. With multiple windows to activate, only one window will wind up as the active one. Commonly, this will be the last window in the list.&lt;br /&gt;
&lt;br /&gt;
: MIN&lt;br /&gt;
:: Resize the windows to their minimum dimensions.&lt;br /&gt;
&lt;br /&gt;
: MAX&lt;br /&gt;
:: Resize the windows to their maximum dimensions.&lt;br /&gt;
&lt;br /&gt;
: FRONT&lt;br /&gt;
:: Move the windows into the foreground.&lt;br /&gt;
&lt;br /&gt;
: BACK&lt;br /&gt;
:: Move the windows into the background.&lt;br /&gt;
&lt;br /&gt;
: CYCLE&lt;br /&gt;
:: This command operates on the currently active drawer window. You can specify either &amp;quot;PREVIOUS&amp;quot;, to activate the previous drawer window in the list, or &amp;quot;NEXT&amp;quot;, to activate the next following drawer window in the list.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named windows cannot be opened or operated on; this can also happen if you specified &amp;quot;ACTIVE&amp;quot; as a window name and none of the Workbench windows is currently active. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window operated on that is neither the root nor the active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Open the &amp;quot;Work:&amp;quot; drawer. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
WINDOW &#039;Work:&#039; OPEN&lt;br /&gt;
&lt;br /&gt;
/* Activate the root window. */&lt;br /&gt;
WINDOW root ACTIVATE &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WINDOWTOBACK command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will push a window into the background.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: WINDOWTOBACK [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: WINDOWTOBACK WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: &amp;quot;ROOT&amp;quot; to push the the Workbench root window (where volume icons and AppIcons live) into to the background, &amp;quot;ACTIVE&amp;quot; to push the currently active Workbench window into the background or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window pushed into the background that is not the root window or the currently active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Push the root window into the background. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
WINDOWTOBACK root &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WINDOWTOFRONT command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will bring a window to the foreground.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: WINDOWTOFRONT [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: WINDOWTOFRONT WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: &amp;quot;ROOT&amp;quot; to bring the the Workbench root window (where volume icons and AppIcons live) to the foreground, &amp;quot;ACTIVE&amp;quot; to bring the currently active Workbench window to the foreground or the fully qualified name of a drawer window. Note that the drawer window must already be open.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Notes:&lt;br /&gt;
: If you choose to have a window brought to the foreground that is not the root window or the currently active window you must make sure that the window name is given as a fully qualified path name. For example &amp;quot;Work:&amp;quot; is a fully qualified name, and so is &amp;quot;SYS:Utilities&amp;quot;. &amp;quot;Devs/Printers&amp;quot; would not be a fully qualified name. A fully qualified name always contains the name of an assignment, a volume or a device.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Bring the root window to the foreground. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
WINDOWTOFRONT root &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ZOOMWINDOW command ==&lt;br /&gt;
&lt;br /&gt;
; Purpose:&lt;br /&gt;
: This command will change a window to alternate position and dimensions.&lt;br /&gt;
&lt;br /&gt;
; Format:&lt;br /&gt;
: ZOOMWINDOW [WINDOW] &amp;lt;ROOT|ACTIVE|Drawer name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template:&lt;br /&gt;
: ZOOMWINDOW WINDOW&lt;br /&gt;
&lt;br /&gt;
; Parameters:&lt;br /&gt;
: WINDOW&lt;br /&gt;
:: Name of the window to operate on. &amp;quot;ROOT&amp;quot; will use the Workbench root window (where volume icons and AppIcons live), &amp;quot;ACTIVE&amp;quot; will use the currently active Workbench window. Any other fully qualified path name will use the drawer window corresponding to the path.&lt;br /&gt;
:: If no WINDOW parameter is specified, this command will try to operate on the currently active Workbench window.&lt;br /&gt;
&lt;br /&gt;
; Errors:&lt;br /&gt;
: 10 - If the named window cannot be found. The error code will be placed in the WORKBENCH.LASTERROR variable.&lt;br /&gt;
&lt;br /&gt;
; Result:&lt;br /&gt;
: -&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rexx&amp;quot;&amp;gt;&lt;br /&gt;
/* Change the root window. */&lt;br /&gt;
ADDRESS workbench&lt;br /&gt;
&lt;br /&gt;
ZOOMWINDOW root &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=User_talk:Janne_Per%C3%A4aho&amp;diff=11073</id>
		<title>User talk:Janne Peräaho</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=User_talk:Janne_Per%C3%A4aho&amp;diff=11073"/>
		<updated>2020-01-31T16:07:05Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Moved Workbench ARexx commands ==&lt;br /&gt;
&lt;br /&gt;
Janne, you have moved the Workbench ARexx commands chapter from ARexx to the Workbench manual... But there&#039;s no obvious chapter for ARexx in the Workbench manual, and there&#039;s no link from the ARexx manual either. How should people find this information? Ideally you should have both.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
    Rob&lt;br /&gt;
&lt;br /&gt;
: Hello Rob,&lt;br /&gt;
&lt;br /&gt;
: Yes, I moved the Workbench ARexx commands to the Workbench manual&#039;s [[AmigaOS_Manual:_Workbench_Using|Chapter 4. Using Workbench]], under the title [[AmigaOS_Manual:_Workbench_Using#ARexx_Interface|3 ARexx Interface]]. The reason for doing this was that Workbench is not the only program included in AmigaOS that has an ARexx port. The idea was that all programs included in AmigaOS that have an ARexx port will be listed in the ARexx manual&#039;s [[AmigaOS_Manual:_ARexx_Compatible_Applications|Appendix F. ARexx Compatible Applications]] along with some general information. The list was supposed to make it easier to find the ARexx compatible applications and their ARexx commands.&lt;br /&gt;
: &lt;br /&gt;
: I admit the application list is somewhat hidden. A better solution would be to create a new chapter in the ARexx manual and explain how one can control applications using ARexx and present the application list in that chapter. Workbench could have its own section in the chapter, but I would keep the Workbench ARexx commands in the Workbench manual just like the other applications&#039; ARexx commands are part of their documentation.&lt;br /&gt;
&lt;br /&gt;
: [[User:Janne Peräaho|Janne Peräaho]] ([[User talk:Janne Peräaho|talk]]) 04:39, 8 September 2019 (CEST)&lt;br /&gt;
&lt;br /&gt;
Hi Janne,&lt;br /&gt;
It&#039;s true there are plenty of other applications that support ARexx, but Workbench is pretty special in that it&#039;s the core of the whole user interaction with the machine, which is why the ARexx manual (which is an OS manual, remember, not a manual for every application) included Workbench.&lt;br /&gt;
&lt;br /&gt;
But the problem is not the obscurity of the list of applications, it&#039;s the location of the Workbench ARexx information. There is still no easy link to it from either the ARexx or Workbench manuals, requiring a lot of to-ing and fro-ing to find it. So in recent times, I just refer to the 3.9 manual, which is laid out more logically. But, regardless of whether it should be in the Workbench manual or in the ARexx manual isn&#039;t a big deal - the real problem with how you&#039;ve arranged it is that it&#039;s not discoverable. You&#039;ve tacked it onto the end of the usage chapter, which is a very different level of focus to ARexx information - if someone needs to be looking in the chapter that explains what the Rename menu item does, they&#039;re probably not at the level of experience needed for automating such features in their own programs. And similarly, if someone is looking for the syntax for accessing icon metadata from ARexx, they don&#039;t really need to scroll down past the descriptions of what the Icon information window does to get there. It needs its own, separate chapter - since it&#039;s not originally in the Workbench manual, the place that makes most sense is as a new appendix. After all, it was an appendix of the ARexx manual in the first place.&lt;br /&gt;
&lt;br /&gt;
Please move the ARexx section into its own chapter, and add suitable high-level references to the ARexx chapter from wherever else you feel appropriate. I would suggest in the main contents of the ARexx manual, since users familiar with the manual from previous versions of the OS will expect it there. It&#039;s a waste having the information squirrelled away where only you can easily find it. If you prefer, I&#039;ll do it the way I see fit, but I&#039;ll leave it for a while to let you have a chance to do it your way first.&lt;br /&gt;
&lt;br /&gt;
Rob&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=User_talk:Janne_Per%C3%A4aho&amp;diff=11072</id>
		<title>User talk:Janne Peräaho</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=User_talk:Janne_Per%C3%A4aho&amp;diff=11072"/>
		<updated>2020-01-31T16:06:50Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Moved Workbench ARexx commands ==&lt;br /&gt;
&lt;br /&gt;
Janne, you have moved the Workbench ARexx commands chapter from ARexx to the Workbench manual... But there&#039;s no obvious chapter for ARexx in the Workbench manual, and there&#039;s no link from the ARexx manual either. How should people find this information? Ideally you should have both.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
    Rob&lt;br /&gt;
&lt;br /&gt;
: Hello Rob,&lt;br /&gt;
&lt;br /&gt;
: Yes, I moved the Workbench ARexx commands to the Workbench manual&#039;s [[AmigaOS_Manual:_Workbench_Using|Chapter 4. Using Workbench]], under the title [[AmigaOS_Manual:_Workbench_Using#ARexx_Interface|3 ARexx Interface]]. The reason for doing this was that Workbench is not the only program included in AmigaOS that has an ARexx port. The idea was that all programs included in AmigaOS that have an ARexx port will be listed in the ARexx manual&#039;s [[AmigaOS_Manual:_ARexx_Compatible_Applications|Appendix F. ARexx Compatible Applications]] along with some general information. The list was supposed to make it easier to find the ARexx compatible applications and their ARexx commands.&lt;br /&gt;
: &lt;br /&gt;
: I admit the application list is somewhat hidden. A better solution would be to create a new chapter in the ARexx manual and explain how one can control applications using ARexx and present the application list in that chapter. Workbench could have its own section in the chapter, but I would keep the Workbench ARexx commands in the Workbench manual just like the other applications&#039; ARexx commands are part of their documentation.&lt;br /&gt;
&lt;br /&gt;
: [[User:Janne Peräaho|Janne Peräaho]] ([[User talk:Janne Peräaho|talk]]) 04:39, 8 September 2019 (CEST)&lt;br /&gt;
&lt;br /&gt;
Hi Janne,&lt;br /&gt;
    It&#039;s true there are plenty of other applications that support ARexx, but Workbench is pretty special in that it&#039;s the core of the whole user interaction with the machine, which is why the ARexx manual (which is an OS manual, remember, not a manual for every application) included Workbench.&lt;br /&gt;
&lt;br /&gt;
But the problem is not the obscurity of the list of applications, it&#039;s the location of the Workbench ARexx information. There is still no easy link to it from either the ARexx or Workbench manuals, requiring a lot of to-ing and fro-ing to find it. So in recent times, I just refer to the 3.9 manual, which is laid out more logically. But, regardless of whether it should be in the Workbench manual or in the ARexx manual isn&#039;t a big deal - the real problem with how you&#039;ve arranged it is that it&#039;s not discoverable. You&#039;ve tacked it onto the end of the usage chapter, which is a very different level of focus to ARexx information - if someone needs to be looking in the chapter that explains what the Rename menu item does, they&#039;re probably not at the level of experience needed for automating such features in their own programs. And similarly, if someone is looking for the syntax for accessing icon metadata from ARexx, they don&#039;t really need to scroll down past the descriptions of what the Icon information window does to get there. It needs its own, separate chapter - since it&#039;s not originally in the Workbench manual, the place that makes most sense is as a new appendix. After all, it was an appendix of the ARexx manual in the first place.&lt;br /&gt;
&lt;br /&gt;
Please move the ARexx section into its own chapter, and add suitable high-level references to the ARexx chapter from wherever else you feel appropriate. I would suggest in the main contents of the ARexx manual, since users familiar with the manual from previous versions of the OS will expect it there. It&#039;s a waste having the information squirrelled away where only you can easily find it. If you prefer, I&#039;ll do it the way I see fit, but I&#039;ll leave it for a while to let you have a chance to do it your way first.&lt;br /&gt;
&lt;br /&gt;
Rob&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=User_talk:Janne_Per%C3%A4aho&amp;diff=10867</id>
		<title>User talk:Janne Peräaho</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=User_talk:Janne_Per%C3%A4aho&amp;diff=10867"/>
		<updated>2019-09-07T00:36:12Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: Created page with &amp;quot;Janne, you have moved the Workbench ARexx commands chapter from ARexx to the Workbench manual... But there&amp;#039;s no obvious chapter for ARexx in the Workbench manual, and there&amp;#039;s...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Janne, you have moved the Workbench ARexx commands chapter from ARexx to the Workbench manual... But there&#039;s no obvious chapter for ARexx in the Workbench manual, and there&#039;s no link from the ARexx manual either. How should people find this information? Ideally you should have both.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
    Rob&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_AmigaDOS_Command_Reference&amp;diff=9958</id>
		<title>AmigaOS Manual: AmigaDOS Command Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_AmigaDOS_Command_Reference&amp;diff=9958"/>
		<updated>2019-02-06T09:37:49Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* ADDBUFFERS */ Fixed typo (sloppy drives -&amp;gt; floppy drives...)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The commands in this chapter are executed from the Shell window. They are described in alphabetic order; however, some commands reserved for system use appear together at the end of the chapter.&lt;br /&gt;
&lt;br /&gt;
= Command Documentation =&lt;br /&gt;
&lt;br /&gt;
Each command documented in this manual is shown with the format, arguments, options, symbols, and abbreviations required for proper use.&lt;br /&gt;
&lt;br /&gt;
This chapter and Chapter 7 provide command specifications for the AmigaDOS commands and the Workbench programs accessible through the Shell using the following standard outline:&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: All the arguments and options accepted by a command. The special characters that indicate the particular type of argument are described on page 6-6.&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: An optional on-line reminder of the command&#039;s format that is embedded in the program&#039;s code. Entering a command followed by a space and a question mark (for example, DIR ?) displays the template. A complete description of the template notation is found on page 6-8.&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: The directory where the command is normally stored.&lt;br /&gt;
&lt;br /&gt;
; Examples&lt;br /&gt;
: A sample use of the command. Examples are displayed in the courier typeface to distinguish them from normal text. The 1&amp;gt; represents the Shell prompt; do not type it as part of the example command. Lines in the example not prefaced by 1&amp;gt; represent the output of a command. Command names and keywords are shown in all upper case letters and file and directory names usually have the first letter in upper case; however, they do not need to be entered that way. Press Return to execute the command line.&lt;br /&gt;
&lt;br /&gt;
Separate commands and arguments with spaces. Use punctuation only when required in the syntax of specific commands.&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The following lists the characters that indicate the type of argument shown in format listings. Do not use these characters as part of the command.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &amp;lt; &amp;gt; || Angle brackets indicate where additional information, such as a file name, must be included. This argument is required if it is not surrounded by square brackets. (For example, [&amp;lt;filename&amp;gt;]; see below.)&lt;br /&gt;
|-&lt;br /&gt;
| [ ] || Square brackets enclose optional arguments and keywords. Although not required, these arguments and keywords are accepted by the command.&lt;br /&gt;
|-&lt;br /&gt;
| { } || Braces enclose items that can be given once or repeated any number of times. For example, {&amp;lt;args&amp;gt;} indicates that several items can be given for this argument.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; || Vertical bars separate lists of options from which you can choose only one. For example, &amp;lt;nowiki&amp;gt;[OPT R|S|RS]&amp;lt;/nowiki&amp;gt; indicates a choice of the R option, the S option, or both options.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;n&amp;gt; || A numeric value is expected by the argument.&lt;br /&gt;
|-&lt;br /&gt;
| KEYWORD || Italics indicate that the argument&#039;s keyword is required if you include that argument.&lt;br /&gt;
|-&lt;br /&gt;
| ... || An ellipsis (...) after a string argument indicates that the string must be the final argument on the command line. Including a comment is not allowed. The remainder of the command line is taken as the desired string. Quotation marks are not needed around the string, even if it contains spaces. If you enter quotation marks, they are part of the string. If you specify the keyword, you can put leading and trailing spaces in the string.&lt;br /&gt;
|-&lt;br /&gt;
| command line indentation || On command lines that are long enough to wrap to the next line, this manual shows the wrapped lines as indented for documentation purposes only. In practice, the wrapped lines align with the first character of the Shell prompt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The format for the COPY command illustrates the use of these conventions:&lt;br /&gt;
&lt;br /&gt;
 COPY [FROM] {&amp;lt;name | pattern&amp;gt;} [TO]&amp;lt;name | pattern&amp;gt;[ALL]&lt;br /&gt;
    [QUIET] [BUF | BUFFER=&amp;lt;n&amp;gt;] [CLONE] [DATES] [NOPRO]&lt;br /&gt;
    [COM] [NOREQ]&lt;br /&gt;
&lt;br /&gt;
The [FROM] keyword is optional. If it is not specified, the command reads the file name ir pattern to copy by ist position on the command line.&lt;br /&gt;
&lt;br /&gt;
The {&amp;lt;name | pattern&amp;gt;} argument must be provided. You must substitute either a file name or pattern. The braces indicate that more than one name or pattern can be given.&lt;br /&gt;
&lt;br /&gt;
The [TO] keyword is optional. If it is not specified, the command reads the file name or device to copy to by its position on the command line.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;name | pattern&amp;gt; argument must be provided. You can specify only one destination.&lt;br /&gt;
&lt;br /&gt;
The [ALL], [QUIET], [CLONE], [DATES], [NOPRO], [COM], and [NOREQ] arguments are optional.&lt;br /&gt;
&lt;br /&gt;
The [BUF | BUFFER=&amp;lt;n&amp;gt;] argument is optional. If given, the keyword is required, but you can use either BUF or BUFFER with the numerical argument. For example, both BUF=5 and BUFFER=5 are acceptable. The numerical argument can also be entered without the equals sign; spaces are optional.&lt;br /&gt;
&lt;br /&gt;
== Template ==&lt;br /&gt;
&lt;br /&gt;
The Template is built into the system to serve as an on-line reminder of a command&#039;s syntax and to let you run the command from the Template line by providing a prompt at which you enter the command&#039;s arguments.&lt;br /&gt;
&lt;br /&gt;
Display the Template by entering a question mark (?) after a command. The Shell assumes that you wish to run the command and it expects you to enter the command&#039;s arguments after the colon following the display. For example:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; TYPE ?&lt;br /&gt;
 FROM/A/M,TO/K,OPT/K,HEX/S,NUMBER/S:&lt;br /&gt;
&lt;br /&gt;
Pressing Return executes the command if it does not require any arguments to run properly. Entering the arguments and their respective keywords and then pressing Return also executes the command. If a command requires arguments and you do not supply them or if you enter anything other than the required arguments, pressing Return results in a non-fatal error message. Remember that you do not need to enter the entire format for a command at this prompt, just the required arguments.&lt;br /&gt;
&lt;br /&gt;
The Templates are listed with the arguments separated by commas, followed by a slash (/), and a capital letter indicating the type of argument. These slash/letter combinations are displayed to remind you of the command&#039;s particular requirements and are not entered as part of the command. The following table explains the notation:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Template Notation !! Format Equivalent !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| argument/A || &amp;lt;name&amp;gt; || The argument is always required.&lt;br /&gt;
|-&lt;br /&gt;
| option/K || KEYWORD || The option&#039;s keyword is required if the argument is given.&lt;br /&gt;
|-&lt;br /&gt;
| option/S || [KEYWORD] || The option works as a switch. The name of the option must be entered to specify it. Most options are switches.&lt;br /&gt;
|-&lt;br /&gt;
| value/N || &amp;lt;n&amp;gt; || The argument is numeric.&lt;br /&gt;
|-&lt;br /&gt;
| argument/M || {&amp;lt;name&amp;gt;} || Multiple items are accepted for this argument. Although there is no limit to the number of possible arguments, they must be provided before the next argument or option.&lt;br /&gt;
|-&lt;br /&gt;
| string/F || argument... || The string must be the final argument on the command line; the remainder of the command line is taken as the desired string.&lt;br /&gt;
|-&lt;br /&gt;
| = || KYWD &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; KEYWORD || Two different forms of the keyword are equivalent and either are accepted. The equals sign is not entered as part of the command.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Template for the COPY command illustrates the use of arguments:&lt;br /&gt;
&lt;br /&gt;
 FROM/M,TO/A,ALL/S,QUIET/S,BUF=BUFFER/K/N,&lt;br /&gt;
 CLONE/S,DATES/S,NOPRO/S,COM/S,NOREQ/S&lt;br /&gt;
&lt;br /&gt;
FROM/M indicates that the argument is required and more than one argument is acceptable.&lt;br /&gt;
&lt;br /&gt;
TO/A indicates that the argument is required.&lt;br /&gt;
&lt;br /&gt;
ALL/S, QUIET/S, CLONE/S, DATES/S, NOPRO/S, COM/S, and NOREQ/S indicate that the keywords act as switches. If the keyword is present in the line, the option is used.&lt;br /&gt;
&lt;br /&gt;
BUF=BUFFER/K/N indicates that the BUF or BUFFER keyword (/K) is required to specify this numerical (/N) argument. Both BUF and BUFFER are acceptable keywords (=).&lt;br /&gt;
&lt;br /&gt;
Keywords and their arguments can be linked with an equals sign (=) to ensure correct assignments in complex cases. For example, BUF=20.&lt;br /&gt;
&lt;br /&gt;
= Command Listing =&lt;br /&gt;
&lt;br /&gt;
== ADDAUDIOMODES ==&lt;br /&gt;
&lt;br /&gt;
Manipulates the audio mode list.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ADDAUDIOMODES [FILES &amp;lt;file | pattern&amp;gt;] [QUIET] [REMOVE] [DBLSCAN]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILES/M,QUIET/S,REFRESH/S,REMOVE/S,DBLSCAN/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
Audio modes supported by the Amiga&#039;s audio system (ahi.device) are stored in the DEVS:Audiomodes directory as audio mode description files. Once the ahi.device is initiated, it scans the directory and builds an internal audio mode list based on the description files stored in the Audiomodes directory. The constructed audio mode list exists in RAM and can be manipulated by the ADDAUDIOMODES command.&lt;br /&gt;
&lt;br /&gt;
The internal audio mode list can be cleared, new modes can be added to the list, or the original list can be restored. Note that any changes made to the audio mode list with the ADDAUDIOMODES command are not permanent.&lt;br /&gt;
&lt;br /&gt;
The FILES parameter is used for adding audio modes to the list. The FILES parameter supplies the name or names of the audio mode description files which should be used for adding the new audio modes.&lt;br /&gt;
&lt;br /&gt;
The REMOVE option will remove all audio modes from the internal audio mode list, while the REFRESH option restores the original audio modes by forcing the ahi.device to rebuild the internal audio mode list.&lt;br /&gt;
&lt;br /&gt;
The DBLSCAN option does not have any effect on the audio mode list. Instead it will open and then immediately close a double-scan screen. On the original Amiga hardware this will enable over 28 kHz sample playback frequencies.&lt;br /&gt;
&lt;br /&gt;
If the QUIET option is supplied, ADDAUDIOMODES will not print any messages.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
Rebuild the audio mode list:&lt;br /&gt;
 1&amp;gt; ADDAUDIOMODES REFRESH&lt;br /&gt;
&lt;br /&gt;
== ADDBUFFERS ==&lt;br /&gt;
&lt;br /&gt;
Instructs the file system to add or display cache buffers for a drive.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ADDBUFFERS &amp;lt;drive&amp;gt; [&amp;lt;n&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DRIVE/A,BUFFERS/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
ADDBUFFERS adds &amp;lt;n&amp;gt; buffers to the list of buffers available for &amp;lt;drive&amp;gt;. Although adding buffers speeds disk access, each additional buffer reduces free memory by approximately 512 bytes. The default buffer allocation is 5 for floppy drives and 30 for hard disk partitions.&lt;br /&gt;
&lt;br /&gt;
The amount of extra available memory dictates the number of buffers you can add. There is no fixed upper limit; however, adding too many buffers reduces overall system performance by taking RAM away from other system functions. Specifying a negative number subtracts that many buffers from the current allocation. The minimum number of buffers is one; however, using only one is not recommended.&lt;br /&gt;
&lt;br /&gt;
Twenty buffers are recommended for a floppy drive in a 512 KB system. Use the default value recommended by the HDToolBox program for hard disks. (Display this value by selecting the Advanced Options gadget on the Partitioning screen.)&lt;br /&gt;
&lt;br /&gt;
If only the &amp;lt;drive&amp;gt; argument is specified, ADDBUFFERS displays the number of buffers currently allocated for that drive.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; ADDBUFFERS DF0:&lt;br /&gt;
 DF0: has 5 buffers&lt;br /&gt;
&lt;br /&gt;
A further example of ADDBUFFERS appears in [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]].&lt;br /&gt;
&lt;br /&gt;
== ADDNETINTERFACE ==&lt;br /&gt;
&lt;br /&gt;
Makes network interfaces known to the protocol stack.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ADDNETINTERFACE {&amp;lt;interface&amp;gt;} [QUIET] [TIMEOUT &amp;lt;seconds&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: INTERFACE/M,QUIET/S,TIMEOUT/K/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
ADDNETINTERFACE starts the specified network interfaces, thus starting the connection. It accepts the following parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| INTERFACE || The name of the interface to add; this can be a plain interface name, such as &amp;quot;Ariadne&amp;quot;, or the fully qualified file name which contains the interface configuration information. The tool expects the name of the file in question (without the prefixed path) to become the name of the interface. For historic reasons interface names cannot be longer than 15 characters.&lt;br /&gt;
&lt;br /&gt;
For your convenience, a wild card pattern can be specified in place of the file name to use.&lt;br /&gt;
&lt;br /&gt;
If several interface names are specified, they will be sorted in alphabetical order before they are added. If the interface files have icons attached, you can use tool types such as &amp;quot;PRI=5&amp;quot; or &amp;quot;PRIORITY=5&amp;quot; to select the order in which the interfaces will be sorted. Higher priority entries will appear before lower priority entries. If the priorities for two entries is identical, then the interface names will be compared. If no priority is given, the value 0 will be used.&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || This option causes the program not to emit any error messages or progress reports. Also, if the program encounters an error it will flag this as failure code 5 which can be looked at using the &amp;quot;IF WARN&amp;quot; shell script command. If this option is not in effect, failure codes will be more severe and all sorts of progress information will be displayed.&lt;br /&gt;
|-&lt;br /&gt;
| TIMEOUT || If you&#039;re going to use DHCP configuration for any of the interfaces, a default timeout value of 60 seconds will limit the time an interface can take to be configured. This parameter allows you to use a different timeout value. Note that due to how the configuration protocol works, the timeout cannot be shorter than ten seconds.&lt;br /&gt;
|}&lt;br /&gt;
The &#039;AddNetInterface&#039; command can be invoked from Workbench, too. It operates on the same configuration files with the same keywords, etc. To make it work, create an icon for your interface configuration file (it must be a project icon) and put &#039;AddNetInterface&#039; into its default tool. Make sure that the project has enough stack space assigned (4000 bytes minimum), then double-click on the icon. If things should go wrong, you will see an error requester pop up, and no further initialization will be done. You can configure two options in the project file&#039;s tool types: QUIET and TIMEOUT. These are identical to the two parameters of the same name you could pass on the command line; they define whether the command should print any error messages (the default is to print them) and how long the command should wait for DHCP configuration to conclude (default is a timeout of 60 seconds).&lt;br /&gt;
&lt;br /&gt;
{{Note| This command is similar to the Unix &amp;quot;ifconfig&amp;quot; command.}}&lt;br /&gt;
&lt;br /&gt;
{{Note| The program makes two passes over the configuration files to be taken into account. In the first pass information is gathered on the interfaces to add, which is subsequently used to add those interfaces found. In the second pass interfaces are configured, setting their IP addresses, etc. If anything goes wrong in the first pass, processing will stop and no second pass will be done. If anything goes wrong in either the first or the second pass, that pass will not be completed.}}&lt;br /&gt;
&lt;br /&gt;
; CONFIGURATION FILES&lt;br /&gt;
Interfaces are configured through files stored in the &amp;quot;DEVS:NetInterfaces&amp;quot; or &amp;quot;SYS:Storage/NetInterfaces&amp;quot; directories. These are text files whose contents are described below.&lt;br /&gt;
&lt;br /&gt;
Each line of the file must correspond to an option; if a line is introduced by a &#039;#&#039; or &#039;;&#039; character it will be ignored (so are empty lines). The following options are supported:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| DEVICE/K || Must be provided; the name of the SANA-II device driver. This should be the complete, fully qualified path to the driver. If no complete path is provided, the &#039;Devs:Networks&#039; drawer will be checked. Thus, &amp;quot;DEVS:Networks/ariadne.device&amp;quot; is equivalent to &amp;quot;ariadne.device&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| UNIT/K/N || Unit number of the device driver to open. The default is to use unit 0.&lt;br /&gt;
|-&lt;br /&gt;
| IPTYPE/K/N || You can use this parameter to override the packet type the stack uses when sending IP packets; default is 2048 (for Ethernet hardware).&lt;br /&gt;
|-&lt;br /&gt;
| ARPTYPE/K/N || You can use this parameter to override the packet type the stack uses when sending ARP packets. Default is 2054; this parameter only works with Ethernet hardware and should not be changed.&lt;br /&gt;
|-&lt;br /&gt;
| IPREQUESTS/K/N || The number of IP read requests to allocate and queue for the SANA-II device driver to use. The default value is 32, larger values can improve performance, especially with fast device drivers.&lt;br /&gt;
|-&lt;br /&gt;
| WRITEREQUESTS/K/N || The number of IP write requests to allocate and queue for the SANA-II device driver to use. The default value is 32, larger values can improve performance, especially with fast device drivers.&lt;br /&gt;
|-&lt;br /&gt;
| ARPREQUESTS/K/N || The number of ARP read requests to allocate and queue for the SANA-II device driver to use. The default value is 4.&lt;br /&gt;
|-&lt;br /&gt;
| DEBUG/K (possible parameters: YES or NO) || You can enable debug output for this interface (don&#039;t worry, you can always disable it later) to help in tracking down configuration problems. At this time of writing, the debug mode will, if enabled, produce information on the progress of the DHCP configuration process.&lt;br /&gt;
|-&lt;br /&gt;
| POINTTOPOINT/K (possible parameters: YES or NO) || This indicates that the device is used for point to point connections. The stack automatically figures out whether the SANA-II device driver is of the point to point type, so you should not need to specify this option.&lt;br /&gt;
|-&lt;br /&gt;
| MULTICAST/K (possible parameters: YES or NO) || This tells the stack that this device can handle multicast enabled by default anyway).&lt;br /&gt;
|-&lt;br /&gt;
| DOWNGOESOFFLINE/K (possible parameters: YES or NO) || This option is useful with point to point devices, like &#039;ppp.device&#039;. When specified, bringing the interface &#039;down&#039; (via the &#039;ConfigureNetInterface&#039; program) or shutting down the stack will cause the associated SANA-II device driver to be switched offline (via the &#039;S2_OFFLINE&#039; command).&lt;br /&gt;
|-&lt;br /&gt;
| REPORTOFFLINE/K (possible parameters: YES or NO) || When a device is switched offline, you may want to know about it. This is helpful with SLIP/PPP connections which run over a serial link which accumulates costs while it is open. When the connection is broken and the device goes offline, you will receive a brief notification of what happened. However, if you tell the library itself to shut down, no notification that a device was switched offline will be shown.&lt;br /&gt;
|-&lt;br /&gt;
| REQUIRESINITDELAY/K (possible parameters: YES or NO) || Some devices need a little time to settle after they have been opened or they will hickup and lose data after the first packet has been sent. The original &#039;Ariadne I&#039; card is one such device. For these devices, the &#039;REQUIRESINITDELAY=YES&#039; option will cause a delay of about a second before the first packet is sent.&lt;br /&gt;
&lt;br /&gt;
This option defaults to YES.&lt;br /&gt;
|-&lt;br /&gt;
| COPYMODE/K (possible parameters: SLOW or FAST) || This option is for chasing subtle bugs in the driver interface with cards like the original &#039;Ariadne I&#039;. Cards like these do not support writing to the hardware transmit buffer in units other than 16 bits a piece. Default is &#039;SLOW&#039;, which is compatible with the Ariadne I. But if you&#039;re feeling adventurous, try the &#039;FAST&#039; option (and don&#039;t complain if it doesn&#039;t work for you!).&lt;br /&gt;
|-&lt;br /&gt;
| FILTER/K (possible parameters: OFF, LOCAL, IPANDARP or EVERYTHING) || This option enables the use of the Berkeley packet filter for this particular interface. Possible choices for the key are:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILTER=OFF&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Disables the filter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILTER=LOCAL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Enables filtering on all IP and ARP packets that are intended for this particular interface. Packets intended for other interfaces or hosts are ignored.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILTER=IPANDARP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Enables filtering on all IP and ARP packets that happen to fly by this interface, no matter whether the packets are intended for it or not. This requires that the underlying network device driver is opened for exclusive access in so-called &#039;promiscuous&#039; mode. This may not work if other clients (Envoy, ACS) need to keep the driver opened.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FILTER=EVERYTHING&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Identical to FILTER=IPANDARP, but will also filter all other kinds of packets that may show up.&lt;br /&gt;
&lt;br /&gt;
Default for this option is &#039;FILTER=LOCAL&#039;. Note that by using this option you merely define what the filter mechanism can do and what it cannot do. The filter is not enabled when you add the interface.&lt;br /&gt;
|-&lt;br /&gt;
| HARDWAREADDRESS/K || You can specify the hardware address (layer 2 address, MAC address) this interface should respond to when it is first added and configured. This usually works only once for each interface, which means that once an address has been chosen you have to stick with it until the system is rebooted. And it also means that the first program to configure the address will manage to make its choice stick.&lt;br /&gt;
&lt;br /&gt;
The hardware address must be given as six bytes in hexadecimal notation, separated by colon characters, like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HARDWAREADDRESS=00:60:30:00:11:22&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Take care, there are rules that apply to the choice of the hardware address, which means that you cannot simply pick a convenient number and get away with it. It is assumed that you will want to configure an IEEE 802.3 MAC address, which works for Ethernet hardware and is six bytes (48 bits) in size.&lt;br /&gt;
|}&lt;br /&gt;
In addition to the purely static interface configuration information you can also tell the configuration program to do something about the interfaces once they have all been added. That&#039;s when the following configuration file parameters will be taken into account:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| ADDRESS/K || This configures the IP address of the interface. The parameter you supply should be an IP address in dotted-decimal notation (&amp;quot;192.168.0.1&amp;quot;). Don&#039;t pick a symbolic host name as the system may not yet be in a position to talk to name resolution server and translate the symbolic name.&lt;br /&gt;
&lt;br /&gt;
In place of the IP address you can also specify &amp;quot;DHCP&amp;quot; (Dynamic Host Configuration Protocol). As the name suggests, this will start a configuration process involving the DHCP protocol which should eventually yield the right IP address for this host. Note that this configuration procedure only works for Ethernet hardware.&lt;br /&gt;
|-&lt;br /&gt;
| ALIAS/K/M || In addition to the primary interface address you can assign several aliases to it. These must be specified in dotted-decimal notation (&amp;quot;192.168.0.1&amp;quot;). Alias addresses are added after the primary interface address has been configured.&lt;br /&gt;
|-&lt;br /&gt;
| STATE/K || By default, interfaces whose addresses are configured will switch automatically to &#039;up&#039; state, making it possible for the TCP/IP stack to use them for network I/O. You can override this by using the &#039;STATE=DOWN&#039; switch. The alternatives &#039;online&#039; (implies &#039;up&#039;, but tells the underlying network interface driver to go online first) and &#039;offline&#039; (implies &#039;down&#039; but tells the driver to go offline first) are available as well.&lt;br /&gt;
|-&lt;br /&gt;
| NETMASK/K || This selects the subnet mask for the interface, which must be specified in dotted-decimal notation (&amp;quot;192.0.168.1&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
In place of the subnet mask you can also specify &amp;quot;DHCP&amp;quot; (Dynamic Host Configuration Protocol). As the name suggests, this will start a configuration process involving the DHCP protocol which should eventually yield the right subnet mask for this host. Note that this configuration procedure only works for Ethernet hardware.&lt;br /&gt;
|-&lt;br /&gt;
| DESTINATION=DESTINATIONADDR/K || The address of the point-to-point partner for this interface; must be specified in dotted-decimal notation (&amp;quot;192.168.0.1&amp;quot;). Only works for point-to-point connections, such as PPP.&lt;br /&gt;
|-&lt;br /&gt;
| METRIC/K/N || This configures the interface route metric value. Default is 0.&lt;br /&gt;
|-&lt;br /&gt;
| MTU/K/N || You can limit the maximum transmission size used by the TCP/IP stack to push data through the interface. The interface driver will have its own ideas about the maximum transmission size. You can therefore only suggest a smaller value than the driver&#039;s preferred hardware MTU size.&lt;br /&gt;
|-&lt;br /&gt;
| CONFIGURE/K (possible parameters: DHCP, AUTO or FASTAUTO) || You can use DHCP configuration for this interface and protocol stack internals, namely the list of routers (and the default gateway) to use and the domain name servers. This option allows you to bring up the complete network configuration in one single step.&lt;br /&gt;
&lt;br /&gt;
You can request that a particular IP address is assigned to this interface by the DHCP process by specifying CONFIGURE=DHCP and your choice of ADDRESS=xxx.xxx.xxx.xxx.&lt;br /&gt;
&lt;br /&gt;
If your network has no DHCP server, you may choose CONFIGURE=AUTO to use automatic IPv4 address selection, based upon a protocol called ZeroConf. This protocol will select a currently unused address from a specially designated address range.&lt;br /&gt;
&lt;br /&gt;
If you choose automatic configuration in a wireless network, you might want to use CONFIGURE=FASTAUTO instead of CONFIGURE=AUTO.&lt;br /&gt;
&lt;br /&gt;
Note that only the CONFIGURE=DHCP option will attempt to set up a default route and a set of DNS servers for you to use. The alternatives of CONFIGURE=FASTAUTO and CONFIGURE=AUTO are restricted to selecting the network interface IPv4 addresses.&lt;br /&gt;
|-&lt;br /&gt;
| LEASE/K || This is a complex option which can be used to request how long an IP address should be bound to an interface, via the DHCP protocol. Several combinations of options are possible. Here is a short list:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LEASE=300&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LEASE=300seconds&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This requests a lease of exactly 300 seconds, or five minutes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LEASE=30min&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This requests a lease of 30 minutes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LEASE=2hours&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This requests a lease of 2 hours.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LEASE=1day&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This requests a lease of 1 day.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LEASE=4weeks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This requests a lease of 4 weeks.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LEASE=infinite&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This requests that the IP address should be permanently bound.&lt;br /&gt;
&lt;br /&gt;
Blank spaces between the numbers and the qualifiers are supported. The qualifiers are tested using substring matching, which means for example that &amp;quot;30 minutes&amp;quot; is the same as &amp;quot;30 min&amp;quot; and &amp;quot;30 m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Note that the requested lease time may be ignored by the DHCP server. After all, it is just a suggestion and not an order.&lt;br /&gt;
|-&lt;br /&gt;
| ID/K || This option works along with the CONFIGURE=DHCP process. It can be used to tell the DHCP server by which name the local host should be referred to. Some DHCP servers are on good terms with their local name resolution services and will add the name and the associated IP address to the local host database. The name you can supply here cannot be longer than 255 characters and must be at least 2 characters long. Keep it brief: not all DHCP servers have room for the whole 255 characters.&lt;br /&gt;
|-&lt;br /&gt;
| DHCPUNICAST/K || Some DHCP servers may not be able to respond to requests for assigning IP addresses unless the responses are sent directly to the computer which sent the requests. In such cases you might want to use DHCPUNICAST=YES option.&lt;br /&gt;
|}&lt;br /&gt;
Unsupported keywords in the configuration file (or typos) will be reported, along with the name of the file and the line number.&lt;br /&gt;
&lt;br /&gt;
The name of the configuration file defines the name of the respective interface. Interface names must be unique, and the case of the names does not matter. For historic reasons interface names cannot be longer than 15 characters. Beyond this no restrictions on naming conventions apply.&lt;br /&gt;
&lt;br /&gt;
; DHCP PROTOCOL&lt;br /&gt;
A few words on DHCP (Dynamic Host Configuration Protocol). First, it only works for Ethernet hardware, so please don&#039;t try it with PPP or SLIP. Now it gets a bit technical. Unless you request an address to be permanently assigned, DHCP will assign addresses only for a limited period of time. This is called a &#039;lease&#039;. Once an IP address has been assigned through DHCP, the lease will be repeatedly extended. The DHCP server may over time decide not to extend the lease or assign a new IP address to the interface. To stop the lease from getting extended over and over again, you must either change the interface&#039;s primary IP address or mark it &#039;down&#039;. The library will make a brave attempt to get a DHCPRELEASE datagram out to notify the server that the previously allocated IP address is no longer in use. Don&#039;t count on it to work, though. First, the protocol stack might be going down so fast that it cannot get the datagram out. Second, when you mark an interface &#039;down&#039; you will effectively pull it out of circulation, it will not send any further datagrams. Third, DHCP rides on UDP whose second name is &#039;unreliable datagram protocol&#039;, meaning that any datagram may get lost or corrupted and nobody will hear about it; this is rather hard on DHCP since the release message is sent only once. Don&#039;t worry. Unless you request permanent leases, the leases will eventually time out and the now unused IP address will finally return to the pool of addresses available for allocation.&lt;br /&gt;
&lt;br /&gt;
; Examples&lt;br /&gt;
Start the interface called &amp;quot;DSL&amp;quot; and run quietly.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; AddNetInterface DSL QUIET&lt;br /&gt;
&lt;br /&gt;
An example configuration file for the &amp;quot;Ariadne&amp;quot; interface, with some options commented out:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; Type Devs:NetInterfaces/Ariadne&lt;br /&gt;
 device=ariadne.device&lt;br /&gt;
 unit=0&lt;br /&gt;
 #iprequests=64&lt;br /&gt;
 #writerequests=64&lt;br /&gt;
 copymode=fast&lt;br /&gt;
 #configure=dhcp&lt;br /&gt;
 address=192.168.0.1&lt;br /&gt;
 netmask=255.255.255.0&lt;br /&gt;
 #alias=192.168.0.9&lt;br /&gt;
 #hardwareaddress=00:60:30:00:11:22&lt;br /&gt;
 #id=a3000ux&lt;br /&gt;
 #debug=yes&lt;br /&gt;
 #filter=everything&lt;br /&gt;
&lt;br /&gt;
== ADDNETROUTE ==&lt;br /&gt;
&lt;br /&gt;
Adds message routing paths.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ADDNETROUTE [QUIET] [DESTINATION=&amp;lt;IP&amp;gt;] [HOSTDESTINATION=&amp;lt;IP&amp;gt;] [NETDESTINATION=&amp;lt;IP&amp;gt;] [GATEWAY=&amp;lt;IP&amp;gt;] [DEFAULTGATEWAY=&amp;lt;IP&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: QUIET/S,DST=DESTINATION/K,HOSTDST=HOSTDESTINATION/K,NETDST=NETDESTINATION/K,VIA=GATEWAY/K,DEFAULT=DEFAULTGATEWAY/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
ADDNETROUTE allows to define routes to hosts or networks via an interface.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| QUIET || This option causes the program not to emit any error messages or progress reports. Also, if the program encounters an error it will flag this as failure code 5 which can be looked at using the &amp;quot;if warn&amp;quot; shell script command. If this option is not in effect, failure codes will be more severe and all sorts of progress information will be displayed.&lt;br /&gt;
|-&lt;br /&gt;
| DST or DESTINATION || The destination address of a route (or in other words, where the route to be added leads to). This must be an IP address or a symbolic name. Some routes may require you to specify a gateway address through which the route has to pass. Depending upon the address you specify, the protocol stack will attempt to figure out whether the destination is supposed to be a host or a network.&lt;br /&gt;
|-&lt;br /&gt;
| HOSTDST or HOSTDESTINATION || Same as the DST/DESTINATION parameter, except that the destination is assumed to be a host (rather than a network).&lt;br /&gt;
|-&lt;br /&gt;
| NETDST or NETDESTINATION || Same as the DST/DESTINATION parameter, except that the destination is assumed to be a network (rather than a host).&lt;br /&gt;
|- VIA or GATEWAY || This parameter complements the route destination address; it indicates the address to which a message should be sent for it to be passed to the destination. This must be an IP address or a symbolic name.&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT or DEFAULTGATEWAY || This parameter selects the default gateway address (which must be specified as an IP address or a symbolic host name) all messages are sent to which don&#039;t have any particular other routes associated with them. Another, perhaps less misleading name for &amp;quot;default gateway address&amp;quot; is &amp;quot;default route&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|The command is similar to the Unix &amp;quot;route&amp;quot; command.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|If you use the DEFAULT/DEFAULTGATEWAY parameter, all other destination addresses you may have specified will be ignored. Only one of DESTINATION, HOSTDESTINATION or NETDESTINATION will be used; choose only one. Before you add a new default gateway you should delete the old one or you&#039;ll get an error message instead.}}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Define a route to the host 192.168.10.12 through a gateway at 192.168.1.1&lt;br /&gt;
 1&amp;gt; ADDNETROUTE HOSTDESTINATION 192.168.10.12 VIA 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
; See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#DELETENETROUTE|DELETENETROUTE]]&lt;br /&gt;
&lt;br /&gt;
== ALIAS ==&lt;br /&gt;
&lt;br /&gt;
Sets or displays command aliases.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ALIAS [&amp;lt;name&amp;gt;] [&amp;lt;string...&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME,STRING/F&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
ALIAS creates aliases, or alternative names, for AmigaDOS commands. ALIAS can be used to abbreviate frequently used commands or replace standard command names with different names.&lt;br /&gt;
&lt;br /&gt;
When AmigaDOS encounters &amp;lt;name&amp;gt;, it replaces it with the defined &amp;lt;string&amp;gt;, integrate the result with the rest of the command line, and attempts to interpret and execute the resulting line as an AmigaDOS command &amp;lt;Name&amp;gt; is the alias for the command and &amp;lt;string&amp;gt; is the command to be substituted for the alias.&lt;br /&gt;
&lt;br /&gt;
An alias must be entered at the beginning of the command line. You can enter arguments after the alias, but you cannot create an alias to represent a series of command arguments. For example, in the following command line:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; NEWSHELL WINDOW=CON:0/250/640/150/2SHELL/CLOSE&lt;br /&gt;
&lt;br /&gt;
the WINDOW argument cannot be replaced with an alias.&lt;br /&gt;
&lt;br /&gt;
You can substitute a file name or other instruction within an alias by placing square brackets ([ ]) with nothing between them in the &amp;lt;string&amp;gt;. Any argument entered after the alias is inserted at the brackets.&lt;br /&gt;
&lt;br /&gt;
ALIAS &amp;lt;name&amp;gt; displays the &amp;lt;string&amp;gt; for that alias. Entering ALIAS alone lists all current aliases.&lt;br /&gt;
&lt;br /&gt;
Aliases are local to the Shell in which they are defined. If you create another Shell with the NEWSHELL command, it shares the same aliases as its parent Shell. However, if you create another Shell with the Execute Command menu item, it des not recognize aliases created in your original Shell. A global lais that is recognized by all Shells can be crated by inserting the alias in the Shell-startup file.&lt;br /&gt;
&lt;br /&gt;
To remove an ALIAS, use the UNALIAS command.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; ALIAS d1 DIR DF1:&lt;br /&gt;
&lt;br /&gt;
Entering d1 displays a directory of the contents of the disk in DF1:; as if you entered DIR DF1:.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ALIAS hex TYPE [ ] HEX&lt;br /&gt;
&lt;br /&gt;
creates an alias called HEX that displays the contents of a specified file in hexadecimal format. The empty brackets indicate where the file name is inserted in this example. Entering:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; hex Myfile&lt;br /&gt;
&lt;br /&gt;
displays the contents of Myfile in hexadecimal format.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#UNALIAS|UNALIAS]]&lt;br /&gt;
&lt;br /&gt;
== APPLISTINFO ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: &amp;lt;file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILENAME/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ARP ==&lt;br /&gt;
&lt;br /&gt;
Displays and modifies the address translation tables.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ARP [-a|ALL] [-d|DELETE] [-s|SET] [HOSTNAME &amp;lt;host&amp;gt;] [ADDRESS &amp;lt;address&amp;gt;] &lt;br /&gt;
: [TEMP] [PUB|PUBLISH] [PRO|PROXY] [{-f|FILE} &amp;lt;file name&amp;gt;] [-n|NONAMES|NUMBERS]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -a=ALL/S,-d=DELETE/S,-s=SET/S,HOSTNAME,ADDRESS,TEMP/S,PUB=PUBLISH/S,PRO=PROXY/S,-f=FILE/K,-n=NONAMES/S=NUMBERS/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
The ARP command displays and modifies the Internet-to-Ethernet address translation tables used by the Address Resolution Protocol (ARP). The host to be inspected or modified can be specified by name or by number, using the Internet dot notation.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| ALL or -a || Display all of the current ARP entries.&lt;br /&gt;
|-&lt;br /&gt;
| DELETE or -d || Removes any ARP table entry for the host specified with the HOSTNAME parameter. See example 3.&lt;br /&gt;
|-&lt;br /&gt;
| SET or -s || Create a new ARP address mapping entry for the host with the supplied hardware address. The HOSTNAME parameter tells the host and the ADDRESS parameter the hardware address.&lt;br /&gt;
|-&lt;br /&gt;
| HOSTNAME || Name of the host which entries will be listed or modified.&lt;br /&gt;
|-&lt;br /&gt;
| ADDRESS || A hardware address (Ethernet address) of the host to be added or to be deleted from the ARP table. The address is given as six hex bytes separated by colons. See example 2.&lt;br /&gt;
|-&lt;br /&gt;
| TEMP || Add a temporary ARP entry. This option is used only with the SET parameter.&lt;br /&gt;
|-&lt;br /&gt;
| PUB or PUBLISH || The added ARP entry will be &#039;published&#039;. The host will act as an ARP server, responding to requests for hostname even though the host address is not its own. This option is used only with the SET parameter.&lt;br /&gt;
|-&lt;br /&gt;
| PRO or PROXY || Adds a proxy ARP entry. This option is used only with the SET parameter.&lt;br /&gt;
|-&lt;br /&gt;
| FILE or -f || Causes the file &amp;lt;file name&amp;gt; to be read and multiple entries to be set in the ARP tables. Entries in the file should be of the form&lt;br /&gt;
: &amp;lt;hostname&amp;gt; &amp;lt;ether_addr&amp;gt; [TEMP] [PUB]&lt;br /&gt;
with argument meanings as given for the SET option.&lt;br /&gt;
|-&lt;br /&gt;
| NONAMES or -n or NUMBERS || Show network addresses as numbers (normally ARP attempts to display addresses symbolically).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
List the current ARP entries:&lt;br /&gt;
 1&amp;gt; ARP ALL&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
Create a temporary ARP entry for the host &#039;Oberon&#039; and publish it.&lt;br /&gt;
 1&amp;gt; ARP SET Oberon 00:30:ab:0e:d5:ee TEMP PUB&lt;br /&gt;
&lt;br /&gt;
;Example 3:&lt;br /&gt;
Delete any ARP entry of the host &#039;Oberon&#039;:&lt;br /&gt;
 1&amp;gt; ARP DELETE Oberon&lt;br /&gt;
&lt;br /&gt;
== ASK ==&lt;br /&gt;
&lt;br /&gt;
Gets yes or no user input during script file execution.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ASK &amp;lt;prompt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: PROMPT/A&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
ASK is used in scripts to write the string specified by &amp;lt;prompt&amp;gt; to the current window and then wait for keyboard input. Valid keyboard responses are Y (yes), N (no), and Return (no). Selecting Y sets the condition flag to 5 (WARN). Selecting N or pressing Return sets the condition flag to 0. Check the response using an IF statement.&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;prompt&amp;gt; contains spaces, it must be enclosed in quotation marks.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&lt;br /&gt;
Assume a script contained the following commands:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 ASK Continue?&lt;br /&gt;
 IF WARN&lt;br /&gt;
    ECHO Yes&lt;br /&gt;
 ELSE&lt;br /&gt;
    ECHO No&lt;br /&gt;
 ENDIF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
At the ASK command, Continue? Is displayed on the screen. If Y is pressed, Yes is displayed on the screen. If N or a Return alone is pressed, No is displayed.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IF|IF]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ELSE|ELSE]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ENDIF|ENDIF]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#REQUESTCHOICE|REQUESTCHOICE]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#WARN|WARN]]&lt;br /&gt;
&lt;br /&gt;
== ASSIGN ==&lt;br /&gt;
&lt;br /&gt;
Controls assignment of logical device names to files or directories.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ASSIGN [&amp;lt;name&amp;gt;:{dir}] [FROM &amp;lt;file name&amp;gt;] [TO &amp;lt;file name&amp;gt;] [LIST] &lt;br /&gt;
: [EXISTS] [DISMOUNT] [DEFER] [PATH] [ADD] [PREPEND] [REMOVE] [VOLS] &lt;br /&gt;
: [DIRS] [DEVICES] [NOREQ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME,TARGET/M,FROM/K,TO/K,LIST/S,EXISTS/S,DISMOUNT/S,DEFER/S,PATH/S,ADD=APPEND/S,PREPEND/S,REMOVE/S,VOLS/S,DIRS/S,DEVICES/S,NOREQ/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
ASSIGN allows directories to be referenced via short, convenient logical device names, rather than their usual names or complete paths. ASSIGN gives an alternative directory name, much as ALIAS permits alternative command names. The ASSIGN command can create assignments, remove assignments, or list some or all current assignments.&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;name&amp;gt; and {dir} arguments are given, ASSIGN assigns the given name to the specified directory. Each time the assigned logical device name is referred to, AmigaDOS accesses the specified directory. If the &amp;lt;name&amp;gt; given is already assigned to a directory, the new directory will replace the previous directory. (Always be sure to include a colon after the &amp;lt;name&amp;gt; argument.)&lt;br /&gt;
&lt;br /&gt;
If only the &amp;lt;name&amp;gt; argument is given, any existing ASSIGN of a directory to that logical device will be cancelled.&lt;br /&gt;
&lt;br /&gt;
You can assign several logical device names to the same directory by using multiple ASSIGN commands.&lt;br /&gt;
&lt;br /&gt;
You can assign one logical device name to several directories by specifying each directory after the &amp;lt;name&amp;gt; argument or by using the ADD or APPEND option. When the APPEND option is specified, any existing directory assigned to &amp;lt;name&amp;gt; is not cancelled. Instead, the newly specified directory is appended to the end of the assign list and the system will search for both directories when &amp;lt;name&amp;gt; is encountered. If the first directory is not available, ASSIGN will be satisfied with the newly added directory.&lt;br /&gt;
&lt;br /&gt;
The PREPEND option does the same thing as the APPEND option except the additional assignment is added at the front of the assing list. The PREPEND option is available with Assing version 53.2 or higher.&lt;br /&gt;
&lt;br /&gt;
To delete a name from the assign list, use the REMOVE option.&lt;br /&gt;
&lt;br /&gt;
If no arguments are given with ASSIGN, or if the LIST keyword is used, a list of all current assignments will be displayed. If the VOLS, DIRS, or DEVICES switch is specified, ASSIGN will limit the display to volumes, directories, or devices, respectively.&lt;br /&gt;
&lt;br /&gt;
When the EXISTS keyword is given along with a logical device name, AmigaDOS will search the ASSIGN list for that name and display the volume and directory assigned to that device. If the device name is not found, the condition flag is set to 5 (WARN). This is commonly used in scripts.&lt;br /&gt;
&lt;br /&gt;
Normally, when the {dir} argument is given, AmigaDOS immediately looks for that directory. If the ASSIGN commands are part of S:startup-sequence, the directories need to be present on a mounted disk during the boot procedure. If an assigned directory cannot be found, a requester appears asking for the volume containing that directory. However, two new options, DEFER and PATH, will wait until the directory is actually needed before searching for it.&lt;br /&gt;
&lt;br /&gt;
{{Note|The assigned name does not have to retain the name of the directory and it does not have to be in upper case. For example, the name CLIPS: or Clips: can be assigned to the Ram Disk:Clipboards directory.}}&lt;br /&gt;
&lt;br /&gt;
The DEFER option creates a &amp;quot;late-binding&amp;quot; ASSIGN. This ASSIGN only takes effect when the assigned object is first referenced, rather than when the assignment is made. This eliminates the need to insert disks during the boot procedure that contain the directories that are assigned during the startup-sequence. When the DEFER option is used, the disk containing the assigned directory is not needed until the object is actually called upon.&lt;br /&gt;
&lt;br /&gt;
For example, if you assign FONTS: to DF0:Fonts with the DEFER option, the system will associate FONTS: with whatever disk is in DF0: at the time FONTS: is called. If you have Workbench disk in DF0: at the time the FONTS: is needed, the system will associate FONTS: with that particular Workbench disk. If you later remove that Workbench disk and insert another disk containing a Fonts directory, the system will specifically request the original Workbench disk the next time FONTS: is needed.&lt;br /&gt;
&lt;br /&gt;
The PATH option creates a &amp;quot;non-binding&amp;quot; ASSIGN. A non-binding ASSIGN acts like a DEFERed ASSIGN, except that it is re-evaluated each time the assigned name is referenced. This prevents the system from expecting a particular volume in order to use a particular directory (such as the situation described in the example above). For instance, if you assign FONTS: to DF0:Fonts with the PATH option, any disk in DF0: will be searched when FONTS: is referenced. As long as the disk contains a Fonts directory, it will satisfy the ASSIGN. Up until V54 DOS library, you could not assign multiple directories with the PATH option.&lt;br /&gt;
&lt;br /&gt;
The PATH option is especially useful to users with floppy disk systems as it eliminates the need to reinsert the original Workbench disk used to boot the system. As long as the drive you have assigned with the PATH option contains a disk with the assigned directory name, the system will use that disk.&lt;br /&gt;
&lt;br /&gt;
Instead of specifying on the command line which assignments to set up and how, you can tell the ASSIGN command to read a list of specifications from a file using the FROM option. In that file, there must be one assignment specification per line; lines beginning with the &#039;;&#039; character are ignored. The file could look like this:&lt;br /&gt;
&lt;br /&gt;
 FONTS: MyFonts:Fontdir&lt;br /&gt;
 LIBS: SYS:Libs BigAssem:Libs PDAssem:Libs&lt;br /&gt;
 WorkDisk: DF0: DEFER&lt;br /&gt;
 C: DF0:C PATH&lt;br /&gt;
&lt;br /&gt;
As you can see, it is possible to set up deferred and path assignments and assignment lists, too.&lt;br /&gt;
&lt;br /&gt;
To complement the FROM option there is the TO option which will store the current list of assignments in a file, suitable for use with the FROM option.&lt;br /&gt;
&lt;br /&gt;
The NOREQ option will prevent any &amp;quot;Please insert volume...&amp;quot; requester windows from appearing which may be triggered by attempts to make assignments to volumes which are currently unavailable. While the command will fail to establish any assignment producing such an error, a script file in which the command is used can keep on running without requiring manual intervention.&lt;br /&gt;
&lt;br /&gt;
{{Note|The DISMOUNT option (called REMOVE in V1.3) is no longer active. From V54+ use the new dedicated C:Dismount command instead.}}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ASSIGN FONTS: MyFonts:Fontdir&lt;br /&gt;
&lt;br /&gt;
assigns the FONTS: directory to Fontdir on MyFonts:&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ASSIGN LIST&lt;br /&gt;
 Volumes:&lt;br /&gt;
 Ram Disk [Mounted]&lt;br /&gt;
 Workbench [Mounted]&lt;br /&gt;
 MyFonts [Mounted]&lt;br /&gt;
 &lt;br /&gt;
 Directories:&lt;br /&gt;
 LOCALE Workbench:Locale&lt;br /&gt;
 KEYMAPS Workbench:Devs/Keymaps&lt;br /&gt;
 PRINTERS Workbench:Devs/Printers&lt;br /&gt;
 REXX Workbench:S&lt;br /&gt;
 CLIPS Ram Disk:Clipboards&lt;br /&gt;
 ENV Ram Disk:Env&lt;br /&gt;
 T Ram Disk:T&lt;br /&gt;
 ENVARC Workbench:Prefs/Env-Archive&lt;br /&gt;
 SYS Workbench:&lt;br /&gt;
 C Workbench:C&lt;br /&gt;
 S Workbench:S&lt;br /&gt;
 L Workbench:L&lt;br /&gt;
 FONTS MyFonts:Fontdir&lt;br /&gt;
 DEVS Workbench:Devs&lt;br /&gt;
 LIBS Workbench:Libs&lt;br /&gt;
 + Workbench:Classes&lt;br /&gt;
 &lt;br /&gt;
 Devices:&lt;br /&gt;
 PIPE AUX RAM CON&lt;br /&gt;
 RAW PAR SER PRT DF0&lt;br /&gt;
&lt;br /&gt;
Shows a typical list of all current assignments. The plus sign indicates any additional directories with the same assignment.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ASSIGN FONTS: EXISTS&lt;br /&gt;
 FONTS: MyFonts:FontDir&lt;br /&gt;
&lt;br /&gt;
is an inquiry into the assignment of FONTS:. AmigaDOS responds by showing that FONTS: is assigned to the FontDir directory of the MyFonts volume. The return code is set to 0 if it exists or to 5 if it does not.&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ASSIGN LIBS: SYS:Libs BigAssem:Libs ADD&lt;br /&gt;
&lt;br /&gt;
is a multiple-directory assignment that creates a search path containing two Libs directories. Specifying ADD keeps the standard SYS:Classes assignment from being removed. These directories are searched in sequence each time LIBS: is invoked.&lt;br /&gt;
&lt;br /&gt;
; Example 5:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ASSIGN WorkDisk: DF0: DEFER&lt;br /&gt;
 1&amp;gt; ASSIGN WorkDisk: EXISTS&lt;br /&gt;
 WorkDisk &amp;lt;DF0:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sets up a late-binding assignment of the logical device WorkDisk:. Until the first time you refer to the name WorkDisk:, you do not need to insert it in DF0: ASSIGN shows DF0: enclosed in angle brackets to indicate that it is DEFERred. After the first reference to WorkDisk:, the volume name of the disk that was in DF0: replaces &amp;lt;DF0:&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; Example 6:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ASSIGN C: DF0:C PATH&lt;br /&gt;
 1&amp;gt; ASSIGN C: EXISTS&lt;br /&gt;
 C [Df0: C]&lt;br /&gt;
&lt;br /&gt;
will reference the C directory of whatever disk is in DF0: at the time a command is searched for. Notice that ASSIGN shows DF0:C in square brackets to indicate that it is a non-binding ASSIGN.&lt;br /&gt;
&lt;br /&gt;
; Example 7:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ASSIGN LIBS: Zcad:Libs ADD&lt;br /&gt;
&lt;br /&gt;
adds Zcad:Libs to the list of directories assigned as LIBS:.&lt;br /&gt;
&lt;br /&gt;
; Example 8:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ASSIGN LIBS: Zcad:Libs REMOVE&lt;br /&gt;
&lt;br /&gt;
removes Zcad:Libs from the list of directories assigned as LIBS:.&lt;br /&gt;
&lt;br /&gt;
For more examples using ASSIGN, see [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]].&lt;br /&gt;
&lt;br /&gt;
== AVAIL ==&lt;br /&gt;
&lt;br /&gt;
Reports the amount of Chip and Fast memory available.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: AVAIL [CHIP | FAST | VIRTUAL | TOTAL] [FLUSH] [SHOW=&amp;lt;BLOCKS|BYTES|SIZE&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: CHIP/S,FAST/S,TOTAL/S,FLUSH/S,VIRTUAL/S,SHOW/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
AVAIL reports the amount of installed memory and how musch of it is available free for use.&lt;br /&gt;
&lt;br /&gt;
The figures in the complete summary are localised.&lt;br /&gt;
&lt;br /&gt;
The SHOW option selects the format in which the figures in the complete summary will be printed. This must be one of BYTE, KILO, or MEGA. &amp;quot;BYTE&amp;quot;, which is the default, will display plain figures. &amp;quot;KILO&amp;quot; will display the same information in KB. &amp;quot;MEGA&amp;quot; will display the same information in MB.&lt;br /&gt;
&lt;br /&gt;
By using the CHIP, FAST, VIRTUAL, or TOTAL options, you can have AVAIL display only the number of free bytes of Chip, Fast, Virtual, or total RAM available, instead of the complete summary. This value can be used for comparisons in scripts.&lt;br /&gt;
&lt;br /&gt;
These types are obsolete as of AmigaOS 4.x and the options CHIP, FAST, and VIRTUAL are only kept to ensure compatibility with older scripts.&lt;br /&gt;
&lt;br /&gt;
The FLUSH option is obsolete and does nothing.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; AVAIL&lt;br /&gt;
 Installed: 536.870.912&lt;br /&gt;
 Free:      437.252.096&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; AVAIL TOTAL&lt;br /&gt;
 437252096&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; AVAIL SHOW=MEGA&lt;br /&gt;
 Installed: 512,000 M&lt;br /&gt;
 Free:      416,104 M&lt;br /&gt;
&lt;br /&gt;
== BREAK ==&lt;br /&gt;
&lt;br /&gt;
Sets attention flags in the specified process.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: BREAK &amp;lt;process&amp;gt; [NAME &amp;lt;program name or pattern&amp;gt;] [ALL | C | D | E | F]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: PROCESS/N,NAME/K,ALL/S,C/S,D/S,E/S,F/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
BREAK sets the specified attention flags in the &amp;lt;process&amp;gt; indicated. C sets the Ctrl-C flag, D sets the Ctrl-D flag, and so on. ALL sets all the flags from Ctrl-C to Ctrl-F. By default, AmigaDOS only sets the Ctrl-C flag.&lt;br /&gt;
&lt;br /&gt;
Ctrl-C is used as the default for sending a BREAK signal to halt a process. A process that has been aborted this way will display ***BREAK in the Shell window. Ctrl-D is used to halt execution of a script file. Ctrl-E is used to exit Commodity Exchange programs. Ctrl-F is not currently used.&lt;br /&gt;
&lt;br /&gt;
A process can be signalled by giving a name or a wildcard pattern. The name will be compared against the program&#039;s name (including its full path, if available) and the program name (excluding the path), if the first test did not produce a match.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#STATUS|STATUS]]&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; BREAK 7&lt;br /&gt;
&lt;br /&gt;
sets the Ctrl-C attention flag of process 7. This is identical to selecting process 7 and pressing Ctrl-C.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; BREAK 5 D&lt;br /&gt;
&lt;br /&gt;
sets the Ctrl-D attention flag of process 5.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; BREAK NAME &amp;quot;DIR#?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sets the Ctrl-C attention flag of all processes whose name begin with the letters &amp;quot;DIR&amp;quot;; this would include the &amp;quot;DIR&amp;quot; program, for example.&lt;br /&gt;
&lt;br /&gt;
== BUILDMAPTABLE ==&lt;br /&gt;
&lt;br /&gt;
Creates a binary mapping table to Unicode for diskfont library from an ASCII mapping table.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: BUILDMAPTABLE &amp;lt;ASCII mapping table&amp;gt; [CHARSET]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: UNICODEMAPTABLE/A,CHARSET/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: SDK:C&lt;br /&gt;
&lt;br /&gt;
BUILDMAPTABLE converts Charset-To-Unicode mapping tables in text form (e.g. available at http://www.unicode.org/Public/MAPPINGS/) to mapping tables in binary form usable by diskfont library.&lt;br /&gt;
&lt;br /&gt;
You must specify a charset mapping table file name when using the BUILDMAPTABLE command.&lt;br /&gt;
&lt;br /&gt;
BUILDMAPTABLE can either display a text form of the parsed table or create a binary mapping table in the L:Charsets/ directory. Currently only 8-bit charset mapping tables are supported.&lt;br /&gt;
&lt;br /&gt;
If L:Charsets/character-sets or L:Charsets/custom-character-sets contains a MIME name for an 8-bit charset where no mapping table in L:Charsets/ does exist, and you have a mapping table in text form, use BUILDMAPTABLE to create the binary mapping table and reboot (diskfont library searches tables only once) to be able to use the new charset (e.g. in fonts or catalog files).&lt;br /&gt;
&lt;br /&gt;
The expected format of text mapping tables is as follows:&lt;br /&gt;
* Anything from a &#039;#&#039; character to the end of a line is considered a comment.&lt;br /&gt;
* A valid line does contain the index on the left and the Unicode code point at the right side, in either hexadecimal (starting with 0x or 0X) or octal (starting with 0) or decimal form, separated by empty space. Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 0xA4 0x20AC # EURO SIGN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The other options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| CHARSET || Specify a MIME charset name or alias. The MIME charset name obtained from diskfont library will be used as file name of the binary charset mapping table which will be stored in L:Charsets/. If the CHARSET parameter is omitted, no file will be written, instead the resulting mapping table is displayed in text form.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
 1&amp;gt; BUILDMAPTABLE CP1258.TXT&lt;br /&gt;
&lt;br /&gt;
Will parse the text file CP1258.TXT and display a list of entries with the index on the left and the Unicode codepoint at the right side. Note: unmapped entries (with Unicode codepoint 0) are not displayed.&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
 1&amp;gt; BUILDMAPTABLE 8859-1.TXT CHARSET LATIN1&lt;br /&gt;
&lt;br /&gt;
Will parse the text file 8859-1.TXT and create the file L:Charsets/ISO-8859-1 (latin1 is an alias for ISO-8859-1) which is useless (the ISO-8859-1 mapping table is a builtin part of diskfont library and will not be loaded from disk).&lt;br /&gt;
&lt;br /&gt;
== CACHESTAT ==&lt;br /&gt;
&lt;br /&gt;
Displays information on the system caches.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: [VERBOSE]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: VERBOSE/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CD ==&lt;br /&gt;
&lt;br /&gt;
Sets or displays the current directory.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: CD [&amp;lt;dir | pattern&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DIR&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
CD with no arguments displays the name of the current directory. When a valid directory name is given, CD makes the named directory the current directory.&lt;br /&gt;
&lt;br /&gt;
You must specify a complete path to the directory since CD does not search through the disk for it. If CD cannot find the specified directory in the current directory or in the given path, a Can&#039;t find &amp;lt;directory&amp;gt; message is displayed.&lt;br /&gt;
&lt;br /&gt;
To move up a level in the filing hierarchy to the parent directory of the current directory, enter CD followed by a space and a single slash (/). You can move to another directory in the parent at the same time by including its name after the slash. If the current directory is a root directory, CD / has no effect. Use multiple slashes with no spaces between them to refer to additional higher levels.&lt;br /&gt;
&lt;br /&gt;
To move directly to the root directory of the current device, use CD followed by a space and a colon; for example, CD :&lt;br /&gt;
&lt;br /&gt;
AmigaDOS supports an implied CD so that the CD command itself can often be left out. Enter the directory name, path, colon, or slashes at the prompt.&lt;br /&gt;
&lt;br /&gt;
CD also supports pattern matching. When a directory matching the specified pattern is found, it becomes the current directory. If more than one directory matches the given pattern, an error message is displayed. You cannot use pattern matching with implied CD. For more information an pattern matching, see Chapter 3.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; CD DF1:Work&lt;br /&gt;
&lt;br /&gt;
sets the current directory to the Work directory on the disk in drive DF1:.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; CD SYS:Com/Basic&lt;br /&gt;
&lt;br /&gt;
makes the subdirectory Basic in the Com directory the current directory.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; //&lt;br /&gt;
&lt;br /&gt;
using the implied CD, moves up two levels in the directory structure.&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
 1&amp;gt; CD SYS:Li#?&lt;br /&gt;
&lt;br /&gt;
uses the #? pattern to match with the LIBS: directory.&lt;br /&gt;
&lt;br /&gt;
For more examples using the CD command, see [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]].&lt;br /&gt;
&lt;br /&gt;
== CHANGETASKPRI ==&lt;br /&gt;
&lt;br /&gt;
Changes the priority of a currently running process.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: CHANGETASKPRI &amp;lt;priority&amp;gt; [&amp;lt;process&amp;gt;] [NAME &amp;lt;program name or pattern&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: PRI=PRIORITY/A/N,PROCESS/K/N,NAME/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
Since the Amiga is multitasking, it uses priority numbers to determine the order in which current tasks should be serviced. Normally, most tasks have a priority of 0, and the time and instructions cycles of the CPU are divided equally among them. CHANGETASKPRI changes the priority of the specified Shell process. (If no process is specified, the current Shell process is assumed.) Any started from &amp;lt;process&amp;gt; inherit its priority.&lt;br /&gt;
&lt;br /&gt;
The range of acceptable values for &amp;lt;priority&amp;gt; is the integers from -128 to 127, with higher values yielding a higher priority (a greater proportion of CPU time is allocated). However, do not enter values above +10, or you may disrupt important system tasks. Too low a priority (less than 0) can result in a process taking unreasonably long to execute, priority -128 does not make much sense because at that priority runs the idle.task.&lt;br /&gt;
&lt;br /&gt;
The name of the process whose priority number should be changed can be given, or a wildcard pattern that should match it. The name will be compared against the program&#039;s name (including its full path, if available) and the program name (excluding the path), if the first test did not produce a match. If more than one command matches the pattern given, then all these commands will have their priorities changed.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#STATUS|STATUS]]&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; CHANGETASKPRI 4 Process 2&lt;br /&gt;
&lt;br /&gt;
The priority of Process 2 is changed to 4. Any tasks started from this Shell will also have a priority of 4. They will have priority over any other user tasks created without using CHANGETASKPRI (those tasks will have a priority of 0).&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; CHANGETASKPRI 4 NAME &amp;quot;DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The priority of the program &amp;quot;DIR&amp;quot; is changed to 4. Note that if there is more than one command to match the name, CHANGETASKPRI will abort with an error message.&lt;br /&gt;
&lt;br /&gt;
== CHARSETCONVERT ==&lt;br /&gt;
&lt;br /&gt;
Converts a text file from one character set into another.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: CHARSETCONVERT &amp;lt;from file&amp;gt; &amp;lt;from charset&amp;gt; [to file] [to charset] [EOL [CR] [LF] [CRLF]]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FROM/A,FROMCHARSET/A,TO,TOCHARSET,EOL/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
CHARSETCONVERT converts the text file specified with the FROM argument from the character set specified with the FROMCHARSET argument to the character set specified with the TOCHARSET argument or to the current system default character set if the TOCHARSET argument is not specified. The result is written to the file specified with the TO argument or output to the current window if the TO argument is not specified.&lt;br /&gt;
&lt;br /&gt;
The FROMCHARSET and TOCHARSET parameters are MIME character set names or aliases registered at IANA stored in L:Charsets/character-sets or custom character set names or aliases stored in L:Charsets/custom-character-sets. Currently only 8-bit character sets with a mapping table to Unicode (which can be created by the [[AmigaOS_Manual:_AmigaDOS_Command_Reference#BUILDMAPTABLE|BUILDMAPTABLE]] command) in L:Charsets/ are supported, plus those additional charsets:&lt;br /&gt;
* FROMCHARSET may also be UTF-7, UTF-8, UTF-16BE, UTF-16LE, UTF-32BE or UTF-32LE.&lt;br /&gt;
* TOCHARSET may also be UTF-8.&lt;br /&gt;
&lt;br /&gt;
CHARSETCONVERT will return with result code 20 (FAILURE) when a severe error occurs, with result code 10 (ERROR) when the input file contains invalid data (NULL or a character or encoding sequence which is undefined or invalid in FROMCHARSET found in FROM file), with result code 5 (WARN) when at least one input character could not be represented in the TOCHARSET and was replaced by an &amp;quot;&amp;lt;UXXXX&amp;gt;&amp;quot; sequence, and with result code 0 (OK) if all went well.&lt;br /&gt;
&lt;br /&gt;
CHARSETCONVERT has options which will change the way the output is displayed. These options are explained below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| TO &amp;lt;name&amp;gt; || Specifies an output file or device for CHARSETCONVERT; by default, CHARSETCONVERT outputs to the current window.&lt;br /&gt;
|-&lt;br /&gt;
| TOCHARSET &amp;lt;name&amp;gt; || Specifies the destination character set for CHARSETCONVERT; by default, CHARSETCONVERT converts to the current system default character set.&lt;br /&gt;
|-&lt;br /&gt;
| EOL &amp;lt;type&amp;gt; || Converts End-Of-Line (EOL) sequences to the specified type. If not specified, no EOL conversion does happen. The EOL type parameter must match one of the following keywords:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| CR || output EOL as CR   (0x0D,   &amp;quot;\r&amp;quot;)   (Mac style).&lt;br /&gt;
|-&lt;br /&gt;
| LF || output EOL as LF   (0x0A,   &amp;quot;\n&amp;quot;)   (Amiga style).&lt;br /&gt;
|-&lt;br /&gt;
| CRLF || output EOL as CRLF (0x0D0A, &amp;quot;\r\n&amp;quot;) (PC style).&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
 1&amp;gt; CHARSETCONVERT russian KOI8-R russian-ISO ISO-8859-5 EOL=LF&lt;br /&gt;
&lt;br /&gt;
Will read the text file russian, convert the character set from KOI8-R to ISO-8859-5, convert the EOL sequences to Amiga style, and write the result to russian-ISO.&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
 1&amp;gt; CHARSETCONVERT czech.txt X-ATO-E2 czech-ISO2.txt ISO-8859-2&lt;br /&gt;
&lt;br /&gt;
Will read the text file czech.txt, convert the character set from X-ATO-E2 (the character set of the OS3.x czech catalog files) to ISO-8859-2, replace unconvertable characters with an &amp;lt;UXXXX&amp;gt; sequence and write the result to czech-ISO2.txt.&lt;br /&gt;
&lt;br /&gt;
;Example 3:&lt;br /&gt;
 1&amp;gt; SETFONT topaz 8 CHARSET ISO-8859-16&lt;br /&gt;
 1&amp;gt; CHARSETCONVERT polish.txt X-ATO-PL TOCHARSET ISO-8859-16&lt;br /&gt;
&lt;br /&gt;
Will read the text file polish.txt, convert the character set from X-ATO-PL (the character set of the OS3.x polish catalog files) to ISO-8859-16 and display the result in the current window with topaz.font, size 8, in ISO-8859-16.&lt;br /&gt;
&lt;br /&gt;
== CLIP ==&lt;br /&gt;
&lt;br /&gt;
Reads or writes any clipboard unit.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: CLIP [&amp;lt;unit&amp;gt;] [WAIT] [ GET | PUT &amp;lt;string&amp;gt; | COUNT ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: U=UNIT/N/K,W=WAIT/S,G=GET/S,P=PUT=S=SET/S,C=COUNT/S,TEXT&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
CLIP can store some text in the clipboard, retrieve some text from it or count how many clipboard units are filled.&lt;br /&gt;
&lt;br /&gt;
Using the GET argument will retrieve text from the specified unit number (if supplied). Using the SET argument and a &amp;lt;string&amp;gt; will store this &amp;lt;string&amp;gt; into the specified unit number (if supplied). Using the COUNT argument will count and display the number of filled clipboard units.&lt;br /&gt;
&lt;br /&gt;
The UNIT argument is used to specify which of the clipboard units should be used for the GET/PUT action.&lt;br /&gt;
       &lt;br /&gt;
The TEXT argument is the text data to be stored in the clipboard unit.&lt;br /&gt;
&lt;br /&gt;
The WAIT argument, used along with the GET action, will wait for the unit to be filled with text data. Then it will perform the GET action. It may be useful in scripts.&lt;br /&gt;
&lt;br /&gt;
If no GET, PUT or COUNT argument is specified, text will be retrieved. i.e. GET is the default action. If no unit number is specified, text will be written to/read from unit 0.&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
Store the text &amp;quot;Amiga&amp;quot; in the clipboard unit 2&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CLIP PUT Amiga UNIT 2&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
Retrieve and display the text stored in the clipboard unit 2&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CLIP UNIT 2&lt;br /&gt;
 Amiga&lt;br /&gt;
&lt;br /&gt;
;Example 3:&lt;br /&gt;
Display how many clipboard units contain data&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CLIP COUNT&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
;Example 4:&lt;br /&gt;
Delete the content of clipboard unit 0&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CLIP SET&lt;br /&gt;
&lt;br /&gt;
== CMIBOOST ==&lt;br /&gt;
&lt;br /&gt;
Boosts microphone input.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CONFIGURENETINTERFACE ==&lt;br /&gt;
&lt;br /&gt;
Configure network interface parameters.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: CONFIGURENETINTERFACE [QUIET] [TIMEOUT=&amp;lt;seconds&amp;gt;] INTERFACE &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Incomplete&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: INTERFACE/A,QUIET/S,ADDRESS/K,NETMASK/K,BROADCASTADDR/K,DESTINATION=DESTINATIONADDR/K,METRIC/K/N,MTU/K/N,ALIASADDR/K,DELETEADDR/K,ONLINE/S,OFFLINE/S,UP/S,DOWN/S,DEBUG/K,COMPLETE/K,CONFIGURE/K,LEASE/K,RELEASE=RELEASEADDRESS/S,ID/K,TIMEOUT/K/N,DHCPUNICAST/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
CONFIGURENETINTERFACE is used to define how a network interface will react and how it will interact with your network.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| INTERFACE || The name of the interface to be configured. This is a required parameter.&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || This option causes the program not to emit any error messages or progress reports. Also, if the program encounters an error it will flag this as failure code 5 which can be looked at using the &#039;if warn&#039; shell script command. If this option is not in effect, failure codes will be more severe and all sorts of progress information will be displayed.&lt;br /&gt;
|-&lt;br /&gt;
| ADDRESS || The IP address to assign to this interface. This should be specified in dotted-decimal notation (&amp;quot;192.168.0.1&amp;quot;) and not as symbolic name since the system may not be in a state to perform a name resolution.&lt;br /&gt;
&lt;br /&gt;
In place of the IP address you can also specify &amp;quot;DHCP&amp;quot;. As the name suggests, this will start a configuration process involving the DHCP protocol which should eventually yield the right IP address for this host. Note that this configuration procedure only works for Ethernet hardware.&lt;br /&gt;
|-&lt;br /&gt;
| NETMASK || The subnet mask to assign to this interface. This must be specified in dotted-decimal notation (&amp;quot;192.168.0.1&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
In place of the subnet mask you can also specify &amp;quot;DHCP&amp;quot;. As the name suggests, this will start a configuration process involving the DHCP protocol which should eventually yield the right subnet mask for this host. Note that this configuration procedure only works for Ethernet hardware.&lt;br /&gt;
|-&lt;br /&gt;
| BROADCASTADDR || The broadcast address to be used by this interface; must be specified in dotted-decimal notation (&amp;quot;192.168.0.1&amp;quot;) and only works with interfaces that support broadcasts in the first place (i.e. Ethernet hardware).&lt;br /&gt;
|-&lt;br /&gt;
| DESTINATION or DESTINATIONADDR || The address of the point-to-point partner for this interface; must be specified in dotted-decimal notation (&amp;quot;192.168.0.1&amp;quot;). Only works for point-to-point connections, such as PPP.&lt;br /&gt;
|-&lt;br /&gt;
| METRIC || Route metric value for this interface.&lt;br /&gt;
|-&lt;br /&gt;
| MTU || You can limit the maximum transmission size used by the TCP/IP stack to push data through the interface. The interface driver will have its own ideas about the maximum transmission size. You can therefore only suggest a smaller value than the driver&#039;s preferred hardware MTU size.&lt;br /&gt;
|-&lt;br /&gt;
| ALIASADDR || This adds another address to this interface to respond to. You can add as many aliases as you like, provided you don&#039;t run out of memory.&lt;br /&gt;
|-&lt;br /&gt;
| DELETEADDR || This removes an alias address from the list the interface is to respond to.&lt;br /&gt;
|-&lt;br /&gt;
| Options ONLINE, OFFLINE, UP, and DOWN || The &#039;line state&#039; of the interface is configured through the following four options:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| ONLINE || An attempt is made to put the underlying networking driver online. If that works, then the protocol stack will attempt to transmit messages through this interface.&lt;br /&gt;
|-&lt;br /&gt;
| OFFLINE || The underlying networking device driver is put offline and the protocol stack will no longer try to send messages through the interface either.&lt;br /&gt;
|-&lt;br /&gt;
| UP || The protocol stack will attempt to transmit messages through this interface (even though it might not be online yet).&lt;br /&gt;
|-&lt;br /&gt;
| DOWN || The protocol stack will no longer attempt to transmit messages through this interface (even though it might still be online).&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| DEBUG || Possible parameters are YES and NO. You can enable debug output for this interface to help in tracking down configuration problems. At this time of writing, the debug mode will, if enabled, produce information on the progress of the DHCP configuration process.&lt;br /&gt;
|-&lt;br /&gt;
| COMPLETE || Possible parameters are YES and NO. If you configure an interface in several steps, use this parameter in the final invocation of the program. It will tell the TCP/IP stack that the configuration for this interface is complete. This has the effect of causing the static route definition file to be reread, if necessary.&lt;br /&gt;
|-&lt;br /&gt;
| RELEASEADDRESS || If an IP address was dynamically assigned to an interface, this switch will tell ConfigureNetInterface to release it. Note that you can only release what was previously allocated.&lt;br /&gt;
|-&lt;br /&gt;
| CONFIGURE || Possible parameters are DHCP, AUTO, and FASTAUTO. You can use DHCP configuration for this interface and protocol stack internals, namely the list of routers (and the default gateway) to use and the domain name servers. This option allows you to bring up the complete network configuration in one single step.&lt;br /&gt;
&lt;br /&gt;
You can request that a particular IP address is assigned to this interface by the DHCP process by specifying CONFIGURE=DHCP and your choice of ADDRESS=xxx.xxx.xxx.xxx.&lt;br /&gt;
&lt;br /&gt;
If your network has no DHCP server, you may choose CONFIGURE=AUTO to use automatic IPv4 address selection, based upon a protocol called ZeroConf. This protocol will select a currently unused address from a specially designated address range.&lt;br /&gt;
&lt;br /&gt;
If you choose automatic configuration in a wireless network, you might want to use CONFIGURE=FASTAUTO instead of CONFIGURE=AUTO.&lt;br /&gt;
&lt;br /&gt;
Note that only the CONFIGURE=DHCP option will attempt to set up a default route and a set of DNS servers for you to use. The alternatives of CONFIGURE=FASTAUTO and CONFIGURE=AUTO are restricted to selecting the network interface IPv4 addresses.&lt;br /&gt;
|-&lt;br /&gt;
| TIMEOUT || If you&#039;re going to use DHCP configuration for any of the interfaces, a default timeout value of 60 seconds will limit the time an interface can take to be configured. This parameter allows you to use a different timeout value. Note that due to how the configuration protocol works, the timeout cannot be shorter than ten seconds.&lt;br /&gt;
|-&lt;br /&gt;
| LEASE || This is a complex option which can be used to request how long an IP address should be bound to an interface. Several combinations of options are possible. Here is a short list:&lt;br /&gt;
&lt;br /&gt;
: LEASE=300&lt;br /&gt;
: LEASE=300seconds&lt;br /&gt;
&lt;br /&gt;
This requests a lease of exactly 300 seconds, or five minutes.&lt;br /&gt;
&lt;br /&gt;
: LEASE=30min&lt;br /&gt;
&lt;br /&gt;
This requests a lease of 30 minutes.&lt;br /&gt;
&lt;br /&gt;
: LEASE=2hours&lt;br /&gt;
&lt;br /&gt;
This requests a lease of 2 hours.&lt;br /&gt;
&lt;br /&gt;
: LEASE=1day&lt;br /&gt;
&lt;br /&gt;
This requests a lease of 1 day.&lt;br /&gt;
&lt;br /&gt;
: LEASE=4weeks&lt;br /&gt;
&lt;br /&gt;
This requests a lease of 4 weeks.&lt;br /&gt;
&lt;br /&gt;
: LEASE=infinite&lt;br /&gt;
&lt;br /&gt;
This requests that the IP address should be permanently bound.&lt;br /&gt;
&lt;br /&gt;
Blank spaces between the numbers and the qualifiers are supported. The qualifiers are tested using substring matching, which means for example that &amp;quot;30 minutes&amp;quot; is the same as &amp;quot;30 min&amp;quot; and &amp;quot;30 m&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Note that the requested lease time may be ignored by the DHCP server. After all, it is just a suggestion and not an order.&lt;br /&gt;
|-&lt;br /&gt;
| ID || This option works along with the CONFIGURE=DHCP process. It can be used to tell the DHCP server by which name the local host should be referred to. Some DHCP servers are on good terms with their local name resolution services and will add the name and the associated IP address to the local host database. The name you can supply here cannot be longer than 255 characters and must be at least 2 characters long. Keep it brief: not all DHCP servers have room for the whole 255 characters.&lt;br /&gt;
|-&lt;br /&gt;
| DHCPUNICAST || Possible parameters are YES and NO. Some DHCP servers may not be able to respond to requests for assigning IP addresses unless the responses are sent directly to the computer which sent the requests. In such cases you might want to use DHCPUNICAST=YES option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|The command is similar to the Unix &amp;quot;ifconfig&amp;quot; command.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|If you tell an interface to go online then the program&#039;s return code will tell you if the command succeeded: a return value of 0 indicates success (the interface is now online), and a value of 5 indicates that it didn&#039;t quite work.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Configuring the address of an interface has two effects: first, the interface will be marked as &#039;up&#039;, meaning that the protocol stack will attempt to send messages through it when appropriate. Second, a direct route to the interface will be established.}}&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ADDNETINTERFACE|ADDNETINTERFACE]]&lt;br /&gt;
&lt;br /&gt;
== COPY ==&lt;br /&gt;
&lt;br /&gt;
Copies files or directories.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: COPY [FROM] {&amp;lt;name | pattern&amp;gt;} [TO] &amp;lt;name&amp;gt; [ALL] [QUIET] &lt;br /&gt;
: [BUF | BUFFER=&amp;lt;n&amp;gt;] [CLONE] [DATES] [NOPRO] [COM] [NOREQ] &lt;br /&gt;
: [NOREPLACE] [INTERACTIVE] [FORCE] [ARCHIVE] [NEWER] &lt;br /&gt;
: [COPYLINKS] [FOLLOWLINKS]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FROM/A/M,TO/A,ALL/S,QUIET/S,BUF=BUFFER/K/N,CLONE/S,DATES/S,NOPRO/S,COM/S,NOREQ/S,NOREPLACE/S,INTERACTIVE/S,FORCE/S,ARCHIVE/S,NEWER/S,COPYLINKS/S,FOLLOWLINKS/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
COPY copies the file or directory specified with the FROM argument to the file or directory specified by the TO argument. You can copy several items at once by giving more than one FROM argument; each argument should be separated by spaces. You can use pattern matching to copy or exclude items whose names share a common set of characters or symbols.&lt;br /&gt;
&lt;br /&gt;
If a TO filename already exists, COPY overwrites the TO file with the FROM file. If you name a destination directory that does not exist, COPY will create a directory with that name. You can also use a pair of double quotes (&amp;quot;&amp;quot;) to refer to the current directory when specifying a destination. (Do not put any spaces between the double quotes.)&lt;br /&gt;
&lt;br /&gt;
If the FROM argument is a directory, only the directory&#039;s files will be copied; its subdirectories will not be copied. Use the ALL option to copy the complete directory, including its files, subdirectories, and the subdirectories&#039; files. If you want to copy a directory and you want the copy to have the same name as the original, you must include the directory name in the TO argument.&lt;br /&gt;
&lt;br /&gt;
COPY prints to the screen the name of each file as it is copied. This can be overridden by the QUIET option or the local shell variable _Verbosity with a negative value.&lt;br /&gt;
&lt;br /&gt;
The BUF option is used to set the number of 512-byte buffers used during the copy. (Default is 200 buffers, approximately 100K of RAM.) It is often useful to limit the number of buffers when copying to RAM:. BUF=0 uses a buffer the same size as the file to be copied.&lt;br /&gt;
&lt;br /&gt;
Normally, copy gives the TO file the date and time the copy was made. Any comments attached to the original FROM file are ignored. The protection bits of the FROM file are copied to the TO file. Several options allow you to override these defaults:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| DATES || The creation date of the FROM file is copied to the TO file.&lt;br /&gt;
|-&lt;br /&gt;
| COM || Any comment attached to the FROM file is copied to the TO file.&lt;br /&gt;
|-&lt;br /&gt;
| CLONE || The date, comments and protection bits of the FROM file are copied to the TO file.&lt;br /&gt;
|-&lt;br /&gt;
| NOPRO || The protection bits of the FROM file are not copied to the TO file. The TO file will be given standard protection bits of r, w, e and d.&lt;br /&gt;
|-&lt;br /&gt;
| NOREPLACE || Checks if the destination file already exists. If this is the case, then the file is not copied.&lt;br /&gt;
|-&lt;br /&gt;
| INTERACTIVE || Checks if the destination file already exists. In this case, you will be prompted to confirm that you want the file to be overwritten (answer &#039;y&#039; for &#039;yes&#039;).&lt;br /&gt;
|-&lt;br /&gt;
| FORCE || If the destination file could not be created because there already is a file of that name which is protected against deletion or writing, then the protection will be removed first before the destination file is created.&lt;br /&gt;
|-&lt;br /&gt;
| ARCHIVE || Copy only those files for which the &#039;archived&#039; flag is unset. After copying, the &#039;archived&#039; flag will be set on the file just copied. Note that the ARCHIVE option implies the CLONE option which will be enabled by default.&lt;br /&gt;
|-&lt;br /&gt;
| NEWER || Overwrite files only if the destination file is older than the source file, or of there is no destination file by the same name as the source file.&lt;br /&gt;
|-&lt;br /&gt;
| COPYLINKS || Copy the contents of a file referenced by a hard or soft link; the default is to skip copying linked files.&lt;br /&gt;
|-&lt;br /&gt;
| FOLLOWLINKS || When used with the ALL option, the COPY command will follow hard and soft links to directories; the default is to skip links to directories.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally, COPY displays a requester if the COPY cannot continue for some reason. When the NOREQ option is given, all requesters are suppressed. This is useful in scripts and can prevent a COPY failure from stopping the script while it waits for a response. For instance, if a script calls for a certain file to be copied and the system cannot find that file, normally the script would display a requester and would wait until a response was given. With the NOREQ option, the COPY command would be aborted and the script would continue.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; COPY File1 TO :Work/File2&lt;br /&gt;
&lt;br /&gt;
copies File1 in the current directory to File2 in the Work directory.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; COPY ~(#?.info) TO DF1:Backup&lt;br /&gt;
&lt;br /&gt;
copies all the files not ending in .info in the current directory to the Backup directory on the disk in DF1:. This is a convenient use of pattern matching to save storage space when icons are not necessary.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; COPY Work:Test TO &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
copies the files in the Test directory on Work to the current directory; subdirectories in Test will not be copied.&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
 1&amp;gt; COPY Work:Test TO DF0:Test ALL&lt;br /&gt;
&lt;br /&gt;
copies all the files and any subdirectories of the Test directory on Work to the Test directory on DF0:. If a Test directory does not already exist on DF0:, AmigaDOS will create one.&lt;br /&gt;
&lt;br /&gt;
; Example 5:&lt;br /&gt;
 1&amp;gt; COPY Work:Test% TO DF0: ALL&lt;br /&gt;
&lt;br /&gt;
copies the directory Test including all the contained files and subdiretories to DF0:. If DF0:Test does not exist, it will be created.&lt;br /&gt;
&lt;br /&gt;
; Example 6:&lt;br /&gt;
 1&amp;gt; COPY  (Dir1|Dir2|%)  TO  DF0:  ALL QUIET&lt;br /&gt;
&lt;br /&gt;
copies the directories Dir1 and Dir2 including all the contained files and subdirectories to DF0:. If any of the directories does not already exist on DF0:, AmigaDOS will create each.&lt;br /&gt;
&lt;br /&gt;
; Example 7:&lt;br /&gt;
 1&amp;gt; COPY DF0: TO DF1: ALL QUIET&lt;br /&gt;
&lt;br /&gt;
copies all files and directories on the disk in DF0: to DF1:, without displaying on the screen any file/directory names as they are copied. (This is quite slow in comparison to DiskCopy.)&lt;br /&gt;
&lt;br /&gt;
== COUNTLINES ==&lt;br /&gt;
&lt;br /&gt;
Counts how many lines a file is made of.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: COUNTLINES {&amp;lt;filename&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME/A/M&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
COUNTLINES counts the number of lines of the file(s) given in argument. If several arguments are given, a sum of all line counts will be returned.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
Adjusts various options of the microprocessor installed in your Amiga. The command also shows the processor and options that are currently enabled.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: CPU [CACHE | NONCACHE] [BURST | NOBURST] [DATACAHCE | NODATACACHE] [DATABURST | NODATABURST] [INSTCACHE | NOINSTCACHE] [INSTBURST | NOINSTBURST] [FASTROM | NOFASTROM] [TRAP | NOTRAP] [COPYBACK | NOCOPYBACK] [EXTERNALCACHE | NOEXTERNALCACHE] [NOMMUTEST] [CHECK 68010 | 68020 | 68030 | 68040 | 68881 | 68882 | 68851 | MMU | FPU]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: CACHES/S,BURST/S,NOCACHE/S,NOBURST/&amp;quot;,DATACACHE/S,NODATACHE/S,DATABURST/S,NODATABURST/S,INSTCACHE/S,NOINSTCACHE/S,INSTBURST/S,NOINSTBURST/S,COPYBACK/S,NOCOPYBACK/S,EXTERNALCACHE/S,NOEXTERNALCACHE/S,FASTROM/S,NOFASTROM/S,TRAP/S,NOTRAP/S,NOMMUTEST/S,CHECK/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
Many options only work with certain members of the 680x0 processor family. The 68020 has a special type of memory known as instruction cache. When instruction cache is used, instructions are executed more quickly. The 68030 and 68040 have two types of cache memory: instruction and data.&lt;br /&gt;
&lt;br /&gt;
If mutually exclusive options are specified, the safest option is used. Availability of the following options depends on the type of microprocessor present.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| CACHE || Turns on all caches.&lt;br /&gt;
|-&lt;br /&gt;
| NOCACHE || Turns off all caches.&lt;br /&gt;
|-&lt;br /&gt;
| BURST || Turns on burst mode for both data and instructions.&lt;br /&gt;
|-&lt;br /&gt;
| NOBURST || Turns off burst mode for data and instructions.&lt;br /&gt;
|-&lt;br /&gt;
| DATACACHE || Turns on data cache.&lt;br /&gt;
|-&lt;br /&gt;
| NODATACACHE || Turns off data cache.&lt;br /&gt;
|-&lt;br /&gt;
| DATABURST || Turns on burst mode for data.&lt;br /&gt;
|-&lt;br /&gt;
| NODATABURST || Turns off burst mode for data.&lt;br /&gt;
|-&lt;br /&gt;
| INSTCACHE || Turns on instruction cache.&lt;br /&gt;
|-&lt;br /&gt;
| NOINSTCACHE || Turns off instruction cache.&lt;br /&gt;
|-&lt;br /&gt;
| INSTBURST || Turns on burst mode for instructions.&lt;br /&gt;
|-&lt;br /&gt;
| NOINSTBURST || Turns off burst mode for instructions.&lt;br /&gt;
|-&lt;br /&gt;
| FASTROM || With a processor having a supported MMU, copies the system ROM into 32-bit RAM, making access to operating system functions significantly faster. CPU then write-protects the RAM area so that the data cannot be changed.&lt;br /&gt;
|-&lt;br /&gt;
| NOFASTROM || Turns off FASTROM.&lt;br /&gt;
|-&lt;br /&gt;
| TRAP || This option is for developers only.&lt;br /&gt;
|-&lt;br /&gt;
| NOTRAP || This option is for developers only.&lt;br /&gt;
|-&lt;br /&gt;
| COPYBACK || Turns on 68040 copyback cache.&lt;br /&gt;
|-&lt;br /&gt;
| NOCOPYBACK || Turns off 68040 copyback cache.&lt;br /&gt;
|-&lt;br /&gt;
| EXTERNALCACHE || Turns on external cache.&lt;br /&gt;
|-&lt;br /&gt;
| NOEXTERNALCACHE || Turns off external cache.&lt;br /&gt;
|-&lt;br /&gt;
| NOMMUTEST || Allows the MMU settings to be changed without checking to see if an MMU is currently in use.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The CHECK option, when given with a keyword (68010, 68020, 68030, 68040, 68881, 68882, or 68851, MMU, FPU) checks for the presence of the processor indicated by the keyword.&lt;br /&gt;
&lt;br /&gt;
; Examples:&lt;br /&gt;
 1&amp;gt; CPU&lt;br /&gt;
 System: 68030 68881 (INST: Cache Burst) (DATA: Cache NoBurst)&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CPU NODATACACHE FASTROM&lt;br /&gt;
 System: 68030 68881 FastRom (INST: Cache Burst)&lt;br /&gt;
 (DATA: NoCache NoBurst)&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CPU NOBURST DATACACHE NOINSTCACHE&lt;br /&gt;
 System: 68030 68881 (INST: NoCache NoBurst) (DATA: Cache NoBurst)&lt;br /&gt;
&lt;br /&gt;
== CUT ==&lt;br /&gt;
&lt;br /&gt;
Cuts some characters or words from a string.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: CUT &amp;lt;string&amp;gt; [ CHAR &amp;lt;range&amp;gt; | WORD &amp;lt;range&amp;gt; [SEPARATOR] ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: STRING/A,C=CHAR/K,W=WORD/K,S=SEPARATOR&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
CUT will extract any number of characters or words out of a string.&lt;br /&gt;
&lt;br /&gt;
The extracted string is defined by a begin and an end position. Those values will be characters or words positions in the original string. I.e you may want to extract a string beginning with a character at position P1 and ending with a character at position P2. Behaviour is the same with words instead of characters.&lt;br /&gt;
&lt;br /&gt;
Use the CHAR argument if you want to use begin/end values defined in characters. Use the WORD argument if you want to extract any number of words. Words are strings separated by the &amp;quot;space&amp;quot; character (default). Using the SEPARATOR argument, you can specify a string of any  length to be used to split the original string in words.&lt;br /&gt;
&lt;br /&gt;
The length of the string to extract will depend on the begin (P1) and the end (P2) position in the original string. This P1-P2 range to give after the CHAR (or WORD) argument follows the template:&lt;br /&gt;
&lt;br /&gt;
P1[-P2] | [P1-]P2 | [P1]-P2 | P1-[P2]&lt;br /&gt;
&lt;br /&gt;
The begin (P1) and end (P2) values are optional.&lt;br /&gt;
&lt;br /&gt;
This allows to extract only one character (or word) if you omit the end value. i.e with the argument like &amp;quot;CHAR P1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In order to extract several characters (or words), you need to specify a range with the &amp;quot;-&amp;quot; character like &amp;quot;CHAR P1-P2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can omit P1 if you want a string starting at the beginning of &amp;lt;string&amp;gt; with &amp;quot;CHAR -P2&amp;quot;. And you do not need to know the string length because P2 can be omited like &amp;quot;CHAR P1-&amp;quot;. This will extract the string beginning with character at position P1 and ending at the end of the original &amp;lt;string&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
To extract one character:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CUT &amp;quot;Hello world&amp;quot; CHAR=2    -&amp;gt;  e&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
To extract from character 1 to 5:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CUT &amp;quot;Hello world&amp;quot; CHAR=1-5  -&amp;gt;  Hello&lt;br /&gt;
&lt;br /&gt;
;Example 3:&lt;br /&gt;
The same without specifying the beginning position.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CUT &amp;quot;Hello world&amp;quot; CHAR=-5   -&amp;gt;  Hello&lt;br /&gt;
&lt;br /&gt;
;Example 4:&lt;br /&gt;
To extract from character 7 of the string till the end:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CUT &amp;quot;Hello world&amp;quot; CHAR=7-   -&amp;gt;  world&lt;br /&gt;
&lt;br /&gt;
;Example 5:&lt;br /&gt;
To extract one word (with another separator):&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CUT &amp;quot;Hello world&amp;quot; WORD=1 separator=&amp;quot;ll&amp;quot;    -&amp;gt;  He&lt;br /&gt;
&lt;br /&gt;
== DATE ==&lt;br /&gt;
&lt;br /&gt;
Displays or sets the system date and/or time.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: DATE [&amp;lt;day&amp;gt;] [&amp;lt;date&amp;gt;] [&amp;lt; time &amp;gt;] [SERVER &amp;lt;name&amp;gt;] [PORT &amp;lt;n&amp;gt;] [OFFSET &amp;lt;n&amp;gt;]&lt;br /&gt;
: [LFORMAT &amp;lt;string&amp;gt;] [TO | VER &amp;lt;filename&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DAY,DATE,TIME,SERVER/K,PORT/K/N,OFFSET/K/N,LFORMAT/K,TO=VER/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
DATE with no argument displays the currently set system date and time, including the day of the week. Time is displayed using a 24-hour clock.&lt;br /&gt;
&lt;br /&gt;
DATE &amp;lt;date&amp;gt; sets just the date. The date can be specified either in the current default locale format or in the AmigaDOS format DD-MMM-YY (day-month-year). If the AmigaDOS format is used, the hyphens between the arguments are required. A leading zero in the date is not necessary. The first 3 letters of the month (in the current locale language) must be used, as well as the last two digits of the year.&lt;br /&gt;
&lt;br /&gt;
The date can also be reset by specifying a day name, thus setting the date forward to that day of the week. You can also use tomorrow or yesterday as the &amp;lt;day&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
DATE &amp;lt;time&amp;gt; sets the time. The time can be specified either in the current default locale format or in the AmigaDOS format HH:MM:SS (hours:minutes:seconds). Seconds are optional.&lt;br /&gt;
&lt;br /&gt;
The SERVER option is used to retrieve the current date and time from a remote server over a TCP/IP connection using the Network Time Protocol (NTP). A list of NTP time servers and some good background information can be found at http://www.eecis.udel.edu/~mills/ntp/servers.html.&lt;br /&gt;
&lt;br /&gt;
The SERVER option may be set to the special value &amp;quot;PREFS&amp;quot; which will retrieve the date and time from the currently configured remote server information stored in the Time preferences.&lt;br /&gt;
&lt;br /&gt;
By using PORT you can specify a port number different to the default 123.&lt;br /&gt;
&lt;br /&gt;
The OFFSET argument allows to set the offset in minutes of your location with respect to Greenwich Mean Time (GMT). If OFFSET is not specified, the locale offset will be used.&lt;br /&gt;
&lt;br /&gt;
The LFORMAT option modifies the output of DATE using one or more substitution operators. See below for available substitution operators.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| %a || abbreviated weekday name&lt;br /&gt;
|-&lt;br /&gt;
| %A || weekday name&lt;br /&gt;
|-&lt;br /&gt;
| %b || abbreviated month name&lt;br /&gt;
|-&lt;br /&gt;
| %B || month name&lt;br /&gt;
|-&lt;br /&gt;
| %c || same as &amp;quot;%a %b %d %H:%M:%S %Y&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| %d || day number with leading 0s&lt;br /&gt;
|-&lt;br /&gt;
| %D || same as &amp;quot;%m/%d/%y&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| %e || day number with leading spaces&lt;br /&gt;
|-&lt;br /&gt;
| %h || abbreviated month name&lt;br /&gt;
|-&lt;br /&gt;
| %H || hour using 24-hour style with leading 0s&lt;br /&gt;
|-&lt;br /&gt;
| %I || hour using 12-hour style with leading 0s&lt;br /&gt;
|-&lt;br /&gt;
| %j || julian date&lt;br /&gt;
|-&lt;br /&gt;
| %m || month number with leading 0s&lt;br /&gt;
|-&lt;br /&gt;
| %M || the number of minutes with leading 0s&lt;br /&gt;
|-&lt;br /&gt;
| %n || insert a linefeed&lt;br /&gt;
|-&lt;br /&gt;
| %p || AM or PM strings&lt;br /&gt;
|-&lt;br /&gt;
| %q || hour using 24-hour style&lt;br /&gt;
|-&lt;br /&gt;
| %Q || hour using 12-hour style&lt;br /&gt;
|-&lt;br /&gt;
| %r || same as &amp;quot;%I:%M:%S %p&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| %R || same as &amp;quot;%H:%M&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| %S || number of seconds with leadings 0s&lt;br /&gt;
|-&lt;br /&gt;
| %t || insert a tab character&lt;br /&gt;
|-&lt;br /&gt;
| %T || same as &amp;quot;%H:%M:%S&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| %U || week number, taking Sunday as first day of week&lt;br /&gt;
|-&lt;br /&gt;
| %w || weekday number&lt;br /&gt;
|-&lt;br /&gt;
| %W || week number, taking Monday as first day of week&lt;br /&gt;
|-&lt;br /&gt;
| %x || same as &amp;quot;%m/%d/%y&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| %X || same as &amp;quot;%H:%M:%S&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| %y || year using two digits with leading 0s&lt;br /&gt;
|-&lt;br /&gt;
| %Y || year using four digits with leading 0s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you specify the TO or VER option, followed by a filename, the output of the DATE command is sent to that file, overwriting any existing contents.&lt;br /&gt;
&lt;br /&gt;
If your Amiga does not have a battery backed-up hardware clock and you do not set the date, the system, upon booting, will set the date to the date of the most recently created file on the boot disk.&lt;br /&gt;
&lt;br /&gt;
{{Note| Adjustments made with DATE only change the software clock. They will not survive past power-down. To set the battery backed-up hardware clock from the Shell, you must set the date and use SETCLOCK SAVE.}}&lt;br /&gt;
&lt;br /&gt;
If DATE succeeded in setting the system date and/or time, the primary return code (RC) will be set to 0. A return code of 5 or 20 indicates that DATE failed partially or completely. If an error occurred when trying to get time from a remote server, the primary return code will be set to 21. In this case the secondary return code (RESULT2) may contain a TCP stack socket/resolver error number and the corresponding error message will be displayed.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; DATE&lt;br /&gt;
 6-Sep-92&lt;br /&gt;
&lt;br /&gt;
displays the current date and time.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; DATE LFORMAT &amp;quot;Today it&#039;s %A, %m/%d/%Y, %T&amp;quot;&lt;br /&gt;
&lt;br /&gt;
displays a message like &amp;quot;Today it&#039;s Monday, 02/17/2003, 22:30:56&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; DATE 1-jan-04&lt;br /&gt;
&lt;br /&gt;
sets the date to January 1st, 2004 (the earliest date you can set is January 1, 1978). The time is not reset.&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
 1&amp;gt; DATE tomorrow&lt;br /&gt;
&lt;br /&gt;
resets the date to one day ahead.&lt;br /&gt;
&lt;br /&gt;
; Example 5:&lt;br /&gt;
 1&amp;gt; DATE TO Fred&lt;br /&gt;
&lt;br /&gt;
sends the current date to the file Fred.&lt;br /&gt;
&lt;br /&gt;
; Example 6:&lt;br /&gt;
 1&amp;gt; DATE 23:00&lt;br /&gt;
&lt;br /&gt;
sets the current time to 11:00 p.m.&lt;br /&gt;
&lt;br /&gt;
; Example 7:&lt;br /&gt;
 1&amp;gt; DATE SERVER foo.bar.com OFFSET -480&lt;br /&gt;
&lt;br /&gt;
gets the current date and time from the foo.bar.com NTP server for a location based on the Pacific Standard Time used in the United States.&lt;br /&gt;
&lt;br /&gt;
== DELETE ==&lt;br /&gt;
&lt;br /&gt;
Deletes files or directories.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: DELETE {&amp;lt;name|pattern&amp;gt;} [ALL] [QUIET] [INTER|INTERACTIVE]&lt;br /&gt;
: [FORCE] [WIPE]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILE/M/A,ALL/S,QUIET/S,INTER=INTERACTIVE,FORCE/S,WIPE/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
DELETE attempts to delete (erase) the specified file(s). If more than one file was specified, AmigaDOS continues to the next file in the list.&lt;br /&gt;
&lt;br /&gt;
You can use pattern matching to delete files. The pattern may specify directory levels as well as filenames. All files that match the pattern are deleted. To abort a multiple-file DELETE, press Ctrl-C.&lt;br /&gt;
&lt;br /&gt;
AmigaDOS does not request confirmation of deletions. An error in a pattern-matching DELETE can have severe consequences, as deleted files are unrecoverable. Be sure you understand pattern matching before you use this feature, and keep backups of important files.&lt;br /&gt;
&lt;br /&gt;
Warning: If you try to delete a directory that contains files, you will receive a message stating that the directory could not be deleted as it is not empty. To override this, use the ALL option. DELETE ALL deletes the named directory, its subdirectories, and all files.&lt;br /&gt;
&lt;br /&gt;
Filenames are displayed on the screen as they are deleted. To suppress the screen output, use the QUIET option or the local shell variable _Verbosity with a negative value.&lt;br /&gt;
&lt;br /&gt;
If the d (deletable) protection bit of a file has been cleared, that file cannot be deleted unless the FORCE option is used.&lt;br /&gt;
&lt;br /&gt;
If the INTERACTIVE option is used, you will be prompted to confirm each single deletion (enter &#039;y&#039; to confirm). Note that the FORCE option will override the INTERACTIVE option, turning it off.&lt;br /&gt;
&lt;br /&gt;
For most file systems deleting a single file will only make the storage space previously reserved for it available again, but will not render the contents of the file unrecoverable. In order to make recovery of sensitive data much harder, use the WIPE option which, prior to deleting the file, will overwrite the contents of the file up to 7 times using the United States Department of Defense 5220-22.M standard procedure for this purpose. This can take long to complete.&lt;br /&gt;
&lt;br /&gt;
{{Note|The WIPE operation implemented by the DELETE command is suitable only for magnetic storage media, such as floppy disks or hard disk drives. To wipe optical, magneto-optical or solid state memory storage devices you would need a different method, which is not currently implemented by the DELETE command.&lt;br /&gt;
&lt;br /&gt;
While the contents of the file will be overwritten, the name of the file and any directories to be deleted will not be overwritten. You may want to move or rename file and directories prior to deletion.&lt;br /&gt;
&lt;br /&gt;
While the contents of the file will be overwritten, the name of the file and any directories to be deleted will not be overwritten. You may want to move or rename file and directories prior to deletion.&lt;br /&gt;
&lt;br /&gt;
The DELETE command does not guarantee that the file contents will be securely deleted because the file system and the underlying storage hardware may reduce the effectiveness of the overwrite operations. The FORMAT command may be more effective in securely wiping a storage medium, albeit at the expense of wiping the entire partition/disk rather than just a single file.&lt;br /&gt;
&lt;br /&gt;
If the FORCE and WIPE options are combined, then each file will have its write and delete protection removed before it is wiped.}}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; DELETE Old-file&lt;br /&gt;
&lt;br /&gt;
deletes the Old-file file in the current directory.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; DELETE Work/Prog1 Work/Prog2 Work&lt;br /&gt;
&lt;br /&gt;
deletes the files Prog1 and Prog2 in the Work directory, and then deletes the Work directory (if there are no other files left in it).&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; DELETE T#?/#?(1|2)&lt;br /&gt;
&lt;br /&gt;
deletes all files that end in 1 or 2 in directories that start with T.&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
 1&amp;gt; DELETE DF1:#? ALL FORCE&lt;br /&gt;
&lt;br /&gt;
deletes all the files on DF1:, even these set as not deletable.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#PROTECT|PROTECT]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FORMAT|FORMAT]]&lt;br /&gt;
&lt;br /&gt;
== DELETENETROUTE ==&lt;br /&gt;
&lt;br /&gt;
Deletes a message routing path currently in use.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: DELETENETROUTE [QUIET] [DESTINATION=&amp;lt;ip&amp;gt;] [DEFAULTGATEWAY=&amp;lt;ip&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: QUIET/S,DST=DESTINATION/K,DEFAULT=DEFAULTGATEWAY/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
The commands removes a route that was defined in your network. The available options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| QUIET || This option causes the program not to emit any error messages or progress reports. Also, if the program encounters an error it will flag this as failure code 5 which can be looked at using the &amp;quot;if warn&amp;quot; shell script command. If this option is not in effect, failure codes will be more severe and all sorts of progress information will be displayed.&lt;br /&gt;
|-&lt;br /&gt;
| DST or DESTINATION || The destination address of a route (or in other words, where the route to be added leads to) that should be deleted. This must be an IP address or a symbolic name.&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT or DEFAULTGATEWAY || The default gateway address to be deleted. This must be an IP address or a symbolic name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|This command is similar to the Unix &amp;quot;route&amp;quot; command.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|You can try to delete a route that doesn&#039;t exist, but it will get you an error message instead of failing gracefully.}}&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ADDNETROUTE|ADDNETROUTE]]&lt;br /&gt;
&lt;br /&gt;
== DIR ==&lt;br /&gt;
&lt;br /&gt;
Displays a sorted list of the files in a directory.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: [&amp;lt;dir|pattern&amp;gt;] [OPT A|I|AI|D|F] [ALL] [DIRS] [FILES] [INTER]&lt;br /&gt;
: [SHOWPROGRAMS] [MAXCOLUMNS &amp;lt;number of columns&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DIR,OPT/K,ALL/S,DIRS/S,FILES/S,INTER/S,SHOWPROGRAMS/S,MAXCOLUMNS/K/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
DIR displays the file and directory names contained in the specified directory, or the current directory if no name is given. Directories are listed first, followed by an alphabetical list of the files in two columns. Pressing Ctrl-C aborts a directory listing.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| ALL || Displays all subdirectories and their files.&lt;br /&gt;
|-&lt;br /&gt;
| DIRS || Displays only directories.&lt;br /&gt;
|-&lt;br /&gt;
| FILES || Displays only files.&lt;br /&gt;
|-&lt;br /&gt;
| INTER || Enters an interactive listing mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SHOWPROGRAMS || Executable programs and script files will be highlighted in the listing, by printing their names in boldfaced script.&lt;br /&gt;
|-&lt;br /&gt;
| MAXCOLUMNS || How many file names will be printed per line depends upon the width of the output window and the lengths of the file names. You can, however, limit how many names will be printed in each line by specifying the maximum number of columns.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|The ALL, DIRS, FILES and INTER keywords supersede the OPT A, D, F and I options, respectively. The older keywords are retained for compatibility with earlier versions of AmigaDOS. Do not use OPT with the full keywords--ALL, DIRS, FILES, or INTER.}}&lt;br /&gt;
&lt;br /&gt;
The interactive listing mode stops after each name and displays a question mark at which you can enter commands. The acceptable responses are shown below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Return || Displays the next name on the list.&lt;br /&gt;
|-&lt;br /&gt;
| E || Enters a directory; the files in that directory are displayed.&lt;br /&gt;
|-&lt;br /&gt;
| B || Goes back one directory level.&lt;br /&gt;
|-&lt;br /&gt;
| DEL or DELETE || Deletes a file or empty directory. DEL does not refer to the Del key; enter the letters D, E, and L.&lt;br /&gt;
|-&lt;br /&gt;
| T || Types the contents of a file.&lt;br /&gt;
|-&lt;br /&gt;
| C or COMMAND || Allows you to enter additional AmigaDOS commands.&lt;br /&gt;
|-&lt;br /&gt;
| Q || Quits interactive editing.&lt;br /&gt;
|-&lt;br /&gt;
| ? || Displays a list of the available interactive-mode commands.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The COMMAND option allows almost any AmigaDOS command to be executed during the interactive directory list. When you want to issue a command, type C (or COM) at the question mark prompt. DIR will ask you for the command. Type the desired command, then press Return. The command will be executed and DIR will continue. You can also combine the C and the command on one line, by putting the command in quotes following the C.&lt;br /&gt;
&lt;br /&gt;
For instance, C &amp;quot;type prefs.info hex&amp;quot; is equivalent to pressing Q to exit interactive listing mode and return to a regular Shell prompt, and typing:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; TYPE Prefs.info HEX&lt;br /&gt;
&lt;br /&gt;
The Prefs.info file would be typed to the screen in hexadecimal format.&lt;br /&gt;
&lt;br /&gt;
It is dangerous to format a disk from the DIR interactive mode, as the format will take place immediately, without any confirmation requesters appearing. Also, starting another interactive DIR from interactive mode will result in garbled output.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; DIR Workbench:&lt;br /&gt;
&lt;br /&gt;
displays a list of the directories and files on the Workbench disk.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; DIR MyDisk:#?.memo&lt;br /&gt;
&lt;br /&gt;
displays all the directories and files on MyDisk that end in .memo.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; DIR Extras: ALL&lt;br /&gt;
&lt;br /&gt;
displays the complete contents of the Extras drawer: all directories, all subdirectories, and all files, including those in the subdirectories.&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
 1&amp;gt; DIR Workbench: DIRS&lt;br /&gt;
&lt;br /&gt;
displays only the directories on Workbench.&lt;br /&gt;
&lt;br /&gt;
; Example 5:&lt;br /&gt;
 1&amp;gt; DIR Workbench: INTER&lt;br /&gt;
&lt;br /&gt;
begins an interactive list of the contents of the Workbench disk.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#LIST|LIST]]&lt;br /&gt;
&lt;br /&gt;
== DISKCHANGE ==&lt;br /&gt;
&lt;br /&gt;
Informs the Amiga that you have changed a disk in a disk drive.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: DISKCHANGE &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DRIVE/A&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
The DISKCHANGE command is only necessary when you are using 5.25 inch floppy disk drives or removable media drives without automatic diskchange hardware. Whenever you change the disk or cartridge of such a drive, you must use DISKCHANGE to inform the system of the switch.&lt;br /&gt;
&lt;br /&gt;
DISKCHANGE can also be used if you edit a disk icon image and wish to see the new icon on the Workbench screen immediately. This is the only way to display an altered hard disk icon without rebooting.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&lt;br /&gt;
If a requester appears and asks you to insert a new disk into your 5.25 inch drive, known as DF2:, you must insert the disk and then type:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; DISKCHANGE DF2:&lt;br /&gt;
&lt;br /&gt;
AmigaDOS then recognizes the new disk and you can proceed.&lt;br /&gt;
&lt;br /&gt;
== DISMOUNT ==&lt;br /&gt;
&lt;br /&gt;
Shuts down a file system device and all its associated volumes.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: DISMOUNT &amp;lt;device&amp;gt; [SOFT] [FORCE]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DEVICE/A,SOFT/S,FORCE/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
DISMOUNT can be used to shut down a file system device, such as &amp;quot;DF0:&amp;quot; and all its associated volumes. If the request to shut down a file system device is acknowledged, by default, it will appear as if the file system had never been mounted in the first place.&lt;br /&gt;
&lt;br /&gt;
Using the SOFT keyword, will only cause the current volume to dismount, the device (and associated geometry) will remain mounted so that the next access to the device name will cause dos.library to restart the filesystem process once again, with the same characteristics as before.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| DEVICE || This must be the name of a file system device, such as &amp;quot;DF0:&amp;quot;. It is not permitted to use the name of an assignment or volume instead.&lt;br /&gt;
|-&lt;br /&gt;
| SOFT || This switch will cause only the volume to be dismounted, the device will remain mounted and will restart a new filesystem process upon the next access to the device name.&lt;br /&gt;
|-&lt;br /&gt;
| FORCE || Attempt to remove the file system device data from memory even if the file system itself is unwilling to go. This is a potentially dangerous option and should be used only as a last resort when everything else has failed. Note that this option may not succeed in cleaning up all the resources the file system may still be using.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|A file system device has to acknowledge the request to be shut down, which means that it might not respond to your request at all.}}&lt;br /&gt;
&lt;br /&gt;
== DUMPDEBUGBUFFER ==&lt;br /&gt;
&lt;br /&gt;
Dumps kernel&#039;s debug output to a shell.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: DUMPDEBUGBUFFER [&amp;lt;file&amp;gt;] [CLEAR]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILE,CLEAR/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
DUMPDEBUGBUFFER dumps the current content of the kernel&#039;s debug buffer to the standard output (shell). Optionally the buffer content can be saved to a file with the FILE parameter. If the CLEAR option is given, the debug buffer is cleared.&lt;br /&gt;
&lt;br /&gt;
;Example 1&lt;br /&gt;
Print the debug buffer content:&lt;br /&gt;
 1&amp;gt; DUMPDEBUGBUFFER&lt;br /&gt;
 gfx AltiVec/VMX enabled&lt;br /&gt;
 gfx PPC64xx optimizations enabled&lt;br /&gt;
 a1ide.device 53.20 (24.9.2014)&lt;br /&gt;
 [a1ide/ata_read_drive_properties] unit refused ATACMD_SET_FEATURES, SETFEATURES_EN_RLA&lt;br /&gt;
 it8212ide.device 53.20 (24.9.2014)&lt;br /&gt;
 lsi53c8xx.device 53.20 (24.9.2014)&lt;br /&gt;
 sii0680ide.device 53.20 (24.9.2014)&lt;br /&gt;
 sii3112ide.device 53.20 (24.9.2014)&lt;br /&gt;
 sii3114ide.device 53.20 (24.9.2014)&lt;br /&gt;
 sii3512ide.device 53.20 (24.9.2014)&lt;br /&gt;
 CS4281 DRIVEINIT&lt;br /&gt;
 No card present.&lt;br /&gt;
 No CMI8738 found! :-(&lt;br /&gt;
 No Envy24 found! :-(&lt;br /&gt;
 No SB128 found! :-(&lt;br /&gt;
 No SOLO_ONE found! :-(&lt;br /&gt;
 [VIA-AC97] Error: sorry, you don&#039;t seem to have the AC&#039;97 codec!&lt;br /&gt;
 Unable to initialize Card subsystem&lt;br /&gt;
&lt;br /&gt;
;Example 2&lt;br /&gt;
Save the debug buffer content to a file &amp;quot;debug.log&amp;quot;.&lt;br /&gt;
 1&amp;gt; DUMPDEBUGBUFFER &amp;quot;debug.log&amp;quot;&lt;br /&gt;
 Buffer saved as &#039;debug.log&#039;&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#KDEBUG|KDEBUG]]&lt;br /&gt;
&lt;br /&gt;
== ECHO ==&lt;br /&gt;
&lt;br /&gt;
Displays a string.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ECHO [&amp;lt;string&amp;gt;] [NOLINE] [FIRST &amp;lt;n&amp;gt;] [LEN &amp;lt;n&amp;gt;] [TO &amp;lt;filename&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: /M,LINE/S,FIRST/K/N,LEN/K/N,TO/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
ECHO writes the specified string to the current output window or device. By default the string is sent to the screen, but if you use the TO option, you can send the string to any specified device or file.&lt;br /&gt;
&lt;br /&gt;
When the NOLINE option is specified, ECHO does not automatically move the cursor to the next line after printing the string.&lt;br /&gt;
&lt;br /&gt;
The FIRST and LEN options allow the echoing of a substring. FIRST &amp;lt;n&amp;gt; indicate the character position from which to begin the echo; LEN &amp;lt;n&amp;gt; indicates the number of characters of the substring to echo, beginning with the FIRST character. If the FIRST option is omitted and only the LEN keyword is given, the substring printed consists of the rightmost &amp;lt;n&amp;gt; characters of the main string. For example, if your string is 20 characters long and you specify LEN 4, the 17th, 18th, 19th and 20th characters of the string are echoed.&lt;br /&gt;
&lt;br /&gt;
; Examples:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ECHO &amp;quot;hello out there!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hello out there!&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ECHO &amp;quot;hello out there!&amp;quot; NOLINE FIRST 0 LEN 5 hello1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For further examples using the ECHO command, see [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]].&lt;br /&gt;
&lt;br /&gt;
== ED ==&lt;br /&gt;
&lt;br /&gt;
Edits text files (a screen editor).&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ED [FROM] &amp;lt;filename&amp;gt; [Size &amp;lt;n&amp;gt;] [WITH &amp;lt;filename&amp;gt;] [WINDOW &amp;lt;window specification&amp;gt;] [TABS &amp;lt;n&amp;gt;] [WIDTH | COLS &amp;lt;n&amp;gt;] [HEIGHT | ROWS &amp;lt;n&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FROM/A,SIZE/N,WITH/K,WINDOW/K,TABS/N,WIDTH=COLS/N,HEIGHT=ROWS/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
See [[AmigaOS_Manual:_AmigaDOS_Using_the_Editors#ED|ED]] for more information. See [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]] for an example using ED.&lt;br /&gt;
&lt;br /&gt;
== EDIT ==&lt;br /&gt;
&lt;br /&gt;
Edits text files by processing the source file sequentially (a line editor).&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: EDIT [FROM] &amp;lt;filename&amp;gt; [[TO &amp;lt;filename&amp;gt;] [WITH &amp;lt;filename&amp;gt;] [VER &amp;lt;filename&amp;gt;] [OPT P &amp;lt;lines&amp;gt; | W &amp;lt;chars&amp;gt; | P&amp;lt;lines&amp;gt;W&amp;lt;chars&amp;gt;] [WIDTH &amp;lt;chars&amp;gt;] [PREVIOUS &amp;lt;lines&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FROM/A,TO,WITH/K,VER/K,OPT/K,WIDTH/N,PREVIOUS/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
See [[AmigaOS_Manual:_AmigaDOS_Using_the_Editors#EDIT|EDIT]] for more information.&lt;br /&gt;
&lt;br /&gt;
== ELSE ==&lt;br /&gt;
&lt;br /&gt;
Specifies an alternative for an IF statement in a script file.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ELSE&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
ELSE must be used in conjunction with the IF command. ELSE is used in an IF block of a script to specify an alternative action if the IF condition is not true. If the IF condition is not true, execution of the script jumps from the IF line to the line after ELSE; all intervening commands are skipped. If the IF condition is true, the commands immediately following the IF statement are executed up to the ELSE. Then, execution skips to the ENDIF statement that concludes the IF block.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&lt;br /&gt;
Assume a script, called Display, contains the following block:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 IF exists picfile&lt;br /&gt;
    MultiView picfile&lt;br /&gt;
 ELSE&lt;br /&gt;
    ECHO &amp;quot;picfile is not in this directory&amp;quot;&lt;br /&gt;
 ENDIF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If picfile can be found in the current directory, the MultiView program is executed and picfile is displayed on the screen.&lt;br /&gt;
&lt;br /&gt;
If picfile cannot be found in the current directory, the script skips to the ECHO command. The following message is displayed in the Shell window:&lt;br /&gt;
&lt;br /&gt;
 picfile is not in this directory&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IF|IF]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ENDIF|ENDIF]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#EXECUTE|EXECUTE]]&lt;br /&gt;
&lt;br /&gt;
== ENDCLI ==&lt;br /&gt;
&lt;br /&gt;
Ends a Shell process.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ENDCLI&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
ENDCLI ends a Shell process.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ENDSHELL|ENDSHELL]]&lt;br /&gt;
&lt;br /&gt;
== ENDIF ==&lt;br /&gt;
&lt;br /&gt;
Terminates an IF block in a script file.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ENDIF&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
ENDIF must be used when an IF commands is used. ENDIF is used in scripts at the end of an IF block. If the IF condition is not true or if the true-condition commands are executed and an ELSE is encountered, the execution of the script skips to the next ENDIF command. Every IF statement must be terminated by an ENDIF.&lt;br /&gt;
&lt;br /&gt;
The ENDIF applies to the most recent IF or ELSE command.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IF|IF]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ELSE|ELSE]]&lt;br /&gt;
&lt;br /&gt;
== ENDSHELL ==&lt;br /&gt;
&lt;br /&gt;
Ends a Shell process.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ENDSHELL&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
ENDSHELL ends a Shell process and closes the Shell window.&lt;br /&gt;
&lt;br /&gt;
The Shell process can also be ended by ENDCLI, by clicking on the close gadget, or by pressing CTRL-\.&lt;br /&gt;
&lt;br /&gt;
Use ENDSHELL only when the Workbench or another Shell is running. If you quit the Workbench and you close your only Shell, you cannot communicate with the Amiga without rebooting.&lt;br /&gt;
&lt;br /&gt;
The Shell window cannot close if any process that were launched from the Shell and not detached are still running. Even though the window stays open, the Shell does not accept new input. You must terminate those processes before the window closes. For example, if you opened an editor from the Shell, the Shell window does not close until you exit the editor.&lt;br /&gt;
&lt;br /&gt;
For examples using the ENDSHELL command, see [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]].&lt;br /&gt;
&lt;br /&gt;
== ENDSKIP ==&lt;br /&gt;
&lt;br /&gt;
Terminates a SKIP block in a script file.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ENDSKIP&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
ENDSKIP is used in scripts to terminate the execution of a SKIP block. A SKIP block allows you to jump over intervening commands if a certain condition is met. When an ENDSKIP is encountered, execution of the script resumes at the line following the ENDSKIP. The condition flag is set to 5 (WARN).&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#SKIP|SKIP]]&lt;br /&gt;
&lt;br /&gt;
== EVAL ==&lt;br /&gt;
&lt;br /&gt;
Evaluates integer or Boolean expressions.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: EVAL &amp;lt;value1&amp;gt; {[&amp;lt;operation&amp;gt;] [&amp;lt;value2&amp;gt;]} [TO &amp;lt;file&amp;gt;] [LFORMAT=&amp;lt;string&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: VALUE1/A,OP,VALUE2/M,TO/K,LFORMAT/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
EVAL is used to evaluate and print the answer of an integer expression. The fractional portion of input values and final results, if any, is truncated (cut off). If a non-integer is given as an input value, evaluation stops at the decimal point.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Value1&amp;gt; and &amp;lt;value2&amp;gt; can be decimal (the default), hexadecimal, or octal numbers. Hexadecimal numbers are indicated by either a leading Ox or #x. Octal numbers are indicated by either a leading 0 or a leading #. Alphabetical characters are indicated by a leading single quotation mark (`) and are evaluated as their ASCII equivalent.&lt;br /&gt;
&lt;br /&gt;
The LFORMAT keyword specifies the formatting string used to print the answer. You can use %X (hexadecimal), %O (octal), %N (decimal), or %C (character). The %X and %O options require a number of digits using the LFORMAT keyword, you can specify to print a new line by including *N in your string.&lt;br /&gt;
&lt;br /&gt;
The supported operations and their corresponding symbols are shown in the following table.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| addition || +&lt;br /&gt;
|-&lt;br /&gt;
| subtraction || -&lt;br /&gt;
|-&lt;br /&gt;
| multiplication || *&lt;br /&gt;
|-&lt;br /&gt;
| division || /&lt;br /&gt;
|-&lt;br /&gt;
| modulo || mod, M, m, or %&lt;br /&gt;
|-&lt;br /&gt;
| bitwise AND || &amp;amp;&lt;br /&gt;
|-&lt;br /&gt;
| bitwise OR || &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| bitwise NOT || ~&lt;br /&gt;
|-&lt;br /&gt;
| left shift || Ish, L, or l&lt;br /&gt;
|-&lt;br /&gt;
| right shift || rsh, R, or r&lt;br /&gt;
|-&lt;br /&gt;
| negation || -&lt;br /&gt;
|-&lt;br /&gt;
| exclusive OR || xor, X, or x&lt;br /&gt;
|-&lt;br /&gt;
| bitwise equivalence || eqv, E, or e&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
EVAL can be used in scripts as a counter for loops. In that case, use the TO option to send the output of EVAL to a file.&lt;br /&gt;
&lt;br /&gt;
Parentheses can be used in the expressions.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; EVAL 64 / 8 + 2&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; EVAL 0x5f / 010 LFORMAT=&amp;quot;The answer is %X4*N&amp;quot;&lt;br /&gt;
 The answer is 000B&lt;br /&gt;
 1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This divides hexadecimal 5f (95) by octal 10 (8), yielding 000B, the integer portion of the decimal answer 11.875. (The 1&amp;gt; prompt appears immediately after the 000B if *N is not specified in the LFORMAT string.)&lt;br /&gt;
&lt;br /&gt;
For more examples using the EVAL command, see [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]].&lt;br /&gt;
&lt;br /&gt;
== EXECUTE ==&lt;br /&gt;
&lt;br /&gt;
Executes a script with optional argument substitution.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: EXECUTE &amp;lt;script&amp;gt; [{&amp;lt;arguments&amp;gt;}]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILE/A/F&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
EXECUTE is used to run scripts of AmigaDOS commands. The lines in the script are executed just as if they had been typed at a Shell prompt. If the s protection bit of a file is set and the file is in the search path, you only need to type the filename--the EXECUTE command is not needed.&lt;br /&gt;
&lt;br /&gt;
You can use parameter substitution in scripts by including special keywords in the script. When these keywords are used, you can pass variables to the script by including the variable in the EXECUTE command line. Before the script is executed, AmigaDOS checks the parameter names in the script against any arguments given on the command line. If any match, AmigaDOS substitutes the values you specified on the command line for the parameter name in the script. You can also specify default values for AmigaDOS to use if no variables are given. If you have not specified a variable, and there is no default specified in the script, then the value of the parameter is empty (no substitution is made). EXECUTE is generally made resident during the startup-sequence.&lt;br /&gt;
&lt;br /&gt;
The permissible keywords for parameter substitution are explained below. Each keyword must be prefaced with a dot character (.).&lt;br /&gt;
&lt;br /&gt;
The .KEY (or .K) keyword specifies both keyword names and positions in a script. It tells EXECUTE how many parameters to expect and how to interpret them. In other words, .KEY serves as a template for the parameter values you specify. Only one .KEY statement is allowed per script. If present, it should be the first line in the file.&lt;br /&gt;
&lt;br /&gt;
The arguments on the .KEY line can be given with the /A and /K directives, which work the same as in an AmigaDOS template. Arguments followed by /A are required; arguments followed by /K require the name of that argument as a keyword. For example, if a script starts with .KEY filename/A it indicates that a filename must be given on the EXECUTE command line after the name of the script. This filename will be substituted in subsequent lines of the script. For instance, if the first line of a script is:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 .KEY filename/A, TOname/K&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
You must specify a filename variable. The TOname variable is optional, but if specified the TOname keyword must be used. For instance:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; EXECUTE Script Textfile TOname NewFile&lt;br /&gt;
&lt;br /&gt;
Before execution, AmigaDOS scans the script for any items enclosed by BRA and KET characters (&amp;lt; and &amp;gt;). Such items may consist of a keyword or a keyword and a default value. Wherever EXECUTE finds a keyword enclosed in angle brackets, it tries to substitute a parameter. However, if you want to use a string in your script file that contains angle brackets, you will have to define substitute &amp;quot;bracket&amp;quot; characters with the .BRA and .KET commands. .BRA &amp;lt;ch&amp;gt; changes the opening bracket character to &amp;lt;ch&amp;gt;, while .KEY changes the closing bracket character to &amp;lt;ch&amp;gt;. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 .KEY filename&lt;br /&gt;
 ECHO &amp;quot;This line does NOT print &amp;lt;angle&amp;gt; brackets.&amp;quot;&lt;br /&gt;
 .BRA {&lt;br /&gt;
 .KET }&lt;br /&gt;
 ECHO &amp;quot;This line DOES print &amp;lt;angle&amp;gt; brackets.&amp;quot;&lt;br /&gt;
 ECHO &amp;quot;The specified filename is {filename}.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
would result in the following output:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; EXECUTE script TestFile&lt;br /&gt;
 This line does NOT print brackets.&lt;br /&gt;
 This line DOES print &amp;lt;angle&amp;gt; brackets.&lt;br /&gt;
 The specified filename is TestFile.&lt;br /&gt;
&lt;br /&gt;
AmigaDOS provides a number of commands that are useful in scripts, such as IF, ELSE, SKIP, LAB, and QUIT. These commands, as well as the EXECUTE command, can be nested in a script. That is, a script can contain EXECUTE commands.&lt;br /&gt;
&lt;br /&gt;
To stop the execution of a script, press Ctrl-D. If you have nested script files, you can stop the set of EXECUTE commands by pressing Ctrl-C. Ctrl-D only stops the current script from executing.&lt;br /&gt;
&lt;br /&gt;
The current Shell number can be referenced by the characters &amp;lt;$$&amp;gt;. This is useful in creating unique temporary files, logical assignments, and PIPE names.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Assume the script List contains the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 .K filename&lt;br /&gt;
 RUN COPY &amp;lt;filename&amp;gt; TO PRT: +&lt;br /&gt;
 ECHO &amp;quot;Printing of &amp;lt;filename&amp;gt; done&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following command:&lt;br /&gt;
 1&amp;gt; EXECUTE List Test/Prg&lt;br /&gt;
&lt;br /&gt;
acts as though you had typed the following commands at the keyboard:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; RUN COPY Test/Prg TO PRT: +&lt;br /&gt;
 1&amp;gt; ECHO &amp;quot;Printing of Test/Prg done&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
Another example, Display, uses more of the features described above:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 .Key name/A&lt;br /&gt;
 IF EXISTS &amp;lt;name&amp;gt;&lt;br /&gt;
 TYPE &amp;lt;name&amp;gt; NUMBER ;if the file is in the given directory, type it with line numbers&lt;br /&gt;
 ELSE&lt;br /&gt;
 ECHO &amp;quot;&amp;lt;name&amp;gt; is not in this directory&amp;quot;&lt;br /&gt;
 ENDIF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; RUN EXECUTE Display Work/Prg2&lt;br /&gt;
&lt;br /&gt;
should display the Work/Prg2 file, with line numbers on the screen, if it exists on the current directory. If the file is not there, the screen displays an error message. Because of the /A, if a filename is not given on the command line after display, an error will occur.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IF|IF]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#SKIP|SKIP]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FAILAT|FAILAT]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#LAB|LAB]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ECHO|ECHO]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#RUN|RUN]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#QUIT|QUIT]]&lt;br /&gt;
&lt;br /&gt;
== FAILAT ==&lt;br /&gt;
&lt;br /&gt;
Instructs a command sequence not to fail unless a given error condition is returned.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FAILAT [&amp;lt;n&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: RCLIM/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
Commands indicate that they have failed by setting a nonzero return code. The return code, normally 5, 10, or 20, indicates the severity of the error. A return code greater than or equal to a certain limit, the fail limit, terminates a sequence of non-interactive commands (commands specified after RUN or in a script).&lt;br /&gt;
&lt;br /&gt;
Use the FAILAT command to alter the fail limit RCLIM (Return Code Limit) from its initial value of 10. If you increase the limit, you indicate that certain classes of error should not be regarded as fatal and that execution of subsequent commands can proceed after the error. The argument must be a positive number. The fail limit is reset to the initial value of 10 on exit from the command sequence.&lt;br /&gt;
&lt;br /&gt;
If the argument is omitted, the current fail limit is displayed.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&lt;br /&gt;
Assume a script contains the following lines:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 COPY DF0:MyFile to RAM:&lt;br /&gt;
 ECHO &amp;quot;MyFile being copied.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If MyFile cannot be found, the scripts is aborted and the following message appears in the Shell window:&lt;br /&gt;
&lt;br /&gt;
 COPY: object not found&lt;br /&gt;
 COPY failed returncode 20:&lt;br /&gt;
&lt;br /&gt;
However, if you changed the return code limit to higher than 20, the script continues even if the COPY command fails. For example, if you changed the script to read:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 FAILAT 21&lt;br /&gt;
 COPY DF0:MyFile to RAM:&lt;br /&gt;
 ECHO &amp;quot;MyFile being copied.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Even if MyFile cannot be found, the script continues. The following message appears in the Shell window:&lt;br /&gt;
&lt;br /&gt;
 COPY: object not found&lt;br /&gt;
 MyFile being copied.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ECHO|ECHO]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#EXECUTE|EXECUTE]]&lt;br /&gt;
&lt;br /&gt;
== FAULT ==&lt;br /&gt;
&lt;br /&gt;
Prints the messages for the specified error codes.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FAULT [&amp;lt;error number&amp;gt;] [[,]&amp;lt;error number&amp;gt;[[,]&amp;lt;error number&amp;gt;...]]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: /N/M&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
FAULT prints the messages corresponding to the error numbers supplied. If several error numbers are given, they can be separated by spaces or commas.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&lt;br /&gt;
If you received an error message:&lt;br /&gt;
&lt;br /&gt;
 Error when opening DF1:TestFile 205&lt;br /&gt;
&lt;br /&gt;
and need more information, type:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; FAULT 205&lt;br /&gt;
 FAULT 205: object not found&lt;br /&gt;
&lt;br /&gt;
This tells you that the error occurred because TestFile could not be found on DF1:.&lt;br /&gt;
&lt;br /&gt;
A complete list of error messages appears in Appendix A.&lt;br /&gt;
&lt;br /&gt;
== FC-CACHE ==&lt;br /&gt;
&lt;br /&gt;
Builds FreeType font information cache files.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FC-CACHE [ -EfrsvVh ] [ -y &amp;lt;sysroot&amp;gt; ] [ --error-on-no-fonts ] [ --force | --really-force ] [ --sysroot=&amp;lt;sysroot&amp;gt;] [ --system-only ] [ --verbose ] [ --version ] [ --help ] [ &amp;lt;directories&amp;gt; ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -E=--error-on-no-fonts,-f=--force,-r=--really-force,-s=--system-only,-v=--verbose,-V=--version,-h=--help,-y=--sysroot,DIRECTORY/M&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
FC-CACHE scans the font directories on the system and builds font information cache files for applications using fontconfig for their font handling.&lt;br /&gt;
&lt;br /&gt;
If directory arguments are not given, FC-CACHE uses each directory in the current font configuration. Each directory is scanned for font files readable by FreeType. A cache is created which contains properties of each font and the associated filename. This cache is used to speed up application startup when using the fontconfig library.&lt;br /&gt;
&lt;br /&gt;
{{Note|FC-CACHE must be executed once per architecture to generate font information customized for that architecture.}}&lt;br /&gt;
&lt;br /&gt;
The command parameters are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -E or --error-on no-fonts || Raise an error if there are no fonts in &amp;lt;directories&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| -f or --force || Scan directories with apparently valid caches.&lt;br /&gt;
|-&lt;br /&gt;
| -r or --really-force || Erase all existing caches, then rescan.&lt;br /&gt;
|-&lt;br /&gt;
| -s or --system-only || Scan system-wide directories only.&lt;br /&gt;
|-&lt;br /&gt;
| -y or --sysroot &amp;lt;sysroot&amp;gt; || Prepend &amp;lt;sysroot&amp;gt; to all paths for scanning.&lt;br /&gt;
|-&lt;br /&gt;
| -v or --verbose || Display status information while busy.&lt;br /&gt;
|-&lt;br /&gt;
| -V or --version || Display font config version and exit.&lt;br /&gt;
|-&lt;br /&gt;
| -h or --help || Display command help and exit &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-CAT|FC-CAT]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-LIST|FC-LIST]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-MATCH|FC-MATCH]]&lt;br /&gt;
&lt;br /&gt;
== FC-CAT ==&lt;br /&gt;
&lt;br /&gt;
Reads FreeType font information cache files.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FC-CAT [ -rvVh ] [ --recurse ] [ --verbose ] [ --version ] [ --help ] [ [ &amp;lt;fonts-cache-2-files&amp;gt; ] [ &amp;lt;directories&amp;gt; ] ... ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -r=--recurse,-v=--verbose,-V=--version,-h=--help,FILE/M,DIRECTORY/M&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
FC-CAT reads the FreeType font information from cache files or related to font directories and emits it in ASCII form. The command parameters are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -r or --recurse || Recurse into subdirectories.&lt;br /&gt;
|-&lt;br /&gt;
| -v or --verbose || Be verbose.&lt;br /&gt;
|-&lt;br /&gt;
| -V or --version || Show version of the program and exit.&lt;br /&gt;
|-&lt;br /&gt;
| -h or --help || Show command help.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-CACHE|FC-CACHE]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-LIST|FC-LIST]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-MATCH|FC-MATCH]]&lt;br /&gt;
&lt;br /&gt;
== FC-LIST ==&lt;br /&gt;
&lt;br /&gt;
Lists the available FreeType fonts.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FC-LIST [ -vqVh ] [ -f &amp;lt;format&amp;gt; ] [ --verbose ] [ --format=&amp;lt;format&amp;gt; ] [ --quiet ] [ --version ] [ --help ] [ &amp;lt;pattern&amp;gt; ] [ &amp;lt;element&amp;gt;... ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -v=--verbose,-q=--quiet,-V=--version,-h=--help,-f=--format,PATTERN,ELEMENT/M&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
FC-LIST lists TrueType fonts and styles which are available for the applications using fontconfig.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -v or --verbose || Print verbose output of the whole font pattern for each match, or elements if any is provided.&lt;br /&gt;
|-&lt;br /&gt;
| -q or --quiet || Suppress all normal output. The command returns 1, if there were no font matches.&lt;br /&gt;
|-&lt;br /&gt;
| -V or --version || Show version of the program and exit.&lt;br /&gt;
|-&lt;br /&gt;
| -h or --help || Show command help and exit. &lt;br /&gt;
|-&lt;br /&gt;
| -f or --format || Format output according to the format specifier &amp;lt;format&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pattern&amp;gt; || If this argument is set, only fonts matching &amp;lt;pattern&amp;gt; are displayed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;element&amp;gt; || If set, the &amp;lt;element&amp;gt; property is displayed for matching fonts. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
List all font faces. &lt;br /&gt;
 1&amp;gt; FC-LIST&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
List font faces that cover Hindi. &lt;br /&gt;
 1&amp;gt; FC-LIST :lang=hi&lt;br /&gt;
&lt;br /&gt;
;Example 3:&lt;br /&gt;
List the filename and spacing value for each font face. &amp;quot;:&amp;quot; is an empty pattern that matches all fonts. &lt;br /&gt;
 1&amp;gt; FC-LIST : family style file spacing&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-CACHE|FC-CACHE]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-CAT|FC-CAT]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-MATCH|FC-MATCH]]&lt;br /&gt;
&lt;br /&gt;
== FC-MATCH ==&lt;br /&gt;
&lt;br /&gt;
Matches available FreeType fonts.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FC-MATCH [ -savVh ] [ -f &amp;lt;format&amp;gt; ] [ --sort ] [ --all ] [ --verbose ] [ --format=&amp;lt;format&amp;gt; ] [ --version ] [ --help ] [ &amp;lt;pattern&amp;gt; ] [ &amp;lt;element&amp;gt;... ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -s=--sort,-a=--all,-v=--verbose,-V=--version,-h=--help,-f=--format,PATTERN,ELEMENT/M&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
FC-MATCH matches pattern (empty pattern by default) using the normal fontconfig matching rules to find the best FreeType font available. If --sort is given, the sorted list of best matching fonts is displayed. The --all option works like --sort except that no pruning is done on the list of fonts.&lt;br /&gt;
&lt;br /&gt;
If any elements are specified, only those are printed. Otherwise short file name, family, and style are printed, unless verbose output is requested.&lt;br /&gt;
&lt;br /&gt;
The command parameters are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -s or --sort || Displays sorted list of best matching fonts.&lt;br /&gt;
|-&lt;br /&gt;
| -a or --all || Displays sorted list of best matching fonts, but do not do any pruning on the list.&lt;br /&gt;
|-&lt;br /&gt;
| -v or --verbose || Print verbose output of the whole font pattern for each match, or &amp;lt;elements&amp;gt; if any is provided. &lt;br /&gt;
|-&lt;br /&gt;
| -V or --version || Show version of the command and exit. &lt;br /&gt;
|-&lt;br /&gt;
| -h or --help || Show the command help and exit.&lt;br /&gt;
|-&lt;br /&gt;
| -f or --format || Format output according to the format specifier &amp;lt;format&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pattern&amp;gt; || Displays fonts matching &amp;lt;pattern&amp;gt; (uses empty pattern by default). &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;element&amp;gt; || If set, the element property is displayed for matching fonts.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-CACHE|FC-CACHE]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-CAT|FC-CAT]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FC-LIST|FC-LIST]]&lt;br /&gt;
&lt;br /&gt;
== FDTOOL ==&lt;br /&gt;
&lt;br /&gt;
Control and examine the current state of floppy drives.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FDTOOL [U | UNIT &amp;lt;unit number&amp;gt;] [D | DEBUG &amp;lt;debug level&amp;gt;] [A | AUTO]&lt;br /&gt;
: [M | MANUAL] [C | CHECKNOW] [I | INFO] [V | VERS | VERSION]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: U=UNIT/K/N,D=DEBUG/K/N,A=AUTO/S,M=MANUAL/S,C=CHECKNOW/S,I=INFO/S,V=VERS=VERSION/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
The current state of floppy drives controlled by the a1floppy device can be externally controlled and examined with the FDTOOL. The command options are as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| U or UNIT || The target floppy drive: 0 or 1. Unit number 0 is the first floppy drive and 1 is the second drive. The default unit number is 0.&lt;br /&gt;
|-&lt;br /&gt;
| D or DEBUG || Set the current debug level. The valid levels are between 0 and 30. The default is 0 (debugging off). &lt;br /&gt;
|-&lt;br /&gt;
| A or AUTO || Start auto checking.&lt;br /&gt;
|-&lt;br /&gt;
| M or MANUAL || Stop auto checking.&lt;br /&gt;
|-&lt;br /&gt;
| C or CHECKNOW || Force a single disk check.&lt;br /&gt;
|-&lt;br /&gt;
| I or INFO || Print information about a floppy drive and the controlling device.&lt;br /&gt;
|-&lt;br /&gt;
| V, VERS, or VERSION || Print the FDTOOL and a1floppy device versions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
FDTOOL has a built-in debugging system which provides profound information on error situations. How detailed debugging information, if any, will be printed is controlled by the DEBUG argument which sets the debug level. When the debugging system is active, the debugging information is printed to the debug port (which may be serial port 0) and not to the standard output. The debug levels are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Level !! Output type&lt;br /&gt;
|-&lt;br /&gt;
| 0 -  4 || No output. This is the default setting.&lt;br /&gt;
|-&lt;br /&gt;
|  5 - 10 || Fatal errors&lt;br /&gt;
|-&lt;br /&gt;
| 11 - 15 || Recoverable errors (retries, etc)&lt;br /&gt;
|-&lt;br /&gt;
| 16 - 20 || Explanatory notes about recoverable errors (reasons, etc)&lt;br /&gt;
|-&lt;br /&gt;
| 21 - 25 || Explanatory notes about intermediate values (good data)&lt;br /&gt;
|-&lt;br /&gt;
| 26 - 30 || Flow of control (&amp;quot;Kilroy wuz here&amp;quot; messages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To detect if the user has ejected or inserted a disk, the a1floppy device checks the disk drives regularly for any change. On every check the drive&#039;s led will light and you will hear a click from the drive&#039;s mechanism. On some drives a single check will start the drive&#039;s motor for several seconds, which will cause the motor to run continuously because of the regular checks. To prevent the drive from spinning countinuously and wearing out, the automatic disk checking can be turned off with the MANUAL option.&lt;br /&gt;
&lt;br /&gt;
Note that when the automatic disk checking function is turned off, Amiga will no longer detect disk changes. In order to notify the system that a disk has been ejected or inserted, use the [[AmigaOS_Manual:_AmigaDOS_Command_Reference#DISKCHANGE|DISKCHANGE]] command or FDTOOL&#039;s CHECKNOW option.&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
Print information about the first floppy drive (unit number 0):&lt;br /&gt;
 1&amp;gt; FDTOOL UNIT=0 INFO&lt;br /&gt;
 Current state of A1Floppy Drive Unit 0&lt;br /&gt;
 Version: 53 Revision: 2&lt;br /&gt;
 Controller state: free&lt;br /&gt;
 Debug level: 0&lt;br /&gt;
 Task readiness state: ready&lt;br /&gt;
 Disk state: drive empty&lt;br /&gt;
 Drive status: ST0=20 ST1=00 ST2=00 ST3=38&lt;br /&gt;
 Drive currently on cylinder 0&lt;br /&gt;
 Drive state:&lt;br /&gt;
 Interrupt state 0&lt;br /&gt;
 Data count 0, status count 0&lt;br /&gt;
 Unit Open count: 2&lt;br /&gt;
 Change number: 0&lt;br /&gt;
 Recovered errors this disk: 1&lt;br /&gt;
 Config word: 00000200&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
Turn off the automatic disk change detection on drive 0:&lt;br /&gt;
 1&amp;gt; FDTOOL MANUAL&lt;br /&gt;
 Regular check not set on drive 0&lt;br /&gt;
&lt;br /&gt;
;Example 3:&lt;br /&gt;
Enable the automatic disk change detection on drive 0:&lt;br /&gt;
 1&amp;gt; FDTOOL AUTO&lt;br /&gt;
 Starting regular check on drive 0&lt;br /&gt;
&lt;br /&gt;
;Example 4:&lt;br /&gt;
Manually check if the user has ejected or inserted a disk on drive 0:&lt;br /&gt;
 1&amp;gt; FDTOOL CHECKNOW&lt;br /&gt;
 Requesting a check now on drive 0&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#DISKCHANGE|DISKCHANGE]]&lt;br /&gt;
&lt;br /&gt;
== FILENOTE ==&lt;br /&gt;
&lt;br /&gt;
Attaches a comment to a file.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FILENOTE [FILE] {&amp;lt;file|pattern&amp;gt;} [COMMENT] &amp;lt;comment&amp;gt; [ALL]&lt;br /&gt;
: [QUIET] [FILES] [DIRS]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILE/A/M,COMMENT/A,ALL/S,QUIET/S,FILES/S,DIRS/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
FILENOTE attaches an optional comment characters to the specified file or to all files matching the given pattern. The size of the comment is limited, which means that the &amp;lt;comment&amp;gt; argument may be truncated before it is used.&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;comment&amp;gt; includes spaces, it must be enclosed in double quotes. To include double quotes in a filenote, each literal quote mark must be immediately preceded by an asterisk (*), and the entire comment must be enclosed in quotes, regardless of whether the comment contains any spaces.&lt;br /&gt;
&lt;br /&gt;
To delete an existing filenote from a file, use &amp;quot;&amp;quot; as the &amp;lt;comment&amp;gt; argument.&lt;br /&gt;
&lt;br /&gt;
Creating a comment with FILENOTE is the same as entering a comment into the Comment gadget of an icon&#039;s Information window. Changes made with FILENOTE will be reflected in the Information window, and vice versa.&lt;br /&gt;
&lt;br /&gt;
When an existing file is copied to (specified as the TO argument of a COPY command), it will be overwritten, but its comment will be retained. Any comment attached to a FROM file will not be copied unless the CLONE or COM option of COPY is specified.&lt;br /&gt;
&lt;br /&gt;
FILENOTE&#039;s options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| ALL || If the ALL option is given, FILENOTE will add the &amp;lt;comment&amp;gt; to all the files in the specified directory.&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || If the QUIET option is given, screen output is suppressed. The local shell variable _Verbosity with a negative value has the same effect.&lt;br /&gt;
|-&lt;br /&gt;
| FILES || Only change the comments of the files found.&lt;br /&gt;
|-&lt;br /&gt;
| DIRS || Only change the comments of the directories found.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|The FILES and DIRS options work together: if you use FILES and omit DIRS, then only the files will be affected and the other way round. If none of FILES and DIRS is used, all files and directories will have their comments changed.}}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; FILENOTE Sonata &amp;quot;allegro non troppo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
attaches the filenote allegro non troppo to the Sonata file.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; FILENOTE Toccata &amp;quot;*&amp;quot;presto*&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Here the filenote is &amp;quot;presto&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== FILESIZE ==&lt;br /&gt;
&lt;br /&gt;
Collects information on the size of files.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FILESIZE [{&amp;lt;dir|file|pattern|device&amp;gt;}] [FORM &amp;lt;file name&amp;gt;] [ALL]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILES/M,FROM/K,ALL/S,REPORT/S,FORMAT/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
FILESIZE will collect information on files stored on a disk, adding up the number of bytes and blocks used, counting the number of files found. If you specify a &amp;lt;dir&amp;gt;, &amp;lt;pattern&amp;gt; or &amp;lt;filename&amp;gt; argument, FILESIZE will add the file data for the specified directory, all directories or files that match the pattern, or the specified file or device, respectively. Instead of providing the names on the command line, you can also specify the name of a file from which the names should be read.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| FILES || A list of files, directories or wildcard patterns which should be examined. You either need to provide this parameter or the a file name with the FROM option.&lt;br /&gt;
|-&lt;br /&gt;
| FROM || The name of a text file which contains the names of files, directories or wildcard patterns which should be examined. You either need to provide this parameter or a list of names with the FILES option.&lt;br /&gt;
|-&lt;br /&gt;
| ALL || Also examines the files in all directories and subdirectories.&lt;br /&gt;
|-&lt;br /&gt;
| REPORT || Print progress reports as directory contents are scanned. Each such report will be prefixed by the name of the directory and final total number of files, blocks, bytes will be prefixed by &amp;quot;TOTAL&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| FORMAT || Defines a string to specially format FILESIZE output. Supported format specifiers are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| %b || Prints the number of blocks used&lt;br /&gt;
|-&lt;br /&gt;
| %B || Prints the number of blocks used, but uses the current locale formatting rules&lt;br /&gt;
|-&lt;br /&gt;
| %l || Prints the number of bytes used&lt;br /&gt;
|-&lt;br /&gt;
| %L || Prints the number of bytes used, but uses the current locale formatting rules&lt;br /&gt;
|-&lt;br /&gt;
| %S || Prints the number of bytes used, rounded to Kilobytes, Megabytes, Gigabytes, etc. (Binary)&lt;br /&gt;
|-&lt;br /&gt;
| %f || Prints the number of files found&lt;br /&gt;
|-&lt;br /&gt;
| %F || Prints the number of files found, but uses the current locale formatting rules&lt;br /&gt;
|-&lt;br /&gt;
| %N || Prints the full name of the directory the information has been gathered for, or the label &amp;quot;TOTAL&amp;quot; for the grand total of all data gathered&lt;br /&gt;
|-&lt;br /&gt;
| %% || Prints the percent character&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The escape sequences &#039;*E&#039; and &#039;*N&#039; are expanded, too.&lt;br /&gt;
&lt;br /&gt;
If you do not specify a special format, FILESIZE will use &amp;quot;%F files, %L bytes, %B blocks&amp;quot; and, if the &amp;quot;REPORT&amp;quot; option is used, &amp;quot;%N: %F files, %L bytes, %B blocks&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Output formatting follows &#039;C&#039; conventions, e.g. &amp;quot;%10l&amp;quot; will print at least 10 digits for the number of bytes used, right justified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
Examine the contents of the C: directory, adding up the sizes of all files found, then print just the number of bytes used:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; FILESIZE C: FORMAT &amp;quot;%l&amp;quot;&lt;br /&gt;
 1958872&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
Same as above, but print the size as a rounded number. Note that a Kilobyte is worth 1024 bytes (and not 1000).&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; FILESIZE C: FORMAT &amp;quot;%s&amp;quot;&lt;br /&gt;
 1912K&lt;br /&gt;
&lt;br /&gt;
;Example 3:&lt;br /&gt;
Find out how many files are stored in the LIBS: directory:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; FILESIZE LIBS: ALL FORMAT &amp;quot;%F files found&amp;quot;&lt;br /&gt;
 178 files found&lt;br /&gt;
&lt;br /&gt;
;Example 4:&lt;br /&gt;
Print reports on the individual directories found on SYS:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; FILESIZE SYS:#? ALL REPORT&lt;br /&gt;
 SYS:C: 71 files, 354,230 bytes, 722 blocks&lt;br /&gt;
 SYS:Classes: 49 files, 786,244 bytes, 1,560 blocks&lt;br /&gt;
 SYS:Devs: 278 files, 1,734,474 bytes, 3,502 blocks&lt;br /&gt;
 SYS:Expansion: 0 files, 0 bytes, 0 blocks&lt;br /&gt;
 SYS:Fonts: 62 files, 777,024 bytes, 1,554 blocks&lt;br /&gt;
 SYS:L: 10 files, 106,488 bytes, 215 blocks&lt;br /&gt;
 SYS:Libs: 73 files, 2,147,780 bytes, 4,232 blocks&lt;br /&gt;
 SYS:Prefs: 585 files, 14,115,024 bytes, 27,836 blocks&lt;br /&gt;
 SYS:Rexxc: 10 files, 4,628 bytes, 13 blocks&lt;br /&gt;
 SYS:S: 19 files, 14,100 bytes, 38 blocks&lt;br /&gt;
 SYS:Storage: 292 files, 1,408,042 bytes, 2,868 blocks&lt;br /&gt;
 SYS:System: 16 files, 154,916 bytes, 310 blocks&lt;br /&gt;
 SYS:T: 0 files, 0 bytes, 0 blocks&lt;br /&gt;
 SYS:Tools: 49 files, 686,316 bytes, 1,364 blocks&lt;br /&gt;
 SYS:Utilities: 88 files, 2,267,465 bytes, 4,470 blocks&lt;br /&gt;
 SYS:WBStartup: 11 files, 257,923 bytes, 509 blocks&lt;br /&gt;
 SYS:Locale: 460 files, 2,581,114 bytes, 5,295 blocks&lt;br /&gt;
 TOTAL: 2,082 files, 27,422,060 bytes, 54,545 blocks&lt;br /&gt;
&lt;br /&gt;
== FLASHTOOL ==&lt;br /&gt;
&lt;br /&gt;
Reading, writing, and erasing for EEPROM memory chips.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FLASHTOOL &amp;lt;command&amp;gt; [&amp;lt;command arguments&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: COMMAND,ARGS/M&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
FLASHTOOL is used for reading, erasing, and writing to EEPROM non-volatile memory chips. To utilize FLASHTOOL, an IDE Flasher must be installed in the primary or secondary IDE port.&lt;br /&gt;
&lt;br /&gt;
FLASHTOOL provides the following commands:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name&lt;br /&gt;
! Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ISPRESENT || -p &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; || Check if a flasher device is present.&lt;br /&gt;
|-&lt;br /&gt;
| TYPE || -t &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; || Return EEPROM type.&lt;br /&gt;
|-&lt;br /&gt;
| ERASE || -e &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; || Erase an EEPROM.&lt;br /&gt;
|-&lt;br /&gt;
| ISBLANK || -b &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; || Check if EEPROM is empty.&lt;br /&gt;
|-&lt;br /&gt;
| SAVE || -s &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; &amp;lt;file name&amp;gt; || Save EEPROM content to a file. The saved file is in binary (raw) format.&lt;br /&gt;
|-&lt;br /&gt;
| WRITE || -w &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; &amp;lt;file name&amp;gt; || Write a binary (raw) file to EEPROM.&lt;br /&gt;
|-&lt;br /&gt;
| VERIFY || -c &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; &amp;lt;file name&amp;gt; || Check if EEPROM content matches the file&#039;s content. The file must be in binary (raw) form.&lt;br /&gt;
|-&lt;br /&gt;
| LISTSUPPORTED || -l || List supported EEPROMs.&lt;br /&gt;
|-&lt;br /&gt;
| VERSION || -v || Print FLASHTOOL version.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;device name&amp;gt; argument tells which Amiga device is controlling the IDE Flasher, and the &amp;lt;unit&amp;gt; argument tells which device is used.&lt;br /&gt;
&lt;br /&gt;
FLASHTOOL supports the following EEPROMs:&lt;br /&gt;
* ATMEL AT29C512   512 Kbit (64K x 8-bit)&lt;br /&gt;
* ATMEL AT29C010A   1 Mbit (128K x 8-bit)&lt;br /&gt;
* ATMEL AT29C020   2 Mbit (256K x 8-bit)&lt;br /&gt;
* ATMEL AT29C040   4 Mbit (512K x 8-bit)&lt;br /&gt;
* ATMEL AT29C040A   4 Mbit (512K x 8-bit)&lt;br /&gt;
* ATMEL AT49F004N   4 Mbit (512K x 8-bit)&lt;br /&gt;
* ATMEL AT49F004T   4 Mbit (512K x 8-bit)&lt;br /&gt;
* ATMEL AT49F010   1 Mbit (128K x 8-bit)&lt;br /&gt;
* ATMEL AT49F020   2 Mbit (256K x 8-bit)&lt;br /&gt;
* AMD AM29F010   1 Mbit (128K x 8-bit)&lt;br /&gt;
* AMD AM29F010A   1 Mbit (128K x 8-bit)&lt;br /&gt;
* AMD AM29F040B   4 Mbit (512K x 8-bit)&lt;br /&gt;
* AMD AM29F002   2 Mbit (256K x 8-bit) Top Boot Block&lt;br /&gt;
* AMD AM29F002   2 Mbit (256K x 8-bit) Bottom Boot Block&lt;br /&gt;
* AMD AM29F004   4 Mbit (512K x 8-bit) Top Boot Block&lt;br /&gt;
* AMD AM29F004   4 Mbit (512K x 8-bit) Bottom Boot Block&lt;br /&gt;
* MOSEL VITELIC V29C51000T   512 Kbit (64K x 8-bit)&lt;br /&gt;
* MOSEL VITELIC V29C51000B   512 Kbit (64K x 8-bit)&lt;br /&gt;
* MOSEL VITELIC V29C51001T   1 Mbit (128K x 8-bit)&lt;br /&gt;
* MOSEL VITELIC V29C51001B   1 Mbit (128K x 8-bit)&lt;br /&gt;
* MOSEL VITELIC V29C51002T   2 Mbit (256K x 8-bit)&lt;br /&gt;
* MOSEL VITELIC V29C51002B   2 Mbit (256K x 8-bit)&lt;br /&gt;
* MOSEL VITELIC V29C51004T   4 Mbit (512K x 8-bit)&lt;br /&gt;
* MOSEL VITELIC V29C51004B   4 Mbit (512K x 8-bit)&lt;br /&gt;
* HYUNDAI HY29F002T   2 Mbit (256K x 8-bit)&lt;br /&gt;
* HYUNDAI HY29F002B   2 Mbit (256K x 8-bit)&lt;br /&gt;
* HYUNDAI HY29F040A   4 Mbit (512K x 8-bit)&lt;br /&gt;
* SST SST29EE512   512 Kbit (64K x 8-bit)&lt;br /&gt;
* SST SST29EE010   1 Mbit (128K x 8-bit)&lt;br /&gt;
* SST SST29EE020   2 Mbit (256K x 8-bit)&lt;br /&gt;
* SST SST39SF512   512Kbit (64K x 8-bit)&lt;br /&gt;
* SST SST39SF010(A)   1 Mbit (128K x 8-bit)&lt;br /&gt;
* SST SST39SF020A   2 Mbit (256K x 8-bit)&lt;br /&gt;
* SST SST39SF040   4 Mbit (512K x 8-bit)&lt;br /&gt;
* ST M29F010B   1 Mbit (128K x 8-bit)&lt;br /&gt;
* ST M29F002T   1 Mbit (256K x 8-bit)&lt;br /&gt;
* ST M29F002B   1 Mbit (256K x 8-bit)&lt;br /&gt;
* ST M29F040B   4 Mbit (512K x 8-bit)&lt;br /&gt;
* ST M29F040   4 Mbit (512K x 8-bit)&lt;br /&gt;
* WINBOND W29C512A   512 Kbit (64K x 8-bit)&lt;br /&gt;
* WINBOND W29C010M   1 Mbit (128K x 8-bit)&lt;br /&gt;
* WINBOND W29C020   2 Mbit (256K x 8-bit)&lt;br /&gt;
* WINBOND W29C040   4 Mbit (512K x 8-bit)&lt;br /&gt;
* WINBOND W49C020   2 Mbit (256K x 8-bit)&lt;br /&gt;
* WINBOND W49F002U   2 Mbit (256K x 8-bit)&lt;br /&gt;
* WINBOND W49F002U mod 2 Mbit (256K x 8-bit)&lt;br /&gt;
* MACRONIX MX29F040   4 Mbit (512K x 8-bit)&lt;br /&gt;
* AMIC A29010   1 Mbit (128K x 8-bit)&lt;br /&gt;
* AMIC A29040A   4 Mbit (512K x 8-bit)&lt;br /&gt;
* AMIC A29001T   1 Mbit (128K x 8-bit)&lt;br /&gt;
* AMIC A29001B   1 Mbit (128K x 8-bit)&lt;br /&gt;
* AMIC A29002T   2 Mbit (256K x 8-bit)&lt;br /&gt;
* AMIC A29002B   2 Mbit (256K x 8-bit)&lt;br /&gt;
* Texas Instruments TMS29F040   4 Mbit (512K x 8-bit)&lt;br /&gt;
* IMT IM29F001T   1 Mbit (128K x 8-bit)&lt;br /&gt;
* IMT IM29F001B   1 Mbit (128K x 8-bit)&lt;br /&gt;
* IMT IM29F002T   2 Mbit (256K x 8-bit)&lt;br /&gt;
* IMT IM29F002B   2 Mbit (256K x 8-bit)&lt;br /&gt;
* IMT IM29F004T   4 Mbit (512K x 8-bit)&lt;br /&gt;
* IMT IM29F004B   4 Mbit (512K x 8-bit)&lt;br /&gt;
* Fujitsu MBM29F002TC   2 Mbit (256K x 8-bit)&lt;br /&gt;
* Fujitsu MBM29F002BC   2 Mbit (256K x 8-bit)&lt;br /&gt;
* Fujitsu MBM29F004TC   4 Mbit (512K x 8-bit)&lt;br /&gt;
* Fujitsu MBM29F004BC   4 Mbit (512K x 8-bit)&lt;br /&gt;
* Fujitsu MBM29F040C   4 Mbit (512K x 8-bit)&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Check if an IDE Flasher device is installed:&lt;br /&gt;
  1&amp;gt; FLASHTOOL -p a1ide.device 0&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
Erase an EEPROM:&lt;br /&gt;
  1&amp;gt; FLASHTOOL -e a1ide.device 0&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
Write file &amp;quot;uboot.bin&amp;quot; to EEPROM:&lt;br /&gt;
  1&amp;gt; FLASHTOOL -w a1ide.device 0 uboot.bin&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
Verify the written data:&lt;br /&gt;
  1&amp;gt; FLASHTOOL -c a1ide.device 0 uboot.bin&lt;br /&gt;
&lt;br /&gt;
; Example 5:&lt;br /&gt;
Save EEPROM content to file &amp;quot;backup.bin&amp;quot;:&lt;br /&gt;
  1&amp;gt; FLASHTOOL -s a1ide.device 0 backup.bin&lt;br /&gt;
&lt;br /&gt;
== FOREACH ==&lt;br /&gt;
&lt;br /&gt;
Executes a script for each file encountered.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FOREACH {&amp;lt;file|pattern&amp;gt;} [PATH &amp;lt;path name&amp;gt;] {&amp;lt;name&amp;gt;} [FROM &amp;lt;number&amp;gt;] [TO &amp;lt;number&amp;gt;]&lt;br /&gt;
: [STEP &amp;lt;number&amp;gt;] [SCRIPT &amp;lt;name&amp;gt;] [COM &amp;quot;&amp;lt;command string&amp;gt;&amp;quot;] [WITH &amp;lt;name&amp;gt;] [ALL] &lt;br /&gt;
: [FILES] [DIRS] [SORT] [SINCE &amp;lt;date&amp;gt;] [UPTO &amp;lt;date&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME,PATH/K,IN/M,FROM/K/N,TO/K/N,STEP/K/N,SCRIPT/K,COM/K,WITH/K,ALL/S,FILES/S,DIRS/S,SORT/S,SINCE/K,UPTO/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
The FOREACH command allows you to loop within scripts with a loop variable set to a value selected from a list of names. FOREACH will execute a script of your choice; if no script is given, the FOREACH command allows you to type a temporary one in from the command line. If used from within a script, the FOREACH command will loop within the script.&lt;br /&gt;
&lt;br /&gt;
The FOREACH loop is bounded by a END directive (or an EOF, or a control-\).&lt;br /&gt;
&lt;br /&gt;
The FOREACH loop is executed once for each name specified by the IN keyword. Full pattern matching is supported. Names specified with the IN option don&#039;t necessarily have to actually exist as files or directories to be used, which allows you to create files.&lt;br /&gt;
&lt;br /&gt;
The NAME keyword allows you to pick a variable name; each time through the loop, that variable is set to the name currently selected from the list of names specified with the IN keyword.&lt;br /&gt;
&lt;br /&gt;
If no name is specified, no local variables will be created.&lt;br /&gt;
&lt;br /&gt;
The PATH keyword allows you to select a local variable name where the PATH will be stored; if no PATH keyword is specified, this will be stored in a variable with the same name as NAME but with .PATH appended.&lt;br /&gt;
&lt;br /&gt;
The basename and extension local variables work in a similar manner, except that the names are always based on the name specied by the NAME keyword with an appended extension.  The extension for the basename of the file found is .BASE The extension (if any) will be found in the variable name with the .EXT extension.&lt;br /&gt;
&lt;br /&gt;
The nametype local variable contains the type of thing, either dir (for directory), file (for file), or name (for couldn&#039;t find one of those).&lt;br /&gt;
&lt;br /&gt;
Remember, to access variables that contain non-alphanumeric characters (like a .) on the command line (like a .) you have to surround the name with { } like: ${i.base}&lt;br /&gt;
&lt;br /&gt;
The ALL keyword causes any pattern matching used in any member of the IN namelist to be recursive.&lt;br /&gt;
&lt;br /&gt;
The FILES keyword is a &#039;files only&#039; keyword. When this is used, only files (non-directories) will be selected from the list of IN names.&lt;br /&gt;
&lt;br /&gt;
The DIRS keyword is a &#039;directories only&#039; keyword. When this is used, only directories (non-files) will be selected from the list of IN names.&lt;br /&gt;
&lt;br /&gt;
In either the file only or the directory only mode all names which are neither files or directories (ie names that don&#039;t exist) are selected as well.&lt;br /&gt;
&lt;br /&gt;
Even if the FILES only keyword is used, if the ALL option is specified, directories _will_ be entered.&lt;br /&gt;
&lt;br /&gt;
{{Note|Directories are listed _last_ after all files (and/or subdirectories) in them are used. This allows the FOREACH command to be used as an interactive Delete command.}}&lt;br /&gt;
&lt;br /&gt;
The COM keyword allows you to specify a single command to execute. Remember to use quotes around the entire command; if one of the arguments inside requires quotes, you must escape those quotes using the *. Within the COM argument, all variables must be preceeded by an additional $, to avoid expansion on the command line before the command is executed. By using *N within the COM string, you can define multi-command COM arguments, which is especially useful when making aliases that use the FOREACH command.&lt;br /&gt;
&lt;br /&gt;
The SCRIPT keyword allows you to specify a script file to execute. If no script keyword is used (and no COM keyword is specified) you will be prompted to create a temporary script.&lt;br /&gt;
&lt;br /&gt;
The WITH keyword allows you to specify a file containing a list of names. This list is used after any command line names are used.&lt;br /&gt;
&lt;br /&gt;
The FROM, TO and (optional) STEP keywords allow you to specify a numeric range; the loop variable will be set to each of the values in the range in turn.  Both are required to be specified to use this feature. The STEP keyword is optional; it allows you to pick an increment other than 1. FROM, TO, and STEP can be negative. STEP cannot be zero, however.&lt;br /&gt;
&lt;br /&gt;
The SORT keyword causes the FOREACH command to do an alphanumeric sort on the name list before doing any script execution.&lt;br /&gt;
&lt;br /&gt;
The SINCE and UPTO keywords are for date comparisons; SINCE will limit operations to files/directories since (and including) the specified date/time. UPTO will limit operations to files/directories up to (and including) the specified date/time. The usual AmigaDOS shortcuts (today, yesterday, and so on) are allowed.&lt;br /&gt;
&lt;br /&gt;
The FOREACH command nests. WARNING: The same variable name should not be used for nested FOREACH commands; make sure the inner loop variable name is not the same as the outside loop variable name.&lt;br /&gt;
&lt;br /&gt;
The FOREACH command places its temporary files in T:. If T: is not assigned then RAM: is used instead.&lt;br /&gt;
&lt;br /&gt;
;Bugs&lt;br /&gt;
&lt;br /&gt;
It is sometimes hard to stop the FOREACH command from the Shell. Many things are looking at the signal bits, and the FOREACH command is low on the chain.  It is often easier to go to another Shell, use STATUS to find out the process number of the FOREACH command, and send that process a BREAK ALL. Like this, for instance:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; BREAK `STATUS com=foreach` all&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 foreach i in qwe1 qwe2 ram:#$&lt;br /&gt;
    echo &amp;quot;file is $i, path is ${i.path}&amp;quot;&lt;br /&gt;
    foreach j in test1 test2&lt;br /&gt;
       echo &amp;quot;subname is $j&amp;quot;&lt;br /&gt;
       echo &amp;quot;Current local vars are:&amp;quot;&lt;br /&gt;
       set&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
Here&#039;s a handy alias using FOREACH that gives an interactive delete command. Note: The alias must be defined on one line. It is shown on two lines for clarity.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; alias del foreach i []&lt;br /&gt;
  com &amp;quot;failat 21*Nask *&amp;quot;delete $i ?*&amp;quot;*N if warn *Ndelete ${i.path}$i*N endif&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;Example 3:&lt;br /&gt;
Rename all the .a files to .asm.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 foreach i in #?.a&lt;br /&gt;
    rename $i ${i.base}.asm&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FS_PLUGIN_CACHE ==&lt;br /&gt;
&lt;br /&gt;
Increases performance of a FFS2 file system.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FS_PLUGIN_CACHE &amp;lt;device name&amp;gt; [ CACHESIZE=&amp;lt;cache size&amp;gt;] [ READAHEAD=&amp;lt;blocks&amp;gt;]&lt;br /&gt;
: [ MEMLIMIT=&amp;lt;limit&amp;gt; ] [ QUIET ] [ WRITEAROUND ] [ NOCHECKSUM ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DEVICE/A,S=CACHESIZE/K/N,R=READAHEAD/K/N,MEMLIMIT/K/N,QUIET/S,WA=WRITEAROUND/S,NC=NOCHECKSUMS/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
FS_PLUGIN_CACHE starts a FastFileSystem 2 (FFS2) cache plug-in on a device &amp;lt;device name&amp;gt;. The plug-in will increase file system performance by buffering disk data that was accessed before and might be accessed again, or which was never accessed before but has a good chance of being needed soon.&lt;br /&gt;
&lt;br /&gt;
You can tell the plug-in how large the cache should become that it is supposed to maintain. By default it will try to use cache about 1% the size of the device it is installed on. You can override this number with the CACHESIZE parameter. The size you specify will be multiplied by 1024. Thus, a cache size of 8192 would result in a cache size of 8 MB.&lt;br /&gt;
&lt;br /&gt;
The cache plug-in supports also a feature called read-ahead. With this feature enabled, the file system will always read a little more data than is strictly necessary in the hope that the data read will be useful later. You can tell the file system how many blocks should be read using the READAHEAD parameter. Note that a read-ahead cache makes sense only if reading the extra data does not noticeably increase the overhead of transferring data from the disk. Thus, smaller read-aheads sizes are likely to be more successful than larger ones.&lt;br /&gt;
&lt;br /&gt;
The other command options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| MEMLIMIT || &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| WRITEAROUND or WA || &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| NOCHECKSUMS or NC || &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing examples.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FS_PLUGIN_ENCRYPT ==&lt;br /&gt;
&lt;br /&gt;
Enables FFS2 file system&#039;s data encryption.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FS_PLUGIN_ENCRYPT &amp;lt;device name&amp;gt; [ BLOCKS=&amp;lt;blocks&amp;gt; ] [ QUIET ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DEVICE/A,BLOCKS/K/N,QUIET/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
FS_PLUGIN_ENCRYPT starts a FastFileSystem 2 (FFS2) data encryption plug-in on a device &amp;lt;device name&amp;gt;. The plug-in performs on the fly data encryption and decryption on the device it works.&lt;br /&gt;
&lt;br /&gt;
The plug-in begins by asking you for a password to use for encryption. Enter your password and press Enter to begin. Note that you can abort the password entry by pressing Ctrl-C.&lt;br /&gt;
&lt;br /&gt;
Your password will be used to set up a block cipher algorithm by the name of Blowfish. Next, the file system will be taken out of service temporarily, the plug-in will be installed and the file system will be reactivated. If you entered the correct password, the file system will suddenly start to make sense of the encrypted data.&lt;br /&gt;
&lt;br /&gt;
{{Note|You have to reformat a file system with the encryption plug-in installed in order to use it.}}&lt;br /&gt;
&lt;br /&gt;
The FFS2 file system&#039;s block transform plug-in feature permits you to cascade plug-ins. That is, you can set up several plug-ins with different passwords on the same device. Note that the order in which the plug-ins are set up defines the order in which the encryption will be applied. When you want to access your data later, you will have to set up the different encryptions in exactly the same order again.&lt;br /&gt;
&lt;br /&gt;
There are two further parameters for the FS_PLUGIN_ENCRYPT command in addition to the mandatory DEVICE parameter. Using the BLOCKS parameter you can tell the file system how many data blocks it should try to encrypt at a time. The more blocks it uses, the faster it can encrypt data to be written to disk. The QUIET parameter tells the plug-in not to announce what it is about to do, except for printing error messages and prompting you to enter the password.&lt;br /&gt;
&lt;br /&gt;
;Warning&lt;br /&gt;
Do not forget you password! The Blowfish cipher is hard to break, and it does not get any easier because the password does not go directly into the cipher algorithm.&lt;br /&gt;
&lt;br /&gt;
== FS_SET_FLUSH_STRATEGY ==&lt;br /&gt;
&lt;br /&gt;
Changes volume&#039;s flushing strategy.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FS_SET_FLUSH_STRATEGY [ &amp;lt;volume name&amp;gt; ] [ &amp;lt;strategy&amp;gt; ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: VOLUME,STRATEGY/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
The FS_SET_FLUSH_STRATEGY command can be used for changing the flush strategy of a volume &amp;lt;volume name&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Whenever changes are made to the contents of a FastFileSystem 2 (FFS2) file system, the file system data structures may need to be updated. The updating process can involve changing several disk data blocks. If this process is interrupted, the data on the disk may no longer be consistent and require repairs. The FastFileSystem 2 tries hard not to leave the disk&#039;s data structures in an inconsistent state when changes are made. Unfortunately, for this goal to be reached, the data block manipulations have to be carried out in a certain order, and the changes need to be written back to disk at once. This takes time and has a negative impact on write performance.&lt;br /&gt;
&lt;br /&gt;
If you are certain that you can do without this elaborate and slow data management scheme, you can change the file system&#039;s data flushing strategy. The default is &amp;quot;strict&amp;quot;, which means that for each change made, the respective data block changes are immediately written back (&amp;quot;flushed&amp;quot;) to disk. The alternative is the &amp;quot;relaxed&amp;quot; strategy, which will delay writing back block changes until either no disk activity has taken place in a while or further block changes are making it necessary to write older modified blocks back to disk. The relaxed strategy is generally faster, but also generally less reliable than the strict one.&lt;br /&gt;
&lt;br /&gt;
The VOLUME parameter tells which FFS2 formatted volume&#039;s flushing strategy will be displayed or changed and the STRATEGY parameter which strategy will be selected. Value of 0 chooses the strict flushing strategy and 1 chooses the relaxed strategy. If you leave out the STRATEGY parameter, FS_SET_FLUSH_STRATEGY displays the current flushing strategy of the supplied volume.&lt;br /&gt;
&lt;br /&gt;
;Example 1&lt;br /&gt;
Display volume&#039;s &amp;quot;Workbench&amp;quot; current flushing strategy.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; FS_SET_FLUSH_STRATEGY Workbench:&lt;br /&gt;
 &#039;Workbench:&#039; flush strategy = strict (was strinct).&lt;br /&gt;
&lt;br /&gt;
;Example 2&lt;br /&gt;
Select &amp;quot;relaxed&amp;quot; flushing strategy for volume &amp;quot;Workbench&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; FS_SET_FLUSH_STRATEGY Workbench: 1&lt;br /&gt;
 &#039;Workbench:&#039; flush strategy = relaxed (was strinct).&lt;br /&gt;
&lt;br /&gt;
== FTP ==&lt;br /&gt;
&lt;br /&gt;
ARPANET file transfer program.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: FTP [-v|VERBOSE] [-d|DEBUG] [-t|TRACE] [-i|NOPROMPT] [-n|NOAUTOLOGIN] [-g|NOGLOBBING] [&amp;lt;host&amp;gt;] [&amp;lt;n&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -v=VERBOSE/S,-d=DEBUG/S,-t=TRACE/S,-i=NOPROMPT/S,-n=NOAUTOLOGIN/S,-g=NOGLOBBING/S,HOST,PORT/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
FTP is the user interface to the ARPANET standard File Transfer Protocol. The program allows a user to transfer files to and from a remote network site.&lt;br /&gt;
&lt;br /&gt;
Options may be specified at the command line, or to the command interpreter.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -v or VERBOSE || Verbose option forces FTP to show all responses from the remote server, as well as report on data transfer statistics.&lt;br /&gt;
|-&lt;br /&gt;
| -n or NOAUTOLOGIN || Restrains FTP from attempting &amp;quot;auto-login&amp;quot; upon initial connection.  If auto-login is enabled, FTP will check the .netrc (see below) file in the user&#039;s home directory for an entry describing an account on the remote machine.  If no entry exists, FTP will prompt for the remote machine login name (default is the user identity on the local machine), and, if necessary, prompt for a password and an account with which to login.&lt;br /&gt;
|-&lt;br /&gt;
| -i or NOPROMPT || Turns off interactive prompting during multiple file transfers.&lt;br /&gt;
|-&lt;br /&gt;
| -d or DEBUG || Enables debugging.&lt;br /&gt;
|-&lt;br /&gt;
| -g or NOGLOBBING || Disables file name globbing.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The client host with which FTP is to communicate may be specified on the command line. If this is done, FTP will immediately attempt to establish a connection to an FTP server on that host; otherwise, FTP will enter its command interpreter and await instructions from the user.  When FTP is awaiting commands from the user the prompt &amp;quot;ftp&amp;gt;&amp;quot; is provided to the user.  The following commands are recognized by FTP:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| $ &amp;lt;macro-name&amp;gt; [&amp;lt;args&amp;gt;] || Execute the &amp;lt;macro macro-name&amp;gt; that was defined with the macdef command. Arguments are passed to the macro unglobbed.&lt;br /&gt;
|-&lt;br /&gt;
| account [&amp;lt;passwd&amp;gt;] || Supply a supplemental password required by a remote system for access to resources once a login has been successfully completed.  If no argument is included, the user will be prompted for an account password in a non-echoing input mode.&lt;br /&gt;
|-&lt;br /&gt;
| append &amp;lt;local-file&amp;gt; [&amp;lt;remote-file&amp;gt;] || Append a local file to a file on the remote machine. If remote-file is left unspecified, the local file name is used in naming the remote file after being altered by any ntrans or nmap setting.  File transfer uses the current settings for type, format, mode, and structure.&lt;br /&gt;
|-&lt;br /&gt;
| ascii || Set the file transfer type to network ASCII. This is the default type.&lt;br /&gt;
|-&lt;br /&gt;
| bell || Arrange that a bell be sounded after each file transfer command is completed.&lt;br /&gt;
|-&lt;br /&gt;
| binary|| Set the file transfer type to support binary image transfer.&lt;br /&gt;
|-&lt;br /&gt;
| bye || Terminate the FTP session with the remote server and exit FTP.  An end of file will also terminate the session and exit.&lt;br /&gt;
|-&lt;br /&gt;
| case || Toggle remote computer file name case mapping during mget commands. When case is on (default is off), remote computer file names with all letters in upper case are written in the local directory with the letters mapped to lower case.&lt;br /&gt;
|-&lt;br /&gt;
| cd &amp;lt;remote-directory&amp;gt; || Change the working directory on the remote machine to &amp;lt;remote-directory&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| cdup || Change the remote machine working directory to the parent of the current remote machine working directory.&lt;br /&gt;
|-&lt;br /&gt;
| chmod &amp;lt;mode&amp;gt; &amp;lt;file-name&amp;gt; || Change the permission modes of the file &amp;lt;file-name&amp;gt; on the remote system to &amp;lt;mode&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| close || Terminate the FTP session with the remote server, and return to the command interpreter. Any defined macros are erased.&lt;br /&gt;
|-&lt;br /&gt;
| cr || Toggle carriage return stripping during ascii type file retrieval. Records are denoted by a carriage return/linefeed sequence during ascii type file transfer. When cr is on (the default), carriage returns are stripped from this sequence to conform with the UNIX single linefeed record delimiter. Records on non-UNIX remote systems may contain single linefeeds; when an ascii type transfer is made, these linefeeds may be distinguished from a record delimiter only when cr is off.&lt;br /&gt;
|-&lt;br /&gt;
| delete &amp;lt;remote-file&amp;gt; || Delete the file &amp;lt;remote-file&amp;gt; on the remote machine.&lt;br /&gt;
|-&lt;br /&gt;
| debug [&amp;lt;debug-value&amp;gt;] || Toggle debugging mode. If an optional debug value is specified it is used to set the debugging level. When debugging is on, FTP prints each command sent to the remote machine, preceded by the string &amp;quot;--&amp;gt;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| dir [&amp;lt;remote-directory&amp;gt;] [&amp;lt;local-file&amp;gt;] || Print a listing of the directory contents in the directory, &amp;lt;remote-directory&amp;gt;, and, optionally, placing the output in &amp;lt;local-file&amp;gt;. If interactive prompting is on, FTP will prompt the user to verify that the last argument is indeed the target local file for receiving dir output. If no directory is specified, the current working directory on the remote machine is used. If no local file is specified, or local-file is -, output comes to the terminal.&lt;br /&gt;
|-&lt;br /&gt;
| disconnect || A synonym for close.&lt;br /&gt;
|-&lt;br /&gt;
| form &amp;lt;format&amp;gt; || Set the file transfer form to &amp;lt;format&amp;gt;. The default format is &amp;quot;file&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| get &amp;lt;remote-file&amp;gt; [&amp;lt;local-file&amp;gt;] || Retrieve the &amp;lt;remote-file&amp;gt; and store it on the local machine. If the local file name is not specified, it is given the same name it has on the remote machine, subject to alteration by the current case, ntrans, and nmap settings. The current settings for type, form, mode, and structure are used while transferring the file.&lt;br /&gt;
|-&lt;br /&gt;
| glob || Toggle filename expansion for mdelete, mget and mput. If globbing is turned off with glob, the file name arguments are taken literally and not expanded. Globbing for mput is done as in csh(1). For mdelete and mget, each remote file name is expanded separately on the remote machine and the lists are not merged.  Expansion of a directory name is likely to be different from expansion of the name of an ordinary file: the exact result depends on the foreign operating system and FTP server, and can be previewed by doing &amp;quot;mls remote-files -&amp;quot; Note: mget and mput are not meant to transfer entire directory subtrees of files. That can be done by transferring a tar(1) archive of the subtree (in binary mode).&lt;br /&gt;
|-&lt;br /&gt;
| hash || Toggle hash-sign (&amp;quot;#&amp;quot;) printing for each data block transferred. The size of a data block is 1024 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| help [&amp;lt;command&amp;gt;] || Print an informative message about the meaning of command. If no argument is given, FTP prints a list of the known commands.&lt;br /&gt;
|-&lt;br /&gt;
| idle [&amp;lt;seconds&amp;gt;] || Set the inactivity timer on the remote server to seconds seconds. If seconds is omitted, the current inactivity timer is printed.&lt;br /&gt;
|-&lt;br /&gt;
| lcd [&amp;lt;directory&amp;gt;] || Change the working directory on the local machine. If no directory is specified, the user&#039;s home directory is used.&lt;br /&gt;
|-&lt;br /&gt;
| ls [&amp;lt;remote-directory&amp;gt;] [&amp;lt;local-file&amp;gt;] || Print a listing of the contents of a directory on the remote machine. The listing includes any system-dependent information that the server chooses to include; for example, most UNIX systems will produce output from the command &amp;quot;ls -l&amp;quot;. (See also nlist.) If remote directory is left unspecified, the current working directory is used. If interactive prompting is on, FTP will prompt the user to verify that the last argument is indeed the target local file for receiving ls output. If no local file is specified, or if &amp;lt;local-file&amp;gt; is &amp;quot;-&amp;quot;, the output is sent to the terminal.&lt;br /&gt;
|-&lt;br /&gt;
| macdef &amp;lt;macro-name&amp;gt; || Define a macro. Subsequent lines are stored as the macro &amp;lt;macro-name&amp;gt;; a null line (consecutive newline characters in a file or carriage returns from the terminal) terminates macro input mode.  There is a limit of 16 macros and 4096 total characters in all defined macros. Macros remain defined until a close command is executed. The macro processor interprets &amp;quot;$&amp;quot; and &amp;quot;\&amp;quot; as special characters. A &amp;quot;$&amp;quot; followed by a number (or numbers) is replaced by the corresponding argument on the macro invocation command line. A &amp;quot;$&amp;quot; followed by an &amp;quot;i&amp;quot; signals that macro processor that the executing macro is to be looped.  On the first pass &amp;quot;$i&amp;quot; is replaced by the first argument on the macro invocation command line, on the second pass it is replaced by the second argument, and so on. A &amp;quot;\&amp;quot; followed by any character is replaced by that character. Use the &amp;quot;\&amp;quot; to prevent special treatment of the &amp;quot;$&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| mdelete [&amp;lt;remote-files&amp;gt;] || Delete the &amp;lt;remote-files&amp;gt; on the remote machine.&lt;br /&gt;
|-&lt;br /&gt;
| mdir &amp;lt;remote-files&amp;gt; &amp;lt;local-file&amp;gt; || Like dir, except multiple remote files may be specified. If interactive prompting is on, FTP will prompt the user to verify that the last argument is indeed the target local file for receiving mdir output.&lt;br /&gt;
|-&lt;br /&gt;
| mget &amp;lt;remote-files&amp;gt; || Expand the &amp;lt;remote-files&amp;gt; on the remote machine and do a get for each file name thus produced. See glob for details on the filename expansion. Resulting file names will then be processed according to case, ntrans, and nmap settings. Files are transferred into the local working directory, which can be changed with &amp;quot;lcd directory&amp;quot;; new local directories can be created with &amp;quot;! mkdir directory&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| mkdir &amp;lt;directory-name&amp;gt; || Make a directory on the remote machine.&lt;br /&gt;
|-&lt;br /&gt;
| mls &amp;lt;remote-files&amp;gt; &amp;lt;local-file&amp;gt; || Like nlist, except multiple remote files may be specified, and the &amp;lt;local-file&amp;gt; must be specified. If interactive prompting is on, FTP will prompt the user to verify that the last argument is indeed the target local file for receiving mls output.&lt;br /&gt;
|-&lt;br /&gt;
| mode [&amp;lt;mode-name&amp;gt;] || Set the file transfer mode to &amp;lt;mode-name&amp;gt;. The default mode is &amp;quot;stream&amp;quot; mode.&lt;br /&gt;
|-&lt;br /&gt;
| modtime &amp;lt;file-name&amp;gt; || Show the last modification time of the file on the remote machine.&lt;br /&gt;
|-&lt;br /&gt;
| mput &amp;lt;local-files&amp;gt; || Expand wild cards in the list of local files given as arguments and do a put for each file in the resulting list. See glob for details of filename expansion. Resulting file names will then be processed according to ntrans and nmap settings.&lt;br /&gt;
|-&lt;br /&gt;
| newer &amp;lt;file-name&amp;gt; || Get the file only if the modification time of the remote file is more recent that the file on the current system. If the file does not exist on the current system, the remote file is considered newer. Otherwise, this command is identical to get.&lt;br /&gt;
|-&lt;br /&gt;
| nlist [&amp;lt;remote-directory&amp;gt;] [&amp;lt;local-file&amp;gt;] || Print a list of the files in a directory on the remote machine. If remote directory is left unspecified, the current working directory is used. If interactive prompting is on, FTP will prompt the user to verify that the last argument is indeed the target local file for receiving nlist output. If no local file is specified, or if local-file is -, the output is sent to the terminal.&lt;br /&gt;
|-&lt;br /&gt;
| nmap [&amp;lt;inpattern&amp;gt; &amp;lt;outpattern&amp;gt;] || Set or unset the filename mapping mechanism. If no arguments are specified, the filename mapping mechanism is unset. If arguments are specified, remote filenames are mapped during mput commands and put commands issued without a specified remote target filename. If arguments are specified, local filenames are mapped during mget commands and get commands issued without a specified local target filename. This command is useful when connecting to a non-UNIX remote computer with different file naming conventions or practices. The mapping follows the pattern set by &amp;lt;inpattern&amp;gt; and &amp;lt;outpattern&amp;gt;. &amp;lt;inpattern&amp;gt; is a template for incoming filenames (which may have already been processed according to the ntrans and case settings). Variable templating is accomplished by including the sequences &amp;quot;$1&amp;quot;, &amp;quot;$2&amp;quot;, ..., &amp;quot;$9&amp;quot; in &amp;lt;inpattern&amp;gt;. Use &amp;quot;\&amp;quot; to prevent this special treatment of the &amp;quot;$&amp;quot; character. All other characters are treated literally, and are used to determine the nmap [&amp;lt;inpattern&amp;gt;] variable values. For example, given inpattern $1.$2 and the remote file name &amp;quot;mydata.data&amp;quot;, $1 would have the value &amp;quot;mydata&amp;quot;, and $2 would have the value &amp;quot;data&amp;quot;. The &amp;lt;outpattern&amp;gt; determines the resulting mapped filename. The sequences &amp;quot;$1&amp;quot;, &amp;quot;$2&amp;quot;, ...., &amp;quot;$9&amp;quot; are replaced by any value resulting from the inpattern template. The sequence &amp;quot;$0&amp;quot; is replace by the original filename. Additionally, the sequence &amp;quot;[seq1, seq2]&amp;quot; is replaced by [seq1] if seq1 is not a null string; otherwise it is replaced by seq2. For example, the command&lt;br /&gt;
&lt;br /&gt;
: nmap $1.$2.$3 [$1,$2].[$2,file]&lt;br /&gt;
&lt;br /&gt;
would yield the output filename &amp;quot;myfile.data&amp;quot; for input filenames &amp;quot;myfile.data&amp;quot; and &amp;quot;myfile.data.old&amp;quot;, &amp;quot;myfile.file&amp;quot; for the input filename &amp;quot;myfile&amp;quot;, and &amp;quot;myfile.myfile&amp;quot; for the input filename &amp;quot;.myfile&amp;quot;. Spaces may be included in &amp;lt;outpattern&amp;gt;, as in the example: nmap $1 sed &amp;quot;s/  *$//&amp;quot; &amp;gt; $1.  Use the &amp;quot;\&amp;quot; character to prevent special treatment of the &amp;quot;$&amp;quot;,&#039;[&#039;,&#039;[&#039;, and &amp;quot;,&amp;quot; characters.&lt;br /&gt;
|-&lt;br /&gt;
| ntrans [&amp;lt;inchars&amp;gt; [&amp;lt;outchars&amp;gt;]] || Set or unset the filename character translation mechanism. If no arguments are specified, the filename character translation mechanism is unset. If arguments are specified, characters in remote filenames are translated during mput commands and put commands issued without a specified remote target filename. If arguments are specified, characters in local filenames are translated during mget commands and get commands issued without a specified local target filename. This command is useful when connecting to a non-UNIX remote computer with different file naming conventions or practices. Characters in a filename matching a character in &amp;lt;inchars&amp;gt; are replaced with the corresponding character in &amp;lt;outchars&amp;gt;. If the character&#039;s position in &amp;lt;inchars&amp;gt; is longer than the length of &amp;lt;outchars&amp;gt;, the character is deleted from the file name.&lt;br /&gt;
|-&lt;br /&gt;
| open &amp;lt;host&amp;gt; [&amp;lt;port&amp;gt;] || Establish a connection to the specified host FTP server. An optional port number may be supplied, in which case, FTP will attempt to contact an FTP server at that port. If the auto-login option is on (default), FTP will also attempt to automatically log the user in to the FTP server (see below).&lt;br /&gt;
|-&lt;br /&gt;
| passive || Toggle passive mode. If passive mode is turned on (default is off), the FTP client will send a PASV command for all data connections instead of the usual PORT command. The PASV command requests that the remote server open a port for the data connection and return the address of that port. The remote server listens on that port and the client connects to it. When using the more traditional PORT command, the client listens on a port and sends that address to the remote server, who connects back to it. Passive mode is useful when using FTP through a gateway router or host that controls the directionality of traffic. (Note that though FTP servers are required to support the PASV command by RFC 1123, some do not.)&lt;br /&gt;
|-&lt;br /&gt;
| prompt|| Toggle interactive prompting. Interactive prompting occurs during multiple file transfers to allow the user to selectively retrieve or store files. If prompting is turned off (default is on), any mget or mput will transfer all files, and any mdelete will delete all files.&lt;br /&gt;
|-&lt;br /&gt;
| proxy &amp;lt;ftp-command&amp;gt; || Execute an FTP command on a secondary control connection. This command allows simultaneous connection to two remote FTP servers for transferring files between the two servers. The first proxy command should be an open, to establish the secondary control connection. Enter the command &amp;quot;proxy ?&amp;quot; to see other FTP commands executable on the secondary connection. The following commands behave differently when prefaced by proxy: open will not define new macros during the auto-login process, close will not erase existing macro definitions, get and mget transfer files from the host on the primary control connection to the host on the secondary control connection, and put, mput, and append transfer files from the host on the secondary control connection to the host on the primary control connection. Third party file transfers depend upon support of the FTP protocol PASV command by the server on the secondary control connection.&lt;br /&gt;
|-&lt;br /&gt;
| put &amp;lt;local-file&amp;gt; [&amp;lt;remote-file&amp;gt;] || Store a local file on the remote machine. If &amp;lt;remote-file&amp;gt; is left unspecified, the local file name is used after processing according to any ntrans or nmap settings in naming the remote file. File transfer uses the current settings for type, format, mode, and structure.&lt;br /&gt;
|-&lt;br /&gt;
| pwd || Print the name of the current working directory on the remote machine.&lt;br /&gt;
|-&lt;br /&gt;
| quit || A synonym for bye.&lt;br /&gt;
|-&lt;br /&gt;
| quote &amp;lt;arg1&amp;gt; &amp;lt;arg2&amp;gt; ... || The arguments specified are sent, verbatim, to the remote FTP server.&lt;br /&gt;
|-&lt;br /&gt;
| recv &amp;lt;remote-file&amp;gt; [&amp;lt;local-file&amp;gt;] || A synonym for get.&lt;br /&gt;
|-&lt;br /&gt;
| reget &amp;lt;remote-file&amp;gt; [&amp;lt;local-file&amp;gt;] || Reget acts like get, except that if &amp;lt;local-file&amp;gt; exists and is smaller than &amp;lt;remote-file&amp;gt;, &amp;lt;local-file&amp;gt; is presumed to be a partially transferred copy of &amp;lt;remote-file&amp;gt; and the transfer is continued from the apparent point of failure. This command is useful when transferring very large files over networks that are prone to dropping connections.&lt;br /&gt;
|-&lt;br /&gt;
| remotehelp [&amp;lt;command-name&amp;gt;] || Request help from the remote FTP server. If a &amp;lt;command-name&amp;gt; is specified it is supplied to the server as well.&lt;br /&gt;
|-&lt;br /&gt;
| remotestatus [&amp;lt;file-name&amp;gt;] || With no arguments, show status of remote machine. If &amp;lt;file-name&amp;gt; is specified, show status of &amp;lt;file-name&amp;gt; on remote machine.&lt;br /&gt;
|-&lt;br /&gt;
| rename [&amp;lt;from&amp;gt;] [&amp;lt;to&amp;gt;] || Rename the file &amp;lt;from&amp;gt; on the remote machine, to the file &amp;lt;to&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| reset || Clear reply queue. This command re-synchronizes command/reply sequencing with the remote FTP server. Resynchronization may be necessary following a violation of the FTP protocol by the remote server.&lt;br /&gt;
|-&lt;br /&gt;
| restart &amp;lt;marker&amp;gt; || Restart the immediately following get or put at the indicated marker. On UNIX systems, marker is usually a byte offset into the file.&lt;br /&gt;
|-&lt;br /&gt;
| rmdir &amp;lt;directory-name&amp;gt; || Delete a directory on the remote machine.&lt;br /&gt;
|-&lt;br /&gt;
| runique || Toggle storing of files on the local system with unique filenames. If a file already exists with a name equal to the target local filename for a get or mget command, a &amp;quot;.1&amp;quot; is appended to the name. If the resulting name matches another existing file, a &amp;quot;.2&amp;quot; is appended to the original name. If this process continues up to &amp;quot;.99&amp;quot;, an error message is printed, and the transfer does not take place. The generated unique filename will be reported. Note that runique will not affect local files generated from a shell command (see below). The default value is off.&lt;br /&gt;
|-&lt;br /&gt;
| send &amp;lt;local-file&amp;gt; [&amp;lt;remote-file&amp;gt;] || A synonym for put.&lt;br /&gt;
|-&lt;br /&gt;
| sendport || Toggle the use of PORT commands. By default, FTP will attempt to use a PORT command when establishing a connection for each data transfer. The use of PORT commands can prevent delays when performing multiple file transfers. If the PORT command fails, FTP will use the default data port. When the use of PORT commands is disabled, no attempt will be made to use PORT commands for each data transfer. This is useful for certain FTP implementations which do ignore PORT commands but, incorrectly, indicate they&#039;ve been accepted.&lt;br /&gt;
|-&lt;br /&gt;
| site &amp;lt;arg1&amp;gt; &amp;lt;arg2&amp;gt; ... || The arguments specified are sent, verbatim, to the remote FTP server as a SITE command.&lt;br /&gt;
|-&lt;br /&gt;
| size &amp;lt;file-name&amp;gt; || Return size of &amp;lt;file-name&amp;gt; on remote machine.&lt;br /&gt;
|-&lt;br /&gt;
| status || Show the current status of FTP.&lt;br /&gt;
|-&lt;br /&gt;
| struct [&amp;lt;struct-name&amp;gt;] || Set the file transfer structure to struct-name. By default &amp;quot;stream&amp;quot; structure is used.&lt;br /&gt;
|-&lt;br /&gt;
| sunique || Toggle storing of files on remote machine under unique file names. Remote FTP server must support FTP protocol STOU command for successful completion. The remote server will report unique name. Default value is off.&lt;br /&gt;
|-&lt;br /&gt;
| system || Show the type of operating system running on the remote machine.&lt;br /&gt;
|-&lt;br /&gt;
| tenex || Set the file transfer type to that needed to talk to TENEX machines.&lt;br /&gt;
|-&lt;br /&gt;
| trace || Toggle packet tracing.&lt;br /&gt;
|-&lt;br /&gt;
| type [&amp;lt;type-name&amp;gt;] || Set the file transfer type to &amp;lt;type-name&amp;gt;. If no type is specified, the current type is printed. The default type is network ASCII.&lt;br /&gt;
|-&lt;br /&gt;
| umask [&amp;lt;newmask&amp;gt;] || Set the default umask on the remote server to &amp;lt;newmask&amp;gt;. If &amp;lt;newmask&amp;gt; is omitted, the current umask is printed.&lt;br /&gt;
|-&lt;br /&gt;
| user &amp;lt;user-name&amp;gt; [&amp;lt;password&amp;gt;] [&amp;lt;account&amp;gt;] || Identify yourself to the remote FTP server. If the password is not specified and the server requires it, FTP will prompt the user for it (after disabling local echo). If an account field is not specified, and the FTP server requires it, the user will be prompted for it. If an account field is specified, an account command will be relayed to the remote server after the login sequence is completed if the remote server did not require it for logging in. Unless FTP is invoked with &amp;quot;auto-login&amp;quot; disabled, this process is done automatically on initial connection to the FTP server.&lt;br /&gt;
|-&lt;br /&gt;
| verbose || Toggle verbose mode. In verbose mode, all responses from the FTP server are displayed to the user. In addition, if verbose is on, when a file transfer completes, statistics regarding the efficiency of the transfer are reported. By default, verbose is on.&lt;br /&gt;
|-&lt;br /&gt;
| ? [&amp;lt;command&amp;gt;] || A synonym for help.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Aborting a file transfer&lt;br /&gt;
To abort a file transfer, use the terminal interrupt key (usually Ctrl-C). Sending transfers will be immediately halted. Receiving transfers will be halted by sending a FTP protocol ABOR command to the remote server, and discarding any further data received. The speed at which this is accomplished depends upon the remote server&#039;s support for ABOR processing. If the remote server does not support the ABOR command, an &amp;quot;ftp&amp;gt;&amp;quot; prompt will not appear until the remote server has completed sending the requested file.&lt;br /&gt;
&lt;br /&gt;
The terminal interrupt key sequence will be ignored when FTP has completed any local processing and is awaiting a reply from the remote server. A long delay in this mode may result from the ABOR processing described above, or from unexpected behavior by the remote server, including violations of the FTP protocol. If the delay results from unexpected remote server behavior, the local FTP program must be killed by hand.&lt;br /&gt;
&lt;br /&gt;
;File naming conventions&lt;br /&gt;
Files specified as arguments to FTP commands are processed according to the following rules.&lt;br /&gt;
&lt;br /&gt;
# If the file name &amp;quot;-&amp;quot; is specified, the stdin (for reading) or stdout (for writing) is used.&lt;br /&gt;
# If the first character of the file name is &amp;quot;|&amp;quot;, the remainder of the argument is interpreted as a shell command. FTP then forks a shell, using popen(3) with the argument supplied, and reads (writes) from the stdout (stdin). If the shell command includes spaces, the argument must be quoted; e.g. &amp;quot;ls -lt&amp;quot;. A particularly useful example of this mechanism is: &amp;quot;dir more&amp;quot;.&lt;br /&gt;
# Failing the above checks, if &amp;quot;globbing&amp;quot; is enabled, local file names are expanded according to the rules used in the csh(1); c.f. the glob command. If the FTP command expects a single local file (.e.g.  put), only the first filename generated by the &amp;quot;globbing&amp;quot; operation is used.&lt;br /&gt;
# For mget commands and get commands with unspecified local file names, the local filename is the remote filename, which may be altered by a case, ntrans, or nmap setting. The resulting filename may then be altered if runique is on.&lt;br /&gt;
# For mput commands and put commands with unspecified remote file names, the remote filename is the local filename, which may be altered by a ntrans or nmap setting. The resulting filename may then be altered by the remote server if sunique is on.&lt;br /&gt;
&lt;br /&gt;
;File transfer parameters&lt;br /&gt;
The FTP specification specifies many parameters which may affect a file transfer. The type may be one of &amp;quot;ascii&amp;quot;, &amp;quot;image&amp;quot; (binary), &amp;quot;ebcdic&amp;quot;, and &amp;quot;local byte size&amp;quot; (for PDP-10&#039;s and PDP-20&#039;s mostly). FTP supports the ascii and image types of file transfer, plus local byte size 8 for tenex mode transfers.&lt;br /&gt;
&lt;br /&gt;
FTP supports only the default values for the remaining file transfer parameters: mode, form, and struct.&lt;br /&gt;
&lt;br /&gt;
;The .netrc file&lt;br /&gt;
The .netrc file contains login and initialization information used by the auto-login process. It resides in the user&#039;s home directory. The following tokens are recognized; they may be separated by spaces, tabs, or new-lines:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| machine name || Identify a remote machine name. The auto-login process searches the .netrc file for a machine token that matches the remote machine specified on the FTP command line or as an open command argument. Once a match is made, the subsequent .netrc tokens are processed, stopping when the end of file is reached or another machine or a default token is encountered.&lt;br /&gt;
|-&lt;br /&gt;
| default || This is the same as machine name except that default matches any name.  There can be only one default token, and it must beafter all machine tokens. This is normally used as:&lt;br /&gt;
&lt;br /&gt;
: default login anonymous password user@site&lt;br /&gt;
&lt;br /&gt;
thereby giving the user automatic anonymous FTP login to machines not specified in .netrc. This can be overridden by using the -n flag to disable auto-login.&lt;br /&gt;
|-&lt;br /&gt;
| login name || Identify a user on the remote machine. If this token is present, the auto-login process will initiate a login using the specified name.&lt;br /&gt;
|-&lt;br /&gt;
| password string || Supply a password. If this token is present, the auto-login process will supply the specified string if the remote server requires a password as part of the login process. Note that if this token is present in the .netrc file for any user other than anonymous, FTP will abort the auto-login process if the .netrc is readable by anyone besides the user.&lt;br /&gt;
|-&lt;br /&gt;
| account string || Supply an additional account password. If this token is present, the auto-login process will supply the specified string if the remote server requires an additional account password, or the auto-login process will initiate an ACCT command if it does not.&lt;br /&gt;
|-&lt;br /&gt;
| macdef name || Define a macro. This token functions like the FTP macdef command functions. A macro is defined with the specified name; its contents begin with the next .netrc line and continue until a null line (consecutive new-line characters) is encountered. If a macro named init is defined, it is automatically executed as the last step in the auto-login process.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Environment&lt;br /&gt;
FTP utilizes the following environment variables.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| HOME || For default location of a .netrc file, if one exists.&lt;br /&gt;
|-&lt;br /&gt;
| SHELL || For default shell.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Bugs&lt;br /&gt;
Correct execution of many commands depends upon proper behavior by the remote server.&lt;br /&gt;
&lt;br /&gt;
An error in the treatment of carriage returns in the 4.2BSD ascii-mode transfer code has been corrected. This correction may result in incorrect transfers of binary files to and from 4.2BSD servers using the ascii type. Avoid this problem by using the binary image type.&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing examples.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GET ==&lt;br /&gt;
&lt;br /&gt;
Gets the value of a local variable.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: GET &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME/A&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
GET is used to retrieve and display the value of a local environment variable. The value is displayed in the current window.&lt;br /&gt;
&lt;br /&gt;
Local environment variables are only recognized by the Shell in which they are created or by any Shells created from a NEWSHELL command executed in the original Shell. If you open an additional Shell by opening the Shell icon or by using the Execute Command menu item, previously created local environment variables are not available.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; GET editor&lt;br /&gt;
 Extras:Tools/MEmacs&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#SET|SET]]&lt;br /&gt;
&lt;br /&gt;
== GETENV ==&lt;br /&gt;
&lt;br /&gt;
Gets the value of a global variable.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: GETENV &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME/A&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
GETENV is used to retrieve and display the value of a global environment variable. The value is displayed in the current window. Global variables are stored in ENV: and are recognized by all Shells.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; GETENV editor&lt;br /&gt;
 Extras:Tools/MEmacs&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#SETENV|SETENV]]&lt;br /&gt;
&lt;br /&gt;
== GETNETSTATUS ==&lt;br /&gt;
&lt;br /&gt;
Queries whether the network is operational.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: GETNETSTATUS [CHECK=condition[,condition...]] [QUIET]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: CHECK/K,QUIET&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
The command is used to check/display which interfaces are currently running and which settings are being configured. It can be used in script files or for quick diagnostic purposes. The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| CHECK || A list of conditions to check, which must be separated by commas. The following conditions can be checked:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| INTERFACES || Are any networking interfaces configured and operational?&lt;br /&gt;
|-&lt;br /&gt;
| PTPINTERFACES || Are any point-to-point interfaces, e.g. SLIP and PPP, configured and operational?&lt;br /&gt;
|-&lt;br /&gt;
| BCASTINTERFACES || Are any broadcast interfaces, e.g. Ethernet, configured and operational?&lt;br /&gt;
|- &lt;br /&gt;
| RESOLVER || Are any name resolution servers configured?&lt;br /&gt;
|-&lt;br /&gt;
| ROUTES || Is any routing information configured?&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULTROUTE || Is the default route configured?&lt;br /&gt;
|}&lt;br /&gt;
If any of the conditions to test for is not satisfied, a message to this effect will be printed and the command will exit with status 5, which can be tested in script files using the &#039;IF WARN&#039; command.&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || Whatever happens, except for errors no output will be produced.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If no conditions are to be checked for, then this command will print version information and the list of conditions that can be tested for, indicating which ones are satisfied and which are not.&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
Find out which conditions can be tested.&lt;br /&gt;
 1&amp;gt; GETNETSTATUS&lt;br /&gt;
 bsdsocket.library 4.307 (9.2.2012) [Roadshow 4.307 (9.2.2012)]&lt;br /&gt;
 Networking interfaces are available and configured.&lt;br /&gt;
 &#039;&#039;&#039;No&#039;&#039;&#039; point-to-point networking interfaces are available and configured.&lt;br /&gt;
 Broadcast networking interfaces are available and configured.&lt;br /&gt;
 Name resolution servers are configured.&lt;br /&gt;
 Routing information is configured.&lt;br /&gt;
 The default route is configured.&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
A script to test if the interfaces are operational.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 GETNETSTATUS CHECK=&amp;quot;INTERFACES&amp;quot; QUIET&lt;br /&gt;
 IF NOT WARN&lt;br /&gt;
    ECHO &amp;quot;All interfaces are operational.&amp;quot;&lt;br /&gt;
 ELSE&lt;br /&gt;
    GETNETSTATUS&lt;br /&gt;
 ENDIF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GROUP ==&lt;br /&gt;
&lt;br /&gt;
Changes the access rights of a file or directory.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: GROUP [FILE] {&amp;lt;file | pattern&amp;gt;} [GROUP] &amp;lt;name or number&amp;gt; [ALL] [QUIET]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILE/A/M,GROUP/A,ALL/S,QUIET/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
Each file or directory bears information which describes who may access it. This information can be displayed by the LIST command and is important if that file or directory is made accessible through a networked file system.&lt;br /&gt;
&lt;br /&gt;
The GROUP command will change the access rights of one or more files or directories. The &#039;group&#039; must be given either as a name or a number. The file system will have to understand the name given, or you will see an error message to this effect. If you know in advance which numeric group ID should be used in place of a name, you can provide this instead. Note that group names cannot be longer than 31 characters and that numeric group IDs must be in the range 0..65535. An empty name given for the group will remove the access rights information.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| ALL || If the ALL option is given, GROUP will change the access rights of all the files in the specified directory.&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || If the QUIET option is given, screen output is suppressed. The local shell variable _Verbosity with a negative value has the same effect.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
 1&amp;gt; GROUP textfile admin&lt;br /&gt;
&lt;br /&gt;
Grants access rights to &amp;quot;textfile&amp;quot; to the group &amp;quot;admin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
 1&amp;gt; GROUP textfile &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Removes any access rights from &amp;quot;textfile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== HELP ==&lt;br /&gt;
&lt;br /&gt;
Text based help command.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: HELP [&amp;lt;command name&amp;gt; [SHORT | LFORMAT]] | [SHOWLIST]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: COMMANDNAME,SHORT/S,LFORMAT/S,SHOWLIST/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Rexx:&lt;br /&gt;
&lt;br /&gt;
HELP will display the help text of a command given in argument. If no arguments is given, a brief description of this help system is displayed.&lt;br /&gt;
&lt;br /&gt;
By default all the available text for the supplied command name will be printed in the Shell.&lt;br /&gt;
&lt;br /&gt;
If the SHORT argument is supplied, only a short description will be printed. This text is extracted from the section &amp;quot;NAME&amp;quot; of the help text.&lt;br /&gt;
&lt;br /&gt;
Some commands use the LFORMAT argument to customize the command output. This argument is always used with several output qualifiers. Supplying the LFORMAT argument to the HELP command, only the details on the usage of the LFORMAT argument will be printed. This text is extracted from the section &amp;quot;LFORMAT&amp;quot; of the help text.&lt;br /&gt;
&lt;br /&gt;
If the SHOWLIST argument is supplied, a list of all available help texts with the short description will be displayed.&lt;br /&gt;
&lt;br /&gt;
The HELP command will look for text help files in HELP:&amp;lt;your language&amp;gt;/Shell and if it could not be found, it will look into HELP:english/Shell.&lt;br /&gt;
&lt;br /&gt;
HELP will display the help texts with the program you specify in the PAGER environment variable. By default, help texts will be displayed with the MORE program. As an example, if you want to use the TYPE command, store it into the PAGER variable with &amp;quot;SETENV PAGER TYPE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== HI ==&lt;br /&gt;
&lt;br /&gt;
Halts all ARexx programs.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: HI&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
Sets the global halt flag, which causes all active ARexx programs to receive an external halt request. Each program will exit immediately unless its HALT interrupt has been enabled. The halt flag does not remain set, but is cleared automatically after all current programs have received the request.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; HI&lt;br /&gt;
 Command returned 10/2: Execution halted&lt;br /&gt;
 rx failed returncode 10&lt;br /&gt;
&lt;br /&gt;
== HISTORY ==&lt;br /&gt;
&lt;br /&gt;
Displays, recalls, or stores the command line history.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: HISTORY [[LINES] &amp;lt;number&amp;gt;] [START &amp;lt;number&amp;gt;] [LOAD &amp;lt;file name&amp;gt;] &lt;br /&gt;
: [SAVE &amp;lt;file name&amp;gt;] [SIZE &amp;lt;number&amp;gt;] [CLEAR] [SHOW] [NONUM]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: LINES/N,START/K/N,LOAD/K,SAVE/K,SIZE/K/N,CLEAR/S,SHOW/S,NONUM/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
HISTORY can be used to show the past command line history, to save it to a file or load it from a file. If no other options are specified, it will show the command line history, each line prefixed by a number.&lt;br /&gt;
&lt;br /&gt;
To restrict the number of history lines shown, use the LINES parameter; the default is to list all history lines, starting with the first one. To start the listing with a different line, use the START parameter. Each line will be prefixed by a number; to ignore the number, use the NONUM parameter.&lt;br /&gt;
&lt;br /&gt;
The command history can be stored in or loaded from a file. To do either, specify the name of the file to be used with the LOAD or SAVE commands. These commands can be combined: the history command will always perform the SAVE command first before it performs the LOAD command. Note that the command line history will be added to the current list if loaded with the LOAD parameter unless you use the CLEAR parameter, too. Used all by itself, the CLEAR parameter will drop the current command line history.&lt;br /&gt;
&lt;br /&gt;
The SIZE parameter controls the size of the command line history buffer which by default has room for about four complete command lines of maximum length. Changing the size tries to retain the contents of the current command line history buffer.&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
 1&amp;gt; HISTORY&lt;br /&gt;
&lt;br /&gt;
Lists the current command line history, starting with the first line, printing all lines in the buffer.&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
 1&amp;gt; HISTORY LINES 5 START 3&lt;br /&gt;
&lt;br /&gt;
Prints five lines of command line history, starting with the third line. If fewer lines are stored in the buffer, fewer will be printed.&lt;br /&gt;
&lt;br /&gt;
;Example 3:&lt;br /&gt;
 1&amp;gt; HISTORY SAVE old-history LOAD new-history CLEAR&lt;br /&gt;
&lt;br /&gt;
Saves the current command line history in the file &#039;old-history&#039;, then clears the history buffer and eventually loads the command line history from the file &#039;new-history&#039;. Note that if either the save or the load command fails no changes will be made to the contents of the current history buffer.&lt;br /&gt;
&lt;br /&gt;
;Example 4:&lt;br /&gt;
 1&amp;gt; HISTORY SIZE 16&lt;br /&gt;
&lt;br /&gt;
Sets the maximum size of the history buffer to about 8,000 characters.&lt;br /&gt;
&lt;br /&gt;
;Example 5:&lt;br /&gt;
 1&amp;gt; HISTORY START -2 LINES 1 NONUM&lt;br /&gt;
&lt;br /&gt;
Displays the last command line entered (preceding the &#039;HISTORY START -2 LINES 1 NONUM&#039; command).&lt;br /&gt;
&lt;br /&gt;
== ICONX ==&lt;br /&gt;
&lt;br /&gt;
{{Note| ICONX is used only as a default tool in a project icon and cannot be used as a Shell command.}}&lt;br /&gt;
&lt;br /&gt;
Allows execution of a script file of AmigaDOS commands from an icon.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ICONX&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
To use ICONX, create or copy a project icon for the script. Open the icon&#039;s Information window and change the Default Tool of the icon to C:ICONX and select Save to store the changed .info file. The script can then be executed by double-clicking on the icon.&lt;br /&gt;
&lt;br /&gt;
When the icon is opened, ICONX changes the current directory to the directory containing the project icon before executing the script. A console window can be opened on the Workbench screen if the script produces output.&lt;br /&gt;
&lt;br /&gt;
Several Tool Types can be specified in the script icon. The WINDOW Tool Type provides an alternate window specification for the input/output window. By default, the window&#039;s specification is:&lt;br /&gt;
&lt;br /&gt;
 WINDOW=CON:0/50//80/IconX/AUTO/WAIT/CLOSE&lt;br /&gt;
&lt;br /&gt;
The AUTO option opens a window only if there is output created by the script. If a window opens, the WAIT option forces it to remain open after the script terminates until you specifically close it. The CLOSE option gives the window a close gadget.&lt;br /&gt;
&lt;br /&gt;
The WAIT Tool Type (not to be confused with the WAIT option of the WINDOW Tool Type) specifies the number of seconds the input/output window should remain open after the script terminates. If you use this option the default input/output window cannot be closed before the WAIT period has expired. There is also a DELAY Tool Type that works in very similar way, except that its parameter is in 1/50th of a second, instead of in seconds.&lt;br /&gt;
&lt;br /&gt;
The STACK Tool Type specifies the number of bytes to use for stack during script execution. If this Tool Type is not provided, the default 4096 bytes is used.&lt;br /&gt;
&lt;br /&gt;
Finally, the USERSHELL Tool Type runs the script file using the current Use Shell instead of the normal ROM Shell. You must specify USERSHELL=YES. User Shells are third party shells that you can purchase and install in your system to replace the standard Amiga Shell environment that comes with the operating system.&lt;br /&gt;
&lt;br /&gt;
Extended selection passes files that have icons to the script. Their file names appear to the script as keywords. To use this facility, the .KEY keyword must appear at the start of the script. In this case, the AmigaDOS EXECUTE command is used to execute the script file.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#EXECUTE|EXECUTE]]&lt;br /&gt;
&lt;br /&gt;
== IDENTD ==&lt;br /&gt;
&lt;br /&gt;
TCP/IP IDENT protocol server.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: IDENTD&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
When running IDENTD returns user information to a remote host that a user is requesting a service from.&lt;br /&gt;
&lt;br /&gt;
== IDETOOL ==&lt;br /&gt;
&lt;br /&gt;
Modfies ATA/ATAPI device driver parameters.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: IDETOOL [ &amp;lt;command&amp;gt; [ &amp;lt;argument&amp;gt;... ] ]...&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -v,-c,-l,-u,-d,-r,-x,-p,-i,-o,-j,-m,-w,-s,-a,-b,-e,-f,-t,-g,-0,-1,-2,-3,-4,-5,-6,-7,-8,-9&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
IDETOOL allows querying and modifying internal parameters of the following ATA/ATAPI device drivers:&lt;br /&gt;
* a1ide.device, which controls the VIA686B PATA IDE controller&lt;br /&gt;
* sii0680ide.device, which controls Silicon Image SiI0680(A)-based PCI PATA IDE controller&lt;br /&gt;
* sii3112ide.device, which controls Silicon Image SiI3112(A)-based PCI SATA IDE controller&lt;br /&gt;
* sii3114ide.device, which controls Silicon Image SiI3114-based PCI SATA IDE controller&lt;br /&gt;
* sii3512ide.device, which controls Silicon Image SiI3512-based PCI SATA IDE controller&lt;br /&gt;
* lsi53c8xx.device, which controls LSI Logic 53c8xx-based SCSI PCI controllers&lt;br /&gt;
&lt;br /&gt;
IDETOOL can also be used to examine and modify any PCI device configuration and I/O space (only use this feature if you really know what you are doing). A word on PCI device configuration space:&lt;br /&gt;
&lt;br /&gt;
* All PCI devices are uniquely identified by a Vendor and a Product code. Those are 16 bit figures, which can be represented as 4 hex digit values. Example: the VIA IDE controller is identified by vendor code 0x1106 and product code 0x0571.&lt;br /&gt;
* All PCI devices expose on the bus, 256 bytes of configuration data called the &amp;quot;configuration space&amp;quot;. This configuration space contains a part which is rigidly defined in the PCI specification, and a part which structure is up to the device manufacturer. In the standardized part, we find things like the vendor &amp;amp; product codes, the PCI latency setting for the device, the interrupt pin / line settings for the device etc.&lt;br /&gt;
* Additionnally to this configuration space, each PCI device can have up to 5 address ranges, which can either be &amp;quot;IO space&amp;quot; or &amp;quot;memory space&amp;quot;, for whatever usage. Example: a graphics card will probably have a memory mapped area which contains a linearly addressed image of its framebuffer memory.&lt;br /&gt;
&lt;br /&gt;
The purpose of the PCI configuration and IO manipulation features in IDETOOL is primarily to be able to finetune the IDE device operation, but it can also be used as a general purpose diagnostic and tuning tool for all other PCI devices (USB, Ethernet, Audio, Graphic cards etc.).&lt;br /&gt;
&lt;br /&gt;
IDETOOL recognizes the following commads:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -v || tell version&lt;br /&gt;
|-&lt;br /&gt;
| -c || tell CPU configuration&lt;br /&gt;
|-&lt;br /&gt;
| -l &amp;lt;device name&amp;gt; || tell unit info for all device &amp;lt;device name&amp;gt; units&lt;br /&gt;
|-&lt;br /&gt;
| -u &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; || tell unit info for unit &amp;lt;unit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -d &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; || tell drive info for unit &amp;lt;unit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -r &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; || tell raw drive info for unit &amp;lt;unit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -x &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; &amp;lt;mode&amp;gt; || put drive &amp;lt;unit&amp;gt; into transfer mode &amp;lt;mode&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -p &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; &amp;lt;mode&amp;gt; || put drive &amp;lt;unit&amp;gt; into power mode &amp;lt;mode&amp;gt;: 2 = spin up, 3 = spin down, 5 = sleep forever&lt;br /&gt;
|-&lt;br /&gt;
| -i &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; &amp;lt;mode&amp;gt; || put drive &amp;lt;unit&amp;gt; into interrupt mode &amp;lt;mode&amp;gt;: 0 = don&#039;t use irq&#039;s, 1 = use irq&#039;s&lt;br /&gt;
|-&lt;br /&gt;
| -o &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; || just open &amp;amp; close &amp;lt;device name&amp;gt;/&amp;lt;unit&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -j &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; e &amp;amp;#124; l || eject/load disk in drive &amp;lt;unit&amp;gt;. e = eject, l = load&lt;br /&gt;
|-&lt;br /&gt;
| -m &amp;lt;device name&amp;gt; &amp;lt;unit&amp;gt; &amp;lt;read speed&amp;gt; &amp;lt;write speed&amp;gt; || set &amp;lt;unit&amp;gt; medium read / write speed: 1 .. n for x1 ... xn, or 0xFFFF for max.&lt;br /&gt;
|-&lt;br /&gt;
| -w || tell VIA686b PCI IDE configuration&lt;br /&gt;
|-&lt;br /&gt;
| -s || tell SiI0680 PCI IDE configuration&lt;br /&gt;
|-&lt;br /&gt;
| -a || tell SiI3112 PCI IDE configuration&lt;br /&gt;
|-&lt;br /&gt;
| -b || tell SiI3114 PCI IDE configuration&lt;br /&gt;
|-&lt;br /&gt;
| -e || tell SiI3512 PCI IDE configuration&lt;br /&gt;
|-&lt;br /&gt;
| -f || tell LSI53cxxx PCI SCSI configuration&lt;br /&gt;
|-&lt;br /&gt;
| -t &amp;lt;vendor&amp;gt; &amp;lt;device&amp;gt; || tell PCI device &amp;lt;vendor&amp;gt;/&amp;lt;device&amp;gt; configuration&lt;br /&gt;
|-&lt;br /&gt;
| -g &amp;lt;reg&amp;gt; &amp;lt;val&amp;gt; || patch LSI53cxxx configspace byte &amp;lt;reg&amp;gt; with value &amp;lt;val&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -0 &amp;lt;reg&amp;gt; &amp;lt;val&amp;gt; || patch VIA function 0 (ISA) configspace byte &amp;lt;reg&amp;gt; with value &amp;lt;val&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -1 &amp;lt;reg&amp;gt; &amp;lt;val&amp;gt; || patch VIA function 1 (IDE) configspace byte &amp;lt;reg&amp;gt; with value &amp;lt;val&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -2 &amp;lt;reg&amp;gt; &amp;lt;val&amp;gt; || patch SiI0680 configspace byte &amp;lt;reg&amp;gt; with value &amp;lt;val&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -3 &amp;lt;reg&amp;gt; &amp;lt;val&amp;gt; || patch SiI3112 configspace byte &amp;lt;reg&amp;gt; with value &amp;lt;val&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -4 &amp;lt;reg&amp;gt; &amp;lt;val&amp;gt; || patch SiI3114 configspace byte &amp;lt;reg&amp;gt; with value &amp;lt;val&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -5 &amp;lt;reg&amp;gt; &amp;lt;val&amp;gt; || patch SiI3512 configspace byte &amp;lt;reg&amp;gt; with value &amp;lt;val&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -6 &amp;lt;vendor&amp;gt; &amp;lt;device&amp;gt; &amp;lt;reg&amp;gt; || tell PCI device &amp;lt;vendor&amp;gt;/&amp;lt;device&amp;gt; I/O byte &amp;lt;reg&amp;gt; value&lt;br /&gt;
|-&lt;br /&gt;
| -7 &amp;lt;vendor&amp;gt; &amp;lt;device&amp;gt; &amp;lt;reg&amp;gt; &amp;lt;val&amp;gt; || patch PCI device &amp;lt;vendor&amp;gt;/&amp;lt;device&amp;gt; I/O byte &amp;lt;reg&amp;gt; with value &amp;lt;val&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -8 &amp;lt;vendor&amp;gt; &amp;lt;device&amp;gt; &amp;lt;reg&amp;gt; || tell PCI device &amp;lt;vendor&amp;gt;/&amp;lt;device&amp;gt; configspace byte &amp;lt;reg&amp;gt; value&lt;br /&gt;
|-&lt;br /&gt;
| -9 &amp;lt;vendor&amp;gt; &amp;lt;device&amp;gt; &amp;lt;reg&amp;gt; &amp;lt;val&amp;gt; || patch PCI device &amp;lt;vendor&amp;gt;/&amp;lt;device&amp;gt; configspace byte &amp;lt;reg&amp;gt; with value &amp;lt;val&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|Note on inputting numeric values: if the first character is 0 and the second character is not &#039;x&#039; or &#039;X&#039;, the string is interpreted as an octal integer; otherwise, it is interpreted as a decimal number. If the first character is &#039;0&#039; and the second character is &#039;x&#039; or &#039;X&#039;, the string is interpreted as a hexadecimal integer.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beware&#039;&#039;&#039;: Do not use IDETOOL except if you really know what you are doing.&lt;br /&gt;
&lt;br /&gt;
== IF ==&lt;br /&gt;
&lt;br /&gt;
Evaluates conditional operations in script files.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: IF [NOT] [WARN | ERROR | FAIL] [&amp;lt;string&amp;gt; EQ| GT | GE &amp;lt;string&amp;gt;] [VAL] [EXISTS &amp;lt;filename&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NOT/S,WARN/S,ERROR/S,FAIL/S,EQ/K,GT/K,GE/K,VAL/S,EXISTS/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
In a script file, IF, when its conditional is true, carries out all the subsequent commands until an ENDIF or ELSE command is found. IF must be used in conjunction with ENDIF, however, ELSE is optional. When the conditional is not true, execution skips directly to the ENDIF or to an ELSE. The conditions and commands in IF and ELSE blocks can span more than one line before their corresponding ENDIFs.&lt;br /&gt;
&lt;br /&gt;
Nested Ifs jump to the matching ENDIF.&lt;br /&gt;
&lt;br /&gt;
The additional keywords are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| NOT || Reverses the interpretation of the result.&lt;br /&gt;
|-&lt;br /&gt;
| WARN || True if previous return code is greater than or equal to 5.&lt;br /&gt;
|-&lt;br /&gt;
| ERROR || True if previous return codes is greater than or equal to 10; only available if FAILAT is set to greater than 10.&lt;br /&gt;
|-&lt;br /&gt;
| FAIL || True if previous return code is greater than or equal to 20; only available if FAILAT is set to greater than 20.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;a&amp;gt; GT &amp;lt;b&amp;gt; || True if the test of a is greater than the text of b (disregarding case). Use NOT GT for less than.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;a&amp;gt; GE &amp;lt;b&amp;gt; || True if the text of a is greater than or equal to the text of b (disregarding case). Use NOT GE for less than or equal to.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;a&amp;gt; EQ &amp;lt;b&amp;gt; || True if the text of a and b is identical (disregarding case).&lt;br /&gt;
|-&lt;br /&gt;
| VAL || Specifies a numeric comparison.&lt;br /&gt;
|-&lt;br /&gt;
| EXISTS &amp;lt;file&amp;gt; || True if the file exists.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If more than one of the three condition-flag keywords (WARN, ERROR, FAIL) are given, the one with the lowest value is used.&lt;br /&gt;
&lt;br /&gt;
You can use local or global variables with IF by prefacing the variable name with a $ character.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 IF EXISTS Work/Prog&lt;br /&gt;
    TYPE Work/Prog HEX&lt;br /&gt;
 ELSE&lt;br /&gt;
    ECHO &amp;quot;It&#039;s not here&amp;quot;&lt;br /&gt;
 ENDIF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AmigaDOS displays the file Work/Prog if it exists in the current directory. Otherwise, AmigaDOS displays the message It&#039;s not here and continues after the ENDIF.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 IF ERROR&lt;br /&gt;
    SKIP errlab&lt;br /&gt;
 ENDIF&lt;br /&gt;
 ECHO &amp;quot;No error&amp;quot;&lt;br /&gt;
 LAB errlab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the previous command produces a return code greater than or equal to 10, AmigaDOS skips over the ECHO command to the errlab label.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#EXECUTE|EXECUTE]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FAILAT|FAILAT]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#LAB|LAB]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#QUIET|QUIET]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#SKIP|SKIP]]&lt;br /&gt;
&lt;br /&gt;
== INFO ==&lt;br /&gt;
&lt;br /&gt;
Gives information about the mounted devices.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: INFO [&amp;lt;device&amp;gt;] [DEVICES] [VOLUMES] [SHOW=&amp;lt;BLOCKS|BYTES|SIZE&amp;gt;]&lt;br /&gt;
: [SORT=&amp;lt;NAME|FREE|USED|SIZE|VOLUME&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DEVICE,DEVICES/S,VOLUMES/S,SHOW/K,SORT/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
INFO displays a line of information about each disk or partition. This includes the maximum size of the disk, the used and free space, the number of soft disk errors that have occurred, the status of the disk and the DOS type if available.&lt;br /&gt;
&lt;br /&gt;
With the DEVICE argument, INFO provides information on just one device or volume.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| DEVICES || Show only device information, omit volume data.&lt;br /&gt;
|-&lt;br /&gt;
| VOLUMES || Show only volume information, omit device data.&lt;br /&gt;
|-&lt;br /&gt;
| SHOW || Select the format in which the Free/Full column data should be printed. This must be one of BLOCKS, BYTES or SIZE. &amp;quot;BLOCKS&amp;quot;, which is the default, will display the number blocks available for use and already allocated. &amp;quot;BYTES&amp;quot; will display the same information in bytes. Note that due to how the file system allocates storage space, this may not be an accurate figure. Typically, a file needs more storage space on disk than just the data stored in it. &amp;quot;SIZE&amp;quot; will print an approximate rough figure in the KByte/MByte/GByte range, similar to the &amp;quot;Size&amp;quot; column.&lt;br /&gt;
|-&lt;br /&gt;
| SORT || Choose by which criterion the device list should be sorted. This must be one of NAME (the default), FREE (by free space), USED (by allocated space), SIZE (total size) or VOLUME (volume name). Note that because block sizes may vary, for FREE, USED and SIZE the number of bytes is used account, not the number of blocks.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; INFO&lt;br /&gt;
 Unit Size Used Free Full Errors Status     Name         DOS Type&lt;br /&gt;
 DF0: 837K 1742   16  98%      0 Read Only  Workbench2.0 DOS\01&lt;br /&gt;
 DF1: 837K  211 1547  12%      0 Read/Write Text-6       DOS\03&lt;br /&gt;
 &lt;br /&gt;
 Volumes available:&lt;br /&gt;
 Workbench2.0 [Mounted]&lt;br /&gt;
 Text-6 [Mounted]&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; INFO SHOW=BYTES&lt;br /&gt;
 Mounted disks:&lt;br /&gt;
 Unit Size   Used   Free Full Errors Status     Name         DOS Type&lt;br /&gt;
 DF0: 837K 850096   7808  98%      0 Read Only  Workbench2.0 DOS\01&lt;br /&gt;
 DF1: 837K 102968 754936  12%      0 Read/Write Text-6       DOS\03&lt;br /&gt;
 &lt;br /&gt;
 Volumes available:&lt;br /&gt;
 Workbench2.0 [Mounted]&lt;br /&gt;
 Text-6 [Mounted]&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; INFO VOLUMES&lt;br /&gt;
 Volumes available:&lt;br /&gt;
 Workbench2.0 [Mounted]&lt;br /&gt;
 Text-6 [Mounted]&lt;br /&gt;
&lt;br /&gt;
== INSTALL ==&lt;br /&gt;
&lt;br /&gt;
Writes or inspects a boot blocks on a formatted floppy disk or PCMCIA card, specifying whether it should be bootable.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: INSTALL [DRIVE] &amp;lt;DF0: | DF1: | DF2: | DF3: | CC0:&amp;gt; [NOBOOT] [CHECK] [FFS]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DRIVE/A,NOBOOT/S,CHECK/S,FFS/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
INSTALL clears a floppy disk&#039;s or PCMCIA memory card&#039;s boot block area and writes a valid boot onto it. INSTALL does not affect any files or directories on the disk or card. The necessary files and directories must still be present on a device to boot from it successfully.&lt;br /&gt;
&lt;br /&gt;
The NOBOOT option removes the boot block from an AmigaDOS disk or card, making it not bootable.&lt;br /&gt;
&lt;br /&gt;
The CHECK option checks for valid boot code. It reports whether a disk or card is bootable and whether standard Amiga boot code is present on the media. This is useful in detecting some viruses.&lt;br /&gt;
&lt;br /&gt;
The FFS switch is ignored. It remains part of the template to ensure compatibility with earlier scripts and programs.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; INSTALL DF0: CHECK&lt;br /&gt;
 No bootblock installed&lt;br /&gt;
&lt;br /&gt;
indicates that there is a non-bootable floppy in DF0:.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; INSTALL DF0:&lt;br /&gt;
&lt;br /&gt;
makes the disk in drive DF0: a bootable disk.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; INSTALL DF0: CHECK&lt;br /&gt;
 Appears to be FFS bootblock&lt;br /&gt;
&lt;br /&gt;
indicates that there is a bootable FFS floppy in DF0:.&lt;br /&gt;
&lt;br /&gt;
== IPF ==&lt;br /&gt;
&lt;br /&gt;
Alters packet filtering lists for IP packet input and output.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: IPF [-AdDEInoPrsvVyzZ] [-l &amp;lt;block | pass | nomatch&amp;gt;] [-F &amp;lt; i &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; o &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; a &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; s &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; S &amp;gt;] -f &amp;lt;filename&amp;gt; [-f &amp;lt;filename&amp;gt; [...]]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -A,-d,-D,-E,-I,-n,-o,-P,-r,-s,-v,-V,-y,-z,-Z,-l,-F,-f&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
IPF opens the filenames listed (treating &amp;quot;-&amp;quot; as stdin) and parses the file for a set of rules which are to be added or removed from the packet filter rule set.&lt;br /&gt;
&lt;br /&gt;
Each rule processed by IPF is added to the kernel&#039;s internal lists if there are no parsing problems. Rules are added to the end of the internal lists, matching the order in which they appear when given to IPF.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -A || Set the list to make changes to the active list (default).&lt;br /&gt;
|-&lt;br /&gt;
| -d || Turn debug mode on.Causes a hexdump of filter rules to be generated as it processes each one.&lt;br /&gt;
|-&lt;br /&gt;
| -D || Disable the filter (if enabled). Not effective for loadable kernel versions.&lt;br /&gt;
|-&lt;br /&gt;
| -E || Enable the filter (if disabled). Not effective for loadable kernel versions.&lt;br /&gt;
|-&lt;br /&gt;
| -F &amp;lt;i &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; o &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; a&amp;gt; || This option specifies which filter list to flush. The parameter should either be &amp;quot;i&amp;quot; (input), &amp;quot;o&amp;quot; (output) or &amp;quot;a&amp;quot; (remove all filter rules). Either a single letter or an entire word starting with the appropriate letter maybe used. This option maybe before, or after, any other with the order on the command line being that used to execute options.&lt;br /&gt;
|-&lt;br /&gt;
| -F &amp;lt;s &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; S&amp;gt; || To flush entries from the state table, the -F option is used in conjuction with either &amp;quot;s&amp;quot; (removes state information about any non-fully established connections) or &amp;quot;S&amp;quot; (deletes the entire state table). Only one of the two options may be given. A fully established connection will show up in IPFSTAT -s output as 4/4, with deviations either way indicating it is not fully established any more.&lt;br /&gt;
|-&lt;br /&gt;
| -f &amp;lt;filename&amp;gt; || This option specifies which files IPF should use to get input from for modifying the packet filter rule lists.&lt;br /&gt;
|-&lt;br /&gt;
| -I || Set the list to make changes to the inactive list.&lt;br /&gt;
|-&lt;br /&gt;
| -l  &amp;lt;pass &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; block &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; nomatch&amp;gt; || Use of the -l flag toggles default logging of packets. Valid arguments to this option are pass, block and nomatch. When an option is set, any packet which exits filtering and matches the set category is logged. This is most useful for causing all packets which don&#039;t match any of the loaded rules to be logged.&lt;br /&gt;
|-&lt;br /&gt;
| -n || This flag (no-change) prevents IPF from actually making any ioctl calls or doing anything which would alter the currently running kernel.&lt;br /&gt;
|-&lt;br /&gt;
| -o || Force rules by default to be added/deleted to/from the output list, rather than the (default) input list.&lt;br /&gt;
|-&lt;br /&gt;
| -P || Add rules as temporary entries in the authentication rule table.&lt;br /&gt;
|-&lt;br /&gt;
| -r || Remove matching filter rules rather than add them to the internal lists&lt;br /&gt;
|-&lt;br /&gt;
| -s || Swap the active filter list in use to be the &amp;quot;other&amp;quot; one.&lt;br /&gt;
|-&lt;br /&gt;
| -v || Turn verbose mode on. Displays information relating to rule processing.&lt;br /&gt;
|-&lt;br /&gt;
| -V || Show version information. This will display the version information compiled into the IPF binary and retrieve it  from the  kernel code (if running/present). If it is present in the kernel, information about its current state will be displayed (whether logging is active, default filtering, etc).&lt;br /&gt;
|-&lt;br /&gt;
| -y || Manually resync the in-kernel interface list  maintained by IP Filter with the current interface status list.&lt;br /&gt;
|-&lt;br /&gt;
| -z || For each rule in the input file, reset the statistics for it t  zero and display the statistics prior to them being zero&#039;d.&lt;br /&gt;
|-&lt;br /&gt;
| -Z || Zero global statistics held in the kernel for filtering  only (this doesn&#039;t affect fragment or state statistics).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPFTEST|IPFTEST]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#MKFILTERS|MKFILTERS]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPL|IPL]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPFSTAT|IPFSTAT]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPMON|IPMON]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPNAT|IPNAT]]&lt;br /&gt;
&lt;br /&gt;
== IPFSTAT ==&lt;br /&gt;
&lt;br /&gt;
Reports on packet filter statistics and filter list.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: IPFSTAT [ -aAfghIinosv ] [ -d &amp;lt;device&amp;gt; ]&lt;br /&gt;
: &lt;br /&gt;
: IPFSTAT -t [ -C ] [ -D &amp;lt;addrport&amp;gt; ] [ -P &amp;lt;protocol&amp;gt; ] [ -S &amp;lt;addrport&amp;gt; ] [ -T &amp;lt;refresh time&amp;gt; ] [ -d &amp;lt;device&amp;gt; ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -a,-A,-f,-g,-h,-I,-i,-n,-o,-s,-v,-d&lt;br /&gt;
: -t,-C,-D,-P,-S,-T,-d&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
IPFSTAT examines /dev/kmem using the symbols _fr_flags, _frstats, _filterin, and _filterout. To run and work, it needs to be able to read both /dev/kmem and the kernel itself. The kernel name defaults to /vmunix.&lt;br /&gt;
&lt;br /&gt;
The default behaviour of IPFSTAT is to retrieve and display the accumulated statistics which have been accumulated over time as the kernel has put packets through the filter.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -a || Display the accounting filter list and show bytes counted against each rule.&lt;br /&gt;
|-&lt;br /&gt;
| -A || Display packet authentication statistics.&lt;br /&gt;
|-&lt;br /&gt;
| -C || This option is only valid in combination with -t. Display &amp;quot;closed&amp;quot; states as well in the top. Normally, a TCP connection is not displayed when it reaches the CLOSE_WAIT protocol state. With this option enabled, all state entries are displayed.&lt;br /&gt;
|-&lt;br /&gt;
| -d &amp;lt;device&amp;gt; || Use a device other than /dev/ipl for interfacing with the kernel.&lt;br /&gt;
|-&lt;br /&gt;
| -D &amp;lt;addrport&amp;gt; || This option is only valid in combination with -t. Limit the state top display to show only state entries whose destination IP address and port match the addport argument. The addrport specification is of the form ipaddress[,port]. The ipaddress and port should be either numerical or the string &amp;quot;any&amp;quot; (specifying any ip address resp. any port). If the -D option is not specified, it defaults to &amp;quot;-D any,any&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| -f || Show fragment state information (statistics) and held state information (in the kernel) if any is present.&lt;br /&gt;
|-&lt;br /&gt;
| -g || Show groups currently configured (both active and inactive).&lt;br /&gt;
|-&lt;br /&gt;
| -h || Show per-rule the number of times each one scores a &amp;quot;hit&amp;quot;. For use in combination with -i.&lt;br /&gt;
|-&lt;br /&gt;
| -i || Display the filter list used for the input side of the kernel IP processing.&lt;br /&gt;
|-&lt;br /&gt;
| -I || Swap between retrieving &amp;quot;inactive&amp;quot;/&amp;quot;active&amp;quot; filter list details. For use in combination with -i.&lt;br /&gt;
|-&lt;br /&gt;
| -n || Show the &amp;quot;rule number&amp;quot; for each rule as it is printed.&lt;br /&gt;
|-&lt;br /&gt;
| -o || Display the filter list used for the output side of the kernel IP processing.&lt;br /&gt;
|-&lt;br /&gt;
| -P &amp;lt;protocol&amp;gt; || This option is only valid in combination with -t. Limit the state top display to show only state entries that match a specific protocol. The argument can be a protocol name (as defined  in /etc/protocols) or a protocol number. If this option is not specified, state entries for any protocol are specified.&lt;br /&gt;
|-&lt;br /&gt;
| -s || Show  packet/flow state information (statistics only).&lt;br /&gt;
|-&lt;br /&gt;
| -sl || Show held state information (in the kernel) if any is present (no statistics).&lt;br /&gt;
|-&lt;br /&gt;
| -S &amp;lt;addrport&amp;gt; || This option is only valid in combination with -t. Limit the state top display to show only state entries whose source IP address and port match the addport argument. The addrport specification is of the form ipaddress[,port]. The ipaddress and port should be either numerical or the string &amp;quot;any&amp;quot; (specifying any ip address resp. any port). If the -S option is not specified, it defaults to &amp;quot;-S any,any&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| -t || Show the state table in a way similar to they way top(1) shows the process table. States can be sorted using a number of different ways. This options requires ncurses(3) and needs to be compiled in. It may not be available on all operating systems. See below, for more information on the keys that can be used while IPFSTAT is in top mode.&lt;br /&gt;
|-&lt;br /&gt;
| -T &amp;lt;refreshtime&amp;gt; || This option is only valid in combination with -t. Specifies how often the state top display should be updated. The refresh time is the number of seconds between an update. Any postive integer can be used. The default (and minimal update time) is 1.&lt;br /&gt;
|-&lt;br /&gt;
| -v || Turn verbose mode on. Displays more debugging information.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Synopsis&lt;br /&gt;
The role of IPFSTAT is to display current kernel statistics gathered as a result of applying the filters in place (if any) to packets going in and out of the kernel. This is the default operation when no command line parameters are present.&lt;br /&gt;
&lt;br /&gt;
When supplied with either -i or -o, it will retrieve and display the appropriate list of filter rules currently installed and in use by the kernel.&lt;br /&gt;
&lt;br /&gt;
;State top&lt;br /&gt;
Using the -t option IPFSTAT will enter the state top mode. In this mode the state table is displayed similar to the way top displays the process table. The -C, -D, -P, -S and -T commandline options can be used to restrict the state entries that will be shown and to specify the frequency of display updates.&lt;br /&gt;
&lt;br /&gt;
In state top mode, the following keys can be used to influence the displayed information:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| d || select information to display.&lt;br /&gt;
|-&lt;br /&gt;
| l || redraw the screen.&lt;br /&gt;
|-&lt;br /&gt;
| q || quit the program.&lt;br /&gt;
|-&lt;br /&gt;
| s || switch between different sorting criterion.&lt;br /&gt;
|-&lt;br /&gt;
| r || reverse the sorting criterion.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
States can be sorted by protocol number, by number of IP packets, by number of bytes and by time-to-live of the state entry. The default is to sort by the number of bytes. States are sorted in descending order, but you can use the r key to sort them in ascending order.&lt;br /&gt;
&lt;br /&gt;
;State top limitations&lt;br /&gt;
It is currently not possible to interactively change the source, destination and protocol filters or the refresh frequency. This must be done from the command line.&lt;br /&gt;
&lt;br /&gt;
The screen must have at least 80 columns. This is however not checked.&lt;br /&gt;
&lt;br /&gt;
Only the first X-5 entries that match the sort and filter criteria are displayed (where X is the number of rows on the display. There is no way to see more entries.&lt;br /&gt;
&lt;br /&gt;
No support for IPv6&lt;br /&gt;
&lt;br /&gt;
;Files&lt;br /&gt;
* /dev/kmem&lt;br /&gt;
* /dev/ipl&lt;br /&gt;
* /dev/ipstate&lt;br /&gt;
* /vmunix&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPF|IPF]]&lt;br /&gt;
&lt;br /&gt;
== IPMON ==&lt;br /&gt;
&lt;br /&gt;
Monitors /dev/ipl for logged packets.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: IPMON [-aDFhnpstvxX] [-N &amp;lt;device&amp;gt;] [-o [NSI]] [-O [NSI]] [-P &amp;lt;pidfile&amp;gt;] [-S &amp;lt;device&amp;gt;] [-f &amp;lt;device&amp;gt;] [&amp;lt;filename&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -N,-F,-h,-s,-t,-v,-x,-X,-f&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
IPMON opens /dev/ipl for reading and awaits data to be saved from the packet filter. The binary data read from the device is reprinted in human readable for, however, IP#&#039;s are not mapped back to hostnames, nor are ports mapped back to service names. The output goes to standard output by default or a filename, if given on the command line. Should the -s option be used, output is instead sent to SYSLOGD. Messages sent via syslog have the day, month and year removed from the message, but the time (including microseconds), as recorded in the log, is still included.&lt;br /&gt;
&lt;br /&gt;
Messages generated by IPMON consist of whitespace separated fields. Fields common to all messages are:&lt;br /&gt;
&lt;br /&gt;
# The date of packet receipt. This is suppressed when the message is sent to syslog.&lt;br /&gt;
# The time of packet receipt. This is in the form HH:MM:SS.F, for hours, minutes seconds, and fractions of a second (which can be several digits long).&lt;br /&gt;
# The name of the interface the packet was processed on, e.g., we1.&lt;br /&gt;
# The group and rule number of the rule, e.g., @0:17. These can be viewed with IPFSTAT -n.&lt;br /&gt;
# The action: p for passed or b for blocked.&lt;br /&gt;
# The addresses. This is actually three fields: the source address and port (separted by a comma), the -&amp;gt; symbol, and the  destination address and port. E.g.: 209.53.17.22,80 -&amp;gt; 198.73.220.17,1722.&lt;br /&gt;
# PR followed by the protocol name or number, e.g., PR tcp.&lt;br /&gt;
# len followed by the header length and total length of the packet, e.g., len 20 40.&lt;br /&gt;
&lt;br /&gt;
If the packet is a TCP packet, there will be an additional field starting with a hyphen followed by letters corresponding to any flags that were set. See the ipf.conf manual page for a list of letters and their flags. If the packet is an ICMP packet, there will be two fields at the end, the first always being &amp;quot;icmp&amp;quot;, and the next being the ICMP message and submessage type, separated by a slash, e.g., icmp 3/3 for a port unreachable message.&lt;br /&gt;
&lt;br /&gt;
In order for IPMON to properly work, the kernel option IPFILTER_LOG must be turned on in your kernel. Please see options for more details.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -a || Open all of the device logfiles for reading log entries from.  All entries are displayed to the same output &amp;quot;device&amp;quot; (stderr or syslog).&lt;br /&gt;
|-&lt;br /&gt;
| -D || Cause IPMON to turn itself into a daemon. Using subshells or backgrounding of IPMON is not required to turn it into an orphan so it can run indefinately.&lt;br /&gt;
|-&lt;br /&gt;
| -f &amp;lt;device&amp;gt; || specify an alternative device/file from which to read the log information for normal IP Filter log records.&lt;br /&gt;
|-&lt;br /&gt;
| -F || Flush the current packet log buffer. The number of bytes flushed is displayed, even should the result be zero.&lt;br /&gt;
|-&lt;br /&gt;
| -n || IP addresses and port numbers will be mapped, where possible, back into hostnames and service names.&lt;br /&gt;
|-&lt;br /&gt;
| -N &amp;lt;device&amp;gt; || Set the logfile to be opened for reading NAT log records from to &amp;lt;device&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| -o || Specify which log files to actually read data from. N - NAT logfile, S - State logfile, I - normal IP Filter logfile. The -a option is equivalent to using -o NSI.&lt;br /&gt;
|-&lt;br /&gt;
| -O || Specify which log files you do not wish to read from. This is most sensibly used with the -a. Letters available as paramters to this are the same as for -o.&lt;br /&gt;
|-&lt;br /&gt;
| -p || Cause the port number in log messages to always be printed as a number and never attempt to look it up as from /etc/services, etc.&lt;br /&gt;
|-&lt;br /&gt;
| -P &amp;lt;pidfile&amp;gt; || Write the pid of the IPMON process to a file. By default this is //etc/opt/ipf/IPMON.pid (Solaris), /var/run/IPMON.pid (44BSD or later) or /etc/IPMON.pid for all others.&lt;br /&gt;
|-&lt;br /&gt;
| -s || Packet information read in will be sent through SYSLOGD rather than saved to a file. The default facility when compiled and installed is local0.&lt;br /&gt;
The following levels are used:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| LOG_INFO || packets logged using the &amp;quot;log&amp;quot; keyword as the action rather than pass or block.&lt;br /&gt;
|-&lt;br /&gt;
| LOG_NOTICE || packets logged which are also passed&lt;br /&gt;
|-&lt;br /&gt;
| LOG_WARNING || packets logged which are also blocked&lt;br /&gt;
|-&lt;br /&gt;
| LOG_ERR || packets which have been logged and which can be considered &amp;quot;short&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| -S &amp;lt;device&amp;gt; || Set the logfile to be opened for reading state log records from to &amp;lt;device&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| -t || read the input file/device in a manner akin to TAIL.&lt;br /&gt;
|-&lt;br /&gt;
| -v || show tcp window, ack and sequence fields.&lt;br /&gt;
|-&lt;br /&gt;
| -x || show the packet data in hex.&lt;br /&gt;
|-&lt;br /&gt;
| -X || show the log header record data in hex.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Diagnostics&lt;br /&gt;
IPMON expects data that it reads to be consistent with how it should be saved and will abort if it fails an assertion which detects an anomaly in the recorded data.&lt;br /&gt;
&lt;br /&gt;
;Files&lt;br /&gt;
* /dev/ipl&lt;br /&gt;
* /dev/ipnat&lt;br /&gt;
* /dev/ipstate&lt;br /&gt;
* /etc/services&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPL|IPL]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPF|IPF]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPFSTAT|IPFSTAT]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPNAT|IPNAT]]&lt;br /&gt;
&lt;br /&gt;
== IPNAT ==&lt;br /&gt;
&lt;br /&gt;
Defines NAT (Network Address Translation) rules. &lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: IPNAT [ -lnrsvCF ] -f &amp;lt;filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -l,-n,-r,-s,-v,-C,-F,-f&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
IPNAT opens the filename given (treating &amp;quot;-&amp;quot; as stdin) and parses the file for a set of rules which are to be added or removed from the IP NAT.&lt;br /&gt;
&lt;br /&gt;
Each rule processed by IPNAT is added to the kernels internal lists if there are no parsing problems. Rules are added to the end of the internal lists, matching the order in which they appear when given to IPNAT.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -C || delete all entries in the current NAT rule listing (NAT rules)&lt;br /&gt;
|-&lt;br /&gt;
| -F || delete all active entries in the current NAT translation table (currently active NAT mappings)&lt;br /&gt;
|-&lt;br /&gt;
| -l || Show the list of current NAT table entry mappings.&lt;br /&gt;
|-&lt;br /&gt;
| -n || This flag (no-change) prevents ipf from actually making any ioctl calls or doing anything which would alter the currently running kernel.&lt;br /&gt;
|-&lt;br /&gt;
| -s || Retrieve and display NAT statistics&lt;br /&gt;
|-&lt;br /&gt;
| -r || Remove matching NAT rules rather than add them to the internal lists&lt;br /&gt;
|-&lt;br /&gt;
| -v || Turn verbose mode on. Displays information relating to rule processing and active rules/table entries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Files&lt;br /&gt;
* /dev/IPNAT&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPNAT|IPNAT]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPF|IPF]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IPFSTAT|IPFSTAT]]&lt;br /&gt;
&lt;br /&gt;
== JOIN ==&lt;br /&gt;
&lt;br /&gt;
Concatenates two or more files into a new file.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: JOIN [FILE] &amp;lt;file | pattern&amp;gt;} AS | TO &amp;lt;filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILE/M/A,AS=TO/K/A&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
JOIN copies all the listed files, in the order given, to one new file. This destination file cannot have the same name as any of the source files. You must supply a destination file name. The original files remain unchanged. Any number of files can be JOINed in one operation.&lt;br /&gt;
&lt;br /&gt;
TO can be used as a synonym for AS.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; JOIN Part1 Part2 Part3 AS Textfile&lt;br /&gt;
&lt;br /&gt;
For another example using JOIN, see [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]].&lt;br /&gt;
&lt;br /&gt;
== KDEBUG ==&lt;br /&gt;
&lt;br /&gt;
Controls kernel debug options.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: COMMAND/F&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
KDEBUG is a simple interface to set kernel parameters from the command line. The command is sent verbatim for further processing and the actual parsing is left to the kernel itself.&lt;br /&gt;
&lt;br /&gt;
The following kernel commands are available:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| debuglevel &amp;lt;level&amp;gt; || Sets the verbosity of debug output of the kernel.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 0 || means no output.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || is low (only warnings and critical errors)&lt;br /&gt;
|-&lt;br /&gt;
| 10 || is verbose (more information)&lt;br /&gt;
|-&lt;br /&gt;
| 20 || means it will log every function entry and exit in the kernel&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| console &amp;lt;name&amp;gt; || Select the console. This is either &amp;quot;serial&amp;quot; or &amp;quot;memory&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kernels before version 51.44 default to the serial console, 8N1, the baudrate can be specified in UBoot (AmigaOne) or the BootLoader commandline (classic machines). Since kernel version 51.44 the default console is the memory console, to use the serial port instead you can specify the &amp;quot;serial&amp;quot; or &amp;quot;serial=1&amp;quot; keyword on the kernel commandline in UBoot or BootLoader.&lt;br /&gt;
&lt;br /&gt;
To view the memory buffer use the DumpDebugBuffer command.&lt;br /&gt;
&lt;br /&gt;
When switching the console, this setting survives a soft reboot.&lt;br /&gt;
&lt;br /&gt;
Note: the memory console has no input parameters.&lt;br /&gt;
|-&lt;br /&gt;
| alignment [ warn &amp;amp;#124; nowarn ] || Controls alignment exception warnings. This is either &amp;quot;warn&amp;quot; or &amp;quot;nowarn&amp;quot;. Defaults to not warn about alignment exceptions.&lt;br /&gt;
|-&lt;br /&gt;
| memorymap || Dumps the current memory map if the debug level is 3 or higher.&lt;br /&gt;
|-&lt;br /&gt;
| pagestat [numpages] || Dumps memory paging statistics. The number of pages to output may be specified. Defaults to print out 20 pages.&lt;br /&gt;
|-&lt;br /&gt;
| status || Dumps the status of various kernel options.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Example 1&lt;br /&gt;
Set the kernel debug level to 5.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; KDEBUG debuglevel 5&lt;br /&gt;
&lt;br /&gt;
;Example 2&lt;br /&gt;
Enable serial debug output.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; KDEBUG console serial&lt;br /&gt;
&lt;br /&gt;
;Example 3&lt;br /&gt;
Dump the memory map.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; KDEBUG debuglevel 3&lt;br /&gt;
 1&amp;gt; KDEBUG memorymap&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#DUMPDEBUGBUFFER|DUMPDEBUGBUFFER]]&lt;br /&gt;
&lt;br /&gt;
== LAB ==&lt;br /&gt;
&lt;br /&gt;
Specified a label in a script file.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: LAB [&amp;lt;string&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
LAB is used in script to define a label that is searched for by the SKIP command. The label &amp;lt;string&amp;gt; can be of any length, but must be alphanumeric. No symbols are allowed. If the &amp;lt;string&amp;gt; contains spaces, it must be enclosed in quotation marks.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#SKIP|SKIP]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#IF|IF]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#EXECUTE|EXECUTE]]&lt;br /&gt;
&lt;br /&gt;
== LIST ==&lt;br /&gt;
&lt;br /&gt;
Lists specified information about directories and files.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: LIST [{&amp;lt;dir|pattern&amp;gt;}] [P|PAT &amp;lt;pattern&amp;gt;] [KEYS] [DATES] [NODATES]&lt;br /&gt;
: [TO &amp;lt;name&amp;gt;] [SUB &amp;lt;string&amp;gt;] [SINCE &amp;lt;date&amp;gt;] [UPTO &amp;lt;date&amp;gt;] [QUICK]&lt;br /&gt;
: [BLOCK] [NOHEAD] [FILES] [DIRS] [LFORMAT &amp;lt;string&amp;gt;]&lt;br /&gt;
: [SORT [NAME] [SIZE] [DATE] [REVERSENAME] [REVERSESIZE]&lt;br /&gt;
: [REVERSEDATE]] [USERS] [GROUPS] [MULTI] [ALL]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DIR/M,P=PAT/K,KEYS/S,DATES/S,NODATES/S,TO/K,SUB/K,SINCE/K,UPTO/K,QUICK/S,BLOCK/S,NOHEAD/S,FILES/S,DIRS/S,LFORMAT/K,SORT/K,USERS/S,GROUPS/S,MULTI/S,ALL/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
LIST displays information about the contents of the current directory. If you specify a &amp;lt;dir&amp;gt;, &amp;lt;pattern&amp;gt;, or &amp;lt;filename&amp;gt; argument, LIST will display information about the specified directory, all directories or files that match the pattern, or the specified file, respectively.&lt;br /&gt;
&lt;br /&gt;
Unless other options are specified, LIST displays the following:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| name || The name of the file or directory.&lt;br /&gt;
|-&lt;br /&gt;
| size || The size of the file in bytes. If there is nothing in this file, the field will read empty. For directories, this entry reads Dir.&lt;br /&gt;
|-&lt;br /&gt;
| protection || The protection bits that are set for this file are shown as letters. The clear (unset) bits are shown as hyphens. Most files will show the default protection bits, ----rwed for readable/writable/executable/deleteable. See the PROTECT command for more on protection bits.&lt;br /&gt;
|-&lt;br /&gt;
| date and time || The date and time the file was created or last altered.&lt;br /&gt;
|-&lt;br /&gt;
| comment || The comment, if any, placed on the file using the FILENOTE command. It is preceded by a colon (:).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
LIST uses the following options to change the way the output is displayed:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| PAT &amp;lt;pattern&amp;gt; || Lists only files which match the pattern &amp;lt;pattern&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| KEYS || Displays the block number of each file header or directory.&lt;br /&gt;
|-&lt;br /&gt;
| DATES || Displays dates in the form DD-MMM-YY (the default unless you use QUICK).&lt;br /&gt;
|-&lt;br /&gt;
| NODATES || Will not display date and time information.&lt;br /&gt;
|-&lt;br /&gt;
| TO &amp;lt;name&amp;gt; || Specifies an output file or device for LIST; by default, LIST outputs to the current window.&lt;br /&gt;
|-&lt;br /&gt;
| SUB &amp;lt;string&amp;gt; || Lists only files containing the substring &amp;lt;string&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| SINCE &amp;lt;date&amp;gt; || Lists only files created on or after a certain date.&lt;br /&gt;
|-&lt;br /&gt;
| UPTO &amp;lt;date&amp;gt; || Lists only files created on or before a certain date.&lt;br /&gt;
|-&lt;br /&gt;
| QUICK || Lists only the names of files and directories.&lt;br /&gt;
|-&lt;br /&gt;
| BLOCK || Displays file sizes in blocks, rather than bytes.&lt;br /&gt;
|-&lt;br /&gt;
| NOHEAD || Suppresses the printing of the header information.&lt;br /&gt;
|-&lt;br /&gt;
| FILES || Lists files only (no directories).&lt;br /&gt;
|-&lt;br /&gt;
| DIRS || Lists directories only (no files).&lt;br /&gt;
|-&lt;br /&gt;
| LFORMAT || Defines a string to specially format LIST output.&lt;br /&gt;
|-&lt;br /&gt;
| SORT &amp;lt;order&amp;gt; || Sorts the directory entries before displaying it, based upon certain criteria. The SORT option requires a list of parameters which define in which order and by which criteria the output should be sorted. The SORT option parameter must match the following template:&lt;br /&gt;
&lt;br /&gt;
 N=NAME,D=DATE,S=SIZE,T=TYPE,RN=REVERSENAME,RD=REVERSEDATE,&lt;br /&gt;
 RS=REVERSESIZE,RT=REVERSETYPE&lt;br /&gt;
&lt;br /&gt;
The order in which you specify the single options determines the order in which the criteria are matched. Thus, if you want the list to be sorted descending size and by name you would specify SORT=REVERSESIZE,NAME.&lt;br /&gt;
|-&lt;br /&gt;
| USERS || Attempt to resolve the name of the &#039;owner&#039; of a file. If no name resolution is possible, then the numeric owner ID number will be displayed instead.&lt;br /&gt;
|-&lt;br /&gt;
| GROUPS || Attempt to resolve the name of the group the &#039;owner&#039; of a file belongs to. If no name resolution is possible, then the numeric group ID number will be displayed instead.&lt;br /&gt;
|-&lt;br /&gt;
| MULTI || Display all linked directories in a multi-assignment. (V53)&lt;br /&gt;
|-&lt;br /&gt;
| ALL || Lists all files in directories and subdirectories.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The LFORMAT option modifies the output of LIST and can be used as a quick method of generating script files. When LFORMAT is specified, the QUICK and NOHEAD options are automatically selected. When using LFORMAT you must specify an output format specification string; this string is incorporated into the script file. If you want the output to be saved, you must redirect it to a file by using the &amp;gt; operator or specifying a TO file.&lt;br /&gt;
&lt;br /&gt;
The format for the output format specification string is LFORMAT=&amp;lt;string&amp;gt;. To include the output of LIST in this string, use the substitution operator %S. The path and filename can be made part of the string this way. Whether the path or the filename is substituted for an occurrence of %S depends on how many occurrences are in the LFORMAT line, and their order, as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| || colspan=&amp;quot;4&amp;quot; | Substituted with each occurrence&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot; | Occurrences of %S || 1st || 2nd || 3rd || 4th&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot; | 1 || filename || || ||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot; | 2 || path || filename || ||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot; | 3 || path || filename || filename || &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot; | 4 || path || filename || path || filename&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some new options allow you to specify fields to be printed in the LFORMAT output. These options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| %A || Prints file attributes (protection bits).&lt;br /&gt;
|-&lt;br /&gt;
| %B || Prints size of file in blocks.&lt;br /&gt;
|-&lt;br /&gt;
| %C || Prints any comments attached to the file.&lt;br /&gt;
|-&lt;br /&gt;
| %D || Prints the date associated with the file.&lt;br /&gt;
|-&lt;br /&gt;
| %E || Prints the file extension.&lt;br /&gt;
|-&lt;br /&gt;
| %F || Prints the full file parent path.&lt;br /&gt;
|-&lt;br /&gt;
| %G || Prints the name of the group which &#039;owns&#039; the file.&lt;br /&gt;
|-&lt;br /&gt;
| %K || Prints the file key block number.&lt;br /&gt;
|-&lt;br /&gt;
| %L || Prints the length of the file in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| %M || Prints the file name only, omitting any extension.&lt;br /&gt;
|-&lt;br /&gt;
| %N || Prints the name of the file.&lt;br /&gt;
|-&lt;br /&gt;
| %P || Prints the file parent path.&lt;br /&gt;
|-&lt;br /&gt;
| %R || Prints the name of the object the file/directory is linked to.&lt;br /&gt;
|-&lt;br /&gt;
| %T || Prints the time associated with the file.&lt;br /&gt;
|-&lt;br /&gt;
| %U || Prints the name user who &#039;owns&#039; the file.&lt;br /&gt;
|-&lt;br /&gt;
| %V || Prints group/other file attributes (protection bits).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can put a length specifier and/or a justification specifier between the percent size (%) and the field specifier.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 &amp;gt; LIST Dirs&lt;br /&gt;
 &lt;br /&gt;
 Monitors     Dir ----        rwed     27-June-90      11:43:59&lt;br /&gt;
 T            Dir ----        rwed     Wednesday       11:37:43&lt;br /&gt;
 Trashcan     Dir ----        rwed     21-Jun-90       17:54:20&lt;br /&gt;
&lt;br /&gt;
Only the directories in the current directory, in this case SYS:, are listed. (A shortened version of the typical output is shown above.)&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; LIST LI#? TO RAM:Libs.file&lt;br /&gt;
&lt;br /&gt;
LIST will search for any directories or files that start with LI. The output of LIST will be sent to the Libs.file in RAM:.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; LIST DF0:Documents UPTO 09-Oct-90&lt;br /&gt;
&lt;br /&gt;
Only the files or directories on the Documents directory of DF0: that have not been changed since October 9, 1990, will be listed.&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
 1&amp;gt; LIST &amp;gt;RAM:Scriptnotes #? LFORMAT=&amp;quot;filenote %S%S Testnote&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A new script file, Scriptnotes, is created in RAM:. The contents will include a list of all the files in the current directory. When Scriptnotes is executed, it will add the filenote Testnote to each file. For instance, if the current directory is S:, the contents of Scriptnotes as produced by this command might look like this:&lt;br /&gt;
&lt;br /&gt;
: filenote s:HDBackup.config Testnote&lt;br /&gt;
: filenote s:DPat Testnote&lt;br /&gt;
: filenote s:Ed-startup Testnote&lt;br /&gt;
: filenote s:PCD Testnote&lt;br /&gt;
: filenote s:Shell-startup Testnote&lt;br /&gt;
: filenote s:SPat Testnote&lt;br /&gt;
: filenote s:Startup-sequence Testnote&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#PROTECT|PROTECT]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#FILENOTE|FILENOTE]]&lt;br /&gt;
&lt;br /&gt;
== LOADRESOURCE ==&lt;br /&gt;
&lt;br /&gt;
Preloads resources into memory to avoid excessive disk swaps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;NOTE: This command is obsolete.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: LOADRESOURCE {&amp;lt;name&amp;gt;} [LOCK | UNLOCK]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME/M,LOCK/S,UNLOCK/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
LOADRESOURCE reduces the need for excessive disk swaps on floppy-only systems by preloading the following of resources into memory:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Libraries || Specify the path name to the library.&lt;br /&gt;
|-&lt;br /&gt;
| Devices || Specify the path name to the device; you cannot LOCK devices into memory.&lt;br /&gt;
|-&lt;br /&gt;
| Fonts || Specify the path name to the exact font file to be loaded.&lt;br /&gt;
|-&lt;br /&gt;
| Catalogs || Specify a path name as LOCALE:Catalogs/&amp;lt;language&amp;gt;/Sys/&amp;lt;catalog&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The {&amp;lt;name&amp;gt;} option specifies the paths of the resources to load. The LOCK option tells the command to lock resources, such as libraries, fonts, and catalogs, into memory. This prevents the system from flushing the resource from RAM if memory is low. Although you can preload devices into memory using LOADRESOURCE, you cannot force them to stay in memory using the LOCK option. The UNLOCK option tells the command to unlock the resource from memory, allowing it to be flushed from RAM.&lt;br /&gt;
&lt;br /&gt;
Entering LOADRESOURCE with no options lists all the LOCKed resources in RAM.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; LOADRESOURCE LIBS:asl.library&lt;br /&gt;
&lt;br /&gt;
loads asl.library into memory. The system can flush this library from RAM the next time it runs low on memory, unless the LOCK option is included in the command line.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; LOADRESOURCE FONTS:topaz/11&lt;br /&gt;
&lt;br /&gt;
loads the Topaz 11 font into memory.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; LOADRESOURCE LOCALE:Catalogs/English/Sys/monitors.catalog&lt;br /&gt;
&lt;br /&gt;
is a valid path name.&lt;br /&gt;
&lt;br /&gt;
== LOADWB ==&lt;br /&gt;
&lt;br /&gt;
Starts Workbench.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: LOADWB [-DEBUG] [DELAY] [CLEANUP] [NEWPATH] [SKIP=SKIPWBSTARTUP] [SIMPLEGELS]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -DEBUG/S,DELAY/S,CLEANUP/S,NEWPATH/S,SKIP=SKIPWBSTARTUP/S,SIMPLEGELS/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
LOADWB starts the Workbench. Normally, this is done when booting, by placing the LOADWB command in the Startup-Sequence file. If you shut down the Workbench, LOADWB can be used from a Shell to restart it.&lt;br /&gt;
&lt;br /&gt;
Workbench snapshots the current paths in effect when the LOADWB command is executed. It uses these paths for each Shell started from Workbench.&lt;br /&gt;
&lt;br /&gt;
LOADWB&#039;s command line options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -DEBUG || Adds two additional menus which can assist software debugging. You should not use this feature unless you know how to use these menus.&lt;br /&gt;
|-&lt;br /&gt;
| DELAY || The LoadWB command will wait until the Workbench is loaded and initialized; otherwise, LoadWB will launch the Workbench and return immediately.&lt;br /&gt;
|-&lt;br /&gt;
| CLEANUP || Clean up the contents of the main Workbench window once Workbench has been launched.&lt;br /&gt;
|-&lt;br /&gt;
| NEWPATH || Update the Workbench command search path to use the settings of the shell the LoadWB program runs in. Workbench uses the search path (maintained through the shell PATH command) to find programs whose names do not include a directory name.&lt;br /&gt;
|-&lt;br /&gt;
| SKIPWBSTARTUP || Do not look into the &amp;quot;SYS:WBStartup&amp;quot; drawer and launch the programs stored in it.&lt;br /&gt;
|-&lt;br /&gt;
| SIMPLEGELS || When moving icons on the screen, try to use only the technique that Workbench has been using through versions 1.2-3.1. This is a compatibility switch which can be used to prevent Workbench from crashing if the graphics support software does not support the new icon rendering methods introduced in Workbench 3.5.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
&lt;br /&gt;
If you have quit the Workbench and are working through a Shell, typing:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; LOADWB&lt;br /&gt;
&lt;br /&gt;
will bring the Workbench back. Typing LOADWB when the Workbench is already loaded has no effect.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; PATH DF2:bin ADD&lt;br /&gt;
 1&amp;gt; LOADWB NEWPATH&lt;br /&gt;
&lt;br /&gt;
loads the Workbench. Any Shells started from the icon have the same path as the Shell used to run the LOADWB NEWPATH command.&lt;br /&gt;
&lt;br /&gt;
== LOCK ==&lt;br /&gt;
&lt;br /&gt;
Sets the write-protect status of a device.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: LOCK &amp;lt;drive&amp;gt; [ON | OFF] [&amp;lt;passkey&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DRIVE/A,ON/S,OFF/S,PASSKEY&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
LOCK sets or unsets the write-protect status of a device or partition. The LOCK remains on until the system is rebooted or until the LOCK is turned off with the LOCK OFF command.&lt;br /&gt;
&lt;br /&gt;
An optional passkey can be specified. If the passkey is used to lock a hard disk partition, the same passkey must be specified to unlock the partition. The passkey can be any number of characters long.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; LOCK Work: ON SecretCode&lt;br /&gt;
&lt;br /&gt;
The Work partition is locked. You can read the contents of Work with commands such as DIR, LIST, or MORE but you cannot alter the contents of the partition. If you try to edit the contents of a file on Work, a requester indicates that Work is write-protected. For example, if you try to create a new directory by entering the following:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; MAKEDIR WORK:Test&lt;br /&gt;
&lt;br /&gt;
the following message appears:&lt;br /&gt;
&lt;br /&gt;
 Can&#039;t create directory Work:Test&lt;br /&gt;
 Disk is write-protected&lt;br /&gt;
&lt;br /&gt;
To unlock the partition, enter:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; LOCK Work: OFF SecretCode&lt;br /&gt;
&lt;br /&gt;
Locking a device is only good for the duration of the current session. Resetting or turning off the Amiga cancels the lock.&lt;br /&gt;
&lt;br /&gt;
== MAGTAPE ==&lt;br /&gt;
&lt;br /&gt;
Retensions, rewinds, or skips forward SCSI (Small Computer System Interface) tapes.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: MAGTAPE [DEVICE &amp;lt;device name&amp;gt;] [UNIT &amp;lt;n&amp;gt;] [RET | RETENSION] [REW | REWIND] [SKIP &amp;lt;n&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DEVICE/K,UNIT/N/K,RET=RETENSION/S,REW=REWIND/S,SKIP/N/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
By default, MAGTAPE uses SCSI device unit 4. To change the default, you must use both the DEVICE and UNIT keywords.&lt;br /&gt;
&lt;br /&gt;
The RET | RETENSION option runs the tape to the end and rewinds it. The REW | REWIND option rewinds the tape. The SKIP &amp;lt;n&amp;gt; option skips &amp;lt;n&amp;gt; files on the tape.&lt;br /&gt;
&lt;br /&gt;
MAGTAPE tests to see if the unit is ready before sending the command. If your tape is not on-line, repeat the command.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; MAGTAPE DEVICE second_scsi.device UNIT 0 REW &lt;br /&gt;
&lt;br /&gt;
== MAKEDIR ==&lt;br /&gt;
&lt;br /&gt;
Creates a new directory.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: MAKEDIR {&amp;lt;name&amp;gt;} [ALL] [FORCE]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME=DIRS/M/A,ALL/S,FORCE/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
MAKEDIR creates one (or several) empty directory(s) with the name(s) you specify. By default, the command works within only one directory level at a time, so any directories on the given path(s) must already exist. When using the ALL option, directories missing on the path(s) are automatically created, if necessary. The command fails if a directory or a file of the same name already exists in the directory above it in the hierarchy. To avoid this, use the FORCE option which makes the command ignore directories which already exist.&lt;br /&gt;
&lt;br /&gt;
{{Note|MAKEDIR does not create a drawer icon for the new directory(s).}}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; MAKEDIR Tests&lt;br /&gt;
&lt;br /&gt;
creates a directory called Tests in the current directory.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; MAKEDIR DF1:Abc/Xyz ALL&lt;br /&gt;
&lt;br /&gt;
creates a directory Abc in the root directory of the disk in DF1: if it doesnt exist yet, then creates directory Xyz in DF1:Abc/.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; CD DF0:&lt;br /&gt;
 1&amp;gt; MAKEDIR Documents Payables Orders&lt;br /&gt;
&lt;br /&gt;
creates three directories, Documents, Payables, and Orders, on the disk in DF0:.&lt;br /&gt;
&lt;br /&gt;
== MAKELINK ==&lt;br /&gt;
&lt;br /&gt;
Creates a link between files or directories.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: MAKELINK [FROM] &amp;lt;link&amp;gt; [TO] &amp;lt;file or directory&amp;gt; [SOFT] [HARD] [FORCE]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: LINK=FROM/A,FILE=DIR=DIRECTORY=TO/A,SOFT/S,HARD/S,FORCE/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
MAKELINK creates a special file on a disk that is a pointer to another file or directory, this is known as a link. When an application or command tries to use the FROM file, the TO file or directory is actually used.&lt;br /&gt;
&lt;br /&gt;
There exist two types of links, hard links and soft links.&lt;br /&gt;
&lt;br /&gt;
A hard link is some sort of &amp;quot;physical&amp;quot; link handled by the file system itself, it points to the physical location (e.g. a disk block) of the destination. This implies that both the link and the destination must be on the same volume, that renaming the destination (including renaming into another directory) cannot &amp;quot;break&amp;quot; the link (it will continue to point to the same object) and that even deleting the destination wont cause problems (the link will be replaced with the file or directory before the file or directory is deleted). Not all file systems support hard links.&lt;br /&gt;
&lt;br /&gt;
A soft link is some sort of &amp;quot;logical&amp;quot; link handled by the file system, dos.library and the applications, it points to a name which describes the path of the destination. All types of paths can be used (absolute and relative, with or without file name). This implies that both the link and the destination can be located on different volumes and that renaming or deleting the destination will &amp;quot;break&amp;quot; the link (it will point to a no longer existing object). Old applications are sometimes not aware of soft links and will consider them to be directories or ignore them altogether. Not all file systems support soft links. Old file systems may have problems with relative path names in soft links (&amp;quot;///dir2/file3&amp;quot;). Some applications may have problems with &amp;quot;broken&amp;quot; soft links for which the respective destinations do not exist any more.&lt;br /&gt;
&lt;br /&gt;
By default, or when the SOFT keyword is given, MAKELINK tries to create a soft link. When the HARD keyword is given, MAKELINK tries to create a hard link. (Note that the default changed to this from version 53.3+)&lt;br /&gt;
&lt;br /&gt;
Also by default when doing soft links, if the destination path is relative (i.e. a path not prefixed by a volume name), MAKELINK will try to resolve it relative to the directory which will contain the link, it will not resolve it relative to the current directory like other commands. See examples below.&lt;br /&gt;
&lt;br /&gt;
When creating a hard link, and the TO argument is a directory name, MAKELINK does not normally allow the creation of a hard link to a directory. When the FORCE keyword is also given, it allows it.&lt;br /&gt;
&lt;br /&gt;
When creating a soft link, the link destination should exist, and MAKELINK will consider it an error if this is not the case. However, it is sometimes necessary to create a soft link before the link destination itself has been made available. In such a case, the FORCE keyword will cause MAKELINK to create the soft link regardless of whether the destination already exists or not.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 SYS:&amp;gt; MakeLink RAM:Link S/User-Startup SOFT&lt;br /&gt;
&lt;br /&gt;
will create a soft link to RAM:S/User-Startup (this file must exist) and not to SYS:S/User-Startup as one could expect.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 SYS:&amp;gt; MakeLink RAM:Link SYS:S/User-Startup SOFT&lt;br /&gt;
&lt;br /&gt;
will create a soft link to SYS:S/User-Startup (absolute path)&lt;br /&gt;
&lt;br /&gt;
== MD5SUM ==&lt;br /&gt;
&lt;br /&gt;
Calculates and compares checksums of files.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: MD5SUM [{dir|file|pattern|device}] [ALL] [DEVICES] [TO &amp;lt;name&amp;gt;] [SORT] [BUF=BUFFERSIZE &amp;lt;size&amp;gt;] [CHECK|FROM &amp;lt;name&amp;gt;] [STATUS] [QUIET] [WARN] [ALGORITHM {?|&amp;lt;name&amp;gt;}]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAMES/M,ALL/S,TO/K,DEVICES/S,SORT/S,BUF=BUFFERSIZE/K/N,CHECK=FROM/K,STATUS/S,WARN/S,QUIET/S,ALGORITHM/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
MD5SUM will read the contents of files or devices and calculate a checksum for each individual item. If you specify a &amp;lt;dir&amp;gt;, &amp;lt;pattern&amp;gt;, &amp;lt;filename&amp;gt;, or &amp;lt;device&amp;gt; argument, MD5SUM will calculate checksums for the specified directory, all directories, or files that match the pattern, or the specified file or device, respectively. MD5SUM can also determine whether a file or a checksum are consistent.&lt;br /&gt;
&lt;br /&gt;
MD5SUM has options which will change the way the output is displayed and how input is processed. These options are explained below.&lt;br /&gt;
&lt;br /&gt;
ALL calculates checksums for all files in directories and subdirectories.&lt;br /&gt;
&lt;br /&gt;
DEVICES indicates that rather than checking the contents of a device file by file, the checksums should be calculated over the raw storage blocks instead. Note that only file system devices can be used which store data in disk blocks. This includes &amp;quot;df0:&amp;quot;, &amp;quot;df1:&amp;quot;, etc. but not &amp;quot;ram:&amp;quot; or &amp;quot;prt:&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
TO &amp;lt;name&amp;gt; specifies an output file or device for MD5SUM; by default, MD5SUM ouputs to the current window.&lt;br /&gt;
&lt;br /&gt;
SORT sorts the list before printing.&lt;br /&gt;
&lt;br /&gt;
BUFFERSIZE &amp;lt;size&amp;gt; sets the size of the read buffer being used. Default is 262144 bytes (256 kB). Larger values can increase performance.&lt;br /&gt;
&lt;br /&gt;
CHECK &amp;lt;name&amp;gt; causes MD5SUM to read the contents of a list file &amp;lt;name&amp;gt; previously generated by MD5SUM and try to open each file listed in it, calculate its checksum and compare it with the value given in the list. If no matching file could be opened or the checksums do not match, an error message will be printed. Use the STATUS option to omit all output.&lt;br /&gt;
&lt;br /&gt;
If the STATUS option is supplied, no output will be generated if a mismatch is found while a list is being checked. Instead, MD5SUM will immediately abort with WARN condition set; this can be tested in script files.&lt;br /&gt;
&lt;br /&gt;
WARN causes MD5SUM to print a warning message for each line in the list to be checked which does not match the format MD5SUM expects.&lt;br /&gt;
&lt;br /&gt;
QUIET prevents MD5SUM from printing progress reports while individual files or devices are being read. The local shell variable _Verbosity with a negative value has the same effect. Progress reports are printed in about each second. No progress reports are printed if the SORT option is effect.&lt;br /&gt;
&lt;br /&gt;
ALGORITHM sets the checksumming algorithm to be used. The default algorithm is &amp;quot;MD5&amp;quot;, but there may be more modern algorithms supported, too. To find out which algorithms are available, enter &amp;quot;MD5SUM ALGORITHM ?&amp;quot;, which will list all the supported algorithms by name. At this time of writing the following algorithms are implemented:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| MD5 || Message Digest #5, as defined in RFC 1321.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: At this time of writing (2005-11-20) the MD5 algorithm can no longer be considered secure.&lt;br /&gt;
|-&lt;br /&gt;
| SHA-1 || Secure Hash Algorithm #1, as defined in U.S. Federal Information Processing Standard (FIPS) 180-1. This Algorithm produces 160 bits of checksum data.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: At this time of writing (2005-11-20) the SHA-1 algorithm can no longer be considered secure.&lt;br /&gt;
|-&lt;br /&gt;
| SHA-256 || Secure Hash Algorithm, as defined in U.S. Federal Information Processing Standard (FIPS) 180-2. This Algorithm produces 256 bits of checksum data.&lt;br /&gt;
|-&lt;br /&gt;
| SHA-384 || Secure Hash Algorithm, as defined in U.S. Federal Information Processing Standard (FIPS) 180-2. This Algorithm produces 384 bits of checksum data.&lt;br /&gt;
|-&lt;br /&gt;
| SHA-512 || Secure Hash Algorithm, as defined in U.S. Federal Information Processing Standard (FIPS) 180-2. This Algorithm produces 512 bits of checksum data.&lt;br /&gt;
|-&lt;br /&gt;
| Whirlpool || As defined in ISO/IEC 10118-3. This algorithm produces 512 bits of checksum data.&lt;br /&gt;
&lt;br /&gt;
You can choose an algorithm by the name given. Note that the output produced by this MD5SUM program may not be compatible with other &amp;quot;md5sum&amp;quot; shell commands from the Unix world if you choose any checksumming algorithm other than &amp;quot;MD5&amp;quot; here.&lt;br /&gt;
&lt;br /&gt;
Good reasons why you might want to use a different checksumming algorithm are in the security of the original &amp;quot;MD5&amp;quot; algorithm.&lt;br /&gt;
At this time of writing (2005-11-20) it is believed that both the &amp;quot;MD5&amp;quot; and &amp;quot;SHA-1&amp;quot; algorithms can no longer be considered&lt;br /&gt;
secure and it is recommended that you use a more secure algorithm such as &amp;quot;SHA-256&amp;quot; or &amp;quot;Whirlpool&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
Support for the &amp;quot;MD5&amp;quot; algorithm is preserved in this command only because &amp;quot;MD5&amp;quot; file checksums are still very common on the Internet.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note| The format of the data produced and used by the MD5SUM command is compatible with the Unix &amp;quot;md5sum&amp;quot; program.}}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Calculate checksums for all files in the C: directory and sort the list by file name before printing it:&lt;br /&gt;
&lt;br /&gt;
  1&amp;gt; MD5SUM C: SORT&lt;br /&gt;
  1bd137145fbb3c409771b6bd889adb07  c:AddBuffers&lt;br /&gt;
  7ab3d10a31518a011a63e5a099beb876  c:AddDataTypes&lt;br /&gt;
  0ca24f1b23fb52642b895010edf79b89  c:Assign&lt;br /&gt;
  98abb6f23ca1097898cdf98a84c6d69f  c:Avail&lt;br /&gt;
  891ec3cb98bd0744cbb5f7407e678c71  c:BindDrivers&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
Calculate the checksums for all files on the Work: partition, sort the list and store it in a file:&lt;br /&gt;
&lt;br /&gt;
  1&amp;gt; MD5SUM Work: SORT TO Work.Checksums&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
Calculate and compare the checksums for all files listed in the file &#039;Work.Checksums&#039; and print the differences:&lt;br /&gt;
&lt;br /&gt;
  1&amp;gt; MD5SUM CHECK Work.Checksums&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
Calculate the checksums for the disks in the drives DF0 and DF1:&lt;br /&gt;
&lt;br /&gt;
  1&amp;gt; MD5SUM DEVICES df0: df1:&lt;br /&gt;
  b0af4fc275bf1cb26016bd6abccc2548  df0:&lt;br /&gt;
  fc2b0af47b01ab5bf1cc6b48d6cc2526  df1:&lt;br /&gt;
&lt;br /&gt;
; Example 5:&lt;br /&gt;
List all the supported checksumming algorithms:&lt;br /&gt;
&lt;br /&gt;
  1&amp;gt; MD5SUM Algorithm ?&lt;br /&gt;
  MD5SUM: Supported algorithms are MD5, SHA-1, SHA-256, SHA-384,&lt;br /&gt;
  SHA-512, Whirlpool.&lt;br /&gt;
&lt;br /&gt;
== MEMSTAT ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: [VERBOSE] [KB] [DETAILED]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: VERBOSE/S,KB/S,DETAILED/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: read;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MKNTFS ==&lt;br /&gt;
&lt;br /&gt;
Creates an NTFS file system.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: MKNTFS [options] device [number-of-sectors]&lt;br /&gt;
: MKNTFS [ -C ] [ -c cluster-size ] [ -F ] [ -f ] [ -H heads ] [ -h ] [ -I ] &lt;br /&gt;
: [ -L volume-label ] [ -l ] [ -n ] [ -p part-start-sect ] [ -Q ] [ -q ] &lt;br /&gt;
: [ -S sectors-per-track ] [ -s sector-size ] [ -T ] [ -U ] [ -V ] [ -v ] &lt;br /&gt;
: [ -z mft-zone-multiplier ] [ --debug ] device [ number-of-sectors ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
MKNTFS is used to create an NTFS file system on a device (usually a disk partition) or file. device is the special file corresponding to the device (e.g /dev/hdXX). number-of-sectors is the number of sectors on the device. If omitted, MKNTFS automagically figures the file system size.&lt;br /&gt;
&lt;br /&gt;
Below is a summary of all the options that MKNTFS accepts. Nearly all options have two equivalent names. The short name is preceded by - and the long name is preceded by --. Any single letter options, that don‚t take an argument, can be combined into a single command, e.g. -fv is equivalent to -f -v. Long named options can be abbreviated to any unique prefix of their name.&lt;br /&gt;
&lt;br /&gt;
;Basic options&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -f, --fast, -Q, or --quick || Perform quick (fast) format. This will skip both zeroing of the volume and bad sector checking.&lt;br /&gt;
|-&lt;br /&gt;
| -L, --label STRING || Set the volume label for the filesystem.&lt;br /&gt;
|-&lt;br /&gt;
| -C or --enable-compression || Enable compression on the volume.&lt;br /&gt;
|-&lt;br /&gt;
| -n or --no-action || Causes MKNTFS to not actually create a filesystem, but display what it would do if it were to create a filesystem. All steps of the format are carried out except the actual writing to the device.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Advanced options&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -c, --cluster-size BYTES || Specify the size of clusters in bytes. Valid cluster size values are powers of two, with at least 256, and at most 65536 bytes per cluster. If omitted, MKNTFS uses 4096 bytes as the default cluster size.&lt;br /&gt;
Note that the default cluster size is set to be at least equal to the sector size as a cluster cannot be smaller than a sector. Also, note that values greater than 4096 have the side effect that compression is disabled on the volume (due to limitations in the NTFS compression algorithm currently in use by Windows).&lt;br /&gt;
|-&lt;br /&gt;
| -s, --sector-size BYTES || Specify the size of sectors in bytes. Valid sector size values are 256, 512, 1024, 2048 and 4096 bytes per sector. If omitted, MKNTFS attempts to determine the sector-size automatically and if that fails a default of 512 bytes per sector is used.&lt;br /&gt;
|-&lt;br /&gt;
| -p, --partition-start SECTOR || Specify the partition start sector. The maximum is 4294967295 (2^32-1). If omitted, MKNTFS attempts to determine part-start-sect automatically and if that fails a default of 0 is used. Note that part-start-sect is required for Windows to be able to boot from the created volume.&lt;br /&gt;
|-&lt;br /&gt;
| -H, --heads NUM || Specify the number of heads. The maximum is 65535 (0xffff). If omitted, MKNTFS attempts to determine the number of heads automatically and if that fails a default of 0 is used. Note that heads is required for Windows to be able to boot from the created volume.&lt;br /&gt;
|-&lt;br /&gt;
| -S, --sectors-per-track NUM || Specify the number of sectors per track. The maximum is 65535 (0xffff). If omitted, MKNTFS attempts to determine the number of sectors-per-track automatically and if that fails a default of 0 is used. Note that sectors-per-track is required for Windows to be able to boot from the created volume.&lt;br /&gt;
|-&lt;br /&gt;
| -z, --mft-zone-multiplier NUM || Set the MFT zone multiplier, which determines the size of the MFT zone to use on the volume. The MFT zone is the area at the beginning of the volume reserved for the master file table (MFT), which stores the on disk inodes (MFT records). It is noteworthy that small files are stored entirely within the inode; thus, if you expect to use the volume for storing large numbers of very small files, it is useful to set the zone multiplier to a higher value. Note, that the MFT zone is resized on the fly as required during operation of the NTFS driver but choosing a good value will reduce fragmentation. Valid values are 1, 2, 3 and 4. The values have the following meaning:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
! MFT zone multiplier&lt;br /&gt;
! MFT zone size (% of volume size)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 12.5% (default)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 25.0%&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 37.5%&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 50.0%&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| -T or --zero-time || Fake the time to be 00:00:00 UTC, Jan 1, 1970 instead of the current system time. This is only really useful for debugging purposes.&lt;br /&gt;
|-&lt;br /&gt;
| -U or --with-uuid || Generate a random volume UUID.&lt;br /&gt;
|-&lt;br /&gt;
| -I or --no-indexing || Disable content indexing on the volume. (This is only meaningful on Windows 2000 and later. Windows NT 4.0 and earlier ignore this as they do not implement content indexing at all.)&lt;br /&gt;
|-&lt;br /&gt;
| -F or --force || Force MKNTFS to run, even if the specified device is not a block special device, or appears to be mounted.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Output options&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -q or --quiet || Quiet execution; only errors are written to stderr, no output to stdout occurs at all. Useful if MKNTFS is run in a script.&lt;br /&gt;
|-&lt;br /&gt;
| -v or --verbose || Verbose execution.&lt;br /&gt;
|-&lt;br /&gt;
| --debug || Really verbose execution; includes the verbose output from the -v option as well as additional output useful for debugging MKNTFS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Help options&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -V or --version || Print the version number of MKNTFS and exit.&lt;br /&gt;
|-&lt;br /&gt;
| -l or --license || Print the licensing information of MKNTFS and exit.&lt;br /&gt;
|-&lt;br /&gt;
| -h or --help || Show a list of options with a brief description of each one.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Known Issues&lt;br /&gt;
When applying CHKDSK to a file system, it sometimes throws a warning &amp;quot;Correcting errors in the uppercase file.&amp;quot; The uppercase file is created while formatting and it defines the mapping of lower case characters to upper case ones, as needed to sort file names in directories. The warning means that the uppercase file defined on the file system is not the same as the one used by the Windows OS on which chkdsk is running, and this may happen because newer versions of Windows take into account new characters defined by the Unicode consortium.&lt;br /&gt;
&lt;br /&gt;
Currently, MKNTFS creates the uppercase table so that no warning is thrown by Windows Vista, Windows 7 or Windows 8. A warning may be thrown by other Windows versions, or if chkdsk is applied in succession on different Windows versions.&lt;br /&gt;
&lt;br /&gt;
== MOUNT ==&lt;br /&gt;
&lt;br /&gt;
Makes a device connected to the system available.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: MOUNT &amp;lt;device|pattern&amp;gt; [FROM &amp;lt;filename&amp;gt;] [QUIET] [REPLACE] [STARTUP &amp;lt;parameters&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DEVICE/A/M,FROM/K,DEBUG/S,QUIET/S,REPLACE/S,STARTUP/K/F&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
MOUNT causes AmigaDOS to recognize devices connected to the system. When the MOUNT command is issued, MOUNT looks in the DEVS:MountList file (or the optional FROM file) for the parameters of the device that is being mounted. It also looks for mount files named according to the respective device in the directories &amp;quot;DEVS:DOSDrivers&amp;quot; and &amp;quot;SYS:Storage/DOSDrivers&amp;quot;. MOUNT commands are usually placed in the Startup-Sequence file.&lt;br /&gt;
&lt;br /&gt;
In place of a device name, a wildcard pattern can be used to identify the names of the mount files to be used. For example, to mount all devices in &amp;quot;DEVS:DOSDrivers&amp;quot; you would use the following command:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; Mount DEVS:DOSDrivers/~(#?.info)&lt;br /&gt;
&lt;br /&gt;
MOUNT will complain if the device to be mounted has already been mounted (the warning message can be hidden by using the QUIET option). If you actually wanted to remount the device, perhaps with new parameters, you can use the REPLACE option: this will have the same effect as issuing the &amp;quot;ASSIGN &amp;lt;device name&amp;gt; DISMOUNT&amp;quot; command before the respective device is mounted again. Note that this is not normally a good idea since only few file systems and handlers will support it.&lt;br /&gt;
&lt;br /&gt;
Some handlers need to receive additional instructions when they are started. Traditionally, such information goes into the mount file, following the &amp;quot;STARTUP = &amp;quot; text. At times it is more convenient to pass these instructions directly on the MOUNT command line, which then are passed down to the handler. This is what the STARTUP option will do. Note that all devices given on the MOUNT command line will receive these startup instructions and that these instructions will never override the startup instructions given in the mount file, etc.&lt;br /&gt;
&lt;br /&gt;
MOUNT will look in both the mount file and in the tooltypes of the mount file icon for keywords. The DEBUG switch can be used to tell MOUNT that it shall complain about unknown tooltypes or tooltypes which are missing an equal sign.&lt;br /&gt;
&lt;br /&gt;
== MOUNTINFO ==&lt;br /&gt;
&lt;br /&gt;
Creates mount files for the file systems.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: MOUNTINFO [&amp;lt;device&amp;gt;] [[TO=&amp;lt;file name&amp;gt; [ADDICON]] [ACTIVATE] [DEBUG]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DEVICE/A,TO/K,ADDICON/S,ACTIVATE/S,DEBUG/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
MOUNTINFO gathers information on a device in order to create a mount file for it which can later be used to mount that device again. This is useful for removable media or data recovery in case the partition information for a hard disk was destroyed, but the contents of the partition survived.&lt;br /&gt;
&lt;br /&gt;
In addition to creating mount files, MOUNTINFO can also provide debugging information for software developers and customer support.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| DEVICE || This must be the name of the device to provide mount information for. It must be a device name with a trailing &#039;:&#039; character, such as &amp;quot;DF0:&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| TO || This option tells MOUNTINFO to write the mount file data to a named file rather than just printing it on the console window.&lt;br /&gt;
|-&lt;br /&gt;
| ADDICON || If you told MOUNTINFO to write the mount file data to a named file, you might want to have an icon added to it as well, so that you can drop the resulting mount file into the &amp;quot;SYS:Storage/DOSDrivers&amp;quot; or &amp;quot;DEVS:DOSDrivers&amp;quot; drawers for later use. MOUNTINFO will try to use the default mount file icon stored in &amp;quot;ENV:sys/def_mountfile.info&amp;quot; and revert to use a generic project icon if the mount file icon cannot be found.&lt;br /&gt;
|-&lt;br /&gt;
| ACTIVATE || If this option is used MOUNTINFO will store the mount file in a manner which will activate the file system as soon as it has been mounted. If an icon is added to the mount file (by using the ADDICON option) then the &amp;quot;Activate=Yes&amp;quot; tool type will be added to the icon. If the ADDICON is not used, the &amp;quot;Activate=Yes&amp;quot; line will be added to the end of the mount file data.&lt;br /&gt;
|-&lt;br /&gt;
| DEBUG || If this option is used, the TO and ADDICON options will be ignored. The mount information for the device, assignment or volume you provided will be gathered and printed in a special format instead, suitable for use by software developers and customer support. For disk drives the MOUNTINFO command will try to determine which file system is responsible for managing the volume and print both the signature of the file system assigned to the volume and the signature of the file system, as stored on the first block of the partition. Note that not all file systems store a signature value in the first block of the partition, so the information provided may not be relevant.&lt;br /&gt;
|-&lt;br /&gt;
| NOTES || Not all file system devices can be asked to provide mount information. An exception is, for example, the RAM: device.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
 1&amp;gt; MOUNTINFO DF0:&lt;br /&gt;
 \* DF0: (02/03/06 12:51 PM) *\&lt;br /&gt;
 Surfaces = 2&lt;br /&gt;
 SectorsPerTrack = 11&lt;br /&gt;
 LowCyl = 0&lt;br /&gt;
 HighCyl = 79&lt;br /&gt;
 BufMemType = 1&lt;br /&gt;
 MaxTransfer = 2097152&lt;br /&gt;
 Mask = 0x7FFFFFFE&lt;br /&gt;
 BootPri = 5&lt;br /&gt;
 BootBlocks = 2&lt;br /&gt;
 Device = &amp;quot;trackdisk.device&amp;quot;&lt;br /&gt;
 GlobVec = 0&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
 1&amp;gt; MOUNTINFO RAM:&lt;br /&gt;
 RAM: object is not of required type&lt;br /&gt;
&lt;br /&gt;
;Example 3:&lt;br /&gt;
 1&amp;gt; MOUNTINFO WB_2.x: DEBUG&lt;br /&gt;
 dol_Type = DLT_DEVICE&lt;br /&gt;
 dol_Task = 0x802B6CC&lt;br /&gt;
 dol_Lock = NULL&lt;br /&gt;
 dol_Handler = NULL&lt;br /&gt;
 dol_StackSize = 600&lt;br /&gt;
 dol_Priority = 10&lt;br /&gt;
 fssm_Device = &amp;quot;scsi.device&amp;quot;&lt;br /&gt;
 fssm_Unit = 0&lt;br /&gt;
 fssm_Flags = 0&lt;br /&gt;
 de_TableSize = 16&lt;br /&gt;
 de_SizeBlock = 512 bytes&lt;br /&gt;
 de_SecOrg = 0&lt;br /&gt;
 de_Surfaces = 19&lt;br /&gt;
 de_SectorPerBlock = 1&lt;br /&gt;
 de_BlocksPerTrack = 240&lt;br /&gt;
 de_Reserved = 2&lt;br /&gt;
 de_PreAlloc = 0&lt;br /&gt;
 de_Interleave = 0&lt;br /&gt;
 de_LowCyl = 2&lt;br /&gt;
 de_HighCyl = 46&lt;br /&gt;
 de_NumBuffers = 100&lt;br /&gt;
 de_BufMemType = MEMF_ANY&lt;br /&gt;
 de_MaxTransfer = 16777215&lt;br /&gt;
 de_Mask = 0x7FFFFFFE&lt;br /&gt;
 de_BootPri = 1&lt;br /&gt;
 de_DosType = DOS\1 0x444F5301&lt;br /&gt;
              (different signature on disk = DOS\3 0x444F5303)&lt;br /&gt;
 dol_SegList = 0xF9DC44&lt;br /&gt;
 dol_GlobVec = 0&lt;br /&gt;
 dol_Name = &amp;quot;WB_2.x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MOVE ==&lt;br /&gt;
&lt;br /&gt;
Moves files or directories.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: MOVE [FROM] {&amp;lt;name|pattern&amp;gt;} [TO] &amp;lt;name&amp;gt; [QUIET] [BUF|BUFFER=&amp;lt;n&amp;gt;]&lt;br /&gt;
: [NOREQ] [NOREPLACE] [INTERACTIVE] [FORCE] [COPYLINKS] [FOLLOWLINKS]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FROM/A/M,TO/A,QUIET/S,BUF=BUFFERS/K/N,NOREQ/S,NOREPLACE/S,INTERACTIVE/S,FORCE/S,COPYLINKS/S,FOLLOWLINKS/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
MOVE copies the file or directory specified with the FROM argument to the file or directory specified by the TO argument, removing the source file after the copy has been created (thus, &#039;moving&#039; the files). You can move several items at once by giving more than one FROM argument; each argument should be separated by spaces. You can use pattern matching to move or exclude items whose names share a common set of characters or symbols.&lt;br /&gt;
&lt;br /&gt;
If a TO filename already exists, MOVE overwrites the TO file with the FROM file. If you name a destination directory that does not exist, MOVE will create a directory with that name. You can also use a pair of double quotes (&amp;quot;&amp;quot;) to refer to the current directory when specifying a destination. (Do not put any spaces between the double quotes.)&lt;br /&gt;
&lt;br /&gt;
If the FROM argument is a directory, its files, subdirectories, and the subdirectories&#039; files will be moved. If you want to move a directory and you want the copy to have the same name as the original, you must include the directory name in the TO argument.&lt;br /&gt;
&lt;br /&gt;
MOVE prints to the screen the name of each file as it is moved. This can be overridden by the QUIET option or the local shell variable _Verbosity with a negative value.&lt;br /&gt;
&lt;br /&gt;
The BUF= option is used to set the number of 512-byte buffers used during the copy. (Default is 200 buffers, approximately 100K of RAM.) It is often useful to limit the number of buffers when copying to RAM:. BUF=0 uses a buffer the same size as the file to be copied.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| NOREPLACE || Checks if the destination file already exists. If this is the case, then the file is not moved.&lt;br /&gt;
|-&lt;br /&gt;
| INTERACTIVE || Checks if the destination file already exists. In this case, you will be prompted to confirm that you want the file to be overwritten (answer &#039;y&#039; for &#039;yes&#039;).&lt;br /&gt;
|-&lt;br /&gt;
| FORCE || If the destination file could not be created because there already is a file of that name which is protected against deletion or writing, then the protection will be removed first before the destination file is created.&lt;br /&gt;
|-&lt;br /&gt;
| COPYLINKS || If files need to be copied, copy the contents of a file referenced by a hard or soft link; the default is to skip copying linked files.&lt;br /&gt;
|-&lt;br /&gt;
| FOLLOWLINKS || Follow hard and soft links to directories; the default is to skip links to directories.&lt;br /&gt;
&lt;br /&gt;
Normally, MOVE displays a requester if the MOVE cannot continue for some reason. When the NOREQ option is given, all requesters are suppressed. This is useful in scripts and can prevent a MOVE failure from stopping the script while it waits for a response. For instance, if a script calls for a certain file to be moved and the system cannot find that file, normally the script would display a requester and would wait until a response was given. With the NOREQ option, the MOVE command would be aborted and the script would continue.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
 1&amp;gt; MOVE File1 TO :Work/File2&lt;br /&gt;
&lt;br /&gt;
moves File1 in the current directory to File2 in the Work directory.&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
 1&amp;gt; MOVE (#?.info)  TO  DF1:Backup&lt;br /&gt;
&lt;br /&gt;
moves all the files not ending in .info in the current directory to the Backup directory on the disk in DF1:. This is a convenient use of pattern matching to save storage space when icons are not necessary.&lt;br /&gt;
&lt;br /&gt;
;Example 3:&lt;br /&gt;
 1&amp;gt; MOVE  Work:Test  TO  DF0:Test&lt;br /&gt;
&lt;br /&gt;
moves all the files and any subdirectories of the Test directory on Work to the Test directory on DF0:. If a Test directory does not already exist on DF0:, AmigaDOS will create one.&lt;br /&gt;
&lt;br /&gt;
;Example 4:&lt;br /&gt;
 1&amp;gt; MOVE  DF0:  TO  DF1:  QUIET&lt;br /&gt;
&lt;br /&gt;
moves all files and directories on the disk in DF0: to DF1:, without displaying on the screen any file/directory names as they are moved.&lt;br /&gt;
&lt;br /&gt;
== NETLOGVIEWER ==&lt;br /&gt;
&lt;br /&gt;
Captures any debug or notification messages sent by the bsdsocket.library or its clients.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: NETLOGVIEWER [&amp;lt;popup key&amp;gt;] [&amp;lt;priority&amp;gt;] [CX_POPUP=&amp;lt;no | yes&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: CX_POPKEY/K,CX_PRIORITY/K/N,CX_POPUP/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
Normally, any message that bsdsocket.library or its clients produce is displayed in a console window. This program will capture and display any of these messages in a special window where the messages can be reviewed and even saved to disk.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| CX_POPKEY || Key combination to be pressed in order to show the log message window. Default is &amp;quot;shift alt f8&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| CX_PRIORITY || Priority this tool&#039;s input event handler has in the Commodities filter chain. Default is 0, which should not be changed.&lt;br /&gt;
|-&lt;br /&gt;
| CX_POPUP || Whether or not the log window should appear when the program is first started. Defaults to &amp;quot;yes&amp;quot; (use &amp;quot;no&amp;quot; to hide the window)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|The NETLOGVIEWER program can be started from Workbench, too. In this case it will check its icon for tool types whose names and purposes match the command template described above.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|You can and should start the NETLOGVIEWER program before you add the first networking interface (in order to capture any error output). Note, however, that if you shut down the bsdsocket.library (by using the NETLOGVIEWER command) the NETLOGVIEWER program will exit, too.}}&lt;br /&gt;
&lt;br /&gt;
== NETSHUTDOWN ==&lt;br /&gt;
&lt;br /&gt;
Shuts down the network in an orderly fashion.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: NETSHUTDOWN [&amp;lt;seconds&amp;gt;] [QUIET]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: TIMEOUT/N,QUIET/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
The command will stop all running interfaces. The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| TIMEOUT || How many seconds this command should wait until it gives up. By default, it will wait up to 5 seconds for the network to shut down once it has triggered the shutdown process.&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || Use this parameter to stop the command from reporting what it is currently doing.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The NETSHUTDOWN command will trigger the shutdown process of the network. This process cannot be stopped once it has started. However, this command can make an attempt to wait until the shutdown has completed. Normally, the shutdown should be finished in a fraction of a second, but at times when other clients still hang onto the network resources, the shutdown can fail to complete quite so quickly. In that case, the NETSHUTDOWN command will tell you that it could not complete its task within the allocated time frame (within five seconds, or whatever timeout you specified). The shutdown, however, will proceed and may conclude at a later time.&lt;br /&gt;
&lt;br /&gt;
When this command starts up it begins by checking if the network is currently operational. If this is not the case, it will exit immediately, printing a message to this effect.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ADDNETINTERFACE|ADDNETINTERFACE]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#SHOWNETSTATUS|SHOWNETSTATUS]]&lt;br /&gt;
&lt;br /&gt;
== NEWCLI ==&lt;br /&gt;
&lt;br /&gt;
Opens a new Shell window.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: NEWCLI [&amp;lt;window specification&amp;gt;] [FROM &amp;lt;filename&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: WINDOW,FROM&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
NEWCLI starts a new Shell process. It is the same as using the NEWSHELL command.&lt;br /&gt;
&lt;br /&gt;
== NEWSHELL ==&lt;br /&gt;
&lt;br /&gt;
Opens a new Shell window.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: NEWSHELL [&amp;lt;window specification&amp;gt;] [FROM &amp;lt;filename&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: WINDOW,FROM&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
The new Shell window becomes the currently-selected window and process. The new window has the same current directory, prompt string, path, local environment variables, and stack size as the one from which it is invoked. However, each Shell window is independent, allowing separate input, output, and program execution.&lt;br /&gt;
&lt;br /&gt;
The window can be sized, dragged, zoomed, and depth-adjusted like most other Amiga windows.&lt;br /&gt;
&lt;br /&gt;
To create a custom window, you can include the &amp;lt;window specification&amp;gt; argument. Specify the initial dimensions, location, and title of the window with this &amp;lt;window specification&amp;gt; syntax:&lt;br /&gt;
&lt;br /&gt;
 CON:x/y/width/height/title/options&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| x || Is the number of pixels from the left edge of the screen to the left border of the Shell window. Use a value (//) to specify the minimum possible pixels.&lt;br /&gt;
|-&lt;br /&gt;
| y || Is the number of pixels from the top of the screen to the top of the Shell window. Use no value (//) to specify the minimum possible pixels.&lt;br /&gt;
|-&lt;br /&gt;
| width || Is the width of the Shell window, in pixels. Use no value (//) to specify the full width of the screen.&lt;br /&gt;
|-&lt;br /&gt;
| height || Is the height of the Shell window, in pixels. Use no value (//) to specify minimum possible height.&lt;br /&gt;
|-&lt;br /&gt;
| title || Is the text that appears in the Shell window title bar.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Use slashes to separate the parameters and options. If any spaces appear in the specification argument, the entire argument must be enclosed in double quotation marks (&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The allowable options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| AUTO || The window automatically appears when the program needs input or produces output. With the Shell window, it opens for input immediately. The window can only be closed with the ENDSHELL command. Selecting the Shell&#039;s close gadget closes the window, but it re-opens immediately since it is expecting input.&lt;br /&gt;
|-&lt;br /&gt;
| ALT || The window appears in the specified size and position when the zoom gadget is clicked. The four parameters must be separated with slashes (for example, ALT30/30/200/200).&lt;br /&gt;
|-&lt;br /&gt;
| BACKDROP || The window appears on the backdrop, behind all the Workbench windows. This Shell window cannot be brought to the front of the screen; you have to resize the Workbench windows to see it.&lt;br /&gt;
|-&lt;br /&gt;
| CLOSE || The window has all the standard gadgets, including a close gadget. This is the default for Shell windows, but you must specify it to get a standard Shell if you use the WINDOW argument.&lt;br /&gt;
|-&lt;br /&gt;
| INACTIVE || The window opens, but is not made the active window.&lt;br /&gt;
|-&lt;br /&gt;
| NOBORDER || The window opens without any left or bottom window border. Only the zoom, depth, and sizing gadgets are available.&lt;br /&gt;
|-&lt;br /&gt;
| NOCLOSE || The window does not have a close gadget. If you open a console normally, there is no close gadget. If you open a console using the AUTO option, there is automatically a close gadget on the window.&lt;br /&gt;
|-&lt;br /&gt;
| NODEPTH || The window has no window depth gadget.&lt;br /&gt;
|-&lt;br /&gt;
| NODRAG || The window cannot be dragged. It has zoom, depth and sizing gadgets, but no close gadget.&lt;br /&gt;
|-&lt;br /&gt;
| NOSIZE || The window only has a depth gadget.&lt;br /&gt;
|-&lt;br /&gt;
| SCREEN || The window opens on a public screen. The screen must already exist. You must specify the name of the screen after the SCREEN keyword.&lt;br /&gt;
|-&lt;br /&gt;
| SIMPLE || If you enlarge the window, the text expands to fill the newly available space, allowing you to see text that had been scrolled out of the window. This is the default for standard Shells.&lt;br /&gt;
|-&lt;br /&gt;
| SMART || If you enlarge the window, the text does not expand to fill the newly available space. This saves memory.&lt;br /&gt;
|-&lt;br /&gt;
| WAIT || The window can only be closed by selecting the close gadget or entering Ctrl-\. If WAIT is the only option, there is no close gadget.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NEWSHELL uses the default startup file S:Shell-startup, unless a FROM file name is specified. S:Shell-startup is a standard AmigaDOS script file. For example, you can have several different Shell-startup files, each having different command aliases. You can call such customized Shell environments with FROM.&lt;br /&gt;
&lt;br /&gt;
The NEWCLI command has the same effect as NEWSHELL; it invokes a new Shell process.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; NEWSHELL&lt;br /&gt;
&lt;br /&gt;
opens a new Shell window with the default window specification.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; NEWSHELL &amp;quot;CON://640/200/My Shell/CLOSE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A window starting in the upper left corner of the screen and measuring 640 pixels wide and 200 pixels high opens. The window is titled My Shell and it has a close gadget. The entire argument is enclosed in quotation marks because the title contains a space. If you add the command to your User-startup file, a Shell window opens automatically when your Amiga is booted.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; NEWSHELL FROM S:Programming.startup&lt;br /&gt;
&lt;br /&gt;
opens a new Shell, but instead of executing the Shell-startup file, the Programming.startup file is executed. You can have aliases and prompt commands in the Programming.startup file that are used only when you are programming.&lt;br /&gt;
&lt;br /&gt;
For more examples using NEWSHELL, see [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]].&lt;br /&gt;
&lt;br /&gt;
== NTFSCAT ==&lt;br /&gt;
&lt;br /&gt;
Prints NTFS files and streams.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: NTFSCAT [options] &amp;lt;device&amp;gt; [&amp;lt;file&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -a=--attribute,-n=--attribute-name,-i=--inode,-f=--force,-h=--help,-q=--quiet,-V=--version,-v=--verbose,DEVICE,FILE&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
NTFSCAT reads a file or a stream from an NTFS volume and displays the content on the standard output.&lt;br /&gt;
&lt;br /&gt;
The case of the filename passed to NTFSCAT is ignored. &lt;br /&gt;
&lt;br /&gt;
Below is a summary of all the options that NTFSCAT accepts. Nearly all options have two equivalent names. The short name is preceded by - and the long name is preceded by --. Any single letter options, that don’t take an argument, can be combined into a single command, e.g. -fv is equivalent to -f -v. Long named options can be abbreviated to any unique prefix of their name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| -a &amp;lt;type&amp;gt; or --attribute &amp;lt;type&amp;gt; || Display the contents of a particular attribute type. By default, the unnamed $DATA attribute will be shown. The attribute can be specified by a number in decimal or hexadecimal, or by name.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Hex !! Decimal !! Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 16 || &amp;quot;$STANDARD_INFORMATION&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 32 || &amp;quot;$ATTRIBUTE_LIST&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 48 || &amp;quot;$FILE_NAME&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 64 || &amp;quot;$OBJECT_ID&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 80 || &amp;quot;$SECURITY_DESCRIPTOR&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 96 || &amp;quot;$VOLUME_NAME&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || 112 || &amp;quot;$VOLUME_INFORMATION&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 128 || &amp;quot;$DATA&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || 144 || &amp;quot;$INDEX_ROOT&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || 160 || &amp;quot;$INDEX_ALLOCATION&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || 176 || &amp;quot;$BITMAP&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || 192 || &amp;quot;$REPARSE_POINT&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || 208 || &amp;quot;$EA_INFORMATION&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 224 || &amp;quot;$EA&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || 240 || &amp;quot;$PROPERTY_SET&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || 256 || &amp;quot;$LOGGED_UTILITY_STREAM&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
{{Note|The attribute names may be given without the leading $ symbol. If you use the $ symbol, you must quote the name to prevent the shell interpreting the name.}}&lt;br /&gt;
|-&lt;br /&gt;
| -n &amp;lt;name&amp;gt; or --attribute-name &amp;lt;name&amp;gt; || Display this named attribute, stream. &lt;br /&gt;
|-&lt;br /&gt;
| -i &amp;lt;number&amp;gt; or --inode &amp;lt;number&amp;gt; || Specify a file by its inode number &amp;lt;number&amp;gt; instead of its name. &lt;br /&gt;
|-&lt;br /&gt;
| -f or --force || This will override some sensible defaults, such as not using a mounted volume. Use this option with caution. &lt;br /&gt;
|-&lt;br /&gt;
| -h or --help || Show a list of options with a brief description of each one. &lt;br /&gt;
|-&lt;br /&gt;
| -q or --quiet || Suppress some debug/warning/error messages. &lt;br /&gt;
|-&lt;br /&gt;
| -V or --version || Show the version number, copyright and license ntfscat. &lt;br /&gt;
|-&lt;br /&gt;
| -v or --verbose || Display more debug/warning/error messages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Display the contents of a file in the root of an NTFS volume.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ntfscat /dev/hda1 boot.ini&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
Display the contents of a file in a subdirectory of an NTFS volume.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ntfscat /dev/hda1 /winnt/system32/drivers/etc/hosts&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
Display the contents of the $INDEX_ROOT attribute of the root directory (inode 5).&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ntfscat /dev/hda1 -a INDEX_ROOT -i 5 | hexdump -C&lt;br /&gt;
&lt;br /&gt;
== NTFSCK ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NTFSCLUSTER ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NTFSFIX ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NTFSINFO ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NTFSLABEL ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NTFSLS ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NTFSUNDELETE ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NTFSWIPE ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NVGETVAR ==&lt;br /&gt;
&lt;br /&gt;
Prints the value of all or a named UBoot environment variable.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: NVGETVAR &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
NVGETVAR &amp;lt;name&amp;gt; will print the value of the UBoot environment variable &amp;quot;name&amp;quot;. If nothing is provided for the &amp;lt;name&amp;gt;, all variables are printed.&lt;br /&gt;
&lt;br /&gt;
If the requested variable does not exists, NVGETVAR will print nothing, and set the condition flag to 5 (WARN).&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; NVGETVAR boot_config&lt;br /&gt;
 AmigaOS 4.1 FE&lt;br /&gt;
&lt;br /&gt;
prints the value of the boot_config variable.&lt;br /&gt;
&lt;br /&gt;
== NVSETVAR ==&lt;br /&gt;
&lt;br /&gt;
Set the value of, create, or delete a named UBoot environment variable.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: NVSETVAR &amp;lt;name&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME/A,VALUE/F&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
NVSETVAR &amp;lt;name&amp;gt; &amp;lt;value&amp;gt; will set the value of the UBoot environment variable &amp;lt;name&amp;gt;. If &amp;lt;name&amp;gt; exists and nothing is provided for the &amp;lt;value&amp;gt;, the variable &amp;lt;name&amp;gt; will be deleted. If &amp;lt;name&amp;gt; does not exist and something is provided for the &amp;lt;value&amp;gt;, a new variable &amp;lt;name&amp;gt; with a value &amp;lt;value&amp;gt; will be created.&lt;br /&gt;
&lt;br /&gt;
If the variable &amp;lt;name&amp;gt; is not provided, or does not exist and no &amp;lt;value&amp;gt; is provided, NVSETVAR will print nothing, and set the condition flag to 5 (WARN).&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; NVSETVAR boot_config &amp;quot;AmigaOS 4.1 FE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sets the value of the boot_config variable to &amp;quot;AmigaOS 4.1 FE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== OPENSSL ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OWNER ==&lt;br /&gt;
&lt;br /&gt;
Changes the ownership of a file or directory.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: OWNER [FILE] {&amp;lt;file | pattern&amp;gt;} [OWNER] &amp;lt;name or number&amp;gt; [ALL] [QUIET]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILE/A/M,OWNER/A,ALL/S,QUIET/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
Each file or directory bears information which describes who owns it. This information can be displayed by the [[AmigaOS_Manual:_AmigaDOS_Command_Reference#LIST|LIST]] command. The ownership of a file or a directory is important when the file or directory is made accessible through a networked file system.&lt;br /&gt;
&lt;br /&gt;
The OWNER command will change the ownership of one or more files or directories. The &amp;quot;owner&amp;quot; must be given either as a name or a number. The file system needs to understand the given name. If not, you will see an error message. If you know which numeric owner ID should be used in place of a name, you can provide this instead. Note that owner names cannot be longer than 31 characters and that numeric owner IDs must be in the range of 0 to 65535. An empty name given for the owner will remove the ownership information. &lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| ALL || If the ALL option is given, OWNER will change the ownership of all the files in the specified directory.&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || If the QUIET option is given, screen output is suppressed. The local shell variable &#039;&#039;&#039;_Verbosity&#039;&#039;&#039; with a negative value has the same effect.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; OWNER textfile admin&lt;br /&gt;
Assigns the ownership of &amp;quot;textfile&amp;quot; to the user &amp;quot;admin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; OWNER textfile &amp;quot;&amp;quot;&lt;br /&gt;
Removes any ownership information from &amp;quot;textfile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== PATH ==&lt;br /&gt;
&lt;br /&gt;
Controls the directory list that the Shell searches to find commands.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: PATH [{&amp;lt;dir&amp;gt;}] [ADD] [SHOW] [RESET] [REMOVE] [QUIET]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: PATH/M,ADD/S,SHOW/S,RESET/S,REMOVE/S,QUIET/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
PATH lets you see, add to, or change the search path the AmigaDOS follows when looking for a command or program to execute. When a directory is in the search path, you do not need to specify the complete path to any command within that directory. Entering the name alone makes AmigaDOS look through the directories in the search path until it finds the file.&lt;br /&gt;
&lt;br /&gt;
{{Note|The search path is only relevant when AmigaDOS is searching for a command or program to execute. Full path specifications are always necessary in arguments for commands such as COPY and DELETE.}}&lt;br /&gt;
&lt;br /&gt;
Enter the PATH command alone or with the SHOW option to display directory names in the current search path. Normally, when PATH is displaying the directory names, a requester appears if a volume that is part of the search path cannot be found. For example, if you add a floppy disk to the search path and then remove that disk from the disk drive, a requester asks you to insert the disk.&lt;br /&gt;
&lt;br /&gt;
If you specify the QUIET option, PATH does not display requesters for volumes that are not currently mounted. If PATH encounters an unmounted volume, it displays the message device (or volume) is not mounted . The names of any directories on that volume included in the PATH are not displayed.&lt;br /&gt;
&lt;br /&gt;
The ADD option specifies directory to be added to the current PATH. You can add any number of directories with one PATH ADD command (the ADD keyword is optional); names of the directories must be separated by at least one space. When you issue the PATH command, AmigaDOS searches for each of the ADDed directories.&lt;br /&gt;
&lt;br /&gt;
To replace the existing search path with a new one, use PATH RESET followed by the names of the new directories. The existing search path, except for the current directory and C:, is erased and the new one is substituted.&lt;br /&gt;
&lt;br /&gt;
The REMOVE option eliminates the named directory from the search path.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; PATH EXTRAS:Tools ADD&lt;br /&gt;
&lt;br /&gt;
adds the Tools directory in the Extras drawer to the search path of the Shell. If the EXTRAS: is not in a disk drive, a requester asks you to insert it in any drive.&lt;br /&gt;
&lt;br /&gt;
If you remove EXTRAS: from the drive and enter:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; PATH&lt;br /&gt;
&lt;br /&gt;
a list of directories in the search path is displayed. A requester asks you to insert EXTRAS:. If you enter:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; PATH QUIET&lt;br /&gt;
&lt;br /&gt;
the list of directories in the search path is displayed. However, when the path comes to Extras:Tools, the error message appears in the list.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ASSIGN|ASSIGN]]&lt;br /&gt;
&lt;br /&gt;
== PATHPART ==&lt;br /&gt;
&lt;br /&gt;
Splits and assembles directory and file names.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: PATHPART [DIR &amp;lt;path name&amp;gt;] [FILE &amp;lt;path name&amp;gt;] [ADD {&amp;lt;directory name | file name}]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DIR/K,FILE/K,ADD/K/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
PATHPART can break down directory and file names into their respective directory and file name components, and is also able to (re-) assemble the individual names into combined path names again. This can be of great use in script files.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Obtain the directory name component of a path name:&lt;br /&gt;
 1&amp;gt; PATHPART DIR Work:Files/Data&lt;br /&gt;
 Work:Files&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
Obtain the file name component of a path name:&lt;br /&gt;
 1&amp;gt; PATHPART FILE Work:Files/Data&lt;br /&gt;
 Data&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
Build a complete path name from components:&lt;br /&gt;
 1&amp;gt; PATHPART ADD Work: Files Data&lt;br /&gt;
 Work:Files/Data&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
Remove the last part of a path name, then replace it with a new name:&lt;br /&gt;
 1&amp;gt; PATHPART ADD `PATHPART DIR Work:Files/Data` Information&lt;br /&gt;
 Work:Files/Information&lt;br /&gt;
&lt;br /&gt;
== PETUNE ==&lt;br /&gt;
&lt;br /&gt;
Changes the debug options of the Motorola 68040 CPU emulation.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: GLOBALDEBUGLEVEL=GDL/K/N,DEBUGLEVEL=DL/K/N,DEBUGOFFSET=DO/K,INSTSTATS/K,EMULATOR=EMU/K,SEGMENTLIST=SL/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PING ==&lt;br /&gt;
&lt;br /&gt;
Sends ICMP ECHO_REQUEST packets to network hosts.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: PING [-c | COUNT &amp;lt;number&amp;gt;] [-d | DEBUG] [-i | INTERVAL &amp;lt;wait&amp;gt;] &lt;br /&gt;
: [-l | LOAD &amp;lt;preload&amp;gt;] [-n | NUMERICONLY | NUMERIC] [-q | QUIET] &lt;br /&gt;
: [-R | RECORDROUTE] [DONTROUTE] [-s | SIZE &amp;lt;packet size&amp;gt;] &lt;br /&gt;
: [-v | VERBOSE] [BELL] [HOST] &amp;lt;host name or IP address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -c=COUNT/K/N,-d=DEBUG/S,-i=INTERVAL/K/N,-l=LOAD/K/N,-n=NUMERICONLY/S=NUMERIC/S,-q=QUIET/S,-R=RECORDROUTE/S,DONTROUTE/S,-s=SIZE/K/N,-v=VERBOSE/S,BELL/S,HOST/A&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;OBS! Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PIPE ==&lt;br /&gt;
&lt;br /&gt;
Connects input and output streams of Shell commands.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: PIPE &amp;lt;command&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: COMMAND/A/F&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
The PIPE command is used by the shell to connect the input and output streams of shell commands. It is not useful beyond that point and should not be used by user shell scripts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The PIPE command may be removed in a future shell version.&lt;br /&gt;
&lt;br /&gt;
== POOLSTAT ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== POPCD ==&lt;br /&gt;
&lt;br /&gt;
Returns the directory last recently saved with the PUSHCD command.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: POPCD &lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
POPCD is the counterpart to the PUSHCD command. It will recall the directory least recently saved by PUSHCD and return to it. If no directory can be popped from the stack, PUSHCD will return to the SYS: directory instead.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#CD|CD]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#PUSHCD|PUSHCD]]&lt;br /&gt;
&lt;br /&gt;
== PROMPT ==&lt;br /&gt;
&lt;br /&gt;
Changes the prompt string of the current Shell.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: PROMPT [&amp;lt;prompt&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: PROMPT&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
PROMPT allows you to customize the prompt string, the text printed by the Shell at the beginning of a command line. The prompt string can contain any characters, including escape sequences.&lt;br /&gt;
&lt;br /&gt;
This manual shows the prompt string as 1&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The default prompt string is:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;%N.%S&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
which displays the Shell number, a period, the current directory, a right angle-bracket, and a space. Entering PROMPT without a string argument resets the prompt to this default.&lt;br /&gt;
&lt;br /&gt;
The substitutions available for the &amp;lt;prompt&amp;gt; string are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| %N || Displays the process number for the Shell.&lt;br /&gt;
|-&lt;br /&gt;
| %S || Displays the current directory.&lt;br /&gt;
|-&lt;br /&gt;
| %R || Displays the return code for the last operation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A space is not automatically added to the end of the string. If you want a space between the prompt and typed-in text, place it in the string, and enclose the string in double quotation marks,&lt;br /&gt;
&lt;br /&gt;
You can embed commands in the prompt string by enclosing the command in back apostrophes (`).&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; PROMPT %N&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
Only the Shell number is shown. The &amp;gt; is removed from the prompt.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; PROMPT &amp;quot;%N.%S.%R&amp;gt;&amp;quot;&lt;br /&gt;
 1.Work:Snim.0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Shell number, current directory, and return code of the previous command are shown. A space is included after the &amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For more examples using the PROMPT command, see [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]].&lt;br /&gt;
&lt;br /&gt;
== PROTECT ==&lt;br /&gt;
&lt;br /&gt;
Changes the protection bits of a file or directory.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: PROTECT [FILE] &amp;lt;file|pattern&amp;gt; [FLAGS] [+|-] [&amp;lt;flags&amp;gt;] [CLEAR] [FILES] [DIRS]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILE/A,FLAGS,ADD/S,SUB/S,ALL/S,QUIET/S,USER/S,GROUP/S,OTHER/S,CLONE/S,CLEAR/S,FILES/S,DIRS/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
All files have a series of protection bits stored with them which control their attributes. These bits can be altered to indicate the type of file and the file operations permitted. PROTECT is used to set or clear the protection bits of a file.&lt;br /&gt;
&lt;br /&gt;
The protection bits are represented by letters:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| r || The file can be read.&lt;br /&gt;
|-&lt;br /&gt;
| w || The file can be written to (altered).&lt;br /&gt;
|-&lt;br /&gt;
| e || The file is executable (a program).&lt;br /&gt;
|-&lt;br /&gt;
| d || The file can be deleted.&lt;br /&gt;
|-&lt;br /&gt;
| s || The file is a script.&lt;br /&gt;
|-&lt;br /&gt;
| p || The file is a pure command and can be made resident.&lt;br /&gt;
|-&lt;br /&gt;
| a || The file has been archived.&lt;br /&gt;
|-&lt;br /&gt;
| h || The command file should be held resident in memory after it has been used (requires that the &#039;p&#039; bit is set, too)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To see the protection bits associated with a file, use the LIST command. The protection field is displayed with set (on) bits shown by their letters and clear (off) bits shown by hyphens. For instance, a file that is readable, writable and deletable, will have ----rw-d in the protection field.&lt;br /&gt;
&lt;br /&gt;
To specify the entire protection field at once, simply give the letters of the bits you want set as the FLAGS argument, without any other keywords. The named bits will be set, and all the others will be cleared.&lt;br /&gt;
&lt;br /&gt;
The symbols + and - (or the equivalent keywords ADD and SUB) are used to control specific bits without affecting the state of unspecified bits. Follow + or - with the letter(s) of the bit(s) to set or clear, respectively, and only those bits will be changed. Don&#039;t put a space after the symbol or between the letters. The order of the letters does not matter. ADD and SUB work similarly, but there must be a space between the keyword and the letter(s). You cannot both set and clear bits in the same command.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| ALL || Change the protection bits of all subdirectories and their files.&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || Do not display progress report messages. The local shell variable _Verbosity with a negative value has the same effect.&lt;br /&gt;
|-&lt;br /&gt;
| USER || Only modify the &#039;user&#039; protection bits (default).&lt;br /&gt;
|-&lt;br /&gt;
| GROUP || Only modify the &#039;group&#039; protection bits&lt;br /&gt;
|-&lt;br /&gt;
| OTHER || Only modify the &#039;other&#039; protection bits.&lt;br /&gt;
|-&lt;br /&gt;
| CLONE || Change the &#039;group&#039; and/or &#039;other&#039; protection bits to the same value as the &#039;user&#039; protection bits. Requires at least one of the USER and GROUP options, and no protection bits specified.&lt;br /&gt;
|-&lt;br /&gt;
| CLEAR || Clear all protection bits.&lt;br /&gt;
|-&lt;br /&gt;
| FILES || Only change the protection bits of the files found.&lt;br /&gt;
|-&lt;br /&gt;
| DIRS || Only change the protection bits of the directories found.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|The FILES and DIRS options work together: if you use FILES and omit DIRS, then only the files will be affected and the other way round. If none of FILES and DIRS is used, all files and directories will have their protection bits changed.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Since version 51.9 PROTECT doesnt allow to set the h, s, and p bits of directories. For files,&lt;br /&gt;
* Setting the h bit is only possible if the s bit is not set and the p, e and r bits are set.&lt;br /&gt;
* Setting the p bit is only possible if the s bit is not set and the e and r bits are set.&lt;br /&gt;
* Setting the s bit is only possible when the r bit is set.&lt;br /&gt;
* Setting the e bit is only possible when the r bit is set.&lt;br /&gt;
* Setting the GROUP e bit is only possible when the GROUP r bit is set.&lt;br /&gt;
* Setting the OTHER e bit is only possible when the OTHER r bit is set.}}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; PROTECT DF0:Memo +rw&lt;br /&gt;
&lt;br /&gt;
sets only the protection bits r (readable) and w (writable) to the file Memo on DF0:. No other protection bits are changed.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; PROTECT L:#? e SUB&lt;br /&gt;
&lt;br /&gt;
clears the e (executable) protection bit from all the files in the L: directory.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; PROTECT Work:Paint rwed&lt;br /&gt;
&lt;br /&gt;
The protection status of Paint becomes &amp;quot;----rwed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
 1&amp;gt; PROTECT Work:Write CLONE GROUP OTHER&lt;br /&gt;
&lt;br /&gt;
The group and other protection bits of Write become a copy of the user protection bits.&lt;br /&gt;
&lt;br /&gt;
; Example 5:&lt;br /&gt;
 1&amp;gt; PROTECT Work:Save CLEAR&lt;br /&gt;
&lt;br /&gt;
Clear all the protection bits of Save.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#LIST|LIST]]&lt;br /&gt;
&lt;br /&gt;
== PUSHCD ==&lt;br /&gt;
&lt;br /&gt;
Saves the current directory on a stack and optionally changes it.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: PUSHCD [&amp;lt;dir | pattern&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DIR&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
PUSHCD saves the current directory on a stack. If an optional directory name or pattern is provided, the current directory will be saved first and then changed. The PUSHCD command can be undone with the POPCD command.&lt;br /&gt;
&lt;br /&gt;
Up to 100 directories can be pushed onto the stack.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#CD|CD]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#POPCD|POPCD]]&lt;br /&gt;
&lt;br /&gt;
== PYTHON ==&lt;br /&gt;
&lt;br /&gt;
Launches a Python program.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: PYTHON [&amp;lt;option&amp;gt;] ... [-c &amp;lt;command&amp;gt; | -m &amp;lt;module&amp;gt; | &amp;lt;file&amp;gt; | &amp;lt;stdin&amp;gt;] [&amp;lt;arguments to program&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -c,-d,-E,-h,-i,-m,-O,-OO,-Q,-S,-t,-u,-v,-V,-W,-x,file,args&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;OBS! Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== QUIT ==&lt;br /&gt;
&lt;br /&gt;
Exits from a script file with a specified return code.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: QUIT [&amp;lt;return code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: RC/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
QUIT stops the execution of the script at the specified return code. The default return code is zero. We recommend you use the standard return code values of 5, 10, and 20.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 ASK &amp;quot;Do you want to stop now?&amp;quot;&lt;br /&gt;
 IF WARN&lt;br /&gt;
    QUIT 5&lt;br /&gt;
 ENDIF&lt;br /&gt;
 ECHO &amp;quot;OK&amp;quot;&lt;br /&gt;
 ECHO &amp;quot;The script is continuing.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you press Y at the prompt, the script is aborted, since WARN is equal to a return code of 5. If you press N or press Return:&lt;br /&gt;
&lt;br /&gt;
 OK&lt;br /&gt;
 The script is continuing.&lt;br /&gt;
&lt;br /&gt;
Is displayed in the Shell window.&lt;br /&gt;
&lt;br /&gt;
== REBOOT ==&lt;br /&gt;
&lt;br /&gt;
Reboots your Amiga.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: REBOOT [FAST=WARMREBOOT] [WAIT=&amp;lt;seconds&amp;gt;] [SYNC]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FAST=WARMREBOOT/S,WAIT/N/K,SYNC/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
REBOOT will reboot the Amiga system. You can either reboot the machine completely or only the operating system. If you do not use the FAST (WARMREBOOT) argument, your Amiga will be restarted completely.&lt;br /&gt;
&lt;br /&gt;
REBOOT has the same effect as if you turned your Amiga off and on again. If you specify the FAST argument, only AmigaOS will be restarted which will boot AmigaOS again with the same [[AmigaOS_Manual:_AmigaDOS_Glossary#KERNEL MODULE|kernel modules]].&lt;br /&gt;
&lt;br /&gt;
With the WAIT argument, the reboot can be delayed for a specified number of seconds.&lt;br /&gt;
&lt;br /&gt;
With the SYNC argument, REBOOT will try to inhibit all partitions in order to reboot more safely (with no current disk operations).&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
To reboot only the operating system after 2 seconds delay:&lt;br /&gt;
 1&amp;gt; Reboot FAST WAIT 2&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
To reboot completely after all disk operations are finished:&lt;br /&gt;
 1&amp;gt; Reboot SYNC&lt;br /&gt;
&lt;br /&gt;
== RECORDER ==&lt;br /&gt;
&lt;br /&gt;
Captures console output and stores it in a file.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: RECORDER [[TO] &amp;lt;file&amp;gt;] [APPEND] [OFF] [LINE] [SIZE &amp;lt;number&amp;gt;] [FLUSH]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: TO,APPEND/S,OFF/S,LINE/S,SIZE/N/K,FLUSH/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;OBS! Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RELABEL ==&lt;br /&gt;
&lt;br /&gt;
Changes the volume name of the disk in the given drive to the specified name.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: RELABEL [DRIVE] &amp;lt;drive&amp;gt; [NAME] &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DRIVE/A,NAME/A&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
Volume names are set when disks are initially formatted. RELABEL allows you to change a disk&#039;s volume name to any name specified.&lt;br /&gt;
&lt;br /&gt;
On floppy-only systems with one drive, be sure to specify the disks by volume name instead of drive name.&lt;br /&gt;
&lt;br /&gt;
;Example 1:&lt;br /&gt;
 1&amp;gt; RELABEL Workbench: MyDisk&lt;br /&gt;
&lt;br /&gt;
changes the name of the Workbench disk to MyDisk. No colon is necessary after the second name.&lt;br /&gt;
&lt;br /&gt;
;Example 2:&lt;br /&gt;
 1&amp;gt; RELABEL DF2: DataDisk&lt;br /&gt;
&lt;br /&gt;
changes the name of the disk in DF2: to DataDisk.&lt;br /&gt;
&lt;br /&gt;
== RELOADAPPLIST ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== REMOVENETINTERFACE ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== REMRAD ==&lt;br /&gt;
&lt;br /&gt;
Removes the recoverable RAM disk.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: REMRAD [&amp;lt;device&amp;gt;] [FORCE]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DEVICE,FORCE/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
REMRAD allows you to remove the recoverable RAM disk (usually mounted as RAD:) from memory without powering off the system. If you have mounted more than one recoverable RAM disk, use the DEVICE specification.&lt;br /&gt;
&lt;br /&gt;
REMRAD instructs RAD: to delete all of its files and become inactive. However, the RAD: RAM_0 disk icon does not disappear. The next time the Amiga is rebooted. RAD: is removed from memory completely and the icon is no longer displayed.&lt;br /&gt;
&lt;br /&gt;
If the device is in use when the REMRAD command is given, the operation aborts with a device in use message. To remove it if it is in use, you must use the FORCE option.&lt;br /&gt;
&lt;br /&gt;
== RENAME ==&lt;br /&gt;
&lt;br /&gt;
Changes the name of or moves a file or directory.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: RENAME [FROM] {&amp;lt;name} [TO | AS] &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FROM/A/M,TO=AS/A,QUIET/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
RENAME renames the FROM file or directory with the specified TO name. The FROM and TO files or directories must be on the same volume. If the name refers to a directory, RENAME changes the directory name without changing the names of the files or subdirectories in that directory. When there are multiple items in the FROM argument, the TO argument must be a directory.&lt;br /&gt;
&lt;br /&gt;
If you rename a directory or if you use RENAME to give a file another directory name, AmigaDOS changes the position of that directory or file in the filing system hierarchy. This effectively moves the items.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; RENAME Work/Ex1 AS :Test/Ex2&lt;br /&gt;
&lt;br /&gt;
renames the file Ex1 as Ex2 and moves it from the Work directory to the Test directory. The Test directory must exist in the root directory for this command to work.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; RENAME 3.doc 5.doc a.doc TO Docs&lt;br /&gt;
&lt;br /&gt;
moves the 3.doc, 5.doc, and a.doc files to the Docs directory. The Docs directory must already exist.&lt;br /&gt;
&lt;br /&gt;
== REQUESTCHOICE ==&lt;br /&gt;
&lt;br /&gt;
Allows AmigaDOS and ARexx scripts to use custom requesters.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: REQUESTCHOICE &amp;lt;title text&amp;gt; &amp;lt;body text&amp;gt; {&amp;lt;gadgets&amp;gt;} [TYPE &amp;lt;type&amp;gt;] [TO &amp;lt;file&amp;gt;] [PUBSCREEN &amp;lt;public screen name&amp;gt;] [TIMEOUTSECS &amp;lt;seconds&amp;gt;] [CHARSET &amp;lt;character set&amp;gt;] [INACTIVE]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: TITLE/A,BODY/A,GADGETS/A/M,TYPE/K,TO/K,PUBSCREEN/K,TIMEOUTSECS/K/N,CHARSET/K,INACTIVE/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
The TITLE argument specifies the title of the requester.&lt;br /&gt;
&lt;br /&gt;
The BODY argument specifies the text of the requester. Line feeds can be embedded using *N. For other formatting options see the requester class autodoc: [http://wiki.amigaos.net/amiga/autodocs/requester_cl.doc.txt requester_cl.doc]&lt;br /&gt;
&lt;br /&gt;
The GADGETS argument specifies the text for the different gadgets. The gadget labels are separated with spaces.&lt;br /&gt;
&lt;br /&gt;
The TYPE argument specifies the type of requester to display. Possible types are INFO, QUESTION, WARNING, ERROR, and INSERTDISK. If not specified, INFO is assumed when a single gadget is specified, QUESTION otherwise.&lt;br /&gt;
&lt;br /&gt;
The TO argument specifies an output file where the result is written to.&lt;br /&gt;
&lt;br /&gt;
The TIMEOUTSECS argument specifies the maximum number of seconds to display the requester before its closed and the result -1 is returned. Specifying 0 timeout seconds means no timeout.&lt;br /&gt;
&lt;br /&gt;
The PUBSCREEN argument allows the requester to open its window on a public screen.&lt;br /&gt;
&lt;br /&gt;
The CHARSET argument allows to specify the character set of the strings given in the BODY and GADGETS arguments. The TITLE argument is always displayed in the character set of the screen font.&lt;br /&gt;
&lt;br /&gt;
The INACTIVE argument specifies that the requester window should not be activated when opened.&lt;br /&gt;
&lt;br /&gt;
The number of the selected gadget is printed as a result to the console or written to the output file. The gadgets are numbered from left to right as 1, 2, 3, ..., 0. The special result -1 is printed when the TYPE argument was INSERTDISK and a disk was inserted. For evaluation in a script file, you can redirect this output into an environment variable. If the requester cannot be opened, the command generates a return code of 20, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; RequestChoice &amp;gt;ENV:rcnum &amp;quot;New Title&amp;quot; &amp;quot;This is my requester.*nSelect a gadget.&amp;quot; &amp;quot;_OK&amp;quot; &amp;quot;_Maybe&amp;quot; &amp;quot;_Cancel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The local Shell variable &#039;&#039;rcnum&#039;&#039; contains 1, 2, or 0 (respectively) after a gadget is selected. The script can use this value to control its later execution.&lt;br /&gt;
&lt;br /&gt;
[[File:DosFig6-1.png|center|frame|Sample RequestChoice Requester]]&lt;br /&gt;
&lt;br /&gt;
ENV:rcnum contains 0, 1, or 2 after a gadget is selected. The script can use this value to control its later execution.&lt;br /&gt;
&lt;br /&gt;
== REQUESTFILE ==&lt;br /&gt;
&lt;br /&gt;
Allows AmigaDOS and ARexx scripts to use a file requester.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: REQUESTFILE [DRAWER &amp;lt;drawer name&amp;gt;] [FILE &amp;lt;file&amp;gt;] [PATTERN &amp;lt;pattern&amp;gt;] [TITLE &amp;lt;title&amp;gt;] [POSITIVE &amp;lt;text&amp;gt;] [NEGATIVE &amp;lt;text&amp;gt;] [ACCEPTPATTERN &amp;lt;pattern&amp;gt;] [REJECTPATTERN &amp;lt;pattern&amp;gt;] [SAVEMODE] [MULTISELECT] [DRAWERSONLY] [NOICONS] [PUBSCREEN &amp;lt;public screen name&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DRAWER,FILE/K,PATTERN/K,TITLE/K,POSITIVE/K,NEGATIVE/K,ACCEPTPATTERN/K,REJECTPATTERN/K,SAVEMODE/S,MULTISELECT/S,DRAWERSONLY/S,NOICONS/S,PUBSCREEN/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
When entered with no arguments, a file requester with OK, Volumes, Parent, and Cancel buttons is created. Ist Drawer and File gadgets are empty and it displays the contents of the current directory.&lt;br /&gt;
&lt;br /&gt;
The DRAWER argument specifies the initial contents of the Drawer gadget.&lt;br /&gt;
&lt;br /&gt;
The FILE option specifies the initial contents of the File gadget.&lt;br /&gt;
&lt;br /&gt;
The PATTERN option allows the use of a standard AmigaDOS pattern. It includes a Pattern gadget in the requester and specifies the initial contents of the gadget. If this option is not provided, the file requester does not have any Pattern gadget.&lt;br /&gt;
&lt;br /&gt;
The TITLE option specifies the title of the requester.&lt;br /&gt;
&lt;br /&gt;
The POSITIVE option specifies the text to appear in the positive (left) choice in the file requester.&lt;br /&gt;
&lt;br /&gt;
The NEGATIVE option specifies the text to appear in the negative (right) choice in the file requester.&lt;br /&gt;
&lt;br /&gt;
The ACCEPTPATTERN option specifies a standard AmigaDOS pattern. Only files matching this pattern are displayed in the file requester.&lt;br /&gt;
&lt;br /&gt;
The REJECTPATTERN option specifies a standard AmigaDOS pattern. Files matching this pattern are not displayed in the file requester.&lt;br /&gt;
&lt;br /&gt;
If SAVEMODE is specified, the requester is used for writing files to disk. If MULTISELECT is specified, the requester allows multiple files to be selected at once. If DRAWERSONLY is specified, the requester does not have a File gadget. This effectively turns the file requester into a directory requester. If NOICONS is specified, the requester does not display icons (.info files).&lt;br /&gt;
&lt;br /&gt;
The selected files are returned on the command line, enclosed in double quotation marks and separated with spaces. The command generates a return code of 0 if you select a file or 5 if you cancel the requester.&lt;br /&gt;
&lt;br /&gt;
The PUBSCREEN argument allows the requester to open its window on a public screen.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; REQUESTFILE DRAWER Devs: TITLE &amp;quot;My Req&amp;quot; NOICONS&lt;br /&gt;
&lt;br /&gt;
[[File:DosFig6-2.png|center|frame|Sample RequestFile Requester]]&lt;br /&gt;
&lt;br /&gt;
== REQUESTSTRING ==&lt;br /&gt;
&lt;br /&gt;
Allows AmigaDOS and ARexx scripts to use custom string requesters.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: REQUESTSTRING &amp;lt;title text&amp;gt; &amp;lt;body text&amp;gt; [POSITIVE &amp;lt;OK gadget text&amp;gt;] [NEGATIVE &amp;lt;Cancel gadget text&amp;gt;] [DEFSTRING &amp;lt;default text&amp;gt;] [MAXLEN=&amp;lt;n&amp;gt;] [NOTEMPTY] [INVISIBLE] [TO &amp;lt;filename&amp;gt;] [PUBSCREEN &amp;lt;public screen name&amp;gt;] [CHARSET &amp;lt;character set&amp;gt;] [INACTIVE]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: TITLE/A,BODY/A,POSITIVE/K,NEGATIVE/K,DEFSTRING/K,MAXLEN/K/N,NOTEMPTY/S,INVISIBLE/S,TO/K,PUBSCREEN/K,CHARSET/K,INACTIVE/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
The TITLE argument specifies the title of the requester.&lt;br /&gt;
&lt;br /&gt;
The BODY argument specifies the text of the requester. Line feeds can be embedded using *N. For other formatting options see the requester class autodoc: [http://wiki.amigaos.net/amiga/autodocs/requester_cl.doc.txt requester_cl.doc]&lt;br /&gt;
&lt;br /&gt;
The POSITIVE argument specifies the text for the OK gadget. Default is the localized &amp;quot;_OK&amp;quot; text.&lt;br /&gt;
&lt;br /&gt;
The NEGATIVE argument specifies the text for the Cancel gadget. Default is the localized &amp;quot;_Cancel&amp;quot; text.&lt;br /&gt;
&lt;br /&gt;
The DEFSTRING argument specifies the default text for the string gadget. Default is empty string.&lt;br /&gt;
&lt;br /&gt;
The MAXLEN argument specifies the maximum length of the string. Default is 256. The length does not include the NULL termination, e.g. &amp;quot;A&amp;quot; is considered to have a length of 1. Negative and zero values are silently ignored and replaced with the default value.&lt;br /&gt;
&lt;br /&gt;
The NOTEMPTY switch does not allow the user to enter an empty string.&lt;br /&gt;
&lt;br /&gt;
The INVISIBLE switch specifies that the text in the string gadget should be displayed with &#039;*&#039; characters, e.g. for entering passwords that should not be visible to a person behind the user.&lt;br /&gt;
&lt;br /&gt;
The TO argument specifies the file where to store the result string. If not specified, the string is written to the default output.&lt;br /&gt;
&lt;br /&gt;
The PUBSCREEN argument specifies the name of the public screen where to open the requester window. If not specified, the current default public screen is used. The screen is brought to the front before opening the window if necessary, and to the back after closing the window if it was brought to the front before.&lt;br /&gt;
&lt;br /&gt;
The CHARSET argument allows to specify the character set of the string given in the BODY, POSITIVE, NEGATIVE, and DEFSTRING arguments. The TITLE argument is always displayed in the character set of the screen font.&lt;br /&gt;
&lt;br /&gt;
The INACTIVE argument specifies that the requester window should not be activated when opened.&lt;br /&gt;
&lt;br /&gt;
RequestString will return with RETURN_FAIL (20) on any failure, with RETURN_WARN (5) if the user clicked the Cancel gadget (the result string is the provided default string in this case), and with RETURN_OK (0) otherwise. The result string (or the default string, if the user did cancel the requester) will be enclosed in quotation marks, then terminated with linefeed, and written to the file specified with the TO argument or the default output.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; Set Title &amp;quot;Edit file comment&amp;quot;&lt;br /&gt;
 1&amp;gt; Set Body &amp;quot;Comment for MyFile:&amp;quot;&lt;br /&gt;
 1&amp;gt; Set Def &amp;quot;`List MyFile LFORMAT %c`&amp;quot;&lt;br /&gt;
 1&amp;gt; Set Note `RequestString &amp;quot;$Title&amp;quot; &amp;quot;$Body&amp;quot; DEFSTRING &amp;quot;$Def&amp;quot;`&lt;br /&gt;
 1&amp;gt; FileNote MyFile &amp;quot;$Note&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:DosFig6-3.png|center|frame|Sample RequestString Requester]]&lt;br /&gt;
&lt;br /&gt;
== RESIDENT ==&lt;br /&gt;
&lt;br /&gt;
Displays and modifies the list of resident commands.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: RESIDENT [&amp;lt;resident name&amp;gt;] [&amp;lt;filename&amp;gt;] [REMOVE] [ADD] [REPLACE] [PURE | FORCE] [SYSTEM]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME,FILE,REMOVE/S,ADD/S,REPLACE/S,PURE=FORCE/S,SYSTEM/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
RESIDENT loads a command into memory and adds it to the resident list maintained by the Shell. This allows the command to be executed without reloading it from disk each time. If RESIDENT is invoked with no options, it lists the programs on the resident list.&lt;br /&gt;
&lt;br /&gt;
To be made resident, a command should be pure, meaning that it is both re-entrant and re-executable. A re-entrant command can properly support independent use by two or more programs at the same time. A re-executable command dies not have to be reloaded to be executed again. Commands that have these characteristics are called pure and have the p (pure) protection bit set.&lt;br /&gt;
&lt;br /&gt;
The following commands cannot be made resident: BINDDRIVERS, CONCLIP, IPREFS, LOADRESOURCE, LOADWB, and SETPATCH.&lt;br /&gt;
&lt;br /&gt;
LIST the C: directory to check for the presence of the p protection bit to determine which commands are pure.&lt;br /&gt;
&lt;br /&gt;
Many of the commands in the C: directory, as well as the MORE command in Utilities, are pure commands and can be made resident. If a command does not have its pure bit set, it probably cannot be made resident safely. (Setting the pure bit does not make a command or program pure.)&lt;br /&gt;
&lt;br /&gt;
The REPLACE option is the default option and does not need to be explicitly stated. If no &amp;lt;resident name&amp;gt; is specified (for example, only a file name is specified), RESIDENT uses the file name portion as the name on the resident list. The full path to the file must be used.&lt;br /&gt;
&lt;br /&gt;
If a &amp;lt;resident name&amp;gt; is specified and RESIDENT finds a program with that name already on the list, it attempts to replace the command. That &amp;lt;resident name&amp;gt; must be used to reference the resident version of the command. The replacement succeeds only if the already-resident command is not in use.&lt;br /&gt;
&lt;br /&gt;
To override REPLACEment and make several versions of a command resident simultaneously, use the ADD option, giving a different &amp;lt;resident name&amp;gt; for each version loaded.&lt;br /&gt;
&lt;br /&gt;
If the System option is specified, the command is added to the system portion of the resident list and becomes available as a system component. Any commands added to the resident list with the SYSTEM option cannot be removed. To list these files on the RESIDENT list, you must specify the SYSTEM option.&lt;br /&gt;
&lt;br /&gt;
The PURE option forces RESIDENT to load commands that are not marked as pure and use them to test the pureness of other commands and programs. Use the PURE option with caution. Be sure the programs that you make RESIDENT meet the criteria to be resident or be careful to use the command in only one process at a time.&lt;br /&gt;
&lt;br /&gt;
The availability of internal commands can also be controlled with RESIDENT. To deactivate an Internal command (for example, if an application has its own command of the same name), use RESIDENT &amp;lt;command&amp;gt; REMOVE. The command can be reactivated with the REPLACE option.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; RESIDENT C:COPY&lt;br /&gt;
&lt;br /&gt;
makes the COPY command resident (replaces any previous version).&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; RESIDENT Copy2 DF1:C/COPY ADD&lt;br /&gt;
&lt;br /&gt;
adds another version of COPY to the resident list, under the name Copy2.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; RESIDENT Xdir DF1:C/Xdir PURE&lt;br /&gt;
&lt;br /&gt;
makes an experimental, non-pure version of the DIR command resident.&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
 1&amp;gt; RESIDENT CD REMOVE&lt;br /&gt;
&lt;br /&gt;
makes the Internal CD command unavailable.&lt;br /&gt;
&lt;br /&gt;
; Example 5:&lt;br /&gt;
 1&amp;gt; RESIDENT CD REPLACE&lt;br /&gt;
&lt;br /&gt;
restores the CD command to the system.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#PROTECT|PROTECT]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#LIST|LIST]]&lt;br /&gt;
&lt;br /&gt;
== ROADSHOWCONTROL ==&lt;br /&gt;
&lt;br /&gt;
Displays and changes the internal configuration options of the TCP/IP stack.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ROADSHOWCONTROL [GET &amp;lt;option&amp;gt;] [SET &amp;lt;option&amp;gt;=&amp;lt;value&amp;gt;] [SAVE] [QUIET]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: GET/K,SET/K/F,SAVE/S,QUIET/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;OBS! Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RUN ==&lt;br /&gt;
&lt;br /&gt;
Executes commands as background processes.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: RUN &amp;lt;command...&amp;gt; [{+ &amp;lt;command&amp;gt;}]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: COMMAND/F&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
RUN is used to start background processes. A background process does not open its own window for input or output and does not take over the parent Shell.&lt;br /&gt;
&lt;br /&gt;
RUN attempts to execute the &amp;lt;command&amp;gt; and any arguments entered on the command line. You can RUN multiple command lines by separating them with plus signs (+). If you press Return after a plus sign, RUN interprets the next line as a continuation of the same command line.&lt;br /&gt;
&lt;br /&gt;
To make it possible to close the Shell window in which the process was started, redirect the output of RUN with RUN &amp;gt;NIL: &amp;lt;command&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new background Shell has the same search path and command stack size as the Shell from which RUN is given.&lt;br /&gt;
&lt;br /&gt;
You can RUN commands stored to the resident list. Resident commands are checked before commands in the command path. A Shell started with RUN NEWSHELL uses the default startup file, S:Shell-startup.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; RUN COPY Text TO PRT:+&lt;br /&gt;
 DELETE Text +&lt;br /&gt;
 ECHO &amp;quot;Printing finished&amp;quot;&lt;br /&gt;
&lt;br /&gt;
prints the Text file by copying it to the printer device, deletes it, then displays the given message. Plus signs string together the command lines, causing each command to be run after the previous command finishes.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; RUN EXECUTE Comseq&lt;br /&gt;
&lt;br /&gt;
executes, in the background, all the commands in the script file Comseq.&lt;br /&gt;
&lt;br /&gt;
For more examples using the RUN command, see [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]].&lt;br /&gt;
&lt;br /&gt;
== RX ==&lt;br /&gt;
&lt;br /&gt;
Launches an ARexx program.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: RX &amp;lt;name&amp;gt; [&amp;lt;arguments&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME,ARG/F&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
RX launches an ARexx program. If the specified name includes an explicit path, only that directory is searched for the program; otherwise, the current directory and REXX: are checked for a program with the given name. The optional argument string is passed to the program.&lt;br /&gt;
&lt;br /&gt;
In place of the name of an ARexx program to be launched you can also write a short list of ARexx statements which will be executed as a single line command. To do so, enclose the statements in double quotes.&lt;br /&gt;
&lt;br /&gt;
The RX program will try to start the ARexx resident process before it will attempt to launch a program.&lt;br /&gt;
&lt;br /&gt;
You can also use the RX program from Workbench. Make it the default tool of an ARexx program, then double-click on the icon. The following tool types are supported:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| CONSOLE || Overrides the default output console window specification, &amp;quot;CON://640/100/WAIT/RX Output&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| CMD || Use the command given in the tool type text rather than attempt to execute the ARexx program the icon is attached to.&lt;br /&gt;
|-&lt;br /&gt;
| STARTUP || If present, try to run a different program before the ARexx program is launched. If this is omitted, &amp;quot;RexxMast&amp;quot; will be launched.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Launch the ARexx command &amp;quot;script.rexx&amp;quot; with argument &amp;quot;Names.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; RX script.rexx Names.txt&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
Launch the ARexx command &amp;quot;script.rexx&amp;quot;. Note that the command name suffix is omitted and defaults to &amp;quot;.rexx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; RX script&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
Evaluate an ARexx expression.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; RX &amp;quot;say 17 / 23&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== RXC ==&lt;br /&gt;
&lt;br /&gt;
Closes the ARexx resident process.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: RXC&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
RXC closes the ARexx resident process. The &amp;quot;REXX&amp;quot; public port is withdrawn immediately and the resident process exits as soon as the last ARexx program finishes. No new programs can be launched after a close request.&lt;br /&gt;
&lt;br /&gt;
== RXLIB ==&lt;br /&gt;
&lt;br /&gt;
Manages and lists ARexx function libraries and hosts.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: RXLIB &amp;lt;name&amp;gt; [&amp;lt;priority&amp;gt; [&amp;lt;offset&amp;gt; [&amp;lt;version&amp;gt;]]]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME,PRIORITY,OFFSET/N,VERSION/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
RXLIB manages function libraries and hosts, so that they can be called from ARexx, and it can also be used to list which libraries are currently defined.&lt;br /&gt;
&lt;br /&gt;
To add a new library, specify its name, priority and offset value. The priority must be in the range -100.100. For your library to be invoked before the resident process has a look at a command, make sure that the priority is greater than -60. The offset value is the actual library vector offset and should be documented with each library. The last parameter, the required library version, can usually be omitted in which case 0 will be used (any library version is acceptable).&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Note|text=Do not get the library offset value wrong or ARexx will crash when the next attempt is made to call a function library!}}&lt;br /&gt;
&lt;br /&gt;
To add a new host, specify its name and priority, but omit the offset value and version number. Note that at the time the host is added no test is performed to verify that a public message port of that name exists.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Note|text=You cannot directly replace an existing function library or host with a new entry. The old entry needs to be removed before the new entry can be added.}}&lt;br /&gt;
&lt;br /&gt;
To remove a library or host, specify its name and omit the priority, offset, and version parameters.&lt;br /&gt;
&lt;br /&gt;
To list all function libraries and hosts, omit the library name, priority, offset, and version parameters.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Add &amp;quot;rexxsupport.library&amp;quot;:&lt;br /&gt;
 1&amp;gt; RXLIB rexxsupport.library 0 -30&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
Show all active libraries and hosts:&lt;br /&gt;
 1&amp;gt; RXLIB&lt;br /&gt;
 rexxsupport.library (library)&lt;br /&gt;
 REXX (host)&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
Remove &amp;quot;rexxsupport.library&amp;quot;:&lt;br /&gt;
 1&amp;gt; RXLIB rexxsupport.library&lt;br /&gt;
&lt;br /&gt;
; Example 4:&lt;br /&gt;
Add a new host by the name of &amp;quot;MORE&amp;quot;:&lt;br /&gt;
 1&amp;gt; RXLIB MORE -1&lt;br /&gt;
&lt;br /&gt;
== RXSET ==&lt;br /&gt;
&lt;br /&gt;
Manage or list the Clip List.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: RXSET [&amp;lt;name&amp;gt; [[=] &amp;lt;value&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME,VALUE/F&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
RXSET adds a name-value pair to the Clip List. Name strings are assumed to be in mixed case. If a pair with the same name already exists, its value is replaced with the current string. If a name without a value string is given, the entry is removed from the Clip List. If RXSET is invoked without arguments, it will list all name-value pairs in the Clip List.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Note|text=The original RXSET command would preserve the exact number of blank spaces in the &#039;value&#039; string. This is not the case with this new version of the command, which will always put exactly one blank space between the words in the &#039;value&#039; string. If you need an exact number of blank spaces, you should put them into double quotes.}}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Add the name-value pair &amp;quot;answer=42&amp;quot; to the Clip List (more than one syntax is supported; all three examples are equivalent):&lt;br /&gt;
 1&amp;gt; RXSET answer=42&lt;br /&gt;
 1&amp;gt; RXSET answer = 42&lt;br /&gt;
 1&amp;gt; RXSET answer 42&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
Show the current Clip List contents:&lt;br /&gt;
 1&amp;gt; RXSET&lt;br /&gt;
 answer=42&lt;br /&gt;
&lt;br /&gt;
== SAMPLENETSPEED ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SEARCH ==&lt;br /&gt;
&lt;br /&gt;
Looks for the specified text string in the files of the specified directories.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SEARCH [FROM] &amp;lt;name|pattern&amp;gt; [SEARCH|NAME] &amp;lt;string|pattern&amp;gt;&lt;br /&gt;
: [ALL] [NONUM] [QUIET] [QUICK] [FILE] [PATTERN] [CASE]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FROM/M,SEARCH/A,ALL/S,NONUM/S,QUIET/S,QUICK/S,FILE/S,PATTERN/S,CASE/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
SEARCH looks through all the files in the FROM directory for the given SEARCH string. (The FROM and SEARCH keywords are optional.) If the ALL switch is given, SEARCH also looks through all the subdirectories of the FROM directory. SEARCH displays the name of the file being searched and any line that contains the text sought. You must place quotation marks around any search text containing a space. The search is case-indifferent (capitalization is ignored) unless the CASE switch was specified.&lt;br /&gt;
&lt;br /&gt;
The options are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| NONUM || Line numbers are not printed with the strings.&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || Searches quietly; filenames being searched are not displayed. The local shell variable _Verbosity with a negative value has the same effect.&lt;br /&gt;
|-&lt;br /&gt;
| QUICK || Uses a more compact output format.&lt;br /&gt;
|-&lt;br /&gt;
| FILE || Looks for a file by the specified name, rather than for a string in the file.&lt;br /&gt;
|-&lt;br /&gt;
| PATTERN || Uses pattern matching in the search.&lt;br /&gt;
|-&lt;br /&gt;
| CASE || Uses case sensitive string comparison in the search.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SEARCH leaves a 0 in the condition flag if the object is found, and a 5 (WARN) otherwise. This makes it useful in scripts. To abandon the search of the current file and continue to the next file, if any, type Ctrl-D. SEARCH is aborted when a Ctrl-C is typed.&lt;br /&gt;
&lt;br /&gt;
; Example 1&lt;br /&gt;
 1&amp;gt; Search DEVS: alternative&lt;br /&gt;
      Keymaps (dir)&lt;br /&gt;
      Printers (dir)&lt;br /&gt;
    clipboard.device..&lt;br /&gt;
    MountList..&lt;br /&gt;
 &lt;br /&gt;
    14 \* This is an example of an alternative type of non-filing device mount.&lt;br /&gt;
    narrator.device..&lt;br /&gt;
    parallel.device..&lt;br /&gt;
    printer.device..&lt;br /&gt;
    serial.device..&lt;br /&gt;
    system-configuration..&lt;br /&gt;
&lt;br /&gt;
searches through the DEVS: directory for the word alternative. It is found on line 14 of the MountList file.&lt;br /&gt;
&lt;br /&gt;
; Example 2&lt;br /&gt;
 1&amp;gt; SEARCH Universe: &amp;quot;Intelligent life&amp;quot; ALL&lt;br /&gt;
&lt;br /&gt;
searches for Intelligent life (or intelligent life) in every file on the volume Universe:.&lt;br /&gt;
&lt;br /&gt;
; Example 3&lt;br /&gt;
 1&amp;gt; Work:#?.source SEARCH Progtest.c?? FILE PATTERN&lt;br /&gt;
&lt;br /&gt;
locates all Progtest.c files with a two-character suffix in directories ending in .source in the Work volume.&lt;br /&gt;
&lt;br /&gt;
== SET ==&lt;br /&gt;
&lt;br /&gt;
Sets a local vaiable.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SET [&amp;lt;name&amp;gt;] [&amp;lt;string...&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME,STRING/F&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
SET with no arguments lists the current local variables.&lt;br /&gt;
&lt;br /&gt;
SET with &amp;lt;name&amp;gt; and &amp;lt;string&amp;gt; arguments creates a new environment variable. The first word after SET is taken as the &amp;lt;name&amp;gt;. Everything else on the command line is taken as the &amp;lt;string&amp;gt; argument. Quotation marks are not required.&lt;br /&gt;
&lt;br /&gt;
An environment variable created with SET is local to the Shell in which it was created. If you create a new Shell with the NEWSHELL command, that Shell also recognizes any variables created in its parent Shell. However, if you create a new Shell with the Execute Command Workbench menu item or by opening the Shell icon, variables created with SET are not recognized in the new Shells.&lt;br /&gt;
&lt;br /&gt;
You can call environment variables in a script or on a command line by placing a dollar sign ($) in front of the variable name.&lt;br /&gt;
&lt;br /&gt;
To remove a local variable definition, use the UNSET command.&lt;br /&gt;
&lt;br /&gt;
;Example:&lt;br /&gt;
 1&amp;gt; SET Origin This process launched from icon&lt;br /&gt;
&lt;br /&gt;
creates the local variable Origin that sores a reminder that a Shell was invoked from an icon rather than a NEWSHELL.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ECHO $Origin&lt;br /&gt;
 This process launched from icon&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#GET|GET]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#UNSET|UNSET]]&lt;br /&gt;
&lt;br /&gt;
== SETCLOCK ==&lt;br /&gt;
&lt;br /&gt;
Sets or reads the battery backed-up hardware clock.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SETCLOCK LOAD | SAVE | RESET&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: LOAD/S,SAVE/S,RESET/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
SETCLOCK SAVE sets the date and time of the battery backed-up hardware clock (if your system has one) from the current system time, which is set with the Time editor or with the DATE command. SETCLOCK SAVE is typically used after a DATE command.&lt;br /&gt;
&lt;br /&gt;
SETCLOCK LOAD sets the current system time from the battery backed-up clock. This is done automatically during the boot process.&lt;br /&gt;
&lt;br /&gt;
The RESET option resets the clock completely. Use this option if the clock is accidentally turned off or LOAD and SAVE do not appear to work correctly.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; DATE 22-Jan-93 07:15:25&lt;br /&gt;
 1&amp;gt; SETCLOCK SAVE&lt;br /&gt;
&lt;br /&gt;
saves the date, January 22, 1993, and the time, 7:15 a.m., to the battery backed-up hardware clock. When the system is booted, the system clock is set with the time saved in the hardware clock.&lt;br /&gt;
&lt;br /&gt;
Some Amiga models do not have battery backed-up clocks unless an expansion unit has been installed.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#DATE|DATE]]&lt;br /&gt;
&lt;br /&gt;
== SETDATE ==&lt;br /&gt;
&lt;br /&gt;
Change the timestamp of a file or directory.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SETDATE &amp;lt;file|pattern&amp;gt; [&amp;lt;date&amp;gt;] [&amp;lt;time&amp;gt;] [ALL] [QUIET] [FILES] [DIRS]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILE/A,DATE,TIME,ALL/S,QUIET/S,FILES/S,DIRS/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
SETDATE changes the timestamp (date and time of creation or last change) of a file or directory. SETDATE &amp;lt;file&amp;gt; changes the date/time of the file to the current system date/time. SETDATE does not affect the software or hardware clocks.&lt;br /&gt;
&lt;br /&gt;
The output of the DATE command may be used as input to SETDATE.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| ALL || Change the dates of all subdirectories and their files.&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || If the QUIET option is given, screen output is suppressed. The local shell variable _Verbosity with a negative value has the same effect.&lt;br /&gt;
|-&lt;br /&gt;
| FILES || Only change the dates of the files found.&lt;br /&gt;
|-&lt;br /&gt;
| DIRS || Only change the dates of the directories found.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|The FILES and DIRS options work together: if you use FILES and omit DIRS, then only the files will be affected and the other way round. If none of FILES and DIRS is used, all files and directories will have their dates changed.}}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; SETDATE TestFile&lt;br /&gt;
&lt;br /&gt;
changes the date and time associated with TestFile to the current date and time.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; SETDATE TestFile 16-09-89 15:25:52&lt;br /&gt;
&lt;br /&gt;
change the date and time associated with TestFile to September 16, 1989, 3:25 p.m.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#DATE|DATE]]&lt;br /&gt;
&lt;br /&gt;
== SETDOSDEBUG ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SETENV ==&lt;br /&gt;
&lt;br /&gt;
Sets a global variable.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SETENV [&amp;lt;name&amp;gt;] [&amp;lt;string...&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME,STRING/F&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
SETENV with no arguments lists the current global variables.&lt;br /&gt;
&lt;br /&gt;
SETENV with &amp;lt;name&amp;gt; and &amp;lt;string&amp;gt; arguments creates a new global environment variable. The first word after SETENV is taken as the &amp;lt;name&amp;gt;. Everything else on the command line is taken as the &amp;lt;string&amp;gt; argument. Quotation marks are not required.&lt;br /&gt;
&lt;br /&gt;
Global variables are stored in the ENV: directory and are available to all processes. However, if a local variable (defined by SET) and a global variable share the same name, the local variable is used.&lt;br /&gt;
&lt;br /&gt;
Environment variables are called by scripts or other commands by including a dollar sign ($) in front of the variable name.&lt;br /&gt;
&lt;br /&gt;
To remove a global variable definition, use the UNSETENV command.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; SETENV Editor Extras:Tools/MEmacs&lt;br /&gt;
&lt;br /&gt;
creates the environment variable Editor That can be used with the MORE utility. This specifies the editor as MEmacs, located in the Tools drawer of EXTRAS:. The variable Editor is available in any Shell.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; SETENV Editor C:ED&lt;br /&gt;
&lt;br /&gt;
same as above, only the editor specified is ED.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ECHO $Editor&lt;br /&gt;
 C:ED&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#GETENV|GETENV]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#UNSETENV|UNSETENV]]&lt;br /&gt;
&lt;br /&gt;
== SETFONT ==&lt;br /&gt;
&lt;br /&gt;
Changes the font of the current Shell.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SETFONT &amp;lt;font&amp;gt; &amp;lt;size&amp;gt; [SCALE] [PROP] [ITALIC] [BOLD] [UNDERLINE] [CHARSET]&lt;br /&gt;
; Template&lt;br /&gt;
: NAME/A,SIZE/A,SCALE/S,PROP/S,ITALIC/S,BOLD/S,UNDERLINE/S,CHARSET/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
SETFONT lets you change the font used in a particular Shell window, overriding the System Default Font setting specified in the [[AmigaOS_Manual:_Workbench_Preferences#Font_Editor|Font preferences editor]]. SETFONT is only effective in the window in which it is invoked.&lt;br /&gt;
&lt;br /&gt;
You must specify both a font name and a size when using the SETFONT command.&lt;br /&gt;
&lt;br /&gt;
Invoking SETFONT will clear the Shell window of its current contents and display a new prompt, in the new font, at the top of the window.&lt;br /&gt;
&lt;br /&gt;
The other options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| SCALE || Enables bitmap font scaling.&lt;br /&gt;
|-&lt;br /&gt;
| PROP || Allows proportional fonts.&lt;br /&gt;
|-&lt;br /&gt;
| ITALIC || The font will be italic.&lt;br /&gt;
|-&lt;br /&gt;
| BOLD || The font will be boldface.&lt;br /&gt;
|-&lt;br /&gt;
| UNDERLINE || The font will be underlined.&lt;br /&gt;
|-&lt;br /&gt;
| CHARSET || The font will be in the specified charset, not in the current default charset.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; SETFONT Fixed 13 BOLD UNDERLINE CHARSET ISO-8859-7&lt;br /&gt;
&lt;br /&gt;
The Shell window will clear, and the new prompt will be in 13 pixels Fixed.font, underlined and boldface, with greek glyphs for the characters above 0xA0.&lt;br /&gt;
&lt;br /&gt;
== SETFONTCHARSET ==&lt;br /&gt;
&lt;br /&gt;
Adds charset tag and version string to a FontContentsHeader file.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SETFONTCHARSET &amp;lt;sourcefontfile&amp;gt; &amp;lt;charset&amp;gt; [VERSTRING]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: BITMAPFONTFILENAME/A,CHARSET/A,VERSTRING/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
== SETKEYBOARD ==&lt;br /&gt;
&lt;br /&gt;
Changes the keymap used by the current Amiga console.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SETKEYBOARD &amp;lt;keymap&amp;gt; [CHARSET]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: KEYMAP/A,CHARSET/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
SETKEYBOARD specifies the keymap used by the Amiga for the current console. The keymap file must be present in KEYMAPS: for SETKEYBOARD to find it.&lt;br /&gt;
&lt;br /&gt;
The other options are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| CHARSET || The keymap will be adjusted to the specified charset, not to the current default charset. You should only use this option when you also selected a different font charset with the [[AmigaOS_Manual:_AmigaDOS_Command_Reference#SETFONT|SETFONT]] command. The adjustment does e.g. include the deadkey combinations which otherwise would produce confusing results.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
&lt;br /&gt;
To change to a French Canadian keymap, enter:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; SETKEYBOARD cdn_f&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
&lt;br /&gt;
To switch the current console to ISO-8859-15 charset and german keymap, type:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; SETFONT topaz 8 CHARSET ISO-8859-15&lt;br /&gt;
 1&amp;gt; SETKEYBOARD d_ISO-8859-15 CHARSET ISO-8859-15&lt;br /&gt;
&lt;br /&gt;
== SHOW68LOADS ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SHOWAPPLIST ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SHOWNETSTATUS ==&lt;br /&gt;
&lt;br /&gt;
Displays various information about the status of the network configuration.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SHOWNETSTATUS [INTERFACE=&amp;lt;itf&amp;gt;[,&amp;lt;itf&amp;gt;...]] [INTERFACES] [ARPCACHE=ARP]&lt;br /&gt;
: [ROUTES] [DNS=DOMAINNAMESERVERS] [ICMP] [IGMP] [IP] [MB=MEMORY] [MR=MULTICASTROUTING]&lt;br /&gt;
: [RT=ROUTING] [TCP] [UDP] [TCPSOCKETS] [UDPSOCKETS] [NAMES] [ALL] [REPEAT] [QUIET]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: INTERFACE/M,INTERFACES/S,ARPCACHE=ARP/S,ROUTES/S,DNS=DOMAINNAMESERVERS/S,ICMP/S,IGMP/S,IP/S,MB=MEMORY/S,MR=MULTICASTROUTING/S,RT=ROUTING/S,TCP/S,UDP/S,TCPSOCKETS/S,UDPSOCKETS/S,NAMES/S,ALL/S,REPEAT/S,QUIET/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SKIP ==&lt;br /&gt;
&lt;br /&gt;
Skips to a label when executing script files.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SKIP [&amp;lt;label&amp;gt;] [BACK]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: LABEL,BACK/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
SKIP is used in scripts to allow you to skip ahead in the script to a &amp;lt;label&amp;gt; defined by a LAB statement. If no &amp;lt;label&amp;gt; is specified, SKIP jumps to the next LAB statement.&lt;br /&gt;
&lt;br /&gt;
SKIP always searches forward from the current line of the file. However, when the BACK option is used, SKIP starts searching for the label from the beginning of the file. This allows SKIPs to points prior to the SKIP command.&lt;br /&gt;
&lt;br /&gt;
You can only SKIP as far back as the last EXECUTE statement. If there are no EXECUTE statements in a script, you SKIP back to the beginning of the file.&lt;br /&gt;
&lt;br /&gt;
If SKIP does not find the label specified, the command sequence terminates and the message Label &amp;lt;label&amp;gt; not found by Skip is displayed.&lt;br /&gt;
&lt;br /&gt;
; Example: &lt;br /&gt;
Assume you have the following script, called CheckFile:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 .KEY name&lt;br /&gt;
 IF exists &amp;lt;name&amp;gt;&lt;br /&gt;
    SKIP message&lt;br /&gt;
 ELSE&lt;br /&gt;
    ECHO &amp;quot;&amp;lt;name&amp;gt; is not in this directory.&amp;quot;&lt;br /&gt;
    QUIT&lt;br /&gt;
 ENDIF&lt;br /&gt;
 LAB message&lt;br /&gt;
 ECHO &amp;quot;The &amp;lt;name&amp;gt; file exists.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can run the script by entering:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; EXECUTE CheckFile Document&lt;br /&gt;
&lt;br /&gt;
If the Document file exists in the current directory, the execution of the script SKIPs ahead to the LAB command. The message:&lt;br /&gt;
&lt;br /&gt;
 The Document file exists.&lt;br /&gt;
&lt;br /&gt;
Is displayed in the Shell window.&lt;br /&gt;
&lt;br /&gt;
If the Document file is not in the current directory, the execution of the script jumps to the line after the ELSE statement, displaying the message:&lt;br /&gt;
&lt;br /&gt;
 Document is not in this directory.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#EXECUTE|EXECUTE]]&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#LAB|LAB]]&lt;br /&gt;
&lt;br /&gt;
== SMARTCTL ==&lt;br /&gt;
&lt;br /&gt;
Control and monitor SMART disks.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SMARTCTL [&amp;lt;options&amp;gt;] &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: LABEL,BACK/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;OBS! Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SORT ==&lt;br /&gt;
&lt;br /&gt;
Alphabetically sorts the lines of a file.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SORT [FROM] &amp;lt;file | pattern&amp;gt; [TO] &amp;lt;filename&amp;gt; [COLSTART &amp;lt;n&amp;gt;] [CASE] [NUMERIC]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FROM/A,TO/A,COLSTART/K,CASE/S,NUMERIC/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
SORT sorts the FROM file alphabetically, line-by-line, sending the sorted results to the TO file. SORT assumes the file is a normal text file in which lines are separated by line feeds. SORT normally disregards case. If the CASE switch is given, upper-cased items are output first.&lt;br /&gt;
&lt;br /&gt;
The COLSTART keyword specifies the character column at which the comparison begins. SORT starts comparing the lines from that point, wrapping around to the beginning of the line if the compared lines match to the end.&lt;br /&gt;
&lt;br /&gt;
When the NUMERIC option is specified, the lines are interpreted as numbers from the first column reading to the right, stopping at the first non-numeric character. Lines not beginning with numbers are treated as 0. The lines are output in numerical order. CASE is ignored when NUMERIC is specified.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; SORT DF0:Glossary TO DF0:Glossary.alpha&lt;br /&gt;
&lt;br /&gt;
sorts the lines in the Glossary file, arranges them alphabetically, and outputs them to a next file called Glossary.alpha. The case of the words is disregarded.&lt;br /&gt;
&lt;br /&gt;
For more examples using the SORT command, see [[AmigaOS_Manual:_AmigaDOS_Command_Examples|Chapter 8]].&lt;br /&gt;
&lt;br /&gt;
== SOUNDPLAYER ==&lt;br /&gt;
&lt;br /&gt;
Plays a sound sample.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SOUNDPLAYER [VERBOSE] [QUIET] [R | RATE | SAMPLERATE &amp;lt;sample rate&amp;gt;] [&amp;lt;sample file&amp;gt;] [VOL | VOLUME &amp;lt;volume&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: V=VERBOSE/S,Q=QUIET/S,SR=RATE=SAMPLERATE/K/N,FROM/M,VOL=VOLUME/K/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;OBS! Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== STACK ==&lt;br /&gt;
&lt;br /&gt;
Displays or sets the stack size within the current Shell.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: STACK [[SIZE] &amp;lt;stack size&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: SIZE/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
A Shell uses a certain amount of stack, a special area in memory allocated for it. Each Shell has a specific stack size. If a program causes a system failure, changing the Shell&#039;s stack size may solve the problem. Commands performing operations consisting of multiple levels can require additional stack space.&lt;br /&gt;
&lt;br /&gt;
Stack sizes typically range from 4096 to 40000 bytes. If the stack size is too small, a system failure can occur. If the stack size is too large, it can use too much memory.&lt;br /&gt;
&lt;br /&gt;
{{Note|A software failure message is displayed if you run out of stack space. Increase the stack space for the Shell that caused the error.}}&lt;br /&gt;
&lt;br /&gt;
Entering the STACK command with no arguments displays the current stack size.&lt;br /&gt;
&lt;br /&gt;
== STATUS ==&lt;br /&gt;
&lt;br /&gt;
Lists information about Shell processes.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: STATUS [&amp;lt;process&amp;gt;] [FULL] [TCB] [CLI | ALL] [COM | COMMAND &amp;lt;command&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: PROCESS/N,FULL/S,TCB/S,CLI=ALL/S,COM=COMMAND/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
STATUS without any arguments lists the numbers of the current Shell processes and the program or command running in each. The &amp;lt;process&amp;gt; argument specifies a process number, limiting STATUS to giving information about that process only.&lt;br /&gt;
&lt;br /&gt;
For information on the stack size, global vector size, priority, and the current command for each process, use the FULL keyword. The TCB keyword is similar, omitting the command information. The CLI=ALL keyword gives only the command information.&lt;br /&gt;
&lt;br /&gt;
STATUS searches for a command when you use the COMMAND option. STATUS scans the Shell list, looking for the specified &amp;lt;command&amp;gt;. If the command is found, the Shell&#039;s process number is output, and the condition flag is set to 0. Otherwise, the flag is set to 5 (WARN).&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; STATUS 1&lt;br /&gt;
 Process 1: Loaded as command: status&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; STATUS 1 FULL&lt;br /&gt;
 Process 1: stk 4000, gv 150, pri 0 Loaded as command: status&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; STATUS &amp;gt;RAM:Xyz COMMAND=COPY&lt;br /&gt;
 1&amp;gt; BREAK &amp;lt;RAM:Xyz &amp;gt;NIL: ?&lt;br /&gt;
&lt;br /&gt;
sends a break to the process executing COPY.&lt;br /&gt;
&lt;br /&gt;
== SWAPCD ==&lt;br /&gt;
&lt;br /&gt;
Interchanges the current directory and a stacked directory.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SWAPCD [&amp;lt;dir | pattern&amp;gt;] [LEVEL &amp;lt;number&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: DIR,LEVEL/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;OBS! Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TCC ==&lt;br /&gt;
&lt;br /&gt;
Closes the ARexx tracing console window.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: TCC&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
TCC closes the global ARexx tracing console as soon as all active programs are no longer using it. All read requests queued to the console must be satisfied before it can be closed.&lt;br /&gt;
&lt;br /&gt;
== TCO ==&lt;br /&gt;
&lt;br /&gt;
Opens the ARexx tracing console window.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: TCO&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
TCO opens the global ARexx tracing console. The tracing output from all active ARexx programs is diverted automatically to the new console. The console window can be moved and resized by the user and can be closed with the TCC command.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; TCO&lt;br /&gt;
&lt;br /&gt;
[[File:DosFig6-4.png|center|frame|Sample ARexx tracing console]]&lt;br /&gt;
&lt;br /&gt;
== TCPDUMP ==&lt;br /&gt;
&lt;br /&gt;
Dumps traffic on a network.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: TCPDUMP [-aAdDeflLnNOpqRStuUvxX] [-c &amp;lt;count&amp;gt;] [-C &amp;lt;file_size&amp;gt;] [-E &amp;lt;algo:secret&amp;gt;] [-F &amp;lt;file&amp;gt;] [-i &amp;lt;interface&amp;gt;] [-r &amp;lt;file&amp;gt;] [-s &amp;lt;snaplen&amp;gt;] [-T &amp;lt;type&amp;gt;] [-w &amp;lt;file&amp;gt;] [-y &amp;lt;datalinktype&amp;gt;] [&amp;lt;expression&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -a,-A,-d,-D,-e,-f,-l,-L,-n,-N,-O,-p,-q,-R,-S,-t,-u,-U,-v,-x,-X,-c,-C,-E,-F,-i,-r,-s,-T,-w,-y&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;OBS! Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TE ==&lt;br /&gt;
&lt;br /&gt;
Clears the ARexx global tracing flag.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: TE&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
TE clears the global ARexx tracing flag, which forces the tracing mode to OFF for all active ARexx programs.&lt;br /&gt;
&lt;br /&gt;
== TEE ==&lt;br /&gt;
&lt;br /&gt;
Sends data from the standard input to the standard output and prints it to the console.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: TEE [SIZE=&amp;lt;number&amp;gt;] [LINE]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: SIZE/N/K,LINE/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
The TEE command will read data from its standard input and send it to its standard output, but additionally it will also send a copy of the data to the console. This allows for pipe commands to be monitored.&lt;br /&gt;
&lt;br /&gt;
By default the TEE command reads data in chunks of 512 bytes each, which can be changed with the SIZE parameter; it controls how many bytes will be read apiece. Alternatively, you can tell the TEE command to read the input line by line. The LINE parameter activates this mode of operation.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#PIPE|PIPE]]&lt;br /&gt;
&lt;br /&gt;
== TRACEROUTE ==&lt;br /&gt;
&lt;br /&gt;
Prints the route packets take to network host.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: TRACEROUTE [-d | DEBUG] [-m | MAXTTL &amp;lt;ttl&amp;gt;] [-n | NUMERIC] [-p | PORT &amp;lt;number&amp;gt;] &lt;br /&gt;
: [-q | QUERIES &amp;lt;number&amp;gt;] [-r | DONTROUTE] [-s | SOURCE &amp;lt;address&amp;gt;] &lt;br /&gt;
: [-t | TOS &amp;lt;type&amp;gt;] [-v | VERBOSE] [-w | WAIT &amp;lt;time&amp;gt;] [HOST &amp;lt;name&amp;gt;] &lt;br /&gt;
: [PACKETSIZE &amp;lt;size&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: -d=DEBUG/S,-m=MAXTTL/K/N,-n=NUMERIC/S,-p=PORT/K/N,-q=QUERIES/K/N,-r=DONTROUTE/S,-s=SOURCE/K,-t=TOS/K/N,-v=VERBOSE/S,-w=WAIT/K/N,HOST/A,PACKETSIZE/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
The Internet is a large and complex aggregation of network hardware, connected together by gateways. Tracking the route one&#039;s packets follow (or finding the miscreant gateway that&#039;s discarding your packets) can be difficult. TRACEROUTE utilizes the IP protocol `time to live&#039; field and attempts to elicit an ICMP TIME_EXCEEDED response from each gateway along the path to some host.&lt;br /&gt;
&lt;br /&gt;
The only mandatory parameter is the destination host name or IP number. The default probe datagram length is 38 bytes, but this may be increased by specifying a packet size (in bytes) after the destination host name.&lt;br /&gt;
&lt;br /&gt;
TRACEROUTE options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| -m, MAXTTL || Set the max time-to-live (max number of hops) used in outgoing probe packets. The default is 30 hops (the same default used for TCP connections).&lt;br /&gt;
|-&lt;br /&gt;
| -n, NUMERIC || Print hop addresses numerically rather than symbolically and numerically (saves a nameserver address-to-name lookup for each gateway found on the path).&lt;br /&gt;
|-&lt;br /&gt;
| -p, PORT || Set the base UDP port number used in probes (default is 33434). TRACEROUTE hopes that nothing is listening on UDP ports base to base+nhops-1 at the destination host (so an ICMP PORT_UNREACHABLE message will be returned to terminate the route tracing). If something is listening on a port in the default range, this option can be used to pick an unused port range.&lt;br /&gt;
|-&lt;br /&gt;
| -q, QUERIES || Set the number of probes per ``ttl&#039;&#039; (default is three probes).&lt;br /&gt;
|-&lt;br /&gt;
| -r, DONTROUTE || Bypass the normal routing tables and send directly to a host on an attached network. If the host is not on a directly-attached network, an error is returned. This option can be used to ping a local host through an interface that has no route through it.&lt;br /&gt;
|-&lt;br /&gt;
| -s, SOURCE || Use the following IP address (which must be given as an IP number, not a hostname) as the source address in outgoing probe packets. On hosts with more than one IP address, this option can be used to force the source address to be something other than the IP address of the interface the probe packet is sent on. If the IP address is not one of this machine&#039;s interface addresses, an error is returned and nothing is sent.&lt;br /&gt;
|-&lt;br /&gt;
| -t, TOS || Set the type-of-service in probe packets to the following value (default zero). The value must be a decimal integer in the range 0 to 255. This option can be used to see if different types-of-service result in different paths. Not all values of TOS are legal or meaningful - see the IP spec for definitions. Useful values are probably `-t 16&#039; (low delay) and `-t 8&#039; (high throughput).&lt;br /&gt;
|-&lt;br /&gt;
| -v, VERBOSE || Verbose output. Received ICMP packets other than TIME_EXCEEDED and UNREACHABLEs are listed.&lt;br /&gt;
|-&lt;br /&gt;
| -w, WAIT || Set the time (in seconds) to wait for a response to a probe (default 3 sec.).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TRACEROUTE attempts to trace the route an IP packet would follow to some internet host by launching UDP probe packets with a small ttl (time to live) then listening for an ICMP &amp;quot;time exceeded&amp;quot; reply from a gateway. We start our probes with a ttl of one and increase by one until we get an ICMP &amp;quot;port unreachable&amp;quot; (which means we got to &amp;quot;host&amp;quot;) or hit a max (which defaults to 30 hops &amp;amp; can be changed with the -m flag). Three probes (changed with -q flag) are sent at each ttl setting and a line is printed showing the ttl, address of the gateway and round trip time of each probe. If the probe answers come from different gateways, the address of each responding system will be printed. If there is no response within a 3 sec. timeout interval (changed with the -w flag), a &amp;quot;*&amp;quot; is printed for that probe.&lt;br /&gt;
&lt;br /&gt;
We don&#039;t want the destination host to process the UDP probe packets so the destination port is set to an unlikely value (if some clod on the destination is using that value, it can be changed with the -p flag).&lt;br /&gt;
&lt;br /&gt;
A sample use and output might be:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; TRACEROUTE nis.nsf.net.&lt;br /&gt;
 traceroute to nis.nsf.net (35.1.1.48), 30 hops max, 56 byte packet&lt;br /&gt;
 1  helios.ee.lbl.gov (128.3.112.1)  19 ms  19 ms  0 ms&lt;br /&gt;
 2  lilac-dmc.Berkeley.EDU (128.32.216.1)  39 ms  39 ms  19 ms&lt;br /&gt;
 3  lilac-dmc.Berkeley.EDU (128.32.216.1)  39 ms  39 ms  19 ms&lt;br /&gt;
 4  ccngw-ner-cc.Berkeley.EDU (128.32.136.23)  39 ms  40 ms  39 ms&lt;br /&gt;
 5  ccn-nerif22.Berkeley.EDU (128.32.168.22)  39 ms  39 ms  39 ms&lt;br /&gt;
 6  128.32.197.4 (128.32.197.4)  40 ms  59 ms  59 ms&lt;br /&gt;
 7  131.119.2.5 (131.119.2.5)  59 ms  59 ms  59 ms&lt;br /&gt;
 8  129.140.70.13 (129.140.70.13)  99 ms  99 ms  80 ms&lt;br /&gt;
 9  129.140.71.6 (129.140.71.6)  139 ms  239 ms  319 ms&lt;br /&gt;
 10  129.140.81.7 (129.140.81.7)  220 ms  199 ms  199 ms&lt;br /&gt;
 11  nic.merit.edu (35.1.1.48)  239 ms  239 ms  239 ms&lt;br /&gt;
&lt;br /&gt;
Note that lines 2 &amp;amp; 3 are the same. This is due to a buggy kernel on the 2nd hop system - lbl-csam.arpa - that forwards packets with a zero ttl (a bug in the distributed version of 4.3 BSD). Note that you have to guess what path the packets are taking cross-country since the NSFNet (129.140) doesn&#039;t supply address-to-name translations for its NSSes.&lt;br /&gt;
&lt;br /&gt;
A more interesting example is:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; TRACEROUTE allspice.lcs.mit.edu.&lt;br /&gt;
 traceroute to allspice.lcs.mit.edu (18.26.0.115), 30 hops max&lt;br /&gt;
 1  helios.ee.lbl.gov (128.3.112.1)  0 ms  0 ms  0 ms&lt;br /&gt;
 2  lilac-dmc.Berkeley.EDU (128.32.216.1)  19 ms  19 ms  19 ms&lt;br /&gt;
 3  lilac-dmc.Berkeley.EDU (128.32.216.1)  39 ms  19 ms  19 ms&lt;br /&gt;
 4  ccngw-ner-cc.Berkeley.EDU (128.32.136.23)  19 ms  39 ms  39 ms&lt;br /&gt;
 5  ccn-nerif22.Berkeley.EDU (128.32.168.22)  20 ms  39 ms  39 ms&lt;br /&gt;
 6  128.32.197.4 (128.32.197.4)  59 ms  119 ms  39 ms&lt;br /&gt;
 7  131.119.2.5 (131.119.2.5)  59 ms  59 ms  39 ms&lt;br /&gt;
 8  129.140.70.13 (129.140.70.13)  80 ms  79 ms  99 ms&lt;br /&gt;
 9  129.140.71.6 (129.140.71.6)  139 ms  139 ms  159 ms&lt;br /&gt;
 10  129.140.81.7 (129.140.81.7)  199 ms  180 ms  300 ms&lt;br /&gt;
 11  129.140.72.17 (129.140.72.17)  300 ms  239 ms  239 ms&lt;br /&gt;
 12  * * *&lt;br /&gt;
 13  128.121.54.72 (128.121.54.72)  259 ms  499 ms  279 ms&lt;br /&gt;
 14  * * *&lt;br /&gt;
 15  * * *&lt;br /&gt;
 16  * * *&lt;br /&gt;
 17  * * *&lt;br /&gt;
 18  ALLSPICE.LCS.MIT.EDU (18.26.0.115)  339 ms  279 ms  279 ms&lt;br /&gt;
&lt;br /&gt;
Note that the gateways 12, 14, 15, 16 &amp;amp; 17 hops away either don&#039;t send ICMP &amp;quot;time exceeded&amp;quot; messages or send them with a ttl too small to reach us. 14 - 17 are running the MIT C Gateway code that doesn&#039;t send &amp;quot;time exceeded&amp;quot;s. God only knows what&#039;s going on with 12.&lt;br /&gt;
&lt;br /&gt;
The silent gateway 12 in the above may be the result of a bug in the 4.[23] BSD network code (and its derivatives): 4.x (x &amp;lt;= 3) sends an unreachable message using whatever ttl remains in the original datagram. Since, for gateways, the remaining ttl is zero, the ICMP &amp;quot;time exceeded&amp;quot; is guaranteed to not make it back to us. The behavior of this bug is slightly more interesting when it appears on the destination system:&lt;br /&gt;
&lt;br /&gt;
 1  helios.ee.lbl.gov (128.3.112.1)  0 ms  0 ms  0 ms&lt;br /&gt;
 2  lilac-dmc.Berkeley.EDU (128.32.216.1)  39 ms  19 ms  39 ms&lt;br /&gt;
 3  lilac-dmc.Berkeley.EDU (128.32.216.1)  19 ms  39 ms  19 ms&lt;br /&gt;
 4  ccngw-ner-cc.Berkeley.EDU (128.32.136.23)  39 ms  40 ms  19 ms&lt;br /&gt;
 5  ccn-nerif35.Berkeley.EDU (128.32.168.35)  39 ms  39 ms  39 ms&lt;br /&gt;
 6  csgw.Berkeley.EDU (128.32.133.254)  39 ms  59 ms  39 ms&lt;br /&gt;
 7  * * *&lt;br /&gt;
 8  * * *&lt;br /&gt;
 9  * * *&lt;br /&gt;
 10  * * *&lt;br /&gt;
 11  * * *&lt;br /&gt;
 12  * * *&lt;br /&gt;
 13  rip.Berkeley.EDU (128.32.131.22)  59 ms !  39 ms !  39 ms !&lt;br /&gt;
&lt;br /&gt;
Notice that there are 12 &amp;quot;gateways&amp;quot; (13 is the final destination) and exactly the last half of them are &amp;quot;missing&amp;quot;. What&#039;s really happening is that rip (a Sun-3 running Sun OS3.5) is using the ttl from our arriving datagram as the ttl in its ICMP reply. So, the reply will time out on the return path (with no notice sent to anyone since ICMP&#039;s aren&#039;t sent for ICMP&#039;s) until we probe with a ttl that&#039;s at least twice the path length. I.e., rip is really only 7 hops away. A reply that returns with a ttl of 1 is a clue this problem exists. TRACEROUTE prints a &amp;quot;!&amp;quot; after the time if the ttl is &amp;lt;= 1. Since vendors ship a lot of obsolete (DEC&#039;s Ultrix, Sun 3.x) or non-standard (HPUX) software, expect to see this problem frequently and/or take care picking the target host of your probes. Other possible annotations after the time are !H, !N, !P (got a host, network or protocol unreachable, respectively), !S or !F (source route failed or fragmentation needed - neither of these should ever occur and the associated gateway is busted if you see one). If almost all the probes result in some kind of unreachable, TRACEROUTE will give up and exit.&lt;br /&gt;
&lt;br /&gt;
This program is intended for use in network testing, measurement and management. It should be used primarily for manual fault isolation. Because of the load it could impose on the network, it is unwise to use TRACEROUTE during normal operations or from automated scripts.&lt;br /&gt;
&lt;br /&gt;
== TS ==&lt;br /&gt;
&lt;br /&gt;
Starts ARexx&#039;s interactive tracing.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: TS&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
TS starts interactive ARexx tracing by setting the external trace flag, which forces all active ARexx programs into interactive tracing mode. Programs will start producing trace output and will pause after the next statement.&lt;br /&gt;
&lt;br /&gt;
This command is useful for regaining control over programs caught in infinite loops or otherwise misbehaving. The trace flag remains set until cleared by the TE command, so subsequent program invocations will be executed in interactive tracing mode.&lt;br /&gt;
&lt;br /&gt;
== TYPE ==&lt;br /&gt;
&lt;br /&gt;
Displays a text file.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: TYPE {&amp;lt;file|pattern&amp;gt;} [TO &amp;lt;name&amp;gt;] [OPT H|N] [HEX] [NUMBER]&lt;br /&gt;
: [AUTO] [TEXTONLY] [WIDTH &amp;lt;line width&amp;gt;] [BUF|BUFFER=&amp;lt;n&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FROM/A/M,TO/K,OPT/K,HEX/S,NUMBER/S,AUTO/S,TEXTONLY/S,WIDTH/K/N,BUF=BUFFER/K/N,MULTI/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
TYPE will output the contents of the named file to the current window, if no destination is given, or to a specified output file. If more than one filename is specified, and the TO keyword is not used, the filenames will be typed in sequence.&lt;br /&gt;
&lt;br /&gt;
The OPT H and OPT N options are also available by the HEX and NUMBER keywords, respectively. The HEX option causes the file to be typed as columns of hexadecimal numbers, with an ASCII character interpretation column. This is useful for analyzing object files. The NUMBER option will number the lines as they are output.&lt;br /&gt;
&lt;br /&gt;
The AUTO option will make TYPE examine the first 256 characters of the file. If non-printable characters are found, TYPE will show the file as if the HEX option had been specified. Note that you can override the AUTO option with the HEX option, in which case you will always see the file(s) typed as columns of hexadecimal numbers.&lt;br /&gt;
&lt;br /&gt;
The WIDTH option controls how long each line in HEX mode form should become. For example, WIDTH=120 will try to print as much data in hexadecimal form as will fit into a line of up to 120 characters in total. The default is to print up to 61 characters per line.&lt;br /&gt;
&lt;br /&gt;
By default, TYPE will print the contents of the file as is read, including binary data (unprintable characters). To replace unprintable characters before output, use the TEXTONLY option. Any unprintable character will be replaced with &#039;.&#039;.&lt;br /&gt;
&lt;br /&gt;
How much data is read and output at a time can be controlled with the BUFFER option. By default, a maximum of 2048 bytes will be read/written at a time.&lt;br /&gt;
&lt;br /&gt;
To pause output, press the Space bar. To resume output, press Backspace, Return, or Ctrl-X. To stop output, press Ctrl-C (***BREAK is displayed).&lt;br /&gt;
&lt;br /&gt;
The MULTI option was added in 54.1 and when specified, TYPE will also search multi-assignment paths for the file.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; TYPE S:User-Startup&lt;br /&gt;
&lt;br /&gt;
The contents of the User-Startup file in the S: directory will be displayed on the screen.&lt;br /&gt;
&lt;br /&gt;
== UNALIAS ==&lt;br /&gt;
&lt;br /&gt;
Removes an alias.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: UNALIAS [&amp;lt;name&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
UNALIAS removes the named alias from the alias list. With no arguments, UNALIAS lists the current aliases.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#ALIAS|ALIAS]]&lt;br /&gt;
&lt;br /&gt;
== UNSET ==&lt;br /&gt;
&lt;br /&gt;
Removes a local variable.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: UNSET [&amp;lt;name&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
UNSET removes the named local variable from the variable list for the current process. With no arguments, UNSET lists the current variables.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#SET|SET]]&lt;br /&gt;
&lt;br /&gt;
== UNSETENV ==&lt;br /&gt;
&lt;br /&gt;
Removes a global variable.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: UNSETENV [&amp;lt;name&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
UNSETENV removes the named global variable from the current variable list. With no arguments, UNSETENV lists the current variables.&lt;br /&gt;
&lt;br /&gt;
;See also&lt;br /&gt;
* [[AmigaOS_Manual:_AmigaDOS_Command_Reference#SETENV|SETENV]]&lt;br /&gt;
&lt;br /&gt;
== UPTIME ==&lt;br /&gt;
&lt;br /&gt;
Tells how long the system has been running.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: UPTIME&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
UPTIME will find out how much time has passed since the Amiga was started and print that information. This will be given as the system start time followed by the total amount of time that has passed since (in days and seconds).&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; UPTIME&lt;br /&gt;
 System has been up since 02-Sep-03 09:42:05 (total uptime 00:14:08)&lt;br /&gt;
&lt;br /&gt;
== URLOPEN ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USBCTRL ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VERSION ==&lt;br /&gt;
&lt;br /&gt;
Finds software version and revision numbers.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: VERSION [&amp;lt;library | device | file&amp;gt;] [&amp;lt;version #&amp;gt;] [&amp;lt;revision #&amp;gt;]&lt;br /&gt;
: [FILE] [FULL] [&amp;lt;unit #&amp;gt;] [INTERNAL] [RES] [VSTRING]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME,VERSION/N,REVISION/N,FILE/S,FULL/S,UNIT/N,INTERNAL/S,RES/S,VSTRING/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
VERSION finds the version and revision number of a library, device, command, or Workbench disk. VERSION can also test for a specific version/revision and set the condition flags if the version/revision is greater. This is useful in scripts.&lt;br /&gt;
&lt;br /&gt;
VERSION with no &amp;lt;library | device | file&amp;gt; argument prints the [[AmigaOS_Manual:_AmigaDOS_Glossary#KICKSTART|Kickstart]] version number and the [[AmigaOS_Manual:_AmigaDOS_Glossary#WORKBENCH|Workbench]] version number and sets the environment variables. If a name is specified, version attempts to open the library, device, drive, or file and read the version information.&lt;br /&gt;
&lt;br /&gt;
When a &amp;lt;version #&amp;gt; (and possibly a &amp;lt;revision #&amp;gt;) is specified, VERSION sets the condition flag to 0 if the version (and revision) number of the Kickstart, library, or device driver is greater than or equal to the specified values. Otherwise, the flag is set to 5 (WARN). (If a revision number is not specified, no comparison on the revision number is performed.)&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;unit #&amp;gt; option allows you to specify a unit number other than 0. This may be necessary for accessing multi-unit devices.&lt;br /&gt;
&lt;br /&gt;
The NAME may be a wildcard pattern, in which case VERSION will examine all files matching the pattern. If a version number is given, scanning will stop as soon as a file is found whose version number is smaller than the one specified.&lt;br /&gt;
&lt;br /&gt;
By default, only the name and the version number are printed. Further information might be available, such as the last modification time. To print it as well, use the FULL option.&lt;br /&gt;
&lt;br /&gt;
The FILE option makes the VERSION command ignore libraries and commands already loaded and specifically checks the named file instead (this is also the case if you use wildcard patterns with the NAME parameter).&lt;br /&gt;
&lt;br /&gt;
The VSTRING keyword requires a NAME parameter that is not a wildcard pattern. If version information can be found for the named object, it will be printed in the standard format; if no such information is available, an empty line will be printed instead. This feature is useful for script files.&lt;br /&gt;
&lt;br /&gt;
The INTERNAL and RES options are obsolete and are retained solely for the purpose of backwards compatibility with existing script files. Their original purpose was to restrict the search for commands to the internal shell command list or the list of currently resident commands.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; VERSION&lt;br /&gt;
 Kickstart 53.70 Workbench 53.16&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; VERSION SYS:Prefs/Font&lt;br /&gt;
 Font 53.6&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; VERSION C:Version VSTRING&lt;br /&gt;
 $VER: Version 53.10 (7.12.2016)&lt;br /&gt;
&lt;br /&gt;
== WAIT ==&lt;br /&gt;
&lt;br /&gt;
Waits for the specified time.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: WAIT [&amp;lt;n&amp;gt;] [SEC | SECS |MIN | MINS] [UNTIL &amp;lt;time&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: /N,SEC=SECS/S,MIN=MINS/S,UNTIL/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
WAIT is used in command sequences or after RUN to wait for a certain period of time or until a specific time. The default waiting period is one second.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;n&amp;gt; argument specifies the number of seconds or minutes to wait. These options are mutually exclusive; you can only enter seconds or minutes.&lt;br /&gt;
&lt;br /&gt;
Use the keyword UNTIL to wait until a particular time of the day, given in the format HH:MM.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; WAIT 10 MINS&lt;br /&gt;
&lt;br /&gt;
waits ten minutes.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; WAIT UNTIL 21:15&lt;br /&gt;
&lt;br /&gt;
waits until 9:15 p.m.&lt;br /&gt;
&lt;br /&gt;
== WAITFORPORT ==&lt;br /&gt;
&lt;br /&gt;
Wait for a public message port to appear.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: WAITFORPORT &amp;lt;name&amp;gt; [[TIMEOUT] &amp;lt;seconds&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NAME/A,TIMEOUT/N&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
WAITFORPORT waits 10 seconds for the specified message port to appear. A return code of 0 indicates that the port was found. A return code of 5 indicates that the application is not currently running or that the port does not exist.&lt;br /&gt;
&lt;br /&gt;
{{Note|Port names are case sensitive.}}&lt;br /&gt;
&lt;br /&gt;
You can choose how long WAITFORPORT will wait by using the TIMEOUT parameter.&lt;br /&gt;
&lt;br /&gt;
To stop WAITFORPORT waiting, use the BREAK command or press Ctrl-C while the shell window is active that belongs to the WAITFORPORT command.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Wait for the message port &amp;quot;ED_1&amp;quot; to appear; wait for up to 10 seconds:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; WAITFORPORT ED_1&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
Wait for 5 seconds for the message port &amp;quot;MyPort&amp;quot; to appear:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; WAITFORPORT MyPort TIMEOUT 5&lt;br /&gt;
&lt;br /&gt;
== WBINFO ==&lt;br /&gt;
&lt;br /&gt;
Opens Workbench information windows from a shell.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: WBINFO [&amp;lt;object&amp;gt; [&amp;lt;object&amp;gt;]...] [PUBSCREEN &amp;lt;public screen name&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILE=DRAWER=OBJECT/M/A,PUBSCREEN/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
WBINFO opens Workbench information windows from a shell. For each given object (file, drawer, or disk) it will create a separate process which in turn requests Workbench to bring up the Icon information requester. Please note that WBINFO has to wait for the last requester to be satisfied before it can end.&lt;br /&gt;
&lt;br /&gt;
The PUBSCREEN parameter allows to open the Icon information requesters on a named public screen.&lt;br /&gt;
&lt;br /&gt;
; Example:&lt;br /&gt;
 1&amp;gt; WBINFO SYS:Utilities/Clock&lt;br /&gt;
&lt;br /&gt;
[[File:DosFig6-5.png|center|frame|Icon Information Requester]]&lt;br /&gt;
&lt;br /&gt;
== WBRUN ==&lt;br /&gt;
&lt;br /&gt;
Runs programs from Shell as if they were executed from the Workbench.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: WBRUN &amp;lt;program&amp;gt; [&amp;lt;arg1&amp;gt; [| &amp;lt;arg2&amp;gt;...]] [SHOW=ICONS | ALL]&lt;br /&gt;
: [VIEWBY=ICON | NAME | DATE | SIZE | TYPE] [DELAY=&amp;lt;seconds&amp;gt;] [NOREQ]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: PROG/A,ARGS/M,SHOW/K,VIEWBY/K,DELAY/N/K,NOREQ/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
WBRUN will execute the program specified in argument, just like it would be if started from the WorkBench. So it will be exactly like if you double-clicked the program icon. It means that the processed program will be able to process WB messages.&lt;br /&gt;
&lt;br /&gt;
When you run a program on the WorkBench, you can make it handle other icons you have selected. You can do the same with WBRUN, passing the filenames as arguments.&lt;br /&gt;
&lt;br /&gt;
When used with a volume/directory name, WBRUN will open a volume/drawer window and display its content according to the SHOW and VIEWBY arguments.&lt;br /&gt;
&lt;br /&gt;
SHOW allows you to open a WB window displaying there only icons (default) if &amp;quot;ICONS&amp;quot; is defined, or all files i.e. even files with no icon, if &amp;quot;ALL&amp;quot; is defined.&lt;br /&gt;
&lt;br /&gt;
The VIEWBY argument allows you to define layout of the WB window that will be opened: either displaying ICON, or in list mode sorted by NAME, or sorted by DATE, or by size SIZE or by TYPE.&lt;br /&gt;
&lt;br /&gt;
Also, you can define a DELAY (in seconds) WBRUN will wait before executing the program in argument.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want the executed program to open a console window for any output it may produce, specify the NOREQ argument.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Running a picture viewer with some images as arguments&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; WBRUN Work:picviewer Image1.iff Image2.png&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
Opening the SYS: drawer in list mode with all files&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; WBRUN Sys: SHOW=all VIEWBY=name&lt;br /&gt;
&lt;br /&gt;
== WBSTARTUPCTRL ==&lt;br /&gt;
&lt;br /&gt;
Manipulates the startup configuration of Workbench.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: WBSTARTUPCTRL [PATH=&amp;lt;prefs file&amp;gt;] [ADD=&amp;lt;program&amp;gt;] [REMOVE=&amp;lt;program&amp;gt;] [QUIET]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: PATH/K,ADD/K,REMOVE/K,QUIET&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
WBSTARTUPCTRL allows manipulation of the configured startup modules that Workbench will load without having to open the WBStartup preferences editor.&lt;br /&gt;
        &lt;br /&gt;
The parameters that can be specified are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| PATH || This creates the updated preferences file at the location specified. This should be a path AND filename to save the file as. By default, it will use SYS:Prefs/Env-Archive/Sys/wbstartup.prefs.&lt;br /&gt;
|-&lt;br /&gt;
| ADD || This command will add the specified program to the internal list of modules that are executed when Workbench starts. This must be the full path to the program to add. If the file can not be found, an error message will be displayed.&lt;br /&gt;
|-&lt;br /&gt;
| REMOVE || This command removes the specified program from the internal list. The argument may contain the full path to the program to be removed, or if the path is not known, just the program name may be supplied and the list will be searched for a suitable match.&lt;br /&gt;
|-&lt;br /&gt;
| QUIET || Turn off any messages that may be output to the console.&lt;br /&gt;
|}&lt;br /&gt;
          &lt;br /&gt;
The use of the above parameters has been designed to allow installers or scripts to add or remove files from the configuration easily. Usually, when an installer has copied a program and its data, it will know the path that it has been copied to, and a simple call of this command with the correct arguments will add it to Workbench&#039;s list of programs to start.&lt;br /&gt;
        &lt;br /&gt;
Because the path may not be known when trying to remove a program from the list, the matching feature has been included. An addition or a removal will show a message to the standard output, which may be suppressed by using the QUIET switch.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
Under script control, the ContextMenus commodity may be added with a call like so:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; WBSTARTUPCTRL ADD SYS:Utilities/Commodities/ContextMenus&lt;br /&gt;
&lt;br /&gt;
This program will now be launched each time Workbench starts.&lt;br /&gt;
&lt;br /&gt;
; Example 2:        &lt;br /&gt;
A script may want to remove a program whose location is not known, like so:&lt;br /&gt;
        &lt;br /&gt;
 1&amp;gt; WBSTARTUPCTRL REMOVE MouseBlanker&lt;br /&gt;
&lt;br /&gt;
The first entry in the list that matches will be removed.&lt;br /&gt;
&lt;br /&gt;
== WHICH ==&lt;br /&gt;
&lt;br /&gt;
Searches the command path for a particular item.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: WHICH &amp;lt;command&amp;gt; [NORES] [RES] [ALL]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILE/A,NORES/S,RES/S,ALL/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
WHICH lets you find a specific command, program, or directory by entering its name. If the named item is in the search path, WHICH displays the complete path to that item. WHICH lists resident commands as RESIDENT and internal commands as INTERNAL.&lt;br /&gt;
&lt;br /&gt;
Normally, WHICH searches the resident list, the current directory, the command paths, and the C: directory. If the item is not found, WHICH sets the condition flag to 5 (WARN), but does not print any error message.&lt;br /&gt;
&lt;br /&gt;
If the NORES option is specified, the resident list is not searched. If the RES option is specified, only the resident list is searched.&lt;br /&gt;
&lt;br /&gt;
The ALL switch continues the search through the full search path, finding and listing all locations of a command or program. It can, however, lead to multiple listings of the same command if that command is reached by more than one route (such as C: and the current directory).&lt;br /&gt;
&lt;br /&gt;
; Examples:&lt;br /&gt;
 1&amp;gt; WHICH avail&lt;br /&gt;
 C:Avail&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; WHICH C:&lt;br /&gt;
 Workbench:C&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; WHICH alias&lt;br /&gt;
 INTERNAL alias&lt;br /&gt;
&lt;br /&gt;
== WHY ==&lt;br /&gt;
&lt;br /&gt;
Prints an error message explaining why the previous command failed.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: WHY&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: Internal&lt;br /&gt;
&lt;br /&gt;
When a command fails, the screen displays a brief message. This message typically includes the name of the file, if that was the problem, but provides no details. If the reason for a failure is not evident, enter WHY for a more complete explanation.&lt;br /&gt;
&lt;br /&gt;
== XAD2LHA ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XADLIBINFO ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XADLIST ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XADUNDISK ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XADUNF ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XADUNFILE ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XADUNFILEM ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XADUNTAR ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XBENCH ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XDIR ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XLOADSEG ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XPACK ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XPK ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XQUERY ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XSCAN ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XTYPE ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XUP ==&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Missing description.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System Commands =&lt;br /&gt;
&lt;br /&gt;
System commands are required for normal system operation. They are used by the standard Startup-sequence or called automatically by the system for applications. The user does not typically invoke these commands.&lt;br /&gt;
&lt;br /&gt;
== ADDDATATYPES ==&lt;br /&gt;
&lt;br /&gt;
Makes new datatypes available to the system.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: ADDDATATYPES [&amp;lt;datatype&amp;gt; [&amp;lt;datatype&amp;gt;...]] [QUIET] [REFRESH] [LIST]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FILES/M,QUIET/S,REFRESH/S,LIST/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
ADDDATATYPES can load datatype descriptors in memory. When they are loaded, applications can use them immediately.&lt;br /&gt;
&lt;br /&gt;
ADDDATATYPES can also be loaded from Workbench which allows using it as default tool in an icon of a datatype descriptor file in DEVS:DataTypes/ or SYS:Storage/DataTypes/.&lt;br /&gt;
&lt;br /&gt;
If the QUIET argument is used, or the local shell variable _Verbosity has a negative value, ADDDATATYPES will not display potential errors.&lt;br /&gt;
&lt;br /&gt;
If the REFRESH argument is used, any newly added datatype will be added to the datatype list in memory. It has the same effect as defining all datatype names in the command line.&lt;br /&gt;
&lt;br /&gt;
If the LIST argument is used, ADDDATATYPES will display the list of all datatypes in memory.&lt;br /&gt;
&lt;br /&gt;
; Example&lt;br /&gt;
Add two newly added datatypes to the datatype list:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ADDDATATYPES iff jpeg&lt;br /&gt;
&lt;br /&gt;
== BINDDRIVERS ==&lt;br /&gt;
&lt;br /&gt;
Binds device drivers to hardware.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: BINDDRIVERS&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: (none)&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
BINDDRIVERS loads and runs device drivers for add-on hardware. These devices are automatically configured by the expansion library if their device drivers are in the SYS:Expansion directory.&lt;br /&gt;
&lt;br /&gt;
The BINDDRIVERS command must appear in the Startup-sequence file to configure the hardware when the system is booted.&lt;br /&gt;
&lt;br /&gt;
== CONCLIP ==&lt;br /&gt;
&lt;br /&gt;
Enables or disables cut/copy/paste functionality in console windows and string gadgets&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: CONCLIP [[UNIT|CLIPUNIT] &amp;lt;unit number&amp;gt;] [ON|OFF]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: CLIPUNIT=UNIT/N,ON/S,OFF/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
Copy and paste operations in console windows will use the console&#039;s own private clipboard. While text can be exchanged between console windows, no other applications can access it. CONCLIP changes this by switching the console over to use the regular, system-wide clipboard functionality. Also, cut/copy/paste operations in string gadgets can be switched over to use the system-wide clipboard.&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| CLIPUNIT=&amp;lt;unit number&amp;gt; || Switch the clipboard unit number to use; default is 0.&lt;br /&gt;
|-&lt;br /&gt;
| ON and OFF || Turn the clipboard functionality either on or off.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPREFS ==&lt;br /&gt;
&lt;br /&gt;
Communicates Preferences information stored in the individual editor files to the operating system.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: IPREFS [NEWMOUSE]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: NEWMOUSE/S&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
IPREFS reads the individual system Preferences files and passes the information to the system so that it can adapt accordingly. IPREFS is generally run in the Startup-sequence. Each time a user selects Save or Use from within an editor, IPREFS is notified and passes the information along to the system. If necessary, IPREFS will reset Workbench in order to implement the requested changes. If any project or tool windows are open, IPREFS will display a requester asking you to close any non-drawer windows.&lt;br /&gt;
&lt;br /&gt;
If the NEWMOUSE command line option is specified, IPREFS generates NewMouse-style IECLASS_RAWKEY events for backwards compatibility to old applications that don&#039;t support standard AmigaOS mouse wheel events as introduced in Release 4.&lt;br /&gt;
&lt;br /&gt;
== LOADMONDRVS ==&lt;br /&gt;
&lt;br /&gt;
Starts the monitor drivers.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: LOADMONDRVS [FROM=&amp;lt;path&amp;gt;] [EXCEPT=&amp;lt;file name&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: FROM/K,EXCEPT&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
LOADMONDRVS starts the monitor drivers stored in the &amp;lt;path&amp;gt; directory. If the &amp;lt;path&amp;gt; argument is not given, drivers in the DEVS:Monitors directory will be started.&lt;br /&gt;
&lt;br /&gt;
By default LOADMONDRVS starts all the drivers that it can find from the drivers&#039; directory. To prevent LOADMONDRVS from starting a specific driver, use the EXCEPT parameter: &amp;lt;file name&amp;gt; is the name of the driver to be disabled.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
 1&amp;gt; LOADMONDRVS&lt;br /&gt;
&lt;br /&gt;
starts all the monitor drives stored in the DEVS:Monitors directory.&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
 1&amp;gt; LOADMONDRVS FROM=&amp;quot;SYS:Storage/Monitors&amp;quot;&lt;br /&gt;
&lt;br /&gt;
starts all the monitor drives stored in the SYS:Storage/Monitors directory.&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
 1&amp;gt; LOADMONDRVS EXCEPT=&amp;quot;VooDoo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
starts all the monitor drives stored in the DEVS:Monitors directory, except the VooDoo driver.&lt;br /&gt;
&lt;br /&gt;
== SETPATCH ==&lt;br /&gt;
&lt;br /&gt;
Makes ROM patches in system software.&lt;br /&gt;
&lt;br /&gt;
; Format&lt;br /&gt;
: SETPATCH [QUIET] [NOAGA] [NONSD] [PATCHCONFIGFILE=&amp;lt;NSDpatch file&amp;gt;]&lt;br /&gt;
: [PATCHCONFIGLINE=&amp;quot;PatchLine&amp;quot;] [PATCHINFO] [WAITFORVALIDATE]&lt;br /&gt;
: [ADDCHIPRAM=&amp;lt;Size in MB&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
; Template&lt;br /&gt;
: QUIET/S,NOAGA/S,NONSD/S,PATCHCONFIGFILE=PCF/K,PATCHCONFIGLINE=PCL/K,PATCHINFO=PI/S,WAITFORVALIDATE/S,ADDCHIPRAM/N/K&lt;br /&gt;
&lt;br /&gt;
; Location&lt;br /&gt;
: C:&lt;br /&gt;
&lt;br /&gt;
SETPATCH installs temporary modifications to the operating system. It must be executed at the beginning of the Startup-sequence file.&lt;br /&gt;
&lt;br /&gt;
By default SETPATCH enables the AGA video modes when running on an Amiga Classic with AGA chipset and the chipset was not disabled in the early startup menu. If you don&#039;t want to enable the AGA video modes, specify the NOAGA argument on the command line. When running on non-classic platforms, SETPATCH will not enable the AGA video modes (this may have happened already before) and the NOAGA argument has no effect.&lt;br /&gt;
&lt;br /&gt;
SETPATCH can patch devices that don&#039;t follow the NewStyleDevice (NSD) specification released by Amiga Inc. Patches will be applied according to the list in the Devs:NSDPatch.cfg file.&lt;br /&gt;
&lt;br /&gt;
Use the NONSD argument if you don&#039;t want to install patches for devices that are not NSD compliant.&lt;br /&gt;
&lt;br /&gt;
To use a device list other than Devs:NSDPatch.cfg, use the PATCHCONFIGFILE argument and specify the full name of your alternate file. It is also possible to apply a patch giving it as argument to SETPATCH after the PATCHCONFIGLINE keyword. Just specify a line with the same syntax as in the NSDpatch file. Note that a complete description of the patch format is located in the Devs:NSDPatch.cfg file.&lt;br /&gt;
&lt;br /&gt;
To display the patches applied by SETPATCH use the PATCHINFO argument.&lt;br /&gt;
&lt;br /&gt;
When a disk is validating (after a system crash for example) it can be annoying to boot the operating system while the filesystem is busy to fix the damaged partition. In this case, the boot process may be very slow. Use the WAITFORVALIDATE switch to ask SETPATCH to wait for the end of the validation process before proceeding. Doing so you are sure that you start the system with sane partitions. Note: Pressing Ctrl-C (when an input shell window is present) or both mouse buttons will abort waiting for disk validation.&lt;br /&gt;
&lt;br /&gt;
The ADDCHIPRAM option can be used on non-classic machines for backwards compatibility to old broken programs which peek system structures which were always declared as private, to be used by the operating system only. It installs an old-style MemHeader in SysBase-&amp;gt;MemList. Note: You don&#039;t need to activate this compatibility hack for programs which simply want to allocate some Chip RAM.&lt;br /&gt;
&lt;br /&gt;
By default, SETPATCH displays the operating system version and copyright as well as the list of applied patches. But if the QUIET argument is specified or the local shell variable _Verbosity has a negative value, no output will be produced.&lt;br /&gt;
&lt;br /&gt;
; Example 1:&lt;br /&gt;
&lt;br /&gt;
Don&#039;t apply NSD patches and wait the end of the validation process.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; SETPATCH NONSD WAITFORVALIDATE&lt;br /&gt;
&lt;br /&gt;
; Example 2:&lt;br /&gt;
&lt;br /&gt;
Applies only the patch on audio.device.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; SETPATCH PATCHCONFIGLINE=&amp;quot;DEVICE audio.device&lt;br /&gt;
 DEVICETYPE NSDEVTYPE_AUDIO VERSION 50 REVISION 5 ISNSD&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Example 3:&lt;br /&gt;
&lt;br /&gt;
Adds a MemHeader with 2MB Chip RAM as backwards compatibility hack for broken applications and suppresses the normal output.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; SETPATCH QUIET ADDCHIPRAM=2&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_AmigaDOS_Command_Examples&amp;diff=9943</id>
		<title>AmigaOS Manual: AmigaDOS Command Examples</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_AmigaDOS_Command_Examples&amp;diff=9943"/>
		<updated>2019-01-15T10:08:29Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Recursive AmigaDOS Command Scripts */ Fix typo that would prevent example script from working (Z: -&amp;gt; T:)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The command examples elsewhere in this book are primarily to illustrate the proper syntax and general operation of AmigaDOS. This chapter shows you how to use the commands needed for a wide variety of common tasks.&lt;br /&gt;
&lt;br /&gt;
The chapter is organized as follows:&lt;br /&gt;
&lt;br /&gt;
* Basic tasks&lt;br /&gt;
* Occasional tasks&lt;br /&gt;
* Advanced tasks&lt;br /&gt;
&lt;br /&gt;
= Basic Tasks =&lt;br /&gt;
&lt;br /&gt;
This section is oriented toward the novice Shell user, showing commands and short scripts to accomplish basic tasks. Use the commands shown as models for your own commands, substituting the names of your disks, directories, and files. To use the commands, type what appears after the prompt (usually 1&amp;gt;). Press Return to enter the command line you type.&lt;br /&gt;
&lt;br /&gt;
== Opening a Shell Window ==&lt;br /&gt;
&lt;br /&gt;
To open a Shell window from Workbench:&lt;br /&gt;
&lt;br /&gt;
# Open the System drawer on your Workbench disk or partition.&lt;br /&gt;
# Double-click on the Shell icon.&lt;br /&gt;
&lt;br /&gt;
OR&lt;br /&gt;
&lt;br /&gt;
# Choose the Execute Command... item from the Workbench menu.&lt;br /&gt;
# In the requester that appears, enter the command NEWSHELL.&lt;br /&gt;
&lt;br /&gt;
To open another Shell window from a Shell, enter the NEWSHELL command at a Shell prompt:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; NEWSHELL&lt;br /&gt;
&lt;br /&gt;
== Running Programs from the Shell ==&lt;br /&gt;
&lt;br /&gt;
To run a program that is on the search path, enter the program name at the prompt:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CLOCK&lt;br /&gt;
&lt;br /&gt;
To run a program that is not on the search path, enter the full path to the program:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; Tempus:Fugit/Utils/SuperClock&lt;br /&gt;
&lt;br /&gt;
To run a program that is not on the search path but is in a subdirectory of the current directory, enter the relative path to the program:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; Utils/SuperClock&lt;br /&gt;
&lt;br /&gt;
== Stopping a Program ==&lt;br /&gt;
&lt;br /&gt;
AmigaDOS commands and most Workbench programs started from the Shell can be exited, or stopped if currently running, by pressing Ctrl+C. This is important in case you need to abort a pattern matching DELETE, or to interrupt a directory listing or other lengthy process. Scripts can be stopped with Ctrl+D.&lt;br /&gt;
&lt;br /&gt;
To stop a command or program that is currently running:&lt;br /&gt;
&lt;br /&gt;
# Make the Shell window from which the command or program was started the current window by clicking in it.&lt;br /&gt;
# Press Ctrl+C.&lt;br /&gt;
&lt;br /&gt;
In some cases you may need to press Return after Ctrl+C to bring back the Shell prompt.&lt;br /&gt;
&lt;br /&gt;
To stop a script that is currently running:&lt;br /&gt;
&lt;br /&gt;
# Make the Shell window from which the script was started the current window by clicking in it.&lt;br /&gt;
# Press Ctrl+D.&lt;br /&gt;
&lt;br /&gt;
== Changing the Current Directory ==&lt;br /&gt;
&lt;br /&gt;
The current directory is normally part of the standard Shell prompt, as in 1.Workbench:&amp;gt;. In the following examples, notice the prompt to see how the current directory changes.&lt;br /&gt;
&lt;br /&gt;
To save typing, change the current directory to the one in which you are working.&lt;br /&gt;
&lt;br /&gt;
If you are issuing two or more commands that refer to things in a certain directory, make it the current directory using the CD command. The following two sets of commands both accomplish the same task:&lt;br /&gt;
&lt;br /&gt;
 1.Work:&amp;gt; COPY Storage/Keymaps/usa2 TO DEVS:Keymaps&lt;br /&gt;
 1.Work:&amp;gt; DELETE Storage/Keymaps/usa2&lt;br /&gt;
 &lt;br /&gt;
 1.Work:&amp;gt; CD Storage/Keymaps&lt;br /&gt;
 1.Storage:Keymaps&amp;gt; COPY usa2 TO DEVS:Keymaps&lt;br /&gt;
 1.Storage:Keymaps&amp;gt; DELETE usa2&lt;br /&gt;
&lt;br /&gt;
Entering the second set of commands instead of the first saves over a dozen keystrokes. This savings is even greater if further work in Storage/Keymaps is needed.&lt;br /&gt;
&lt;br /&gt;
To change the current directory with as little typing as possible, omit the CD command, and use the slash and colon to move though the directory structure:&lt;br /&gt;
&lt;br /&gt;
 1.Workbench:Devs/Monitors&amp;gt; /Printers&lt;br /&gt;
 1.Workbench:Devs/Printers&amp;gt; :Prefs/Presets&lt;br /&gt;
 1.Workbench:Prefs/Presets&amp;gt; /&lt;br /&gt;
 1.Workbench:Prefs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To switch quickly between two current directories, use the PCD script (located in the S: directory):&lt;br /&gt;
&lt;br /&gt;
 1.Workbench:&amp;gt; PCD Devs/DOSDrivers&lt;br /&gt;
 1.Workbench:Devs/DOSDrivers&amp;gt; Extras:Storage&lt;br /&gt;
 1.Extras:Storage&amp;gt; PCD&lt;br /&gt;
 1.Workbench:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see the current directory, if the Shell prompt does not show it, use the CD command alone:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CD&lt;br /&gt;
 Workbench:&lt;br /&gt;
&lt;br /&gt;
== Changing the Search Path ==&lt;br /&gt;
&lt;br /&gt;
To create a directory on the SYS: volume for additional commands and add it to the search path for the current Shell:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; MAKEDIR SYS:MyCommands&lt;br /&gt;
 1&amp;gt; PATH SYS:MyCommands ADD&lt;br /&gt;
&lt;br /&gt;
To add MyCommands to the search path, effective for the whole system, use an ASSIGN command instead of PATH:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ASSIGN C: SYS:MyCommands ADD&lt;br /&gt;
&lt;br /&gt;
To have the Amiga look for commands in a C directory on any disk inserted in drive DF0:, use ASSIGN with the PATH option:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ASSIGN C: DF0: C PATH &lt;br /&gt;
&lt;br /&gt;
== Displaying the Contents of a Directory ==&lt;br /&gt;
&lt;br /&gt;
To display the names of files and subdirectories in a directory use DIR:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; DIR DEVS:&lt;br /&gt;
 DataTypes (dir)&lt;br /&gt;
 Monitors (dir)&lt;br /&gt;
 DOSDrivers (dir)&lt;br /&gt;
 Keymaps (dir)&lt;br /&gt;
 Printers (dir)&lt;br /&gt;
 clipboard.device DataTypes.info&lt;br /&gt;
 DOSDrivers.info Keymaps.info&lt;br /&gt;
 mfm.device Monitors.info&lt;br /&gt;
 parallel.device postscript_init_ps&lt;br /&gt;
 printer.device Printers.info&lt;br /&gt;
 serial.device system-configuration&lt;br /&gt;
&lt;br /&gt;
To display the names of files, subdirectories, and files in the subdirectories in a directory, add the ALL keyword (a partial listing of the output is shown here):&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; DIR DEVS: ALL&lt;br /&gt;
 DataTypes (dir)&lt;br /&gt;
 8SVX 8SVX.info&lt;br /&gt;
 AmigaGuide AmigaGuide.info&lt;br /&gt;
 ANIM ANIM.info&lt;br /&gt;
 CDXL CDXL.info&lt;br /&gt;
 FTXT FTXT.info&lt;br /&gt;
 ILBM ILBM.info&lt;br /&gt;
 Monitors (dir)&lt;br /&gt;
 A2024 A2024.info&lt;br /&gt;
&lt;br /&gt;
To display the names of files only, with no directories, add the FILES keyword:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; DIR DEVS: FILES&lt;br /&gt;
 clipboard.device DataTypes.info&lt;br /&gt;
 DOSDrivers.info Keymaps.info&lt;br /&gt;
 mfm.device Monitors.info&lt;br /&gt;
 parallel.device postscript_init_ps&lt;br /&gt;
 printer.device Printers.info&lt;br /&gt;
 serial.device system-configuration&lt;br /&gt;
&lt;br /&gt;
To display the names of files only, without .info files, use pattern matching:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; DIR DEVS:~ (#?.info) FILES&lt;br /&gt;
 clipboard.device mfm.device&lt;br /&gt;
 parallel.device postscript_init_ps&lt;br /&gt;
 printer.device serial.device&lt;br /&gt;
 system-configuration&lt;br /&gt;
&lt;br /&gt;
To display information about files that includes their size and protection bits, without date and time, use LIST with the FILES and NODATES keywords:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; LIST DEVS:~ (#?.info) FILES NODATES&lt;br /&gt;
 clipboard.device 6944 ----rw-d&lt;br /&gt;
 mfm.device 6684 ----rw-d&lt;br /&gt;
 parallel.device 4272 ----rw-d&lt;br /&gt;
 postscript_init_ps 5014 ----rw-d&lt;br /&gt;
 printer.device 27420 ----rw-d&lt;br /&gt;
 serial.device 5412 ----rw-d&lt;br /&gt;
 system-configuration 232 ----rw-d&lt;br /&gt;
&lt;br /&gt;
To display information about a single file, use LIST with the path on the file:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; LIST S:Startup-sequence&lt;br /&gt;
 Directory &amp;quot;S:&amp;quot; on Tuesday 01-Dec-92&lt;br /&gt;
 Startup-sequence 1360 -s--rw-d 30-Oct-92 12:00:21&lt;br /&gt;
 1 file - 4 blocks used&lt;br /&gt;
&lt;br /&gt;
To display the amount of space used by a directory and its contents, including all files in subdirectories, use the ALL keyword:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; LIST ALL&lt;br /&gt;
&lt;br /&gt;
After the contents of the current directory are listed, a summary line such as the following is displayed:&lt;br /&gt;
&lt;br /&gt;
 TOTAL: 113 files - 762 blocks used&lt;br /&gt;
&lt;br /&gt;
Divide the number of blocks by two to get the number of kilobytes (KB).&lt;br /&gt;
&lt;br /&gt;
To see information from LIST, DIR, or other commands that have scrolled off the Shell window:&lt;br /&gt;
&lt;br /&gt;
Select the Shell window&#039;s zoom gadget once to switch to its alternate size, which normally fills the screen. As much of the previous output as fits fills the window. Select zoom again to restore the window to its previous size.&lt;br /&gt;
&lt;br /&gt;
If the window&#039;s maximum height is not large enough to reveal the desired output, reissue the command by pressing the up arrow and then Return. Pause and resume the scrolling of the output when necessary by pressing the spacebar and backspace, respectively.&lt;br /&gt;
&lt;br /&gt;
To combine the CD and DIR commands:&lt;br /&gt;
&lt;br /&gt;
Create the following script and save it as S:CDD. (For an example of how to create a script, see &amp;quot;Creating a User-startup File&amp;quot; on page 8-8.)&lt;br /&gt;
&lt;br /&gt;
 .KEY dirpath&lt;br /&gt;
 CD &amp;lt;dirpath&amp;gt;&lt;br /&gt;
 DIR&lt;br /&gt;
&lt;br /&gt;
Set the script&#039;s protection bit by entering PROTECT S:CDD +s. Then whenever you enter CDD followed by the path to a directory, this script makes that directory the current directory and lists its contents.&lt;br /&gt;
&lt;br /&gt;
== Copying Files and Directories ==&lt;br /&gt;
&lt;br /&gt;
When copying a single file from one place to another, you need to include only the paths for each. FROM and TO keywords are optional. For clarity, most COPY examples in this book use the TO keyword, but omit the FROM keyword.&lt;br /&gt;
&lt;br /&gt;
To copy a file to an existing directory using optional keywords:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; COPY FROM DF0: Pix/Fractal3 TO Work:Pictures&lt;br /&gt;
&lt;br /&gt;
To copy the file omitting optional keywords:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; COPY DF0: Pix/Fractal3 Work:Pictures&lt;br /&gt;
&lt;br /&gt;
To copy a file and rename it at the same time, include the new file name in the TO argument:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; COPY DF0: Pix/Fractal3 TO Work:Pictures/BestPic&lt;br /&gt;
&lt;br /&gt;
To copy all the files in a directory to another directory, without copying the directory itself or the subdirectories it contains:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; COPY DF0:Pix TO Work:Pictures&lt;br /&gt;
&lt;br /&gt;
The contents of DF0:Pix are deposited in Work:Pictures, not grouped in their own directory. If Pix contained directories, they are not copied, but any .info files for drawers Pix contained are copied, making it appear at first that the drawers were copied.&lt;br /&gt;
&lt;br /&gt;
To copy all the files in a directory to another directory, copying the directory itself but not the subdirectories it contains:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; COPY DF0:Pix TO Work:Pictures/Pix&lt;br /&gt;
&lt;br /&gt;
The directory Pix is created in Work:Pictures if it does not already exist. The destination directory does not have to be the same name as the source; you can copy to Work:Pictures/Fractals, for example.&lt;br /&gt;
&lt;br /&gt;
To copy a complete directory and its contents to another directory, use the ALL keyword:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; COPY DF0:Pix TO Work:Pictures/Pix ALL&lt;br /&gt;
&lt;br /&gt;
Work:Pictures/Pix is a duplicate of DF0:Pix.&lt;br /&gt;
&lt;br /&gt;
To copy only certain files to another directory, use pattern matching if their names are similar:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; COPY DF0:Pix/Fractal[3-7] TO Work:Pictures/Pix&lt;br /&gt;
&lt;br /&gt;
Files in DF0:Pix with names beginning in Fractal and ending in the digits 3 through 7 are copied.&lt;br /&gt;
&lt;br /&gt;
To copy specific files to another directory, include all the file names. Change to the source directory first to avoid having to enter the full path for each:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; CD DF0:Pix&lt;br /&gt;
 1&amp;gt; COPY Fractal3 Julia Dragon TO Work:Pictures/Pix&lt;br /&gt;
&lt;br /&gt;
When copying more than one file at once without using the TO keyword, COPY excepts the last name to be the destination directory. With whole-directory, multiple-file, and pattern matching operations, COPY outputs the names of the files copied and directories created as it executes.&lt;br /&gt;
&lt;br /&gt;
== Creating a User-startup File ==&lt;br /&gt;
&lt;br /&gt;
A User-startup file is the Shell equivalent of the Workbench WBStartup drawer. It is a text file that is executed as a script by the default Startup-sequence. Place here any configuration commands, such as ASSIGNs, and the names of programs you wish to run automatically whenever you boot.&lt;br /&gt;
&lt;br /&gt;
To create a User-startup file:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; RUN ED S:User-startup&lt;br /&gt;
&lt;br /&gt;
After the ED window opens, enter the commands you want on subsequent lines. For example, you can add some cache buffers to speed floppy access, add a directory of custom commands to the path, and start the screen blanker, by entering these lines:&lt;br /&gt;
&lt;br /&gt;
 ADDBUFFERS &amp;gt;NIL: DF0: 25&lt;br /&gt;
 PATH &amp;gt;NIL: SYS:MyCommands ADD&lt;br /&gt;
 RUN Blanker CX_POPUP=NO SECONDS=600 ANIMATION=YES&lt;br /&gt;
&lt;br /&gt;
Then save the file and exit by pressing Esc,X,Return. The next time you boot or reboot, these commands are executed. When you have more commands to add, edit the file by entering RUN ED S:User-startup again.&lt;br /&gt;
&lt;br /&gt;
== Creating an Assignment ==&lt;br /&gt;
&lt;br /&gt;
On a floppy-only system, a requester similar to that illustrated in Figure 8-1 usually means that you need to insert the named floppy disk.&lt;br /&gt;
&lt;br /&gt;
[[File:DosFig8-1.png|center|frame|Command Sample System Requester]]&lt;br /&gt;
&lt;br /&gt;
The most likely reason for this requester on a hard disk system, aside from entering a command with a misplaced colon (:), is that an application you are running requires an assignment to be made with the ASSIGN command. This is often done for you by an installation program, but not all applications have an installation program or one that works correctly for all systems.&lt;br /&gt;
&lt;br /&gt;
The assignment tells the application to look on your hard drive instead of a floppy drive for things it needs. If the application is one you use regularly, you should place the ASSIGN statement in your User-startup. When the requester first comes up, however, you can enter the assignment in the Shell and then select the requester&#039;s Retry gadget.&lt;br /&gt;
&lt;br /&gt;
To allow you to continue your work with a program installed from a disk called ProFusion to the Work:volume, enter the statement:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ASSIGN ProFusion: Work:ProFusion&lt;br /&gt;
&lt;br /&gt;
where the first argument is the volume requested, followed by a colon, and the second argument is the device and directory where ProFusion is installed. Click the Retry gadget after entering the command. If the statement is correct, your application works properly and you should add the statement you entered to your User-startup. If it does not work, the second argument needs to be modified.&lt;br /&gt;
&lt;br /&gt;
== Accessing the Expanded ED Menus ==&lt;br /&gt;
&lt;br /&gt;
The default S:Ed-startup file sets up a series of menus for the ED text editor. There is also an expanded set of menus that is built into ED, containing more options. You can make these available by renaming Ed-startup, which prevents it form being executed.&lt;br /&gt;
&lt;br /&gt;
To allow access to the expanded ED menus, enter the following command:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; RENAME S:Ed-startup TO S:Ed-startup.not &lt;br /&gt;
&lt;br /&gt;
== Working with a Single Shell ==&lt;br /&gt;
&lt;br /&gt;
Although you can open several independent Shell windows at once, you may wish to avoid cluttering the Workbench screen with several windows. Starting a program from a Shell normally takes over that Shell window while the program is running, forcing you to open another Shell to enter additional commands. Use the following techniques to avoid this and allow any number of programs to run from a single Shell.&lt;br /&gt;
&lt;br /&gt;
To run a program in the background so that the Shell window prompt returns, use the RUN command:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; RUN DMC OPT def RHYME on&lt;br /&gt;
 [CLI 2]&lt;br /&gt;
 1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The message in square brackets indicates the number of the new process started to run the program. The prompt returns immediately.&lt;br /&gt;
&lt;br /&gt;
Even when a program is run this way, the Shell window cannot be closed until all programs started from it are exited. To avoid this, you can detach the program using redirection.&lt;br /&gt;
&lt;br /&gt;
To detach a program, RUN it, adding output redirection to the NIL: device:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; RUN &amp;gt;NIL: MultiView 8SVX/Sample&lt;br /&gt;
 [CLI 2]&lt;br /&gt;
 1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can now close the Shell window if necessary.&lt;br /&gt;
&lt;br /&gt;
{{Note|Redirection to NIL: also prevents any console output the program produces from appearing in the Shell window.}}&lt;br /&gt;
&lt;br /&gt;
== Attaching Icons ==&lt;br /&gt;
&lt;br /&gt;
To attach an icon to a file or directory, you can create an icon with the IconEdit tool. However, it is often easier just to copy an existing icon with a Shell command.&lt;br /&gt;
&lt;br /&gt;
You must copy a .info file of the right icon type, giving it a name that matches the file or directory to which you are attaching it plus the .info extension. If necessary, use the Information menu item to adjust the Default Tool of a copied Project icon, or the Tool Types of a copied Tool icon, as appropriate for the file.&lt;br /&gt;
&lt;br /&gt;
{{Note|The capitalization of the name under the icon matches that given in the COPY command, regardless of the capitalization of the associated file or directory.}}&lt;br /&gt;
&lt;br /&gt;
To attach an icon to a file called PCX in the DataTypes directory, copy the .info file of an existing DataType in the directory:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; COPY DataTypes/ILBM.info TO DataTypes/PCX.info&lt;br /&gt;
&lt;br /&gt;
An icon titled PCX appears in the DataTypes window when you open it or choose Update from the Window menu.&lt;br /&gt;
&lt;br /&gt;
{{Note| If the icon you copy is snapshotted, the new icon retains the original icon&#039;s position and appears directly on top of it. Drag the new icon on a different position and Snapshot it to keep the two icons separate.}}&lt;br /&gt;
&lt;br /&gt;
To attach a custom icon to a disk called VidTools, copy the desired disk-type .info file to the root directory of the disk, giving it the name disk.info:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; COPY SYS:disk.info TO VidTools:disk.info&lt;br /&gt;
&lt;br /&gt;
You must eject and reinsert the disk or reboot for a new disk icon to appear on the Workbench.&lt;br /&gt;
&lt;br /&gt;
== Creating Scripts Conveniently ==&lt;br /&gt;
&lt;br /&gt;
To make creating and editing scripts easier:&lt;br /&gt;
&lt;br /&gt;
Create a script containing the following lines, and save it as S:Edscr. (For an example of how to create a script, see &amp;quot;Creating a User-startup File&amp;quot; on page 8-8.)&lt;br /&gt;
&lt;br /&gt;
 .KEY script/A&lt;br /&gt;
 ED S:&amp;lt;script&amp;gt;&lt;br /&gt;
 FAILAT 11&lt;br /&gt;
 IF EXISTS S:&amp;lt;script&amp;gt;&lt;br /&gt;
    PROTECT S:&amp;lt;script&amp;gt; srwd&lt;br /&gt;
 ENDIF&lt;br /&gt;
&lt;br /&gt;
Set the script&#039;s protection bit by entering PROTECT S:Edscr srwd. Now using Edscr you can create and edit scripts without having to decide where to put them or remember to set their s bit. Just enter Edscr followed by the name of a script.&lt;br /&gt;
&lt;br /&gt;
When you save and exit from ED, the script you worked on is saved in the S: directory under the name you gave. Its s protection bit is set automatically so that you can run the script from a Shell without needing the EXECUTE command.&lt;br /&gt;
&lt;br /&gt;
= Occasional Tasks =&lt;br /&gt;
&lt;br /&gt;
Tasks in this section are used les often, but almost every user needs to do these things at some time. These examples assume a certain amount of familiarity with AmigaDOS and the Shell.&lt;br /&gt;
&lt;br /&gt;
== Creating Aliases To Reduce Keystrokes ==&lt;br /&gt;
&lt;br /&gt;
The aliases listed below can help speed your Shell work by reducing the number of keystrokes required for common commands.&lt;br /&gt;
&lt;br /&gt;
To enable these as global aliases, edit S:Shell-startup as described previously for User-startup, adding these lines:&lt;br /&gt;
&lt;br /&gt;
 ALIAS c0 CD DF0:&lt;br /&gt;
 ALIAS cs CD SYS:&lt;br /&gt;
 ALIAS css CD S:&lt;br /&gt;
 ALIAS d0 DIR DF0:&lt;br /&gt;
 ALIAS dr DIR RAM:&lt;br /&gt;
 ALIAS qdir DIR ~ (#?.info)&lt;br /&gt;
 ALIAS 1s LIST&lt;br /&gt;
 ALIAS cp COPY&lt;br /&gt;
 ALIAS cc COPY [] CLONE&lt;br /&gt;
 ALIAS del DELETE&lt;br /&gt;
 ALIAS ren RENAME&lt;br /&gt;
 ALIAS ns NEWSHELL&lt;br /&gt;
 ALIAS es ENDSHELL&lt;br /&gt;
 ALIAS pf printfiles&lt;br /&gt;
 ALIAS fmt0 FORMAT DRIVE DF0: NAME [] FFS NOICONS DIRCACHE&lt;br /&gt;
 ALIAS edus RUN ED S:User-startup&lt;br /&gt;
 ALIAS edsh RUN ED S:Shell-startup&lt;br /&gt;
 ALIAS ednew RUN ED RAM:newfile&lt;br /&gt;
 ALIAS chip ECHO &amp;quot;There are `avail chip` bytes of Chip memory free.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Modify the alias names as desired. Use these as models for your own aliases.&lt;br /&gt;
&lt;br /&gt;
== Customizing NEWSHELL ==&lt;br /&gt;
&lt;br /&gt;
You can control the Shell window with the WINDOW argument of the NEWSHELL command. It allows you to specify custom sizes, positions, and features for the Shell window. Following are two examples of different window specifications.&lt;br /&gt;
&lt;br /&gt;
To open a convenient Shell window on your Workbench screen, enter the following command in a Shell or as a line in User-startup:&lt;br /&gt;
&lt;br /&gt;
 NEWSHELL CON://400/100/Ashell/CLOSE/ALT0/12/640/388&lt;br /&gt;
&lt;br /&gt;
This creates a small Shell window titled AShell that leaves the left side of the Workbench window clear so that disk icons are not obscured. It has a close gadget and, on a High-Res Interlace screen, it expands to fill the entire screen for the screen title bar when you select its zoom gadget.&lt;br /&gt;
&lt;br /&gt;
To open a Shell window on a public screen, such as telecommunication program&#039;s terminal screen, use a window specification with the SCREEN option:&lt;br /&gt;
&lt;br /&gt;
 CON:0/20//???/CLOSE/SCREENTerm&lt;br /&gt;
&lt;br /&gt;
This creates a Shell window called ??? that is near the top of the screen and is as wide and short as possible. The window opens on a public screen named Term, if that screen is available. It it is not, the Shell opens on the Workbench screen.&lt;br /&gt;
&lt;br /&gt;
== Modifying the Prompt ==&lt;br /&gt;
&lt;br /&gt;
The Shell prompt is easily modified using the PROMPT command. You can add any fixed text to the prompt string and include, reorder, or leave out the substitution operators that display the process number, current directory, and return code. Placing escape sequences in the prompt string lets you make the prompt stand out visually from the command line and command output. You can also embed a command in the prompt with the back apostrophe feature.&lt;br /&gt;
&lt;br /&gt;
Figure 8-2 illustrates two ways of modifying the prompt. The first uses escape sequences to produce a boldface, color 2 (white) prompt; see Appendix D for a listing of escape sequences. The second shifts the usual position of the substitution operators, embeds a DATE command using the back apostrophe, and changes the final character to a dollar sign ($).&lt;br /&gt;
&lt;br /&gt;
[[File:DosFig8-2.png|center|frame|Sample Uses of PROMPT Command]]&lt;br /&gt;
&lt;br /&gt;
== Creating a Custom Ram Disk Icon ==&lt;br /&gt;
&lt;br /&gt;
To have a custom icon for the Ram Disk, you need to place a COPY statement in User-startup. First, create the icon in IconEdit. Make sure it is a Disk type icon, then save it on your boot disk as DEVS:Ramdisk.info.&lt;br /&gt;
&lt;br /&gt;
{{Note|This example uses the DEVS: directory, but it does not matter where you store this icon. It is not visible, even in Show All Files mode, because Disk icons are visible only in the Workbench window.}}&lt;br /&gt;
&lt;br /&gt;
To make your custom Ram Disk icon appear in the Workbench window, enter this line in the S:User-startup file, save the changed file, and reboot:&lt;br /&gt;
&lt;br /&gt;
 COPY DEVS:Ramdisk.info TO RAM:disk.info&lt;br /&gt;
&lt;br /&gt;
If you also want to rename Ram Disk, include a RELABEL statement in User-startup after the COPY statement, such as:&lt;br /&gt;
&lt;br /&gt;
 RELABEL RAM:ramname&lt;br /&gt;
&lt;br /&gt;
== Deleting Files with Icons ==&lt;br /&gt;
&lt;br /&gt;
To delete a file that has an icon and the file&#039;s.info file with a single command:&lt;br /&gt;
&lt;br /&gt;
1. Create and save the following script as S:Delinf:&lt;br /&gt;
&lt;br /&gt;
 .KEY file/A&lt;br /&gt;
 DELETE &amp;lt;file&amp;gt; &amp;lt;file&amp;gt;.info QUIET&lt;br /&gt;
&lt;br /&gt;
2. Enter EXECUTE Delinf with the name of the file as its argument.&lt;br /&gt;
&lt;br /&gt;
== Testing Commands ==&lt;br /&gt;
&lt;br /&gt;
It is sometimes necessary to test the results of certain commands before using them on actual files. This is particularly true when using complex pattern matching with potentially destructive commands, such as DELETE, or escape sequences, with which it can be difficult to predict the outcome. There are various ways of testing commands that are quick and safe.&lt;br /&gt;
&lt;br /&gt;
To test a potentially destructive pattern matching command:&lt;br /&gt;
&lt;br /&gt;
# Enter a non-destructive command such as LIST containing the pattern. For example,&amp;lt;br/&amp;gt;LIST ~ (#?.info|#?.c| [0-9]#?)&lt;br /&gt;
# Check the output to see whether the intended files were matched.&lt;br /&gt;
# Modify the pattern if necessary and repeat the command until the command lists only the desired files.&lt;br /&gt;
# Enter the intended command, using the same pattern.&lt;br /&gt;
&lt;br /&gt;
To test the effects of escape sequences:&lt;br /&gt;
&lt;br /&gt;
# Enter an ECHO command containing the escape sequences and an example word. For example,&amp;lt;br/&amp;gt;ECHO &amp;quot;*E[1mBOLD*E[Om&amp;quot;&lt;br /&gt;
# Check to see whether the output is as intended.&lt;br /&gt;
# Modify the escape sequences if necessary and repeat the command until the desired result appears.&lt;br /&gt;
# Use the escape sequences in the intended command, such as PROMPT.&lt;br /&gt;
&lt;br /&gt;
To clear the window and reset all escape sequence modes to the defaults, enter:&lt;br /&gt;
&lt;br /&gt;
 Esc,c,Return&lt;br /&gt;
&lt;br /&gt;
You must use a lower case c. After the window is cleared and reset, the Shell displays a harmless :Unknown command message on the window&#039;s top line.&lt;br /&gt;
&lt;br /&gt;
To create a test file in the Ram Disk, enter:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ECHO &amp;quot;This is only a test&amp;quot; TO RAM:foo&lt;br /&gt;
&lt;br /&gt;
This provides a small, expendable file on which to test other commands. It is best to create such files in RAM:, to avoid cluttering your disks with small, useless files. Traditionally, files like this are named &amp;quot;foo&amp;quot; or &amp;quot;bar.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
To test commands safely on actual files, copy the files to a directory in the Ram Disk and test with those files:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; COPY Work:MyFiles/#? TO RAM:Testdir&lt;br /&gt;
&lt;br /&gt;
== Creating a Script to Move Files ==&lt;br /&gt;
&lt;br /&gt;
AmigaDOS does have a Move command which normally should be used to move files. There are two other ways of moving a file with AmigaDOS: a RENAME command or a combination of COPY and DELETE commands.&lt;br /&gt;
&lt;br /&gt;
Using RENAME to move a file is possible only when moving the file to a destination on the same volume. Attempting to rename across devices causes an error. The copy-and-delete method works in any situation, but is cumbersome.&lt;br /&gt;
&lt;br /&gt;
To create a Move command that lets you move a file within or across devices with a single command, create a script with the following commands:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; RUN ED S:Move+&lt;br /&gt;
 PROTECT S:Move swrd&lt;br /&gt;
&lt;br /&gt;
Enter these commands in the ED window:&lt;br /&gt;
&lt;br /&gt;
 .KEY source/A, to/A&lt;br /&gt;
 .BRA {&lt;br /&gt;
 .KET }&lt;br /&gt;
 FAILAT 21&lt;br /&gt;
 RENAME &amp;gt;NIL: {source} TO {to}&lt;br /&gt;
 IF WARN&lt;br /&gt;
    COPY {source} TO {to}&lt;br /&gt;
    IF WARN&lt;br /&gt;
       ECHO &amp;quot;The file {source} could not be moved.&amp;quot;&lt;br /&gt;
       QUIT 20&lt;br /&gt;
    ENDIF&lt;br /&gt;
    DELETE {source} QUIET&lt;br /&gt;
 ENDIF&lt;br /&gt;
 ECHO {source} &amp;quot;has been moved to&amp;quot; {to}&lt;br /&gt;
&lt;br /&gt;
Save the script and exit ED. The s protection bit is automatically set after you exit.&lt;br /&gt;
&lt;br /&gt;
Use this script the same as you would use a command. Enter MOVE followed by two arguments: the current path of the file to move and the path to the desired location.&lt;br /&gt;
&lt;br /&gt;
== Deleting with Interactive DIR ==&lt;br /&gt;
&lt;br /&gt;
The DIR command has an interactive mode that pauses after each file or directory it lists and allows you to enter one of several simple commands. One option is to delete the item, which can be useful in certain situations.&lt;br /&gt;
&lt;br /&gt;
For example, if you accidentally name a file #? (the wildcard combination that matches anything), attempting to delete it through normal methods is inadvisable. This is because DELETE #? Deletes everything in the directory, including any other valuable files that are there.&lt;br /&gt;
&lt;br /&gt;
The interactive DIR can solve this problem and be used as a general-purpose query/delete tool. This is helpful when you have a large directory containing many items to delete, but the file names do not have enough in common to make a pattern matching DELETE practical.&lt;br /&gt;
&lt;br /&gt;
To delete various files on a disk called Debris safely with an interactive DIR, enter:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; DIR Debris: INTER&lt;br /&gt;
&lt;br /&gt;
DIR lists the names of the files in Debris alphabetically one by one, each followed by a question mark prompt. Press Return to go to the next file or E to enter a directory. When the name of an unwanted file appears, enter DEL to delete the file. Enter Q to leave the interactive DIR.&lt;br /&gt;
&lt;br /&gt;
== Generating Scripts with LIST LFORMAT ==&lt;br /&gt;
&lt;br /&gt;
One of the prime uses of the LIST command&#039;s LFORMAT option is for automatically creating scripts used to process a series of files. You can produce a raw script using a LIST statement with LFORMAT, a TO argument to redirect the LIST output to a file, and pattern matching. You can then view the script and edit it manually if necessary before executing it.&lt;br /&gt;
&lt;br /&gt;
To create a script that renames all the files in the current directory, adds the extension .IFF to their present file names, and places them in a directory called Paintfiles in the Work partition:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; LIST #? TO T:renamer LFORMAT=&amp;quot;RENAME %P%N TO Work:Paintfiles/%N.IFF&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enter ED T:renamer to check the script, which should resemble the following. If the match pattern lists files that you did not want processed or your LFORMAT string does not work as expected, you can edit the script or modify and reenter the command.&lt;br /&gt;
&lt;br /&gt;
 RENAME Paint:Vince TO Work:Paintfiles/Vince.IFF&lt;br /&gt;
 RENAME Paint:Henro TO Work:Paintfiles/Henri.IFF&lt;br /&gt;
 RENAME Paint:Paul TO Work:Paintfiles/Paul.IFF&lt;br /&gt;
 RENAME Paint:Pablo TO Work:Paintfiles/Pablo.IFF&lt;br /&gt;
 RENAME Paint:Andy TO Work:Paintfiles/Andy.IFF&lt;br /&gt;
&lt;br /&gt;
When the script is correct, leave ED and enter EXECUTE T:renamer .&lt;br /&gt;
&lt;br /&gt;
See the &amp;quot;Recursive AmigaDOS Command Script&amp;quot; example for a more advanced use of LIST LFORMAT.&lt;br /&gt;
&lt;br /&gt;
== Customizing LIST Output ==&lt;br /&gt;
&lt;br /&gt;
You can also use LFORMAT to customize the output of LIST for special purposes. Save the line as an alias to make it easier to use in the future.&lt;br /&gt;
&lt;br /&gt;
To create an alias for LIST that displays information only on files created since the date you enter, with the date first and protection bits and time omitted:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; ALIAS lsince LIST FILES SINCE [] LFORMAT=&amp;quot;%D%-25N %L&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If the current directory is S:, the output of lsince 01-sep-92 would be similar to this:&lt;br /&gt;
&lt;br /&gt;
 19-Oct-92 PCD 715&lt;br /&gt;
 30-Nov-92 Startup-sequence 1360&lt;br /&gt;
 Friday Shell-startup 671&lt;br /&gt;
 Yesterday User-startup 609 &lt;br /&gt;
&lt;br /&gt;
== Using ICONX to Run Scripts ==&lt;br /&gt;
&lt;br /&gt;
If you prefer to work with the mouse whenever possible or you are setting up an Amiga for a Workbench-only user, ICONX is useful. Using C:ICONX as the Default Tool of a project icon lets you run a script (or a command that lacks a Workbench interface) from the icon. It lets you start the script by opening the icon, as if the script were a standard Workbench tool.&lt;br /&gt;
&lt;br /&gt;
There are also advantages to starting programs this way for the advanced user, including scripting preparatory steps (such as loading special Preferences presets) before launching a program and allowing the program&#039;s task priority to be changed easily. The following example demonstrates these techniques.&lt;br /&gt;
&lt;br /&gt;
To start an application called OldApp from an ICONX icon, first loading a special Preferences font preset, and adjusting the application&#039;s task priority, create this script for the icon:&lt;br /&gt;
&lt;br /&gt;
 CD SYS:&lt;br /&gt;
 Prefs/Font FROM SYS:Prefs/Presets/defscrn.pre USE&lt;br /&gt;
 CHANGETASKPRI -1&lt;br /&gt;
 OldApp &lt;br /&gt;
&lt;br /&gt;
== Preventing Displayable Output From Scripts ==&lt;br /&gt;
&lt;br /&gt;
In scripts, you often want to execute a command without the command displaying its usual Shell output. This can prevent an unnecessary series of messages or keep an output window from opening at an inopportune time.&lt;br /&gt;
&lt;br /&gt;
To prevent all console output, redirect command output to a dummy destination with the &amp;gt;NIL: argument:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; DELETE &amp;gt;NIL: T:Tempfile&lt;br /&gt;
&lt;br /&gt;
The &amp;gt;NIL: argument prevents the printing of the message T:Tempfile Deleted , or any error messages.&lt;br /&gt;
&lt;br /&gt;
To prevent console output except for error messages, use the QUIET option with those commands that support it:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; DELETE T:Tempfile QUIET&lt;br /&gt;
&lt;br /&gt;
The T:Tempfile Deleted message is not printed; however, if T:Tempfile does not exist, the No file to delete message appears.&lt;br /&gt;
&lt;br /&gt;
== Entering and Testing ARexx Macros ==&lt;br /&gt;
&lt;br /&gt;
To make entering and testing ARexx macros simpler:&lt;br /&gt;
&lt;br /&gt;
Enter the following AmigaDOS script and save it as S:Edrx:&lt;br /&gt;
&lt;br /&gt;
 .KEY mac&lt;br /&gt;
 ED REXX:&amp;lt;mac&amp;gt;.rexx&lt;br /&gt;
 PROTECT S:&amp;lt;mac&amp;gt;.rexx +S-E&lt;br /&gt;
 RX REXX:&amp;lt;mac&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use this script when experimenting with ARexx macros. Enter Edrx followed bythe name of the macro. Edrx invokes the editor without you having to type in the .rexx extension and directly calls the ARexx interpreter RX with your macro as an argument when you exit.&lt;br /&gt;
&lt;br /&gt;
== Sorting and Joining Files ==&lt;br /&gt;
&lt;br /&gt;
If you regularly capture a list of new files each time you log on to a telecommunications service, you might want to add them to a list of existing files and sort all the entries by date. Each file name has the same prefix and a suffix that reflects the date, such as NewFiles.921009 for the list of files on October 9, 1992.&lt;br /&gt;
&lt;br /&gt;
To create a single list of the files, sorted by date, use a pattern matching JOIN and SORT:&lt;br /&gt;
&lt;br /&gt;
 JOIN NewFiles.#? TO RAM.Temp.joined&lt;br /&gt;
 SORT RAM:Temp.joined TO NewFiles.sorted&lt;br /&gt;
 DELETE RAM:Temp.joined &lt;br /&gt;
&lt;br /&gt;
= Advanced Tasks =&lt;br /&gt;
&lt;br /&gt;
The following examples illustrate advanced tasks for users who are quite familiar with AmigaDOS.&lt;br /&gt;
&lt;br /&gt;
== Testing Software Versions ==&lt;br /&gt;
&lt;br /&gt;
You might need to control what a script does depending on which software version a user of the script has. It is easy to test for specific version numbers from a script.&lt;br /&gt;
&lt;br /&gt;
To test whether a script is running on an Amiga with Release 4 level system software, preface the version-dependent portion of the script with a sequence similar to this:&lt;br /&gt;
&lt;br /&gt;
 VERSION &amp;gt;NIL: 50&lt;br /&gt;
 IF WARN&lt;br /&gt;
    ECHO &amp;quot;It&#039;s really time to update your system.&amp;quot;&lt;br /&gt;
 QUIT&lt;br /&gt;
 ELSE&lt;br /&gt;
    ECHO &amp;quot;You have Release 4 or better. Good!&amp;quot;&lt;br /&gt;
    ECHO &amp;quot;Let&#039;s continue.&amp;quot;&lt;br /&gt;
 ENDIF&lt;br /&gt;
&lt;br /&gt;
Versions below 50 are pre-Release 4. See [[AmigaOS_Versions|AmigaOS Versions]] for a complete list of release versions.&lt;br /&gt;
&lt;br /&gt;
== Flushing Unused Fonts and Libraries ==&lt;br /&gt;
&lt;br /&gt;
When fonts and libraries are loaded into memory, they remain in memory even if they are not currently in use. They are removed from memory automatically only when the memory they occupy is needed for some other purpose. In some cases it is useful to remove unneeded resources yourself.&lt;br /&gt;
&lt;br /&gt;
For example, if you want to edit and then test a font or find the version number of a library on a new disk, the Amiga may appear not to see the new font or library. This is because AmigaDOS uses the font or library that is in memory whenever possible. You can flush unused resources from memory and decrease memory fragmentation by using the AVAIL command&#039;s FLUSH option.&lt;br /&gt;
&lt;br /&gt;
To flush an unused font or library from memory without having to reboot the Amiga, enter:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; AVAIL FLUSH&lt;br /&gt;
&lt;br /&gt;
For this command to eliminate a font or library, the library or font must not be in use by the Workbench or some other application.&lt;br /&gt;
&lt;br /&gt;
== AmigaDOS Loops Using EVAL ==&lt;br /&gt;
&lt;br /&gt;
To create a loop in AmigaDOS that can prompt for the number of times to loop:&lt;br /&gt;
&lt;br /&gt;
Enter the following script and save it as Aloop:&lt;br /&gt;
&lt;br /&gt;
 .KEY loop&lt;br /&gt;
 ; change bracket characters used for substitution&lt;br /&gt;
 ; since script uses &amp;lt; and &amp;gt; for redirection:&lt;br /&gt;
 .BRA {&lt;br /&gt;
 .KET }&lt;br /&gt;
 ; test whether user provided an argument&lt;br /&gt;
 ; for the number of loops, prompt if not:&lt;br /&gt;
 IF NOT {loop}&lt;br /&gt;
    ECHO &amp;quot;Please type in the number of loops&amp;quot;&lt;br /&gt;
    ECHO &amp;quot;and press Return: &amp;quot; NOLINE&lt;br /&gt;
    SETENV &amp;gt;NIL: loop{$$} ?&lt;br /&gt;
 ELSE&lt;br /&gt;
    ; there was an argument, so store its value&lt;br /&gt;
    ECHO &amp;gt;ENV:Loop{$$} {loop}&lt;br /&gt;
 ENDIF&lt;br /&gt;
 ;&lt;br /&gt;
 LAB start            ; top of loop&lt;br /&gt;
 ECHO &amp;quot;Loop #&amp;quot; NOLINE ; here, substitute the&lt;br /&gt;
 TYPE ENV:Loop{$$}    ; commands to repeat&lt;br /&gt;
 EVAL &amp;lt;ENV:Loop{$$} &amp;gt;NIL: TO=T:Qwe{$$} VALUE2=1&lt;br /&gt;
  OP=- ?&lt;br /&gt;
 TYPE &amp;gt;ENV:Loop{$$} T:Qwe{$$}&lt;br /&gt;
 IF VAL $loop{$$} GT 0&lt;br /&gt;
    SKIP start BACK ;loop not finished yet&lt;br /&gt;
 ENDIF&lt;br /&gt;
 ;&lt;br /&gt;
 DELETE ENV:loop{$$} T:Qwe{$$} QUIET ; clean up&lt;br /&gt;
 ECHO &amp;quot;Done&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you invoke this script without providing a number as an argument, you are asked for input and this value is used as the initial loop number. If you do provide a number, as in:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; EXECUTE Aloop 5&lt;br /&gt;
&lt;br /&gt;
the following results are displayed:&lt;br /&gt;
&lt;br /&gt;
 Loop #5&lt;br /&gt;
 Loop #4&lt;br /&gt;
 Loop #3&lt;br /&gt;
 Loop #2&lt;br /&gt;
 Loop #1&lt;br /&gt;
 Done&lt;br /&gt;
&lt;br /&gt;
The only action inside the loop is to display the current loop count. However, you can insert more meaningful actions using the Loop{$$} environment variable.&lt;br /&gt;
&lt;br /&gt;
The first IF block checks whether an argument was given when the script was invoked. If not, the script prompts for a value. In either case, the script stores the value in the ENV:Loop{$$} variable file. The {$$} operator appends the process number to the name Loop to create a unique file name to avoid potential conflicts while multitasking. For example, the file name in ENV: might be Loop4.&lt;br /&gt;
&lt;br /&gt;
Within the loop, an ECHO command coupled with a TYPE command displays Loop # followed by the number given as the loop argument. The first time through the loop, it displays Loop #5 .&lt;br /&gt;
&lt;br /&gt;
The EVAL command takes the number in the ENV:Loop{$$} file as &amp;lt;value1&amp;gt;, making the question mark at the end of the line necessary. &amp;lt;Value2&amp;gt; is 1 and the operation is subtraction. The output of the EVAL command is sent to the T:Qwe{$$} file. The next TYPE command sends the value in T:Qwe($$) to the ENV:Lopp{$$} file. The effect of these two lines is to subtract one from the value in ENV:Loop{$$}.&lt;br /&gt;
&lt;br /&gt;
The IF statement instructs the script to start over as long as the value for Loop{$$} is greater than 0. This results in the Loop # line being printed again showing the new value.&lt;br /&gt;
&lt;br /&gt;
The script continues until Loop{$$} is equal to 0. At the end of the script, the two temporary files are deleted.&lt;br /&gt;
&lt;br /&gt;
== Using PIPE: ==&lt;br /&gt;
&lt;br /&gt;
To get a listing of one device&#039;s contents to another process:&lt;br /&gt;
&lt;br /&gt;
From process 1:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; LIST Work: TO PIPE: ALL&lt;br /&gt;
&lt;br /&gt;
From process 2:&lt;br /&gt;
&lt;br /&gt;
 2&amp;gt; TYPE pipe:&lt;br /&gt;
&lt;br /&gt;
To gather the results of several C compilations:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; sc &amp;gt;pipe:11 milk.c&lt;br /&gt;
 1&amp;gt; sc &amp;gt;pipe:11 snap.c&lt;br /&gt;
 1&amp;gt; sc &amp;gt;pipe:11 crackle.c&lt;br /&gt;
 1&amp;gt; sc &amp;gt;pipe:11 pop.c&lt;br /&gt;
 1&amp;gt; TYPE pipe:11&lt;br /&gt;
&lt;br /&gt;
To use channel names:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; LIST &amp;gt;pipe:crazy&lt;br /&gt;
&lt;br /&gt;
This lists to a pipe called &amp;quot;crazy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; COPY #?.c TO &amp;gt;pipe:all_c/32000&lt;br /&gt;
&lt;br /&gt;
This specifies a channel called &amp;quot;all_c&amp;quot; and a buffer size of 32000 bytes.&lt;br /&gt;
&lt;br /&gt;
To set a limit on the number of buffers to 5:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; DIR &amp;gt;pipe://5&lt;br /&gt;
&lt;br /&gt;
This creates a channel without a channel name and allows only 5 buffers.&lt;br /&gt;
&lt;br /&gt;
== Recursive AmigaDOS Command Scripts ==&lt;br /&gt;
&lt;br /&gt;
To create a script that allows you to apply any AmigaDOS command to the contents of a directory, including all its subdirectories and their contents, enter this script and save it as S:RPAT:&lt;br /&gt;
&lt;br /&gt;
 .KEY COM/A,PATH,OPT,RD&lt;br /&gt;
 ;enter the command for COM, enter the path to the&lt;br /&gt;
 ;directory tree to process for PATH, if it is not&lt;br /&gt;
 ;the current directory, and enter an option for&lt;br /&gt;
 ;the command as OPT. You do not need to enter&lt;br /&gt;
 ;anything for RD.&lt;br /&gt;
 ;&lt;br /&gt;
 .BRA {&lt;br /&gt;
 .KET }&lt;br /&gt;
 FAILAT 21 ; do not sdtop when List finds nothing&lt;br /&gt;
 ;&lt;br /&gt;
 ; first scan for files, then generate new script:&lt;br /&gt;
 LIST &amp;gt;T:trf{$$} &amp;quot;{PATH}&amp;quot; FILES LFORMAT=&amp;quot; {COM} *&amp;quot;%p%n*&amp;quot; {OPT}&amp;quot;&lt;br /&gt;
 IF EXISTS T:trf{$$}&lt;br /&gt;
    ; files were found, execute the new script and&lt;br /&gt;
    ; clean up&lt;br /&gt;
    EXECUTE T:trf{$$}&lt;br /&gt;
    DELETE T:trf{$$}&lt;br /&gt;
 ENDIF&lt;br /&gt;
 ;&lt;br /&gt;
 ;list any subdirectories, call RPAT for each one:&lt;br /&gt;
 LIST &amp;gt;T:trd{$$}{RD} &amp;quot;{PATH}&amp;quot; DIRS LFORMAT=&amp;quot;RPAT *&amp;quot;{COM}*&amp;quot; *&amp;quot;%p%n*&amp;quot; *&amp;quot;{OPT}*&amp;quot; RD=.{RD}&amp;quot;&lt;br /&gt;
 ;the RD argument appends periods to the names of&lt;br /&gt;
 ;the temporary script files to distinguish each&lt;br /&gt;
 ;level&lt;br /&gt;
 ;&lt;br /&gt;
 IF EXISTS T:trd{$$}{RD}&lt;br /&gt;
    ; subdirectories exist, execute new script&lt;br /&gt;
    ; file and clean up&lt;br /&gt;
    EXECUTE T:trd{$$}{RD}&lt;br /&gt;
    DELETE T:trd{$$}{RD}&lt;br /&gt;
 ENDIF&lt;br /&gt;
&lt;br /&gt;
Make sure the RPAT script has its a protection bit set and that RPAT is in the search path when you run it. Examine the S:SPAT and S:DPAT scripts that come with your system for examples of similar techniques.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=GadTools_Gadgets&amp;diff=9156</id>
		<title>GadTools Gadgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=GadTools_Gadgets&amp;diff=9156"/>
		<updated>2017-06-29T16:35:57Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Slider Gadgets */ Fixed typo (possible Unicode copy/paste error).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
{{Note|text=GadTools-based GUIs are largely obsolete. Prefer to use a modern BOOPSI-based GUI system instead.}}&lt;br /&gt;
&lt;br /&gt;
The heart of GadTools is in its ability to easily create and manipulate a sophisticated and varied array of gadgets. GadTools supports the following kinds of gadgets:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Standard Gadget Types Supported by the GadTools Library&lt;br /&gt;
! Gadget Type&lt;br /&gt;
! Description or Example Usage&lt;br /&gt;
|-&lt;br /&gt;
| Button&lt;br /&gt;
| Familiar action gadgets, such as &amp;quot;OK&amp;quot; or &amp;quot;Cancel&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| String&lt;br /&gt;
| For text entry.&lt;br /&gt;
|-&lt;br /&gt;
| Integer&lt;br /&gt;
| For numeric entry.&lt;br /&gt;
|-&lt;br /&gt;
| Checkboxes&lt;br /&gt;
| For on/off items.&lt;br /&gt;
|-&lt;br /&gt;
| Mutually exclusive&lt;br /&gt;
| Radio buttons, select one choice among several.&lt;br /&gt;
|-&lt;br /&gt;
| Cycle&lt;br /&gt;
| Multiple-choice, pick one of a small number of choices.&lt;br /&gt;
|-&lt;br /&gt;
| Sliders&lt;br /&gt;
| To indicate a level within a range.&lt;br /&gt;
|-&lt;br /&gt;
| Scrollers&lt;br /&gt;
| To indicate a position in a list or area.&lt;br /&gt;
|-&lt;br /&gt;
| Listviews&lt;br /&gt;
| Scrolling lists of text.&lt;br /&gt;
|-&lt;br /&gt;
| Palette&lt;br /&gt;
| Color selection.&lt;br /&gt;
|-&lt;br /&gt;
| Text-display&lt;br /&gt;
| Read-only text.&lt;br /&gt;
|-&lt;br /&gt;
| Numeric-display&lt;br /&gt;
| Read-only numbers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GadTools gadget handling consists of a body of routines to create, manage and delete any of the 12 kinds of standard gadgets listed in the previous table, such as buttons, sliders, mutually exclusive buttons and scrolling lists.&lt;br /&gt;
&lt;br /&gt;
To illustrate the flexibility, power and simplicity that GadTools offers, consider the GadTools slider gadget. This gadget is used to indicate and control the level of something, for example volume, speed or color intensity. Without GadTools, applications have to deal directly with Intuition proportional and their arcane variables, such as HorizBody to control the slider knob&#039;s size and HorizPot to control the knob&#039;s position. Using the GadTools slider allows direct specification of the minimum and maximum levels of the slider, as well as its current level. For example, a color slider might have a minimum level of 0, a maximum level of 15 and a current level of 11.&lt;br /&gt;
&lt;br /&gt;
To simplify event-processing for the slider, GadTools only sends the application a message when the knob has moved far enough to cause the slider level, as expressed in application terms, to change. If a user were to slowly drag the knob of this color slider all the way to the right, the program will only hear messages for levels 12, 13, 14 and 15, with an optional additional message when the user releases the mouse-button.&lt;br /&gt;
&lt;br /&gt;
Changing the current level of the slider from within the program is as simple as specifying the new level in a function call. For instance, the application might set the slider&#039;s value to 5.&lt;br /&gt;
&lt;br /&gt;
As a final point, the slider is very well-behaved. When the user releases the mouse-button, the slider immediately snaps to the centered position for the level. If a user sets their background color to light gray, which might have red = green = blue = 10, all three color sliders will have their knobs at precisely the same relative position, instead of anywhere in the range that means &amp;quot;ten&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== The NewGadget Structure ====&lt;br /&gt;
&lt;br /&gt;
For most gadgets, the NewGadget structure is used to specify its common attributes. Additional attributes that are unique to specific kinds of gadgets are specified as tags sent to the CreateGadget() function (described below).&lt;br /&gt;
&lt;br /&gt;
The NewGadget structure is defined in &amp;amp;lt;intuition/gadtools.h&amp;amp;gt; as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
struct NewGadget&lt;br /&gt;
    {&lt;br /&gt;
    WORD ng_LeftEdge, ng_TopEdge;&lt;br /&gt;
    WORD ng_Width, ng_Height;&lt;br /&gt;
    UBYTE *ng_GadgetText;&lt;br /&gt;
    struct TextAttr *ng_TextAttr;&lt;br /&gt;
    UWORD ng_GadgetID;&lt;br /&gt;
    ULONG ng_Flags;&lt;br /&gt;
    APTR ng_VisualInfo;&lt;br /&gt;
    APTR ng_UserData;&lt;br /&gt;
    };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fields of the NewGadget structure are used as follows:&lt;br /&gt;
&lt;br /&gt;
; ng_LeftEdge, ng_TopEdge&lt;br /&gt;
: Define the position of the gadget being created.&lt;br /&gt;
&lt;br /&gt;
; ng_Width, ng_Height&lt;br /&gt;
: Define the size of the gadget being created.&lt;br /&gt;
&lt;br /&gt;
; ng_GadgetText&lt;br /&gt;
: Most gadgets have an associated label, which might be the text in a button or beside a checkmark. This field contains a pointer to the appropriate string. Note that only the pointer to the text is copied, the text itself is not. The string supplied must remain constant and valid for the life of the gadget.&lt;br /&gt;
&lt;br /&gt;
; ng_TextAttr&lt;br /&gt;
: The application must specify a font to use for the label and any other text that may be associated with the gadget.&lt;br /&gt;
&lt;br /&gt;
: Used to describe general aspects of the gadget, which includes where the label is to be placed and whether the label should be rendered in the highlight color. The label may be positioned on the left side, the right side, centered above, centered below or dead-center on the gadget. For most gadget kinds, the label is placed on the left side by default, exceptions will be noted.&lt;br /&gt;
&lt;br /&gt;
; ng_GadgetID, ng_Flags, ng_UserData&lt;br /&gt;
: These user fields are copied into the resulting Gadget structure.&lt;br /&gt;
&lt;br /&gt;
; ng_VisualInfo&lt;br /&gt;
: This field must contain a pointer to an instance of the VisualInfo structure, which contains information needed to create and render GadTools gadgets. The VisualInfo structure itself is private to GadTools and subject to change. Use the specialized GadTools functions for accessing the VisualInfo pointer, defined below. Never access or modify fields within this structure.&lt;br /&gt;
&lt;br /&gt;
==== Creating Gadgets ====&lt;br /&gt;
&lt;br /&gt;
The main call used to create a gadget with GadTools is CreateGadget(). This function can be used to create a single gadget or it can be called repeatedly to create a linked list of gadgets. It takes three arguments followed by a set of tags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
struct Gadget *CreateGadget( ULONG kind, struct Gadget *prevgad, struct NewGadget *newgad,&lt;br /&gt;
                             struct TagItem *taglist);&lt;br /&gt;
struct Gadget *CreateGadgetA(ULONG kind, struct Gadget *prevgad, struct NewGadget *newgad,&lt;br /&gt;
                             Tag tag1, ...);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set the kind argument to one of the 12 gadget types supported by GadTools. Set the prevgad argument to the gadget address returned by CreateContext() if this is the first (or only) gadget in the list. Subsequent calls to CreateGadget() can be used to create and link gadgets together in a list in which case the prevgad argument is set to the address of the gadget returned by the preceding call to CreateGadget().&lt;br /&gt;
&lt;br /&gt;
Set the newgad argument to the address of the NewGadget structure describing the gadget to be created and set any special attributes for this gadget type using the tag arguments, tag1 or taglist. For instance, the following code fragment might be used to create the color slider discussed earlier:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
slidergad = IGadTools-&amp;gt;CreateGadget(SLIDER_KIND, newgadget, prevgad,&lt;br /&gt;
    GTSL_Min, 0,&lt;br /&gt;
    GTSL_Max, 15,&lt;br /&gt;
    GTSL_Level, 11,&lt;br /&gt;
    TAG_END);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CreateGadget() typically allocates and initializes all the necessary Intuition structures, including in this case the Gadget, IntuiText and PropInfo structures, as well as certain buffers. For more about these underlying structures, see [[Intuition_Gadgets|Intuition Gadgets]].&lt;br /&gt;
&lt;br /&gt;
Since CreateGadget() is a tag-based function, it is easy to add more tags to get a fancier gadget. For example, GadTools can optionally display the running level beside the slider. The caller must supply a printf()-style formatting string and the maximum length that the string will resolve to when the number is inserted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
slidergad = IGadTools-&amp;gt;CreateGadget(SLIDER_KIND, newgadget, prevgad,&lt;br /&gt;
    GTSL_Min, 0,&lt;br /&gt;
    GTSL_Max, 15,&lt;br /&gt;
    GTSL_Level, 11,&lt;br /&gt;
    GTSL_LevelFormat, &amp;quot;%2ld&amp;quot;, /* printf()-style formatting string */&lt;br /&gt;
    GTSL_MaxLevelLen, 2,      /* maximum length of string         */&lt;br /&gt;
    TAG_END);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The level, 0 to 15 in this example, would then be displayed beside the slider. The formatting string could instead be &amp;quot;%2ld/15&amp;quot; so the level would be displayed as &amp;quot;0/15&amp;quot; through &amp;quot;15/15&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Handling Gadget Messages ====&lt;br /&gt;
&lt;br /&gt;
GadTools gadgets follow the same input model as other Intuition components. When the user operates a GadTools gadget, Intuition notifies the application about the input event by sending an IntuiMessage. The application can get these messages at the Window.UserPort. However GadTools gadgets use different message handling functions to get and reply these messages. Instead of the Exec functions GetMsg() and ReplyMsg(), applications should get and reply these messages through a pair of special GadTools functions, GT_GetIMsg() and GT_ReplyIMsg().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
struct IntuiMessage *GT_GetIMsg(struct MsgPort *iport);&lt;br /&gt;
VOID GT_ReplyIMsg(struct IntuiMessage *imsg);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For GT_GetIMsg(), the iport argument should be set to the window&#039;s UserPort. For GT_ReplyIMsg(), the imsg argument should be set to a pointer to the IntuiMessage returned by GT_GetIMsg().&lt;br /&gt;
&lt;br /&gt;
These functions ensure that the application only sees the gadget events that concern it and in a desirable form. For example, with a GadTools slider gadget, a message only gets through to the application when the slider&#039;s level actually changes and that level can be found in the IntuiMessage&#039;s Code field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
imsg = IGadTools-&amp;gt;GT_GetIMsg(win-&amp;gt;UserPort);&lt;br /&gt;
object = imsg-&amp;gt;IAddress;&lt;br /&gt;
class = imsg-&amp;gt;Class;&lt;br /&gt;
code = imsg-&amp;gt;Code;&lt;br /&gt;
IGadTools-&amp;gt;GT_ReplyIMsg(imsg);&lt;br /&gt;
switch (class)&lt;br /&gt;
    {&lt;br /&gt;
    case IDCMP_MOUSEMOVE:&lt;br /&gt;
        if (object == slidergad)&lt;br /&gt;
            {&lt;br /&gt;
            IDOS-&amp;gt;Printf(&amp;quot;Slider at level %ld\n&amp;quot;, code);&lt;br /&gt;
            }&lt;br /&gt;
        ...&lt;br /&gt;
        break;&lt;br /&gt;
    ...&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In general, the IntuiMessages received from GadTools contain more information in the Code field than is found in regular Intuition gadget messages. Also, when dealing with GadTools a lot of messages (mostly IDCMP_MOUSEMOVEs) do not have to be processed by the application. These are two reasons why dealing with GadTools gadgets is much easier than dealing with regular Intuition gadgets. Unfortunately this processing cannot happen magically, so applications must use GT_GetIMsg() and GT_ReplyIMsg() where they would normally have used GetMsg() and ReplyMsg().&lt;br /&gt;
&lt;br /&gt;
GT_GetIMsg() actually calls GetMsg() to remove a message from the specified window&#039;s UserPort. If the message pertains to a GadTools gadget then some dispatching code in GadTools will be called to process the message. What the program will receive from GT_GetIMsg() is actually a copy of the real IntuiMessage, possibly with some supplementary information from GadTools, such as the information typically found in the Code field.&lt;br /&gt;
&lt;br /&gt;
The GT_ReplyIMsg() call will take care of cleaning up and replying to the real IntuiMessage.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Warning|text=When an IDCMP_MOUSEMOVE message is received from a GadTools gadget, GadTools arranges to have the gadget&#039;s pointer in the IAddress field of the IntuiMessage. While this is extremely convenient, it is also untrue of messages from regular Intuition gadgets (described in [[Intuition_Gadgets|Intuition Gadgets]]). Do not make the mistake of assuming it to be true.}}&lt;br /&gt;
&lt;br /&gt;
This description of the inner workings of GT_GetIMsg() and GT_ReplyIMsg() is provided for understanding only; it is crucial that the program make no assumptions or interpretations about the real IntuiMessage. Any such inferences are not likely to hold true in the future. See the section on documented side-effects for more information.&lt;br /&gt;
&lt;br /&gt;
=== IDCMP Flags ===&lt;br /&gt;
&lt;br /&gt;
The various GadTools gadget types require certain classes of IDCMP messages in order to work. Applications specify these IDCMP classes when the window is opened or later with ModifyIDCMP() (see [[Intuition_Windows|Intuition Windows]] for more on this). Each kind of GadTools gadget requires one or more of these IDCMP classes: IDCMP_GADGETUP, IDCMP_GADGETDOWN, IDCMP_MOUSEMOVE, IDCMP_MOUSEBUTTONS and IDCMP_INTUITICKS. As a convenience, the IDCMP classes required by each kind of gadget are defined in &amp;amp;lt;libraries/gadtools.h&amp;amp;gt;. For example, SLIDERIDCMP is defined to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#define SLIDERIDCMP (IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEMOVE)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Always OR the IDCMP Flag Bits|text=When specifying the IDCMP classes for a window, never add the flags together, always OR the bits together. Since many of the GadTools IDCMP constants have multiple bits set, adding the values will not lead to the proper flag combination.}}&lt;br /&gt;
&lt;br /&gt;
If a certain kind of GadTools gadget is used, the window must use all IDCMP classes required by that kind of gadget. Do not omit any that are given for that class, even if the application does require the message type.&lt;br /&gt;
&lt;br /&gt;
Because of the way GadTools gadgets are implemented, programs that use them always require notification about window refresh events. Even if the application performs no rendering of its own, it may not use the WFLG_NOCAREREFRESH window flag and must always set IDCMP_REFRESHWINDOW. See the section on &amp;quot;Gadget Refresh Functions&amp;quot; below for more on this.&lt;br /&gt;
&lt;br /&gt;
=== Freeing Gadgets ===&lt;br /&gt;
&lt;br /&gt;
After closing the window, the gadgets allocated using CreateGadget() must be released. FreeGadgets() is a simple call that will free all the GadTools gadgets that it finds, beginning with the gadget whose pointer is passed as an argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
VOID FreeGadgets( struct Gadget *gad );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The gad argument is a pointer to the first gadget to be freed. It is safe to call FreeGadgets() with a NULL gadget pointer, the function will then return immediately. Before calling FreeGadgets(), the application must first either remove the gadgets or close the window.&lt;br /&gt;
&lt;br /&gt;
When the gadget passed to FreeGadgets() is the first gadget in a linked list, the function frees all the GadTools gadgets on the list without patching pointers or trying to maintain the integrity of the list. Any non-GadTools gadgets found on the list will not be freed, hence the result will not necessarily form a nice list since any intervening GadTools gadgets will be gone.&lt;br /&gt;
&lt;br /&gt;
See the section on &amp;quot;Creating Gadget Lists&amp;quot; for more information on using linked lists of gadgets.&lt;br /&gt;
&lt;br /&gt;
=== Simple GadTools Gadget Example ===&lt;br /&gt;
&lt;br /&gt;
The example listed here shows how to use the NewGadget structure and the GadTools library functions discussed above to create a simple button gadget.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/* simplegtgadget.c&lt;br /&gt;
Simple example of a GadTools gadget.&lt;br /&gt;
*/&lt;br /&gt;
#define INTUI_V36_NAMES_ONLY&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;intuition/intuition.h&amp;gt;&lt;br /&gt;
#include &amp;lt;intuition/gadgetclass.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/gadtools.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;proto/exec.h&amp;gt;&lt;br /&gt;
#include &amp;lt;proto/dos.h&amp;gt;&lt;br /&gt;
#include &amp;lt;proto/intuition.h&amp;gt;&lt;br /&gt;
#include &amp;lt;proto/gadtools.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* Gadget defines of our choosing, to be used as GadgetID&#039;s. */&lt;br /&gt;
#define MYGAD_BUTTON    (4)&lt;br /&gt;
&lt;br /&gt;
VOID process_window_events(struct Window *);&lt;br /&gt;
VOID gadtoolsWindow(VOID);&lt;br /&gt;
&lt;br /&gt;
struct TextAttr Topaz80 = { &amp;quot;topaz.font&amp;quot;, 8, 0, 0, };&lt;br /&gt;
&lt;br /&gt;
struct InuitionIFace *IIntuition;&lt;br /&gt;
struct GadToolsIFace *IGadTools;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Open all libraries and run.  Clean up when finished or on error..&lt;br /&gt;
*/&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  struct Library *IntuitionBase = IExec-&amp;gt;OpenLibrary(&amp;quot;intuition.library&amp;quot;, 50);&lt;br /&gt;
  IIntuition = (struct IntuitionIFace*)IExec-&amp;gt;GetInterface(IntuitionBase, &amp;quot;main&amp;quot;, 1, NULL);&lt;br /&gt;
&lt;br /&gt;
  struct Library *GadToolsBase = IExec-&amp;gt;OpenLibrary(&amp;quot;gadtools.library&amp;quot;, 50);&lt;br /&gt;
  IGadTools = (struct GadToolsIFace*)IExec-&amp;gt;GetInterface(GadToolsBase, &amp;quot;main&amp;quot;, 1, NULL);&lt;br /&gt;
&lt;br /&gt;
  if (IIntuition != NULL &amp;amp;&amp;amp; IGadTools != NULL)&lt;br /&gt;
  {&lt;br /&gt;
    gadtoolsWindow();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  IExec-&amp;gt;DropInterface((struct Interface*)IGadTools);&lt;br /&gt;
  IExec-&amp;gt;DropInterface((struct Interface*)IIntuition);&lt;br /&gt;
  IExec-&amp;gt;CloseLibrary(GadToolsBase);&lt;br /&gt;
  IExec-&amp;gt;CloseLibrary(IntuitionBase);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Prepare for using GadTools, set up gadgets and open window.&lt;br /&gt;
** Clean up and when done or on error.&lt;br /&gt;
*/&lt;br /&gt;
VOID gadtoolsWindow(VOID)&lt;br /&gt;
{&lt;br /&gt;
struct Screen    *mysc;&lt;br /&gt;
struct Window    *mywin;&lt;br /&gt;
struct Gadget    *glist, *gad;&lt;br /&gt;
struct NewGadget ng;&lt;br /&gt;
void             *vi;&lt;br /&gt;
&lt;br /&gt;
glist = NULL;&lt;br /&gt;
&lt;br /&gt;
if ( (mysc = IIntuition-&amp;gt;LockPubScreen(NULL)) != NULL )&lt;br /&gt;
    {&lt;br /&gt;
    if ( (vi = IGadTools-&amp;gt;GetVisualInfo(mysc, TAG_END)) != NULL )&lt;br /&gt;
        {&lt;br /&gt;
        /* GadTools gadgets require this step to be taken */&lt;br /&gt;
        gad = IGadTools-&amp;gt;CreateContext(&amp;amp;glist);&lt;br /&gt;
&lt;br /&gt;
        /* create a button gadget centered below the window title */&lt;br /&gt;
        ng.ng_TextAttr   = &amp;amp;Topaz80;&lt;br /&gt;
        ng.ng_VisualInfo = vi;&lt;br /&gt;
        ng.ng_LeftEdge   = 150;&lt;br /&gt;
        ng.ng_TopEdge    = 20 + mysc-&amp;gt;WBorTop + (mysc-&amp;gt;Font-&amp;gt;ta_YSize + 1);&lt;br /&gt;
        ng.ng_Width      = 100;&lt;br /&gt;
        ng.ng_Height     = 12;&lt;br /&gt;
        ng.ng_GadgetText = &amp;quot;Click Here&amp;quot;;&lt;br /&gt;
        ng.ng_GadgetID   = MYGAD_BUTTON;&lt;br /&gt;
        ng.ng_Flags      = 0;&lt;br /&gt;
        gad = IGadTools-&amp;gt;CreateGadget(BUTTON_KIND, gad, &amp;amp;ng, TAG_END);&lt;br /&gt;
&lt;br /&gt;
        if (gad != NULL)&lt;br /&gt;
            {&lt;br /&gt;
            if ( (mywin = IIntuition-&amp;gt;OpenWindowTags(NULL,&lt;br /&gt;
                    WA_Title,     &amp;quot;GadTools Gadget Demo&amp;quot;,&lt;br /&gt;
                    WA_Gadgets,   glist,      WA_AutoAdjust,    TRUE,&lt;br /&gt;
                    WA_Width,       400,      WA_InnerHeight,    100,&lt;br /&gt;
                    WA_DragBar,    TRUE,      WA_DepthGadget,   TRUE,&lt;br /&gt;
                    WA_Activate,   TRUE,      WA_CloseGadget,   TRUE,&lt;br /&gt;
                    WA_IDCMP, IDCMP_CLOSEWINDOW |&lt;br /&gt;
                              IDCMP_REFRESHWINDOW | BUTTONIDCMP,&lt;br /&gt;
                    WA_PubScreen,   mysc,&lt;br /&gt;
                    TAG_END)) != NULL )&lt;br /&gt;
                {&lt;br /&gt;
                IGadTools-&amp;gt;GT_RefreshWindow(mywin, NULL);&lt;br /&gt;
&lt;br /&gt;
                process_window_events(mywin);&lt;br /&gt;
&lt;br /&gt;
                IIntuition-&amp;gt;CloseWindow(mywin);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        /* FreeGadgets() must be called after the context has been&lt;br /&gt;
        ** created.  It does nothing if glist is NULL&lt;br /&gt;
        */&lt;br /&gt;
        IGadTools-&amp;gt;FreeGadgets(glist);&lt;br /&gt;
        IGadTools-&amp;gt;FreeVisualInfo(vi);&lt;br /&gt;
        }&lt;br /&gt;
    IIntuition-&amp;gt;UnlockPubScreen(NULL, mysc);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Standard message handling loop with GadTools message handling functions&lt;br /&gt;
** used (GT_GetIMsg() and GT_ReplyIMsg()).&lt;br /&gt;
*/&lt;br /&gt;
VOID process_window_events(struct Window *mywin)&lt;br /&gt;
{&lt;br /&gt;
struct IntuiMessage *imsg;&lt;br /&gt;
struct Gadget *gad;&lt;br /&gt;
BOOL  terminated = FALSE;&lt;br /&gt;
&lt;br /&gt;
while (!terminated)&lt;br /&gt;
    {&lt;br /&gt;
    IExec-&amp;gt;Wait (1 &amp;lt;&amp;lt; mywin-&amp;gt;UserPort-&amp;gt;mp_SigBit);&lt;br /&gt;
&lt;br /&gt;
    /* Use GT_GetIMsg() and GT_ReplyIMsg() for handling */&lt;br /&gt;
    /* IntuiMessages with GadTools gadgets.             */&lt;br /&gt;
    while ((!terminated) &amp;amp;&amp;amp; (imsg = IGadTools-&amp;gt;GT_GetIMsg(mywin-&amp;gt;UserPort)))&lt;br /&gt;
        {&lt;br /&gt;
        /* GT_ReplyIMsg() at end of loop */&lt;br /&gt;
&lt;br /&gt;
        switch (imsg-&amp;gt;Class)&lt;br /&gt;
            {&lt;br /&gt;
            case IDCMP_GADGETUP:       /* Buttons only report GADGETUP */&lt;br /&gt;
                gad = (struct Gadget *)imsg-&amp;gt;IAddress;&lt;br /&gt;
                if (gad-&amp;gt;GadgetID == MYGAD_BUTTON)&lt;br /&gt;
                        IDOS-&amp;gt;Printf(&amp;quot;Button was pressed.\n&amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            case IDCMP_CLOSEWINDOW:&lt;br /&gt;
                terminated = TRUE;&lt;br /&gt;
                break;&lt;br /&gt;
            case IDCMP_REFRESHWINDOW:&lt;br /&gt;
                /* This handling is REQUIRED with GadTools. */&lt;br /&gt;
                IGadTools-&amp;gt;GT_BeginRefresh(mywin);&lt;br /&gt;
                IGadTools-&amp;gt;GT_EndRefresh(mywin, TRUE);&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        /* Use the toolkit message-replying function here... */&lt;br /&gt;
        IGadTools-&amp;gt;GT_ReplyIMsg(imsg);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modifying Gadgets ===&lt;br /&gt;
&lt;br /&gt;
The attributes of a gadget are set up when the gadget is created. Some of these attributes can be changed later by using the GT_SetGadgetAttrs() function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
VOID GT_SetGadgetAttrs (struct Gadget *gad, struct Window *win, struct Requester *req, Tag tag1, ... );&lt;br /&gt;
VOID GT_SetGadgetAttrsA(struct Gadget *gad, struct Window *win, struct Requester *req, struct TagItem *taglist);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The gad argument specifies the gadget to be changed while the win argument specifies the window the gadget is in. Currently, the req argument is unused and must be set to NULL.&lt;br /&gt;
&lt;br /&gt;
The gadget attributes are changed by passing tag arguments to these functions. The tag arguments can be either a set of TagItems on the stack for GT_SetGadgetAttrs(), or a pointer to an array of TagItems for GT_SetGadgetAttrsA(). The tag items specify the attributes that are to be changed for the gadget. Keep in mind though that not every gadget attribute can be modified this way.&lt;br /&gt;
&lt;br /&gt;
For example, in the slider gadget presented earlier, the level-formatting string may not be changed after the gadget is created. However, the slider&#039;s level may be changed to 5 as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
IGadTools-&amp;gt;GT_SetGadgetAttrs(slidergad, win, req,&lt;br /&gt;
    GTSL_Level, 5,&lt;br /&gt;
    TAG_END);&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here are some other example uses of GT_SetGadgetAttrs() to change gadget attributes after it is created.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/* Disable a button gadget */&lt;br /&gt;
IGadTools-&amp;gt;GT_SetGadgetAttrs(buttongad, win, NULL,&lt;br /&gt;
                             GA_Disabled, TRUE,&lt;br /&gt;
                             TAG_END);&lt;br /&gt;
&lt;br /&gt;
/* Change a slider&#039;s range to be 1 to 100, currently at 50 */&lt;br /&gt;
IGadTools-&amp;gt;GT_SetGadgetAttrs(slidergad, win, NULL,&lt;br /&gt;
                             GTSL_Min, 1,&lt;br /&gt;
                             GTSL_Max, 100,&lt;br /&gt;
                             GTSL_Level, 50,&lt;br /&gt;
                             TAG_END);&lt;br /&gt;
&lt;br /&gt;
/* Add a node to the head of listview&#039;s list, and&lt;br /&gt;
   make it the selected one */&lt;br /&gt;
IGadTools-&amp;gt;GT_SetGadgetAttrs(listviewgad, win, NULL,&lt;br /&gt;
                             /* detach list before modifying */&lt;br /&gt;
                             GTLV_Labels, ~0,&lt;br /&gt;
                             TAG_END);&lt;br /&gt;
IExec-&amp;gt;AddHead(&amp;amp;lvlabels, &amp;amp;newnode);&lt;br /&gt;
IGadTools-&amp;gt;GT_SetGadgetAttrs(listviewgad, win, NULL,&lt;br /&gt;
                             /* re-attach list */&lt;br /&gt;
                             GTLV_Labels, &amp;amp;amp;lvlabels,&lt;br /&gt;
                             GTLV_Selected, 0,&lt;br /&gt;
                             TAG_END);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When changing a gadget using these functions, the gadget will automatically update its visuals. No refresh is required, nor should any refresh call be performed.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Warning|text=The GT_SetGadgetAttrs() functions may not be called inside of a GT_BeginRefresh()/GT_EndRefresh() pair. This is true of Intuition gadget functions generally, including those discussed in [[Intuition_Gadgets|Intuition Gadgets]].}}&lt;br /&gt;
&lt;br /&gt;
In the sections that follow all the possible attributes for each kind of gadget are discussed. The tags are also described in the Autodocs for GT_SetGadgetAttrs() in the SDK.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Important|text=Tags that can only be sent to CreateGadget() and not to GT_SetGadgetAttrs() will be marked as &#039;&#039;create only&#039;&#039; in the discussion that follows. Those that are valid parameters to both functions will be marked as &#039;&#039;create and set&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
=== The Kinds of GadTools Gadgets ===&lt;br /&gt;
&lt;br /&gt;
This section discusses the unique features of each kind of gadget supported by the GadTools library.&lt;br /&gt;
&lt;br /&gt;
==== Button Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Button gadgets (BUTTON_KIND) are perhaps the simplest kind of GadTools gadget. Button gadgets may be used for objects like the &amp;quot;OK&amp;quot; and &amp;quot;Cancel&amp;quot; buttons in requesters. GadTools will create a hit-select button with a raised bevelled border. The label supplied will be centered on the button&#039;s face. Since the label is not clipped, be sure that the gadget is large enough to contain the text supplied.&lt;br /&gt;
&lt;br /&gt;
Button gadgets recognize only one tag:&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable or ghost the button gadget, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
When the user selects a button gadget, the program will receive an IDCMP_GADGETUP event.&lt;br /&gt;
&lt;br /&gt;
If clicking on a button causes a requester to appear, for example a button that brings up a color requester, then the button text should end in ellipsis (...), as in &amp;quot;Quit...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Text-Entry and Number-Entry Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Text-entry (STRING_KIND) and number-entry (INTEGER_KIND) gadgets are fairly typical Intuition string gadgets. The typing area is contained by a border which is a raised ridge.&lt;br /&gt;
&lt;br /&gt;
Text-entry gadgets accept the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTST_String (STRPTR)&lt;br /&gt;
: A pointer to the string to be placed into the text-entry gadget buffer or NULL to get an empty text-entry gadget. The string itself is actually copied into the gadget&#039;s buffer. The default is NULL. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTST_MaxChars (UWORD)&lt;br /&gt;
: The maximum number of characters that the text-entry gadget should hold. The string buffer that gets created for the gadget will actually be one bigger than this number, in order to hold the trailing NULL. The default is 64. (Create only.)&lt;br /&gt;
&lt;br /&gt;
Number-entry gadgets accept the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTIN_Number (ULONG)&lt;br /&gt;
: The number to be placed into the number-entry gadget. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTIN_MaxChars (UWORD)&lt;br /&gt;
: The maximum number of digits that the number-entry gadget should hold. The string buffer that gets created for the gadget will actually be one bigger than this, in order to hold the trailing NULL. The default is 10. (Create only.)&lt;br /&gt;
&lt;br /&gt;
Both text-entry and number-entry gadgets, which are collectively called string gadgets, accept these common tags:&lt;br /&gt;
&lt;br /&gt;
; STRINGA_Justification&lt;br /&gt;
: This attribute controls the placement of the string or number within its box and can be one of GACT_STRINGLEFT, GACT_STRINGRIGHT or GACT_STRINGCENTER. The default is GACT_STRINGLEFT. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; STRINGA_ReplaceMode (BOOL)&lt;br /&gt;
: Set STRINGA_ReplaceMode to TRUE to get a string gadget which is in replace-mode, as opposed to auto-insert mode. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the string gadget, otherwise to FALSE. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; STRINGA_ExitHelp (BOOL)&lt;br /&gt;
: Set this attribute to TRUE if the application wants to hear the Help key from within this string gadget. This feature allows the program to hear the press of the Help key in all cases. If TRUE, pressing the help key while this gadget is active will terminate the gadget and send a message. The program will receive an IDCMP_GADGETUP message having a Code value of 0x5F, the rawkey code for Help. Typically, the program will want to reactivate the gadget after performing the help-display. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_TabCycle (BOOL)&lt;br /&gt;
: If the user types Tab or Shift Tab into a GA_TabCycle gadget, Intuition will activate the next or previous such gadget in sequence. This gives the user easy keyboard control over which text-entry or number-entry gadget is active. Tab moves to the next GA_TabCycle gadget in the gadget list and Shift Tab moves to the previous one. When the user presses Tab or Shift Tab, Intuition will deactivate the gadget and send this program an IDCMP_GADGETUP message with the code field set to 0x09, the ASCII value for a tab. Intuition will then activate the next indicated gadget. Check the shift bits of the qualifier field to learn if Shift Tab was typed. The ordering of the gadgets may only be controlled by the order in which they were added to the window. For special cases, for example, if there is only one string gadget in the window, this feature can be suppressed by specifying the tagitem pair {GA_TabCycle, FALSE}. The default is TRUE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTST_EditHook (struct Hook *)&lt;br /&gt;
: Pointer to a custom editing hook for this string or integer gadget. See [[Intuition_Gadgets|Intuition Gadgets]] for more information on string gadget edit-hooks.&lt;br /&gt;
&lt;br /&gt;
As with all Intuition string gadgets, the program will receive an IDCMP_GADGETUP message only when the user presses Enter, Return, Help, Tab or Shift Tab while typing in the gadget. Note that, like Intuition string gadgets, the program will not hear anything if the user deactivates the string gadget by clicking elsewhere. Therefore, it is a good idea to always check the string gadget&#039;s buffer before using its contents, instead of just tracking its value as IDCMP_GADGETUP messages are received for this gadget.&lt;br /&gt;
&lt;br /&gt;
Be sure the code is designed so that nothing drastic happens, like closing a requester or opening a file, if the IDCMP_GADGETUP message has a non-zero Code field; the program will want to handle the Tab and Help cases intelligently.&lt;br /&gt;
&lt;br /&gt;
To read the string gadget&#039;s buffer, look at the Gadget&#039;s StringInfo Buffer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
((struct StringInfo *)gad-&amp;gt;SpecialInfo)-&amp;gt;Buffer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To determine the value of an integer gadget, look at the Gadget&#039;s StringInfo LongInt in the same way.&lt;br /&gt;
&lt;br /&gt;
Always use the GTST_String or GTIN_Number tags to set these values. Never write to the StringInfo-&amp;amp;gt;Buffer or StringInfo-&amp;amp;gt;LongInt fields directly.&lt;br /&gt;
&lt;br /&gt;
GadTools string and integer gadgets do not directly support the GA_Immediate property (which would cause Intuition to send an IDCMP_GADGETDOWN event when such a gadget is first selected). However, this property can be very important. Therefore, the following technique can be used to enable this property.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Warning|text=Note that the technique shown here relies on directly setting flags in a GadTools gadget; this is not normally allowed since it hinders future compatibility. Do not attempt to change other flags or properties of GadTools gadgets except through the defined interfaces of CreateGadgetA() and GT_SetGadgetAttrsA(). Directly modifying flags or properties is legal only when officially sanctioned by the AmigaOS development team.}}&lt;br /&gt;
&lt;br /&gt;
To get the GA_Immediate property, pass the {GA_Immediate, TRUE} tag to CreateGadgetA().&lt;br /&gt;
&lt;br /&gt;
==== Checkbox Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Checkboxes (CHECKBOX_KIND) are appropriate for presenting options which may be turned on or off. This kind of gadget consists of a raised box which contains a checkmark if the option is selected or is blank if the option is not selected. Clicking on the box toggles the state of the checkbox.&lt;br /&gt;
&lt;br /&gt;
The width and height of a checkbox are by default not scaled and fixed (CHECKBOXWIDTH by CHECKBOXHEIGHT). To scale a checkbox gadget, set the GTCB_Scaled tag to TRUE, and set the desired width and height in the ng_Width and ng_Height fields of the NewGadget structure.&lt;br /&gt;
&lt;br /&gt;
The checkbox may be controlled with the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTCB_Checked (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to set the gadget&#039;s state to &#039;&#039;checked&#039;&#039;. Set it to FALSE to mark the gadget as &#039;&#039;unchecked&#039;&#039;. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTCB_Scaled (BOOL)&lt;br /&gt;
: Scales the checkbox gadget if set to TRUE. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the checkbox, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
When the user selects a checkbox, the program will receive an IntuiMessage with a class of IDCMP_GADGETUP. As this gadget always toggles, the program can easily track the state of the gadget. Feel free to read the gadget-&amp;amp;gt;Flags GFLG_SELECTED bit. Note, however, that the Gadget structure itself is not synchronized to the IntuiMessages received. If the user clicks a second time, the GFLG_SELECTED bit can toggle again before the program gets a chance to read it. This is true of any of the dynamic fields of the Gadget structure, and is worth being aware of, although only rarely will an application have to account for it.&lt;br /&gt;
&lt;br /&gt;
==== Mutually-Exclusive Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Use mutually exclusive gadgets (MX_KIND), or &#039;&#039;radio buttons&#039;&#039;, when the user must choose only one option from a short list of possibilities. Mutually exclusive gadgets are appropriate when there are a small number of choices, perhaps eight or less.&lt;br /&gt;
&lt;br /&gt;
A set of mutually exclusive gadgets consists of a list of labels and beside each label, a small raised oval that looks like a button. Exactly one of the ovals is recessed and highlighted, to indicate the selected choice. The user can pick another choice by clicking on any of the raised ovals. This choice will become active and the previously selected choice will become inactive. That is, the selected oval will become recessed while the previous one will pop out, like the buttons on a car radio.&lt;br /&gt;
&lt;br /&gt;
Mutually exclusive gadgets recognize these tags:&lt;br /&gt;
&lt;br /&gt;
; GTMX_Labels (STRPTR *)&lt;br /&gt;
: A NULL-pointer-terminated array of strings which are to be the labels beside each choice in the set of mutually exclusive gadgets. This array determines how many buttons are created. This array must be supplied to CreateGadget() and may not be changed. The strings themselves must remain valid for the lifetime of the gadget. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTMX_Active (UWORD)&lt;br /&gt;
: The ordinal number, counting from zero, of the active choice of the set of mutually exclusive gadgets. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTMX_Spacing (UWORD)&lt;br /&gt;
: The amount of space, in pixels, that will be placed between successive choices in a set of mutually exclusive gadgets. The default is one. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTMX_Scaled (BOOL)&lt;br /&gt;
: Indicates whether the mutually exclusive gadget should be scaled or not. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTMX_TitlePlace (UWORD)&lt;br /&gt;
: Where to place the title of the mutually exclusive gadget. The gadget obtains its title from the ng_GadgetText field of the NewGadget structure. The default is no title. (Create only.)&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| PLACETEXT_LEFT || Right-align text on left side&lt;br /&gt;
|-&lt;br /&gt;
| PLACETEXT_RIGHT || Left-align text on right side&lt;br /&gt;
|-&lt;br /&gt;
| PLACETEXT_ABOVE || Center text above&lt;br /&gt;
|-&lt;br /&gt;
| PLACETEXT_BELOW || Center text below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When the user selects a new choice from a set of mutually exclusive gadgets, the program will receive an IDCMP_GADGETDOWN IntuiMessage. Look in the IntuiMessage&#039;s Code field for the ordinal number of the new active selection.&lt;br /&gt;
&lt;br /&gt;
The ng_GadgetText field of the NewGadget structure is used to display the title for mutually exclusive gadgets. The text position specified in ng_Flags determines whether the item labels are placed to the left or the right of the radio buttons themselves. By default, the labels appear on the left. Do not specify PLACETEXT_ABOVE, PLACETEXT_BELOW or PLACETEXT_IN for this kind of gadget.&lt;br /&gt;
&lt;br /&gt;
To scale a mutually exclusive gadget, set the GTMX_Scaled tag to TRUE, and set the desired width and height in the ng_Width and ng_Height fields of the NewGadget structure. The default value of GTMX_Scaled is FALSE, meaning use the default size of MXWIDTH by MXHEIGHT respectively. If you scale mutually exclusive gadgets, you must also set the&lt;br /&gt;
GTMX_Spacing tag to NewGadget.ng_TextAttr-&amp;gt;ta_YSize + 1 to properly space the buttons with respect to the font.&lt;br /&gt;
&lt;br /&gt;
==== Cycle Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Like mutually exclusive gadgets, cycle gadgets (CYCLE_KIND) allow the user to choose exactly one option from among several.&lt;br /&gt;
&lt;br /&gt;
The cycle gadget appears as a raised rectangular button with a vertical divider near the left side. A circular arrow glyph appears to the left of the divider, while the current choice appears to the right. Clicking on the cycle gadget advances to the next choice, while shift-clicking on it changes it to the previous choice.&lt;br /&gt;
&lt;br /&gt;
Cycle gadgets are more compact than mutually exclusive gadgets, since only the current choice is displayed. They are preferable to mutually exclusive gadgets when a window needs to have several such gadgets as in the PrinterGfx Preferences editor, or when there is a medium number of choices. If the number of choices is much more than about a dozen, it may become too frustrating and inefficient for the user to find the desired choice. In that case, use a listview (scrolling list) instead.&lt;br /&gt;
&lt;br /&gt;
The tags recognized by cycle gadgets are:&lt;br /&gt;
&lt;br /&gt;
; GTCY_Labels (STRPTR *)&lt;br /&gt;
: Like GTMX_Labels, this tag is associated with a NULL-pointer-terminated array of strings which are the choices that this gadget allows. This array must be supplied to CreateGadget() and can be changed. The strings themselves must remain valid for the lifetime of the gadget. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTCY_Active (UWORD)&lt;br /&gt;
: The ordinal number, counting from zero, of the active choice of the cycle gadget. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the cycle gadget, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
When the user clicks or shift-clicks on a cycle gadget, the program will receive an IDCMP_GADGETUP IntuiMessage. Look in the Code field of the IntuiMessage for the ordinal number of the new active selection.&lt;br /&gt;
&lt;br /&gt;
==== Slider Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Sliders are one of the two kinds of proportional gadgets offered by GadTools. Slider gadgets (SLIDER_KIND) are used to control an amount, a level or an intensity, such as volume or color. Scroller gadgets (SCROLLER_KIND) are discussed below.&lt;br /&gt;
&lt;br /&gt;
Slider gadgets accept the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTSL_Min (WORD)&lt;br /&gt;
: The minimum level of a slider. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_Max (WORD)&lt;br /&gt;
: The maximum level of a slider. The default is 15. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_Level (WORD)&lt;br /&gt;
: The current level of a slider. The default is zero. When the level is at its minimum, the knob will be all the way to the left for a horizontal slider or all the way at the bottom for a vertical slider. Conversely, the maximum level corresponds to the knob being to the extreme right or top. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_LevelFormat (STRPTR)&lt;br /&gt;
: The current level of the slider may be displayed in real-time alongside the gadget. To use the level-display feature, the program must be using a monospace font for this gadget.&lt;br /&gt;
&lt;br /&gt;
: GTSL_LevelFormat specifies a printf()-style formatting string used to render the slider level beside the slider (the complete set of formatting options is described in the Exec library function RawDoFmt()). Be sure to use the &amp;quot;l&amp;quot; (long word) modifier for the number. Field-width specifiers may be used to ensure that the resulting string is always of constant width. The simplest would be &amp;quot;%2ld&amp;quot;. A 2-digit hexadecimal slider might use &amp;quot;%02lx&amp;quot;, which adds leading zeros to the number. Strings with extra text, such as &amp;quot;%3ld hours&amp;quot;, are permissible. If this tag is specified, the program must also provide GTSL_MaxLevelLen. By default, the level is not displayed. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_MaxLevelLen (UWORD)&lt;br /&gt;
: The maximum length of the string that will result from the given level-formatting string. If this tag is specified, the program must also provide GTSL_LevelFormat. By default, the level is not displayed. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_LevelPlace&lt;br /&gt;
: To choose where the optional display of the level is positioned. It must be one of PLACETEXT_LEFT, PLACETEXT_RIGHT, PLACETEXT_ABOVE or PLACETEXT_BELOW. The level may be placed anywhere with the following exception: the level and the label may not be both above or both below the gadget. To place them both on the same side, allow space in the gadget&#039;s label (see the example). The default is PLACETEXT_LEFT. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_DispFunc (LONG (*function)(struct Gadget *, WORD))&lt;br /&gt;
: Optional function to convert the level for display. A slider to select the number of colors for a screen may operate in screen depth (1 to 5, for instance), but actually display the number of colors (2, 4, 8, 16 or 32). This may be done by providing a GTSL_DispFunc function which returns 1 &amp;amp;lt;&amp;amp;lt; level. The function must take a pointer to the Gadget as the first parameter and the level, a WORD, as the second and return the result as a LONG. The default behavior for displaying a level is to do so without any conversion. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Immediate (BOOL)&lt;br /&gt;
: Set this to TRUE to receive an IDCMP_GADGETDOWN IntuiMessage when the user presses the mouse button over the slider. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_RelVerify (BOOL)&lt;br /&gt;
: Set this to TRUE to receive an IDCMP_GADGETUP IntuiMessage when the user releases the mouse button after using the slider. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; PGA_Freedom&lt;br /&gt;
: Specifies which direction the knob may move. Set to LORIENT_VERT for a vertical slider or LORIENT_HORIZ for a horizontal slider. The default is LORIENT_HORIZ. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the slider, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
Up to three different classes of IntuiMessage may be received at the port when the user plays with a slider, these are IDCMP_MOUSEMOVE, IDCMP_GADGETUP and IDCMP_GADGETDOWN. The program may examine the IntuiMessage Code field to discover the slider&#039;s level.&lt;br /&gt;
&lt;br /&gt;
IDCMP_MOUSEMOVE IntuiMessages will be heard whenever the slider&#039;s level changes. IDCMP_MOUSEMOVE IntuiMessages will not be heard if the knob has not moved far enough for the level to actually change. For example if the slider runs from 0 to 15 and is currently set to 12, if the user drags the slider all the way up the program will hear no more than three IDCMP_MOUSEMOVEs, one each for 13, 14 and 15.&lt;br /&gt;
&lt;br /&gt;
If {GA_Immediate, TRUE} is specified, then the program will always hear an IDCMP_GADGETDOWN IntuiMessage when the user begins to adjust a slider. If {GA_RelVerify, TRUE} is specified, then the program will always hear an IDCMP_GADGETUP IntuiMessage when the user finishes adjusting the slider. If IDCMP_GADGETUP or IDCMP_GADGETDOWN IntuiMessages are requested, the program will always hear them, even if the level has not changed since the previous IntuiMessage.&lt;br /&gt;
&lt;br /&gt;
Note that the Code field of the IntuiMessage structure is a UWORD, while the slider&#039;s level may be negative, since it is a WORD. Be sure to copy or cast the IntuiMessage-&amp;amp;gt;Code into a WORD if the slider has negative levels.&lt;br /&gt;
&lt;br /&gt;
If the user clicks in the container next to the knob, the slider level will increase or decrease by one. If the user drags the knob itself, then the knob will snap to the nearest integral position when it is released.&lt;br /&gt;
&lt;br /&gt;
Here is an example of the screen-depth slider discussed earlier:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/* NewGadget initialized here. Note the three spaces&lt;br /&gt;
 * after &amp;quot;Slider:&amp;quot;, to allow a blank plus the two digits&lt;br /&gt;
 * of the level display&lt;br /&gt;
 */&lt;br /&gt;
ng.ng_Flags = PLACETEXT_LEFT;&lt;br /&gt;
ng.ng_GadgetText = &amp;quot;Slider:   &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
LONG DepthToColors(struct Gadget *gad, WORD level)&lt;br /&gt;
{&lt;br /&gt;
return ((WORD)(1 &amp;lt;&amp;lt; level));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
gad = IGadTools-&amp;gt;CreateGadget(SLIDER_KIND, gad, &amp;amp;ng,&lt;br /&gt;
    GTSL_Min, 1,&lt;br /&gt;
    GTSL_Max, 5,&lt;br /&gt;
    GTSL_Level, current_depth,&lt;br /&gt;
    GTSL_MaxLevelLen, 2,&lt;br /&gt;
    GTSL_LevelFormat, &amp;quot;%2ld&amp;quot;,&lt;br /&gt;
    GTSL_DispFunc, DepthToColors,&lt;br /&gt;
    TAG_END);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Scroller Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Scrollers (SCROLLER_KIND) bear some similarity to sliders, but are used for a quite different job: they allow the user to adjust the position of a limited view into a larger area. For example, Workbench&#039;s windows have scrollers that allow the user to see icons that are outside the visible portion of a window. Another example is a scrolling list in a file requester which has a scroller that allows the user to see different parts of the whole list.&lt;br /&gt;
&lt;br /&gt;
A scroller consists of a proportional gadget and usually also has a pair of arrow buttons.&lt;br /&gt;
&lt;br /&gt;
While the slider deals in minimum, maximum and current level, the scroller understands Total, Visible and Top. For a scrolling list, Total would be the number of items in the entire list, Visible would be the number of lines visible in the display area and Top would be the number of the first line displayed in the visible part of the list. Top would run from zero to Total - Visible. For an area-scroller such as those in Workbench&#039;s windows, Total would be the height (or width) of the whole area, Visible would be the visible height (or width) and Top would be the top (or left) edge of the visible part.&lt;br /&gt;
&lt;br /&gt;
Note that the position of a scroller should always represent the position of the visible part of the project and never the position of a cursor or insertion point.&lt;br /&gt;
&lt;br /&gt;
Scrollers respect the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTSC_Top (WORD)&lt;br /&gt;
: The top line or position visible in the area that the scroller represents. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSC_Total (WORD)&lt;br /&gt;
: The total number of lines or positions that the scroller represents. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSC_Visible (WORD)&lt;br /&gt;
: The visible number of lines or positions that the scroller represents. The default is two. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSC_Arrows (UWORD)&lt;br /&gt;
: Asks for arrow gadgets to be attached to the scroller. The value supplied will be used as the width of each arrow button for a horizontal scroller or the height of each arrow button for a vertical scroller, the other dimension will be set by GadTools to match the scroller size. It is generally recommend that arrows be provided. The default is no arrows. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Immediate (BOOL)&lt;br /&gt;
: Set this to TRUE to receive an IDCMP_GADGETDOWN IntuiMessage when the user presses the mouse button over the scroller. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_RelVerify (BOOL)&lt;br /&gt;
: Set this to TRUE to receive an IDCMP_GADGETUP IntuiMessage when the user releases the mouse button after using the scroller. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; PGA_Freedom&lt;br /&gt;
: Specifies which direction the knob may move. Set to LORIENT_VERT for a vertical scroller or LORIENT_HORIZ for a horizontal scroller. The default is LORIENT_HORIZ. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the scroller, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
The IntuiMessages received for a scroller gadget are the same in nature as those for a slider defined above, including the fact that messages are only heard by the program when the knob moves far enough for the Top value to actually change. The Code field of the IntuiMessage will contain the new Top value of the scroller.&lt;br /&gt;
&lt;br /&gt;
If the user clicks on an arrow gadget, the scroller moves by one unit. If the user holds the button down over an arrow gadget, it repeats.&lt;br /&gt;
&lt;br /&gt;
If the user clicks in the container next to the knob, the scroller will move by one page, which is the visible amount less one. This means that when the user pages through a scrolling list, any pair of successive views will overlap by one line. This helps the user understand the continuity of the list. If the program is using a scroller to pan through an area then there will be an overlap of one unit between successive views. It is recommended that Top, Visible and Total be scaled so that one unit represents about five to ten percent of the visible amount.&lt;br /&gt;
&lt;br /&gt;
==== Listview Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Listview gadgets (LISTVIEW_KIND) are scrolling lists. They consist of a scroller with arrows, an area where the list itself is visible and optionally a place where the current selection is displayed, which may be editable. The user can browse through the list using the scroller or its arrows and may select an entry by clicking on that item.&lt;br /&gt;
&lt;br /&gt;
There are a number of tags that are used with listviews:&lt;br /&gt;
&lt;br /&gt;
; GTLV_Labels (struct List *)&lt;br /&gt;
: An Exec list whose nodes&#039; ln_Name fields are to be displayed as items in the scrolling list. If the list is empty, an empty List structure or a NULL value may be used for GTLV_Labels. This tag accepts a value of &amp;quot;~0&amp;quot; to detach the list from the listview, defined below. The default is NULL. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTLV_Top (UWORD)&lt;br /&gt;
: The ordinal number of the top item visible in the listview. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTLV_ReadOnly (BOOL)&lt;br /&gt;
: Set this to TRUE for a read-only listview, which the user can browse, but not select items from. A read-only listview can be recognized because the list area is recessed, not raised. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTLV_ScrollWidth (UWORD)&lt;br /&gt;
: The width of the scroller to be used in the listview. Any value specified must be reasonably bigger than zero. The default is 16. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTLV_ShowSelected (struct Gadget *)&lt;br /&gt;
: Use this tag to show the currently selected entry displayed underneath the listview. Set its value to NULL to get a read-only (TEXT_KIND) display of the currently selected entry or set it to a pointer to an already-created GadTools STRING_KIND gadget to allow the user to directly edit the current entry. By default, there is no display of the currently selected entry. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTLV_Selected (UWORD)&lt;br /&gt;
: Ordinal number of the item to be placed into the display of the current selection under the listview. This tag is ignored if GTLV_ShowSelected is not used. Set it to &amp;quot;~0&amp;quot; to have no current selection. The default is &amp;quot;~0&amp;quot;. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; LAYOUTA_Spacing (UWORD)&lt;br /&gt;
: Extra space, in pixels, to be placed between the entries in the listview. The default is zero. (Create only.)&lt;br /&gt;
&lt;br /&gt;
The program will only hear from a listview when the user selects an item from the list. The program will then receive an IDCMP_GADGETUP IntuiMessage. This message will contain the ordinal number of the item within the list that was selected in the Code field of the message. This number is independent of the displayed listview, it is the offset from the start of the list of items.&lt;br /&gt;
&lt;br /&gt;
If the program attaches a display gadget by using the TagItem {GTLV_ShowSelected, NULL}, then whenever the user clicks on an entry in the listview it will be copied into the display gadget.&lt;br /&gt;
&lt;br /&gt;
If the display gadget is to be editable, then the program must first create a GadTools STRING_KIND gadget whose width matches the width of the listview. The TagItem {GTLV_ShowSelected, stringgad} is used to install the editable gadget, where stringgad is the pointer returned by CreateGadget(). When the user selects any entry from the listview, it gets copied into the string gadget. The user can edit the string and the program will hear normal string gadget IDCMP_GADGETUP messages from the STRING_KIND gadget.&lt;br /&gt;
&lt;br /&gt;
The Exec List and its Node structures may not be modified while they are attached to the listview, since the list might be needed at any time. If the program has prepared an entire new list, including a new List structure and all new nodes, it may replace the currently displayed list in a single step by calling GT_SetGadgetAttrs() with the TagItem {GTLV_Labels, newlist}. If the program needs to operate on the list that has already been passed to the listview, it should detach the list by setting the GTLV_Labels attribute to &amp;quot;~0&amp;quot;. When done modifying the list, resubmit it by setting GTLV_Labels to once again point to it. This is better than first setting the labels to NULL and later back to the list, since setting GTLV_Labels to NULL will visually clear the listview. If the GTLV_Labels attribute is set to &amp;quot;~0&amp;quot;, the program is expected to set it back to something determinate, either a list or NULL, soon after.&lt;br /&gt;
&lt;br /&gt;
The height specified for the listview will determine the number of lines in the list area. When creating a listview, it will be no bigger than the size specified in the NewGadget structure. The size will include the current-display gadget, if any, that has been requested via the GTLV_ShowSelected tag. The listview may end up being less tall than the application asked for, since the calculated height assumes an integral number of lines in the list area.&lt;br /&gt;
&lt;br /&gt;
By default, the gadget label will be placed above the listview. This may be overridden using ng_Flags.&lt;br /&gt;
&lt;br /&gt;
==== Palette Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Palette gadgets (PALETTE_KIND) let the user pick a color from a set of several. A palette gadget consists of a number of colored squares, one for each color available. There may also be an optional indicator square which is filled with the currently selected color. To create a color editor, a palette gadget would be combined with some sliders to control red, green and blue components, for example.&lt;br /&gt;
&lt;br /&gt;
Palette gadgets use the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTPA_Depth (UWORD)&lt;br /&gt;
: The number of bitplanes that the palette represents. There will be 1 &amp;lt;&amp;lt; depth (2^depth) squares in the palette gadget. The default is one. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTPA_Color (UBYTE)&lt;br /&gt;
: The selected color of the palette. The default is one. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTPA_ColorOffset (UBYTE)&lt;br /&gt;
: The first color to use in the palette. For example, if GTPA_Depth is two and GTPA_ColorOffset is four, then the palette will have squares for colors four, five, six and seven. The default is zero. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTPA_IndicatorWidth (UWORD)&lt;br /&gt;
: The desired width of the current-color indicator. By specifying this tag, the application is asking for an indicator to be placed to the left of the color selection squares. The indicator will be as tall as the gadget itself. By default there is no indicator. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTPA_IndicatorHeight (UWORD)&lt;br /&gt;
: The desired height of the current-color indicator. By specifying this tag, the application is asking for an indicator to be placed above the color selection squares. The indicator will be as wide as the gadget itself. By default there is no indicator. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the palette gadget, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
An IDCMP_GADGETUP IntuiMessage will be received when the user selects a color from the palette. The current-color indicator is recessed, indicating that clicking on it has no effect.&lt;br /&gt;
&lt;br /&gt;
If the palette is wide and not tall, use the GTPA_IndicatorWidth tag to put the indicator on the left. If the palette is tall and narrow, put the indicator on top using GTPA_IndicatorHeight.&lt;br /&gt;
&lt;br /&gt;
By default, the gadget&#039;s label will go above the palette gadget, unless GTPA_IndicatorWidth is specified, in which case the label will go on the left. In either case, the default may be overridden by setting the appropriate flag in the NewGadget&#039;s ng_Flags field.&lt;br /&gt;
&lt;br /&gt;
The size specified for the palette gadget will determine how the area is subdivided to make the individual color squares. The actual size of the palette gadget will be no bigger than the size given, but it can be smaller in order to make the color squares all exactly the same size.&lt;br /&gt;
&lt;br /&gt;
==== Text-Display and Numeric-Display Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Text-display (TEXT_KIND) and numeric-display (NUMBER_KIND) gadgets are read-only displays of information. They are useful for displaying information that is not editable or selectable, while allowing the application to use the GadTools formatting and visuals. Conveniently, the visuals are automatically refreshed through normal GadTools gadget processing. The values displayed may be modified by the program in the same way other GadTools gadgets may be updated.&lt;br /&gt;
&lt;br /&gt;
Text-display and number-display gadgets consist of a fixed label (the one supplied as the NewGadget&#039;s ng_GadgetText), as well as a changeable string or number (GTTX_Text or GTNM_Number respectively). The fixed label is placed according to the PLACETEXT_ flag chosen in the NewGadget ng_Flags field. The variable part is aligned to the left-edge of the gadget.&lt;br /&gt;
&lt;br /&gt;
Text-display gadgets recognize the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTTX_Text (STRPTR)&lt;br /&gt;
: Pointer to the string to be displayed or NULL for no string. The default is NULL. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTTX_Border (BOOL)&lt;br /&gt;
: Set to TRUE to place a recessed border around the displayed string. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTTX_CopyText (BOOL)&lt;br /&gt;
: This flag instructs the text-display gadget to copy the supplied GTTX_Text string instead of using only a pointer to the string. This only works for the value of GTTX_Text set at CreateGadget() time. If GTTX_Text is changed, the new text will be referenced by pointer, not copied. Do not use this tag without a non-NULL GTTX_Text. (Create only.)&lt;br /&gt;
&lt;br /&gt;
Number-display gadgets have the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTNM_Number (LONG)&lt;br /&gt;
: The number to be displayed. The default is zero. (Create or set.)&lt;br /&gt;
&lt;br /&gt;
; GTNM_Border (BOOL)&lt;br /&gt;
: Set to TRUE to place a recessed border around the displayed number. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
Since they are not selectable, text-display and numeric-display gadgets never cause IntuiMessages to be sent to the application.&lt;br /&gt;
&lt;br /&gt;
==== Generic Gadgets ====&lt;br /&gt;
&lt;br /&gt;
If the application requires a specialized gadget which does not fit into any of the defined GadTools kinds but would still like to use the GadTools gadget creation and deletion functions, it may create a GadTools generic gadget and use it any way it sees fit. In fact, all of the kinds of GadTools gadgets are created out of GadTools GENERIC_KIND gadgets.&lt;br /&gt;
&lt;br /&gt;
The gadget that gets created will heed almost all the information contained in the NewGadget structure supplied.&lt;br /&gt;
&lt;br /&gt;
If ng_GadgetText is supplied, the gadget&#039;s GadgetText will point to an IntuiText structure with the provided string and font. However, do not specify any of the PLACETEXT ng_Flags, as they are currently ignored by GENERIC_KIND gadgets. PLACETEXT flags may be supported by generic GadTools gadgets in the future.&lt;br /&gt;
&lt;br /&gt;
It is up to the program to set the Flags, Activation, GadgetRender, SelectRender, MutualExclude and SpecialInfo fields of the Gadget structure.&lt;br /&gt;
&lt;br /&gt;
The application must also set the GadgetType field, but be certain to preserve the bits set by CreateGadget().&lt;br /&gt;
&lt;br /&gt;
For instance, to make a gadget boolean, use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
gad-&amp;gt;GadgetType |= GTYP_BOOLGADGET;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and not&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
gad-&amp;gt;GadgetType = GTYP_BOOLGADGET;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using direct assignment, (the = operator), clears all other flags in the GadgetType field and the gadget may not be properly freed by FreeGadgets().&lt;br /&gt;
&lt;br /&gt;
=== Functions for Setting up GadTools Menus and Gadgets ===&lt;br /&gt;
&lt;br /&gt;
This section gives all the details on the functions used to set up GadTools menus and gadgets that were mentioned briefly earlier in this article.&lt;br /&gt;
&lt;br /&gt;
==== GetVisualInfo() and FreeVisualInfo() ====&lt;br /&gt;
&lt;br /&gt;
In order to ensure their best appearance, GadTools gadgets and menus need information about the screen on which they will appear. Before creating any GadTools gadgets or menus, the program must get this information using the GetVisualInfo() call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
APTR GetVisualInfoA( struct Screen *screen, struct TagItem *taglist );&lt;br /&gt;
APTR GetVisualInfo( struct Screen *screen, Tag tag1, ... );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set the screen argument to a pointer to the screen you are using. The tag arguments, tag1 or taglist, are reserved for future extensions. Currently none are recognized, so only TAG_END should be used.&lt;br /&gt;
&lt;br /&gt;
The function returns an abstract handle called the VisualInfo. For GadTools gadgets, the ng_VisualInfo field of the NewGadget structure must be set to this handle before the gadget can be added to the window. GadTools menu layout and creation functions also require the VisualInfo handle as an argument.&lt;br /&gt;
&lt;br /&gt;
There are several ways to get the pointer to the screen on which the window will be opened. If the application has its own custom screen, this pointer is known from the call to OpenScreen() or OpenScreenTags(). If the application already has its window opened on the Workbench or some other public screen, the screen pointer can be found in Window.WScreen. Often the program will create its gadgets and menus before opening the window. In this case, use LockPubScreen() to get a pointer to the desired public screen, which also provides a lock on the screen to prevent it from closing. See [[Intuition_Screens|Intuition Screens]] and [[Intuition_Windows|Intuition Windows]] for more about public screens.&lt;br /&gt;
&lt;br /&gt;
The VisualInfo data must be freed after all the gadgets and menus have been freed but before releasing the screen. Custom screens are released by calling CloseScreen(), public screens are released by calling CloseWindow() or UnlockPubScreen(), depending on the technique used. Use FreeVisualInfo() to free the visual info data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
VOID FreeVisualInfo( APTR vi );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function takes just one argument, the VisualInfo handle as returned by GetVisualInfo(). The sequence of events for using the VisualInfo handle could look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
void init()&lt;br /&gt;
{&lt;br /&gt;
myscreen = IIntuition-&amp;gt;LockPubScreen(NULL);&lt;br /&gt;
if (!myscreen)&lt;br /&gt;
    {&lt;br /&gt;
    cleanup(&amp;quot;Failed to lock default public screen&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
vi = IGadTools-&amp;gt;GetVisualInfo(myscreen);&lt;br /&gt;
if (!vi)&lt;br /&gt;
    {&lt;br /&gt;
    cleanup(&amp;quot;Failed to GetVisualInfo&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
/* Create gadgets here */&lt;br /&gt;
ng.ng_VisualInfo = vi;&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cleanup(STRPTR errorstr)&lt;br /&gt;
{&lt;br /&gt;
/* These functions may be safely called with a NULL parameter: */&lt;br /&gt;
IGadTools-&amp;gt;FreeGadgets(glist);&lt;br /&gt;
IGadTools-&amp;gt;FreeVisualInfo(vi);&lt;br /&gt;
&lt;br /&gt;
if (myscreen)&lt;br /&gt;
    IIntuition-&amp;gt;UnlockPubScreen(NULL, myscreen);&lt;br /&gt;
&lt;br /&gt;
IDOS-&amp;gt;Printf(errorstr);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CreateContext() ====&lt;br /&gt;
&lt;br /&gt;
Use of GadTools gadgets requires some per-window context information. CreateContext() establishes a place for that information to go. This function must be called before any GadTools gadgets are created.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
struct Gadget *CreateContext( struct Gadget **glistptr );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The glistptr argument is a double-pointer to a Gadget structure. More specifically, this is a pointer to a NULL-initialized pointer to a Gadget structure.&lt;br /&gt;
&lt;br /&gt;
The return value of CreateContext() is a pointer to this gadget, which should be fed to the program&#039;s first call to CreateGadget(). This pointer to the Gadget structure returned by CreateContext(), may then serve as a handle to the list of gadgets as they are created. The code fragment listed in the next section shows how to use CreateContext() together with CreateGadget() to make a linked list of GadTools gadgets.&lt;br /&gt;
&lt;br /&gt;
=== Creating Gadget Lists ===&lt;br /&gt;
&lt;br /&gt;
In the discussion of CreateGadget() presented earlier, the examples showed only how to make a single gadget. For most applications that use GadTools, however, a whole list of gadgets will be needed. To do this, the application could use code such as this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
struct NewGadget *newgad1, *newgad2, *newgad3;&lt;br /&gt;
struct Gadget *glist = NULL;&lt;br /&gt;
struct Gadget *pgad;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
/* Initialize NewGadget structures */&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/* Note that CreateContext() requires a POINTER to a NULL-initialized&lt;br /&gt;
 * pointer to struct Gadget:&lt;br /&gt;
 */&lt;br /&gt;
pgad = IGadTools-&amp;gt;CreateContext(&amp;amp;amp;glist);&lt;br /&gt;
&lt;br /&gt;
pgad = IGadTools-&amp;gt;CreateGadget(BUTTON_KIND, pgad, newgad1, TAG_END);&lt;br /&gt;
pgad = IGadTools-&amp;gt;CreateGadget(STRING_KIND, pgad, newgad2, TAG_END);&lt;br /&gt;
pgad = IGadTools-&amp;gt;CreateGadget(MX_KIND,     pgad, newgad3, TAG_END);&lt;br /&gt;
&lt;br /&gt;
if (!pgad)&lt;br /&gt;
    {&lt;br /&gt;
    IGadTools-&amp;gt;FreeGadgets(glist);&lt;br /&gt;
    exit_error();&lt;br /&gt;
    }&lt;br /&gt;
else&lt;br /&gt;
    {&lt;br /&gt;
    if ( mywin = IIntuition-&amp;gt;OpenWindowTags(NULL,&lt;br /&gt;
                              WA_Gadgets,   glist,&lt;br /&gt;
                              ...&lt;br /&gt;
                              /* Other tags... */&lt;br /&gt;
                              ...&lt;br /&gt;
                              TAG_END) )&lt;br /&gt;
        {&lt;br /&gt;
        /* Complete the rendering of the gadgets */&lt;br /&gt;
        IGadTools-&amp;gt;GT_RefreshWindow(win, NULL);&lt;br /&gt;
        ...&lt;br /&gt;
        /* and continue on... */&lt;br /&gt;
        ...&lt;br /&gt;
        IIntuition-&amp;gt;CloseWindow(mywin);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    IGadTools-&amp;gt;FreeGadgets(glist);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pointer to the previous gadget, pgad in the code fragment above, is used for three purposes. First, when CreateGadget() is called multiple times, each new gadget is automatically linked to the previous gadget&#039;s NextGadget field, thus creating a gadget list. Second, if one of the gadget creations fails (usually due to low memory, but other causes are possible), then for the next call to CreateGadget(), pgad will be NULL and CreateGadget() will fail immediately. This means that the program can perform several successive calls to CreateGadget() and only have to check for failure at the end.&lt;br /&gt;
&lt;br /&gt;
Finally, although this information is hidden in the implementation and not important to the application, certain calls to CreateGadget() actually cause several Intuition gadgets to be allocated and these are automatically linked together without program interaction, but only if a previous gadget pointer is supplied. If several gadgets are created by a single CreateGadget() call, they work together to provide the functionality of a single GadTools gadget. The application should always act as though the gadget pointer returned by CreateGadget() points to a single gadget instance. See &amp;quot;Documented Side-Effects&amp;quot; for a warning.&lt;br /&gt;
&lt;br /&gt;
There is one exception to the fact that a program only has to check for failure after the last CreateGadget() call and that is when the application depends on the successful creation of a gadget and caches or immediately uses the gadget pointer returned by CreateGadget().&lt;br /&gt;
&lt;br /&gt;
For instance, if the program wants to create a string gadget and save a pointer to the string buffer, it might do so as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
gad = IGadTools-&amp;gt;CreateGadget(STRING_KIND, gad, &amp;amp;ng,&lt;br /&gt;
                   GTST_String, &amp;quot;Hello World&amp;quot;,&lt;br /&gt;
                   TAG_END);&lt;br /&gt;
if (gad)&lt;br /&gt;
    {&lt;br /&gt;
    stringbuffer = ((struct StringInfo *)(gad-&amp;gt;SpecialInfo))-&amp;gt;Buffer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
/* Creation can continue here: */&lt;br /&gt;
gad = IGadTools-&amp;gt;CreateGadget(..._KIND, gad, &amp;amp;ng2,&lt;br /&gt;
    ...&lt;br /&gt;
    TAG_END);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A major benefit of having a reusable NewGadget structure is that often many fields do not change and some fields change incrementally. For example, the application can set just the NewGadget&#039;s ng_VisualInfo and ng_TextAttr only once and never have to modify them again even if the structure is reused to create many gadgets. A set of similar gadgets may share size and some positional information so that code such as the following might be used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/* Assume that the NewGadget structure &#039;ng&#039; is fully&lt;br /&gt;
 * initialized here for a button labelled &amp;quot;OK&amp;quot;&lt;br /&gt;
 */&lt;br /&gt;
gad = IGadTools-&amp;gt;CreateGadget(BUTTON_KIND, gad, &amp;amp;ng,&lt;br /&gt;
                   TAG_END);&lt;br /&gt;
&lt;br /&gt;
/* Modify only those fields that need to change: */&lt;br /&gt;
ng.ng_GadgetID++;&lt;br /&gt;
ng.ng_LeftEdge += 80;&lt;br /&gt;
ng.ng_GadgetText = &amp;quot;Cancel&amp;quot;;&lt;br /&gt;
gad = IGadTools-&amp;gt;CreateGadget(BUTTON_KIND, gad, &amp;amp;ng,&lt;br /&gt;
                   TAG_END);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Warning|text=All gadgets created by GadTools currently have the GADTOOL_TYPE bit set in their GadgetType field. It is not correct to check for, set, clear or otherwise rely on this since it is subject to change.}}&lt;br /&gt;
&lt;br /&gt;
=== Gadget Refresh Functions ===&lt;br /&gt;
&lt;br /&gt;
Normally, GadTools gadgets are created and then attached to a window when the window is opened, either through the WA_FirstGadget tag or the NewWindow.FirstGadget field. Alternately, they may be added to a window after it is open by using the functions AddGList() and RefreshGList().&lt;br /&gt;
&lt;br /&gt;
Regardless of which way gadgets are attached to a window, the program must then call the GT_RefreshWindow() function to complete the rendering of GadTools gadgets. This function takes two arguments.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
VOID GT_RefreshWindow( struct Window *win, struct Requester *req );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This win argument is a pointer to the window that contains the GadTools gadgets. The req argument is currently unused and should be set to NULL. This function should only be called immediately after adding GadTools gadgets to a window. Subsequent changes to GadTools gadget imagery made through calls to GT_SetGadgetAttrs() will be automatically performed by GadTools when the changes are made. (There is no need to call GT_RefreshWindow() in that case.)&lt;br /&gt;
&lt;br /&gt;
As mentioned earlier, applications must always ask for notification of window refresh events for any window that uses GadTools gadgets. When the application receives an IDCMP_REFRESHWINDOW message for a window, Intuition has already refreshed its gadgets. Normally, a program would then call Intuition&#039;s BeginRefresh(), perform its own custom rendering operations, and finally call EndRefresh(). But for a window that uses GadTools gadgets, the application must call GT_BeginRefresh() and GT_EndRefresh() in place of BeginRefresh() and EndRefresh(). This allows the the GadTools gadgets to be fully refreshed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
VOID GT_BeginRefresh( struct Window *win );&lt;br /&gt;
VOID GT_EndRefresh ( struct Window *win, LONG complete );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For both functions, the win argument is a pointer to the window to be refreshed. For GT_EndRefresh(), set the complete argument to TRUE if refreshing is complete, set it to FALSE otherwise. See the discussion of BeginRefresh() and EndRefresh() in [[Intuition_Windows|Intuition Windows]] for more about window refreshing.&lt;br /&gt;
&lt;br /&gt;
When using GadTools gadgets, the program may not set the window&#039;s WFLG_NOCAREREFRESH flag. Even if there is no custom rendering to be performed, GadTools gadgets requires this minimum code to handle IDCMP_REFRESHWINDOW messages:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
case IDCMP_REFRESHWINDOW:&lt;br /&gt;
    IGadTools-&amp;gt;GT_BeginRefresh(win);&lt;br /&gt;
    /* custom rendering, if any, goes here */&lt;br /&gt;
    IGadTools-&amp;gt;GT_EndRefresh(win, TRUE);&lt;br /&gt;
    break;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other GadTools Functions ===&lt;br /&gt;
&lt;br /&gt;
This section discusses some additional support functions in the GadTools library that serve special needs.&lt;br /&gt;
&lt;br /&gt;
==== GT_FilterIMsg() and GT_PostFilterIMsg() ====&lt;br /&gt;
&lt;br /&gt;
For most GadTools programs, GT_GetIMsg() and GT_ReplyIMsg() work perfectly well. In rare cases an application may find they pose a bit of a problem. A typical case is when all messages are supposed to go through a centralized ReplyMsg() that cannot be converted to a GT_ReplyIMsg(). Since calls to GT_GetIMsg() and GT_ReplyIMsg() must be paired, there would be a problem.&lt;br /&gt;
&lt;br /&gt;
For such cases, the GT_FilterIMsg() and GT_PostFilterIMsg() functions are available. These functions allow GetMsg() and ReplyMsg() to be used in a way that is compatible with GadTools.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Warning|text=These functions are for specialized use only and will not be used by the majority of applications. See GT_GetIMsg() and GT_ReplyIMsg() for standard message handling.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
struct IntuiMessage *GT_FilterIMsg( struct IntuiMessage *imsg );&lt;br /&gt;
struct IntuiMessage *GT_PostFilterIMsg( struct IntuiMessage *imsg );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The GT_FilterIMsg() function should be called right after GetMsg(). It takes a pointer to the original IntuiMessage and, if the message applies to a GadTools gadget, returns either a modified IntuiMessage or a NULL. A NULL return signifies that the message was consumed by a GadTools gadget (and not needed by the application).&lt;br /&gt;
&lt;br /&gt;
The GT_PostFilterIMsg() function should be called before replying to any message modified by GT_FilterIMsg(). It takes a pointer to the modified version of an IntuiMessage obtained with GT_FilterIMsg() and returns a pointer to the original IntuiMessage.&lt;br /&gt;
&lt;br /&gt;
The typical calling sequence for a program that uses these functions, is to call GetMsg() to get the IntuiMessage. Then, if the message applies to a window which contains GadTools gadgets, call GT_FilterIMsg(). Any message returned by GT_FilterIMsg() should be used like a message returned from GT_GetIMsg().&lt;br /&gt;
&lt;br /&gt;
When done with the message, the application must call GT_PostFilterIMsg() to perform any clean up necessitated by the previous call to GT_FilterIMsg(). In all cases, the application &#039;&#039;must&#039;&#039; then reply the original IntuiMessage using ReplyMsg(). This is true even for consumed messages as these are &#039;&#039;not&#039;&#039; replied by GadTools. For example, the application could use code such as this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/* port is a message port receiving different messages */&lt;br /&gt;
/* gtwindow is the window that contains GadTools gadgets */&lt;br /&gt;
&lt;br /&gt;
imsg = IExec-&amp;gt;GetMsg(port);&lt;br /&gt;
&lt;br /&gt;
/* Is this the window with GadTools gadgets? */&lt;br /&gt;
if (imsg-&amp;gt;IDCMPWindow == gtwindow)&lt;br /&gt;
    {&lt;br /&gt;
    /* Filter the message and see if action is needed */&lt;br /&gt;
    if (gtimsg = IGadTools-&amp;gt;GT_FilterIMsg(imsg))&lt;br /&gt;
        {&lt;br /&gt;
        switch (gtimsg-&amp;gt;Class)&lt;br /&gt;
            {&lt;br /&gt;
            /* Act depending on the message */&lt;br /&gt;
            ...&lt;br /&gt;
            }&lt;br /&gt;
        /* Clean up the filtered message.  The return value is not needed */&lt;br /&gt;
        /* since we already have a pointer to the original message.       */&lt;br /&gt;
        IGadTools-&amp;gt;GT_PostFilterIMsg(gtimsg);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
/* other stuff can go here */&lt;br /&gt;
IExec-&amp;gt;ReplyMsg(imsg);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should not make any assumptions about the contents of the unfiltered IntuiMessage (imsg in the above example). Only two things are guaranteed: the unfiltered IntuiMessage must be replied to and the unfiltered IntuiMessage (if it produces anything when passed through GT_FilterIMsg()) will produce a meaningful GadTools IntuiMessage like those described in the section on the different kinds of gadgets. The relationship between the unfiltered and filtered messages are expected to change in the future. See the section on documented side-effects for more information.&lt;br /&gt;
&lt;br /&gt;
==== DrawBevelBox() ====&lt;br /&gt;
&lt;br /&gt;
A key visual signature shared by most GadTools gadgets is the raised or recessed beveled box imagery. Since the program may wish to create its own boxes to match, GadTools provides the DrawBevelBox() and DrawBevelBoxA() functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
VOID DrawBevelBoxA( struct RastPort *rport, LONG left, LONG top, LONG width, LONG height,&lt;br /&gt;
                    struct TagItem *taglist );&lt;br /&gt;
VOID DrawBevelBox ( struct RastPort *rport, LONG left, LONG top, LONG width, LONG height,&lt;br /&gt;
                    Tag tag1, ... );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The rport argument is a pointer to the RastPort into which the box is to be rendered. The left, top, width and height arguments specify the dimensions of the desired box.&lt;br /&gt;
&lt;br /&gt;
The tag arguments, tag1 or taglist, may be set as follows:&lt;br /&gt;
&lt;br /&gt;
; GT_VisualInfo (APTR)&lt;br /&gt;
: The VisualInfo handle as returned by a prior call to GetVisualInfo(). This value is required.&lt;br /&gt;
&lt;br /&gt;
; GTBB_Recessed (BOOL)&lt;br /&gt;
: A beveled box may either appear to be raised to signify an area of the window that is selectable or recessed to signify an area of the window in which clicking will have no effect. Set this boolean tag to TRUE to get a recessed box. Omit this tag entirely to get a raised box.&lt;br /&gt;
&lt;br /&gt;
DrawBevelBox() is a rendering operation, not a gadget. This means that the program must refresh any beveled boxes rendered through this function if the window gets damaged.&lt;br /&gt;
&lt;br /&gt;
=== Gadget Keyboard Equivalents ===&lt;br /&gt;
&lt;br /&gt;
Often, users find it convenient to control gadgets using the keyboard. The keyboard equivalent will be an underscored character in the gadget label, for easy identification. At the present time, however, the application is still responsible for implementing the reaction to each keypress.&lt;br /&gt;
&lt;br /&gt;
==== Denoting a Gadget&#039;s Keyboard Equivalent ====&lt;br /&gt;
&lt;br /&gt;
In order to denote the key equivalent, the application may add a marker-symbol to the gadget label. This is done by placing the marker-symbol immediately before the character to be underscored. This symbol can be any character that is not used in the label. The underscore character, &amp;quot;_&amp;quot; is the recommended marker-symbol. So, for example, to mark the letter &amp;quot;F&amp;quot; as the keyboard equivalent for a button labelled &amp;quot;Select Font ...&amp;quot;, create the gadget text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
ng.ng_GadgetText = &amp;quot;Select _Font ...&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To inform GadTools of the underscore in the label, pass the GA_Underscore tag to CreateGadget() or CreateGadgetA(). The data-value associated with this tag is a character, not a string, which is the marker-symbol used in the gadget label:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
GA_Underscore, &#039;_&#039;, /* Note &#039;_&#039;, not &amp;quot;_&amp;quot; !!! */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GadTools will create a gadget label which consists of the text supplied with the marker-symbol removed and the character following the marker-symbol underscored.&lt;br /&gt;
&lt;br /&gt;
The gadget&#039;s label would look something like:&lt;br /&gt;
&lt;br /&gt;
 Select &amp;lt;u&amp;gt;F&amp;lt;/u&amp;gt;ont ...&lt;br /&gt;
&lt;br /&gt;
==== Implementing a Gadget&#039;s Keyboard Equivalent Behavior ====&lt;br /&gt;
&lt;br /&gt;
Currently, GadTools does not process keyboard equivalents for gadgets. It is up to the application writer to implement the correct behavior, normally by calling GT_SetGadgetAttrs() on the appropriate gadget. For some kinds of gadget, the behavior should be the same regardless of whether the keyboard equivalent was pressed with or without the shift key. For other gadgets, shifted and unshifted keystrokes will have different, usually opposite, effects.&lt;br /&gt;
&lt;br /&gt;
Here is the correct behavior for keyboard equivalents for each kind of GadTools gadget:&lt;br /&gt;
&lt;br /&gt;
; Button Gadgets&lt;br /&gt;
: The keyboard equivalent should invoke the same function that clicking on the gadget does. There is currently no way to highlight the button visuals programmatically when accessing the button through a keyboard equivalent.&lt;br /&gt;
&lt;br /&gt;
; Text-Entry and Number-Entry Gadgets&lt;br /&gt;
: The keyboard equivalent should activate the gadget so the user may type into it. Use Intuition&#039;s ActivateGadget() call.&lt;br /&gt;
&lt;br /&gt;
; Checkbox Gadgets&lt;br /&gt;
: The keyboard equivalent should toggle the state of the checkbox. Use GT_SetGadgetAttrs() and the GTCB_Checked tag.&lt;br /&gt;
&lt;br /&gt;
; Mutually-Exclusive Gadgets&lt;br /&gt;
: The unshifted keystroke should activate the next choice, wrapping around from the last to the first. The shifted keystroke should activate the previous choice, wrapping around from the first to the last. Use GT_SetGadgetAttrs() and the GTMX_Active tag.&lt;br /&gt;
&lt;br /&gt;
; Cycle Gadgets&lt;br /&gt;
: The unshifted keystroke should activate the next choice, wrapping around from the last to the first. The shifted keystroke should activate the previous choice, wrapping around from the first to the last. Use GT_SetGadgetAttrs() and the GTCY_Active tag.&lt;br /&gt;
&lt;br /&gt;
; Slider Gadgets&lt;br /&gt;
: The unshifted keystroke should increase the slider&#039;s level by one, stopping at the maximum, while the shifted keystroke should decrease the level by one, stopping at the minimum. Use GT_SetGadgetAttrs() and the GTSL_Level tag.&lt;br /&gt;
&lt;br /&gt;
; Scroller Gadgets&lt;br /&gt;
: The unshifted keystroke should increase the scroller&#039;s top by one, stopping at the maximum, while the shifted keystroke should decrease the scroller&#039;s top by one, stopping at the minimum. Use GT_SetGadgetAttrs() and the GTSC_Top tag.&lt;br /&gt;
&lt;br /&gt;
; Listview Gadgets&lt;br /&gt;
: The unshifted keystroke should cause the next entry in the list to become the selected one, stopping at the last entry, while the shifted keystroke should cause the previous entry in the list to become the selected one, stopping at the first entry. Use GT_SetGadgetAttrs() and the GTLV_Top and GTLV_Selected tags.&lt;br /&gt;
&lt;br /&gt;
; Palette Gadgets&lt;br /&gt;
: The unshifted keystroke should select the next color, wrapping around from the last to the first. The shifted keystroke should activate the previous color, wrapping around from the first to the last. Use GT_SetGadgetAttrs() and the GTPA_Color tag.&lt;br /&gt;
&lt;br /&gt;
; Text-Display and Number-Display Gadgets&lt;br /&gt;
: These kinds of GadTools gadget have no keyboard equivalents since they are not selectable.&lt;br /&gt;
&lt;br /&gt;
; Generic Gadgets&lt;br /&gt;
: Define appropriate keyboard functions based on the kinds of keyboard behavior defined for other GadTools kinds.&lt;br /&gt;
&lt;br /&gt;
=== Complete GadTools Gadget Example ===&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a working example showing how to set up and use a linked list of GadTools gadgets complete with keyboard shortcuts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/* gadtoolsgadgets.c&lt;br /&gt;
** Simple example of using a number of gadtools gadgets.&lt;br /&gt;
**&lt;br /&gt;
*/&lt;br /&gt;
#define INTUI_V36_NAMES_ONLY&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;exec/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;intuition/intuition.h&amp;gt;&lt;br /&gt;
#include &amp;lt;intuition/gadgetclass.h&amp;gt;&lt;br /&gt;
#include &amp;lt;libraries/gadtools.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;proto/exec.h&amp;gt;&lt;br /&gt;
#include &amp;lt;proto/dos.h&amp;gt;&lt;br /&gt;
#include &amp;lt;proto/graphics.h&amp;gt;&lt;br /&gt;
#include &amp;lt;proto/intuition.h&amp;gt;&lt;br /&gt;
#include &amp;lt;proto/gadtools.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* Gadget defines of our choosing, to be used as GadgetID&#039;s,&lt;br /&gt;
** also used as the index into the gadget array my_gads[].&lt;br /&gt;
*/&lt;br /&gt;
#define MYGAD_SLIDER    (0)&lt;br /&gt;
#define MYGAD_STRING1   (1)&lt;br /&gt;
#define MYGAD_STRING2   (2)&lt;br /&gt;
#define MYGAD_STRING3   (3)&lt;br /&gt;
#define MYGAD_BUTTON    (4)&lt;br /&gt;
&lt;br /&gt;
/* Range for the slider: */&lt;br /&gt;
#define SLIDER_MIN  (1)&lt;br /&gt;
#define SLIDER_MAX (20)&lt;br /&gt;
&lt;br /&gt;
struct TextAttr Topaz80 = { &amp;quot;topaz.font&amp;quot;, 8, 0, 0, };&lt;br /&gt;
&lt;br /&gt;
struct IntuitionIFace *IIntuition;&lt;br /&gt;
struct GraphicsIFace  *IGraphics;&lt;br /&gt;
struct GadToolsIFace  *IGadTools;&lt;br /&gt;
&lt;br /&gt;
/* Print any error message.  We could do more fancy handling (like&lt;br /&gt;
** an EasyRequest()), but this is only a demo.&lt;br /&gt;
*/&lt;br /&gt;
void errorMessage(STRPTR error)&lt;br /&gt;
{&lt;br /&gt;
if (error)&lt;br /&gt;
    IDOS-&amp;gt;Printf(&amp;quot;Error: %s\n&amp;quot;, error);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Function to handle a GADGETUP or GADGETDOWN event.  For GadTools gadgets,&lt;br /&gt;
** it is possible to use this function to handle MOUSEMOVEs as well, with&lt;br /&gt;
** little or no work.&lt;br /&gt;
*/&lt;br /&gt;
VOID handleGadgetEvent(struct Window *win, struct Gadget *gad, UWORD code,&lt;br /&gt;
    WORD *slider_level, struct Gadget *my_gads[])&lt;br /&gt;
{&lt;br /&gt;
switch (gad-&amp;gt;GadgetID)&lt;br /&gt;
    {&lt;br /&gt;
    case MYGAD_SLIDER:&lt;br /&gt;
        /* Sliders report their level in the IntuiMessage Code field: */&lt;br /&gt;
        IDOS-&amp;gt;Printf(&amp;quot;Slider at level %ld\n&amp;quot;, code);&lt;br /&gt;
        *slider_level = code;&lt;br /&gt;
        break;&lt;br /&gt;
    case MYGAD_STRING1:&lt;br /&gt;
        /* String gadgets report GADGETUP&#039;s */&lt;br /&gt;
        IDOS-&amp;gt;Printf(&amp;quot;String gadget 1: &#039;%s&#039;.\n&amp;quot;,&lt;br /&gt;
                ((struct StringInfo *)gad-&amp;gt;SpecialInfo)-&amp;gt;Buffer);&lt;br /&gt;
        break;&lt;br /&gt;
    case MYGAD_STRING2:&lt;br /&gt;
        /* String gadgets report GADGETUP&#039;s */&lt;br /&gt;
        IDOS-&amp;gt;Printf(&amp;quot;String gadget 2: &#039;%s&#039;.\n&amp;quot;,&lt;br /&gt;
                ((struct StringInfo *)gad-&amp;gt;SpecialInfo)-&amp;gt;Buffer);&lt;br /&gt;
        break;&lt;br /&gt;
    case MYGAD_STRING3:&lt;br /&gt;
        /* String gadgets report GADGETUP&#039;s */&lt;br /&gt;
        IDOS-&amp;gt;Printf(&amp;quot;String gadget 3: &#039;%s&#039;.\n&amp;quot;,&lt;br /&gt;
                ((struct StringInfo *)gad-&amp;gt;SpecialInfo)-&amp;gt;Buffer);&lt;br /&gt;
        break;&lt;br /&gt;
    case MYGAD_BUTTON:&lt;br /&gt;
        /* Buttons report GADGETUP&#039;s (button resets slider to 10) */&lt;br /&gt;
        IDOS-&amp;gt;Printf(&amp;quot;Button was pressed, slider reset to 10.\n&amp;quot;);&lt;br /&gt;
        *slider_level = 10;&lt;br /&gt;
        IGadTools-&amp;gt;GT_SetGadgetAttrs(my_gads[MYGAD_SLIDER], win, NULL,&lt;br /&gt;
                            GTSL_Level, *slider_level,&lt;br /&gt;
                            TAG_END);&lt;br /&gt;
        break;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Function to handle vanilla keys.&lt;br /&gt;
*/&lt;br /&gt;
VOID handleVanillaKey(struct Window *win, UWORD code,&lt;br /&gt;
    WORD *slider_level, struct Gadget *my_gads[])&lt;br /&gt;
{&lt;br /&gt;
switch (code)&lt;br /&gt;
    {&lt;br /&gt;
    case &#039;v&#039;:&lt;br /&gt;
        /* increase slider level, but not past maximum */&lt;br /&gt;
        if (++*slider_level &amp;gt; SLIDER_MAX)&lt;br /&gt;
            *slider_level = SLIDER_MAX;&lt;br /&gt;
        IGadTools-&amp;gt;GT_SetGadgetAttrs(my_gads[MYGAD_SLIDER], win, NULL,&lt;br /&gt;
                            GTSL_Level, *slider_level,&lt;br /&gt;
                            TAG_END);&lt;br /&gt;
        break;&lt;br /&gt;
    case &#039;V&#039;:&lt;br /&gt;
        /* decrease slider level, but not past minimum */&lt;br /&gt;
        if (--*slider_level &amp;lt; SLIDER_MIN)&lt;br /&gt;
            *slider_level = SLIDER_MIN;&lt;br /&gt;
        IGadTools-&amp;gt;GT_SetGadgetAttrs(my_gads[MYGAD_SLIDER], win, NULL,&lt;br /&gt;
                            GTSL_Level, *slider_level,&lt;br /&gt;
                            TAG_END);&lt;br /&gt;
        break;&lt;br /&gt;
    case &#039;c&#039;:&lt;br /&gt;
    case &#039;C&#039;:&lt;br /&gt;
        /* button resets slider to 10 */&lt;br /&gt;
        *slider_level = 10;&lt;br /&gt;
        IGadTools-&amp;gt;GT_SetGadgetAttrs(my_gads[MYGAD_SLIDER], win, NULL,&lt;br /&gt;
                            GTSL_Level, *slider_level,&lt;br /&gt;
                            TAG_END);&lt;br /&gt;
        break;&lt;br /&gt;
    case &#039;f&#039;:&lt;br /&gt;
    case &#039;F&#039;:&lt;br /&gt;
        IIntuition-&amp;gt;ActivateGadget(my_gads[MYGAD_STRING1], win, NULL);&lt;br /&gt;
        break;&lt;br /&gt;
    case &#039;s&#039;:&lt;br /&gt;
    case &#039;S&#039;:&lt;br /&gt;
        IIntuition-&amp;gt;ActivateGadget(my_gads[MYGAD_STRING2], win, NULL);&lt;br /&gt;
        break;&lt;br /&gt;
    case &#039;t&#039;:&lt;br /&gt;
    case &#039;T&#039;:&lt;br /&gt;
        IIntuition-&amp;gt;ActivateGadget(my_gads[MYGAD_STRING3], win, NULL);&lt;br /&gt;
        break;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Here is where all the initialization and creation of GadTools gadgets&lt;br /&gt;
** take place.  This function requires a pointer to a NULL-initialized&lt;br /&gt;
** gadget list pointer.  It returns a pointer to the last created gadget,&lt;br /&gt;
** which can be checked for success/failure.&lt;br /&gt;
*/&lt;br /&gt;
struct Gadget *createAllGadgets(struct Gadget **glistptr, void *vi,&lt;br /&gt;
    UWORD topborder, WORD slider_level, struct Gadget *my_gads[])&lt;br /&gt;
{&lt;br /&gt;
struct NewGadget ng;&lt;br /&gt;
struct Gadget *gad;&lt;br /&gt;
&lt;br /&gt;
/* All the gadget creation calls accept a pointer to the previous gadget, and&lt;br /&gt;
** link the new gadget to that gadget&#039;s NextGadget field.  Also, they exit&lt;br /&gt;
** gracefully, returning NULL, if any previous gadget was NULL.  This limits&lt;br /&gt;
** the amount of checking for failure that is needed.  You only need to check&lt;br /&gt;
** before you tweak any gadget structure or use any of its fields, and finally&lt;br /&gt;
** once at the end, before you add the gadgets.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
/* The following operation is required of any program that uses GadTools.&lt;br /&gt;
** It gives the toolkit a place to stuff context data.&lt;br /&gt;
*/&lt;br /&gt;
gad = IGadTools-&amp;gt;CreateContext(glistptr);&lt;br /&gt;
&lt;br /&gt;
/* Since the NewGadget structure is unmodified by any of the CreateGadget()&lt;br /&gt;
** calls, we need only change those fields which are different.&lt;br /&gt;
*/&lt;br /&gt;
ng.ng_LeftEdge   = 140;&lt;br /&gt;
ng.ng_TopEdge    = 20+topborder;&lt;br /&gt;
ng.ng_Width      = 200;&lt;br /&gt;
ng.ng_Height     = 12;&lt;br /&gt;
ng.ng_GadgetText = &amp;quot;_Volume:   &amp;quot;;&lt;br /&gt;
ng.ng_TextAttr   = &amp;amp;Topaz80;&lt;br /&gt;
ng.ng_VisualInfo = vi;&lt;br /&gt;
ng.ng_GadgetID   = MYGAD_SLIDER;&lt;br /&gt;
ng.ng_Flags      = NG_HIGHLABEL;&lt;br /&gt;
&lt;br /&gt;
my_gads[MYGAD_SLIDER] = gad = IGadTools-&amp;gt;CreateGadget(SLIDER_KIND, gad, &amp;amp;ng,&lt;br /&gt;
                    GTSL_Min,         SLIDER_MIN,&lt;br /&gt;
                    GTSL_Max,         SLIDER_MAX,&lt;br /&gt;
                    GTSL_Level,       slider_level,&lt;br /&gt;
                    GTSL_LevelFormat, &amp;quot;%2ld&amp;quot;,&lt;br /&gt;
                    GTSL_MaxLevelLen, 2,&lt;br /&gt;
                    GT_Underscore,    &#039;_&#039;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
&lt;br /&gt;
ng.ng_TopEdge   += 20;&lt;br /&gt;
ng.ng_Height     = 14;&lt;br /&gt;
ng.ng_GadgetText = &amp;quot;_First:&amp;quot;;&lt;br /&gt;
ng.ng_GadgetID   = MYGAD_STRING1;&lt;br /&gt;
my_gads[MYGAD_STRING1] = gad = IGadTools-&amp;gt;CreateGadget(STRING_KIND, gad, &amp;amp;ng,&lt;br /&gt;
                    GTST_String,   &amp;quot;Try pressing&amp;quot;,&lt;br /&gt;
                    GTST_MaxChars, 50,&lt;br /&gt;
                    GT_Underscore, &#039;_&#039;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
&lt;br /&gt;
ng.ng_TopEdge   += 20;&lt;br /&gt;
ng.ng_GadgetText = &amp;quot;_Second:&amp;quot;;&lt;br /&gt;
ng.ng_GadgetID   = MYGAD_STRING2;&lt;br /&gt;
my_gads[MYGAD_STRING2] = gad = IGadTools-&amp;gt;CreateGadget(STRING_KIND, gad, &amp;amp;ng,&lt;br /&gt;
                    GTST_String,   &amp;quot;TAB or Shift-TAB&amp;quot;,&lt;br /&gt;
                    GTST_MaxChars, 50,&lt;br /&gt;
                    GT_Underscore, &#039;_&#039;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
&lt;br /&gt;
ng.ng_TopEdge   += 20;&lt;br /&gt;
ng.ng_GadgetText = &amp;quot;_Third:&amp;quot;;&lt;br /&gt;
ng.ng_GadgetID   = MYGAD_STRING3;&lt;br /&gt;
my_gads[MYGAD_STRING3] = gad = IGadTools-&amp;gt;CreateGadget(STRING_KIND, gad, &amp;amp;ng,&lt;br /&gt;
                    GTST_String,   &amp;quot;To see what happens!&amp;quot;,&lt;br /&gt;
                    GTST_MaxChars, 50,&lt;br /&gt;
                    GT_Underscore, &#039;_&#039;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
&lt;br /&gt;
ng.ng_LeftEdge  += 50;&lt;br /&gt;
ng.ng_TopEdge   += 20;&lt;br /&gt;
ng.ng_Width      = 100;&lt;br /&gt;
ng.ng_Height     = 12;&lt;br /&gt;
ng.ng_GadgetText = &amp;quot;_Click Here&amp;quot;;&lt;br /&gt;
ng.ng_GadgetID   = MYGAD_BUTTON;&lt;br /&gt;
ng.ng_Flags      = 0;&lt;br /&gt;
gad = IGadTools-&amp;gt;CreateGadget(BUTTON_KIND, gad, &amp;amp;ng,&lt;br /&gt;
                    GT_Underscore, &#039;_&#039;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
return(gad);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Standard message handling loop with GadTools message handling functions&lt;br /&gt;
** used (GT_GetIMsg() and GT_ReplyIMsg()).&lt;br /&gt;
*/&lt;br /&gt;
VOID process_window_events(struct Window *mywin,&lt;br /&gt;
    WORD *slider_level, struct Gadget *my_gads[])&lt;br /&gt;
{&lt;br /&gt;
struct IntuiMessage *imsg;&lt;br /&gt;
ULONG imsgClass;&lt;br /&gt;
UWORD imsgCode;&lt;br /&gt;
struct Gadget *gad;&lt;br /&gt;
BOOL terminated = FALSE;&lt;br /&gt;
&lt;br /&gt;
while (!terminated)&lt;br /&gt;
    {&lt;br /&gt;
    Wait (1 &amp;lt;&amp;lt; mywin-&amp;gt;UserPort-&amp;gt;mp_SigBit);&lt;br /&gt;
&lt;br /&gt;
    /* GT_GetIMsg() returns an IntuiMessage with more friendly information for&lt;br /&gt;
    ** complex gadget classes.  Use it wherever you get IntuiMessages where&lt;br /&gt;
    ** using GadTools gadgets.&lt;br /&gt;
    */&lt;br /&gt;
    while ((!terminated) &amp;amp;&amp;amp;&lt;br /&gt;
           (imsg = IGadTools-&amp;gt;GT_GetIMsg(mywin-&amp;gt;UserPort)))&lt;br /&gt;
        {&lt;br /&gt;
        /* Presuming a gadget, of course, but no harm...&lt;br /&gt;
        ** Only dereference this value (gad) where the Class specifies&lt;br /&gt;
        ** that it is a gadget event.&lt;br /&gt;
        */&lt;br /&gt;
        gad = (struct Gadget *)imsg-&amp;gt;IAddress;&lt;br /&gt;
&lt;br /&gt;
        imsgClass = imsg-&amp;gt;Class;&lt;br /&gt;
        imsgCode = imsg-&amp;gt;Code;&lt;br /&gt;
&lt;br /&gt;
        /* Use the toolkit message-replying function here... */&lt;br /&gt;
        IGadTools-&amp;gt;GT_ReplyIMsg(imsg);&lt;br /&gt;
&lt;br /&gt;
        switch (imsgClass)&lt;br /&gt;
            {&lt;br /&gt;
            /*  --- WARNING --- WARNING --- WARNING --- WARNING --- WARNING ---&lt;br /&gt;
            ** GadTools puts the gadget address into IAddress of IDCMP_MOUSEMOVE&lt;br /&gt;
            ** messages.  This is NOT true for standard Intuition messages,&lt;br /&gt;
            ** but is an added feature of GadTools.&lt;br /&gt;
            */&lt;br /&gt;
            case IDCMP_GADGETDOWN:&lt;br /&gt;
            case IDCMP_MOUSEMOVE:&lt;br /&gt;
            case IDCMP_GADGETUP:&lt;br /&gt;
                handleGadgetEvent(mywin, gad, imsgCode, slider_level, my_gads);&lt;br /&gt;
                break;&lt;br /&gt;
            case IDCMP_VANILLAKEY:&lt;br /&gt;
                handleVanillaKey(mywin, imsgCode, slider_level, my_gads);&lt;br /&gt;
                break;&lt;br /&gt;
            case IDCMP_CLOSEWINDOW:&lt;br /&gt;
                terminated = TRUE;&lt;br /&gt;
                break;&lt;br /&gt;
            case IDCMP_REFRESHWINDOW:&lt;br /&gt;
                /* With GadTools, the application must use GT_BeginRefresh()&lt;br /&gt;
                ** where it would normally have used BeginRefresh()&lt;br /&gt;
                */&lt;br /&gt;
                IGadTools-&amp;gt;GT_BeginRefresh(mywin);&lt;br /&gt;
                IGadTools-&amp;gt;GT_EndRefresh(mywin, TRUE);&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Prepare for using GadTools, set up gadgets and open window.&lt;br /&gt;
** Clean up and when done or on error.&lt;br /&gt;
*/&lt;br /&gt;
VOID gadtoolsWindow(VOID)&lt;br /&gt;
{&lt;br /&gt;
struct TextFont *font;&lt;br /&gt;
struct Screen   *mysc;&lt;br /&gt;
struct Window   *mywin;&lt;br /&gt;
struct Gadget   *glist, *my_gads[4];&lt;br /&gt;
void            *vi;&lt;br /&gt;
WORD            slider_level = 5;&lt;br /&gt;
UWORD           topborder;&lt;br /&gt;
&lt;br /&gt;
/* Open topaz 8 font, so we can be sure it&#039;s openable&lt;br /&gt;
** when we later set ng_TextAttr to &amp;amp;Topaz80:&lt;br /&gt;
*/&lt;br /&gt;
if (NULL == (font = IGraphics-&amp;gt;OpenFont(&amp;amp;Topaz80)))&lt;br /&gt;
    errorMessage( &amp;quot;Failed to open Topaz 80&amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
    {&lt;br /&gt;
    if (NULL == (mysc = IIntuition-&amp;gt;LockPubScreen(NULL)))&lt;br /&gt;
        errorMessage( &amp;quot;Couldn&#039;t lock default public screen&amp;quot;);&lt;br /&gt;
    else&lt;br /&gt;
        {&lt;br /&gt;
        if (NULL == (vi = IGadTools-&amp;gt;GetVisualInfo(mysc, TAG_END)))&lt;br /&gt;
            errorMessage( &amp;quot;GetVisualInfo() failed&amp;quot;);&lt;br /&gt;
        else&lt;br /&gt;
            {&lt;br /&gt;
            /* Here is how we can figure out ahead of time how tall the  */&lt;br /&gt;
            /* window&#039;s title bar will be:                               */&lt;br /&gt;
            topborder = mysc-&amp;gt;WBorTop + (mysc-&amp;gt;Font-&amp;gt;ta_YSize + 1);&lt;br /&gt;
&lt;br /&gt;
            if (NULL == createAllGadgets(&amp;amp;glist, vi, topborder,&lt;br /&gt;
                                         slider_level, my_gads))&lt;br /&gt;
                errorMessage( &amp;quot;createAllGadgets() failed&amp;quot;);&lt;br /&gt;
            else&lt;br /&gt;
                {&lt;br /&gt;
                if (NULL == (mywin = IIntuition-&amp;gt;OpenWindowTags(NULL,&lt;br /&gt;
                        WA_Title,     &amp;quot;GadTools Gadget Demo&amp;quot;,&lt;br /&gt;
                        WA_Gadgets,   glist,      WA_AutoAdjust,    TRUE,&lt;br /&gt;
                        WA_Width,       400,      WA_MinWidth,        50,&lt;br /&gt;
                        WA_InnerHeight, 140,      WA_MinHeight,       50,&lt;br /&gt;
                        WA_DragBar,    TRUE,      WA_DepthGadget,   TRUE,&lt;br /&gt;
                        WA_Activate,   TRUE,      WA_CloseGadget,   TRUE,&lt;br /&gt;
                        WA_SizeGadget, TRUE,      WA_SimpleRefresh, TRUE,&lt;br /&gt;
                        WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW |&lt;br /&gt;
                            IDCMP_VANILLAKEY | SLIDERIDCMP | STRINGIDCMP |&lt;br /&gt;
                            BUTTONIDCMP,&lt;br /&gt;
                        WA_PubScreen, mysc,&lt;br /&gt;
                        TAG_END)))&lt;br /&gt;
                    errorMessage( &amp;quot;OpenWindow() failed&amp;quot;);&lt;br /&gt;
                else&lt;br /&gt;
                    {&lt;br /&gt;
                    /* After window is open, gadgets must be refreshed with a&lt;br /&gt;
                    ** call to the GadTools refresh window function.&lt;br /&gt;
                    */&lt;br /&gt;
                    IGadTools-&amp;gt;GT_RefreshWindow(mywin, NULL);&lt;br /&gt;
&lt;br /&gt;
                    process_window_events(mywin, &amp;amp;slider_level, my_gads);&lt;br /&gt;
&lt;br /&gt;
                    IIntuition-&amp;gt;CloseWindow(mywin);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            /* FreeGadgets() even if createAllGadgets() fails, as some&lt;br /&gt;
            ** of the gadgets may have been created...If glist is NULL&lt;br /&gt;
            ** then FreeGadgets() will do nothing.&lt;br /&gt;
            */&lt;br /&gt;
            IGadTools-&amp;gt;FreeGadgets(glist);&lt;br /&gt;
            IGadTools-&amp;gt;FreeVisualInfo(vi);&lt;br /&gt;
            }&lt;br /&gt;
        IIntuition-&amp;gt;UnlockPubScreen(NULL, mysc);&lt;br /&gt;
        }&lt;br /&gt;
    IGraphics-&amp;gt;CloseFont(font);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Open all libraries and run.  Clean up when finished or on error..&lt;br /&gt;
*/&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  struct Library *IntuitionBase = IExec-&amp;gt;OpenLibrary(&amp;quot;intuition.library&amp;quot;, 50);&lt;br /&gt;
  IIntuition = (struct IntuitionIFace*)IExec-&amp;gt;GetInterface(IntuitionBase, &amp;quot;main&amp;quot;, 1, NULL);&lt;br /&gt;
  if (IIntuition == NULL)&lt;br /&gt;
    errorMessage( &amp;quot;Requires V50 intuition.library&amp;quot;);&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    struct Library *GfxBase = IExec-&amp;gt;OpenLibrary(&amp;quot;graphics.library&amp;quot;, 50);&lt;br /&gt;
    IGraphics = (struct GraphicsIFace*)IExec-&amp;gt;GetInterface(GfxBase, &amp;quot;main&amp;quot;, 1, NULL);&lt;br /&gt;
    if (IGraphics == NULL))&lt;br /&gt;
        errorMessage( &amp;quot;Requires V50 graphics.library&amp;quot;);&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      struct Library *GadToolsBase = IExec-&amp;gt;OpenLibrary(&amp;quot;gadtools.library&amp;quot;, 50);&lt;br /&gt;
      IGadTools = (struct GadToolsIFace*)IExec-&amp;gt;GetInterface(GadToolsBase, &amp;quot;main&amp;quot;, 1, NULL);&lt;br /&gt;
      if (IGadTools == NULL)&lt;br /&gt;
        errorMessage( &amp;quot;Requires V50 gadtools.library&amp;quot;);&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        gadtoolsWindow();&lt;br /&gt;
&lt;br /&gt;
        IExec-&amp;gt;DropInterface((struct Interface*)IGadTools);&lt;br /&gt;
        IExec-&amp;gt;CloseLibrary(GadToolsBase);&lt;br /&gt;
      }&lt;br /&gt;
      IExec-&amp;gt;DropInterface((struct Interface*)IGraphics);&lt;br /&gt;
      IExec-&amp;gt;CloseLibrary(GfxBase);&lt;br /&gt;
    }&lt;br /&gt;
    IExec-&amp;gt;DropInterface((struct Interface*)IIntuition);&lt;br /&gt;
    IExec-&amp;gt;CloseLibrary(IntuitionBase);&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Restrictions on GadTools Gadgets ===&lt;br /&gt;
&lt;br /&gt;
There is a strict set of functions and operations that are permitted on GadTools gadgets. Even if a technique is discovered that works for a particular case, be warned that it cannot be guaranteed and should not be used. If the trick concocted only works most of the time, it may introduce subtle problems in the future.&lt;br /&gt;
&lt;br /&gt;
Never selectively or forcibly refresh gadgets. The only gadget refresh that should ever be performed is the initial GT_RefreshWindow() after a window is opened with GadTools gadgets attached. It is also possible to add gadgets after the window is opened by calling AddGlist() and RefreshGlist() followed by GT_RefreshWindow(). These refresh functions should not be called at any other time.&lt;br /&gt;
&lt;br /&gt;
GadTools gadgets may not overlap with each other, with other gadgets or with other imagery. Doing this to modify the gadget&#039;s appearance is not supported.&lt;br /&gt;
&lt;br /&gt;
GadTools gadgets may not be selectively added or removed from a window. This has to do with the number of Intuition gadgets that each call to CreateGadget() produces and with refresh constraints.&lt;br /&gt;
&lt;br /&gt;
Never use OnGadget() or OffGadget() or directly modify the GFLG_DISABLED Flags bit. The only approved way to disable or enable a gadget is to use GT_SetGadgetAttrs() and the GA_Disabled tag. Those kinds of GadTools gadgets that do not support GA_Disabled may not be disabled (for now).&lt;br /&gt;
&lt;br /&gt;
The application should never write into any of the fields of the Gadget structure or any of the structures that hang off it, with the exception noted earlier for GENERIC_KIND gadgets. Avoid making assumptions about the contents of these fields unless they are explicitly programmer fields (GadgetID and UserData, for example) or if they are guaranteed meaningful (Left, Top, Width, Height, Flags). On occasion, the program is specifically invited to read a field, for example the StringInfo-&amp;amp;gt;Buffer field.&lt;br /&gt;
&lt;br /&gt;
GadTools gadgets may not be made relative sized or relative positioned. This means that the gadget flags GFLG_RELWIDTH, GFLG_RELHEIGHT, GFLG_RELBOTTOM and GFLG_RELRIGHT may not be specified. The activation type of the gadget may not be modified (for example changing GACT_IMMEDIATE to GACT_RELVERIFY). The imagery or the highlighting method may not be changed.&lt;br /&gt;
&lt;br /&gt;
These restrictions are not imposed without reason; subtle or blatant problems may arise now or in future versions of GadTools for programs that violate these guidelines.&lt;br /&gt;
&lt;br /&gt;
=== Documented Side-Effects ===&lt;br /&gt;
&lt;br /&gt;
There are certain aspects of the behavior of GadTools gadgets that should not be depended on. This will help current applications remain compatible with future releases of the GadTools library.&lt;br /&gt;
&lt;br /&gt;
When using GT_FilterIMsg() and GT_PostFilterIMsg(), never make assumptions about the message before or after filtering. I.e., do not interpret the unfiltered message, assume that it will or will not result in certain kinds of filtered message or assume it will result in a consumed message (i.e., when GT_FilterIMsg() returns NULL).&lt;br /&gt;
&lt;br /&gt;
IDCMP_INTUITICKS messages are consumed when a scroller&#039;s arrows are repeating. That is, IDCMP_INTUITICKS will not be received while the user is pressing a scroller arrows. Do not depend or rely on this side effect, though, it will not necessarily remain so in the future.&lt;br /&gt;
&lt;br /&gt;
A single call to CreateGadget() may create one or more actual gadgets. These gadgets, along with the corresponding code in GadTools, define the behavior of the particular kind of GadTools gadget requested. Only the behavior of these gadgets is documented, the number or type of actual gadgets is subject to change. Always refer to the gadget pointer received from CreateGadget() when calling GT_SetGadgetAttrs(). Never refer to other gadgets created by GadTools, nor create code which depends on their number or form.&lt;br /&gt;
&lt;br /&gt;
For text-display gadgets, the GTTX_CopyText tag does not cause the text to be copied when the text is later changed with GTTX_Text.&lt;br /&gt;
&lt;br /&gt;
The PLACETEXT ng_Flags are currently ignored by GENERIC_KIND gadgets. However, this may not always be so.&lt;br /&gt;
&lt;br /&gt;
All GadTools gadgets set GADTOOL_TYPE in the gadget&#039;s GadgetType field. Do not use this flag to identify GadTools gadgets, as this flag is not guaranteed to be set in the future.&lt;br /&gt;
&lt;br /&gt;
The palette gadget subdivides its total area into the individual color squares. Do not assume that the subdivision algorithm won&#039;t change.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_AmigaDOS_Additional_Amiga_Directories&amp;diff=9149</id>
		<title>AmigaOS Manual: AmigaDOS Additional Amiga Directories</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=AmigaOS_Manual:_AmigaDOS_Additional_Amiga_Directories&amp;diff=9149"/>
		<updated>2017-05-21T15:42:36Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Creating a MountFile or MountList Entry */ Fixed typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In addition to the AmigaDOS commands, there are other files and directories on your Workbench disk. This chapter includes the following:&lt;br /&gt;
&lt;br /&gt;
* DEVS:&lt;br /&gt;
* S:&lt;br /&gt;
* L:&lt;br /&gt;
* FONTS:&lt;br /&gt;
* LIBS:&lt;br /&gt;
* REXX:&lt;br /&gt;
* LOCALE:&lt;br /&gt;
* ENVARC:&lt;br /&gt;
* ENV:&lt;br /&gt;
* CLIPS:&lt;br /&gt;
* T:&lt;br /&gt;
* Classes&lt;br /&gt;
* C:&lt;br /&gt;
&lt;br /&gt;
The drawers contained in DEVS: are described in the Workbench User&#039;s Guide .&lt;br /&gt;
&lt;br /&gt;
You do not need a detailed understanding of the contents of the directories listed here. Unless specifically directed otherwise, you can safely ignore them. However, you should know their purposes and locations in case you inadvertently delete or rename a file in a directory or need to copy something to the appropriate directory.&lt;br /&gt;
&lt;br /&gt;
Figure B-1 illustrates the standard directory structure of a hard disk Amiga system. Directories with icons visible from Workbench (drawers) are shown on the left; other directories are on the right. The standard contents and structure of these directories may change as the AmigaOS development team adds, changes, or removes resources.&lt;br /&gt;
&lt;br /&gt;
[[File:DosFigB-1.png|center|frame|System Directory Tree]]&lt;br /&gt;
&lt;br /&gt;
Most of these directories are automatically assigned to the SYS: volume or to the Ram Disk. These directories, as well as SYS:, can be ASSIGNed to different volume when necessary.&lt;br /&gt;
&lt;br /&gt;
For example, you can assign FONTS: to a particular disk, such as FontDisk:. Most applications automatically look for the fonts that they need in the FONTS: directory, regardless of where that is. By changing the FONTS: assignment, you can allow applications to use the fonts on FontDisk:&lt;br /&gt;
&lt;br /&gt;
= DEVS: =&lt;br /&gt;
&lt;br /&gt;
In addition to the DOSDrivers, Keymaps, Printers, Monitors, and DataTypes drawers described in the Workbench User&#039;s Guide, the DEVS: drawer contains files and subdirectories that pertain to the devices that can be used with the Amiga.&lt;br /&gt;
&lt;br /&gt;
Note that you can refer to the DEVS:Keymaps and DEVS:Printers drawers by their assigned names KEYMAPS: and PRINTERS:, respectively.&lt;br /&gt;
&lt;br /&gt;
== Device Files ==&lt;br /&gt;
&lt;br /&gt;
The following lists the .device files in DEVS: and their functions:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| clipboard.device || Controls access to CLIPS:.&lt;br /&gt;
|-&lt;br /&gt;
| Parallel.device || Controls access to the parallel port.&lt;br /&gt;
|-&lt;br /&gt;
| printer.device || Controls access to the printer device.&lt;br /&gt;
|-&lt;br /&gt;
| Serial.device || Controls access to the serial port.&lt;br /&gt;
|-&lt;br /&gt;
| mfm.device || Controls access to MS-DOS disks with CrossDOS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For more information on the .device files, see [[Devices|Amiga Devices]].&lt;br /&gt;
&lt;br /&gt;
== Other Files ==&lt;br /&gt;
&lt;br /&gt;
The following additional files are found in DEVS:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| system-configuration || Holds certain Preferences configuration data needed when booting.&lt;br /&gt;
|-&lt;br /&gt;
| Postscript_init.ps || Holds information needed to initialize a PostScript printer when using PrinterPS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Using Mount Files or a MountList ===&lt;br /&gt;
&lt;br /&gt;
To access new devices, the Amiga must be informed when any are added. These may be physical devices, such as a tape drive, or software (logical) devices, such as a recoverable RAM disk. There are several ways to do this:&lt;br /&gt;
&lt;br /&gt;
* Placing a driver in the Expansion drawer&lt;br /&gt;
* Placing a mount file in the DOSDrivers drawer&lt;br /&gt;
* Making an entry for the device in a MountList file and using the MOUNT command&lt;br /&gt;
&lt;br /&gt;
A mount file represents a device, handler, or file system. Standard devices have their own mount file with icons in the DOSDrivers drawer in DEVS:. These are mounted automatically during the standard Startup-sequence. Alternatively, devices can use the MOUNT command to read a MountList entry that determines the characteristics of the device.&lt;br /&gt;
&lt;br /&gt;
The need to use a MountList and the MOUNT command has been eliminated by the mount file method used in Amiga system software Release 2.1 and beyond. Rather than requiring a MountList file with entries for each device you want to mount, DEVS: now contains the DOSDrivers drawer, which holds a separate mount file or DOS driver for each device. The contents of a mount file are essentially the same as an individual MountList entry.&lt;br /&gt;
&lt;br /&gt;
You can, however, continue to use a MountList to mount devices. Copy the MountList to DEVS: and remove any DOS drivers in the DOSDrivers drawers that have the same name as one of your MountList entries. (A mount file overrides a MountList entry of the same name.)&lt;br /&gt;
&lt;br /&gt;
=== Creating a MountFile or MountList Entry ===&lt;br /&gt;
&lt;br /&gt;
The following information on mount files also applies to MountLists, except as noted.&lt;br /&gt;
&lt;br /&gt;
Mount files contain keywords describing the device, handler, or file system, as well as values for those keywords. Some keywords apply only to a file system or a handler. If a keyword is omitted, a default value is used. Be sure that the default value is appropriate for the device.&lt;br /&gt;
&lt;br /&gt;
The following are rules for creating a mount file or MountList:&lt;br /&gt;
&lt;br /&gt;
* The file must be a plain ASCII text file.&lt;br /&gt;
* The mount file name must be the name of the device; the name of a MountList should be MountList.&lt;br /&gt;
* Each entry in a MountList must start with the name of the device. Omit this for a mount file.&lt;br /&gt;
* Keywords are followed by an equals sign (=).&lt;br /&gt;
* Keywords must be separated by a semicolon or be placed on separate lines.&lt;br /&gt;
* Comments are allowed in standard C style (that is, comments start with /* and end with */).&lt;br /&gt;
* Each MountList entry must end with the # symbol. Omit this for a mount file.&lt;br /&gt;
&lt;br /&gt;
When creating a new mount file or MountList entry, refer to the documentation that came with the device or start with an example of one for a similar device. Change or add only the necessary keywords.&lt;br /&gt;
&lt;br /&gt;
The following table, lists keywords and their default values supported in a mount file or MountList and their functions. Default values are shown in angle brackets.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Keyword !! Function &lt;br /&gt;
|-&lt;br /&gt;
| Handler=&amp;lt;none&amp;gt; || A handler entry (for example, Handler = L:eque-handler).&lt;br /&gt;
|-&lt;br /&gt;
| Ehandler=&amp;lt;none&amp;gt; || An environment handler entry.&lt;br /&gt;
|-&lt;br /&gt;
| FileSystem=&amp;lt;none&amp;gt; || A file system entry (for example, FileSystem = L:CrossDosFileSystem).&lt;br /&gt;
|-&lt;br /&gt;
| Device=&amp;lt;none&amp;gt; || A device entry (for example, Device = DEVS:mfm.device). This argument is required to mount a file system. There is no default value for Device; you must supply a value.&lt;br /&gt;
|-&lt;br /&gt;
| Priority=&amp;lt;10&amp;gt; || The priority of the process; 5 is good for handlers, 10 for file systems.&lt;br /&gt;
|-&lt;br /&gt;
| Unit=&amp;lt;0&amp;gt; || The unit number of the device (for example, 0 for PC0:).&lt;br /&gt;
|-&lt;br /&gt;
| Flags=&amp;lt;0&amp;gt; || Flags for OpenDevice (usually 0).&lt;br /&gt;
|-&lt;br /&gt;
| Surfaces=&amp;lt;none&amp;gt; || The number of surfaces (2 for floppy devices, varies for hard drives). This argument is required to mount a file system. There is no default value for Surfaces; you must supply a value.&lt;br /&gt;
|-&lt;br /&gt;
| SectorsPerBlock=&amp;lt;none&amp;gt; || Defines the number of physical disk sectors in each logical block used by the file system.&lt;br /&gt;
|-&lt;br /&gt;
| SectorsPerTrack=&amp;lt;none&amp;gt; || The number of blocks per track. This argument is required to mount a file system. There is no default value for SectorsPerTrack; you must supply a value.&lt;br /&gt;
|-&lt;br /&gt;
| SectorSize=&amp;lt;512&amp;gt; || Specifies the number of bytes in a block on the device. Most devices use a 512 byte block; however, some devices use other sizes (for example, CD-ROMs use 2048 bytes).&lt;br /&gt;
|-&lt;br /&gt;
| Reserved=&amp;lt;2&amp;gt; || The number of blocks reserved for the boot block; should be 2.&lt;br /&gt;
|-&lt;br /&gt;
| Interleave=&amp;lt;0&amp;gt; || Interleave value; varies with the device.&lt;br /&gt;
|-&lt;br /&gt;
| LowCyl=&amp;lt;none&amp;gt; || Starting cylinder to use. This argument is required to mount a file system. There is no default value for LowCyl; you must supply a value.&lt;br /&gt;
|-&lt;br /&gt;
| HighCyl_&amp;lt;none&amp;gt; || Ending cylinder to use. This argument is required to mount a file system. There is no default value for HighCyl; you must supply a value.&lt;br /&gt;
|-&lt;br /&gt;
| Stacksize=&amp;lt;600&amp;gt; || Amount of stack allocated to the process.&lt;br /&gt;
|-&lt;br /&gt;
| Buffers=&amp;lt;5&amp;gt; || Number of initial 512-byte cache buffers. Increase this for higher disk performance if you have RAM to spare.&lt;br /&gt;
|-&lt;br /&gt;
| BufMem Type=&amp;lt;3&amp;gt; || Memory type used for buffers; (0 and 1 = Any, 2 and 3 = Chip, 4 and 5 = Fast).&lt;br /&gt;
|-&lt;br /&gt;
| Mount=&amp;lt;0&amp;gt; || See the description of ACTIVATE, which is a synonym for MOUNT.&lt;br /&gt;
|-&lt;br /&gt;
| MaxTransfer=&amp;lt;0x7ffffff&amp;gt; || The maximum number of bytes transferred at one time with any file system. Use Max Transfer for compatibility with older hard drive systems.&lt;br /&gt;
|-&lt;br /&gt;
| Mask=&amp;lt;0xffffffff&amp;gt; || Address Mask to specify memory range that DMA transfers can use at one time with any file system. Use Mask for compatibility with older hard drive systems.&lt;br /&gt;
|-&lt;br /&gt;
| Glob Vec=&amp;lt;2&amp;gt; || A global vector for the process; -1 is no Global Vector (for C and assembler programs), 0 sets up a private GV; if the keyword is absent, the shared Global Vector is used. Omit this keyword for Amiga file system devices.&lt;br /&gt;
|-&lt;br /&gt;
| Startup=&amp;lt;none&amp;gt; || A string passed to the device, handler, or file system on startup as a BPTR to a BSTR.&lt;br /&gt;
|-&lt;br /&gt;
| Activate=&amp;lt;0&amp;gt; || If a positive value, ACTIVATE loads the device or handler immediately rather than waiting for first access. Synonymous with MOUNT.&lt;br /&gt;
|-&lt;br /&gt;
| BootPri=&amp;lt;0&amp;gt; || A value that sets the boot priority of a bootable and mountable device. This value can range from -129 to 127. By convention, -129 indicates that the device is not bootable and is not automatically mounted.&lt;br /&gt;
|-&lt;br /&gt;
| DosType=&amp;lt;0x444F5300&amp;gt; || Indicates the type of file system, giving hexadecimal ASCII codes for three letters and a concluding number as follows:&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! Value !! ASCII !! File System&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x444F5300 || DOS0 || Original (OFS)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x444F5301 || DOS1 || FastFileSystem (FFS)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x444F5302 || DOS2 || International Mode OFS&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x444F5303 || DOS3 || International Mode FFS&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x444F5304 || DOS4 || Directory caching International Mode OFS&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x444F5305 || DOS5 || Directory caching International Mode FFS&lt;br /&gt;
 |-&lt;br /&gt;
 | 0x4D534400 || MSD0 || MS-DOS&lt;br /&gt;
 |}&lt;br /&gt;
|-&lt;br /&gt;
| Baud=&amp;lt;1200&amp;gt; || Serial device baud rate.&lt;br /&gt;
|-&lt;br /&gt;
| Control=&amp;lt;0&amp;gt; || Serial device word length, parity, and stop bits.&lt;br /&gt;
|-&lt;br /&gt;
| Forceload=&amp;lt;0&amp;gt; || Forces a file system to be loaded form disk even though a suitable entry is in the resource list. If 0 (the default), check the resource list before the disk. If 1, always load from disk.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= S: Directory =&lt;br /&gt;
&lt;br /&gt;
The S: directory is generally reserved for AmigaDOS and ARexx scripts. However, you may place non-script files in S: or place script files in other directories. In addition to the Startup-sequence file, the User-startup file that you create, and Shell-startup files, the S: directory also contains teh scripts described in this section.&lt;br /&gt;
&lt;br /&gt;
== ED-Startup ==&lt;br /&gt;
&lt;br /&gt;
This file contains ED commands used to configure the ED text editor, assigning the default function key options. Key assignments can be customized by editing this file. Removing or renaming this file activates expanded ED command menus; see Chapter 4 for instructions on how to do this.&lt;br /&gt;
&lt;br /&gt;
Other files containing ED commands can be stored in S: for use by the WITH keyword of ED, which allows ED command files to perform custom editing operations.&lt;br /&gt;
&lt;br /&gt;
== SPat, DPat ==&lt;br /&gt;
&lt;br /&gt;
These scripts allow pattern matching with commands that do not normally support it. When run with a command, SPat and DPat use the LIST command to create temporary script files in the T: directory and then execute the scripts. SPat and DPat can be used within command aliases.&lt;br /&gt;
&lt;br /&gt;
SPat adds pattern matching to single-argument commands. For example, to use ED to edit all the files in the S: directory beginning with the letter&#039;s, enter:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; SPat ED S:s#?&lt;br /&gt;
&lt;br /&gt;
A script similiar to the following is generated:&lt;br /&gt;
&lt;br /&gt;
 ED &amp;quot;s:Shell-startup&amp;quot;&lt;br /&gt;
 ED &amp;quot;s:SPat&amp;quot;&lt;br /&gt;
 ED &amp;quot;s:Startup-sequence&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SPat executes the script, invoking ED three times to display the files.&lt;br /&gt;
&lt;br /&gt;
DPat adds pattern matching to double-argument commands. After DPat and the command name, enter the two arguments separated by a space, using the wildcards required to produce the desired matches.&lt;br /&gt;
&lt;br /&gt;
== PCD ==&lt;br /&gt;
&lt;br /&gt;
Like the CD command, the PCD script changes the current directory. However, PCD also remembers the directory from which you are changing, so you can return to it without entering the entire path. Each Shell has an independent PCD memory.&lt;br /&gt;
&lt;br /&gt;
The first time you use PCD in a given Shell, you must give it the path to a directory. When entered with this path argument, PCD has the same effect as CD, changing to the named directory, but it also stores the path to the directory from which you changed. You can then change the current directory by the usual methods. To return to the initial directory, enter PCD alone. For example:&lt;br /&gt;
&lt;br /&gt;
 1.System:&amp;gt; PCD Work:Paint/24bit&lt;br /&gt;
 1.Work:Paint/24bit&amp;gt; PCD&lt;br /&gt;
 1.System:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subsequent invocations of PCD switch to the directory in which you last used PCD:&lt;br /&gt;
&lt;br /&gt;
 1.System:&amp;gt; PCD&lt;br /&gt;
 1.Work:Paint/24bit&amp;gt; /&lt;br /&gt;
 1.Work:Paint&amp;gt; PCD&lt;br /&gt;
 1.System:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PCD use the assign list to store the remembered directory. When you use PCD, the list contains the assignment from&amp;lt;n&amp;gt; , where &amp;lt;n&amp;gt; is the Shell number. Using PCD with no argument before establishing the first from directory produces an error requester.&lt;br /&gt;
&lt;br /&gt;
For further examples of PCD, see Chapter 8.&lt;br /&gt;
&lt;br /&gt;
= L: Directory =&lt;br /&gt;
&lt;br /&gt;
This directory contains device handlers, which are software modules that go between AmigaDOS and the devices used by the Amiga. However, most handlers are treated as if they are actual physical devices and they are referred to by their device name.&lt;br /&gt;
&lt;br /&gt;
Handlers must be named in the mount file or MountList for their respective devices. Handlers are called and manipulated by programs, not users. New handlers can be supplied with some devices or programs and should be copied to the L: directory.&lt;br /&gt;
&lt;br /&gt;
== Aux-Handler ==&lt;br /&gt;
&lt;br /&gt;
The Aux-handler provides unbuffered serial input and output. It is essentially a console handler that uses the serial port rather than the Amiga screen and keyboard.&lt;br /&gt;
&lt;br /&gt;
The DOSDrivers mount file for AUX is:&lt;br /&gt;
&lt;br /&gt;
 Handler = L:Aux-handler&lt;br /&gt;
 Stacksize = 1000&lt;br /&gt;
 Priority = 5&lt;br /&gt;
&lt;br /&gt;
You can use Aux-Handler to use a serial terminal with your Amiga. For example:&lt;br /&gt;
&lt;br /&gt;
 1&amp;gt; NEWSHELL AUX: &lt;br /&gt;
&lt;br /&gt;
== Queue-Handler (PIPE:) ==&lt;br /&gt;
&lt;br /&gt;
The Queue-Handler is an input/output mechanism used to provide I/O communication between programs. It creates an interprocess communication channel named PIPE. For more information about PIPE:, see Appendix D.&lt;br /&gt;
&lt;br /&gt;
== Port-Handler ==&lt;br /&gt;
&lt;br /&gt;
The Port-Handler is the AmigaDOS interface for the SER:, PAR:, and PRT: devices.&lt;br /&gt;
&lt;br /&gt;
When accessing SER:, you can supply settings for the baud rate and control information. The form for this is SER:&amp;lt;baud/control&amp;gt;, where baud is a number representing the baud rate and where control is a three character sequence indicating the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Number of read/write bits || First character; either 7 or 8&lt;br /&gt;
|-&lt;br /&gt;
| Parity || Second character; N (no parity), O (odd parity), E (even parity), M (mark parity), S (space parity)&lt;br /&gt;
|-&lt;br /&gt;
| Number of stops bits || Third character; either 1 or 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 SER:9600/8N1&lt;br /&gt;
&lt;br /&gt;
connects to the serial port, sets the baud rate to 9600 with a bit data, no parity, and one stop bit.&lt;br /&gt;
&lt;br /&gt;
If you specify no baud rate or control values when accessing SER:, the values set in the Serial Preferences editor are used.&lt;br /&gt;
&lt;br /&gt;
== CrossDOSFileSystem ==&lt;br /&gt;
&lt;br /&gt;
The CrossDOSFileSystem is required to use CrossDOS.&lt;br /&gt;
&lt;br /&gt;
== FileSystem_Trans ==&lt;br /&gt;
&lt;br /&gt;
The FileSystem_Trans directory contains the following files required for CrossDOS text translation:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| DANSK.crossdos || Filters Danish text files&lt;br /&gt;
|-&lt;br /&gt;
| INTL.crossdos || Preserves international characters&lt;br /&gt;
|-&lt;br /&gt;
| MAC.crossdos || Converts Apple Macintosh ASCII files&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CDFileSystem ==&lt;br /&gt;
&lt;br /&gt;
The CDFileSystem is required to use a CD-ROM drive.&lt;br /&gt;
&lt;br /&gt;
= FONTS: =&lt;br /&gt;
&lt;br /&gt;
FONTS: is the disk or directory that contains the information for all of the different styles of fonts available to the Amiga. Font information is stored differently for bitmap and outline fonts.&lt;br /&gt;
&lt;br /&gt;
== Bitmap Fonts ==&lt;br /&gt;
&lt;br /&gt;
For each bitmap font, there is a subdirectory and a .font file. The font subdirectory contains files for the different point sizes that are available. Each of these files contains the bitmap representation of every character in the font at that point size.&lt;br /&gt;
&lt;br /&gt;
For example, for the Emerald font, there is an Emerald directory and an Emerald.font file. The Emerald directory contains two files: 17 and 20. The files contain the data needed for the 17 point Emerald font and the 20 point Emerald font, respectively. The Emerald.font file contains the list of point sizes and any available styles, such as bold and italics for the font.&lt;br /&gt;
&lt;br /&gt;
Many word processor or desktop publishing programs contain additional fonts that you should copy to your FONTS: directory. After you add new fonts to FONTS:, run the FixFonts program to create the .font file for the new additions.&lt;br /&gt;
&lt;br /&gt;
The Topaz font is the default font used by the Amiga. In addition to existing in FONTS:, Topaz 8 and Topaz 9 are built into ROM so that text can always be displayed; however only Topaz 11 is in the Topaz directory.&lt;br /&gt;
&lt;br /&gt;
== Outline Fonts ==&lt;br /&gt;
&lt;br /&gt;
The Compugraphic Intellifont outline font system used on the Amiga stores font data differently. As with the bitmap fonts, there is a .font file for each typeface. There is also a .otag file for each. The two subdirectories _bullet and _bullet_outlines contain the actual outline information for the typefaces installed on your system. You should not try to manipulate these files directly. Always use the Intellifont program or your applications&#039; font installation tools to manage outline fonts.&lt;br /&gt;
&lt;br /&gt;
= LIBS: Directory =&lt;br /&gt;
&lt;br /&gt;
LIBS: contains libraries of software routines and math functions commonly used by the operating system and applications. The files found in the LIBS: directory are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! .library File !! Function&lt;br /&gt;
|-&lt;br /&gt;
| amigaguide.library || Functions used by the AmigaGuide hypertext system.&lt;br /&gt;
|-&lt;br /&gt;
| asl.library || File, font, and screen mode requester functions.&lt;br /&gt;
|-&lt;br /&gt;
| Bullet.library || Library functions for finding and loading outline fonts.&lt;br /&gt;
|-&lt;br /&gt;
| Commodities.library || Functions used by Commodities Exchange programs.&lt;br /&gt;
|-&lt;br /&gt;
| datatypes.library || Functions for enabling manipulation ot the file types in DEVS:DataTypes.&lt;br /&gt;
|-&lt;br /&gt;
| Diskfont.library || Library functions for finding and loading font files.&lt;br /&gt;
|-&lt;br /&gt;
| iffparse.library || Functions to read IFF files.&lt;br /&gt;
|-&lt;br /&gt;
| locale.library || Functions for using localization features in the Amiga operating system.&lt;br /&gt;
|-&lt;br /&gt;
| lowlevel.library || Library to aid in game programming.&lt;br /&gt;
|-&lt;br /&gt;
| mathieeedoubbas.library || Double-precision IEEE math routine functions for basic functions (addition, subtraction, and so forth).&lt;br /&gt;
|-&lt;br /&gt;
| mathieeedoubtrans.library || Double-precision IEEE math routine functions for transcendental functions (sine, cosine, and so forth).&lt;br /&gt;
|-&lt;br /&gt;
| mathieeesingtrans.library || Fast single-precision IEEE math routine functions.&lt;br /&gt;
|-&lt;br /&gt;
| Mathtrans.library || FFP transcendental function math routine functions.&lt;br /&gt;
|-&lt;br /&gt;
| Realtime.library || Function to synchronize multimedia events, such as music and animation.&lt;br /&gt;
|-&lt;br /&gt;
| Rexxsupport.library || Functions used by ARexx.&lt;br /&gt;
|-&lt;br /&gt;
| Rexxsyslib.library || Main ARexx functions.&lt;br /&gt;
|-&lt;br /&gt;
| Version.library || Contains current software version and revision information.&lt;br /&gt;
|-&lt;br /&gt;
| 68040.library || Functions needed on Amigas using the 68040 microprocessor chip.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= REXX: =&lt;br /&gt;
&lt;br /&gt;
REXX: is another name normally assigned to the SYS:S directory in addition to S:. Storing any ARexx programs you write in REXX: allows you to execute them without entering the full path. Create a new directory and reASSIGN REXX: to it if you wish to keep ARexx programs separate from AmigaDOS scripts.&lt;br /&gt;
&lt;br /&gt;
= LOCALE: =&lt;br /&gt;
&lt;br /&gt;
LOCALE: is where the Amiga looks for language and country files when it needs to display non-English text. On floppy systems, LOCALE: is the Locale floppy. On hard disk systems, it is the SYS:Locale directory.&lt;br /&gt;
&lt;br /&gt;
LOCALE: contains four directories:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Countries || Contains a .country file for all available countries. These files hold country-specific information, such as date/time format and monetary symbols.&lt;br /&gt;
|-&lt;br /&gt;
| Languages || Contains .language files for the available languages. These files hold general language-specific information, such as the days of the week.&lt;br /&gt;
|-&lt;br /&gt;
| Catalogs || Contains subdirectories for the available languages, each of which contains a Sys directory. This directory holds translated text for that language. Catalogs/&amp;lt;language&amp;gt;/Sys holds menu, gadget, and message text for that language.&lt;br /&gt;
|-&lt;br /&gt;
| Help (HELP:) || Contains subdirectories for the available languages, each of which contains a Sys directory. This directory holds translated text for that language. Help/&amp;lt;language&amp;gt;/Sys is reserved for AmigaGuide text files for any applications that have AmigaGuide help in that language.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ENVARC: =&lt;br /&gt;
&lt;br /&gt;
ENVARC: is the name assigned to the directory SYS:Prefs/Env-Archive. ENVARC: always contains a Sys directory, in which each of the Preferences editors stores the .prefs file created when you save a setting with its Save gadget. Custom default icons created in IconEdit are also saved here. (Named settings saved with the Save As menu item in an Editor are stored by default in the Prefs/Presets drawer.)&lt;br /&gt;
&lt;br /&gt;
Other Workbench programs that allow you to save configuration settings, such as MultiView, also place their files in ENVARC:&lt;br /&gt;
&lt;br /&gt;
= ENV: =&lt;br /&gt;
&lt;br /&gt;
ENV: is the directory RAM:Env, into which the contents of ENVARC: are copied when booting. Preferences settings activated with Save or Use gadgets are stored in ENV:. Global environment variables are also stored here, as small files.&lt;br /&gt;
&lt;br /&gt;
= CLIPS: =&lt;br /&gt;
&lt;br /&gt;
The directory RAM:Clipboards has the assigned name CLIPS:. It stores information clipped with the Cut or Copy items on a program&#039;s Edit menu.&lt;br /&gt;
&lt;br /&gt;
= T: =&lt;br /&gt;
&lt;br /&gt;
T: is the RAM:T directory, which may be used by scripts and some commands for storing miscellaneous temporary files.&lt;br /&gt;
&lt;br /&gt;
= Classes =&lt;br /&gt;
&lt;br /&gt;
The Classes directory stores information related to the object-oriented features of the Workbench, such as the DataTypes system upon which MultiView is based. Classes contains the directories DataTypes and Gadgets.&lt;br /&gt;
&lt;br /&gt;
= C: =&lt;br /&gt;
&lt;br /&gt;
C: is the SYS:C directory, which stores non-internal AmigaDOS commands. It is always in the search path.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=GadTools_Gadgets&amp;diff=7938</id>
		<title>GadTools Gadgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=GadTools_Gadgets&amp;diff=7938"/>
		<updated>2015-06-24T14:41:47Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Documented Side-Effects */ Fix typo/Unicode error on apostrophe&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CodeReview}}&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
{{Note|text=GadTools-based GUIs are largely obsolete. Prefer to use a modern BOOPSI-based GUI system instead.}}&lt;br /&gt;
&lt;br /&gt;
The heart of GadTools is in its ability to easily create and manipulate a sophisticated and varied array of gadgets. GadTools supports the following kinds of gadgets:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Standard Gadget Types Supported by the GadTools Library&lt;br /&gt;
! Gadget Type&lt;br /&gt;
! Description or Example Usage&lt;br /&gt;
|-&lt;br /&gt;
| Button&lt;br /&gt;
| Familiar action gadgets, such as &amp;quot;OK&amp;quot; or &amp;quot;Cancel&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| String&lt;br /&gt;
| For text entry.&lt;br /&gt;
|-&lt;br /&gt;
| Integer&lt;br /&gt;
| For numeric entry.&lt;br /&gt;
|-&lt;br /&gt;
| Checkboxes&lt;br /&gt;
| For on/off items.&lt;br /&gt;
|-&lt;br /&gt;
| Mutually exclusive&lt;br /&gt;
| Radio buttons, select one choice among several.&lt;br /&gt;
|-&lt;br /&gt;
| Cycle&lt;br /&gt;
| Multiple-choice, pick one of a small number of choices.&lt;br /&gt;
|-&lt;br /&gt;
| Sliders&lt;br /&gt;
| To indicate a level within a range.&lt;br /&gt;
|-&lt;br /&gt;
| Scrollers&lt;br /&gt;
| To indicate a position in a list or area.&lt;br /&gt;
|-&lt;br /&gt;
| Listviews&lt;br /&gt;
| Scrolling lists of text.&lt;br /&gt;
|-&lt;br /&gt;
| Palette&lt;br /&gt;
| Color selection.&lt;br /&gt;
|-&lt;br /&gt;
| Text-display&lt;br /&gt;
| Read-only text.&lt;br /&gt;
|-&lt;br /&gt;
| Numeric-display&lt;br /&gt;
| Read-only numbers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GadTools gadget handling consists of a body of routines to create, manage and delete any of the 12 kinds of standard gadgets listed in the previous table, such as buttons, sliders, mutually exclusive buttons and scrolling lists.&lt;br /&gt;
&lt;br /&gt;
To illustrate the flexibility, power and simplicity that GadTools offers, consider the GadTools slider gadget. This gadget is used to indicate and control the level of something, for example volume, speed or color intensity. Without GadTools, applications have to deal directly with Intuition proportional and their arcane variables, such as HorizBody to control the slider knob&#039;s size and HorizPot to control the knob&#039;s position. Using the GadTools slider allows direct specification of the minimum and maximum levels of the slider, as well as its current level. For example, a color slider might have a minimum level of 0, a maximum level of 15 and a current level of 11.&lt;br /&gt;
&lt;br /&gt;
To simplify event-processing for the slider, GadTools only sends the application a message when the knob has moved far enough to cause the slider level, as expressed in application terms, to change. If a user were to slowly drag the knob of this color slider all the way to the right, the program will only hear messages for levels 12, 13, 14 and 15, with an optional additional message when the user releases the mouse-button.&lt;br /&gt;
&lt;br /&gt;
Changing the current level of the slider from within the program is as simple as specifying the new level in a function call. For instance, the application might set the slider&#039;s value to 5.&lt;br /&gt;
&lt;br /&gt;
As a final point, the slider is very well-behaved. When the user releases the mouse-button, the slider immediately snaps to the centered position for the level. If a user sets their background color to light gray, which might have red = green = blue = 10, all three color sliders will have their knobs at precisely the same relative position, instead of anywhere in the range that means &amp;quot;ten&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== The NewGadget Structure ====&lt;br /&gt;
&lt;br /&gt;
For most gadgets, the NewGadget structure is used to specify its common attributes. Additional attributes that are unique to specific kinds of gadgets are specified as tags sent to the CreateGadget() function (described below).&lt;br /&gt;
&lt;br /&gt;
The NewGadget structure is defined in &amp;amp;lt;intuition/gadtools.h&amp;amp;gt; as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
struct NewGadget&lt;br /&gt;
    {&lt;br /&gt;
    WORD ng_LeftEdge, ng_TopEdge;&lt;br /&gt;
    WORD ng_Width, ng_Height;&lt;br /&gt;
    UBYTE *ng_GadgetText;&lt;br /&gt;
    struct TextAttr *ng_TextAttr;&lt;br /&gt;
    UWORD ng_GadgetID;&lt;br /&gt;
    ULONG ng_Flags;&lt;br /&gt;
    APTR ng_VisualInfo;&lt;br /&gt;
    APTR ng_UserData;&lt;br /&gt;
    };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fields of the NewGadget structure are used as follows:&lt;br /&gt;
&lt;br /&gt;
; ng_LeftEdge, ng_TopEdge&lt;br /&gt;
: Define the position of the gadget being created.&lt;br /&gt;
&lt;br /&gt;
; ng_Width, ng_Height&lt;br /&gt;
: Define the size of the gadget being created.&lt;br /&gt;
&lt;br /&gt;
; ng_GadgetText&lt;br /&gt;
: Most gadgets have an associated label, which might be the text in a button or beside a checkmark. This field contains a pointer to the appropriate string. Note that only the pointer to the text is copied, the text itself is not. The string supplied must remain constant and valid for the life of the gadget.&lt;br /&gt;
&lt;br /&gt;
; ng_TextAttr&lt;br /&gt;
: The application must specify a font to use for the label and any other text that may be associated with the gadget.&lt;br /&gt;
&lt;br /&gt;
: Used to describe general aspects of the gadget, which includes where the label is to be placed and whether the label should be rendered in the highlight color. The label may be positioned on the left side, the right side, centered above, centered below or dead-center on the gadget. For most gadget kinds, the label is placed on the left side by default, exceptions will be noted.&lt;br /&gt;
&lt;br /&gt;
; ng_GadgetID, ng_Flags, ng_UserData&lt;br /&gt;
: These user fields are copied into the resulting Gadget structure.&lt;br /&gt;
&lt;br /&gt;
; ng_VisualInfo&lt;br /&gt;
: This field must contain a pointer to an instance of the VisualInfo structure, which contains information needed to create and render GadTools gadgets. The VisualInfo structure itself is private to GadTools and subject to change. Use the specialized GadTools functions for accessing the VisualInfo pointer, defined below. Never access or modify fields within this structure.&lt;br /&gt;
&lt;br /&gt;
==== Creating Gadgets ====&lt;br /&gt;
&lt;br /&gt;
The main call used to create a gadget with GadTools is CreateGadget(). This function can be used to create a single gadget or it can be called repeatedly to create a linked list of gadgets. It takes three arguments followed by a set of tags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Gadget *CreateGadget( ULONG kind, struct Gadget *prevgad, struct NewGadget *newgad,&lt;br /&gt;
                             struct TagItem *taglist);&lt;br /&gt;
struct Gadget *CreateGadgetA(ULONG kind, struct Gadget *prevgad, struct NewGadget *newgad,&lt;br /&gt;
                             Tag tag1, ...);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set the kind argument to one of the 12 gadget types supported by GadTools. Set the prevgad argument to the gadget address returned by CreateContext() if this is the first (or only) gadget in the list. Subsequent calls to CreateGadget() can be used to create and link gadgets together in a list in which case the prevgad argument is set to the address of the gadget returned by the preceding call to CreateGadget().&lt;br /&gt;
&lt;br /&gt;
Set the newgad argument to the address of the NewGadget structure describing the gadget to be created and set any special attributes for this gadget type using the tag arguments, tag1 or taglist. For instance, the following code fragment might be used to create the color slider discussed earlier:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slidergad = CreateGadget(SLIDER_KIND, newgadget, prevgad,&lt;br /&gt;
    GTSL_Min, 0,&lt;br /&gt;
    GTSL_Max, 15,&lt;br /&gt;
    GTSL_Level, 11,&lt;br /&gt;
    TAG_END);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CreateGadget() typically allocates and initializes all the necessary Intuition structures, including in this case the Gadget, IntuiText and PropInfo structures, as well as certain buffers. For more about these underlying structures, see [[Intuition_Gadgets|Intuition Gadgets]].&lt;br /&gt;
&lt;br /&gt;
Since CreateGadget() is a tag-based function, it is easy to add more tags to get a fancier gadget. For example, GadTools can optionally display the running level beside the slider. The caller must supply a printf()-style formatting string and the maximum length that the string will resolve to when the number is inserted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
slidergad = CreateGadget(SLIDER_KIND, newgadget, prevgad,&lt;br /&gt;
    GTSL_Min, 0,&lt;br /&gt;
    GTSL_Max, 15,&lt;br /&gt;
    GTSL_Level, 11,&lt;br /&gt;
    GTSL_LevelFormat, &amp;quot;%2ld&amp;quot;, /* printf()-style formatting string */&lt;br /&gt;
    GTSL_MaxLevelLen, 2,      /* maximum length of string         */&lt;br /&gt;
    TAG_END);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The level, 0 to 15 in this example, would then be displayed beside the slider. The formatting string could instead be &amp;quot;%2ld/15&amp;quot; so the level would be displayed as &amp;quot;0/15&amp;quot; through &amp;quot;15/15&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Handling Gadget Messages ====&lt;br /&gt;
&lt;br /&gt;
GadTools gadgets follow the same input model as other Intuition components. When the user operates a GadTools gadget, Intuition notifies the application about the input event by sending an IntuiMessage. The application can get these messages at the Window.UserPort. However GadTools gadgets use different message handling functions to get and reply these messages. Instead of the Exec functions GetMsg() and ReplyMsg(), applications should get and reply these messages through a pair of special GadTools functions, GT_GetIMsg() and GT_ReplyIMsg().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
struct IntuiMessage *GT_GetIMsg(struct MsgPort *iport);&lt;br /&gt;
VOID GT_ReplyIMsg(struct IntuiMessage *imsg);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For GT_GetIMsg(), the iport argument should be set to the window&#039;s UserPort. For GT_ReplyIMsg(), the imsg argument should be set to a pointer to the IntuiMessage returned by GT_GetIMsg().&lt;br /&gt;
&lt;br /&gt;
These functions ensure that the application only sees the gadget events that concern it and in a desirable form. For example, with a GadTools slider gadget, a message only gets through to the application when the slider&#039;s level actually changes and that level can be found in the IntuiMessage&#039;s Code field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
imsg = IGadTools-&amp;gt;GT_GetIMsg(win-&amp;gt;UserPort);&lt;br /&gt;
object = imsg-&amp;gt;IAddress;&lt;br /&gt;
class = imsg-&amp;gt;Class;&lt;br /&gt;
code = imsg-&amp;gt;Code;&lt;br /&gt;
IGadTools-&amp;gt;GT_ReplyIMsg(imsg);&lt;br /&gt;
switch (class)&lt;br /&gt;
    {&lt;br /&gt;
    case IDCMP_MOUSEMOVE:&lt;br /&gt;
        if (object == slidergad)&lt;br /&gt;
            {&lt;br /&gt;
            IDOS-&amp;gt;Printf(&amp;quot;Slider at level %ld\n&amp;quot;, code);&lt;br /&gt;
            }&lt;br /&gt;
        ...&lt;br /&gt;
        break;&lt;br /&gt;
    ...&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In general, the IntuiMessages received from GadTools contain more information in the Code field than is found in regular Intuition gadget messages. Also, when dealing with GadTools a lot of messages (mostly IDCMP_MOUSEMOVEs) do not have to be processed by the application. These are two reasons why dealing with GadTools gadgets is much easier than dealing with regular Intuition gadgets. Unfortunately this processing cannot happen magically, so applications must use GT_GetIMsg() and GT_ReplyIMsg() where they would normally have used GetMsg() and ReplyMsg().&lt;br /&gt;
&lt;br /&gt;
GT_GetIMsg() actually calls GetMsg() to remove a message from the specified window&#039;s UserPort. If the message pertains to a GadTools gadget then some dispatching code in GadTools will be called to process the message. What the program will receive from GT_GetIMsg() is actually a copy of the real IntuiMessage, possibly with some supplementary information from GadTools, such as the information typically found in the Code field.&lt;br /&gt;
&lt;br /&gt;
The GT_ReplyIMsg() call will take care of cleaning up and replying to the real IntuiMessage.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Warning|text=When an IDCMP_MOUSEMOVE message is received from a GadTools gadget, GadTools arranges to have the gadget&#039;s pointer in the IAddress field of the IntuiMessage. While this is extremely convenient, it is also untrue of messages from regular Intuition gadgets (described in the [[Intuition_Gadgets|Intuition Gadgets]] chapter). Do not make the mistake of assuming it to be true.}}&lt;br /&gt;
&lt;br /&gt;
This description of the inner workings of GT_GetIMsg() and GT_ReplyIMsg() is provided for understanding only; it is crucial that the program make no assumptions or interpretations about the real IntuiMessage. Any such inferences are not likely to hold true in the future. See the section on documented side-effects for more information.&lt;br /&gt;
&lt;br /&gt;
=== IDCMP Flags ===&lt;br /&gt;
&lt;br /&gt;
The various GadTools gadget types require certain classes of IDCMP messages in order to work. Applications specify these IDCMP classes when the window is opened or later with ModifyIDCMP() (see [[Intuition_Windows|Intuition Windows]] chapter for more on this). Each kind of GadTools gadget requires one or more of these IDCMP classes: IDCMP_GADGETUP, IDCMP_GADGETDOWN, IDCMP_MOUSEMOVE, IDCMP_MOUSEBUTTONS and IDCMP_INTUITICKS. As a convenience, the IDCMP classes required by each kind of gadget are defined in &amp;amp;lt;libraries/gadtools.h&amp;amp;gt;. For example, SLIDERIDCMP is defined to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#define SLIDERIDCMP (IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEMOVE)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Always OR the IDCMP Flag Bits|text=When specifying the IDCMP classes for a window, never add the flags together, always OR the bits together. Since many of the GadTools IDCMP constants have multiple bits set, adding the values will not lead to the proper flag combination.}}&lt;br /&gt;
&lt;br /&gt;
If a certain kind of GadTools gadget is used, the window must use all IDCMP classes required by that kind of gadget. Do not omit any that are given for that class, even if the application does require the message type.&lt;br /&gt;
&lt;br /&gt;
Because of the way GadTools gadgets are implemented, programs that use them always require notification about window refresh events. Even if the application performs no rendering of its own, it may not use the WFLG_NOCAREREFRESH window flag and must always set IDCMP_REFRESHWINDOW. See the section on &amp;quot;Gadget Refresh Functions&amp;quot; below for more on this.&lt;br /&gt;
&lt;br /&gt;
=== Freeing Gadgets ===&lt;br /&gt;
&lt;br /&gt;
After closing the window, the gadgets allocated using CreateGadget() must be released. FreeGadgets() is a simple call that will free all the GadTools gadgets that it finds, beginning with the gadget whose pointer is passed as an argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
VOID FreeGadgets( struct Gadget *gad );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The gad argument is a pointer to the first gadget to be freed. It is safe to call FreeGadgets() with a NULL gadget pointer, the function will then return immediately. Before calling FreeGadgets(), the application must first either remove the gadgets or close the window.&lt;br /&gt;
&lt;br /&gt;
When the gadget passed to FreeGadgets() is the first gadget in a linked list, the function frees all the GadTools gadgets on the list without patching pointers or trying to maintain the integrity of the list. Any non-GadTools gadgets found on the list will not be freed, hence the result will not necessarily form a nice list since any intervening GadTools gadgets will be gone.&lt;br /&gt;
&lt;br /&gt;
See the section on &amp;quot;Creating Gadget Lists&amp;quot; for more information on using linked lists of gadgets.&lt;br /&gt;
&lt;br /&gt;
=== Simple GadTools Gadget Example ===&lt;br /&gt;
&lt;br /&gt;
The example listed here shows how to use the NewGadget structure and the GadTools library functions discussed above to create a simple button gadget.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;/* simplegtgadget.c -- execute me to compile me&lt;br /&gt;
lc -b1 -cfistq -v -y simplegtgadget&lt;br /&gt;
blink FROM LIB:c.o simplegtgadget.o TO simplegtgadget LIB LIB:lc.lib LIB:amiga.lib&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
Simple example of a GadTools gadget.  Compiled with SAS C v5.10a&lt;br /&gt;
*/&lt;br /&gt;
#define INTUI_V36_NAMES_ONLY&lt;br /&gt;
&lt;br /&gt;
#include &amp;amp;lt;exec/types.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;intuition/intuition.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;intuition/gadgetclass.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;libraries/gadtools.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;amp;lt;clib/exec_protos.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;clib/intuition_protos.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;clib/gadtools_protos.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef LATTICE&lt;br /&gt;
int CXBRK(void)    { return(0); }  /* Disable Lattice CTRL/C handling */&lt;br /&gt;
int chkabort(void) { return(0); }  /* really */&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
/* Gadget defines of our choosing, to be used as GadgetID&#039;s. */&lt;br /&gt;
#define MYGAD_BUTTON    (4)&lt;br /&gt;
&lt;br /&gt;
VOID process_window_events(struct Window *);&lt;br /&gt;
VOID gadtoolsWindow(VOID);&lt;br /&gt;
&lt;br /&gt;
struct TextAttr Topaz80 = { &amp;amp;quot;topaz.font&amp;amp;quot;, 8, 0, 0, };&lt;br /&gt;
&lt;br /&gt;
struct Library *IntuitionBase;&lt;br /&gt;
struct Library *GadToolsBase;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Open all libraries and run.  Clean up when finished or on error..&lt;br /&gt;
*/&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
if ( (IntuitionBase = OpenLibrary(&amp;amp;quot;intuition.library&amp;amp;quot;, 37)) != NULL )&lt;br /&gt;
    {&lt;br /&gt;
    if ( (GadToolsBase = OpenLibrary(&amp;amp;quot;gadtools.library&amp;amp;quot;, 37)) != NULL )&lt;br /&gt;
        {&lt;br /&gt;
        gadtoolsWindow();&lt;br /&gt;
&lt;br /&gt;
        CloseLibrary(GadToolsBase);&lt;br /&gt;
        }&lt;br /&gt;
    CloseLibrary(IntuitionBase);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Prepare for using GadTools, set up gadgets and open window.&lt;br /&gt;
** Clean up and when done or on error.&lt;br /&gt;
*/&lt;br /&gt;
VOID gadtoolsWindow(VOID)&lt;br /&gt;
{&lt;br /&gt;
struct Screen    *mysc;&lt;br /&gt;
struct Window    *mywin;&lt;br /&gt;
struct Gadget    *glist, *gad;&lt;br /&gt;
struct NewGadget ng;&lt;br /&gt;
void             *vi;&lt;br /&gt;
&lt;br /&gt;
glist = NULL;&lt;br /&gt;
&lt;br /&gt;
if ( (mysc = LockPubScreen(NULL)) != NULL )&lt;br /&gt;
    {&lt;br /&gt;
    if ( (vi = GetVisualInfo(mysc, TAG_END)) != NULL )&lt;br /&gt;
        {&lt;br /&gt;
        /* GadTools gadgets require this step to be taken */&lt;br /&gt;
        gad = CreateContext(&amp;amp;amp;glist);&lt;br /&gt;
&lt;br /&gt;
        /* create a button gadget centered below the window title */&lt;br /&gt;
        ng.ng_TextAttr   = &amp;amp;amp;Topaz80;&lt;br /&gt;
        ng.ng_VisualInfo = vi;&lt;br /&gt;
        ng.ng_LeftEdge   = 150;&lt;br /&gt;
        ng.ng_TopEdge    = 20 + mysc-&amp;amp;gt;WBorTop + (mysc-&amp;amp;gt;Font-&amp;amp;gt;ta_YSize + 1);&lt;br /&gt;
        ng.ng_Width      = 100;&lt;br /&gt;
        ng.ng_Height     = 12;&lt;br /&gt;
        ng.ng_GadgetText = &amp;amp;quot;Click Here&amp;amp;quot;;&lt;br /&gt;
        ng.ng_GadgetID   = MYGAD_BUTTON;&lt;br /&gt;
        ng.ng_Flags      = 0;&lt;br /&gt;
        gad = CreateGadget(BUTTON_KIND, gad, &amp;amp;amp;ng, TAG_END);&lt;br /&gt;
&lt;br /&gt;
        if (gad != NULL)&lt;br /&gt;
            {&lt;br /&gt;
            if ( (mywin = OpenWindowTags(NULL,&lt;br /&gt;
                    WA_Title,     &amp;amp;quot;GadTools Gadget Demo&amp;amp;quot;,&lt;br /&gt;
                    WA_Gadgets,   glist,      WA_AutoAdjust,    TRUE,&lt;br /&gt;
                    WA_Width,       400,      WA_InnerHeight,    100,&lt;br /&gt;
                    WA_DragBar,    TRUE,      WA_DepthGadget,   TRUE,&lt;br /&gt;
                    WA_Activate,   TRUE,      WA_CloseGadget,   TRUE,&lt;br /&gt;
                    WA_IDCMP, IDCMP_CLOSEWINDOW |&lt;br /&gt;
                              IDCMP_REFRESHWINDOW | BUTTONIDCMP,&lt;br /&gt;
                    WA_PubScreen,   mysc,&lt;br /&gt;
                    TAG_END)) != NULL )&lt;br /&gt;
                {&lt;br /&gt;
                GT_RefreshWindow(mywin, NULL);&lt;br /&gt;
&lt;br /&gt;
                process_window_events(mywin);&lt;br /&gt;
&lt;br /&gt;
                CloseWindow(mywin);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        /* FreeGadgets() must be called after the context has been&lt;br /&gt;
        ** created.  It does nothing if glist is NULL&lt;br /&gt;
        */&lt;br /&gt;
        FreeGadgets(glist);&lt;br /&gt;
        FreeVisualInfo(vi);&lt;br /&gt;
        }&lt;br /&gt;
    UnlockPubScreen(NULL, mysc);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Standard message handling loop with GadTools message handling functions&lt;br /&gt;
** used (GT_GetIMsg() and GT_ReplyIMsg()).&lt;br /&gt;
*/&lt;br /&gt;
VOID process_window_events(struct Window *mywin)&lt;br /&gt;
{&lt;br /&gt;
struct IntuiMessage *imsg;&lt;br /&gt;
struct Gadget *gad;&lt;br /&gt;
BOOL  terminated = FALSE;&lt;br /&gt;
&lt;br /&gt;
while (!terminated)&lt;br /&gt;
    {&lt;br /&gt;
    Wait (1 &amp;amp;lt;&amp;amp;lt; mywin-&amp;amp;gt;UserPort-&amp;amp;gt;mp_SigBit);&lt;br /&gt;
&lt;br /&gt;
    /* Use GT_GetIMsg() and GT_ReplyIMsg() for handling */&lt;br /&gt;
    /* IntuiMessages with GadTools gadgets.             */&lt;br /&gt;
    while ((!terminated) &amp;amp;amp;&amp;amp;amp; (imsg = GT_GetIMsg(mywin-&amp;amp;gt;UserPort)))&lt;br /&gt;
        {&lt;br /&gt;
        /* GT_ReplyIMsg() at end of loop */&lt;br /&gt;
&lt;br /&gt;
        switch (imsg-&amp;amp;gt;Class)&lt;br /&gt;
            {&lt;br /&gt;
            case IDCMP_GADGETUP:       /* Buttons only report GADGETUP */&lt;br /&gt;
                gad = (struct Gadget *)imsg-&amp;amp;gt;IAddress;&lt;br /&gt;
                if (gad-&amp;amp;gt;GadgetID == MYGAD_BUTTON)&lt;br /&gt;
                        printf(&amp;amp;quot;Button was pressed.\n&amp;amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            case IDCMP_CLOSEWINDOW:&lt;br /&gt;
                terminated = TRUE;&lt;br /&gt;
                break;&lt;br /&gt;
            case IDCMP_REFRESHWINDOW:&lt;br /&gt;
                /* This handling is REQUIRED with GadTools. */&lt;br /&gt;
                GT_BeginRefresh(mywin);&lt;br /&gt;
                GT_EndRefresh(mywin, TRUE);&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        /* Use the toolkit message-replying function here... */&lt;br /&gt;
        GT_ReplyIMsg(imsg);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modifying Gadgets ===&lt;br /&gt;
&lt;br /&gt;
The attributes of a gadget are set up when the gadget is created. Some of these attributes can be changed later by using the GT_SetGadgetAttrs() function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
VOID GT_SetGadgetAttrs (struct Gadget *gad, struct Window *win, struct Requester *req, Tag tag1, ... );&lt;br /&gt;
VOID GT_SetGadgetAttrsA(struct Gadget *gad, struct Window *win, struct Requester *req, struct TagItem *taglist);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The gad argument specifies the gadget to be changed while the win argument specifies the window the gadget is in. Currently, the req argument is unused and must be set to NULL.&lt;br /&gt;
&lt;br /&gt;
The gadget attributes are changed by passing tag arguments to these functions. The tag arguments can be either a set of TagItems on the stack for GT_SetGadgetAttrs(), or a pointer to an array of TagItems for GT_SetGadgetAttrsA(). The tag items specify the attributes that are to be changed for the gadget. Keep in mind though that not every gadget attribute can be modified this way.&lt;br /&gt;
&lt;br /&gt;
For example, in the slider gadget presented earlier, the level-formatting string may not be changed after the gadget is created. However, the slider&#039;s level may be changed to 5 as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
IGadTools-&amp;gt;GT_SetGadgetAttrs(slidergad, win, req,&lt;br /&gt;
    GTSL_Level, 5,&lt;br /&gt;
    TAG_END);&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here are some other example uses of GT_SetGadgetAttrs() to change gadget attributes after it is created.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/* Disable a button gadget */&lt;br /&gt;
IGadTools-&amp;gt;GT_SetGadgetAttrs(buttongad, win, NULL,&lt;br /&gt;
                             GA_Disabled, TRUE,&lt;br /&gt;
                             TAG_END);&lt;br /&gt;
&lt;br /&gt;
/* Change a slider&#039;s range to be 1 to 100, currently at 50 */&lt;br /&gt;
IGadTools-&amp;gt;GT_SetGadgetAttrs(slidergad, win, NULL,&lt;br /&gt;
                             GTSL_Min, 1,&lt;br /&gt;
                             GTSL_Max, 100,&lt;br /&gt;
                             GTSL_Level, 50,&lt;br /&gt;
                             TAG_END);&lt;br /&gt;
&lt;br /&gt;
/* Add a node to the head of listview&#039;s list, and&lt;br /&gt;
   make it the selected one */&lt;br /&gt;
IGadTools-&amp;gt;GT_SetGadgetAttrs(listviewgad, win, NULL,&lt;br /&gt;
                             /* detach list before modifying */&lt;br /&gt;
                             GTLV_Labels, ~0,&lt;br /&gt;
                             TAG_END);&lt;br /&gt;
IExec-&amp;gt;AddHead(&amp;amp;lvlabels, &amp;amp;newnode);&lt;br /&gt;
IGadTools-&amp;gt;GT_SetGadgetAttrs(listviewgad, win, NULL,&lt;br /&gt;
                             /* re-attach list */&lt;br /&gt;
                             GTLV_Labels, &amp;amp;amp;lvlabels,&lt;br /&gt;
                             GTLV_Selected, 0,&lt;br /&gt;
                             TAG_END);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When changing a gadget using these functions, the gadget will automatically update its visuals. No refresh is required, nor should any refresh call be performed.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Warning|text=The GT_SetGadgetAttrs() functions may not be called inside of a GT_BeginRefresh()/GT_EndRefresh() pair. This is true of Intuition gadget functions generally, including those discussed in the [[Intuition_Gadgets|Intuition Gadgets]] chapter.}}&lt;br /&gt;
&lt;br /&gt;
In the sections that follow all the possible attributes for each kind of gadget are discussed. The tags are also described in the Autodocs for GT_SetGadgetAttrs() in the SDK.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Important|text=Tags that can only be sent to CreateGadget() and not to GT_SetGadgetAttrs() will be marked as &#039;&#039;create only&#039;&#039; in the discussion that follows. Those that are valid parameters to both functions will be marked as &#039;&#039;create and set&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
=== The Kinds of GadTools Gadgets ===&lt;br /&gt;
&lt;br /&gt;
This section discusses the unique features of each kind of gadget supported by the GadTools library.&lt;br /&gt;
&lt;br /&gt;
==== Button Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Button gadgets (BUTTON_KIND) are perhaps the simplest kind of GadTools gadget. Button gadgets may be used for objects like the &amp;quot;OK&amp;quot; and &amp;quot;Cancel&amp;quot; buttons in requesters. GadTools will create a hit-select button with a raised bevelled border. The label supplied will be centered on the button&#039;s face. Since the label is not clipped, be sure that the gadget is large enough to contain the text supplied.&lt;br /&gt;
&lt;br /&gt;
Button gadgets recognize only one tag:&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable or ghost the button gadget, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
When the user selects a button gadget, the program will receive an IDCMP_GADGETUP event.&lt;br /&gt;
&lt;br /&gt;
If clicking on a button causes a requester to appear, for example a button that brings up a color requester, then the button text should end in ellipsis (...), as in &amp;quot;Quit...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Text-Entry and Number-Entry Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Text-entry (STRING_KIND) and number-entry (INTEGER_KIND) gadgets are fairly typical Intuition string gadgets. The typing area is contained by a border which is a raised ridge.&lt;br /&gt;
&lt;br /&gt;
Text-entry gadgets accept the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTST_String (STRPTR)&lt;br /&gt;
: A pointer to the string to be placed into the text-entry gadget buffer or NULL to get an empty text-entry gadget. The string itself is actually copied into the gadget&#039;s buffer. The default is NULL. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTST_MaxChars (UWORD)&lt;br /&gt;
: The maximum number of characters that the text-entry gadget should hold. The string buffer that gets created for the gadget will actually be one bigger than this number, in order to hold the trailing NULL. The default is 64. (Create only.)&lt;br /&gt;
&lt;br /&gt;
Number-entry gadgets accept the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTIN_Number (ULONG)&lt;br /&gt;
: The number to be placed into the number-entry gadget. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTIN_MaxChars (UWORD)&lt;br /&gt;
: The maximum number of digits that the number-entry gadget should hold. The string buffer that gets created for the gadget will actually be one bigger than this, in order to hold the trailing NULL. The default is 10. (Create only.)&lt;br /&gt;
&lt;br /&gt;
Both text-entry and number-entry gadgets, which are collectively called string gadgets, accept these common tags:&lt;br /&gt;
&lt;br /&gt;
; STRINGA_Justification&lt;br /&gt;
: This attribute controls the placement of the string or number within its box and can be one of GACT_STRINGLEFT, GACT_STRINGRIGHT or GACT_STRINGCENTER. The default is GACT_STRINGLEFT. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; STRINGA_ReplaceMode (BOOL)&lt;br /&gt;
: Set STRINGA_ReplaceMode to TRUE to get a string gadget which is in replace-mode, as opposed to auto-insert mode. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the string gadget, otherwise to FALSE. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; STRINGA_ExitHelp (BOOL)&lt;br /&gt;
: Set this attribute to TRUE if the application wants to hear the Help key from within this string gadget. This feature allows the program to hear the press of the Help key in all cases. If TRUE, pressing the help key while this gadget is active will terminate the gadget and send a message. The program will receive an IDCMP_GADGETUP message having a Code value of 0x5F, the rawkey code for Help. Typically, the program will want to reactivate the gadget after performing the help-display. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_TabCycle (BOOL)&lt;br /&gt;
: If the user types Tab or Shift Tab into a GA_TabCycle gadget, Intuition will activate the next or previous such gadget in sequence. This gives the user easy keyboard control over which text-entry or number-entry gadget is active. Tab moves to the next GA_TabCycle gadget in the gadget list and Shift Tab moves to the previous one. When the user presses Tab or Shift Tab, Intuition will deactivate the gadget and send this program an IDCMP_GADGETUP message with the code field set to 0x09, the ASCII value for a tab. Intuition will then activate the next indicated gadget. Check the shift bits of the qualifier field to learn if Shift Tab was typed. The ordering of the gadgets may only be controlled by the order in which they were added to the window. For special cases, for example, if there is only one string gadget in the window, this feature can be suppressed by specifying the tagitem pair {GA_TabCycle, FALSE}. The default is TRUE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTST_EditHook (struct Hook *)&lt;br /&gt;
: Pointer to a custom editing hook for this string or integer gadget. See [[Intuition_Gadgets|Intuition Gadgets]] for more information on string gadget edit-hooks.&lt;br /&gt;
&lt;br /&gt;
As with all Intuition string gadgets, the program will receive an IDCMP_GADGETUP message only when the user presses Enter, Return, Help, Tab or Shift Tab while typing in the gadget. Note that, like Intuition string gadgets, the program will not hear anything if the user deactivates the string gadget by clicking elsewhere. Therefore, it is a good idea to always check the string gadget&#039;s buffer before using its contents, instead of just tracking its value as IDCMP_GADGETUP messages are received for this gadget.&lt;br /&gt;
&lt;br /&gt;
Be sure the code is designed so that nothing drastic happens, like closing a requester or opening a file, if the IDCMP_GADGETUP message has a non-zero Code field; the program will want to handle the Tab and Help cases intelligently.&lt;br /&gt;
&lt;br /&gt;
To read the string gadget&#039;s buffer, look at the Gadget&#039;s StringInfo Buffer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
((struct StringInfo *)gad-&amp;gt;SpecialInfo)-&amp;gt;Buffer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To determine the value of an integer gadget, look at the Gadget&#039;s StringInfo LongInt in the same way.&lt;br /&gt;
&lt;br /&gt;
Always use the GTST_String or GTIN_Number tags to set these values. Never write to the StringInfo-&amp;amp;gt;Buffer or StringInfo-&amp;amp;gt;LongInt fields directly.&lt;br /&gt;
&lt;br /&gt;
GadTools string and integer gadgets do not directly support the GA_Immediate property (which would cause Intuition to send an IDCMP_GADGETDOWN event when such a gadget is first selected). However, this property can be very important. Therefore, the following technique can be used to enable this property.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Warning|text=Note that the technique shown here relies on directly setting flags in a GadTools gadget; this is not normally allowed since it hinders future compatibility. Do not attempt to change other flags or properties of GadTools gadgets except through the defined interfaces of CreateGadgetA() and GT_SetGadgetAttrsA(). Directly modifying flags or properties is legal only when officially sanctioned by the AmigaOS development team.}}&lt;br /&gt;
&lt;br /&gt;
To get the GA_Immediate property, pass the {GA_Immediate, TRUE} tag to CreateGadgetA(). Even though this tag is ignored for string and integer gadgets under V37, this will allow future versions of GadTools to learn of your request in the correct way. Then, under V37 only, set the GACT_IMMEDIATE flag in the gadget&#039;s Activation field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gad = CreateGadget( STRING_KIND, gad, &amp;amp;amp;ng,&lt;br /&gt;
        /* string gadget tags go here */&lt;br /&gt;
        GTST_...,&lt;br /&gt;
&lt;br /&gt;
        /* Add this tag for future GadTools releases */&lt;br /&gt;
        GA_Immediate, TRUE,&lt;br /&gt;
        ...&lt;br /&gt;
        TAG_END );&lt;br /&gt;
&lt;br /&gt;
if ( ( gad ) &amp;amp;amp;&amp;amp;amp; ( GadToolsBase-&amp;amp;gt;lib_Version == 37) )&lt;br /&gt;
{&lt;br /&gt;
        /* Under GadTools V37 only, set this attribute&lt;br /&gt;
         * directly.  Do not set this attribute under&lt;br /&gt;
         * future versions of GadTools, or for gadgets&lt;br /&gt;
         * other than STRING_KIND or INTEGER_KIND.&lt;br /&gt;
         */&lt;br /&gt;
        gad-&amp;amp;gt;Activation |= GACT_IMMEDIATE;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Checkbox Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Checkboxes (CHECKBOX_KIND) are appropriate for presenting options which may be turned on or off. This kind of gadget consists of a raised box which contains a checkmark if the option is selected or is blank if the option is not selected. Clicking on the box toggles the state of the checkbox.&lt;br /&gt;
&lt;br /&gt;
The width and height of a checkbox are by default not scaled and fixed (CHECKBOXWIDTH by CHECKBOXHEIGHT). To scale a checkbox gadget, set the GTCB_Scaled tag to TRUE, and set the desired width and height in the ng_Width and ng_Height fields of the NewGadget structure.&lt;br /&gt;
&lt;br /&gt;
The checkbox may be controlled with the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTCB_Checked (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to set the gadget&#039;s state to &#039;&#039;checked&#039;&#039;. Set it to FALSE to mark the gadget as &#039;&#039;unchecked&#039;&#039;. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTCB_Scaled (BOOL)&lt;br /&gt;
: Scales the checkbox gadget if set to TRUE. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the checkbox, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
When the user selects a checkbox, the program will receive an IntuiMessage with a class of IDCMP_GADGETUP. As this gadget always toggles, the program can easily track the state of the gadget. Feel free to read the gadget-&amp;amp;gt;Flags GFLG_SELECTED bit. Note, however, that the Gadget structure itself is not synchronized to the IntuiMessages received. If the user clicks a second time, the GFLG_SELECTED bit can toggle again before the program gets a chance to read it. This is true of any of the dynamic fields of the Gadget structure, and is worth being aware of, although only rarely will an application have to account for it.&lt;br /&gt;
&lt;br /&gt;
==== Mutually-Exclusive Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Use mutually exclusive gadgets (MX_KIND), or &#039;&#039;radio buttons&#039;&#039;, when the user must choose only one option from a short list of possibilities. Mutually exclusive gadgets are appropriate when there are a small number of choices, perhaps eight or less.&lt;br /&gt;
&lt;br /&gt;
A set of mutually exclusive gadgets consists of a list of labels and beside each label, a small raised oval that looks like a button. Exactly one of the ovals is recessed and highlighted, to indicate the selected choice. The user can pick another choice by clicking on any of the raised ovals. This choice will become active and the previously selected choice will become inactive. That is, the selected oval will become recessed while the previous one will pop out, like the buttons on a car radio.&lt;br /&gt;
&lt;br /&gt;
Mutually exclusive gadgets recognize these tags:&lt;br /&gt;
&lt;br /&gt;
; GTMX_Labels (STRPTR *)&lt;br /&gt;
: A NULL-pointer-terminated array of strings which are to be the labels beside each choice in the set of mutually exclusive gadgets. This array determines how many buttons are created. This array must be supplied to CreateGadget() and may not be changed. The strings themselves must remain valid for the lifetime of the gadget. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTMX_Active (UWORD)&lt;br /&gt;
: The ordinal number, counting from zero, of the active choice of the set of mutually exclusive gadgets. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTMX_Spacing (UWORD)&lt;br /&gt;
: The amount of space, in pixels, that will be placed between successive choices in a set of mutually exclusive gadgets. The default is one. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTMX_Scaled (BOOL)&lt;br /&gt;
: Indicates whether the mutually exclusive gadget should be scaled or not. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTMX_TitlePlace (UWORD)&lt;br /&gt;
: Where to place the title of the mutually exclusive gadget. The gadget obtains its title from the ng_GadgetText field of the NewGadget structure. The default is no title. (Create only.)&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| PLACETEXT_LEFT || Right-align text on left side&lt;br /&gt;
|-&lt;br /&gt;
| PLACETEXT_RIGHT || Left-align text on right side&lt;br /&gt;
|-&lt;br /&gt;
| PLACETEXT_ABOVE || Center text above&lt;br /&gt;
|-&lt;br /&gt;
| PLACETEXT_BELOW || Center text below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When the user selects a new choice from a set of mutually exclusive gadgets, the program will receive an IDCMP_GADGETDOWN IntuiMessage. Look in the IntuiMessage&#039;s Code field for the ordinal number of the new active selection.&lt;br /&gt;
&lt;br /&gt;
The ng_GadgetText field of the NewGadget structure is used to display the title for mutually exclusive gadgets. The text position specified in ng_Flags determines whether the item labels are placed to the left or the right of the radio buttons themselves. By default, the labels appear on the left. Do not specify PLACETEXT_ABOVE, PLACETEXT_BELOW or PLACETEXT_IN for this kind of gadget.&lt;br /&gt;
&lt;br /&gt;
To scale a mutually exclusive gadget, set the GTMX_Scaled tag to TRUE, and set the desired width and height in the ng_Width and ng_Height fields of the NewGadget structure. The default value of GTMX_Scaled is FALSE, meaning use the default size of MXWIDTH by MXHEIGHT respectively. If you scale mutually exclusive gadgets, you must also set the&lt;br /&gt;
GTMX_Spacing tag to NewGadget.ng_TextAttr-&amp;gt;ta_YSize + 1 to properly space the buttons with respect to the font.&lt;br /&gt;
&lt;br /&gt;
==== Cycle Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Like mutually exclusive gadgets, cycle gadgets (CYCLE_KIND) allow the user to choose exactly one option from among several.&lt;br /&gt;
&lt;br /&gt;
The cycle gadget appears as a raised rectangular button with a vertical divider near the left side. A circular arrow glyph appears to the left of the divider, while the current choice appears to the right. Clicking on the cycle gadget advances to the next choice, while shift-clicking on it changes it to the previous choice.&lt;br /&gt;
&lt;br /&gt;
Cycle gadgets are more compact than mutually exclusive gadgets, since only the current choice is displayed. They are preferable to mutually exclusive gadgets when a window needs to have several such gadgets as in the PrinterGfx Preferences editor, or when there is a medium number of choices. If the number of choices is much more than about a dozen, it may become too frustrating and inefficient for the user to find the desired choice. In that case, use a listview (scrolling list) instead.&lt;br /&gt;
&lt;br /&gt;
The tags recognized by cycle gadgets are:&lt;br /&gt;
&lt;br /&gt;
; GTCY_Labels (STRPTR *)&lt;br /&gt;
: Like GTMX_Labels, this tag is associated with a NULL-pointer-terminated array of strings which are the choices that this gadget allows. This array must be supplied to CreateGadget() and can be changed. The strings themselves must remain valid for the lifetime of the gadget. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTCY_Active (UWORD)&lt;br /&gt;
: The ordinal number, counting from zero, of the active choice of the cycle gadget. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the cycle gadget, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
When the user clicks or shift-clicks on a cycle gadget, the program will receive an IDCMP_GADGETUP IntuiMessage. Look in the Code field of the IntuiMessage for the ordinal number of the new active selection.&lt;br /&gt;
&lt;br /&gt;
==== Slider Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Sliders are one of the two kinds of proportional gadgets offered by GadTools. Slider gadgets (SLIDER_KIND) are used to control an amount, a level or an intensity, such as volume or color. Scroller gadgets (SCROLLER_KIND) are discussed below.&lt;br /&gt;
&lt;br /&gt;
Slider gadgets accept the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTSL_Min (WORD)&lt;br /&gt;
: The minimum level of a slider. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_Max (WORD)&lt;br /&gt;
: The maximum level of a slider. The default is 15. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_Level (WORD)&lt;br /&gt;
: The current level of a slider. The default is zero. When the level is at its minimum, the knob will be all the way to the left for a horizontal slider or all the way at the bottom for a vertical slider. Conversely, the maximum level corresponds to the knob being to the extreme right or top. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_LevelFormat (STRPTR)&lt;br /&gt;
: The current level of the slider may be displayed in real-time alongside the gadget. To use the level-display feature, the program must be using a monospace font for this gadget.&lt;br /&gt;
&lt;br /&gt;
: GTSL_LevelFormat specifies a printf()-style formatting string used to render the slider level beside the slider (the complete set of formatting options is described in the Exec library function RawDoFmt()). Be sure to use the &amp;quot;l&amp;quot; (long word) modifier for the number. Field-width specifiers may be used to ensure that the resulting string is always of constant width. The simplest would be &amp;quot;%2ld&amp;quot;. A 2-digit hexadecimal slider might use &amp;quot;%02lx&amp;quot;, which adds leading zeros to the number. Strings with extra text, such as &amp;quot;%3ld hours&amp;quot;, are permissible. If this tag is specified, the program must also provide GTSL_MaxLevelLen. By default, the level is not displayed. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_MaxLevelLen (UWORD)&lt;br /&gt;
: The maximum length of the string that will result from the given level-formatting string. If this tag is specified, the program must also provide GTSL_LevelFormat. By default, the level is not displayed. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_LevelPlace&lt;br /&gt;
: To choose where the optional display of the level is positioned. It must be one of PLACETEXT_LEFT, PLACETEXT_RIGHT, PLACETEXT_ABOVE or PLACETEXT_BELOW. The level may be placed anywhere with the following exception: the level and the label may not be both above or both below the gadget. To place them both on the same side, allow space in the gadget&#039;s label (see the example). The default is PLACETEXT_LEFT. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTSL_DispFunc (LONG (*function)(struct Gadget *, WORD))&lt;br /&gt;
: Optional function to convert the level for display. A slider to select the number of colors for a screen may operate in screen depth (1 to 5, for instance), but actually display the number of colors (2, 4, 8, 16 or 32). This may be done by providing a GTSL_DispFunc function which returns 1 &amp;amp;lt;&amp;amp;lt; level. The function must take a pointer to the Gadget as the first parameter and the level, a WORD, as the second and return the result as a LONG. The default behavior for displaying a level is to do so without any conversion. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Immediate (BOOL)&lt;br /&gt;
: Set this to TRUE to receive an IDCMP_GADGETDOWN IntuiMessage when the user presses the mouse button over the slider. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_RelVerify (BOOL)&lt;br /&gt;
: Set this to TRUE to receive an IDCMP_GADGETUP IntuiMessage when the user releases the mouse button after using the slider. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; PGA_Freedom&lt;br /&gt;
: Specifies which direction the knob may move. Set to LORIENT_VERT for a vertical slider or LORIENT_HORIZ for a horizontal slider. The default is LORIENT_HORIZ. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the slider, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
Up to three different classes of IntuiMessage may be received at the port when the user plays with a slider, these are IDCMP_MOUSEMOVE, IDCMP_GADGETUP and IDCMP_GADGETDOWN. The program may examine the IntuiMessage Code field to discover the slider‚Äôs level.&lt;br /&gt;
&lt;br /&gt;
IDCMP_MOUSEMOVE IntuiMessages will be heard whenever the slider&#039;s level changes. IDCMP_MOUSEMOVE IntuiMessages will not be heard if the knob has not moved far enough for the level to actually change. For example if the slider runs from 0 to 15 and is currently set to 12, if the user drags the slider all the way up the program will hear no more than three IDCMP_MOUSEMOVEs, one each for 13, 14 and 15.&lt;br /&gt;
&lt;br /&gt;
If {GA_Immediate, TRUE} is specified, then the program will always hear an IDCMP_GADGETDOWN IntuiMessage when the user begins to adjust a slider. If {GA_RelVerify, TRUE} is specified, then the program will always hear an IDCMP_GADGETUP IntuiMessage when the user finishes adjusting the slider. If IDCMP_GADGETUP or IDCMP_GADGETDOWN IntuiMessages are requested, the program will always hear them, even if the level has not changed since the previous IntuiMessage.&lt;br /&gt;
&lt;br /&gt;
Note that the Code field of the IntuiMessage structure is a UWORD, while the slider&#039;s level may be negative, since it is a WORD. Be sure to copy or cast the IntuiMessage-&amp;amp;gt;Code into a WORD if the slider has negative levels.&lt;br /&gt;
&lt;br /&gt;
If the user clicks in the container next to the knob, the slider level will increase or decrease by one. If the user drags the knob itself, then the knob will snap to the nearest integral position when it is released.&lt;br /&gt;
&lt;br /&gt;
Here is an example of the screen-depth slider discussed earlier:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* NewGadget initialized here. Note the three spaces&lt;br /&gt;
 * after &amp;amp;quot;Slider:&amp;amp;quot;, to allow a blank plus the two digits&lt;br /&gt;
 * of the level display&lt;br /&gt;
 */&lt;br /&gt;
ng.ng_Flags = PLACETEXT_LEFT;&lt;br /&gt;
ng.ng_GadgetText = &amp;amp;quot;Slider:   &amp;amp;quot;;&lt;br /&gt;
&lt;br /&gt;
LONG DepthToColors(struct Gadget *gad, WORD level)&lt;br /&gt;
{&lt;br /&gt;
return ((WORD)(1 &amp;amp;lt;&amp;amp;lt; level));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
gad = CreateGadget(SLIDER_KIND, gad, &amp;amp;amp;ng,&lt;br /&gt;
    GTSL_Min, 1,&lt;br /&gt;
    GTSL_Max, 5,&lt;br /&gt;
    GTSL_Level, current_depth,&lt;br /&gt;
    GTSL_MaxLevelLen, 2,&lt;br /&gt;
    GTSL_LevelFormat, &amp;amp;quot;%2ld&amp;amp;quot;,&lt;br /&gt;
    GTSL_DispFunc, DepthToColors,&lt;br /&gt;
    TAG_END);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Scroller Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Scrollers (SCROLLER_KIND) bear some similarity to sliders, but are used for a quite different job: they allow the user to adjust the position of a limited view into a larger area. For example, Workbench&#039;s windows have scrollers that allow the user to see icons that are outside the visible portion of a window. Another example is a scrolling list in a file requester which has a scroller that allows the user to see different parts of the whole list.&lt;br /&gt;
&lt;br /&gt;
A scroller consists of a proportional gadget and usually also has a pair of arrow buttons.&lt;br /&gt;
&lt;br /&gt;
While the slider deals in minimum, maximum and current level, the scroller understands Total, Visible and Top. For a scrolling list, Total would be the number of items in the entire list, Visible would be the number of lines visible in the display area and Top would be the number of the first line displayed in the visible part of the list. Top would run from zero to Total - Visible. For an area-scroller such as those in Workbench&#039;s windows, Total would be the height (or width) of the whole area, Visible would be the visible height (or width) and Top would be the top (or left) edge of the visible part.&lt;br /&gt;
&lt;br /&gt;
Note that the position of a scroller should always represent the position of the visible part of the project and never the position of a cursor or insertion point.&lt;br /&gt;
&lt;br /&gt;
Scrollers respect the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTSC_Top (WORD)&lt;br /&gt;
: The top line or position visible in the area that the scroller represents. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSC_Total (WORD)&lt;br /&gt;
: The total number of lines or positions that the scroller represents. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSC_Visible (WORD)&lt;br /&gt;
: The visible number of lines or positions that the scroller represents. The default is two. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTSC_Arrows (UWORD)&lt;br /&gt;
: Asks for arrow gadgets to be attached to the scroller. The value supplied will be used as the width of each arrow button for a horizontal scroller or the height of each arrow button for a vertical scroller, the other dimension will be set by GadTools to match the scroller size. It is generally recommend that arrows be provided. The default is no arrows. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Immediate (BOOL)&lt;br /&gt;
: Set this to TRUE to receive an IDCMP_GADGETDOWN IntuiMessage when the user presses the mouse button over the scroller. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_RelVerify (BOOL)&lt;br /&gt;
: Set this to TRUE to receive an IDCMP_GADGETUP IntuiMessage when the user releases the mouse button after using the scroller. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; PGA_Freedom&lt;br /&gt;
: Specifies which direction the knob may move. Set to LORIENT_VERT for a vertical scroller or LORIENT_HORIZ for a horizontal scroller. The default is LORIENT_HORIZ. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the scroller, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
The IntuiMessages received for a scroller gadget are the same in nature as those for a slider defined above, including the fact that messages are only heard by the program when the knob moves far enough for the Top value to actually change. The Code field of the IntuiMessage will contain the new Top value of the scroller.&lt;br /&gt;
&lt;br /&gt;
If the user clicks on an arrow gadget, the scroller moves by one unit. If the user holds the button down over an arrow gadget, it repeats.&lt;br /&gt;
&lt;br /&gt;
If the user clicks in the container next to the knob, the scroller will move by one page, which is the visible amount less one. This means that when the user pages through a scrolling list, any pair of successive views will overlap by one line. This helps the user understand the continuity of the list. If the program is using a scroller to pan through an area then there will be an overlap of one unit between successive views. It is recommended that Top, Visible and Total be scaled so that one unit represents about five to ten percent of the visible amount.&lt;br /&gt;
&lt;br /&gt;
==== Listview Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Listview gadgets (LISTVIEW_KIND) are scrolling lists. They consist of a scroller with arrows, an area where the list itself is visible and optionally a place where the current selection is displayed, which may be editable. The user can browse through the list using the scroller or its arrows and may select an entry by clicking on that item.&lt;br /&gt;
&lt;br /&gt;
There are a number of tags that are used with listviews:&lt;br /&gt;
&lt;br /&gt;
; GTLV_Labels (struct List *)&lt;br /&gt;
: An Exec list whose nodes&#039; ln_Name fields are to be displayed as items in the scrolling list. If the list is empty, an empty List structure or a NULL value may be used for GTLV_Labels. This tag accepts a value of &amp;quot;~0&amp;quot; to detach the list from the listview, defined below. The default is NULL. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTLV_Top (UWORD)&lt;br /&gt;
: The ordinal number of the top item visible in the listview. The default is zero. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTLV_ReadOnly (BOOL)&lt;br /&gt;
: Set this to TRUE for a read-only listview, which the user can browse, but not select items from. A read-only listview can be recognized because the list area is recessed, not raised. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTLV_ScrollWidth (UWORD)&lt;br /&gt;
: The width of the scroller to be used in the listview. Any value specified must be reasonably bigger than zero. The default is 16. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTLV_ShowSelected (struct Gadget *)&lt;br /&gt;
: Use this tag to show the currently selected entry displayed underneath the listview. Set its value to NULL to get a read-only (TEXT_KIND) display of the currently selected entry or set it to a pointer to an already-created GadTools STRING_KIND gadget to allow the user to directly edit the current entry. By default, there is no display of the currently selected entry. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTLV_Selected (UWORD)&lt;br /&gt;
: Ordinal number of the item to be placed into the display of the current selection under the listview. This tag is ignored if GTLV_ShowSelected is not used. Set it to &amp;quot;~0&amp;quot; to have no current selection. The default is &amp;quot;~0&amp;quot;. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; LAYOUTA_Spacing (UWORD)&lt;br /&gt;
: Extra space, in pixels, to be placed between the entries in the listview. The default is zero. (Create only.)&lt;br /&gt;
&lt;br /&gt;
The program will only hear from a listview when the user selects an item from the list. The program will then receive an IDCMP_GADGETUP IntuiMessage. This message will contain the ordinal number of the item within the list that was selected in the Code field of the message. This number is independent of the displayed listview, it is the offset from the start of the list of items.&lt;br /&gt;
&lt;br /&gt;
If the program attaches a display gadget by using the TagItem {GTLV_ShowSelected, NULL}, then whenever the user clicks on an entry in the listview it will be copied into the display gadget.&lt;br /&gt;
&lt;br /&gt;
If the display gadget is to be editable, then the program must first create a GadTools STRING_KIND gadget whose width matches the width of the listview. The TagItem {GTLV_ShowSelected, stringgad} is used to install the editable gadget, where stringgad is the pointer returned by CreateGadget(). When the user selects any entry from the listview, it gets copied into the string gadget. The user can edit the string and the program will hear normal string gadget IDCMP_GADGETUP messages from the STRING_KIND gadget.&lt;br /&gt;
&lt;br /&gt;
The Exec List and its Node structures may not be modified while they are attached to the listview, since the list might be needed at any time. If the program has prepared an entire new list, including a new List structure and all new nodes, it may replace the currently displayed list in a single step by calling GT_SetGadgetAttrs() with the TagItem {GTLV_Labels, newlist}. If the program needs to operate on the list that has already been passed to the listview, it should detach the list by setting the GTLV_Labels attribute to &amp;quot;~0&amp;quot;. When done modifying the list, resubmit it by setting GTLV_Labels to once again point to it. This is better than first setting the labels to NULL and later back to the list, since setting GTLV_Labels to NULL will visually clear the listview. If the GTLV_Labels attribute is set to &amp;quot;~0&amp;quot;, the program is expected to set it back to something determinate, either a list or NULL, soon after.&lt;br /&gt;
&lt;br /&gt;
The height specified for the listview will determine the number of lines in the list area. When creating a listview, it will be no bigger than the size specified in the NewGadget structure. The size will include the current-display gadget, if any, that has been requested via the GTLV_ShowSelected tag. The listview may end up being less tall than the application asked for, since the calculated height assumes an integral number of lines in the list area.&lt;br /&gt;
&lt;br /&gt;
By default, the gadget label will be placed above the listview. This may be overridden using ng_Flags.&lt;br /&gt;
&lt;br /&gt;
==== Palette Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Palette gadgets (PALETTE_KIND) let the user pick a color from a set of several. A palette gadget consists of a number of colored squares, one for each color available. There may also be an optional indicator square which is filled with the currently selected color. To create a color editor, a palette gadget would be combined with some sliders to control red, green and blue components, for example.&lt;br /&gt;
&lt;br /&gt;
Palette gadgets use the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTPA_Depth (UWORD)&lt;br /&gt;
: The number of bitplanes that the palette represents. There will be 1 &amp;lt;&amp;lt; depth (2^depth) squares in the palette gadget. The default is one. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTPA_Color (UBYTE)&lt;br /&gt;
: The selected color of the palette. The default is one. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTPA_ColorOffset (UBYTE)&lt;br /&gt;
: The first color to use in the palette. For example, if GTPA_Depth is two and GTPA_ColorOffset is four, then the palette will have squares for colors four, five, six and seven. The default is zero. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTPA_IndicatorWidth (UWORD)&lt;br /&gt;
: The desired width of the current-color indicator. By specifying this tag, the application is asking for an indicator to be placed to the left of the color selection squares. The indicator will be as tall as the gadget itself. By default there is no indicator. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTPA_IndicatorHeight (UWORD)&lt;br /&gt;
: The desired height of the current-color indicator. By specifying this tag, the application is asking for an indicator to be placed above the color selection squares. The indicator will be as wide as the gadget itself. By default there is no indicator. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GA_Disabled (BOOL)&lt;br /&gt;
: Set this attribute to TRUE to disable the palette gadget, to FALSE otherwise. The default is FALSE. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
An IDCMP_GADGETUP IntuiMessage will be received when the user selects a color from the palette. The current-color indicator is recessed, indicating that clicking on it has no effect.&lt;br /&gt;
&lt;br /&gt;
If the palette is wide and not tall, use the GTPA_IndicatorWidth tag to put the indicator on the left. If the palette is tall and narrow, put the indicator on top using GTPA_IndicatorHeight.&lt;br /&gt;
&lt;br /&gt;
By default, the gadget&#039;s label will go above the palette gadget, unless GTPA_IndicatorWidth is specified, in which case the label will go on the left. In either case, the default may be overridden by setting the appropriate flag in the NewGadget&#039;s ng_Flags field.&lt;br /&gt;
&lt;br /&gt;
The size specified for the palette gadget will determine how the area is subdivided to make the individual color squares. The actual size of the palette gadget will be no bigger than the size given, but it can be smaller in order to make the color squares all exactly the same size.&lt;br /&gt;
&lt;br /&gt;
==== Text-Display and Numeric-Display Gadgets ====&lt;br /&gt;
&lt;br /&gt;
Text-display (TEXT_KIND) and numeric-display (NUMBER_KIND) gadgets are read-only displays of information. They are useful for displaying information that is not editable or selectable, while allowing the application to use the GadTools formatting and visuals. Conveniently, the visuals are automatically refreshed through normal GadTools gadget processing. The values displayed may be modified by the program in the same way other GadTools gadgets may be updated.&lt;br /&gt;
&lt;br /&gt;
Text-display and number-display gadgets consist of a fixed label (the one supplied as the NewGadget&#039;s ng_GadgetText), as well as a changeable string or number (GTTX_Text or GTNM_Number respectively). The fixed label is placed according to the PLACETEXT_ flag chosen in the NewGadget ng_Flags field. The variable part is aligned to the left-edge of the gadget.&lt;br /&gt;
&lt;br /&gt;
Text-display gadgets recognize the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTTX_Text (STRPTR)&lt;br /&gt;
: Pointer to the string to be displayed or NULL for no string. The default is NULL. (Create and set.)&lt;br /&gt;
&lt;br /&gt;
; GTTX_Border (BOOL)&lt;br /&gt;
: Set to TRUE to place a recessed border around the displayed string. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
; GTTX_CopyText (BOOL)&lt;br /&gt;
: This flag instructs the text-display gadget to copy the supplied GTTX_Text string instead of using only a pointer to the string. This only works for the value of GTTX_Text set at CreateGadget() time. If GTTX_Text is changed, the new text will be referenced by pointer, not copied. Do not use this tag without a non-NULL GTTX_Text. (Create only.)&lt;br /&gt;
&lt;br /&gt;
Number-display gadgets have the following tags:&lt;br /&gt;
&lt;br /&gt;
; GTNM_Number (LONG)&lt;br /&gt;
: The number to be displayed. The default is zero. (Create or set.)&lt;br /&gt;
&lt;br /&gt;
; GTNM_Border (BOOL)&lt;br /&gt;
: Set to TRUE to place a recessed border around the displayed number. The default is FALSE. (Create only.)&lt;br /&gt;
&lt;br /&gt;
Since they are not selectable, text-display and numeric-display gadgets never cause IntuiMessages to be sent to the application.&lt;br /&gt;
&lt;br /&gt;
==== Generic Gadgets ====&lt;br /&gt;
&lt;br /&gt;
If the application requires a specialized gadget which does not fit into any of the defined GadTools kinds but would still like to use the GadTools gadget creation and deletion functions, it may create a GadTools generic gadget and use it any way it sees fit. In fact, all of the kinds of GadTools gadgets are created out of GadTools GENERIC_KIND gadgets.&lt;br /&gt;
&lt;br /&gt;
The gadget that gets created will heed almost all the information contained in the NewGadget structure supplied.&lt;br /&gt;
&lt;br /&gt;
If ng_GadgetText is supplied, the gadget&#039;s GadgetText will point to an IntuiText structure with the provided string and font. However, do not specify any of the PLACETEXT ng_Flags, as they are currently ignored by GENERIC_KIND gadgets. PLACETEXT flags may be supported by generic GadTools gadgets in the future.&lt;br /&gt;
&lt;br /&gt;
It is up to the program to set the Flags, Activation, GadgetRender, SelectRender, MutualExclude and SpecialInfo fields of the Gadget structure.&lt;br /&gt;
&lt;br /&gt;
The application must also set the GadgetType field, but be certain to preserve the bits set by CreateGadget().&lt;br /&gt;
&lt;br /&gt;
For instance, to make a gadget boolean, use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gad-&amp;amp;gt;GadgetType |= GTYP_BOOLGADGET;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and not&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gad-&amp;amp;gt;GadgetType = GTYP_BOOLGADGET;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using direct assignment, (the = operator), clears all other flags in the GadgetType field and the gadget may not be properly freed by FreeGadgets().&lt;br /&gt;
&lt;br /&gt;
=== Functions for Setting up GadTools Menus and Gadgets ===&lt;br /&gt;
&lt;br /&gt;
This section gives all the details on the functions used to set up GadTools menus and gadgets that were mentioned briefly earlier in this chapter.&lt;br /&gt;
&lt;br /&gt;
==== GetVisualInfo() and FreeVisualInfo() ====&lt;br /&gt;
&lt;br /&gt;
In order to ensure their best appearance, GadTools gadgets and menus need information about the screen on which they will appear. Before creating any GadTools gadgets or menus, the program must get this information using the GetVisualInfo() call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
APTR GetVisualInfoA( struct Screen *screen, struct TagItem *taglist );&lt;br /&gt;
APTR GetVisualInfo( struct Screen *screen, Tag tag1, ... );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set the screen argument to a pointer to the screen you are using. The tag arguments, tag1 or taglist, are reserved for future extensions. Currently none are recognized, so only TAG_END should be used.&lt;br /&gt;
&lt;br /&gt;
The function returns an abstract handle called the VisualInfo. For GadTools gadgets, the ng_VisualInfo field of the NewGadget structure must be set to this handle before the gadget can be added to the window. GadTools menu layout and creation functions also require the VisualInfo handle as an argument.&lt;br /&gt;
&lt;br /&gt;
There are several ways to get the pointer to the screen on which the window will be opened. If the application has its own custom screen, this pointer is known from the call to OpenScreen() or OpenScreenTags(). If the application already has its window opened on the Workbench or some other public screen, the screen pointer can be found in Window.WScreen. Often the program will create its gadgets and menus before opening the window. In this case, use LockPubScreen() to get a pointer to the desired public screen, which also provides a lock on the screen to prevent it from closing. See [[Intuition_Screens|Intuition Screens]] and [[Intuition_Windows|Intuition Windows]] for more about public screens.&lt;br /&gt;
&lt;br /&gt;
The VisualInfo data must be freed after all the gadgets and menus have been freed but before releasing the screen. Custom screens are released by calling CloseScreen(), public screens are released by calling CloseWindow() or UnlockPubScreen(), depending on the technique used. Use FreeVisualInfo() to free the visual info data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
VOID FreeVisualInfo( APTR vi );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function takes just one argument, the VisualInfo handle as returned by GetVisualInfo(). The sequence of events for using the VisualInfo handle could look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
void init()&lt;br /&gt;
{&lt;br /&gt;
myscreen = IIntuition-&amp;gt;LockPubScreen(NULL);&lt;br /&gt;
if (!myscreen)&lt;br /&gt;
    {&lt;br /&gt;
    cleanup(&amp;quot;Failed to lock default public screen&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
vi = IGadTools-&amp;gt;GetVisualInfo(myscreen);&lt;br /&gt;
if (!vi)&lt;br /&gt;
    {&lt;br /&gt;
    cleanup(&amp;quot;Failed to GetVisualInfo&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
/* Create gadgets here */&lt;br /&gt;
ng.ng_VisualInfo = vi;&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void cleanup(STRPTR errorstr)&lt;br /&gt;
{&lt;br /&gt;
/* These functions may be safely called with a NULL parameter: */&lt;br /&gt;
IGadTools-&amp;gt;FreeGadgets(glist);&lt;br /&gt;
IGadTools-&amp;gt;FreeVisualInfo(vi);&lt;br /&gt;
&lt;br /&gt;
if (myscreen)&lt;br /&gt;
    IIntuition-&amp;gt;UnlockPubScreen(NULL, myscreen);&lt;br /&gt;
&lt;br /&gt;
IDOS-&amp;gt;Printf(errorstr);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CreateContext() ====&lt;br /&gt;
&lt;br /&gt;
Use of GadTools gadgets requires some per-window context information. CreateContext() establishes a place for that information to go. This function must be called before any GadTools gadgets are created.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
struct Gadget *CreateContext( struct Gadget **glistptr );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The glistptr argument is a double-pointer to a Gadget structure. More specifically, this is a pointer to a NULL-initialized pointer to a Gadget structure.&lt;br /&gt;
&lt;br /&gt;
The return value of CreateContext() is a pointer to this gadget, which should be fed to the program&#039;s first call to CreateGadget(). This pointer to the Gadget structure returned by CreateContext(), may then serve as a handle to the list of gadgets as they are created. The code fragment listed in the next section shows how to use CreateContext() together with CreateGadget() to make a linked list of GadTools gadgets.&lt;br /&gt;
&lt;br /&gt;
=== Creating Gadget Lists ===&lt;br /&gt;
&lt;br /&gt;
In the discussion of CreateGadget() presented earlier, the examples showed only how to make a single gadget. For most applications that use GadTools, however, a whole list of gadgets will be needed. To do this, the application could use code such as this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct NewGadget *newgad1, *newgad2, *newgad3;&lt;br /&gt;
struct Gadget *glist = NULL;&lt;br /&gt;
struct Gadget *pgad;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
/* Initialize NewGadget structures */&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/* Note that CreateContext() requires a POINTER to a NULL-initialized&lt;br /&gt;
 * pointer to struct Gadget:&lt;br /&gt;
 */&lt;br /&gt;
pgad = CreateContext(&amp;amp;amp;glist);&lt;br /&gt;
&lt;br /&gt;
pgad = CreateGadget(BUTTON_KIND, pgad, newgad1, TAG_END);&lt;br /&gt;
pgad = CreateGadget(STRING_KIND, pgad, newgad2, TAG_END);&lt;br /&gt;
pgad = CreateGadget(MX_KIND,     pgad, newgad3, TAG_END);&lt;br /&gt;
&lt;br /&gt;
if (!pgad)&lt;br /&gt;
    {&lt;br /&gt;
    FreeGadgets(glist);&lt;br /&gt;
    exit_error();&lt;br /&gt;
    }&lt;br /&gt;
else&lt;br /&gt;
    {&lt;br /&gt;
    if ( mywin=OpenWindowTags(NULL,&lt;br /&gt;
                              WA_Gadgets,   glist,&lt;br /&gt;
                              ...&lt;br /&gt;
                              /* Other tags... */&lt;br /&gt;
                              ...&lt;br /&gt;
                              TAG_END) )&lt;br /&gt;
        {&lt;br /&gt;
        /* Complete the rendering of the gadgets */&lt;br /&gt;
        GT_RefreshWindow(win, NULL);&lt;br /&gt;
        ...&lt;br /&gt;
        /* and continue on... */&lt;br /&gt;
        ...&lt;br /&gt;
        CloseWindow(mywin);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    FreeGadgets(glist);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pointer to the previous gadget, pgad in the code fragment above, is used for three purposes. First, when CreateGadget() is called multiple times, each new gadget is automatically linked to the previous gadget&#039;s NextGadget field, thus creating a gadget list. Second, if one of the gadget creations fails (usually due to low memory, but other causes are possible), then for the next call to CreateGadget(), pgad will be NULL and CreateGadget() will fail immediately. This means that the program can perform several successive calls to CreateGadget() and only have to check for failure at the end.&lt;br /&gt;
&lt;br /&gt;
Finally, although this information is hidden in the implementation and not important to the application, certain calls to CreateGadget() actually cause several Intuition gadgets to be allocated and these are automatically linked together without program interaction, but only if a previous gadget pointer is supplied. If several gadgets are created by a single CreateGadget() call, they work together to provide the functionality of a single GadTools gadget. The application should always act as though the gadget pointer returned by CreateGadget() points to a single gadget instance. See &amp;quot;Documented Side-Effects&amp;quot; for a warning.&lt;br /&gt;
&lt;br /&gt;
There is one exception to the fact that a program only has to check for failure after the last CreateGadget() call and that is when the application depends on the successful creation of a gadget and caches or immediately uses the gadget pointer returned by CreateGadget().&lt;br /&gt;
&lt;br /&gt;
For instance, if the program wants to create a string gadget and save a pointer to the string buffer, it might do so as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gad = CreateGadget(STRING_KIND, gad, &amp;amp;amp;ng,&lt;br /&gt;
                   GTST_String, &amp;amp;quot;Hello World&amp;amp;quot;,&lt;br /&gt;
                   TAG_END);&lt;br /&gt;
if (gad)&lt;br /&gt;
    {&lt;br /&gt;
    stringbuffer = ((struct StringInfo *)(gad-&amp;amp;gt;SpecialInfo))-&amp;amp;gt;Buffer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
/* Creation can continue here: */&lt;br /&gt;
gad = CreateGadget(..._KIND, gad, &amp;amp;amp;ng2,&lt;br /&gt;
    ...&lt;br /&gt;
    TAG_END);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A major benefit of having a reusable NewGadget structure is that often many fields do not change and some fields change incrementally. For example, the application can set just the NewGadget&#039;s ng_VisualInfo and ng_TextAttr only once and never have to modify them again even if the structure is reused to create many gadgets. A set of similar gadgets may share size and some positional information so that code such as the following might be used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/* Assume that the NewGadget structure &#039;ng&#039; is fully&lt;br /&gt;
 * initialized here for a button labelled &amp;quot;OK&amp;quot;&lt;br /&gt;
 */&lt;br /&gt;
gad = IGadTools-&amp;gt;CreateGadget(BUTTON_KIND, gad, &amp;amp;ng,&lt;br /&gt;
                   TAG_END);&lt;br /&gt;
&lt;br /&gt;
/* Modify only those fields that need to change: */&lt;br /&gt;
ng.ng_GadgetID++;&lt;br /&gt;
ng.ng_LeftEdge += 80;&lt;br /&gt;
ng.ng_GadgetText = &amp;quot;Cancel&amp;quot;;&lt;br /&gt;
gad = IGadTools-&amp;gt;CreateGadget(BUTTON_KIND, gad, &amp;amp;ng,&lt;br /&gt;
                   TAG_END);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Warning|text=All gadgets created by GadTools currently have the GADTOOL_TYPE bit set in their GadgetType field. It is not correct to check for, set, clear or otherwise rely on this since it is subject to change.}}&lt;br /&gt;
&lt;br /&gt;
=== Gadget Refresh Functions ===&lt;br /&gt;
&lt;br /&gt;
Normally, GadTools gadgets are created and then attached to a window when the window is opened, either through the WA_FirstGadget tag or the NewWindow.FirstGadget field. Alternately, they may be added to a window after it is open by using the functions AddGList() and RefreshGList().&lt;br /&gt;
&lt;br /&gt;
Regardless of which way gadgets are attached to a window, the program must then call the GT_RefreshWindow() function to complete the rendering of GadTools gadgets. This function takes two arguments.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
VOID GT_RefreshWindow( struct Window *win, struct Requester *req );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This win argument is a pointer to the window that contains the GadTools gadgets. The req argument is currently unused and should be set to NULL. This function should only be called immediately after adding GadTools gadgets to a window. Subsequent changes to GadTools gadget imagery made through calls to GT_SetGadgetAttrs() will be automatically performed by GadTools when the changes are made. (There is no need to call GT_RefreshWindow() in that case.)&lt;br /&gt;
&lt;br /&gt;
As mentioned earlier, applications must always ask for notification of window refresh events for any window that uses GadTools gadgets. When the application receives an IDCMP_REFRESHWINDOW message for a window, Intuition has already refreshed its gadgets. Normally, a program would then call Intuition&#039;s BeginRefresh(), perform its own custom rendering operations, and finally call EndRefresh(). But for a window that uses GadTools gadgets, the application must call GT_BeginRefresh() and GT_EndRefresh() in place of BeginRefresh() and EndRefresh(). This allows the the GadTools gadgets to be fully refreshed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
VOID GT_BeginRefresh( struct Window *win );&lt;br /&gt;
VOID GT_EndRefresh ( struct Window *win, LONG complete );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For both functions, the win argument is a pointer to the window to be refreshed. For GT_EndRefresh(), set the complete argument to TRUE if refreshing is complete, set it to FALSE otherwise. See the discussion of BeginRefresh() and EndRefresh() in [[Intuition_Windows|Intuition Windows]] for more about window refreshing.&lt;br /&gt;
&lt;br /&gt;
When using GadTools gadgets, the program may not set the window&#039;s WFLG_NOCAREREFRESH flag. Even if there is no custom rendering to be performed, GadTools gadgets requires this minimum code to handle IDCMP_REFRESHWINDOW messages:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
case IDCMP_REFRESHWINDOW:&lt;br /&gt;
    GT_BeginRefresh(win);&lt;br /&gt;
    /* custom rendering, if any, goes here */&lt;br /&gt;
    GT_EndRefresh(win, TRUE);&lt;br /&gt;
    break;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other GadTools Functions ===&lt;br /&gt;
&lt;br /&gt;
This section discusses some additional support functions in the GadTools library that serve special needs.&lt;br /&gt;
&lt;br /&gt;
==== GT_FilterIMsg() and GT_PostFilterIMsg() ====&lt;br /&gt;
&lt;br /&gt;
For most GadTools programs, GT_GetIMsg() and GT_ReplyIMsg() work perfectly well. In rare cases an application may find they pose a bit of a problem. A typical case is when all messages are supposed to go through a centralized ReplyMsg() that cannot be converted to a GT_ReplyIMsg(). Since calls to GT_GetIMsg() and GT_ReplyIMsg() must be paired, there would be a problem.&lt;br /&gt;
&lt;br /&gt;
For such cases, the GT_FilterIMsg() and GT_PostFilterIMsg() functions are available. These functions allow GetMsg() and ReplyMsg() to be used in a way that is compatible with GadTools.&lt;br /&gt;
&lt;br /&gt;
{{Note|title=Warning|text=These functions are for specialized use only and will not be used by the majority of applications. See GT_GetIMsg() and GT_ReplyIMsg() for standard message handling.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
struct IntuiMessage *GT_FilterIMsg( struct IntuiMessage *imsg );&lt;br /&gt;
struct IntuiMessage *GT_PostFilterIMsg( struct IntuiMessage *imsg );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The GT_FilterIMsg() function should be called right after GetMsg(). It takes a pointer to the original IntuiMessage and, if the message applies to a GadTools gadget, returns either a modified IntuiMessage or a NULL. A NULL return signifies that the message was consumed by a GadTools gadget (and not needed by the application).&lt;br /&gt;
&lt;br /&gt;
The GT_PostFilterIMsg() function should be called before replying to any message modified by GT_FilterIMsg(). It takes a pointer to the modified version of an IntuiMessage obtained with GT_FilterIMsg() and returns a pointer to the original IntuiMessage.&lt;br /&gt;
&lt;br /&gt;
The typical calling sequence for a program that uses these functions, is to call GetMsg() to get the IntuiMessage. Then, if the message applies to a window which contains GadTools gadgets, call GT_FilterIMsg(). Any message returned by GT_FilterIMsg() should be used like a message returned from GT_GetIMsg().&lt;br /&gt;
&lt;br /&gt;
When done with the message, the application must call GT_PostFilterIMsg() to perform any clean up necessitated by the previous call to GT_FilterIMsg(). In all cases, the application &#039;&#039;must&#039;&#039; then reply the original IntuiMessage using ReplyMsg(). This is true even for consumed messages as these are &#039;&#039;not&#039;&#039; replied by GadTools. For example, the application could use code such as this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/* port is a message port receiving different messages */&lt;br /&gt;
/* gtwindow is the window that contains GadTools gadgets */&lt;br /&gt;
&lt;br /&gt;
imsg = IExec-&amp;gt;GetMsg(port);&lt;br /&gt;
&lt;br /&gt;
/* Is this the window with GadTools gadgets? */&lt;br /&gt;
if (imsg-&amp;gt;IDCMPWindow == gtwindow)&lt;br /&gt;
    {&lt;br /&gt;
    /* Filter the message and see if action is needed */&lt;br /&gt;
    if (gtimsg = IGadTools-&amp;gt;GT_FilterIMsg(imsg))&lt;br /&gt;
        {&lt;br /&gt;
        switch (gtimsg-&amp;gt;Class)&lt;br /&gt;
            {&lt;br /&gt;
            /* Act depending on the message */&lt;br /&gt;
            ...&lt;br /&gt;
            }&lt;br /&gt;
        /* Clean up the filtered message.  The return value is not needed */&lt;br /&gt;
        /* since we already have a pointer to the original message.       */&lt;br /&gt;
        IGadTools-&amp;gt;GT_PostFilterIMsg(gtimsg);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
/* other stuff can go here */&lt;br /&gt;
IExec-&amp;gt;ReplyMsg(imsg);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should not make any assumptions about the contents of the unfiltered IntuiMessage (imsg in the above example). Only two things are guaranteed: the unfiltered IntuiMessage must be replied to and the unfiltered IntuiMessage (if it produces anything when passed through GT_FilterIMsg()) will produce a meaningful GadTools IntuiMessage like those described in the section on the different kinds of gadgets. The relationship between the unfiltered and filtered messages are expected to change in the future. See the section on documented side-effects for more information.&lt;br /&gt;
&lt;br /&gt;
==== DrawBevelBox() ====&lt;br /&gt;
&lt;br /&gt;
A key visual signature shared by most GadTools gadgets is the raised or recessed beveled box imagery. Since the program may wish to create its own boxes to match, GadTools provides the DrawBevelBox() and DrawBevelBoxA() functions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
VOID DrawBevelBoxA( struct RastPort *rport, LONG left, LONG top, LONG width, LONG height,&lt;br /&gt;
                    struct TagItem *taglist );&lt;br /&gt;
VOID DrawBevelBox ( struct RastPort *rport, LONG left, LONG top, LONG width, LONG height,&lt;br /&gt;
                    Tag tag1, ... );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The rport argument is a pointer to the RastPort into which the box is to be rendered. The left, top, width and height arguments specify the dimensions of the desired box.&lt;br /&gt;
&lt;br /&gt;
The tag arguments, tag1 or taglist, may be set as follows:&lt;br /&gt;
&lt;br /&gt;
; GT_VisualInfo (APTR)&lt;br /&gt;
: The VisualInfo handle as returned by a prior call to GetVisualInfo(). This value is required.&lt;br /&gt;
&lt;br /&gt;
; GTBB_Recessed (BOOL)&lt;br /&gt;
: A beveled box may either appear to be raised to signify an area of the window that is selectable or recessed to signify an area of the window in which clicking will have no effect. Set this boolean tag to TRUE to get a recessed box. Omit this tag entirely to get a raised box.&lt;br /&gt;
&lt;br /&gt;
DrawBevelBox() is a rendering operation, not a gadget. This means that the program must refresh any beveled boxes rendered through this function if the window gets damaged.&lt;br /&gt;
&lt;br /&gt;
=== Gadget Keyboard Equivalents ===&lt;br /&gt;
&lt;br /&gt;
Often, users find it convenient to control gadgets using the keyboard. The keyboard equivalent will be an underscored character in the gadget label, for easy identification. At the present time, however, the application is still responsible for implementing the reaction to each keypress.&lt;br /&gt;
&lt;br /&gt;
==== Denoting a Gadget&#039;s Keyboard Equivalent ====&lt;br /&gt;
&lt;br /&gt;
In order to denote the key equivalent, the application may add a marker-symbol to the gadget label. This is done by placing the marker-symbol immediately before the character to be underscored. This symbol can be any character that is not used in the label. The underscore character, &amp;quot;_&amp;quot; is the recommended marker-symbol. So, for example, to mark the letter &amp;quot;F&amp;quot; as the keyboard equivalent for a button labelled &amp;quot;Select Font ...&amp;quot;, create the gadget text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ng.ng_GadgetText = &amp;amp;quot;Select _Font ...&amp;amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To inform GadTools of the underscore in the label, pass the GA_Underscore tag to CreateGadget() or CreateGadgetA(). The data-value associated with this tag is a character, not a string, which is the marker-symbol used in the gadget label:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GA_Underscore, &#039;_&#039;, /* Note &#039;_&#039;, not &amp;amp;quot;_&amp;amp;quot; !!! */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GadTools will create a gadget label which consists of the text supplied with the marker-symbol removed and the character following the marker-symbol underscored.&lt;br /&gt;
&lt;br /&gt;
The gadget&#039;s label would look something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Select Font ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Implementing a Gadget&#039;s Keyboard Equivalent Behavior ====&lt;br /&gt;
&lt;br /&gt;
Currently, GadTools does not process keyboard equivalents for gadgets. It is up to the application writer to implement the correct behavior, normally by calling GT_SetGadgetAttrs() on the appropriate gadget. For some kinds of gadget, the behavior should be the same regardless of whether the keyboard equivalent was pressed with or without the shift key. For other gadgets, shifted and unshifted keystrokes will have different, usually opposite, effects.&lt;br /&gt;
&lt;br /&gt;
Here is the correct behavior for keyboard equivalents for each kind of GadTools gadget:&lt;br /&gt;
&lt;br /&gt;
; Button Gadgets&lt;br /&gt;
: The keyboard equivalent should invoke the same function that clicking on the gadget does. There is currently no way to highlight the button visuals programmatically when accessing the button through a keyboard equivalent.&lt;br /&gt;
&lt;br /&gt;
; Text-Entry and Number-Entry Gadgets&lt;br /&gt;
: The keyboard equivalent should activate the gadget so the user may type into it. Use Intuition&#039;s ActivateGadget() call.&lt;br /&gt;
&lt;br /&gt;
; Checkbox Gadgets&lt;br /&gt;
: The keyboard equivalent should toggle the state of the checkbox. Use GT_SetGadgetAttrs() and the GTCB_Checked tag.&lt;br /&gt;
&lt;br /&gt;
; Mutually-Exclusive Gadgets&lt;br /&gt;
: The unshifted keystroke should activate the next choice, wrapping around from the last to the first. The shifted keystroke should activate the previous choice, wrapping around from the first to the last. Use GT_SetGadgetAttrs() and the GTMX_Active tag.&lt;br /&gt;
&lt;br /&gt;
; Cycle Gadgets&lt;br /&gt;
: The unshifted keystroke should activate the next choice, wrapping around from the last to the first. The shifted keystroke should activate the previous choice, wrapping around from the first to the last. Use GT_SetGadgetAttrs() and the GTCY_Active tag.&lt;br /&gt;
&lt;br /&gt;
; Slider Gadgets&lt;br /&gt;
: The unshifted keystroke should increase the slider&#039;s level by one, stopping at the maximum, while the shifted keystroke should decrease the level by one, stopping at the minimum. Use GT_SetGadgetAttrs() and the GTSL_Level tag.&lt;br /&gt;
&lt;br /&gt;
; Scroller Gadgets&lt;br /&gt;
: The unshifted keystroke should increase the scroller&#039;s top by one, stopping at the maximum, while the shifted keystroke should decrease the scroller&#039;s top by one, stopping at the minimum. Use GT_SetGadgetAttrs() and the GTSC_Top tag.&lt;br /&gt;
&lt;br /&gt;
; Listview Gadgets&lt;br /&gt;
: The unshifted keystroke should cause the next entry in the list to become the selected one, stopping at the last entry, while the shifted keystroke should cause the previous entry in the list to become the selected one, stopping at the first entry. Use GT_SetGadgetAttrs() and the GTLV_Top and GTLV_Selected tags.&lt;br /&gt;
&lt;br /&gt;
; Palette Gadgets&lt;br /&gt;
: The unshifted keystroke should select the next color, wrapping around from the last to the first. The shifted keystroke should activate the previous color, wrapping around from the first to the last. Use GT_SetGadgetAttrs() and the GTPA_Color tag.&lt;br /&gt;
&lt;br /&gt;
; Text-Display and Number-Display Gadgets&lt;br /&gt;
: These kinds of GadTools gadget have no keyboard equivalents since they are not selectable.&lt;br /&gt;
&lt;br /&gt;
; Generic Gadgets&lt;br /&gt;
: Define appropriate keyboard functions based on the kinds of keyboard behavior defined for other GadTools kinds.&lt;br /&gt;
&lt;br /&gt;
=== Complete GadTools Gadget Example ===&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a working example showing how to set up and use a linked list of GadTools gadgets complete with keyboard shortcuts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* gadtoolsgadgets.c&lt;br /&gt;
** Simple example of using a number of gadtools gadgets.&lt;br /&gt;
**&lt;br /&gt;
** Compiled with SAS C v5.10a&lt;br /&gt;
** lc -b1 -cfistq -v -y gadtoolsgadgets&lt;br /&gt;
** blink FROM LIB:c.o gadtoolsgadgets.o TO gadtoolsgadgets LIB LIB:lc.lib LIB:amiga.lib&lt;br /&gt;
*/&lt;br /&gt;
#define INTUI_V36_NAMES_ONLY&lt;br /&gt;
&lt;br /&gt;
#include &amp;amp;lt;exec/types.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;intuition/intuition.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;intuition/gadgetclass.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;libraries/gadtools.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;amp;lt;clib/exec_protos.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;clib/graphics_protos.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;clib/intuition_protos.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;clib/gadtools_protos.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef LATTICE&lt;br /&gt;
int CXBRK(void)    { return(0); }  /* Disable Lattice CTRL/C handling */&lt;br /&gt;
int chkabort(void) { return(0); }  /* really */&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
/* Gadget defines of our choosing, to be used as GadgetID&#039;s,&lt;br /&gt;
** also used as the index into the gadget array my_gads[].&lt;br /&gt;
*/&lt;br /&gt;
#define MYGAD_SLIDER    (0)&lt;br /&gt;
#define MYGAD_STRING1   (1)&lt;br /&gt;
#define MYGAD_STRING2   (2)&lt;br /&gt;
#define MYGAD_STRING3   (3)&lt;br /&gt;
#define MYGAD_BUTTON    (4)&lt;br /&gt;
&lt;br /&gt;
/* Range for the slider: */&lt;br /&gt;
#define SLIDER_MIN  (1)&lt;br /&gt;
#define SLIDER_MAX (20)&lt;br /&gt;
&lt;br /&gt;
struct TextAttr Topaz80 = { &amp;amp;quot;topaz.font&amp;amp;quot;, 8, 0, 0, };&lt;br /&gt;
&lt;br /&gt;
struct Library      *IntuitionBase;&lt;br /&gt;
struct Library      *GfxBase;&lt;br /&gt;
struct Library      *GadToolsBase;&lt;br /&gt;
&lt;br /&gt;
/* Print any error message.  We could do more fancy handling (like&lt;br /&gt;
** an EasyRequest()), but this is only a demo.&lt;br /&gt;
*/&lt;br /&gt;
void errorMessage(STRPTR error)&lt;br /&gt;
{&lt;br /&gt;
if (error)&lt;br /&gt;
    printf(&amp;amp;quot;Error: %s\n&amp;amp;quot;, error);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Function to handle a GADGETUP or GADGETDOWN event.  For GadTools gadgets,&lt;br /&gt;
** it is possible to use this function to handle MOUSEMOVEs as well, with&lt;br /&gt;
** little or no work.&lt;br /&gt;
*/&lt;br /&gt;
VOID handleGadgetEvent(struct Window *win, struct Gadget *gad, UWORD code,&lt;br /&gt;
    WORD *slider_level, struct Gadget *my_gads[])&lt;br /&gt;
{&lt;br /&gt;
switch (gad-&amp;amp;gt;GadgetID)&lt;br /&gt;
    {&lt;br /&gt;
    case MYGAD_SLIDER:&lt;br /&gt;
        /* Sliders report their level in the IntuiMessage Code field: */&lt;br /&gt;
        printf(&amp;amp;quot;Slider at level %ld\n&amp;amp;quot;, code);&lt;br /&gt;
        *slider_level = code;&lt;br /&gt;
        break;&lt;br /&gt;
    case MYGAD_STRING1:&lt;br /&gt;
        /* String gadgets report GADGETUP&#039;s */&lt;br /&gt;
        printf(&amp;amp;quot;String gadget 1: &#039;%s&#039;.\n&amp;amp;quot;,&lt;br /&gt;
                ((struct StringInfo *)gad-&amp;amp;gt;SpecialInfo)-&amp;amp;gt;Buffer);&lt;br /&gt;
        break;&lt;br /&gt;
    case MYGAD_STRING2:&lt;br /&gt;
        /* String gadgets report GADGETUP&#039;s */&lt;br /&gt;
        printf(&amp;amp;quot;String gadget 2: &#039;%s&#039;.\n&amp;amp;quot;,&lt;br /&gt;
                ((struct StringInfo *)gad-&amp;amp;gt;SpecialInfo)-&amp;amp;gt;Buffer);&lt;br /&gt;
        break;&lt;br /&gt;
    case MYGAD_STRING3:&lt;br /&gt;
        /* String gadgets report GADGETUP&#039;s */&lt;br /&gt;
        printf(&amp;amp;quot;String gadget 3: &#039;%s&#039;.\n&amp;amp;quot;,&lt;br /&gt;
                ((struct StringInfo *)gad-&amp;amp;gt;SpecialInfo)-&amp;amp;gt;Buffer);&lt;br /&gt;
        break;&lt;br /&gt;
    case MYGAD_BUTTON:&lt;br /&gt;
        /* Buttons report GADGETUP&#039;s (button resets slider to 10) */&lt;br /&gt;
        printf(&amp;amp;quot;Button was pressed, slider reset to 10.\n&amp;amp;quot;);&lt;br /&gt;
        *slider_level = 10;&lt;br /&gt;
        GT_SetGadgetAttrs(my_gads[MYGAD_SLIDER], win, NULL,&lt;br /&gt;
                            GTSL_Level, *slider_level,&lt;br /&gt;
                            TAG_END);&lt;br /&gt;
        break;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Function to handle vanilla keys.&lt;br /&gt;
*/&lt;br /&gt;
VOID handleVanillaKey(struct Window *win, UWORD code,&lt;br /&gt;
    WORD *slider_level, struct Gadget *my_gads[])&lt;br /&gt;
{&lt;br /&gt;
switch (code)&lt;br /&gt;
    {&lt;br /&gt;
    case &#039;v&#039;:&lt;br /&gt;
        /* increase slider level, but not past maximum */&lt;br /&gt;
        if (++*slider_level &amp;amp;gt; SLIDER_MAX)&lt;br /&gt;
            *slider_level = SLIDER_MAX;&lt;br /&gt;
        GT_SetGadgetAttrs(my_gads[MYGAD_SLIDER], win, NULL,&lt;br /&gt;
                            GTSL_Level, *slider_level,&lt;br /&gt;
                            TAG_END);&lt;br /&gt;
        break;&lt;br /&gt;
    case &#039;V&#039;:&lt;br /&gt;
        /* decrease slider level, but not past minimum */&lt;br /&gt;
        if (--*slider_level &amp;amp;lt; SLIDER_MIN)&lt;br /&gt;
            *slider_level = SLIDER_MIN;&lt;br /&gt;
        GT_SetGadgetAttrs(my_gads[MYGAD_SLIDER], win, NULL,&lt;br /&gt;
                            GTSL_Level, *slider_level,&lt;br /&gt;
                            TAG_END);&lt;br /&gt;
        break;&lt;br /&gt;
    case &#039;c&#039;:&lt;br /&gt;
    case &#039;C&#039;:&lt;br /&gt;
        /* button resets slider to 10 */&lt;br /&gt;
        *slider_level = 10;&lt;br /&gt;
        GT_SetGadgetAttrs(my_gads[MYGAD_SLIDER], win, NULL,&lt;br /&gt;
                            GTSL_Level, *slider_level,&lt;br /&gt;
                            TAG_END);&lt;br /&gt;
        break;&lt;br /&gt;
    case &#039;f&#039;:&lt;br /&gt;
    case &#039;F&#039;:&lt;br /&gt;
        ActivateGadget(my_gads[MYGAD_STRING1], win, NULL);&lt;br /&gt;
        break;&lt;br /&gt;
    case &#039;s&#039;:&lt;br /&gt;
    case &#039;S&#039;:&lt;br /&gt;
        ActivateGadget(my_gads[MYGAD_STRING2], win, NULL);&lt;br /&gt;
        break;&lt;br /&gt;
    case &#039;t&#039;:&lt;br /&gt;
    case &#039;T&#039;:&lt;br /&gt;
        ActivateGadget(my_gads[MYGAD_STRING3], win, NULL);&lt;br /&gt;
        break;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Here is where all the initialization and creation of GadTools gadgets&lt;br /&gt;
** take place.  This function requires a pointer to a NULL-initialized&lt;br /&gt;
** gadget list pointer.  It returns a pointer to the last created gadget,&lt;br /&gt;
** which can be checked for success/failure.&lt;br /&gt;
*/&lt;br /&gt;
struct Gadget *createAllGadgets(struct Gadget **glistptr, void *vi,&lt;br /&gt;
    UWORD topborder, WORD slider_level, struct Gadget *my_gads[])&lt;br /&gt;
{&lt;br /&gt;
struct NewGadget ng;&lt;br /&gt;
struct Gadget *gad;&lt;br /&gt;
&lt;br /&gt;
/* All the gadget creation calls accept a pointer to the previous gadget, and&lt;br /&gt;
** link the new gadget to that gadget&#039;s NextGadget field.  Also, they exit&lt;br /&gt;
** gracefully, returning NULL, if any previous gadget was NULL.  This limits&lt;br /&gt;
** the amount of checking for failure that is needed.  You only need to check&lt;br /&gt;
** before you tweak any gadget structure or use any of its fields, and finally&lt;br /&gt;
** once at the end, before you add the gadgets.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
/* The following operation is required of any program that uses GadTools.&lt;br /&gt;
** It gives the toolkit a place to stuff context data.&lt;br /&gt;
*/&lt;br /&gt;
gad = CreateContext(glistptr);&lt;br /&gt;
&lt;br /&gt;
/* Since the NewGadget structure is unmodified by any of the CreateGadget()&lt;br /&gt;
** calls, we need only change those fields which are different.&lt;br /&gt;
*/&lt;br /&gt;
ng.ng_LeftEdge   = 140;&lt;br /&gt;
ng.ng_TopEdge    = 20+topborder;&lt;br /&gt;
ng.ng_Width      = 200;&lt;br /&gt;
ng.ng_Height     = 12;&lt;br /&gt;
ng.ng_GadgetText = &amp;amp;quot;_Volume:   &amp;amp;quot;;&lt;br /&gt;
ng.ng_TextAttr   = &amp;amp;amp;Topaz80;&lt;br /&gt;
ng.ng_VisualInfo = vi;&lt;br /&gt;
ng.ng_GadgetID   = MYGAD_SLIDER;&lt;br /&gt;
ng.ng_Flags      = NG_HIGHLABEL;&lt;br /&gt;
&lt;br /&gt;
my_gads[MYGAD_SLIDER] = gad = CreateGadget(SLIDER_KIND, gad, &amp;amp;amp;ng,&lt;br /&gt;
                    GTSL_Min,         SLIDER_MIN,&lt;br /&gt;
                    GTSL_Max,         SLIDER_MAX,&lt;br /&gt;
                    GTSL_Level,       slider_level,&lt;br /&gt;
                    GTSL_LevelFormat, &amp;amp;quot;%2ld&amp;amp;quot;,&lt;br /&gt;
                    GTSL_MaxLevelLen, 2,&lt;br /&gt;
                    GT_Underscore,    &#039;_&#039;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
&lt;br /&gt;
ng.ng_TopEdge   += 20;&lt;br /&gt;
ng.ng_Height     = 14;&lt;br /&gt;
ng.ng_GadgetText = &amp;amp;quot;_First:&amp;amp;quot;;&lt;br /&gt;
ng.ng_GadgetID   = MYGAD_STRING1;&lt;br /&gt;
my_gads[MYGAD_STRING1] = gad = CreateGadget(STRING_KIND, gad, &amp;amp;amp;ng,&lt;br /&gt;
                    GTST_String,   &amp;amp;quot;Try pressing&amp;amp;quot;,&lt;br /&gt;
                    GTST_MaxChars, 50,&lt;br /&gt;
                    GT_Underscore, &#039;_&#039;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
&lt;br /&gt;
ng.ng_TopEdge   += 20;&lt;br /&gt;
ng.ng_GadgetText = &amp;amp;quot;_Second:&amp;amp;quot;;&lt;br /&gt;
ng.ng_GadgetID   = MYGAD_STRING2;&lt;br /&gt;
my_gads[MYGAD_STRING2] = gad = CreateGadget(STRING_KIND, gad, &amp;amp;amp;ng,&lt;br /&gt;
                    GTST_String,   &amp;amp;quot;TAB or Shift-TAB&amp;amp;quot;,&lt;br /&gt;
                    GTST_MaxChars, 50,&lt;br /&gt;
                    GT_Underscore, &#039;_&#039;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
&lt;br /&gt;
ng.ng_TopEdge   += 20;&lt;br /&gt;
ng.ng_GadgetText = &amp;amp;quot;_Third:&amp;amp;quot;;&lt;br /&gt;
ng.ng_GadgetID   = MYGAD_STRING3;&lt;br /&gt;
my_gads[MYGAD_STRING3] = gad = CreateGadget(STRING_KIND, gad, &amp;amp;amp;ng,&lt;br /&gt;
                    GTST_String,   &amp;amp;quot;To see what happens!&amp;amp;quot;,&lt;br /&gt;
                    GTST_MaxChars, 50,&lt;br /&gt;
                    GT_Underscore, &#039;_&#039;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
&lt;br /&gt;
ng.ng_LeftEdge  += 50;&lt;br /&gt;
ng.ng_TopEdge   += 20;&lt;br /&gt;
ng.ng_Width      = 100;&lt;br /&gt;
ng.ng_Height     = 12;&lt;br /&gt;
ng.ng_GadgetText = &amp;amp;quot;_Click Here&amp;amp;quot;;&lt;br /&gt;
ng.ng_GadgetID   = MYGAD_BUTTON;&lt;br /&gt;
ng.ng_Flags      = 0;&lt;br /&gt;
gad = CreateGadget(BUTTON_KIND, gad, &amp;amp;amp;ng,&lt;br /&gt;
                    GT_Underscore, &#039;_&#039;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
return(gad);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Standard message handling loop with GadTools message handling functions&lt;br /&gt;
** used (GT_GetIMsg() and GT_ReplyIMsg()).&lt;br /&gt;
*/&lt;br /&gt;
VOID process_window_events(struct Window *mywin,&lt;br /&gt;
    WORD *slider_level, struct Gadget *my_gads[])&lt;br /&gt;
{&lt;br /&gt;
struct IntuiMessage *imsg;&lt;br /&gt;
ULONG imsgClass;&lt;br /&gt;
UWORD imsgCode;&lt;br /&gt;
struct Gadget *gad;&lt;br /&gt;
BOOL terminated = FALSE;&lt;br /&gt;
&lt;br /&gt;
while (!terminated)&lt;br /&gt;
    {&lt;br /&gt;
    Wait (1 &amp;amp;lt;&amp;amp;lt; mywin-&amp;amp;gt;UserPort-&amp;amp;gt;mp_SigBit);&lt;br /&gt;
&lt;br /&gt;
    /* GT_GetIMsg() returns an IntuiMessage with more friendly information for&lt;br /&gt;
    ** complex gadget classes.  Use it wherever you get IntuiMessages where&lt;br /&gt;
    ** using GadTools gadgets.&lt;br /&gt;
    */&lt;br /&gt;
    while ((!terminated) &amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
           (imsg = GT_GetIMsg(mywin-&amp;amp;gt;UserPort)))&lt;br /&gt;
        {&lt;br /&gt;
        /* Presuming a gadget, of course, but no harm...&lt;br /&gt;
        ** Only dereference this value (gad) where the Class specifies&lt;br /&gt;
        ** that it is a gadget event.&lt;br /&gt;
        */&lt;br /&gt;
        gad = (struct Gadget *)imsg-&amp;amp;gt;IAddress;&lt;br /&gt;
&lt;br /&gt;
        imsgClass = imsg-&amp;amp;gt;Class;&lt;br /&gt;
        imsgCode = imsg-&amp;amp;gt;Code;&lt;br /&gt;
&lt;br /&gt;
        /* Use the toolkit message-replying function here... */&lt;br /&gt;
        GT_ReplyIMsg(imsg);&lt;br /&gt;
&lt;br /&gt;
        switch (imsgClass)&lt;br /&gt;
            {&lt;br /&gt;
            /*  --- WARNING --- WARNING --- WARNING --- WARNING --- WARNING ---&lt;br /&gt;
            ** GadTools puts the gadget address into IAddress of IDCMP_MOUSEMOVE&lt;br /&gt;
            ** messages.  This is NOT true for standard Intuition messages,&lt;br /&gt;
            ** but is an added feature of GadTools.&lt;br /&gt;
            */&lt;br /&gt;
            case IDCMP_GADGETDOWN:&lt;br /&gt;
            case IDCMP_MOUSEMOVE:&lt;br /&gt;
            case IDCMP_GADGETUP:&lt;br /&gt;
                handleGadgetEvent(mywin, gad, imsgCode, slider_level, my_gads);&lt;br /&gt;
                break;&lt;br /&gt;
            case IDCMP_VANILLAKEY:&lt;br /&gt;
                handleVanillaKey(mywin, imsgCode, slider_level, my_gads);&lt;br /&gt;
                break;&lt;br /&gt;
            case IDCMP_CLOSEWINDOW:&lt;br /&gt;
                terminated = TRUE;&lt;br /&gt;
                break;&lt;br /&gt;
            case IDCMP_REFRESHWINDOW:&lt;br /&gt;
                /* With GadTools, the application must use GT_BeginRefresh()&lt;br /&gt;
                ** where it would normally have used BeginRefresh()&lt;br /&gt;
                */&lt;br /&gt;
                GT_BeginRefresh(mywin);&lt;br /&gt;
                GT_EndRefresh(mywin, TRUE);&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Prepare for using GadTools, set up gadgets and open window.&lt;br /&gt;
** Clean up and when done or on error.&lt;br /&gt;
*/&lt;br /&gt;
VOID gadtoolsWindow(VOID)&lt;br /&gt;
{&lt;br /&gt;
struct TextFont *font;&lt;br /&gt;
struct Screen   *mysc;&lt;br /&gt;
struct Window   *mywin;&lt;br /&gt;
struct Gadget   *glist, *my_gads[4];&lt;br /&gt;
void            *vi;&lt;br /&gt;
WORD            slider_level = 5;&lt;br /&gt;
UWORD           topborder;&lt;br /&gt;
&lt;br /&gt;
/* Open topaz 8 font, so we can be sure it&#039;s openable&lt;br /&gt;
** when we later set ng_TextAttr to &amp;amp;amp;Topaz80:&lt;br /&gt;
*/&lt;br /&gt;
if (NULL == (font = OpenFont(&amp;amp;amp;Topaz80)))&lt;br /&gt;
    errorMessage( &amp;amp;quot;Failed to open Topaz 80&amp;amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
    {&lt;br /&gt;
    if (NULL == (mysc = LockPubScreen(NULL)))&lt;br /&gt;
        errorMessage( &amp;amp;quot;Couldn&#039;t lock default public screen&amp;amp;quot;);&lt;br /&gt;
    else&lt;br /&gt;
        {&lt;br /&gt;
        if (NULL == (vi = GetVisualInfo(mysc, TAG_END)))&lt;br /&gt;
            errorMessage( &amp;amp;quot;GetVisualInfo() failed&amp;amp;quot;);&lt;br /&gt;
        else&lt;br /&gt;
            {&lt;br /&gt;
            /* Here is how we can figure out ahead of time how tall the  */&lt;br /&gt;
            /* window&#039;s title bar will be:                               */&lt;br /&gt;
            topborder = mysc-&amp;amp;gt;WBorTop + (mysc-&amp;amp;gt;Font-&amp;amp;gt;ta_YSize + 1);&lt;br /&gt;
&lt;br /&gt;
            if (NULL == createAllGadgets(&amp;amp;amp;glist, vi, topborder,&lt;br /&gt;
                                         slider_level, my_gads))&lt;br /&gt;
                errorMessage( &amp;amp;quot;createAllGadgets() failed&amp;amp;quot;);&lt;br /&gt;
            else&lt;br /&gt;
                {&lt;br /&gt;
                if (NULL == (mywin = OpenWindowTags(NULL,&lt;br /&gt;
                        WA_Title,     &amp;amp;quot;GadTools Gadget Demo&amp;amp;quot;,&lt;br /&gt;
                        WA_Gadgets,   glist,      WA_AutoAdjust,    TRUE,&lt;br /&gt;
                        WA_Width,       400,      WA_MinWidth,        50,&lt;br /&gt;
                        WA_InnerHeight, 140,      WA_MinHeight,       50,&lt;br /&gt;
                        WA_DragBar,    TRUE,      WA_DepthGadget,   TRUE,&lt;br /&gt;
                        WA_Activate,   TRUE,      WA_CloseGadget,   TRUE,&lt;br /&gt;
                        WA_SizeGadget, TRUE,      WA_SimpleRefresh, TRUE,&lt;br /&gt;
                        WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW |&lt;br /&gt;
                            IDCMP_VANILLAKEY | SLIDERIDCMP | STRINGIDCMP |&lt;br /&gt;
                            BUTTONIDCMP,&lt;br /&gt;
                        WA_PubScreen, mysc,&lt;br /&gt;
                        TAG_END)))&lt;br /&gt;
                    errorMessage( &amp;amp;quot;OpenWindow() failed&amp;amp;quot;);&lt;br /&gt;
                else&lt;br /&gt;
                    {&lt;br /&gt;
                    /* After window is open, gadgets must be refreshed with a&lt;br /&gt;
                    ** call to the GadTools refresh window function.&lt;br /&gt;
                    */&lt;br /&gt;
                    GT_RefreshWindow(mywin, NULL);&lt;br /&gt;
&lt;br /&gt;
                    process_window_events(mywin, &amp;amp;amp;slider_level, my_gads);&lt;br /&gt;
&lt;br /&gt;
                    CloseWindow(mywin);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            /* FreeGadgets() even if createAllGadgets() fails, as some&lt;br /&gt;
            ** of the gadgets may have been created...If glist is NULL&lt;br /&gt;
            ** then FreeGadgets() will do nothing.&lt;br /&gt;
            */&lt;br /&gt;
            FreeGadgets(glist);&lt;br /&gt;
            FreeVisualInfo(vi);&lt;br /&gt;
            }&lt;br /&gt;
        UnlockPubScreen(NULL, mysc);&lt;br /&gt;
        }&lt;br /&gt;
    CloseFont(font);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
** Open all libraries and run.  Clean up when finished or on error..&lt;br /&gt;
*/&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
if (NULL == (IntuitionBase = OpenLibrary(&amp;amp;quot;intuition.library&amp;amp;quot;, 37)))&lt;br /&gt;
    errorMessage( &amp;amp;quot;Requires V37 intuition.library&amp;amp;quot;);&lt;br /&gt;
else&lt;br /&gt;
    {&lt;br /&gt;
    if (NULL == (GfxBase = OpenLibrary(&amp;amp;quot;graphics.library&amp;amp;quot;, 37)))&lt;br /&gt;
        errorMessage( &amp;amp;quot;Requires V37 graphics.library&amp;amp;quot;);&lt;br /&gt;
    else&lt;br /&gt;
        {&lt;br /&gt;
        if (NULL == (GadToolsBase = OpenLibrary(&amp;amp;quot;gadtools.library&amp;amp;quot;, 37)))&lt;br /&gt;
            errorMessage( &amp;amp;quot;Requires V37 gadtools.library&amp;amp;quot;);&lt;br /&gt;
        else&lt;br /&gt;
            {&lt;br /&gt;
            gadtoolsWindow();&lt;br /&gt;
&lt;br /&gt;
            CloseLibrary(GadToolsBase);&lt;br /&gt;
            }&lt;br /&gt;
        CloseLibrary(GfxBase);&lt;br /&gt;
        }&lt;br /&gt;
    CloseLibrary(IntuitionBase);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Restrictions on GadTools Gadgets ===&lt;br /&gt;
&lt;br /&gt;
There is a strict set of functions and operations that are permitted on GadTools gadgets. Even if a technique is discovered that works for a particular case, be warned that it cannot be guaranteed and should not be used. If the trick concocted only works most of the time, it may introduce subtle problems in the future.&lt;br /&gt;
&lt;br /&gt;
Never selectively or forcibly refresh gadgets. The only gadget refresh that should ever be performed is the initial GT_RefreshWindow() after a window is opened with GadTools gadgets attached. It is also possible to add gadgets after the window is opened by calling AddGlist() and RefreshGlist() followed by GT_RefreshWindow(). These refresh functions should not be called at any other time.&lt;br /&gt;
&lt;br /&gt;
GadTools gadgets may not overlap with each other, with other gadgets or with other imagery. Doing this to modify the gadget&#039;s appearance is not supported.&lt;br /&gt;
&lt;br /&gt;
GadTools gadgets may not be selectively added or removed from a window. This has to do with the number of Intuition gadgets that each call to CreateGadget() produces and with refresh constraints.&lt;br /&gt;
&lt;br /&gt;
Never use OnGadget() or OffGadget() or directly modify the GFLG_DISABLED Flags bit. The only approved way to disable or enable a gadget is to use GT_SetGadgetAttrs() and the GA_Disabled tag. Those kinds of GadTools gadgets that do not support GA_Disabled may not be disabled (for now).&lt;br /&gt;
&lt;br /&gt;
The application should never write into any of the fields of the Gadget structure or any of the structures that hang off it, with the exception noted earlier for GENERIC_KIND gadgets. Avoid making assumptions about the contents of these fields unless they are explicitly programmer fields (GadgetID and UserData, for example) or if they are guaranteed meaningful (Left, Top, Width, Height, Flags). On occasion, the program is specifically invited to read a field, for example the StringInfo-&amp;amp;gt;Buffer field.&lt;br /&gt;
&lt;br /&gt;
GadTools gadgets may not be made relative sized or relative positioned. This means that the gadget flags GFLG_RELWIDTH, GFLG_RELHEIGHT, GFLG_RELBOTTOM and GFLG_RELRIGHT may not be specified. The activation type of the gadget may not be modified (for example changing GACT_IMMEDIATE to GACT_RELVERIFY). The imagery or the highlighting method may not be changed.&lt;br /&gt;
&lt;br /&gt;
These restrictions are not imposed without reason; subtle or blatant problems may arise now or in future versions of GadTools for programs that violate these guidelines.&lt;br /&gt;
&lt;br /&gt;
=== Documented Side-Effects ===&lt;br /&gt;
&lt;br /&gt;
There are certain aspects of the behavior of GadTools gadgets that should not be depended on. This will help current applications remain compatible with future releases of the GadTools library.&lt;br /&gt;
&lt;br /&gt;
When using GT_FilterIMsg() and GT_PostFilterIMsg(), never make assumptions about the message before or after filtering. I.e., do not interpret the unfiltered message, assume that it will or will not result in certain kinds of filtered message or assume it will result in a consumed message (i.e., when GT_FilterIMsg() returns NULL).&lt;br /&gt;
&lt;br /&gt;
IDCMP_INTUITICKS messages are consumed when a scroller&#039;s arrows are repeating. That is, IDCMP_INTUITICKS will not be received while the user is pressing a scroller arrows. Do not depend or rely on this side effect, though, it will not necessarily remain so in the future.&lt;br /&gt;
&lt;br /&gt;
A single call to CreateGadget() may create one or more actual gadgets. These gadgets, along with the corresponding code in GadTools, define the behavior of the particular kind of GadTools gadget requested. Only the behavior of these gadgets is documented, the number or type of actual gadgets is subject to change. Always refer to the gadget pointer received from CreateGadget() when calling GT_SetGadgetAttrs(). Never refer to other gadgets created by GadTools, nor create code which depends on their number or form.&lt;br /&gt;
&lt;br /&gt;
For text-display gadgets, the GTTX_CopyText tag does not cause the text to be copied when the text is later changed with GTTX_Text.&lt;br /&gt;
&lt;br /&gt;
The PLACETEXT ng_Flags are currently ignored by GENERIC_KIND gadgets. However, this may not always be so.&lt;br /&gt;
&lt;br /&gt;
All GadTools gadgets set GADTOOL_TYPE in the gadget&#039;s GadgetType field. Do not use this flag to identify GadTools gadgets, as this flag is not guaranteed to be set in the future.&lt;br /&gt;
&lt;br /&gt;
The palette gadget subdivides its total area into the individual color squares. Do not assume that the subdivision algorithm won&#039;t change.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=GUI_Programming&amp;diff=7852</id>
		<title>GUI Programming</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=GUI_Programming&amp;diff=7852"/>
		<updated>2015-03-12T15:23:00Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Choosing Toolkits */ Fixed typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Background ==&lt;br /&gt;
&lt;br /&gt;
In AmigaOS, the face a program shows you – its [http://en.wikipedia.org/wiki/Graphical_user_interface graphical user interface] (GUI) – is created through a subsystem called [[Intuition_and_the_Amiga_Graphical_User_Interface|Intuition]]. Older literature sometimes used to refer to Intuition as “the Amiga user interface” but this is really not the case. Despite being responsible for much of what you can &#039;&#039;see&#039;&#039; in the OS (including its windowing desktop environment, the [[UserDoc:Workbench|Workbench]]), Intuition itself remains &#039;&#039;invisible&#039;&#039; to the user. It is merely a system component providing ready-made [[#GUI elements|elements]] to build GUIs from, and a set of functions through which these elements are manipulated. Intuition also interconnects GUIs with the operating system and handles various communications that underlie application usage and control.&lt;br /&gt;
&lt;br /&gt;
Intuition’s functionality is further extended by a number of auxiliary system components, or [[#GUI toolkits|toolkits]]. Like most AmigaOS subsystems, Intuition and its extensions are implemented as libraries of functions that can be accessed from a higher-level programming language like C, C++, Modula-2 or AmigaE.&lt;br /&gt;
&lt;br /&gt;
== GUI Elements ==&lt;br /&gt;
&lt;br /&gt;
Amiga programs do not look or behave very differently from, say, Mac or Windows applications because their user interface is based on shared metaphors and familiar elements. There may be differences in naming conventions or programming techniques but the building blocks are similar. The following table summarizes the building blocks (GUI elements) that are provided by Intuition and its various extensions:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GUI element types&lt;br /&gt;
! Description&lt;br /&gt;
! System component or toolkit providing this functionality&lt;br /&gt;
|-&lt;br /&gt;
| [[Intuition_Screens|screens]] || Virtual desktops on which windows are opened. || Intuition Library&lt;br /&gt;
|-&lt;br /&gt;
| [[Intuition_Windows|windows]] || Rectangular areas containing an interface through which a program communicates with the user, and vice versa. || Intuition Library, ReAction, MUI&lt;br /&gt;
|-&lt;br /&gt;
| [[Intuition_Menus|menus]] || Programmable sets of commands displayed as a pull-down list of options. || Intuition Library, GadTools Library&lt;br /&gt;
|-&lt;br /&gt;
| [[Intuition_Gadgets|gadgets]] || Various-purpose GUI controls (buttons, toolbars, gauges, text fields...) with a standardized look and behaviour. Often called “widgets” in other operating systems. || Intuition Library, GadTools Library, ReAction, MUI&lt;br /&gt;
|-&lt;br /&gt;
| [[Intuition_Images,_Line_Drawing_and_Text#Creating_Images|images]] || Non-selectable elements showing graphics or text. || Intuition Library, ReAction, MUI&lt;br /&gt;
|-&lt;br /&gt;
| [[Intuition_Requesters_and_Alerts#Intuition_Requesters_and_Alerts|requesters]] || Means for displaying information and for requesting input from the user. They would be called “dialogs”, “dialog boxes” or “dialog windows” in other OSes. || Intuition Library, ASL Library, ReAction, MUI&lt;br /&gt;
|-&lt;br /&gt;
| [[Intuition_Requesters_and_Alerts#Alerts|alerts]] || A method of emergency communication (such as system errors). || Exec Library, Intuition Library&lt;br /&gt;
|-&lt;br /&gt;
| [[Application_Library#Pop-up_notifications_(Ringhio_messages)|pop-up notifications]] || Automatic messages informing the user when things happen. Unlike requesters, notifications are “unobtrusive” and do not require any input from the user. || [[Application Library]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Intuition_Images,_Line_Drawing_and_Text#Creating_Text|IntuiText]] || Formatted text to be placed at a specific position inside an Intuition element (screen, window, menu, gadget or requester). || Intuition Library&lt;br /&gt;
|-&lt;br /&gt;
| [[Intuition_Images,_Line_Drawing_and_Text#Creating_Borders|borders]] || Graphical structures made of lines that connect a series of defined points.. || Intuition Library&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== The Two Frameworks ==&lt;br /&gt;
&lt;br /&gt;
GUI programming in AmigaOS does not have to be done within a single framework or [http://en.wikipedia.org/wiki/Application_programming_interface API]. This fact can be confusing to newcomers. There are two frameworks in Intuition representing fundamentally different approaches to GUI programming:&lt;br /&gt;
&lt;br /&gt;
# The &#039;&#039;&#039;data structure-oriented framework&#039;&#039;&#039; is the original Intuition API. Within this framework, if you want to create a GUI element, you have to provide dedicated data structures for it; if you want to manipulate the element, you have to use a function designed for the particular action and type of element.&lt;br /&gt;
&lt;br /&gt;
# The &#039;&#039;&#039;object-oriented framework&#039;&#039;&#039; (called [[BOOPSI]]: Basic Object-Oriented Programming System for Intuition) is the extendable API. Within this framework, if you want to create a GUI element, you have to instantiate an &#039;&#039;object&#039;&#039; based upon a particular &#039;&#039;class&#039;&#039;. Objects are manipulated through a small set of &#039;&#039;methods&#039;&#039; which are really just functions.&lt;br /&gt;
&lt;br /&gt;
Modern AmigaOS programmers generally do not directly use either of these frameworks. Although it is still possible to do so it also requires a lot more code to achieve even a simple GUI.&lt;br /&gt;
&lt;br /&gt;
Instead, programmers are encouraged to use one or more of the various toolkits provided.&lt;br /&gt;
&lt;br /&gt;
== GUI toolkits ==&lt;br /&gt;
&lt;br /&gt;
While the Intuition Library originally provided a datastructure-based set of basic GUI elements (screens, windows, menus, buttons &amp;amp; string gadgets, etc.) they have been supplanted by more modern tools for user interface programming.  Most of the GUI-related functionality is now provided through various extensions to Intuition, or &#039;&#039;toolkits&#039;&#039;. The following toolkits are installed by default in AmigaOS:&lt;br /&gt;
&lt;br /&gt;
=== GadTools ===&lt;br /&gt;
&lt;br /&gt;
[[GadTools_Library|GadTools]] is a datastructure-based toolkit. It is implemented as a single library and is not easily extensible. What is most useful about GadTools is the [[GadTools_Library#GadTools_Menus|menu building functionality]] (most of the other toolkits still use the menu build aspect of GadTools).&lt;br /&gt;
&lt;br /&gt;
GadTools was introduced in AmigaOS 2.x as a ready-made toolkit for easier, faster and more consistent GUI design. GadTools extended the original Intuition set with fancy new controls such as the [[GadTools_Library#Cycle_Gadgets|cycle gadget]], the [[GadTools_Library#Mutually-Exclusive_Gadgets|radiobutton]], or the [[GadTools_Library#Listview_Gadgets|listview]]. The gadgets shared similar imagery, thus giving Amiga GUIs a more uniform, standardized look. Apart from improving the gadget set, GadTools also greatly simplified the creation of menus (GadTools uses standard Intuition menus but provides its own build and layout system for them). On the other hand, there is a very limited support for images in GadTools.&lt;br /&gt;
&lt;br /&gt;
=== ASL ===&lt;br /&gt;
&lt;br /&gt;
[[ASL_Library|ASL]] is a datastructure-based toolkit. It is implemented as a single library and is not extensible.&lt;br /&gt;
&lt;br /&gt;
The Amiga Standard Library (ASL) is a toolkit designed to ease the programming of common requesters. There are currently three types of requester available: file requester, font requester and screenmode requester.&lt;br /&gt;
&lt;br /&gt;
=== ReAction ===&lt;br /&gt;
&lt;br /&gt;
[[ReAction]] is an object-oriented toolkit based on BOOPSI which is highly extensible.&lt;br /&gt;
&lt;br /&gt;
ReAction is a more modern toolkit which hides much of the complexity. It covers all the functionality of GadTools and ASL and uses and extends the original BOOPSI class set built into Intuition Library. ReAction is considered to be the standard Amiga GUI toolkit. Over the years it has been integrated into the Intuition/BOOPSI framework, and is no longer considered a separate component.&lt;br /&gt;
&lt;br /&gt;
=== MUI ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Magic_User_Interface Magic User Interface] is an object-oriented toolkit based on BOOPSI which is highly extensible.&lt;br /&gt;
&lt;br /&gt;
MUI is a comprehensive third-party toolkit for application GUI design which can also incorporate GadTools menus and ASL. MUI is also available on older AmigaOS systems and various clone systems although the implementation differs so compatibility is not guaranteed.&lt;br /&gt;
&lt;br /&gt;
=== Qt, REBOL/View and Others ===&lt;br /&gt;
&lt;br /&gt;
Third party toolkits may also be used on AmigaOS just as well as the built-in toolkits listed above.&lt;br /&gt;
&lt;br /&gt;
Such toolkits generally work by opening an Intuition Screen and then rendering directly into that screen to create the GUI environment. Toolkits may also incorporate Intuition Windows and use them as a basic element. Native Intuition Menus may or may not be used as well.&lt;br /&gt;
&lt;br /&gt;
With the use of skinning, 3rd party GUIs can look and feel a lot like Amiga native GUIs. However, they can suffer from reduced speed due to the more intensive use of the CPU. Much of the speed problem can be alleviated through the use of hardware acceleration (e.g. compositing).&lt;br /&gt;
&lt;br /&gt;
== Choosing Toolkits ==&lt;br /&gt;
&lt;br /&gt;
* Choose the toolkit that works best for your application and your end customers.&lt;br /&gt;
&lt;br /&gt;
* GadTools gadgets are incompatible with all others and have their own [[GadTools_Library#Function_Reference|set of functions]] to be used with. There is no automatic layout system: GadTools gadgets are not scalable and are at fixed positions and dimensions. Using GadTools for GUI programming is no longer recommended, with the exception of the menu build and layout system.&lt;br /&gt;
&lt;br /&gt;
* The original BOOPSI set built in Intuition is usable but somewhat limited. Some BOOPSI objects are now actually wrappers for ReAction objects.&lt;br /&gt;
&lt;br /&gt;
* If you require modern features like scalability, font sensitivity, automatic (re)layouting, or window iconification (the ability to collapse the program window into an icon on the Workbench screen), then use one of the object-oriented toolkits: ReAction or MUI.&lt;br /&gt;
&lt;br /&gt;
* The ASL toolkit is utilized by ReAction and MUI through dedicated classes. There is little need to use ASL directly in object-oriented GUIs.&lt;br /&gt;
&lt;br /&gt;
* Prefer not to mix datastructure-oriented and object-oriented GUI programming. Functions designed for Intuition windows, gadgets or images are not meant to be used on GUI objects created via ReAction. BOOPSI objects must solely be manipulated using [[BOOPSI_-_Object_Oriented_Intuition#Function_Reference|BOOPSI functions]] (methods).&lt;br /&gt;
&lt;br /&gt;
* Many new programmers seem to be confused about window programming. It&#039;s fairly easy:&lt;br /&gt;
** ReAction elements (objects) must reside in a &#039;&#039;ReAction window&#039;&#039;, that is, a window created through the Window Class, which is part of the toolkit. Such a window is manipulated as any other BOOPSI object.&lt;br /&gt;
** Intuition or GadTools elements must reside in an &#039;&#039;Intuition window&#039;&#039;, that is, a window created through functions OpenWindow() or OpenWindowTags(), which are both part of the Intuition Library. Such windows are manipulated using dedicated functions.&lt;br /&gt;
&lt;br /&gt;
* Despite both being based on BOOPSI, MUI and ReAction classes are not interchangeable. You cannot extend the functionality of ReAction with MUI classes and vice versa.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Using_the_keyboard_to_control_Workbench&amp;diff=7843</id>
		<title>Using the keyboard to control Workbench</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Using_the_keyboard_to_control_Workbench&amp;diff=7843"/>
		<updated>2014-12-18T15:35:39Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Special Shell keys */ Removed extra backslash characters to leave single backslashes instead - were they escape codes?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Workbench]][[Category:Keyboard]]&lt;br /&gt;
The following keystrokes are usable in the main Workbench screen.&lt;br /&gt;
&lt;br /&gt;
Most of them will execute the corresponding action as found in the Workbench menu. Of course, the keystrokes are usable only if their menu counterpart is enabled (this depends on the context; e.g. actions on files are enabled only when file icons are selected).&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;HELP&#039;&#039; Opens Workbench Help =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Workbench menu&#039;&#039; (note that all menu shortcuts use the right Amiga key as qualifier)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + B&#039;&#039; Switches on or off the [[Workbench Menu - Backdrop|backdrop]] feature of the Workbench root window.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + E&#039;&#039; Allows you to [[Workbench Menu - Execute command|execute a command]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + ?&#039;&#039; Opens the [[Understanding_Workbench_requesters|About requester]] with version info etc.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + Q&#039;&#039; [[Understanding_Workbench_requesters|Quits the Workbench]].&lt;br /&gt;
&lt;br /&gt;
= Window menu =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + N&#039;&#039; [[Window_Menu_-_New_Drawer|Creates a new drawer]] in the opened directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + K&#039;&#039; [[Window_Menu_-_Close|Closes]] the selected drawer window.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + A&#039;&#039; [[Window_Menu_-_Select_contents|Selects the contents]] in the selected window.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + Z&#039;&#039; [[Window_Menu_-_Clear_selection|Clears]] the selection.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + .&#039;&#039; [[Window_Menu_-_Clean_up_by|Cleans up]] the window contents by column.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + 6&#039;&#039; [[Window_Menu_-_Clean_up_by|Cleans up]] the window contents by name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + 7&#039;&#039; [[Window_Menu_-_Clean_up_by|Cleans up]] the window contents by date.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + 8&#039;&#039; [[Window_Menu_-_Clean_up_by|Cleans up]] the window contents by size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + 9&#039;&#039; [[Window_Menu_-_Clean_up_by|Cleans up]] the window contents by type.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + -&#039;&#039; [[Window_Menu_-_Show...|Shows only]] files with an associated icon in the selected window&#039;s drawer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + +&#039;&#039; [[Window_Menu_-_Show...|Show All Files]] in the selected window&#039;s drawer (even files with no associated icon).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + 1&#039;&#039; Displays files in [[Window_Menu_-_View_by|icon mode]] (the default).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + 2&#039;&#039; Displays files by name, sorted in [[Window_Menu_-_View_by|alphabetical order]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + 3&#039;&#039; Displays files by name, sorted by [[Window_Menu_-_View_by|date]] (older to more recent).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + 4&#039;&#039; Displays files by name, sorted by [[Window_Menu_-_View_by|size]] (smaller to bigger).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + 5&#039;&#039; Displays files by name, sorted by [[Window_Menu_-_View_by|Type]] (directories first, then files).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + F&#039;&#039; Runs the [[Window_Menu_-_Find|Find utility]] allowing you to search for files.&lt;br /&gt;
&lt;br /&gt;
= Icons menu =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + O&#039;&#039; [[Icon_Menu_-_Open|Opens]] the selected file(s).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + C&#039;&#039; [[Icon_Menu_-_Copy|Clones]] the selected file(s).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + R&#039;&#039; Allows you to [[Icon_Menu_-_Rename|rename]] the selected file(s).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + I&#039;&#039; [[Icon_Menu_-_Information|Displays all information]] on the selected icon(s).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + S&#039;&#039; [[Icon_Menu_-_Snapshot_and_UnSnapshot|Stores the position(s)]] of the selected icon(s).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + U&#039;&#039; [[Icon_Menu_-_Snapshot_and_UnSnapshot|Clears the stored position(s)]] of the selected icon(s).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + L&#039;&#039; [[Icon_Menu_-_Leave_Out_and_Put_Away|Moves the selected file(s)]] from its/their location(s) to the desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + P&#039;&#039; [[Icon_Menu_-_Leave_Out_and_Put_Away|Puts the selected left out file(s)]] back in its/their original place(s).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + D&#039;&#039; [[Icon_Menu_-_Delete|Deletes]] the selected file(s) directly.&lt;br /&gt;
&lt;br /&gt;
= Mouse Qualifiers =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Right-Amiga + Open drawer&#039;&#039;&lt;br /&gt;
Closes parent window while opening the drawer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Right-Amiga + Close gadget&#039;&#039;&lt;br /&gt;
Closes all open drawer windows.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Shift + Zoom gadget&#039;&#039;&lt;br /&gt;
Maximizes a window to full screen without covering the Workbench titlebar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Shift + Drag window&#039;&#039;&lt;br /&gt;
Forces window to stay within the WB screen (when &amp;quot;Off-screen windows dragging&amp;quot; is enabled in Prefs/GUI).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ctrl + Alt + Drag window frame&#039;&#039;&lt;br /&gt;
Resizes a window from any edge or corner.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ctrl + Amiga + Drag window&#039;&#039;&lt;br /&gt;
Moves a window by clicking it anywhere (except active text editors).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Left-Amiga + Drag screen&#039;&#039;&lt;br /&gt;
Moves or drags down a screen by clicking it anywhere. This can be redefined in Prefs/GUI, where you can also change other aspects of screen dragging.&lt;br /&gt;
&lt;br /&gt;
= Mouse Substitution =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Left-Amiga + M&#039;&#039;&lt;br /&gt;
Flips through each open screen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Left-Amiga + N&#039;&#039;&lt;br /&gt;
Flips to the Workbench screen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Left-Amiga + V&#039;&#039;&lt;br /&gt;
Activates the leftmost button in a requester.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Left-Amiga + B&#039;&#039;&lt;br /&gt;
Activates the rightmost button in a requester with more than one button.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + Arrows&#039;&#039;&lt;br /&gt;
Moves the pointer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + Shift + Arrows&#039;&#039;&lt;br /&gt;
Moves the pointer faster.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + Right-Alt&#039;&#039;&lt;br /&gt;
Performs a RMB click.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Amiga + Left-Alt&#039;&#039;&lt;br /&gt;
Performs a LMB click.&lt;br /&gt;
&lt;br /&gt;
= Standard menu shortcuts in programs =&lt;br /&gt;
&lt;br /&gt;
It may be useful to know that the official Amiga guidelines for user interface design contain a list of menu shortcut keys which should always be followed by conforming Amiga programs - where relevant, of course. And as many programs actually do follow this, it is worth learning the most important ones, so you e.g. always know how to print or how to quit a program. The list is as follows:&lt;br /&gt;
&lt;br /&gt;
== Project menu ==&lt;br /&gt;
&lt;br /&gt;
Amiga + N	New&lt;br /&gt;
&lt;br /&gt;
Amiga + O	Open...&lt;br /&gt;
&lt;br /&gt;
Amiga + S	Save&lt;br /&gt;
&lt;br /&gt;
Amiga + A	Save As...&lt;br /&gt;
&lt;br /&gt;
Amiga + P	Print&lt;br /&gt;
&lt;br /&gt;
Amiga + ?	About... (not part of the official standard, but still almost always used)&lt;br /&gt;
&lt;br /&gt;
Amiga + Q	Quit&lt;br /&gt;
&lt;br /&gt;
== Edit menu ==&lt;br /&gt;
&lt;br /&gt;
Amiga + X	Cut&lt;br /&gt;
&lt;br /&gt;
Amiga + C	Copy&lt;br /&gt;
&lt;br /&gt;
Amiga + V	Paste&lt;br /&gt;
&lt;br /&gt;
Amiga + Z	Undo&lt;br /&gt;
&lt;br /&gt;
You might notice that some of these standard items are also present in the Workbench menus, and that those of course use the standard keys. Others (such as Paste) are not relevant in the Workbench, so therefore the corresponding shortcut keys (here Amiga + V) are not used at all.&lt;br /&gt;
&lt;br /&gt;
= Standard keystrokes used elsewhere =&lt;br /&gt;
&lt;br /&gt;
Although they are not strictly part of Workbench, some other standard keystrokes are worth a mention while we&#039;re at it.&lt;br /&gt;
&lt;br /&gt;
= Boot modifier keys =&lt;br /&gt;
&lt;br /&gt;
During bootup of your Amiga, it is possible to interrupt or influence the normal boot process in various ways using the keyboard and/or the mouse.&lt;br /&gt;
&lt;br /&gt;
If you hold down the Help key (normally Scroll Lock on a PC keyboard) during bootup, you will enter the Early Startup Menu, where you can make various selections about which drive to boot from, and whether to boot without Startup-Sequence, among others. The same can be achieved by holding both (L+R) mouse buttons. Either way, you may have to experiment a bit with the timing; it has to happen during initialisation of the system, just after the Kickstart modules have been loaded, but before the initialisation has passed the point of the bootmenu.&lt;br /&gt;
&lt;br /&gt;
You can also hold down the Ctrl key (either one on a PC keyboard) or the middle mouse button (if you have one); this will make the system boot without Startup-Sequence, just like it would do if you selected it from the Early Startup Menu. And if instead you hold down either one of the Shift or Alt keys (including Alt Gr on a PC keyboard), the system will boot without starting anything from the WBstartup drawer. Note that the system doesn&#039;t determine whether it should start with or without WBStartup until the Workbench is actually being loaded, which is not the very first thing that happens during startup. Therefore you have to keep the Alt or Shift key pressed until you actually see the Workbench screen appear for it to be detected.&lt;br /&gt;
&lt;br /&gt;
= Special Shell keys =&lt;br /&gt;
&lt;br /&gt;
In the AmigaShell window, there are also a couple of useful key combinations to note.&lt;br /&gt;
&lt;br /&gt;
Ctrl-C, like in many other systems, is the regular break signal. It tells a Shell program to stop immediately. Note that this requires the program to actually be coded to &amp;quot;listen&amp;quot; for this signal, and to be able to receive it, i.e. not to be fully occupied with other matters. So it may not always seem to have any effect. Sometimes it just takes a little time, sometimes it doesn&#039;t work at all.&lt;br /&gt;
&lt;br /&gt;
Ctrl-D works in a similar way, except that it breaks a running AmigaDOS script. Normally, a Ctrl-C will break the currently executing command, but if it is running as part of a script, this will just let the next command in the script run. With Ctrl-D you can avoid having the rest of the script run.&lt;br /&gt;
&lt;br /&gt;
Finally, Ctrl-\ (Ctrl and backslash) can be used to exit the Shell. It does the same as hitting the close gadget (if found) or typing EndCLI as a command. Note that on a PC keyboard, the key to use together with Ctrl is not necessarily the backslash key, it differs between the various national keyboard types. It will normally have either a backslash or a vertical bar (|) as one of the characters printed on it. To find out for sure, you can start the program KeyShow in the Utilities drawer. Click on a Ctrl key on the display, and look for a key that shows &#039;^\&#039; (the caret &#039;^&#039; symbolizes the Ctrl code). There may be more than one key that shows this sequence, in which case both or all of them will work.&lt;br /&gt;
&lt;br /&gt;
The KeyShow program is in general a great help if you are wondering how to type some rarely used character. It will always adapt to the keymap you have chosen in Prefs/Input (e.g. as done during installation) and show the characters produced by the various keys alone or together with whatever qualifier key you click on.&lt;br /&gt;
&lt;br /&gt;
= More about the keyboard (and other subjects) =&lt;br /&gt;
&lt;br /&gt;
You can find more information about the difference between using a classic Amiga keyboard and a PC keyboard, and lots of other keyboard-related things, in the file Keyboards.doc in the Documentation drawer, which can be found on your installation CD.&lt;br /&gt;
&lt;br /&gt;
In general, the Documentation drawer is full of interesting and useful information about using your Amiga and AmigaOS 4.0. Please have a good look at it, and return to it whenever you search for answers in your future quest to master Workbench and AmigaOS. While it is not installed to your hard disk by default, it is highly recommended that you drag it over from the CD, so that you always have access to it while working with your system. It only takes up a couple of megabytes of disk space.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=UserDoc:How_AmigaOS_Works&amp;diff=7842</id>
		<title>UserDoc:How AmigaOS Works</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=UserDoc:How_AmigaOS_Works&amp;diff=7842"/>
		<updated>2014-12-02T15:51:55Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Kickstart modules */ Small corrections.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As already mentioned, AmigaOS was a pioneer in the early days of personal computing in delivering sophistication that contemporary systems could only have dreamt of and pretended to offer. Today, AmigaOS continues to offer a straightforward elegance that seems to be overlooked in the development of other platforms. Thanks to the concepts behind AmigaOS, the system is easy to understand and to use by everyone.&lt;br /&gt;
&lt;br /&gt;
In this page we will explore all these concepts of AmigaOS. Also you will learn here the naming of all parts of the system.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
AmigaOS is made of different components which are either mandatory i.e. AmigaOS will not work without them or components the user can choose to use or not. All these components can have one or mutiple interfaces a user or a developer can use to operate with the components and through them to control the operating system.&lt;br /&gt;
&lt;br /&gt;
= The most important components =&lt;br /&gt;
&lt;br /&gt;
== Exec, the AmigaOS kernel ==&lt;br /&gt;
&lt;br /&gt;
Exec is the kernel of AmigaOS. It is the component that pilots all other components. It is responsible of running programs, dealing with computer memory, managing low-level resources that programs may need. In other words, it organises everything to make the operating system run.&lt;br /&gt;
&lt;br /&gt;
It is made of different parts that cannot be moved outside the kernel: the scheduler, the memory pager and the 68k interpretive emulator.&lt;br /&gt;
&lt;br /&gt;
== AmigaDOS: the underlying system ==&lt;br /&gt;
&lt;br /&gt;
The word &amp;quot;DOS&amp;quot; was originally an acronym for &amp;quot;Disk Operating System&amp;quot;. Some say it should be &amp;quot;Disk Based Operating System&amp;quot; as it does a lot more than operate a disk and that it was really an operating system based (stored) on disks.  Some say it should be &amp;quot;Device Operating System&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The whole AmigaDOS system includes things such as:&lt;br /&gt;
&lt;br /&gt;
* A set of commands that can be used in the Shell window and elsewhere.&lt;br /&gt;
* A system for saving data to disk and retrieving it from disk.&lt;br /&gt;
* A system for filing data on disks.&lt;br /&gt;
* An interface for peripherals such as keyboards, monitors, printers, etc.&lt;br /&gt;
* A method of running programs&lt;br /&gt;
* A multitasking system for running more than one program at a time.&lt;br /&gt;
* etc. etc. etc.&lt;br /&gt;
&lt;br /&gt;
Read the [[AmigaDOS manual]] to understand and learn everything about AmigaDOS.&lt;br /&gt;
&lt;br /&gt;
== The Graphics library ==&lt;br /&gt;
&lt;br /&gt;
The Graphics library handles every low level graphic operations like designing pixels on the monitor, creating graphic elements (bobs, sprites) and also writing text output.&lt;br /&gt;
&lt;br /&gt;
== Intuition ==&lt;br /&gt;
&lt;br /&gt;
The Intuition library is responsible for every graphical objects: windows, screens, gadgets, mouse pointers... It lays between any graphic program and the graphics library.&lt;br /&gt;
&lt;br /&gt;
== The Workbench ==&lt;br /&gt;
&lt;br /&gt;
The Workbench is the graphical place where you will manage your computer and all your files. The name was chosen because the user will use tools to create and work with the computer.&lt;br /&gt;
&lt;br /&gt;
[[File:Wb.png|320px]]&lt;br /&gt;
&lt;br /&gt;
== The Shell ==&lt;br /&gt;
&lt;br /&gt;
While some people prefer to control the operating system using their mouse, others prefer using the keyboard. The shell is a text based window when you can type commands to execute actions in the operating system. In the shell the commands will display the results of their execution.&lt;br /&gt;
&lt;br /&gt;
== ARexx - inter-program communication by scripting ==&lt;br /&gt;
&lt;br /&gt;
The ARexx scripting language can be used to operate the Workbench and the most important Amiga applications from a script containing ARexx commands. This is extremely useful to perform repetitive tasks or to do what the controlled application was not even design to do.&lt;br /&gt;
After a learning curve, everybody can use ARexx as it is built in the system and the scripts can be executed immediately like any other tool.&lt;br /&gt;
&lt;br /&gt;
= How is my data stored? =&lt;br /&gt;
== Files ==&lt;br /&gt;
=== Executable files ===&lt;br /&gt;
Programs you can start are stored in executable files. They contain binary code directly understandable by the computer. They are files with an executable bit, a flag that shows AmigaOS that such file will do something when started.&lt;br /&gt;
An example is a music player. When you start this executable, the player opens and you can start playing music files.&lt;br /&gt;
&lt;br /&gt;
AmigaOS can run two different kinds of executable files: the AmigaOS native programs made for the PowerPC processor and programs created for the Motorola 68k processors. The laters are executed inside an emulation that transcripts them into PowerPC code.&lt;br /&gt;
&lt;br /&gt;
==== Scripts ====&lt;br /&gt;
&lt;br /&gt;
Scripts are text files containing a list of commands. So they are not strictly executables like &#039;&#039;binary code&#039;&#039; files but they can be executed by AmigaOS like if they were.&lt;br /&gt;
This is the case with AmigaDOS and ARexx scripts. These files need to have the executable bit, and the script bit.&lt;br /&gt;
&lt;br /&gt;
=== Data files ===&lt;br /&gt;
Files that are not executable are data files. These contain some data that will be manipulated by programs. Some examples are a music file, a video file or a text document.&lt;br /&gt;
&lt;br /&gt;
== Directories/Drawers ==&lt;br /&gt;
In order to organise things a bit, files are not all of them in the same place. We create directories which like drawers of a cabinet will store different files of the same kind.&lt;br /&gt;
Often the name &#039;&#039;directory&#039;&#039; is used when talking about the directory which is stored on a disk. The graphical interface of AmigaOS being called the Workbench, directories are often called &#039;&#039;drawers&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Note: directories are often called &#039;&#039;folders&#039;&#039; on other systems.&lt;br /&gt;
&lt;br /&gt;
== Disks, partitions and volumes ==&lt;br /&gt;
=== Disks ===&lt;br /&gt;
Disks are storage medium you can purchase on a computer store. We use them to store our files. They can be internal hard disks, external ones or a USB disk drive.&lt;br /&gt;
&lt;br /&gt;
=== Partitions ===&lt;br /&gt;
A disk is often very big and many users prefer to make it more organised. This is done virtually splitting the disk into several smaller parts. This operation is known as creating partitions on a disk.&lt;br /&gt;
&lt;br /&gt;
[[File:Partitions.png|Small part of Media Toolbox showing different partitions on the harddisk]]&lt;br /&gt;
&lt;br /&gt;
On this screenshot you can see one harddisk with many partitions. Each color corresponds to a different filesystem which defines how data is stored. Also you can see a greyed area which is a blank area on the disk i.e. no partition is defined at this position.&lt;br /&gt;
&lt;br /&gt;
=== Volumes ===&lt;br /&gt;
A partition is a physical area on a disk. To access it with AmigaOS we could read the physical data off the partition but it&#039;s not an easy way. To make it easier AmigaOS uses the concept of volumes. These are virtual representations of a partition. The volumes have a name so AmigaOS and therefore the user can access all files/directories stored on it in a very practical way: just by using its name.&lt;br /&gt;
&lt;br /&gt;
= How to identify files/directories =&lt;br /&gt;
&lt;br /&gt;
== On the Workbench ==&lt;br /&gt;
&lt;br /&gt;
The Workbench being graphical, a lot of things are understandable just by looking at them. That&#039;s why icons are often enough to understand what kind of object it represents: a file, a directory, a disk...&lt;br /&gt;
&lt;br /&gt;
In case you have a doubt, just look at the information on an icon. The Workbench will tell you the type of the object. It is displayed next to its name.&lt;br /&gt;
&lt;br /&gt;
== In a shell ==&lt;br /&gt;
&lt;br /&gt;
In a shell the &#039;&#039;&#039;list&#039;&#039;&#039; command can be used to see if an object is a file or a directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Files-dirs-in-shell.png|The &#039;&#039;&#039;list&#039;&#039;&#039; command shows a file of 925678 bytes and two directories]]&lt;br /&gt;
&lt;br /&gt;
A file will be displayed with its size, whereas a directory will be displayed with the text &#039;&#039;&#039;Dir&#039;&#039;&#039; next to it.&lt;br /&gt;
&lt;br /&gt;
Also, as you can see on the screenshot, the list command displays other characteristics on these 3 items: the protection bits and the date they were updated the last time. The command also sums up what it just listed.&lt;br /&gt;
&lt;br /&gt;
= All AmigaOS components =&lt;br /&gt;
&lt;br /&gt;
AmigaOS is made of components that are needed as soon as the system starts or later when the user or the system needs them.&lt;br /&gt;
&lt;br /&gt;
== Kickstart modules ==&lt;br /&gt;
&lt;br /&gt;
These components are the heart of AmigaOS. Their duties is to do graphics, to handle discs or to handle all reads/writes to files. Also one of them is the AmigaOS kernel which is a kind of director handling the work of all other components.&lt;br /&gt;
These Kickstart modules are loaded at the beginning of the operating system boot process (read [[UserDoc:How_AmigaOS_Works#AmigaOS_boot_procedure|here]]). You can find all them in the &#039;&#039;&#039;Kickstart&#039;&#039;&#039; directory in the system volume. Here is a list:&lt;br /&gt;
&lt;br /&gt;
=== Mandatory modules ===&lt;br /&gt;
&lt;br /&gt;
The following modules are required in any AmigaOS system. Without one of these, the system will not start.&lt;br /&gt;
&lt;br /&gt;
* kernel - The kernel works like a conductor in an orchestra. Its job is to make everything works together. It creates processes, handle memory usage, defines the way other components will access peripherals...etc. Note that the AmigaOS kernel is not based on any other kernel. It is a self made kernel that works since 1983.&lt;br /&gt;
* loader - this component handles the loading of all other kickstart modules&lt;br /&gt;
* battclock.resource.kmod - this module handles reading/writing the battery backed up clock which is used on all computers to keep the date and time&lt;br /&gt;
* bootimage - this is the boot picture. It is displayed during the start sequence of AmigaOS&lt;br /&gt;
* bootmenu.kmod - this component handles the Early Startup Menu the use can use to define some settings before starting AmigaOS&lt;br /&gt;
* con-handler.kmod - it directs the read and write requests to the console window, to a serial AUX: device or any other supported interface&lt;br /&gt;
* console.device.kmod - it opens a window and reads/writes text to and from that window&lt;br /&gt;
* diskboot.kmod - handles the booting of AmigaOS from a supported disk&lt;br /&gt;
* diskboot.config - this is a text file experienced users can modify to change the boot behaviour of AmigaOS&lt;br /&gt;
* dos.library.kmod - this module is a collection of functions that any program can use to perform actions on disks, files and directories&lt;br /&gt;
* elf.library.kmod - handles the loading of executable programs&lt;br /&gt;
* env-handler.kmod - handles the read/writes of environment variables&lt;br /&gt;
* FileSystem.resource.kmod - handles the use of the different filesystems&lt;br /&gt;
* gadtools.library.kmod - collection of functions used to create all graphic objects like gadgets, sliders, menus...&lt;br /&gt;
* gameport.device.kmod - handles the read/writes of game pads and joysticks&lt;br /&gt;
* graphics.library.kmod - collection of functions used to draw graphic elements on the monitor&lt;br /&gt;
* hunk.library.kmod - set of functions to read a data stream into memory&lt;br /&gt;
* input.device.kmod - handles of input events like keyboard events or mouse clicks&lt;br /&gt;
* intuition.library.kmod - collection of functions to create and handle all graphic elements (screens, windows, the mouse pointer...)&lt;br /&gt;
* layers.library.kmod - set of functions to be used to handle different layers in graphic operations&lt;br /&gt;
* keyboard.device.kmod - driver for the keyboard&lt;br /&gt;
* keymap.library.kmod - functions to handle different keymaps&lt;br /&gt;
* newlib.library.kmod - collection of functions to perform memory operations (allocating memory, copying memory areas... )&lt;br /&gt;
* nonvolatile.library.kmod - provides a simple means for an application developer to manage nonvolatile storage&lt;br /&gt;
* nvram.resource.kmod - handles the read/writes to the EEPROM chip present on many AmigaOS computers&lt;br /&gt;
* PCIGraphics.card - driver that supports the use of different graphic cards&lt;br /&gt;
* ram-handler.kmod - functions that handles the &#039;&#039;&#039;Ram disk:&#039;&#039;&#039; special disk&lt;br /&gt;
* ramdrive.device.kmod - device that allows the usage of the ramdrive device &#039;&#039;&#039;RAD:&#039;&#039;&#039; disk&lt;br /&gt;
* ramlib.kmod - loads disk based libraries and devices for exec.library&lt;br /&gt;
* rtg.library - library of functions to perform lowlevel graphic operations on graphic cards&lt;br /&gt;
* shell.kmod - the AmigaOS command line interface&lt;br /&gt;
* strap.kmod - module that handles booting on different disk devices&lt;br /&gt;
* timer.device.kmod - driver to give access to timing functions&lt;br /&gt;
&lt;br /&gt;
=== Filesystem support ===&lt;br /&gt;
&lt;br /&gt;
These kickstart modules can be loaded or left aside. If you want to use a particular filesystem on your disk partitions, you need to load the corresponding filesystem module.&lt;br /&gt;
&lt;br /&gt;
* CDFileSystem - handles the CD-ROM disks with data stored in different formats: ISO9660, HFS...&lt;br /&gt;
* SmartFilesystem - allows the usage of partitions in SFS0 and SFS2 layouts&lt;br /&gt;
* JXFileSystem - allows the usage of partitions in JXFS layout&lt;br /&gt;
* FastFileSystem - allows the usage of partitions in FFS and FFS2 layouts&lt;br /&gt;
* diskcache.library.kmod - component required by the SmartFileSystem and JXFileSystem modules&lt;br /&gt;
&lt;br /&gt;
=== Hardware drivers ===&lt;br /&gt;
&lt;br /&gt;
==== Graphic cards drivers ====&lt;br /&gt;
&lt;br /&gt;
* 3dfxVoodoo.chip&lt;br /&gt;
* 3DLabsPermedia2.chip&lt;br /&gt;
* ATIRadeon.chip&lt;br /&gt;
* RadeonHD.chip&lt;br /&gt;
* siliconmotion502.chip&lt;br /&gt;
&lt;br /&gt;
==== Disk drivers ====&lt;br /&gt;
&lt;br /&gt;
Each of these drivers allow the use of disks connected to a disk controller. These files are named with the name of the controller they support. As an example, the &#039;&#039;&#039;sii3114ide.device.kmod&#039;&#039;&#039; allows to use disks connected on a &#039;&#039;&#039;Silicon Image SiI3114&#039;&#039;&#039; controller chip.&lt;br /&gt;
&lt;br /&gt;
* it8212ide.device.kmod&lt;br /&gt;
* lsi53c8xx.device.kmod&lt;br /&gt;
* sam460sata.device.kmod&lt;br /&gt;
* sii3112ide.device.kmod&lt;br /&gt;
* sii3512ide.device.kmod&lt;br /&gt;
* sii3114ide.device.kmod&lt;br /&gt;
* sii0680ide.device.kmod&lt;br /&gt;
* sii3132ide.device.kmod&lt;br /&gt;
&lt;br /&gt;
==== USB drivers ====&lt;br /&gt;
&lt;br /&gt;
* hub.usbfd&lt;br /&gt;
* usbsys.device&lt;br /&gt;
* usbresource.library&lt;br /&gt;
* ehci.usbhcd&lt;br /&gt;
* ohci.usbhcd&lt;br /&gt;
* uhci.usbhcd&lt;br /&gt;
* massstorage.usbfd&lt;br /&gt;
&lt;br /&gt;
==== Other drivers ====&lt;br /&gt;
&lt;br /&gt;
* bootkeyboard.usbfd - allows a USB keyboard to be used even before the USB stack is loaded&lt;br /&gt;
* bootmouse.usbfd - allows a USB mouse to be used even before the USB stack is loaded&lt;br /&gt;
* fpga.resource.kmod - allows to use the FPGA components which are present on some Amiga computers&lt;br /&gt;
* i2c.resource.kmod - allows to use the i2c interface present on some Amiga computers&lt;br /&gt;
* xena.resource.kmod - provides access to the Xena chip on the AmigaOne X1000&lt;br /&gt;
&lt;br /&gt;
=== Misc modules ===&lt;br /&gt;
&lt;br /&gt;
* petunia.library.kmod - this module contains the Just-In-Time emulator that allows AmigaOS to run programs made for the Motorola 68k processor&lt;br /&gt;
&lt;br /&gt;
== System components ==&lt;br /&gt;
&lt;br /&gt;
[[File:Workbench_directory_listing.png|frame|right|List of directories and files present at the root of any AmigaOS system]]&lt;br /&gt;
&lt;br /&gt;
Beside the kickstart modules, AmigaOS uses many different components that can be loaded only when used. These files are stored in different directories in the system volume.&lt;br /&gt;
Here is described a default AmigaOS installation.&lt;br /&gt;
&lt;br /&gt;
* C&lt;br /&gt;
This directory contains AmigaDOS &#039;&#039;&#039;C&#039;&#039;&#039;ommands&lt;br /&gt;
* Classes&lt;br /&gt;
contains different object elements easy to be used in any program: gadgets, requesters, graphic table, windows...&lt;br /&gt;
* Devs&lt;br /&gt;
contains definition for &#039;&#039;&#039;Dev&#039;&#039;&#039;ices&lt;br /&gt;
* Emulation&lt;br /&gt;
contains files used for the 68k emulation (though E-UAE)&lt;br /&gt;
* Fonts&lt;br /&gt;
contains various systems fonts&lt;br /&gt;
* Internet&lt;br /&gt;
contains a dialer to connect to Internet&lt;br /&gt;
* Kickstart&lt;br /&gt;
contains the kickstart modules&lt;br /&gt;
* L&lt;br /&gt;
contains hand&#039;&#039;&#039;l&#039;&#039;&#039;ers and filesystems&lt;br /&gt;
* Libs&lt;br /&gt;
contains dynamic &#039;&#039;&#039;Libr&#039;&#039;&#039;airies of functions&lt;br /&gt;
* Locale&lt;br /&gt;
contains all files used to localise the system (catalogs, keymaps...)&lt;br /&gt;
* MUI&lt;br /&gt;
contains the needed files for programs that use the MUI third party graphic interface&lt;br /&gt;
* [[Prefs]]&lt;br /&gt;
contains the preference programs used to customise AmigaOS&lt;br /&gt;
* S&lt;br /&gt;
contains the &#039;&#039;&#039;S&#039;&#039;&#039;cripts&lt;br /&gt;
* SObjs&lt;br /&gt;
contains .so shared object library files&lt;br /&gt;
* Storage&lt;br /&gt;
contains other optional files&lt;br /&gt;
* System&lt;br /&gt;
contains some programs used by the system itself (i.e. you don&#039;t need to run them yourself) or low-level programs like disk tools&lt;br /&gt;
* [[Utilities]]&lt;br /&gt;
contains several programs you can use to achieve some tasks on AmigaOS&lt;br /&gt;
&lt;br /&gt;
= Motorola 680x0 Emulators =&lt;br /&gt;
&lt;br /&gt;
For a long time Amigas have had the famous Motorola 680x0 processors as the central unit for execution. Unfortunately the time of the 680x0 series is passing in favor of other architectures. The new era of processors reached the Amiga some time ago, when expansion boards became available for extending the Classic systems with the raw power of a PowerPC processor.&lt;br /&gt;
&lt;br /&gt;
In the old operating system (AmigaOS 3.x) it was not possible to gain the full advantage of the new processors. The system itself and most of the applications required the original Motorola 680x0 processor. There was no 680x0 emulation available for the PowerPCs, so the 680x0 could not be &amp;quot;switched off&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thus the new processors remained as a powerful, but mostly unused adjunct to the main 680x0 processor. &amp;quot;Native&amp;quot; PowerPC programs were rare, and every time a PowerPC program called the system, a so called &amp;quot;context switch&amp;quot; occurred between the 680x0 and PowerPC code, often causing a large performance penalty.&lt;br /&gt;
&lt;br /&gt;
The new Amiga platform is based on the PowerPC processor family, therefore the new version of the AmigaOS has to smooth the transition from the 680x0 series, which is achieved by emulating the old processor architecture. The operating system itself is written almost 100 percent for the PowerPC processors, but the 680x0 legacy applications require an emulated 680x0 processor. &lt;br /&gt;
&lt;br /&gt;
== Two 680x0 Emulators ==&lt;br /&gt;
&lt;br /&gt;
In version 4.0 of AmigaOS, two different emulators were implemented; one is the successor of BlackBox emulation, it is an interpretive emulator, thus the emulation speed is mediocre. On the other hand it has a very low &amp;quot;reaction time&amp;quot;, and is ideal for time critical parts, such as interrupts.&lt;br /&gt;
&lt;br /&gt;
The other is Petunia, the &amp;quot;JIT emulator&amp;quot;. A fast, but less compatible way of emulation of the legacy Motorola processors. It is intended mainly for emulating applications, and therefore, when execution of the application leaves the bounds of the application&#039;s code segment, emulation falls back to the interpretive method, where it does its job and returns to the JIT emulation again.&lt;br /&gt;
&lt;br /&gt;
Dynamic recompilation (also called just-in-time compilation or simply JIT compilation) is a technique of translating foreign processor machine code to native machine code, &amp;quot;on the fly&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This technique is common nowadays, commonly applied in JAVA virtual machines, and it is also used with success in several emulators. In dynamic recompilation there is the possibility of runtime optimization of the emulated code by collecting statistics of the execution process. Therefore (theoretically) the final executed code can be even faster than the original code on its original processor.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
Emulated opcodes:&lt;br /&gt;
* all user and supervisor level opcodes of the Motorola 68040&lt;br /&gt;
* all FPU opcodes of the Motorola 68881/68882 &lt;br /&gt;
&lt;br /&gt;
AmigaOS claims only 68020/68881 compatibility to applications because this is the safest compatibility level, but both emulators are compatible with the machine code up to the level of 68040/060 processors.&lt;br /&gt;
&lt;br /&gt;
At compile time, a low level flag and branch control analysis allows on-the-fly optimizations of compiled code.&lt;br /&gt;
&lt;br /&gt;
== Removing the JIT Emulator ==&lt;br /&gt;
&lt;br /&gt;
Using the dynamic translation requires a lot more memory than the interpretive emulation. The translated code needs to be stored somewhere, not to mention the data collection tables.&lt;br /&gt;
&lt;br /&gt;
If speed is not as important as the memory consumption of the system, then the JIT emulator can be removed, leaving the job to the interpretive emulator.&lt;br /&gt;
&lt;br /&gt;
Thanks to the modular design of AmigaOS kickstart, all you need to do is edit the &amp;quot;Sys:Kickstart/Kicklayout&amp;quot; file, simply put a semicolon (;) at the beginning of the module line of Petunia.library.kmod. After rebooting the system from cold, the JIT emulator will not be reloaded. Make sure that you alter the appropriate configuration in the Kicklayout file, there may be several alternative configurations, with different names like &amp;quot;DefaultJIT&amp;quot;, or &amp;quot;DefaultNoJIT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Configuring the Emulators ==&lt;br /&gt;
&lt;br /&gt;
Petunia cooperates with a so called &amp;quot;black list&amp;quot;. By default Petunia emulates every 680x0 program or library that is loaded by DOS.library/LoadSeg function, but if an executable or library shows incompatibilities with Petunia, then it can be explicitly inhibited from the dynamic recompilation by specifying it in a list file.&lt;br /&gt;
&lt;br /&gt;
If an executable needs to be added to the list, then it can be done by extending the file &amp;quot;DEVS:applications.dos&amp;quot; with the &#039;&#039;&#039;Compatibility&#039;&#039;&#039; preferences program from the Prefs drawer of the system. Adding a program name to the list and checking it will prevent Petunia from emulating that program, and it will be interpreted instead by the built-in interpreter.&lt;br /&gt;
&lt;br /&gt;
Removing a program from the list or unchecking (thus allowing Petunia to emulate it again) can be done with the same preferences program.&lt;br /&gt;
&lt;br /&gt;
Please note: some programs consist of multiple executables (shared libraries, plugins). If you want to fully disable the translation of such programs, then every part must be added to the list.&lt;br /&gt;
&lt;br /&gt;
For example to disable UnArc fully, you would have to add all files from libs:xad and also xadmaster.library to the list. &lt;br /&gt;
&lt;br /&gt;
= AmigaOS boot procedure =&lt;br /&gt;
&lt;br /&gt;
Basically a computer with AmigaOS does the following when the power button is pushed:&lt;br /&gt;
&lt;br /&gt;
* [[File:Uboot.jpg|200px]]&lt;br /&gt;
the BIOS ([[UserDoc:BIOS|Uboot]] or [[UserDoc:BIOS|CFE]]) of the computer initialises the hardware: graphic card, USB ports... At this point, the monitor wakes up and the first information are displayed. This allows to see if hardware is correctly recognised. As an example you can see if a hard drive is correctly connected into the machine and your BIOS is correctly setup to make this drive useable.&lt;br /&gt;
* depending on how you setup the BIOS it will look on the harddisk to find the Second Level Booter (SLB). This program is stored on the first sectors of the disk. Whereas the BIOS does not know about AmigaOS disk structure, the SLB will be able to &#039;&#039;understand&#039;&#039; the AmigaOS partitions and files. In other words, it is the link between the BIOS and the rest of the boot procedure. Its goal is also to give you the ability to start several configurations present on the same drive.&lt;br /&gt;
* [[File:SLB.png|200px]]&lt;br /&gt;
the SLB will analyses all Amiga partitions on the disk it is installed on. It will read each [[UserDoc:kickstart_configuration|system configuration]] it finds on the partitions. It will show all available configurations for the user to select one to load.&lt;br /&gt;
The user can define many different kickstart configurations to choose from. Also both AmigaOS and Linux can be selected for boot.&lt;br /&gt;
* [[File:Kmods loading.png|200px]]&lt;br /&gt;
the SLB loads the kickstart files of the selected configuration and executes the &#039;&#039;&#039;Loader&#039;&#039;&#039; module&lt;br /&gt;
* &#039;&#039;&#039;Loader&#039;&#039;&#039; executes the kickstart modules (Exec, devices, libraries...)&lt;br /&gt;
* AmigaOS becomes alive displaying the AmigaOS boot picture on the monitor&lt;br /&gt;
* the AmigaDOS library executes the [[UserDoc:System_Scripts#startup-sequence|startup-sequence]] script found on the system volume&lt;br /&gt;
* the Startup-sequence will be executed and all commands it contains are executed. It means that starting from here the boot procedure is easy to follow and understand.&lt;br /&gt;
* the Workbench is started&lt;br /&gt;
&lt;br /&gt;
At this point the user can use his/her computer.&lt;br /&gt;
&lt;br /&gt;
= How to make a Bootable USB Memory Stick for AmigaOS 4.1 =&lt;br /&gt;
&lt;br /&gt;
By Julian Margetson (&amp;quot;Spectre660&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Prerequisites:&lt;br /&gt;
* USB memory stick of 2 GB or less in size.&lt;br /&gt;
* It is best to only have one USB mass storage device connected while you are creating your bootable USB memory stick.&lt;br /&gt;
* Plug the USB memory stick into a USB port on your machine.&lt;br /&gt;
* Note that the device will be formatted so make sure that you use an empty memory stick or one that does not contain any data that you need or backup the contents before you begin.&lt;br /&gt;
&lt;br /&gt;
Procedure:&lt;br /&gt;
# You use Media Toolbox in the System: drawer to prepare the USB stick. On starting Media Toolbox select &#039;&#039;usbdisk.device&#039;&#039; as the device to use.&lt;br /&gt;
# Make certain that you have selected usbdisk.device and not any other device.&lt;br /&gt;
# Click on &amp;quot;Start&amp;quot;&lt;br /&gt;
# You will see the usb mass storage unit connected in a list.&lt;br /&gt;
# Make sure that the Unit type displayed for the USB memory stick is &amp;quot;Removable hard disk&amp;quot;&lt;br /&gt;
# Select that Unit by clicking on it.&lt;br /&gt;
# The first thing that you need to do is to install the RDB onto the USB Memory Stick.&lt;br /&gt;
# Click on the  &amp;quot;Install&amp;quot; button.&lt;br /&gt;
# A window Labeled &amp;quot;RDB/disk geometry editing&amp;quot; comes up.&lt;br /&gt;
## Towards the bottom of the window is the &amp;quot;AmigaOne boot code (SLB)&amp;quot; section.&lt;br /&gt;
## Select the &amp;quot;Install&amp;quot; button .&lt;br /&gt;
## A file requester  &amp;quot;Select AmigaOne Boot Code&amp;quot; now comes  up with the Drawer choice defaulting to &amp;quot;l:&amp;quot;&lt;br /&gt;
## Select file &amp;quot;slb_v2&amp;quot;. &lt;br /&gt;
## Select Ok.&lt;br /&gt;
## You are now returned to the &amp;quot;RDB/disk geometry editing window&amp;quot;.&lt;br /&gt;
## Select &amp;quot;Ok-accept changes&amp;quot;.&lt;br /&gt;
# You are now returned to the display showing the attached USB unit.&lt;br /&gt;
# Select &amp;quot;Edit partitions and Filesystems&amp;quot;. You will now see the Window &#039;Editing partitions for disk&amp;quot;&lt;br /&gt;
# Select &amp;quot;Add partition&amp;quot;&lt;br /&gt;
# This defaults to using the whole device as a single partition.&lt;br /&gt;
# It is possible to use create more partitions but for this tutorial we will only use one.&lt;br /&gt;
# You now need to give the partition a unique name (e.g. USB0 or something that is different from any of the existing partitions on your hard drive). This is done by changing the default DH0 in the &amp;quot;Name&amp;quot; box.&lt;br /&gt;
# Now make sure that the Boxes &amp;quot;Automount&amp;quot; and &amp;quot;Bootable&amp;quot; are  selected and show the &amp;quot;Tick mark&amp;quot;.&lt;br /&gt;
# You need to set &amp;quot;Boot priority&amp;quot; to higher than the boot priority of your hard drive boot partition(s). This is done by increasing Boot priority by clicking on the &amp;quot;+&amp;quot; to the right of the &amp;quot;boot priority&amp;quot; box. Normally you can set the boot priority to 2 .&lt;br /&gt;
# Next it is time to select the file system to use.&lt;br /&gt;
# Select &amp;quot;Select filesystem/edit details&amp;quot;.&lt;br /&gt;
# The Window &amp;quot;Editing details for partition &#039;USB0&#039;&amp;quot;  ,or whatever partition name you used, comes up.&lt;br /&gt;
## Select the file system that you are going to use by selecting the pull down menu under &amp;quot;Filesystem chooser&amp;quot;.&lt;br /&gt;
## Only filesystems SFS/00 or SFS/02 will work for a bootable device.&lt;br /&gt;
## The option that gives the most flexibility at the moment is SFS/00 as a USB stick in this format can be read and written to using another compatible system in the event that you need to make modifications after it is created without a booting AmigaOS 4.1 machine.&lt;br /&gt;
## Next select Blocksize from the &amp;quot;Blocksize&amp;quot; pull down menu. 512 is the correct size to use.&lt;br /&gt;
## Now Select &amp;quot;Ok-accept changes&amp;quot;.&lt;br /&gt;
## Your are now returned to the &amp;quot;Edit partitions for disk&amp;quot; window.&lt;br /&gt;
## Again select &amp;quot;Ok-accept changes&amp;quot;&lt;br /&gt;
# You are now returned to the window showing the USB mass storage unit list.&lt;br /&gt;
# Select &amp;quot;Save to disk&amp;quot;&lt;br /&gt;
# A requester pops up with the options &amp;quot;Yes, Save.&amp;quot; or &amp;quot;No!&amp;quot;&lt;br /&gt;
# Select the &amp;quot;Yes, save.&amp;quot; option.&lt;br /&gt;
# You now close Media Toolbox by clicking on the close icon (X) on the left of the Media Toolbox window.&lt;br /&gt;
# This will give you a requester advising that you need to reboot the machine for the changes to take effect. At this point you need to remove the USB memory stick for the machine. If you do not then the Machine will attempt boot from it before it is formatted and the required Kickstart and AmigaOS 4.1 files are copied to it.&lt;br /&gt;
# Select &amp;quot;Yes, reboot NOW!&amp;quot;.&lt;br /&gt;
# Once you have rebooted connect your USB Memory Stick to a USB port.&lt;br /&gt;
# A disk icon &amp;quot;USB0:Uninitialized&amp;quot; (or whatever partition name you used) appears on Workbench.&lt;br /&gt;
# You now need to format the device.&lt;br /&gt;
# To format Select this Icon and go to the Workbench &amp;quot;Icons&amp;quot; menu .&lt;br /&gt;
# Select &amp;quot;Format Disk&amp;quot;&lt;br /&gt;
# You can give the USB Memory Stick a unique name and  select whether you want a Trashcan or not.&lt;br /&gt;
# You can use either a full Format or a  Quick Format. Full Format may take a few minutes.&lt;br /&gt;
# Once formatted the USB Memory Stick is ready for you to copy the required files from you hard drive or AmigaOS Install CD to it in order to boot AmigaOS 4.1 from it.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=UserDoc:How_AmigaOS_Works&amp;diff=7841</id>
		<title>UserDoc:How AmigaOS Works</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=UserDoc:How_AmigaOS_Works&amp;diff=7841"/>
		<updated>2014-12-02T15:40:26Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* In a shell */ Reworded sonce you do not need to use the List command to see if an object is a file or dir - the dir command will do this too.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As already mentioned, AmigaOS was a pioneer in the early days of personal computing in delivering sophistication that contemporary systems could only have dreamt of and pretended to offer. Today, AmigaOS continues to offer a straightforward elegance that seems to be overlooked in the development of other platforms. Thanks to the concepts behind AmigaOS, the system is easy to understand and to use by everyone.&lt;br /&gt;
&lt;br /&gt;
In this page we will explore all these concepts of AmigaOS. Also you will learn here the naming of all parts of the system.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
AmigaOS is made of different components which are either mandatory i.e. AmigaOS will not work without them or components the user can choose to use or not. All these components can have one or mutiple interfaces a user or a developer can use to operate with the components and through them to control the operating system.&lt;br /&gt;
&lt;br /&gt;
= The most important components =&lt;br /&gt;
&lt;br /&gt;
== Exec, the AmigaOS kernel ==&lt;br /&gt;
&lt;br /&gt;
Exec is the kernel of AmigaOS. It is the component that pilots all other components. It is responsible of running programs, dealing with computer memory, managing low-level resources that programs may need. In other words, it organises everything to make the operating system run.&lt;br /&gt;
&lt;br /&gt;
It is made of different parts that cannot be moved outside the kernel: the scheduler, the memory pager and the 68k interpretive emulator.&lt;br /&gt;
&lt;br /&gt;
== AmigaDOS: the underlying system ==&lt;br /&gt;
&lt;br /&gt;
The word &amp;quot;DOS&amp;quot; was originally an acronym for &amp;quot;Disk Operating System&amp;quot;. Some say it should be &amp;quot;Disk Based Operating System&amp;quot; as it does a lot more than operate a disk and that it was really an operating system based (stored) on disks.  Some say it should be &amp;quot;Device Operating System&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The whole AmigaDOS system includes things such as:&lt;br /&gt;
&lt;br /&gt;
* A set of commands that can be used in the Shell window and elsewhere.&lt;br /&gt;
* A system for saving data to disk and retrieving it from disk.&lt;br /&gt;
* A system for filing data on disks.&lt;br /&gt;
* An interface for peripherals such as keyboards, monitors, printers, etc.&lt;br /&gt;
* A method of running programs&lt;br /&gt;
* A multitasking system for running more than one program at a time.&lt;br /&gt;
* etc. etc. etc.&lt;br /&gt;
&lt;br /&gt;
Read the [[AmigaDOS manual]] to understand and learn everything about AmigaDOS.&lt;br /&gt;
&lt;br /&gt;
== The Graphics library ==&lt;br /&gt;
&lt;br /&gt;
The Graphics library handles every low level graphic operations like designing pixels on the monitor, creating graphic elements (bobs, sprites) and also writing text output.&lt;br /&gt;
&lt;br /&gt;
== Intuition ==&lt;br /&gt;
&lt;br /&gt;
The Intuition library is responsible for every graphical objects: windows, screens, gadgets, mouse pointers... It lays between any graphic program and the graphics library.&lt;br /&gt;
&lt;br /&gt;
== The Workbench ==&lt;br /&gt;
&lt;br /&gt;
The Workbench is the graphical place where you will manage your computer and all your files. The name was chosen because the user will use tools to create and work with the computer.&lt;br /&gt;
&lt;br /&gt;
[[File:Wb.png|320px]]&lt;br /&gt;
&lt;br /&gt;
== The Shell ==&lt;br /&gt;
&lt;br /&gt;
While some people prefer to control the operating system using their mouse, others prefer using the keyboard. The shell is a text based window when you can type commands to execute actions in the operating system. In the shell the commands will display the results of their execution.&lt;br /&gt;
&lt;br /&gt;
== ARexx - inter-program communication by scripting ==&lt;br /&gt;
&lt;br /&gt;
The ARexx scripting language can be used to operate the Workbench and the most important Amiga applications from a script containing ARexx commands. This is extremely useful to perform repetitive tasks or to do what the controlled application was not even design to do.&lt;br /&gt;
After a learning curve, everybody can use ARexx as it is built in the system and the scripts can be executed immediately like any other tool.&lt;br /&gt;
&lt;br /&gt;
= How is my data stored? =&lt;br /&gt;
== Files ==&lt;br /&gt;
=== Executable files ===&lt;br /&gt;
Programs you can start are stored in executable files. They contain binary code directly understandable by the computer. They are files with an executable bit, a flag that shows AmigaOS that such file will do something when started.&lt;br /&gt;
An example is a music player. When you start this executable, the player opens and you can start playing music files.&lt;br /&gt;
&lt;br /&gt;
AmigaOS can run two different kinds of executable files: the AmigaOS native programs made for the PowerPC processor and programs created for the Motorola 68k processors. The laters are executed inside an emulation that transcripts them into PowerPC code.&lt;br /&gt;
&lt;br /&gt;
==== Scripts ====&lt;br /&gt;
&lt;br /&gt;
Scripts are text files containing a list of commands. So they are not strictly executables like &#039;&#039;binary code&#039;&#039; files but they can be executed by AmigaOS like if they were.&lt;br /&gt;
This is the case with AmigaDOS and ARexx scripts. These files need to have the executable bit, and the script bit.&lt;br /&gt;
&lt;br /&gt;
=== Data files ===&lt;br /&gt;
Files that are not executable are data files. These contain some data that will be manipulated by programs. Some examples are a music file, a video file or a text document.&lt;br /&gt;
&lt;br /&gt;
== Directories/Drawers ==&lt;br /&gt;
In order to organise things a bit, files are not all of them in the same place. We create directories which like drawers of a cabinet will store different files of the same kind.&lt;br /&gt;
Often the name &#039;&#039;directory&#039;&#039; is used when talking about the directory which is stored on a disk. The graphical interface of AmigaOS being called the Workbench, directories are often called &#039;&#039;drawers&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Note: directories are often called &#039;&#039;folders&#039;&#039; on other systems.&lt;br /&gt;
&lt;br /&gt;
== Disks, partitions and volumes ==&lt;br /&gt;
=== Disks ===&lt;br /&gt;
Disks are storage medium you can purchase on a computer store. We use them to store our files. They can be internal hard disks, external ones or a USB disk drive.&lt;br /&gt;
&lt;br /&gt;
=== Partitions ===&lt;br /&gt;
A disk is often very big and many users prefer to make it more organised. This is done virtually splitting the disk into several smaller parts. This operation is known as creating partitions on a disk.&lt;br /&gt;
&lt;br /&gt;
[[File:Partitions.png|Small part of Media Toolbox showing different partitions on the harddisk]]&lt;br /&gt;
&lt;br /&gt;
On this screenshot you can see one harddisk with many partitions. Each color corresponds to a different filesystem which defines how data is stored. Also you can see a greyed area which is a blank area on the disk i.e. no partition is defined at this position.&lt;br /&gt;
&lt;br /&gt;
=== Volumes ===&lt;br /&gt;
A partition is a physical area on a disk. To access it with AmigaOS we could read the physical data off the partition but it&#039;s not an easy way. To make it easier AmigaOS uses the concept of volumes. These are virtual representations of a partition. The volumes have a name so AmigaOS and therefore the user can access all files/directories stored on it in a very practical way: just by using its name.&lt;br /&gt;
&lt;br /&gt;
= How to identify files/directories =&lt;br /&gt;
&lt;br /&gt;
== On the Workbench ==&lt;br /&gt;
&lt;br /&gt;
The Workbench being graphical, a lot of things are understandable just by looking at them. That&#039;s why icons are often enough to understand what kind of object it represents: a file, a directory, a disk...&lt;br /&gt;
&lt;br /&gt;
In case you have a doubt, just look at the information on an icon. The Workbench will tell you the type of the object. It is displayed next to its name.&lt;br /&gt;
&lt;br /&gt;
== In a shell ==&lt;br /&gt;
&lt;br /&gt;
In a shell the &#039;&#039;&#039;list&#039;&#039;&#039; command can be used to see if an object is a file or a directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Files-dirs-in-shell.png|The &#039;&#039;&#039;list&#039;&#039;&#039; command shows a file of 925678 bytes and two directories]]&lt;br /&gt;
&lt;br /&gt;
A file will be displayed with its size, whereas a directory will be displayed with the text &#039;&#039;&#039;Dir&#039;&#039;&#039; next to it.&lt;br /&gt;
&lt;br /&gt;
Also, as you can see on the screenshot, the list command displays other characteristics on these 3 items: the protection bits and the date they were updated the last time. The command also sums up what it just listed.&lt;br /&gt;
&lt;br /&gt;
= All AmigaOS components =&lt;br /&gt;
&lt;br /&gt;
AmigaOS is made of components that are needed as soon as the system starts or later when the user or the system needs them.&lt;br /&gt;
&lt;br /&gt;
== Kickstart modules ==&lt;br /&gt;
&lt;br /&gt;
These components are the heart of AmigaOS. Their duties is to do graphics, to handle discs or to handle all reads/writes to files. Also one of them is the AmigaOS kernel which is some kind of director handling the work of all other components.&lt;br /&gt;
These Kickstart modules are loaded at the beginning of the operating system boot process (read [[UserDoc:How_AmigaOS_Works#AmigaOS_boot_procedure|here]]). You can find all them in the &#039;&#039;&#039;Kickstart&#039;&#039;&#039; directory in the system volume. Here is a list:&lt;br /&gt;
&lt;br /&gt;
=== Mandatory modules ===&lt;br /&gt;
&lt;br /&gt;
The following modules are required in any AmigaOS system. Without one of these, the system will not start.&lt;br /&gt;
&lt;br /&gt;
* kernel - The kernel works like a conductor in an orchestra. Its job is to make everything works together. It creates processes, handle memory usage, defines the way other components will access peripherals...etc. Note that the AmigaOS kernel is not based on any other kernel. It is a self made kernel that works since 1983.&lt;br /&gt;
* loader - this component handles the loading of all other kickstart modules&lt;br /&gt;
* battclock.resource.kmod - this module handles reading/writing the battery backed up clock which is used on all computers to keep the date and time&lt;br /&gt;
* bootimage - this is the boot picture. It is displayed during the start sequence of AmigaOS&lt;br /&gt;
* bootmenu.kmod - this component handles the Early Startup Menu the use can use to define some settings before starting AmigaOS&lt;br /&gt;
* con-handler.kmod - it directs the read and write requests to the console window, to a serial AUX: device or any other supported interface&lt;br /&gt;
* console.device.kmod - it opens a window and reads/writes text to and from that window&lt;br /&gt;
* diskboot.kmod - handles the booting of AmigaOS from a supported disk&lt;br /&gt;
* diskboot.config - this is a text file experienced users can modify to change the boot behaviour of AmigaOS&lt;br /&gt;
* dos.library.kmod - this module is a collection of functions that any program can use to perform actions on disks, files and directories&lt;br /&gt;
* elf.library.kmod - handles the loading of executable programs&lt;br /&gt;
* env-handler.kmod - handles the read/writes of environment variables&lt;br /&gt;
* FileSystem.resource.kmod - handles the use of the different filesystems&lt;br /&gt;
* gadtools.library.kmod - collection of functions used to create all graphic objects like gadgets, sliders, menus...&lt;br /&gt;
* gameport.device.kmod - handles the read/writes of game pads and joysticks&lt;br /&gt;
* graphics.library.kmod - collection of functions used to draw graphic elements on the monitor&lt;br /&gt;
* hunk.library.kmod - set of functions to read a data stream into memory&lt;br /&gt;
* input.device.kmod - handles of input events like keyboard events or mouse clicks&lt;br /&gt;
* intuition.library.kmod - collection of functions to create and handle all graphic elements (screens, windows, the mouse pointer...)&lt;br /&gt;
* layers.library.kmod - set of functions to be used to handle different layers in graphic operations&lt;br /&gt;
* keyboard.device.kmod - driver for the keyboard&lt;br /&gt;
* keymap.library.kmod - functions to handle different keymaps&lt;br /&gt;
* newlib.library.kmod - collection of functions to perform memory operations (allocating memory, copying memory areas... )&lt;br /&gt;
* nonvolatile.library.kmod - provides a simple means for an application developer to manage nonvolatile storage&lt;br /&gt;
* nvram.resource.kmod - handles the read/writes to the EEPROM chip present on many AmigaOS computers&lt;br /&gt;
* PCIGraphics.card - driver that supports the use of different graphic cards&lt;br /&gt;
* ram-handler.kmod - functions that handles the &#039;&#039;&#039;Ram disk:&#039;&#039;&#039; special disk&lt;br /&gt;
* ramdrive.device.kmod - device that allows the usage of the ramdrive device &#039;&#039;&#039;RAD:&#039;&#039;&#039; disk&lt;br /&gt;
* ramlib.kmod - loads disk based libraries and devices for exec.library&lt;br /&gt;
* rtg.library - library of functions perform lowlevel graphic operations on graphic cards&lt;br /&gt;
* shell.kmod - the AmigaOS command line interface&lt;br /&gt;
* strap.kmod - module that handles booting on different disk devices&lt;br /&gt;
* timer.device.kmod - driver to give access to timing functions&lt;br /&gt;
&lt;br /&gt;
=== Filesystem support ===&lt;br /&gt;
&lt;br /&gt;
These kickstart modules can be loaded or left aside. If you want to use a particular filesystem on your disk partitions, you need to load the corresponding filesystem module.&lt;br /&gt;
&lt;br /&gt;
* CDFileSystem - handles the CD-ROM disks with data stored in different formats: ISO9660, HFS...&lt;br /&gt;
* SmartFilesystem - allows to store data on partitions in SFS0 and SFS2&lt;br /&gt;
* JXFileSystem - allows to create partitions in JXFS&lt;br /&gt;
* FastFileSystem - allows the usage of partitions in FFS and FFS2 layouts&lt;br /&gt;
* diskcache.library.kmod - component required by the SmartFileSystem and JXFileSystem modules&lt;br /&gt;
&lt;br /&gt;
=== Hardware drivers ===&lt;br /&gt;
&lt;br /&gt;
==== Graphic cards drivers ====&lt;br /&gt;
&lt;br /&gt;
* 3dfxVoodoo.chip&lt;br /&gt;
* 3DLabsPermedia2.chip&lt;br /&gt;
* ATIRadeon.chip&lt;br /&gt;
* RadeonHD.chip&lt;br /&gt;
* siliconmotion502.chip&lt;br /&gt;
&lt;br /&gt;
==== Disk drivers ====&lt;br /&gt;
&lt;br /&gt;
Each of these drivers allow the use of disks connected to a disk controller. These files are named with the name of the controller they support. As an example, the &#039;&#039;&#039;sii3114ide.device.kmod&#039;&#039;&#039; allows to use disks connected on a &#039;&#039;&#039;Silicon Image SiI3114&#039;&#039;&#039; controller chip.&lt;br /&gt;
&lt;br /&gt;
* it8212ide.device.kmod&lt;br /&gt;
* lsi53c8xx.device.kmod&lt;br /&gt;
* sam460sata.device.kmod&lt;br /&gt;
* sii3112ide.device.kmod&lt;br /&gt;
* sii3512ide.device.kmod&lt;br /&gt;
* sii3114ide.device.kmod&lt;br /&gt;
* sii0680ide.device.kmod&lt;br /&gt;
* sii3132ide.device.kmod&lt;br /&gt;
&lt;br /&gt;
==== USB drivers ====&lt;br /&gt;
&lt;br /&gt;
* hub.usbfd&lt;br /&gt;
* usbsys.device&lt;br /&gt;
* usbresource.library&lt;br /&gt;
* ehci.usbhcd&lt;br /&gt;
* ohci.usbhcd&lt;br /&gt;
* uhci.usbhcd&lt;br /&gt;
* massstorage.usbfd&lt;br /&gt;
&lt;br /&gt;
==== Other drivers ====&lt;br /&gt;
&lt;br /&gt;
* bootkeyboard.usbfd - allows a USB keyboard to be used even before the USB stack is loaded&lt;br /&gt;
* bootmouse.usbfd - allows a USB mouse to be used even before the USB stack is loaded&lt;br /&gt;
* fpga.resource.kmod - allows to use the FPGA components which are present on some Amiga computers&lt;br /&gt;
* i2c.resource.kmod - allows to use the i2c interface present on some Amiga computers&lt;br /&gt;
* xena.resource.kmod - provides access to the Xena chip on the AmigaOne X1000&lt;br /&gt;
&lt;br /&gt;
=== Misc modules ===&lt;br /&gt;
&lt;br /&gt;
* petunia.library.kmod - this module contains the Just-In-Time emulator that allows AmigaOS to run programs made for the Motorola 68k processor&lt;br /&gt;
&lt;br /&gt;
== System components ==&lt;br /&gt;
&lt;br /&gt;
[[File:Workbench_directory_listing.png|frame|right|List of directories and files present at the root of any AmigaOS system]]&lt;br /&gt;
&lt;br /&gt;
Beside the kickstart modules, AmigaOS uses many different components that can be loaded only when used. These files are stored in different directories in the system volume.&lt;br /&gt;
Here is described a default AmigaOS installation.&lt;br /&gt;
&lt;br /&gt;
* C&lt;br /&gt;
This directory contains AmigaDOS &#039;&#039;&#039;C&#039;&#039;&#039;ommands&lt;br /&gt;
* Classes&lt;br /&gt;
contains different object elements easy to be used in any program: gadgets, requesters, graphic table, windows...&lt;br /&gt;
* Devs&lt;br /&gt;
contains definition for &#039;&#039;&#039;Dev&#039;&#039;&#039;ices&lt;br /&gt;
* Emulation&lt;br /&gt;
contains files used for the 68k emulation (though E-UAE)&lt;br /&gt;
* Fonts&lt;br /&gt;
contains various systems fonts&lt;br /&gt;
* Internet&lt;br /&gt;
contains a dialer to connect to Internet&lt;br /&gt;
* Kickstart&lt;br /&gt;
contains the kickstart modules&lt;br /&gt;
* L&lt;br /&gt;
contains hand&#039;&#039;&#039;l&#039;&#039;&#039;ers and filesystems&lt;br /&gt;
* Libs&lt;br /&gt;
contains dynamic &#039;&#039;&#039;Libr&#039;&#039;&#039;airies of functions&lt;br /&gt;
* Locale&lt;br /&gt;
contains all files used to localise the system (catalogs, keymaps...)&lt;br /&gt;
* MUI&lt;br /&gt;
contains the needed files for programs that use the MUI third party graphic interface&lt;br /&gt;
* [[Prefs]]&lt;br /&gt;
contains the preference programs used to customise AmigaOS&lt;br /&gt;
* S&lt;br /&gt;
contains the &#039;&#039;&#039;S&#039;&#039;&#039;cripts&lt;br /&gt;
* SObjs&lt;br /&gt;
contains .so shared object library files&lt;br /&gt;
* Storage&lt;br /&gt;
contains other optional files&lt;br /&gt;
* System&lt;br /&gt;
contains some programs used by the system itself (i.e. you don&#039;t need to run them yourself) or low-level programs like disk tools&lt;br /&gt;
* [[Utilities]]&lt;br /&gt;
contains several programs you can use to achieve some tasks on AmigaOS&lt;br /&gt;
&lt;br /&gt;
= Motorola 680x0 Emulators =&lt;br /&gt;
&lt;br /&gt;
For a long time Amigas have had the famous Motorola 680x0 processors as the central unit for execution. Unfortunately the time of the 680x0 series is passing in favor of other architectures. The new era of processors reached the Amiga some time ago, when expansion boards became available for extending the Classic systems with the raw power of a PowerPC processor.&lt;br /&gt;
&lt;br /&gt;
In the old operating system (AmigaOS 3.x) it was not possible to gain the full advantage of the new processors. The system itself and most of the applications required the original Motorola 680x0 processor. There was no 680x0 emulation available for the PowerPCs, so the 680x0 could not be &amp;quot;switched off&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Thus the new processors remained as a powerful, but mostly unused adjunct to the main 680x0 processor. &amp;quot;Native&amp;quot; PowerPC programs were rare, and every time a PowerPC program called the system, a so called &amp;quot;context switch&amp;quot; occurred between the 680x0 and PowerPC code, often causing a large performance penalty.&lt;br /&gt;
&lt;br /&gt;
The new Amiga platform is based on the PowerPC processor family, therefore the new version of the AmigaOS has to smooth the transition from the 680x0 series, which is achieved by emulating the old processor architecture. The operating system itself is written almost 100 percent for the PowerPC processors, but the 680x0 legacy applications require an emulated 680x0 processor. &lt;br /&gt;
&lt;br /&gt;
== Two 680x0 Emulators ==&lt;br /&gt;
&lt;br /&gt;
In version 4.0 of AmigaOS, two different emulators were implemented; one is the successor of BlackBox emulation, it is an interpretive emulator, thus the emulation speed is mediocre. On the other hand it has a very low &amp;quot;reaction time&amp;quot;, and is ideal for time critical parts, such as interrupts.&lt;br /&gt;
&lt;br /&gt;
The other is Petunia, the &amp;quot;JIT emulator&amp;quot;. A fast, but less compatible way of emulation of the legacy Motorola processors. It is intended mainly for emulating applications, and therefore, when execution of the application leaves the bounds of the application&#039;s code segment, emulation falls back to the interpretive method, where it does its job and returns to the JIT emulation again.&lt;br /&gt;
&lt;br /&gt;
Dynamic recompilation (also called just-in-time compilation or simply JIT compilation) is a technique of translating foreign processor machine code to native machine code, &amp;quot;on the fly&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This technique is common nowadays, commonly applied in JAVA virtual machines, and it is also used with success in several emulators. In dynamic recompilation there is the possibility of runtime optimization of the emulated code by collecting statistics of the execution process. Therefore (theoretically) the final executed code can be even faster than the original code on its original processor.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
Emulated opcodes:&lt;br /&gt;
* all user and supervisor level opcodes of the Motorola 68040&lt;br /&gt;
* all FPU opcodes of the Motorola 68881/68882 &lt;br /&gt;
&lt;br /&gt;
AmigaOS claims only 68020/68881 compatibility to applications because this is the safest compatibility level, but both emulators are compatible with the machine code up to the level of 68040/060 processors.&lt;br /&gt;
&lt;br /&gt;
At compile time, a low level flag and branch control analysis allows on-the-fly optimizations of compiled code.&lt;br /&gt;
&lt;br /&gt;
== Removing the JIT Emulator ==&lt;br /&gt;
&lt;br /&gt;
Using the dynamic translation requires a lot more memory than the interpretive emulation. The translated code needs to be stored somewhere, not to mention the data collection tables.&lt;br /&gt;
&lt;br /&gt;
If speed is not as important as the memory consumption of the system, then the JIT emulator can be removed, leaving the job to the interpretive emulator.&lt;br /&gt;
&lt;br /&gt;
Thanks to the modular design of AmigaOS kickstart, all you need to do is edit the &amp;quot;Sys:Kickstart/Kicklayout&amp;quot; file, simply put a semicolon (;) at the beginning of the module line of Petunia.library.kmod. After rebooting the system from cold, the JIT emulator will not be reloaded. Make sure that you alter the appropriate configuration in the Kicklayout file, there may be several alternative configurations, with different names like &amp;quot;DefaultJIT&amp;quot;, or &amp;quot;DefaultNoJIT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Configuring the Emulators ==&lt;br /&gt;
&lt;br /&gt;
Petunia cooperates with a so called &amp;quot;black list&amp;quot;. By default Petunia emulates every 680x0 program or library that is loaded by DOS.library/LoadSeg function, but if an executable or library shows incompatibilities with Petunia, then it can be explicitly inhibited from the dynamic recompilation by specifying it in a list file.&lt;br /&gt;
&lt;br /&gt;
If an executable needs to be added to the list, then it can be done by extending the file &amp;quot;DEVS:applications.dos&amp;quot; with the &#039;&#039;&#039;Compatibility&#039;&#039;&#039; preferences program from the Prefs drawer of the system. Adding a program name to the list and checking it will prevent Petunia from emulating that program, and it will be interpreted instead by the built-in interpreter.&lt;br /&gt;
&lt;br /&gt;
Removing a program from the list or unchecking (thus allowing Petunia to emulate it again) can be done with the same preferences program.&lt;br /&gt;
&lt;br /&gt;
Please note: some programs consist of multiple executables (shared libraries, plugins). If you want to fully disable the translation of such programs, then every part must be added to the list.&lt;br /&gt;
&lt;br /&gt;
For example to disable UnArc fully, you would have to add all files from libs:xad and also xadmaster.library to the list. &lt;br /&gt;
&lt;br /&gt;
= AmigaOS boot procedure =&lt;br /&gt;
&lt;br /&gt;
Basically a computer with AmigaOS does the following when the power button is pushed:&lt;br /&gt;
&lt;br /&gt;
* [[File:Uboot.jpg|200px]]&lt;br /&gt;
the BIOS ([[UserDoc:BIOS|Uboot]] or [[UserDoc:BIOS|CFE]]) of the computer initialises the hardware: graphic card, USB ports... At this point, the monitor wakes up and the first information are displayed. This allows to see if hardware is correctly recognised. As an example you can see if a hard drive is correctly connected into the machine and your BIOS is correctly setup to make this drive useable.&lt;br /&gt;
* depending on how you setup the BIOS it will look on the harddisk to find the Second Level Booter (SLB). This program is stored on the first sectors of the disk. Whereas the BIOS does not know about AmigaOS disk structure, the SLB will be able to &#039;&#039;understand&#039;&#039; the AmigaOS partitions and files. In other words, it is the link between the BIOS and the rest of the boot procedure. Its goal is also to give you the ability to start several configurations present on the same drive.&lt;br /&gt;
* [[File:SLB.png|200px]]&lt;br /&gt;
the SLB will analyses all Amiga partitions on the disk it is installed on. It will read each [[UserDoc:kickstart_configuration|system configuration]] it finds on the partitions. It will show all available configurations for the user to select one to load.&lt;br /&gt;
The user can define many different kickstart configurations to choose from. Also both AmigaOS and Linux can be selected for boot.&lt;br /&gt;
* [[File:Kmods loading.png|200px]]&lt;br /&gt;
the SLB loads the kickstart files of the selected configuration and executes the &#039;&#039;&#039;Loader&#039;&#039;&#039; module&lt;br /&gt;
* &#039;&#039;&#039;Loader&#039;&#039;&#039; executes the kickstart modules (Exec, devices, libraries...)&lt;br /&gt;
* AmigaOS becomes alive displaying the AmigaOS boot picture on the monitor&lt;br /&gt;
* the AmigaDOS library executes the [[UserDoc:System_Scripts#startup-sequence|startup-sequence]] script found on the system volume&lt;br /&gt;
* the Startup-sequence will be executed and all commands it contains are executed. It means that starting from here the boot procedure is easy to follow and understand.&lt;br /&gt;
* the Workbench is started&lt;br /&gt;
&lt;br /&gt;
At this point the user can use his/her computer.&lt;br /&gt;
&lt;br /&gt;
= How to make a Bootable USB Memory Stick for AmigaOS 4.1 =&lt;br /&gt;
&lt;br /&gt;
By Julian Margetson (&amp;quot;Spectre660&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Prerequisites:&lt;br /&gt;
* USB memory stick of 2 GB or less in size.&lt;br /&gt;
* It is best to only have one USB mass storage device connected while you are creating your bootable USB memory stick.&lt;br /&gt;
* Plug the USB memory stick into a USB port on your machine.&lt;br /&gt;
* Note that the device will be formatted so make sure that you use an empty memory stick or one that does not contain any data that you need or backup the contents before you begin.&lt;br /&gt;
&lt;br /&gt;
Procedure:&lt;br /&gt;
# You use Media Toolbox in the System: drawer to prepare the USB stick. On starting Media Toolbox select &#039;&#039;usbdisk.device&#039;&#039; as the device to use.&lt;br /&gt;
# Make certain that you have selected usbdisk.device and not any other device.&lt;br /&gt;
# Click on &amp;quot;Start&amp;quot;&lt;br /&gt;
# You will see the usb mass storage unit connected in a list.&lt;br /&gt;
# Make sure that the Unit type displayed for the USB memory stick is &amp;quot;Removable hard disk&amp;quot;&lt;br /&gt;
# Select that Unit by clicking on it.&lt;br /&gt;
# The first thing that you need to do is to install the RDB onto the USB Memory Stick.&lt;br /&gt;
# Click on the  &amp;quot;Install&amp;quot; button.&lt;br /&gt;
# A window Labeled &amp;quot;RDB/disk geometry editing&amp;quot; comes up.&lt;br /&gt;
## Towards the bottom of the window is the &amp;quot;AmigaOne boot code (SLB)&amp;quot; section.&lt;br /&gt;
## Select the &amp;quot;Install&amp;quot; button .&lt;br /&gt;
## A file requester  &amp;quot;Select AmigaOne Boot Code&amp;quot; now comes  up with the Drawer choice defaulting to &amp;quot;l:&amp;quot;&lt;br /&gt;
## Select file &amp;quot;slb_v2&amp;quot;. &lt;br /&gt;
## Select Ok.&lt;br /&gt;
## You are now returned to the &amp;quot;RDB/disk geometry editing window&amp;quot;.&lt;br /&gt;
## Select &amp;quot;Ok-accept changes&amp;quot;.&lt;br /&gt;
# You are now returned to the display showing the attached USB unit.&lt;br /&gt;
# Select &amp;quot;Edit partitions and Filesystems&amp;quot;. You will now see the Window &#039;Editing partitions for disk&amp;quot;&lt;br /&gt;
# Select &amp;quot;Add partition&amp;quot;&lt;br /&gt;
# This defaults to using the whole device as a single partition.&lt;br /&gt;
# It is possible to use create more partitions but for this tutorial we will only use one.&lt;br /&gt;
# You now need to give the partition a unique name (e.g. USB0 or something that is different from any of the existing partitions on your hard drive). This is done by changing the default DH0 in the &amp;quot;Name&amp;quot; box.&lt;br /&gt;
# Now make sure that the Boxes &amp;quot;Automount&amp;quot; and &amp;quot;Bootable&amp;quot; are  selected and show the &amp;quot;Tick mark&amp;quot;.&lt;br /&gt;
# You need to set &amp;quot;Boot priority&amp;quot; to higher than the boot priority of your hard drive boot partition(s). This is done by increasing Boot priority by clicking on the &amp;quot;+&amp;quot; to the right of the &amp;quot;boot priority&amp;quot; box. Normally you can set the boot priority to 2 .&lt;br /&gt;
# Next it is time to select the file system to use.&lt;br /&gt;
# Select &amp;quot;Select filesystem/edit details&amp;quot;.&lt;br /&gt;
# The Window &amp;quot;Editing details for partition &#039;USB0&#039;&amp;quot;  ,or whatever partition name you used, comes up.&lt;br /&gt;
## Select the file system that you are going to use by selecting the pull down menu under &amp;quot;Filesystem chooser&amp;quot;.&lt;br /&gt;
## Only filesystems SFS/00 or SFS/02 will work for a bootable device.&lt;br /&gt;
## The option that gives the most flexibility at the moment is SFS/00 as a USB stick in this format can be read and written to using another compatible system in the event that you need to make modifications after it is created without a booting AmigaOS 4.1 machine.&lt;br /&gt;
## Next select Blocksize from the &amp;quot;Blocksize&amp;quot; pull down menu. 512 is the correct size to use.&lt;br /&gt;
## Now Select &amp;quot;Ok-accept changes&amp;quot;.&lt;br /&gt;
## Your are now returned to the &amp;quot;Edit partitions for disk&amp;quot; window.&lt;br /&gt;
## Again select &amp;quot;Ok-accept changes&amp;quot;&lt;br /&gt;
# You are now returned to the window showing the USB mass storage unit list.&lt;br /&gt;
# Select &amp;quot;Save to disk&amp;quot;&lt;br /&gt;
# A requester pops up with the options &amp;quot;Yes, Save.&amp;quot; or &amp;quot;No!&amp;quot;&lt;br /&gt;
# Select the &amp;quot;Yes, save.&amp;quot; option.&lt;br /&gt;
# You now close Media Toolbox by clicking on the close icon (X) on the left of the Media Toolbox window.&lt;br /&gt;
# This will give you a requester advising that you need to reboot the machine for the changes to take effect. At this point you need to remove the USB memory stick for the machine. If you do not then the Machine will attempt boot from it before it is formatted and the required Kickstart and AmigaOS 4.1 files are copied to it.&lt;br /&gt;
# Select &amp;quot;Yes, reboot NOW!&amp;quot;.&lt;br /&gt;
# Once you have rebooted connect your USB Memory Stick to a USB port.&lt;br /&gt;
# A disk icon &amp;quot;USB0:Uninitialized&amp;quot; (or whatever partition name you used) appears on Workbench.&lt;br /&gt;
# You now need to format the device.&lt;br /&gt;
# To format Select this Icon and go to the Workbench &amp;quot;Icons&amp;quot; menu .&lt;br /&gt;
# Select &amp;quot;Format Disk&amp;quot;&lt;br /&gt;
# You can give the USB Memory Stick a unique name and  select whether you want a Trashcan or not.&lt;br /&gt;
# You can use either a full Format or a  Quick Format. Full Format may take a few minutes.&lt;br /&gt;
# Once formatted the USB Memory Stick is ready for you to copy the required files from you hard drive or AmigaOS Install CD to it in order to boot AmigaOS 4.1 from it.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Wiki_Author_Credits&amp;diff=7732</id>
		<title>Wiki Author Credits</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Wiki_Author_Credits&amp;diff=7732"/>
		<updated>2014-06-10T14:18:01Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: Added my own name :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a list of known contributors to this wiki:&lt;br /&gt;
* Adam Levin&lt;br /&gt;
* Alexandre Balaban&lt;br /&gt;
* [http://amigaak.org.nz/ Amiga Auckland]&lt;br /&gt;
* Andy Finkel&lt;br /&gt;
* Bart Whitebook&lt;br /&gt;
* Bill Borsari&lt;br /&gt;
* Bill Koester&lt;br /&gt;
* Bob Burns&lt;br /&gt;
* Bob Pariseau&lt;br /&gt;
* Bruce Barrett&lt;br /&gt;
* Bryce Nesbitt&lt;br /&gt;
* Carl Sassenrath&lt;br /&gt;
* Carolyn Scheppner&lt;br /&gt;
* Chris Green&lt;br /&gt;
* Chris Ludwig&lt;br /&gt;
* Chris Raymond&lt;br /&gt;
* Dale Luck&lt;br /&gt;
* Dan Baker&lt;br /&gt;
* Daniel Jedlicka&lt;br /&gt;
* Darius Taghavy&lt;br /&gt;
* Darren Greenwald&lt;br /&gt;
* Dave Berezowski&lt;br /&gt;
* Dave Lucas&lt;br /&gt;
* David Junod&lt;br /&gt;
* David Miller&lt;br /&gt;
* Don Cox&lt;br /&gt;
* Eric Cotton&lt;br /&gt;
* Ewout Walraven&lt;br /&gt;
* Frank Bunton, for his [http://aminet.net/package/docs/help/adosbegin AmigaDOS guide]&lt;br /&gt;
* Hans-Joerg Frieden&lt;br /&gt;
* James Jacobs&lt;br /&gt;
* Jerry Hartzler&lt;br /&gt;
* Jez San&lt;br /&gt;
* Jim Mackraz&lt;br /&gt;
* Joe Katz&lt;br /&gt;
* John Orr&lt;br /&gt;
* John Wiederhirn&lt;br /&gt;
* Karl Churchill&lt;br /&gt;
* Ken Farinsky&lt;br /&gt;
* Kevin Klop&lt;br /&gt;
* Larry Hildenbrand&lt;br /&gt;
* Leo Schwab&lt;br /&gt;
* [https://sites.google.com/site/takeaprogrammertolunch/ Lyle Hazelwood]&lt;br /&gt;
* Mark Barton&lt;br /&gt;
* Mark Ricci&lt;br /&gt;
* [http://wandel.ca/ Markus Wandel]&lt;br /&gt;
* Martin Taillefer&lt;br /&gt;
* Michael Sinz&lt;br /&gt;
* Nancy Rains&lt;br /&gt;
* Neil Kafferkey&lt;br /&gt;
* Neil Katin&lt;br /&gt;
* Olaf Barthel&lt;br /&gt;
* Paul Higginbottom&lt;br /&gt;
* Paul Sadlik&lt;br /&gt;
* Peter Cherna&lt;br /&gt;
* Philippe Ferrucci&lt;br /&gt;
* R.J. Mical&lt;br /&gt;
* Randell Jesup&lt;br /&gt;
* Ray Brand&lt;br /&gt;
* Rob Cranley&lt;br /&gt;
* Rob Peck&lt;br /&gt;
* Rob Wyesham&lt;br /&gt;
* Roman Kargin&lt;br /&gt;
* Sam Dicker&lt;br /&gt;
* Simon Archer&lt;br /&gt;
* Spencer Shanson&lt;br /&gt;
* Stan Shepard&lt;br /&gt;
* Steve Beats&lt;br /&gt;
* [http://www.solie.ca Steven Solie]&lt;br /&gt;
* Stuart Ferguson&lt;br /&gt;
* Susan Deyl&lt;br /&gt;
* Thomas Frieden&lt;br /&gt;
* Tom Pohorsky&lt;br /&gt;
* Tom Rokicki&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7731</id>
		<title>UserDoc:Introduction to AmigaOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7731"/>
		<updated>2014-06-05T14:50:55Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Pop-Up Menus */ &amp;quot;till&amp;quot; -&amp;gt; until.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Like any modern personal computer system, AmigaOS presents a graphic interface and relies on common peripherals to let the user control their system.  &lt;br /&gt;
Beyond most systems, AmigaOS provides more flexibility and options in how the user can approach, configure and use their Amiga computer.&lt;br /&gt;
&lt;br /&gt;
In this page we will describe the details of AmigaOS graphic user interface (GUI) - how screens, windows and gadgets are presented and how you can use them.&lt;br /&gt;
We will also describe the various means by which the user can control and operate AmigaOS.  In additional pages, you can read about  [[UserDoc:How AmigaOS Works|how AmigaOS works]]  and what its components are.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Input - Point, Click and Type ==&lt;br /&gt;
&lt;br /&gt;
There are two common ways you can use and control your AmigaOS system - by mouse and keyboard.  &lt;br /&gt;
&lt;br /&gt;
But AmigaOS also lets you control your system by other input devices (like touchscreens or voice recognition) depending on drivers and devices connected.  Depending on software installed, AmigaOS can also be remotely controlled by networked protocols (like VNC and Synergy).  Finally, AmigaOS can be controlled internal scripts set up by the User.&lt;br /&gt;
&lt;br /&gt;
=== Using the mouse ===&lt;br /&gt;
&lt;br /&gt;
[[File:Style2.5.png|frame|right]]&lt;br /&gt;
&lt;br /&gt;
Typically in AmigaOS, you use a mouse to act on graphic elements (like &amp;quot;gadgets&amp;quot;, &amp;quot;icons&amp;quot; or webpage &amp;quot;links&amp;quot;).  By default, AmigaOS expects and supports mice or trackball pointing devices with at least two buttons.  The left mouse button is used to &amp;quot;left-click&amp;quot; on graphic objects, to select them or operate them. The right mouse button is used to &amp;quot;right-click&amp;quot; and display the menus of the current application.&lt;br /&gt;
&lt;br /&gt;
Optionally, one can use a mouse or trackball device with three (a &amp;quot;middle&amp;quot; button) and four buttons.  With such devices, the functionality of the additional buttons can vary by application or environment.  These functionalities can typically be configured by the user in specific applications or within AmigaOS (globally).&lt;br /&gt;
&lt;br /&gt;
Furthermore, scroll wheels are supported by AmigaOS in a context-based fashion.  If the current application&#039;s window is scrollable, the scrollwheel will act on that area.  If the mouse pointer is positioned over a specifically scrollable gadget, the scrollwheel will affect that gadget.&lt;br /&gt;
&lt;br /&gt;
In some applications and environments, you can also &amp;quot;double-click&amp;quot; (click twice, quickly) with the left button on an object to engage them.  In the Workbench file manager, a single mouse click will only &amp;quot;select&amp;quot; an icon, whereas a double-click will open drawer/directory, run an application or open a file in an associated program.&lt;br /&gt;
&lt;br /&gt;
Beside &amp;quot;clicking&amp;quot; - pressing down and releasing a mouse button at a specific location - you can also perform what is known as &amp;quot;dragging&amp;quot;, which means clicking down and then moving the mouse around before releasing the mouse button.  This is typically always done with the left mouse button and is done to select objects (draw a box around them), to adjust a control slider or to resize a window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Using the keyboard ===&lt;br /&gt;
&lt;br /&gt;
Of course the keyboard is used to enter text into text editing areas.  But your keyboard can do so much more with its special &amp;quot;qualifier&amp;quot; keys and AmigaOS.&lt;br /&gt;
&lt;br /&gt;
The most common example of a qualifier key is the &amp;quot;Shift&amp;quot; key which causes typed text to be made upper-case or capitalized.  There are more qualifier keys on most keyboards, here is a list of all of them:&lt;br /&gt;
* &#039;&#039;&#039;the Shift keys&#039;&#039;&#039; - the common key that causes your text to be capitalized.&lt;br /&gt;
* &#039;&#039;&#039;The &amp;quot;Alternate&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Alt&amp;quot; keys typically to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Control&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Ctrl&amp;quot; keys also to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Amiga&amp;quot; keys&#039;&#039;&#039; - special &amp;quot;A&amp;quot; keys on the right and left side of the space bar.  Besides being unique to AmigaOS, the right and left Amiga keys always mean different things (unlike the rest of the qualifier keys, most of the time).  If you have a non-AmigaOS keyboard, the &amp;quot;Windows&amp;quot; or MacOS &amp;quot;Command&amp;quot; keys function as &amp;quot;Amiga&amp;quot; keys.&lt;br /&gt;
** &#039;&#039;&#039;the Right Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; within your current application.&lt;br /&gt;
** &#039;&#039;&#039;the Left Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; that are globally active anytime and anywhere in your AmigaOS system.&lt;br /&gt;
While all of these qualifier keys don&#039;t usually do anything on their own, when you press and hold one or more of these keys down while pressing regular keys, they can change what you type (capitalizing or making alternate characters) or become powerful &amp;quot;short-cuts&amp;quot; within your applications or throughout your entire AmigaOS system.&lt;br /&gt;
&lt;br /&gt;
The most famous short-cuts are the &#039;&#039;&#039;copy&#039;&#039;&#039;, &#039;&#039;&#039;cut&#039;&#039;&#039; and &#039;&#039;&#039;paste&#039;&#039;&#039; operations that you can perform on selected text:&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga C&#039;&#039;&#039; short-cut copies any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga X&#039;&#039;&#039; short-cut &amp;quot;cuts&amp;quot; any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga V&#039;&#039;&#039; short-cut &amp;quot;pastes&amp;quot; any text or content from the Clipboard into your application (at the current cursor location).&lt;br /&gt;
&lt;br /&gt;
== The AmigaOS GUI - Intuition ==&lt;br /&gt;
&lt;br /&gt;
When AmigaOS has started, you will typically see the Workbench file manager. This is the start of your experience with the AmigaOS GUI and its most basic elements: a screen with menus and windows containing icons and &amp;quot;gagdets&amp;quot;. These components are the basic building blocks of virtually all AmigaOS &amp;amp; application interfaces.&lt;br /&gt;
&lt;br /&gt;
As with most things in AmigaOS, almost all of the following components can also be almost infinitely reconfigured, adjusted and graphically varied by the user. In the AmigaOS &amp;quot;Preferences&amp;quot; drawer, the &amp;quot;GUI&amp;quot;, &amp;quot;ASL&amp;quot;, &amp;quot;Locale&amp;quot;, &amp;quot;Font&amp;quot;, &amp;quot;Palette&amp;quot;, &amp;quot;Poiner&amp;quot;, &amp;quot;PopUpMenu&amp;quot;, &amp;quot;Screens&amp;quot;, &amp;quot;Workbench&amp;quot; and &amp;quot;WBPattern&amp;quot; preference editors easily allow a user to reconfigure the look and feel of their Amiga&#039;s GUI in dramatic ways.&lt;br /&gt;
&lt;br /&gt;
AmigaOS also supports the use of alternate GUI systems in parallel with the default &amp;quot;Intuition&amp;quot; (aka &amp;quot;Reaction&amp;quot;) GUI system. By default AmigaOS also comes with the &amp;quot;Magic User Interface&amp;quot; system (&amp;quot;MUI&amp;quot;, a variant of the basic AmigaOS GUI system). Aside from Intuition, MUI can be reconfigured even more widely using its own MUI configuration app.&lt;br /&gt;
&lt;br /&gt;
Additionally, AmigaOS can use a number of third-party &amp;quot;cross-platform&amp;quot; GUI systems: &amp;quot;AmiCygnix&amp;quot; GUI system - a native X11 GUI implementation for AmigaOS - and a native port of the &amp;quot;Qt&amp;quot; GUI system. With either of these systems, it is possible to run ported applications compiled for AmigaOS, but running with these cross-platform GUI systems.&lt;br /&gt;
&lt;br /&gt;
To start with, we will explore the elements that make up the AmigaOS GUI system.&lt;br /&gt;
&lt;br /&gt;
=== Screens ===&lt;br /&gt;
&lt;br /&gt;
As start-up, the Workbench will be running on its &amp;quot;Workbench Screen&amp;quot;.  This will be the default location where most other application windows will also appear when started.&lt;br /&gt;
&lt;br /&gt;
Typically an AmigaOS screen will have a &amp;quot;title bar&amp;quot; across the top with a graphical &amp;quot;depth gadget&amp;quot; at the right end.  In the case of the Workbench screen, there will be an AmigaOS &amp;quot;boing ball&amp;quot; at the left end and the title bar will display certain system information (OS version, memory availability, etc.) Within the screen, the Workbench and any other applications can open windows, display icons and other GUI devices. If you right-click over the title bar, it becomes a &amp;quot;Menu Bar&amp;quot;, showing you the control menus that are available for that application.&lt;br /&gt;
&lt;br /&gt;
In many cases, other applications may open screens in addition to the Workbench screen. The &amp;quot;depth gadget&amp;quot; at the right end of each screen&#039;s title bar allows you to click from screen from screen. Besides clicking on the screen&#039;s depth gadet, AmigaOS also lets the user see other screens behind the front screen by &amp;quot;dragging&amp;quot; down on the screen title bar.&lt;br /&gt;
&lt;br /&gt;
The characteristics of the Workbench screen such as resolution and color depth can be configured in the &amp;quot;Screenmode&amp;quot; preferences editor. Other screens can be either be configured in the &amp;quot;Screens&amp;quot; preferences editor or from within individual applications. Typically, AmigaOS applications also give the user the choice of whether application runs on their own screens or the &amp;quot;public&amp;quot; Workbench screen.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
Windows are graphic containers that appear within AmigaOS screens. Windows can be created by any number of different applications - the Workbench, Shell sessions or applications. Outside of the Workbench file manager, each window usually reflects each individual running application. In some cases, one application may open multiple documents in separate windows or additional &amp;quot;requester&amp;quot; windows might appear for an application.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig4-1.png]]&lt;br /&gt;
&lt;br /&gt;
Almost all windows of AmigaOS will have these common elements:&lt;br /&gt;
* &#039;&#039;&#039;Borders&#039;&#039;&#039; - A border around the window&#039;s contents. Holding the Shift+Left-Amiga keys down while dragging any border will drag the window around.&lt;br /&gt;
* &#039;&#039;&#039;Title bar&#039;&#039;&#039; - A thicker top border that typically contains a name of the application or its contents. The area of the title bar acts as a &amp;quot;drag bar&amp;quot; which you can use to drag the window around the screen.&lt;br /&gt;
* &#039;&#039;&#039;Depth gadget&#039;&#039;&#039; - The right-most gadget in the top title bar that either pulls the window to front (if it isn&#039;t frontmost) or pushes it to the back (if it&#039;s in front). Holding down the Shift key while clicking this gagdet pushes the window to the back.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS, windows may also optionally have these additional features and elements:&lt;br /&gt;
* &#039;&#039;&#039;Close gadget&#039;&#039;&#039; - The left-most gadget in the title bar that closes the window.&lt;br /&gt;
* &#039;&#039;&#039;Scroll bar(s) and arrows&#039;&#039;&#039; - If the contents of the window can be scrolled in vertically and/or horizontally, there will be a scroll bar with arrow scroll buttons. These scroll bars can also be used if the mouse pointer is over a scroll bar and the mouse scroll wheel is used.&lt;br /&gt;
* &#039;&#039;&#039;Zoom gadget&#039;&#039;&#039; - the second gadget from the right-most of the title bar which switches the window between two sizes. Holding down the Shift key while clicking this gadget will make it fill the screen.&lt;br /&gt;
* &#039;&#039;&#039;Iconification gadget&#039;&#039;&#039; - left-most of the right-hand gadgets in the title bar which causes the window to disappear into an icon on the Workbench background - thus &amp;quot;Iconifying&amp;quot; the window or application.&lt;br /&gt;
* &#039;&#039;&#039;Sizing gadget&#039;&#039;&#039; - In the case of windows that can be resized, this is the gadget in the bottom right corner of the window that you can drag to resize the window.&lt;br /&gt;
&lt;br /&gt;
Each AmigaOS application can use many different combinations of these features in the make up of their windows.&lt;br /&gt;
&lt;br /&gt;
=== Menus ===&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-4.png|frame|right]]&lt;br /&gt;
Menus are lists of items that will allow you to see and use what commands are available in an application. The Workbench uses menus you can use to perform actions on the Workbench and its contents. Menus typically provide many more functions and commands than can be presented to the user than just graphic buttons, etc. within an application&#039;s window, as a result they are a primary way most applications are used.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS menus can always be found for the current application by moving the mouse to the top of the screen and holding down the right mouse button. The screen title bar will become a menu bar and will show the names of all the current application&#039;s menus.&lt;br /&gt;
&lt;br /&gt;
By dragging with the right mouse button, each menu will display its &amp;quot;menu items&amp;quot;. Each of those menu items corresponds to a command or setting, and can be selected by releasing the right mouse button while the desired menu item is highlighted. In some cases you will find a &amp;quot;check box&amp;quot; on a menu item which you can select to toggle a setting. In other cases, you will find that menu items have a little arrow head that indicates that item actually has a &amp;quot;sub-menu&amp;quot; - a menu within a menu. Menus ending with an ellipsis (&amp;quot;...&amp;quot;) indicate that menu item will open a window that can be cancelled without committing any command.  For those menu items that might be deactivated (they may not apply at the moment), they will be &amp;quot;greyed-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The labels of many menu items will also include a letter or two with an &amp;quot;A&amp;quot; at the right edge.  This indicates what the keyboard Right-Amiga &amp;quot;short cut&amp;quot; is the equivalent of using that menu item within that application. In the above screen shot, you can see that pressing the two keys - &amp;quot;Right-Amiga&amp;quot; and &amp;quot;N&amp;quot; - would do the same as that menu item - to create a new drawer.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Consistent Organization====&lt;br /&gt;
For the sake of consistency (when applicable), the first two AmigaOS menus of any application are typically organized with the following hierarchy and use these keyboard equivalents:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;First Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent: || &#039;&#039;&#039;Second Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent:&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PROJECT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  ||  ||&#039;&#039;&#039;EDIT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;New&#039;&#039;&#039;|| = Create new project in application.||Right-Amiga N||&#039;&#039;&#039;Cut&#039;&#039;&#039;|| = Cut the selected content into the Clipboard.||Right-Amiga X&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Open...&#039;&#039;&#039;|| = Open the file containing a project.||Right-Amiga O||&#039;&#039;&#039;Copy&#039;&#039;&#039;|| = Copy the selected content into the Clipboard.||Right-Amiga C&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save&#039;&#039;&#039;|| = Save the project to it&#039;s current file name.||Right-Amiga S||&#039;&#039;&#039;Paste&#039;&#039;&#039;|| = Paste the Clipboard contents into the project (at the current location).||Right-Amiga V&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save As...&#039;&#039;&#039;|| = Save the project to a file of a new name.|| ||&#039;&#039;&#039;Undo&#039;&#039;&#039;|| = Undo the last change to current project.||Right-Amiga Z&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Print&#039;&#039;&#039;|| = Print the current project.||Right-Amiga P||&#039;&#039;&#039;Redo&#039;&#039;&#039;|| = Restore the last change &amp;quot;undone&amp;quot; in the current project.|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Close&#039;&#039;&#039;|| = Close the project.|| || || ||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Quit&#039;&#039;&#039;|| = Quit the application.||Right-Amiga Q|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Menu Variations====&lt;br /&gt;
AmigaOS also includes some additional ways menus can be presented to the user:&lt;br /&gt;
&lt;br /&gt;
=====Pop-Up Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBPopUpMenu.jpg|frame|right]]&lt;br /&gt;
In the GUI preferences editor you can configure menus to &amp;quot;pop-up&amp;quot; under the mouse pointer whenever you right-click the mouse. This means you do not need to move the mouse to the top of the screen to use the menus. There are also options for making menus &amp;quot;sticky&amp;quot;, meaning that you don&#039;t need to drag the mouse to navigate the menus, but rather just right click and the menus stay open until you make a selection or click away.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Context Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBContextMenu.jpg|frame|right]]&lt;br /&gt;
The Workbench (with a utility added by default) and many applications provide &amp;quot;contextual menus&amp;quot;.  This means that you can put your mouse pointer over elements and right-click to pop-up a menu of things that are specific to the item you clicked over.  In the case of the Workbench (with the Context Menus utility), right clicking on a file will pop-up a menu of things that could be done with that file, like deleting it.&lt;br /&gt;
&lt;br /&gt;
All of these features provide both a simple means of using many functions within an application and at the same time allowing the user to configure a very efficient user interface that responds to nearly every whim.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Icons ===&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
Icons are small images which can represent a disk, a directory, an application file or data file. Icons are primarilly used within the AmigaOS Workbench environment to represent all the file system objects the user can manipulate. With these icons it is possible to select files, open them, delete them or move them around within the Workbench. Applications may also make more limited use of icons to represent file system objects or may be used as imagery in an &amp;quot;icon bar&amp;quot; of buttons that can be clicked to perform various actions represented by icon imagery, like the Clock above.&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[[File:LibDiskIcon.png|frame|left|100px|Drive icon]]  [[File:Icons.png|frame|right|Directory with sub-directory, data and application file icons]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AmigaOS also uses different icon imagery to indicate various types of icons - drives, directories, files and applications.  Drive or partition icons look like little hard drives.  &lt;br /&gt;
A directory icon will look like a cabinet &amp;amp; drawer whereas a file icon will be designed to give a clue about the file content.&lt;br /&gt;
Data files are normally shown with a &amp;quot;page&amp;quot; motif and some graphics or text to reflect the file type.&lt;br /&gt;
Application files typically have the most free-form graphics that reflect their purpose, name or developer.&lt;br /&gt;
&lt;br /&gt;
The user can also edit the icon imagery using the icon editor, change how icons react to being double-clicked and adjust parameters stored within the icon file that affect how the represented file will be used.&lt;br /&gt;
&lt;br /&gt;
Many applications and all AmigaOS file requesters allow Workbench icons to be &amp;quot;dragged and dropped&amp;quot; into the application or requester windows and the associated file will be recognized by the application, if possible.&lt;br /&gt;
&lt;br /&gt;
==== Icon states ====&lt;br /&gt;
&lt;br /&gt;
Icons can look different not only because of their image but also depending on their state.  &lt;br /&gt;
&lt;br /&gt;
As you can see in the directory example, the 2 top left icons appear semi-transparent. This subtle difference reflects whether the file or directory has an associated icon file with it. In AmigaOS, any directory or file can have such an icon file that stores a unique icon image, unique program settings or specific settings for that file or directory. That information can be adjusted within the Workbench and is automatically stored in a companion file with the same name, but with an added &#039;&#039;&#039;.info&#039;&#039;&#039; suffix.  &lt;br /&gt;
&lt;br /&gt;
While many files and directories and most applications have such &amp;quot;.info files&amp;quot; with them, they are not required and the Workbench can be set to show you &amp;quot;default icons&amp;quot; (based on the file types, etc.) so you can manipulate the corresponding objects. Of course, AmigaOS can also be configured on a directory-by-directory basis to only show files that have associated &amp;quot;.info&amp;quot; files.&lt;br /&gt;
&lt;br /&gt;
In the same picture, the two top right directory icons also look slightly different. While the &#039;&#039;&#039;Utilities selected&#039;&#039;&#039; and the &#039;&#039;&#039;Utilities unselected&#039;&#039;&#039; are the same icon, their image is a bit different. The drawer of the first one is slightly opened and there is a &amp;quot;glow&amp;quot; effect arround the first icon. These two visual clues show you the first directory icon has been selected by the user whereas the second one is not.&lt;br /&gt;
&lt;br /&gt;
==== App Icons ====&lt;br /&gt;
&lt;br /&gt;
Many applications provide the option to be &amp;quot;iconified&amp;quot; either by clicking on an iconification gadget in their window title bars or by selecting a menu item.  In those events, the application&#039;s window will disappear and an &amp;quot;app icon&amp;quot; will appear on the background of the Workbench screen.  Double-clicking on the app icon will cause the icon to disappear and the application&#039;s window to reappear.  Even while the application is iconified, it does continue to run and perform whatever the user may have it doing.&lt;br /&gt;
&lt;br /&gt;
Some applications may also place an app icon on the Workbench background even while the application is open to allow the user to be able to drop other file icons on the app icon and have them be used by the application.&lt;br /&gt;
&lt;br /&gt;
=== Graphic gadgets ===&lt;br /&gt;
Within AmigaOS and application windows, there can be any number of graphic devices meant to be operated by your mouse with clicks and drags - these are known as &amp;quot;gagdets&amp;quot;.  In most cases, the gagdets are simple analogs of real world objects - like buttons you press with your finger, forms you fill out with a pencil or tabs on folders.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig5-1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Buttons ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Buttons.jpg|frame|right]]&lt;br /&gt;
Buttons (or &amp;quot;Boolean gadgets&amp;quot;) are some of the most common GUI objects.  With a simple left-click of your mouse button, they are used to perform actions, set configurations or indicate choices.  &lt;br /&gt;
&lt;br /&gt;
In AmigaOS, clicking &amp;quot;down&amp;quot; on a button typically causes the button to be rendered differently, to reflect that it has been &amp;quot;pressed&amp;quot;.  Engaging the button is not actually recognized until you let go with the mouse button over the graphic gadget.  This means that while the gadget has been clicked down, you always have the option of moving the mouse off the button gadget and then letting go and it will be as though the button had never been &amp;quot;pressed&amp;quot; or clicked on.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Text gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-StringGadgets.jpg|frame|right]]&lt;br /&gt;
A text gadget (or &amp;quot;String gadget&amp;quot;) works like a space in a paper form to be filled out - left click in the gadget, you will see a cursor appear and you can type your answer.&lt;br /&gt;
Once you&#039;ve finished typing your infrormation, you can either press the enter, carriage-return or tab keys for your entry to be recognized.&lt;br /&gt;
&lt;br /&gt;
Text or string gadgets can also come in a number of variants for specific uses.  Some can limit input to be numeric only (and may have adjacent buttons to increment or decrement the value).  Some string gadgets may be specifically be meant for file or directory names and they have adjacent gagdets that will bring up a file requester to set the value.  Many times a numeric gadget is paired with a slider gadget (as in the example above), where the value can either be set by typing in the gadget or by using the slider.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Sliders &amp;amp; Scroll Bars ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-SliderGadgets.jpg|frame|right]]&lt;br /&gt;
Slider gadgets work like controls many of have seen on their stereo systems - left-click and drag on the gadget &amp;quot;knob&amp;quot;  to move it back and forth to set a value.  A more sophisticated variant of the slider is the &amp;quot;scroll bar&amp;quot; that has a variably sized scroll bar contained in a scroll box that lets you see what proportion of the active range is visible or active.&lt;br /&gt;
&lt;br /&gt;
With all slider and scroller gadgets AmigaOS also lets you click in the area to either side of the knob or slider to adjust the setting.  In the case of sliders, the value will typically move by a fixed amount (+/- 1 or some suitable increment).  In the case of scroll bars, clicking in the scroll box on either side of the scroll bar will cause the value to move in increments of the scroll bar size.  Scroll bars also come with &amp;quot;scroll arrows&amp;quot; at the end of the scroll box that allow for finer movement of the scroll bar.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Cycle gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CycleGadgets.jpg|frame|right]]&lt;br /&gt;
Cycle gagdets are a variant on buttons that let you select from a number of specific choices.  You can either click on the majority of the gadget to pop-up a list of choices to select from or click on the circular arrow to cycle between the list of choices.  Cycle gagdets rarely cause actions to occur, they just adjust some setting or configuration.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Check Box &amp;amp; Radio Button gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CheckRadioGadgets.jpg|frame|right]]&lt;br /&gt;
Another variant of buttons, check boxes can be clicked to set on/off or yes/no conditions with a checkmark, just like a check box in a paper form.  Radio buttons are another variant where two or more round buttons are presented in a set and only one of the set can be clicked and activated, like the buttons on a stereo system.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Tabs ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Tabs.jpg|frame|right]]&lt;br /&gt;
Tabs are a graphical gadget that is used in combination with a &amp;quot;pages&amp;quot; or sets of gadgets and/or information, and you can click on the &amp;quot;tabs&amp;quot; to switch between the pages - like you might in a real notebook with tabbed pages.  This provides a efficient way to present more information and settings in a compact interface.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
====Requesters====&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-5.png|frame|right]]&lt;br /&gt;
As one uses AmigaOS and its applications, from time to time a &amp;quot;Requester&amp;quot; window may appear to ask the user a question - basically windows with gadgets in them. Such requesters can appear to confirm an action, obtain more information, make a selection or configuration. Typically a series of buttons across the bottom of the window will dispatch the requester, with the bottom-left button gadget indicating some affirmative choice and the bottom-right button gagdet cancelling the requester (performing no action or change).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keyboard Operation of Gadgets====&lt;br /&gt;
As with so many things, AmigaOS and its applications provide a secondary way to operate many of these gadgets - by keyboard.  If a window contains text gadgets, pressing your keyboard&#039;s TAB key will activate the text gadgets in sequence (a cursor will appear in each so you can type &amp;amp; edit).  Each press of the TAB key will cycle to the next gadget and pressing SHIFT + TAB will cycle through the gadgets in reverse order.&lt;br /&gt;
&lt;br /&gt;
You may have noticed in many of the above sample images that many of the gagdets or their adjacent &amp;quot;label&amp;quot; texts contain a single underlined character.  This is a sign that pressing that key on your keyboard will activate that gadget.  Each gadget can then be operated by your keyboard - just like clicking on a button, clicking on a tab, setting a text or numeric value, etc.  Of course, if you are in the midst of typing in a text gadget, then things you type will go into that gadget instead of operating other gagdets.&lt;br /&gt;
&lt;br /&gt;
== Finding Files in AmigaOS ==&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-ASLReq.jpg|frame|right]]&lt;br /&gt;
AmigaOS provides a consistent method for navigating your file system and finding your files from within your apps - the &amp;quot;ASL file requester&amp;quot;.  It is used by everything in AmigaOS and most third party applications.  It is the window (or &amp;quot;requester&amp;quot;) that appears when you want to open or save files.&lt;br /&gt;
&lt;br /&gt;
As you can see, the ASL file requester presents the files in a given location in your file systems (a directory or &amp;quot;drawer&amp;quot;) and shows their size, date of creation or last modification and any comments attached to the file.  The above example shows the same directory as appeared above in this page.&lt;br /&gt;
&lt;br /&gt;
At the bottom corners of the window are buttons to accept the selection (&amp;quot;OK&amp;quot;) or cancel the requester.  Between those are buttons to view all the drives &amp;amp; partitions on your system (&amp;quot;Volumes&amp;quot;) or to move to the &amp;quot;Parent&amp;quot; of the current directory.&lt;br /&gt;
&lt;br /&gt;
Also at the bottom of the window you will see three text gadgets.  The first of these is optional and allows you to filter what is shown in the file list - it is now shown filtering out any file with a &amp;quot;.info&amp;quot; suffix (those are AmigaOS icon files).  The next two lines reflect the current directory path name and the currently selected file name (also selected in the file list above).  In the case of saving files, you would type any name you wanted in the bottom text field to create a new file.  Clicking on the titles of the file list will let you sort the file list.&lt;br /&gt;
&lt;br /&gt;
Of course this being AmigaOS, the ASL requester has its own &amp;quot;preferences editor&amp;quot; that lets you set how the requester appears, is sorted by default and a number of mouse button short-cuts.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Controlling AmigaOS - Which Way? ==&lt;br /&gt;
&lt;br /&gt;
AmigaOS provides a number of parallel ways that the user can control and put their Amigas to use.  The easiest and most common method is to use the AmigaOS graphic icons, windows and mouse interface - the &amp;quot;Workbench&amp;quot; - using all the GUI elements described above.  But AmigaOS also provides a more traditional or &amp;quot;old fashioned&amp;quot; method called a command line interface (the &amp;quot;CLI&amp;quot; or &amp;quot;Shell&amp;quot;), where the user can type text commands and interact using a text interface.  AmigaOS also provides a unique means of &amp;quot;interprocess communications&amp;quot; where user can have many applications and parts of the OS &amp;quot;talk&amp;quot; to each other. &lt;br /&gt;
&lt;br /&gt;
=== The Workbench &amp;amp; Intuition ===&lt;br /&gt;
&lt;br /&gt;
As we described above, AmigaOS provides the &amp;quot;Workbench&amp;quot;, a straightforward, efficient and easy graphical means to start applications, manage your computer and all your files.   Files and programs are represented with icons, generally known as &amp;quot;Projects&amp;quot; and &amp;quot;Tools&amp;quot;.  They can be stored in any arrangement of directories (&amp;quot;Drawers&amp;quot;).  You double-click on a program icon and it will open in a Intuition GUI window on your Workbench screen. &lt;br /&gt;
&lt;br /&gt;
Please see the section about the AmigaOS [http://wiki.amigaos.net/index.php/UserDoc:Workbench Workbench] to learn these concepts:&lt;br /&gt;
&lt;br /&gt;
* What is the Workbench&lt;br /&gt;
* Workbench menus&lt;br /&gt;
* Keyboard control&lt;br /&gt;
* Workbench requesters&lt;br /&gt;
* Configuration&lt;br /&gt;
* Workbench help&lt;br /&gt;
&lt;br /&gt;
=== The Shell &amp;amp; DOS Commands ===&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Window-Shell.jpg|frame|right]]&lt;br /&gt;
The AmigaOS Shell can be opened by double-clicking the &amp;quot;Shell&amp;quot; icon in the AmigaOS &amp;quot;System&amp;quot; drawer.  The Shell is a text based interface that allows you to perform most of the same operations as the Workbench - to run and interact with application programs, manage files and control your Amiga computer.  AmigaOS also comes with dozens of standard &amp;quot;DOS commands&amp;quot; (programs purely meant for Shell usage).  Simply enter the name of a program or command (like &amp;quot;dir&amp;quot;) and press Enter, the command or program will run and it will print its results in the Shell window.  While considered old fashioned, many users find the Shell to still be the most efficient way to perform many tasks on the Amigas.&lt;br /&gt;
&lt;br /&gt;
Please see the section on the [[UserDoc:Shell|AmigaOS Shell]] to learn more.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Scripts &amp;amp; Messages ===&lt;br /&gt;
&lt;br /&gt;
Scripts are simple text files that contain a list of commands written in a variety of languages: the AmigaDOS, Arexx and Python languages are provided with AmigaOS - there are many others.  Each of these language has its strengths.  You&#039;ll have to learn the one that suits what you want to do.  You can create a script using a text editor. You can run such scripts from the Workbench or from the shell (or from any other script). By using ARexx ports provided by AmigaOS components (the Workbench or Multiview, for example) or third-party applications, scripts can be used to make your computer perform a wide variety of actions.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS System Tools ==&lt;br /&gt;
AmigaOS comes with a variety of programs to help in the preparation of your computer.  These include tools for:&lt;br /&gt;
&lt;br /&gt;
* Drive preparation (Media Toolbox, Format, Format DCRW &amp;amp; Mounter).&lt;br /&gt;
* Font Handling (TypeManager &amp;amp; FixFonts).&lt;br /&gt;
* Script Languages (RexxMast and Python).&lt;br /&gt;
* The Shell.&lt;br /&gt;
* Miscellaneous Utilities (Find, Help, Grim Reaper &amp;amp; Ringhio Server).&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Utilities ==&lt;br /&gt;
AmigaOS comes with a selection of utilities to assist the user, including:&lt;br /&gt;
&lt;br /&gt;
* Commodities.&lt;br /&gt;
* Editors (Notepad, MEmacs, PrefsObjectEditor &amp;amp; IconEdit).&lt;br /&gt;
* Postscript oriented apps (AmiPDF, AmiGS &amp;amp; Ghostscript).&lt;br /&gt;
* Disk apps (PartitionWizard &amp;amp; RawDisk).&lt;br /&gt;
* Screenblankers.&lt;br /&gt;
* AmiDock and Dockies.&lt;br /&gt;
* The Unarc dearchiver.&lt;br /&gt;
* PlayCD.&lt;br /&gt;
* Several &amp;quot;sub-programs&amp;quot; that are used by other system utilities (blankers, dockies)&lt;br /&gt;
* Miscellaneous apps (Clock, printing apps, KeyShow, install apps, etc.).&lt;br /&gt;
&lt;br /&gt;
Read [[Utilities|here]] to find all of them explained further.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Preferences ==&lt;br /&gt;
AmigaOS comes with a number of small programs used for modifying the system&#039;s settings. These are stored in the [[Prefs]] drawer, and include programs for modifying the following settings:&lt;br /&gt;
&lt;br /&gt;
* General appearance&lt;br /&gt;
* Screen resolution&lt;br /&gt;
* Desktop and window backgrounds&lt;br /&gt;
* Language settings&lt;br /&gt;
* Keyboard and mouse settings&lt;br /&gt;
* Printer settings&lt;br /&gt;
* Audio settings&lt;br /&gt;
&lt;br /&gt;
Read [[Prefs|here]] for details and explanations of all the preference programs.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7730</id>
		<title>UserDoc:Introduction to AmigaOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7730"/>
		<updated>2014-06-05T14:49:57Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* The AmigaOS GUI - Intuition */ Various spelling and grammar corrections and some rewording. Clarified some aspects of menu operation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Like any modern personal computer system, AmigaOS presents a graphic interface and relies on common peripherals to let the user control their system.  &lt;br /&gt;
Beyond most systems, AmigaOS provides more flexibility and options in how the user can approach, configure and use their Amiga computer.&lt;br /&gt;
&lt;br /&gt;
In this page we will describe the details of AmigaOS graphic user interface (GUI) - how screens, windows and gadgets are presented and how you can use them.&lt;br /&gt;
We will also describe the various means by which the user can control and operate AmigaOS.  In additional pages, you can read about  [[UserDoc:How AmigaOS Works|how AmigaOS works]]  and what its components are.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Input - Point, Click and Type ==&lt;br /&gt;
&lt;br /&gt;
There are two common ways you can use and control your AmigaOS system - by mouse and keyboard.  &lt;br /&gt;
&lt;br /&gt;
But AmigaOS also lets you control your system by other input devices (like touchscreens or voice recognition) depending on drivers and devices connected.  Depending on software installed, AmigaOS can also be remotely controlled by networked protocols (like VNC and Synergy).  Finally, AmigaOS can be controlled internal scripts set up by the User.&lt;br /&gt;
&lt;br /&gt;
=== Using the mouse ===&lt;br /&gt;
&lt;br /&gt;
[[File:Style2.5.png|frame|right]]&lt;br /&gt;
&lt;br /&gt;
Typically in AmigaOS, you use a mouse to act on graphic elements (like &amp;quot;gadgets&amp;quot;, &amp;quot;icons&amp;quot; or webpage &amp;quot;links&amp;quot;).  By default, AmigaOS expects and supports mice or trackball pointing devices with at least two buttons.  The left mouse button is used to &amp;quot;left-click&amp;quot; on graphic objects, to select them or operate them. The right mouse button is used to &amp;quot;right-click&amp;quot; and display the menus of the current application.&lt;br /&gt;
&lt;br /&gt;
Optionally, one can use a mouse or trackball device with three (a &amp;quot;middle&amp;quot; button) and four buttons.  With such devices, the functionality of the additional buttons can vary by application or environment.  These functionalities can typically be configured by the user in specific applications or within AmigaOS (globally).&lt;br /&gt;
&lt;br /&gt;
Furthermore, scroll wheels are supported by AmigaOS in a context-based fashion.  If the current application&#039;s window is scrollable, the scrollwheel will act on that area.  If the mouse pointer is positioned over a specifically scrollable gadget, the scrollwheel will affect that gadget.&lt;br /&gt;
&lt;br /&gt;
In some applications and environments, you can also &amp;quot;double-click&amp;quot; (click twice, quickly) with the left button on an object to engage them.  In the Workbench file manager, a single mouse click will only &amp;quot;select&amp;quot; an icon, whereas a double-click will open drawer/directory, run an application or open a file in an associated program.&lt;br /&gt;
&lt;br /&gt;
Beside &amp;quot;clicking&amp;quot; - pressing down and releasing a mouse button at a specific location - you can also perform what is known as &amp;quot;dragging&amp;quot;, which means clicking down and then moving the mouse around before releasing the mouse button.  This is typically always done with the left mouse button and is done to select objects (draw a box around them), to adjust a control slider or to resize a window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Using the keyboard ===&lt;br /&gt;
&lt;br /&gt;
Of course the keyboard is used to enter text into text editing areas.  But your keyboard can do so much more with its special &amp;quot;qualifier&amp;quot; keys and AmigaOS.&lt;br /&gt;
&lt;br /&gt;
The most common example of a qualifier key is the &amp;quot;Shift&amp;quot; key which causes typed text to be made upper-case or capitalized.  There are more qualifier keys on most keyboards, here is a list of all of them:&lt;br /&gt;
* &#039;&#039;&#039;the Shift keys&#039;&#039;&#039; - the common key that causes your text to be capitalized.&lt;br /&gt;
* &#039;&#039;&#039;The &amp;quot;Alternate&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Alt&amp;quot; keys typically to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Control&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Ctrl&amp;quot; keys also to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Amiga&amp;quot; keys&#039;&#039;&#039; - special &amp;quot;A&amp;quot; keys on the right and left side of the space bar.  Besides being unique to AmigaOS, the right and left Amiga keys always mean different things (unlike the rest of the qualifier keys, most of the time).  If you have a non-AmigaOS keyboard, the &amp;quot;Windows&amp;quot; or MacOS &amp;quot;Command&amp;quot; keys function as &amp;quot;Amiga&amp;quot; keys.&lt;br /&gt;
** &#039;&#039;&#039;the Right Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; within your current application.&lt;br /&gt;
** &#039;&#039;&#039;the Left Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; that are globally active anytime and anywhere in your AmigaOS system.&lt;br /&gt;
While all of these qualifier keys don&#039;t usually do anything on their own, when you press and hold one or more of these keys down while pressing regular keys, they can change what you type (capitalizing or making alternate characters) or become powerful &amp;quot;short-cuts&amp;quot; within your applications or throughout your entire AmigaOS system.&lt;br /&gt;
&lt;br /&gt;
The most famous short-cuts are the &#039;&#039;&#039;copy&#039;&#039;&#039;, &#039;&#039;&#039;cut&#039;&#039;&#039; and &#039;&#039;&#039;paste&#039;&#039;&#039; operations that you can perform on selected text:&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga C&#039;&#039;&#039; short-cut copies any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga X&#039;&#039;&#039; short-cut &amp;quot;cuts&amp;quot; any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga V&#039;&#039;&#039; short-cut &amp;quot;pastes&amp;quot; any text or content from the Clipboard into your application (at the current cursor location).&lt;br /&gt;
&lt;br /&gt;
== The AmigaOS GUI - Intuition ==&lt;br /&gt;
&lt;br /&gt;
When AmigaOS has started, you will typically see the Workbench file manager. This is the start of your experience with the AmigaOS GUI and its most basic elements: a screen with menus and windows containing icons and &amp;quot;gagdets&amp;quot;. These components are the basic building blocks of virtually all AmigaOS &amp;amp; application interfaces.&lt;br /&gt;
&lt;br /&gt;
As with most things in AmigaOS, almost all of the following components can also be almost infinitely reconfigured, adjusted and graphically varied by the user. In the AmigaOS &amp;quot;Preferences&amp;quot; drawer, the &amp;quot;GUI&amp;quot;, &amp;quot;ASL&amp;quot;, &amp;quot;Locale&amp;quot;, &amp;quot;Font&amp;quot;, &amp;quot;Palette&amp;quot;, &amp;quot;Poiner&amp;quot;, &amp;quot;PopUpMenu&amp;quot;, &amp;quot;Screens&amp;quot;, &amp;quot;Workbench&amp;quot; and &amp;quot;WBPattern&amp;quot; preference editors easily allow a user to reconfigure the look and feel of their Amiga&#039;s GUI in dramatic ways.&lt;br /&gt;
&lt;br /&gt;
AmigaOS also supports the use of alternate GUI systems in parallel with the default &amp;quot;Intuition&amp;quot; (aka &amp;quot;Reaction&amp;quot;) GUI system. By default AmigaOS also comes with the &amp;quot;Magic User Interface&amp;quot; system (&amp;quot;MUI&amp;quot;, a variant of the basic AmigaOS GUI system). Aside from Intuition, MUI can be reconfigured even more widely using its own MUI configuration app.&lt;br /&gt;
&lt;br /&gt;
Additionally, AmigaOS can use a number of third-party &amp;quot;cross-platform&amp;quot; GUI systems: &amp;quot;AmiCygnix&amp;quot; GUI system - a native X11 GUI implementation for AmigaOS - and a native port of the &amp;quot;Qt&amp;quot; GUI system. With either of these systems, it is possible to run ported applications compiled for AmigaOS, but running with these cross-platform GUI systems.&lt;br /&gt;
&lt;br /&gt;
To start with, we will explore the elements that make up the AmigaOS GUI system.&lt;br /&gt;
&lt;br /&gt;
=== Screens ===&lt;br /&gt;
&lt;br /&gt;
As start-up, the Workbench will be running on its &amp;quot;Workbench Screen&amp;quot;.  This will be the default location where most other application windows will also appear when started.&lt;br /&gt;
&lt;br /&gt;
Typically an AmigaOS screen will have a &amp;quot;title bar&amp;quot; across the top with a graphical &amp;quot;depth gadget&amp;quot; at the right end.  In the case of the Workbench screen, there will be an AmigaOS &amp;quot;boing ball&amp;quot; at the left end and the title bar will display certain system information (OS version, memory availability, etc.) Within the screen, the Workbench and any other applications can open windows, display icons and other GUI devices. If you right-click over the title bar, it becomes a &amp;quot;Menu Bar&amp;quot;, showing you the control menus that are available for that application.&lt;br /&gt;
&lt;br /&gt;
In many cases, other applications may open screens in addition to the Workbench screen. The &amp;quot;depth gadget&amp;quot; at the right end of each screen&#039;s title bar allows you to click from screen from screen. Besides clicking on the screen&#039;s depth gadet, AmigaOS also lets the user see other screens behind the front screen by &amp;quot;dragging&amp;quot; down on the screen title bar.&lt;br /&gt;
&lt;br /&gt;
The characteristics of the Workbench screen such as resolution and color depth can be configured in the &amp;quot;Screenmode&amp;quot; preferences editor. Other screens can be either be configured in the &amp;quot;Screens&amp;quot; preferences editor or from within individual applications. Typically, AmigaOS applications also give the user the choice of whether application runs on their own screens or the &amp;quot;public&amp;quot; Workbench screen.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
Windows are graphic containers that appear within AmigaOS screens. Windows can be created by any number of different applications - the Workbench, Shell sessions or applications. Outside of the Workbench file manager, each window usually reflects each individual running application. In some cases, one application may open multiple documents in separate windows or additional &amp;quot;requester&amp;quot; windows might appear for an application.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig4-1.png]]&lt;br /&gt;
&lt;br /&gt;
Almost all windows of AmigaOS will have these common elements:&lt;br /&gt;
* &#039;&#039;&#039;Borders&#039;&#039;&#039; - A border around the window&#039;s contents. Holding the Shift+Left-Amiga keys down while dragging any border will drag the window around.&lt;br /&gt;
* &#039;&#039;&#039;Title bar&#039;&#039;&#039; - A thicker top border that typically contains a name of the application or its contents. The area of the title bar acts as a &amp;quot;drag bar&amp;quot; which you can use to drag the window around the screen.&lt;br /&gt;
* &#039;&#039;&#039;Depth gadget&#039;&#039;&#039; - The right-most gadget in the top title bar that either pulls the window to front (if it isn&#039;t frontmost) or pushes it to the back (if it&#039;s in front). Holding down the Shift key while clicking this gagdet pushes the window to the back.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS, windows may also optionally have these additional features and elements:&lt;br /&gt;
* &#039;&#039;&#039;Close gadget&#039;&#039;&#039; - The left-most gadget in the title bar that closes the window.&lt;br /&gt;
* &#039;&#039;&#039;Scroll bar(s) and arrows&#039;&#039;&#039; - If the contents of the window can be scrolled in vertically and/or horizontally, there will be a scroll bar with arrow scroll buttons. These scroll bars can also be used if the mouse pointer is over a scroll bar and the mouse scroll wheel is used.&lt;br /&gt;
* &#039;&#039;&#039;Zoom gadget&#039;&#039;&#039; - the second gadget from the right-most of the title bar which switches the window between two sizes. Holding down the Shift key while clicking this gadget will make it fill the screen.&lt;br /&gt;
* &#039;&#039;&#039;Iconification gadget&#039;&#039;&#039; - left-most of the right-hand gadgets in the title bar which causes the window to disappear into an icon on the Workbench background - thus &amp;quot;Iconifying&amp;quot; the window or application.&lt;br /&gt;
* &#039;&#039;&#039;Sizing gadget&#039;&#039;&#039; - In the case of windows that can be resized, this is the gadget in the bottom right corner of the window that you can drag to resize the window.&lt;br /&gt;
&lt;br /&gt;
Each AmigaOS application can use many different combinations of these features in the make up of their windows.&lt;br /&gt;
&lt;br /&gt;
=== Menus ===&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-4.png|frame|right]]&lt;br /&gt;
Menus are lists of items that will allow you to see and use what commands are available in an application. The Workbench uses menus you can use to perform actions on the Workbench and its contents. Menus typically provide many more functions and commands than can be presented to the user than just graphic buttons, etc. within an application&#039;s window, as a result they are a primary way most applications are used.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS menus can always be found for the current application by moving the mouse to the top of the screen and holding down the right mouse button. The screen title bar will become a menu bar and will show the names of all the current application&#039;s menus.&lt;br /&gt;
&lt;br /&gt;
By dragging with the right mouse button, each menu will display its &amp;quot;menu items&amp;quot;. Each of those menu items corresponds to a command or setting, and can be selected by releasing the right mouse button while the desired menu item is highlighted. In some cases you will find a &amp;quot;check box&amp;quot; on a menu item which you can select to toggle a setting. In other cases, you will find that menu items have a little arrow head that indicates that item actually has a &amp;quot;sub-menu&amp;quot; - a menu within a menu. Menus ending with an ellipsis (&amp;quot;...&amp;quot;) indicate that menu item will open a window that can be cancelled without committing any command.  For those menu items that might be deactivated (they may not apply at the moment), they will be &amp;quot;greyed-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The labels of many menu items will also include a letter or two with an &amp;quot;A&amp;quot; at the right edge.  This indicates what the keyboard Right-Amiga &amp;quot;short cut&amp;quot; is the equivalent of using that menu item within that application. In the above screen shot, you can see that pressing the two keys - &amp;quot;Right-Amiga&amp;quot; and &amp;quot;N&amp;quot; - would do the same as that menu item - to create a new drawer.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Consistent Organization====&lt;br /&gt;
For the sake of consistency (when applicable), the first two AmigaOS menus of any application are typically organized with the following hierarchy and use these keyboard equivalents:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;First Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent: || &#039;&#039;&#039;Second Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent:&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PROJECT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  ||  ||&#039;&#039;&#039;EDIT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;New&#039;&#039;&#039;|| = Create new project in application.||Right-Amiga N||&#039;&#039;&#039;Cut&#039;&#039;&#039;|| = Cut the selected content into the Clipboard.||Right-Amiga X&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Open...&#039;&#039;&#039;|| = Open the file containing a project.||Right-Amiga O||&#039;&#039;&#039;Copy&#039;&#039;&#039;|| = Copy the selected content into the Clipboard.||Right-Amiga C&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save&#039;&#039;&#039;|| = Save the project to it&#039;s current file name.||Right-Amiga S||&#039;&#039;&#039;Paste&#039;&#039;&#039;|| = Paste the Clipboard contents into the project (at the current location).||Right-Amiga V&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save As...&#039;&#039;&#039;|| = Save the project to a file of a new name.|| ||&#039;&#039;&#039;Undo&#039;&#039;&#039;|| = Undo the last change to current project.||Right-Amiga Z&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Print&#039;&#039;&#039;|| = Print the current project.||Right-Amiga P||&#039;&#039;&#039;Redo&#039;&#039;&#039;|| = Restore the last change &amp;quot;undone&amp;quot; in the current project.|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Close&#039;&#039;&#039;|| = Close the project.|| || || ||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Quit&#039;&#039;&#039;|| = Quit the application.||Right-Amiga Q|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Menu Variations====&lt;br /&gt;
AmigaOS also includes some additional ways menus can be presented to the user:&lt;br /&gt;
&lt;br /&gt;
=====Pop-Up Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBPopUpMenu.jpg|frame|right]]&lt;br /&gt;
In the GUI preferences editor you can configure menus to &amp;quot;pop-up&amp;quot; under the mouse pointer whenever you right-click the mouse. This means you do not need to move the mouse to the top of the screen to use the menus. There are also options for making menus &amp;quot;sticky&amp;quot;, meaning that you don&#039;t need to drag the mouse to navigate the menus, but rather just right click and the menus stay open till you make a selection or click away.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Context Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBContextMenu.jpg|frame|right]]&lt;br /&gt;
The Workbench (with a utility added by default) and many applications provide &amp;quot;contextual menus&amp;quot;.  This means that you can put your mouse pointer over elements and right-click to pop-up a menu of things that are specific to the item you clicked over.  In the case of the Workbench (with the Context Menus utility), right clicking on a file will pop-up a menu of things that could be done with that file, like deleting it.&lt;br /&gt;
&lt;br /&gt;
All of these features provide both a simple means of using many functions within an application and at the same time allowing the user to configure a very efficient user interface that responds to nearly every whim.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Icons ===&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
Icons are small images which can represent a disk, a directory, an application file or data file. Icons are primarilly used within the AmigaOS Workbench environment to represent all the file system objects the user can manipulate. With these icons it is possible to select files, open them, delete them or move them around within the Workbench. Applications may also make more limited use of icons to represent file system objects or may be used as imagery in an &amp;quot;icon bar&amp;quot; of buttons that can be clicked to perform various actions represented by icon imagery, like the Clock above.&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[[File:LibDiskIcon.png|frame|left|100px|Drive icon]]  [[File:Icons.png|frame|right|Directory with sub-directory, data and application file icons]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AmigaOS also uses different icon imagery to indicate various types of icons - drives, directories, files and applications.  Drive or partition icons look like little hard drives.  &lt;br /&gt;
A directory icon will look like a cabinet &amp;amp; drawer whereas a file icon will be designed to give a clue about the file content.&lt;br /&gt;
Data files are normally shown with a &amp;quot;page&amp;quot; motif and some graphics or text to reflect the file type.&lt;br /&gt;
Application files typically have the most free-form graphics that reflect their purpose, name or developer.&lt;br /&gt;
&lt;br /&gt;
The user can also edit the icon imagery using the icon editor, change how icons react to being double-clicked and adjust parameters stored within the icon file that affect how the represented file will be used.&lt;br /&gt;
&lt;br /&gt;
Many applications and all AmigaOS file requesters allow Workbench icons to be &amp;quot;dragged and dropped&amp;quot; into the application or requester windows and the associated file will be recognized by the application, if possible.&lt;br /&gt;
&lt;br /&gt;
==== Icon states ====&lt;br /&gt;
&lt;br /&gt;
Icons can look different not only because of their image but also depending on their state.  &lt;br /&gt;
&lt;br /&gt;
As you can see in the directory example, the 2 top left icons appear semi-transparent. This subtle difference reflects whether the file or directory has an associated icon file with it. In AmigaOS, any directory or file can have such an icon file that stores a unique icon image, unique program settings or specific settings for that file or directory. That information can be adjusted within the Workbench and is automatically stored in a companion file with the same name, but with an added &#039;&#039;&#039;.info&#039;&#039;&#039; suffix.  &lt;br /&gt;
&lt;br /&gt;
While many files and directories and most applications have such &amp;quot;.info files&amp;quot; with them, they are not required and the Workbench can be set to show you &amp;quot;default icons&amp;quot; (based on the file types, etc.) so you can manipulate the corresponding objects. Of course, AmigaOS can also be configured on a directory-by-directory basis to only show files that have associated &amp;quot;.info&amp;quot; files.&lt;br /&gt;
&lt;br /&gt;
In the same picture, the two top right directory icons also look slightly different. While the &#039;&#039;&#039;Utilities selected&#039;&#039;&#039; and the &#039;&#039;&#039;Utilities unselected&#039;&#039;&#039; are the same icon, their image is a bit different. The drawer of the first one is slightly opened and there is a &amp;quot;glow&amp;quot; effect arround the first icon. These two visual clues show you the first directory icon has been selected by the user whereas the second one is not.&lt;br /&gt;
&lt;br /&gt;
==== App Icons ====&lt;br /&gt;
&lt;br /&gt;
Many applications provide the option to be &amp;quot;iconified&amp;quot; either by clicking on an iconification gadget in their window title bars or by selecting a menu item.  In those events, the application&#039;s window will disappear and an &amp;quot;app icon&amp;quot; will appear on the background of the Workbench screen.  Double-clicking on the app icon will cause the icon to disappear and the application&#039;s window to reappear.  Even while the application is iconified, it does continue to run and perform whatever the user may have it doing.&lt;br /&gt;
&lt;br /&gt;
Some applications may also place an app icon on the Workbench background even while the application is open to allow the user to be able to drop other file icons on the app icon and have them be used by the application.&lt;br /&gt;
&lt;br /&gt;
=== Graphic gadgets ===&lt;br /&gt;
Within AmigaOS and application windows, there can be any number of graphic devices meant to be operated by your mouse with clicks and drags - these are known as &amp;quot;gagdets&amp;quot;.  In most cases, the gagdets are simple analogs of real world objects - like buttons you press with your finger, forms you fill out with a pencil or tabs on folders.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig5-1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Buttons ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Buttons.jpg|frame|right]]&lt;br /&gt;
Buttons (or &amp;quot;Boolean gadgets&amp;quot;) are some of the most common GUI objects.  With a simple left-click of your mouse button, they are used to perform actions, set configurations or indicate choices.  &lt;br /&gt;
&lt;br /&gt;
In AmigaOS, clicking &amp;quot;down&amp;quot; on a button typically causes the button to be rendered differently, to reflect that it has been &amp;quot;pressed&amp;quot;.  Engaging the button is not actually recognized until you let go with the mouse button over the graphic gadget.  This means that while the gadget has been clicked down, you always have the option of moving the mouse off the button gadget and then letting go and it will be as though the button had never been &amp;quot;pressed&amp;quot; or clicked on.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Text gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-StringGadgets.jpg|frame|right]]&lt;br /&gt;
A text gadget (or &amp;quot;String gadget&amp;quot;) works like a space in a paper form to be filled out - left click in the gadget, you will see a cursor appear and you can type your answer.&lt;br /&gt;
Once you&#039;ve finished typing your infrormation, you can either press the enter, carriage-return or tab keys for your entry to be recognized.&lt;br /&gt;
&lt;br /&gt;
Text or string gadgets can also come in a number of variants for specific uses.  Some can limit input to be numeric only (and may have adjacent buttons to increment or decrement the value).  Some string gadgets may be specifically be meant for file or directory names and they have adjacent gagdets that will bring up a file requester to set the value.  Many times a numeric gadget is paired with a slider gadget (as in the example above), where the value can either be set by typing in the gadget or by using the slider.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Sliders &amp;amp; Scroll Bars ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-SliderGadgets.jpg|frame|right]]&lt;br /&gt;
Slider gadgets work like controls many of have seen on their stereo systems - left-click and drag on the gadget &amp;quot;knob&amp;quot;  to move it back and forth to set a value.  A more sophisticated variant of the slider is the &amp;quot;scroll bar&amp;quot; that has a variably sized scroll bar contained in a scroll box that lets you see what proportion of the active range is visible or active.&lt;br /&gt;
&lt;br /&gt;
With all slider and scroller gadgets AmigaOS also lets you click in the area to either side of the knob or slider to adjust the setting.  In the case of sliders, the value will typically move by a fixed amount (+/- 1 or some suitable increment).  In the case of scroll bars, clicking in the scroll box on either side of the scroll bar will cause the value to move in increments of the scroll bar size.  Scroll bars also come with &amp;quot;scroll arrows&amp;quot; at the end of the scroll box that allow for finer movement of the scroll bar.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Cycle gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CycleGadgets.jpg|frame|right]]&lt;br /&gt;
Cycle gagdets are a variant on buttons that let you select from a number of specific choices.  You can either click on the majority of the gadget to pop-up a list of choices to select from or click on the circular arrow to cycle between the list of choices.  Cycle gagdets rarely cause actions to occur, they just adjust some setting or configuration.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Check Box &amp;amp; Radio Button gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CheckRadioGadgets.jpg|frame|right]]&lt;br /&gt;
Another variant of buttons, check boxes can be clicked to set on/off or yes/no conditions with a checkmark, just like a check box in a paper form.  Radio buttons are another variant where two or more round buttons are presented in a set and only one of the set can be clicked and activated, like the buttons on a stereo system.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Tabs ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Tabs.jpg|frame|right]]&lt;br /&gt;
Tabs are a graphical gadget that is used in combination with a &amp;quot;pages&amp;quot; or sets of gadgets and/or information, and you can click on the &amp;quot;tabs&amp;quot; to switch between the pages - like you might in a real notebook with tabbed pages.  This provides a efficient way to present more information and settings in a compact interface.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
====Requesters====&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-5.png|frame|right]]&lt;br /&gt;
As one uses AmigaOS and its applications, from time to time a &amp;quot;Requester&amp;quot; window may appear to ask the user a question - basically windows with gadgets in them. Such requesters can appear to confirm an action, obtain more information, make a selection or configuration. Typically a series of buttons across the bottom of the window will dispatch the requester, with the bottom-left button gadget indicating some affirmative choice and the bottom-right button gagdet cancelling the requester (performing no action or change).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keyboard Operation of Gadgets====&lt;br /&gt;
As with so many things, AmigaOS and its applications provide a secondary way to operate many of these gadgets - by keyboard.  If a window contains text gadgets, pressing your keyboard&#039;s TAB key will activate the text gadgets in sequence (a cursor will appear in each so you can type &amp;amp; edit).  Each press of the TAB key will cycle to the next gadget and pressing SHIFT + TAB will cycle through the gadgets in reverse order.&lt;br /&gt;
&lt;br /&gt;
You may have noticed in many of the above sample images that many of the gagdets or their adjacent &amp;quot;label&amp;quot; texts contain a single underlined character.  This is a sign that pressing that key on your keyboard will activate that gadget.  Each gadget can then be operated by your keyboard - just like clicking on a button, clicking on a tab, setting a text or numeric value, etc.  Of course, if you are in the midst of typing in a text gadget, then things you type will go into that gadget instead of operating other gagdets.&lt;br /&gt;
&lt;br /&gt;
== Finding Files in AmigaOS ==&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-ASLReq.jpg|frame|right]]&lt;br /&gt;
AmigaOS provides a consistent method for navigating your file system and finding your files from within your apps - the &amp;quot;ASL file requester&amp;quot;.  It is used by everything in AmigaOS and most third party applications.  It is the window (or &amp;quot;requester&amp;quot;) that appears when you want to open or save files.&lt;br /&gt;
&lt;br /&gt;
As you can see, the ASL file requester presents the files in a given location in your file systems (a directory or &amp;quot;drawer&amp;quot;) and shows their size, date of creation or last modification and any comments attached to the file.  The above example shows the same directory as appeared above in this page.&lt;br /&gt;
&lt;br /&gt;
At the bottom corners of the window are buttons to accept the selection (&amp;quot;OK&amp;quot;) or cancel the requester.  Between those are buttons to view all the drives &amp;amp; partitions on your system (&amp;quot;Volumes&amp;quot;) or to move to the &amp;quot;Parent&amp;quot; of the current directory.&lt;br /&gt;
&lt;br /&gt;
Also at the bottom of the window you will see three text gadgets.  The first of these is optional and allows you to filter what is shown in the file list - it is now shown filtering out any file with a &amp;quot;.info&amp;quot; suffix (those are AmigaOS icon files).  The next two lines reflect the current directory path name and the currently selected file name (also selected in the file list above).  In the case of saving files, you would type any name you wanted in the bottom text field to create a new file.  Clicking on the titles of the file list will let you sort the file list.&lt;br /&gt;
&lt;br /&gt;
Of course this being AmigaOS, the ASL requester has its own &amp;quot;preferences editor&amp;quot; that lets you set how the requester appears, is sorted by default and a number of mouse button short-cuts.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Controlling AmigaOS - Which Way? ==&lt;br /&gt;
&lt;br /&gt;
AmigaOS provides a number of parallel ways that the user can control and put their Amigas to use.  The easiest and most common method is to use the AmigaOS graphic icons, windows and mouse interface - the &amp;quot;Workbench&amp;quot; - using all the GUI elements described above.  But AmigaOS also provides a more traditional or &amp;quot;old fashioned&amp;quot; method called a command line interface (the &amp;quot;CLI&amp;quot; or &amp;quot;Shell&amp;quot;), where the user can type text commands and interact using a text interface.  AmigaOS also provides a unique means of &amp;quot;interprocess communications&amp;quot; where user can have many applications and parts of the OS &amp;quot;talk&amp;quot; to each other. &lt;br /&gt;
&lt;br /&gt;
=== The Workbench &amp;amp; Intuition ===&lt;br /&gt;
&lt;br /&gt;
As we described above, AmigaOS provides the &amp;quot;Workbench&amp;quot;, a straightforward, efficient and easy graphical means to start applications, manage your computer and all your files.   Files and programs are represented with icons, generally known as &amp;quot;Projects&amp;quot; and &amp;quot;Tools&amp;quot;.  They can be stored in any arrangement of directories (&amp;quot;Drawers&amp;quot;).  You double-click on a program icon and it will open in a Intuition GUI window on your Workbench screen. &lt;br /&gt;
&lt;br /&gt;
Please see the section about the AmigaOS [http://wiki.amigaos.net/index.php/UserDoc:Workbench Workbench] to learn these concepts:&lt;br /&gt;
&lt;br /&gt;
* What is the Workbench&lt;br /&gt;
* Workbench menus&lt;br /&gt;
* Keyboard control&lt;br /&gt;
* Workbench requesters&lt;br /&gt;
* Configuration&lt;br /&gt;
* Workbench help&lt;br /&gt;
&lt;br /&gt;
=== The Shell &amp;amp; DOS Commands ===&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Window-Shell.jpg|frame|right]]&lt;br /&gt;
The AmigaOS Shell can be opened by double-clicking the &amp;quot;Shell&amp;quot; icon in the AmigaOS &amp;quot;System&amp;quot; drawer.  The Shell is a text based interface that allows you to perform most of the same operations as the Workbench - to run and interact with application programs, manage files and control your Amiga computer.  AmigaOS also comes with dozens of standard &amp;quot;DOS commands&amp;quot; (programs purely meant for Shell usage).  Simply enter the name of a program or command (like &amp;quot;dir&amp;quot;) and press Enter, the command or program will run and it will print its results in the Shell window.  While considered old fashioned, many users find the Shell to still be the most efficient way to perform many tasks on the Amigas.&lt;br /&gt;
&lt;br /&gt;
Please see the section on the [[UserDoc:Shell|AmigaOS Shell]] to learn more.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Scripts &amp;amp; Messages ===&lt;br /&gt;
&lt;br /&gt;
Scripts are simple text files that contain a list of commands written in a variety of languages: the AmigaDOS, Arexx and Python languages are provided with AmigaOS - there are many others.  Each of these language has its strengths.  You&#039;ll have to learn the one that suits what you want to do.  You can create a script using a text editor. You can run such scripts from the Workbench or from the shell (or from any other script). By using ARexx ports provided by AmigaOS components (the Workbench or Multiview, for example) or third-party applications, scripts can be used to make your computer perform a wide variety of actions.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS System Tools ==&lt;br /&gt;
AmigaOS comes with a variety of programs to help in the preparation of your computer.  These include tools for:&lt;br /&gt;
&lt;br /&gt;
* Drive preparation (Media Toolbox, Format, Format DCRW &amp;amp; Mounter).&lt;br /&gt;
* Font Handling (TypeManager &amp;amp; FixFonts).&lt;br /&gt;
* Script Languages (RexxMast and Python).&lt;br /&gt;
* The Shell.&lt;br /&gt;
* Miscellaneous Utilities (Find, Help, Grim Reaper &amp;amp; Ringhio Server).&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Utilities ==&lt;br /&gt;
AmigaOS comes with a selection of utilities to assist the user, including:&lt;br /&gt;
&lt;br /&gt;
* Commodities.&lt;br /&gt;
* Editors (Notepad, MEmacs, PrefsObjectEditor &amp;amp; IconEdit).&lt;br /&gt;
* Postscript oriented apps (AmiPDF, AmiGS &amp;amp; Ghostscript).&lt;br /&gt;
* Disk apps (PartitionWizard &amp;amp; RawDisk).&lt;br /&gt;
* Screenblankers.&lt;br /&gt;
* AmiDock and Dockies.&lt;br /&gt;
* The Unarc dearchiver.&lt;br /&gt;
* PlayCD.&lt;br /&gt;
* Several &amp;quot;sub-programs&amp;quot; that are used by other system utilities (blankers, dockies)&lt;br /&gt;
* Miscellaneous apps (Clock, printing apps, KeyShow, install apps, etc.).&lt;br /&gt;
&lt;br /&gt;
Read [[Utilities|here]] to find all of them explained further.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Preferences ==&lt;br /&gt;
AmigaOS comes with a number of small programs used for modifying the system&#039;s settings. These are stored in the [[Prefs]] drawer, and include programs for modifying the following settings:&lt;br /&gt;
&lt;br /&gt;
* General appearance&lt;br /&gt;
* Screen resolution&lt;br /&gt;
* Desktop and window backgrounds&lt;br /&gt;
* Language settings&lt;br /&gt;
* Keyboard and mouse settings&lt;br /&gt;
* Printer settings&lt;br /&gt;
* Audio settings&lt;br /&gt;
&lt;br /&gt;
Read [[Prefs|here]] for details and explanations of all the preference programs.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7729</id>
		<title>UserDoc:Introduction to AmigaOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7729"/>
		<updated>2014-06-05T14:18:38Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Requesters */ Grammar correction: removed unnecessary apostrophe. Also removed unnecessary double spacing.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Like any modern personal computer system, AmigaOS presents a graphic interface and relies on common peripherals to let the user control their system.  &lt;br /&gt;
Beyond most systems, AmigaOS provides more flexibility and options in how the user can approach, configure and use their Amiga computer.&lt;br /&gt;
&lt;br /&gt;
In this page we will describe the details of AmigaOS graphic user interface (GUI) - how screens, windows and gadgets are presented and how you can use them.&lt;br /&gt;
We will also describe the various means by which the user can control and operate AmigaOS.  In additional pages, you can read about  [[UserDoc:How AmigaOS Works|how AmigaOS works]]  and what its components are.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Input - Point, Click and Type ==&lt;br /&gt;
&lt;br /&gt;
There are two common ways you can use and control your AmigaOS system - by mouse and keyboard.  &lt;br /&gt;
&lt;br /&gt;
But AmigaOS also lets you control your system by other input devices (like touchscreens or voice recognition) depending on drivers and devices connected.  Depending on software installed, AmigaOS can also be remotely controlled by networked protocols (like VNC and Synergy).  Finally, AmigaOS can be controlled internal scripts set up by the User.&lt;br /&gt;
&lt;br /&gt;
=== Using the mouse ===&lt;br /&gt;
&lt;br /&gt;
[[File:Style2.5.png|frame|right]]&lt;br /&gt;
&lt;br /&gt;
Typically in AmigaOS, you use a mouse to act on graphic elements (like &amp;quot;gadgets&amp;quot;, &amp;quot;icons&amp;quot; or webpage &amp;quot;links&amp;quot;).  By default, AmigaOS expects and supports mice or trackball pointing devices with at least two buttons.  The left mouse button is used to &amp;quot;left-click&amp;quot; on graphic objects, to select them or operate them. The right mouse button is used to &amp;quot;right-click&amp;quot; and display the menus of the current application.&lt;br /&gt;
&lt;br /&gt;
Optionally, one can use a mouse or trackball device with three (a &amp;quot;middle&amp;quot; button) and four buttons.  With such devices, the functionality of the additional buttons can vary by application or environment.  These functionalities can typically be configured by the user in specific applications or within AmigaOS (globally).&lt;br /&gt;
&lt;br /&gt;
Furthermore, scroll wheels are supported by AmigaOS in a context-based fashion.  If the current application&#039;s window is scrollable, the scrollwheel will act on that area.  If the mouse pointer is positioned over a specifically scrollable gadget, the scrollwheel will affect that gadget.&lt;br /&gt;
&lt;br /&gt;
In some applications and environments, you can also &amp;quot;double-click&amp;quot; (click twice, quickly) with the left button on an object to engage them.  In the Workbench file manager, a single mouse click will only &amp;quot;select&amp;quot; an icon, whereas a double-click will open drawer/directory, run an application or open a file in an associated program.&lt;br /&gt;
&lt;br /&gt;
Beside &amp;quot;clicking&amp;quot; - pressing down and releasing a mouse button at a specific location - you can also perform what is known as &amp;quot;dragging&amp;quot;, which means clicking down and then moving the mouse around before releasing the mouse button.  This is typically always done with the left mouse button and is done to select objects (draw a box around them), to adjust a control slider or to resize a window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Using the keyboard ===&lt;br /&gt;
&lt;br /&gt;
Of course the keyboard is used to enter text into text editing areas.  But your keyboard can do so much more with its special &amp;quot;qualifier&amp;quot; keys and AmigaOS.&lt;br /&gt;
&lt;br /&gt;
The most common example of a qualifier key is the &amp;quot;Shift&amp;quot; key which causes typed text to be made upper-case or capitalized.  There are more qualifier keys on most keyboards, here is a list of all of them:&lt;br /&gt;
* &#039;&#039;&#039;the Shift keys&#039;&#039;&#039; - the common key that causes your text to be capitalized.&lt;br /&gt;
* &#039;&#039;&#039;The &amp;quot;Alternate&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Alt&amp;quot; keys typically to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Control&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Ctrl&amp;quot; keys also to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Amiga&amp;quot; keys&#039;&#039;&#039; - special &amp;quot;A&amp;quot; keys on the right and left side of the space bar.  Besides being unique to AmigaOS, the right and left Amiga keys always mean different things (unlike the rest of the qualifier keys, most of the time).  If you have a non-AmigaOS keyboard, the &amp;quot;Windows&amp;quot; or MacOS &amp;quot;Command&amp;quot; keys function as &amp;quot;Amiga&amp;quot; keys.&lt;br /&gt;
** &#039;&#039;&#039;the Right Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; within your current application.&lt;br /&gt;
** &#039;&#039;&#039;the Left Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; that are globally active anytime and anywhere in your AmigaOS system.&lt;br /&gt;
While all of these qualifier keys don&#039;t usually do anything on their own, when you press and hold one or more of these keys down while pressing regular keys, they can change what you type (capitalizing or making alternate characters) or become powerful &amp;quot;short-cuts&amp;quot; within your applications or throughout your entire AmigaOS system.&lt;br /&gt;
&lt;br /&gt;
The most famous short-cuts are the &#039;&#039;&#039;copy&#039;&#039;&#039;, &#039;&#039;&#039;cut&#039;&#039;&#039; and &#039;&#039;&#039;paste&#039;&#039;&#039; operations that you can perform on selected text:&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga C&#039;&#039;&#039; short-cut copies any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga X&#039;&#039;&#039; short-cut &amp;quot;cuts&amp;quot; any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga V&#039;&#039;&#039; short-cut &amp;quot;pastes&amp;quot; any text or content from the Clipboard into your application (at the current cursor location).&lt;br /&gt;
&lt;br /&gt;
== The AmigaOS GUI - Intuition ==&lt;br /&gt;
&lt;br /&gt;
When AmigaOS has started, you will typically see the Workbench file manager.  This is the start of your experience with the AmigaOS GUI and it&#039;s most basic elements:  a screen with menus and windows containing icons and &amp;quot;gagdets&amp;quot;.  These components are the basic building blocks of virtually all AmigaOS &amp;amp; application interfaces.&lt;br /&gt;
&lt;br /&gt;
As with most things in AmigaOS, almost all of the following components can also be almost infinitely reconfigured, adjusted and graphically varied by the user.  In the AmigaOS &amp;quot;Preferences&amp;quot; drawer, the &amp;quot;GUI&amp;quot;, &amp;quot;ASL&amp;quot;, &amp;quot;Locale&amp;quot;, &amp;quot;Font&amp;quot;, &amp;quot;Palette&amp;quot;, &amp;quot;Poiner&amp;quot;, &amp;quot;PopUpMenu&amp;quot;, &amp;quot;Screens&amp;quot;, &amp;quot;Workbench&amp;quot; and &amp;quot;WBPattern&amp;quot; preferences editors easily allow a user to reconfigure the GUI of their Amiga in drammatic ways.&lt;br /&gt;
&lt;br /&gt;
AmigaOS also supports the use of alternate GUI systems in parallel with the default &amp;quot;Intuition&amp;quot; (aka &amp;quot;Reaction&amp;quot;) GUI system.  By default AmigaOS also comes with the &amp;quot;Magic User Interface system (&amp;quot;MUI&amp;quot;, a variant of the basic AmigaOS GUI system.  More than Intuition, MUI can be reconfigured even more widely using its own MUI configuration app.  &lt;br /&gt;
&lt;br /&gt;
Additionally, AmigaOS can use a number of third-party &amp;quot;cross-platform&amp;quot; GUI systems:  &amp;quot;AmiCygnix&amp;quot; GUI system - a native X11 GUI implementation for AmigaOS - and a native port of the &amp;quot;Qt&amp;quot; GUI system.  With either of these systems, it is possible to run ported applications compiled for AmigaOS, but running with these cross-platform GUI systems.&lt;br /&gt;
&lt;br /&gt;
To start with, we will explore the elements that make up the AmigaOS GUI system.&lt;br /&gt;
&lt;br /&gt;
=== Screens ===&lt;br /&gt;
&lt;br /&gt;
As start-up, the Workbench will be running on its &amp;quot;Workbench Screen&amp;quot;.  This will be the default location where most other application windows will also appear when started.&lt;br /&gt;
&lt;br /&gt;
Typically an AmigaOS screen will have a &amp;quot;title bar&amp;quot; across the top with a graphical &amp;quot;depth gadget&amp;quot; at the right end.  In the case of the Workbench screen,&lt;br /&gt;
there will be an AmigaOS &amp;quot;boing ball&amp;quot; at the left end and the title bar will display certain system information (OS version, memory availability, etc.).  Within the screen, the Workbench and any other applications can open windows, display icons and other GUI devices.  If you right-click over the title bar, it becomes a &amp;quot;Menu Bar&amp;quot;, showing you the control menus that are available for that application.&lt;br /&gt;
&lt;br /&gt;
In many cases, other applications may open screens in addition to the Workbench screen.  The &amp;quot;depth gadget&amp;quot; at the right end of each screen&#039;s title bar allows you to click from screen from screen.  Besides clicking on the screen&#039;s depth gadet, AmigaOS also lets the user see other screens behind the front screen by &amp;quot;dragging&#039; down on the screen title bar.&lt;br /&gt;
&lt;br /&gt;
The characteristics of the Workbench screen such as resolution and color depth can be configured in the &amp;quot;Screenmode&amp;quot; preferences editor.  Other screens can be either be configured in the &amp;quot;Screens&amp;quot; preferences editor or from within individual applications.  Typically, AmigaOS applications also give the user the choice of whether application runs on their own screens or the &amp;quot;public&amp;quot; Workbench screen.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
Windows are graphic containers that appear within AmigaOS screens.  Windows can be created by any number of different applications - the Workbench, Shell sessions or applications.  Outside of the Workbench file manager, each window usually reflects each individual running application.  In some cases, one application may open multiple documents in separate windows or additional &amp;quot;requester&amp;quot; windows might appear for an application.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig4-1.png]]&lt;br /&gt;
&lt;br /&gt;
Almost all windows of AmigaOS will have these common elements:&lt;br /&gt;
* &#039;&#039;&#039;Borders&#039;&#039;&#039; - A border around the window&#039;s contents.  Holding the Shift+Left-Amiga keys down while dragging any border will drag the window around.  &lt;br /&gt;
* &#039;&#039;&#039;Title bar&#039;&#039;&#039; - A thicker top border that typically contains a name of the application or it&#039;s contents.  The area of the title bar acts as a &amp;quot;drag bar&amp;quot; which you can use to drag the window around the screen.&lt;br /&gt;
* &#039;&#039;&#039;Depth gadget&#039;&#039;&#039; - The right-most gadget in the top title bar that either pulls the window to front (if it isn&#039;t frontmost) or pushes it to the back (if it&#039;s in front).  Holding down the Shift key while clicking this gagdet pushes the window to the back.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS, windows may also optionally have these additional features and elements:&lt;br /&gt;
* &#039;&#039;&#039;Close gadget&#039;&#039;&#039; - The left-most gadget in the title bar that closes the window.&lt;br /&gt;
* &#039;&#039;&#039;Scroll bar(s) and arrows&#039;&#039;&#039; - If the contents of the window can be scrolled in vertically and/or horizontally, there will be a scroll bar with arrow scroll buttons.  These scroll bars can also be used if the mouse pointer is over a scroll bar and the mouse scroll wheel is used.&lt;br /&gt;
* &#039;&#039;&#039;Zoom gadget&#039;&#039;&#039; - the second gadget from the right-most of the title bar which switches the window between two sizes.  Holding down the Shift key while clicking this gadget will make it fill the screen.&lt;br /&gt;
* &#039;&#039;&#039;Iconification gadget&#039;&#039;&#039; - left-most of the right-hand gadgets in the title bar which causes the window to disappear into an icon on the Workbench background - thus &amp;quot;Iconifying&amp;quot; the window or application.&lt;br /&gt;
* &#039;&#039;&#039;Sizing gadget&#039;&#039;&#039; - In the case of windows that can be resized, this is the gadget in the bottom right corner of the window that you can drag to resize the window.&lt;br /&gt;
&lt;br /&gt;
Each AmigaOS application can use almost infinite combinations of these features in the make up of their windows.&lt;br /&gt;
&lt;br /&gt;
=== Menus ===&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-4.png|frame|right]]&lt;br /&gt;
Menus are lists of items that will allow you to see and use what commands are available in an application.  The Workbench uses menus you can use to perform actions on the Workbench and its contents.  Menus typically provide many more functions and commands than can be presented to the user than just graphic buttons, etc. within an application&#039;s window, as a result they are a primary way most applications are used.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS menus can always be found for the current application by moving the mouse to the top of the screen and right-clicking.  The screen title bar will become a menu bar and will show the names of all the current application&#039;s menus.  &lt;br /&gt;
&lt;br /&gt;
By dragging with the right mouse button, each menu will display its &amp;quot;menu items&amp;quot;.  Each of those menu items corresponds to a command or setting.  In some cases you will find a &amp;quot;check box&amp;quot; on a menu item which you can click on to toggle a setting.  In other cases, you will find that menu items have a little arrow head that indicates that item actually has a &amp;quot;sub-menu&amp;quot; - a menu within a menu.  Menus ending with ellipses (&amp;quot;...&amp;quot;) indicate that menu item will open a window that can be cancelled without commiting any command.  For those menu items that might be deactivated (they may not apply at the moment), they will be &amp;quot;greyed-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The labels of many menu items will also include a letter or two with an &amp;quot;A&amp;quot; at the right edge.  This indicates what the keyboard Right-Amiga &amp;quot;short cut&amp;quot; is the equivalent of using that menu item within that application.  In the above screen shot, you can see that pressing the two keys - &amp;quot;Right-Amiga&amp;quot; and &amp;quot;N&amp;quot; - would do the same as that menu item - to create a new drawer.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Consistent Organization====&lt;br /&gt;
For the sake of consistency (when applicable), the first two AmigaOS menus of any application are typically organized with the following hierarchy and use these keyboard equivalents:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;First Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent: || &#039;&#039;&#039;Second Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent:&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PROJECT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  ||  ||&#039;&#039;&#039;EDIT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;New&#039;&#039;&#039;|| = Create new project in application.||Right-Amiga N||&#039;&#039;&#039;Cut&#039;&#039;&#039;|| = Cut the selected content into the Clipboard.||Right-Amiga X&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Open...&#039;&#039;&#039;|| = Open the file containing a project.||Right-Amiga O||&#039;&#039;&#039;Copy&#039;&#039;&#039;|| = Copy the selected content into the Clipboard.||Right-Amiga C&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save&#039;&#039;&#039;|| = Save the project to it&#039;s current file name.||Right-Amiga S||&#039;&#039;&#039;Paste&#039;&#039;&#039;|| = Paste the Clipboard contents into the project (at the current location).||Right-Amiga V&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save As...&#039;&#039;&#039;|| = Save the project to a file of a new name.|| ||&#039;&#039;&#039;Undo&#039;&#039;&#039;|| = Undo the last change to current project.||Right-Amiga Z&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Print&#039;&#039;&#039;|| = Print the current project.||Right-Amiga P||&#039;&#039;&#039;Redo&#039;&#039;&#039;|| = Restore the last change &amp;quot;undone&amp;quot; in the current project.|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Close&#039;&#039;&#039;|| = Close the project.|| || || ||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Quit&#039;&#039;&#039;|| = Quit the application.||Right-Amiga Q|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Menu Variations====&lt;br /&gt;
AmigaOS also includes a couple additional ways menus can be can serve the user:&lt;br /&gt;
&lt;br /&gt;
=====Pop-Up Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBPopUpMenu.jpg|frame|right]]&lt;br /&gt;
In the GUI preferences editor you can configure menus to &amp;quot;pop-up&amp;quot; under the mouse pointer whenever you right-click the mouse.  This means you do not need to move the mouse to the top of the screen to use the menus.  There are also options for making menus &amp;quot;sticky&amp;quot;, meaning that you don&#039;t need to drag the mouse to navigate the menus, but rather just right click and the menus stay open till you make a selection or click away.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Context Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBContextMenu.jpg|frame|right]]&lt;br /&gt;
The Workbench (with a utility added by default) and many applications provide &amp;quot;contextural menus&amp;quot;.  This means that you can put your mouse pointer over elements and right-click to pop-up a menu of things that are specific to the item you clicked over.  In the case of the Workbench (with the Context Menus utility), right clicking on a file will pop-up a menu of things that could be done with that file, like deleting it.&lt;br /&gt;
&lt;br /&gt;
All of these features provide both a simple means of using many functions within an application and at the same time allowing the user to configure a very efficient user interface that responds to nearly every whim.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Icons ===&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
Icons are small images which can represent a disk, a directory, an application file or data file.  Icons are primarilly used within the AmigaOS Workbench environment to represent all the file system objects the user can manipulate.  With these icons it is possible to select files, open them, delete them or move them around within the Workbench.  Applications may also make more limited use of icons to represent file system objects or may be used as imagery in an &amp;quot;icon bar&amp;quot; of buttons that can be clicked to perform various actions represented by icon imagery, like the Clock above.&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[[File:LibDiskIcon.png|frame|left|100px|Drive icon]]  [[File:Icons.png|frame|right|Directory with sub-directory, data and application file icons]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AmigaOS also uses different icon imagery to indicate various types of icons - drives, directories, files and applications.  Drive or partition icons look like little hard drives.  &lt;br /&gt;
A directory icon will look like a cabinet &amp;amp; drawer whereas a file icon will be designed to give a clue about the file content.&lt;br /&gt;
Data files are normally shown with a &amp;quot;page&amp;quot; motif and some graphics or text to reflect the file type.&lt;br /&gt;
Application files typically have the most free-form graphics that reflect their purpose, name or developer.&lt;br /&gt;
&lt;br /&gt;
The user can also edit the icon imagery using the icon editor, change how icons react to being double-clicked and adjust parameters stored within the icon file that affect how the represented file will be used.&lt;br /&gt;
&lt;br /&gt;
Many applications and all AmigaOS file requesters allow Workbench icons to be &amp;quot;dragged and dropped&amp;quot; into the application or requester windows and the associated file will be recognized by the application, if possible.&lt;br /&gt;
&lt;br /&gt;
==== Icon states ====&lt;br /&gt;
&lt;br /&gt;
Icons can look different not only because of their image but also depending on their state.  &lt;br /&gt;
&lt;br /&gt;
As you can see in the directory example, the 2 top left icons appear semi-transparent.  This subtle difference reflects whether the file or directory has an associated icon file with it.  In AmigaOS, any directory or file can have such an icon file that stores a unique icon image, unique program settings or specific settings for that file or directory.  That information can be adjusted within the Workbench and is automatically stored in a companion file with the same name, but with an added &#039;&#039;&#039;.info&#039;&#039;&#039; suffix.  &lt;br /&gt;
&lt;br /&gt;
While many files &amp;amp; directories and most applications have such &amp;quot;.info files&amp;quot; with them, they are not required and the Workbench can be set to show you &amp;quot;default icons&amp;quot; (based on the file types, etc.) so you can manipulate the corresponding objects.  Of course, AmigaOS can also be configured on a directory-by-directory basis to only show files that have associated &amp;quot;.info&amp;quot; files.&lt;br /&gt;
&lt;br /&gt;
In the same picture, the 2 top right directory icons also look slightly different.  While the &#039;&#039;&#039;Utilities selected&#039;&#039;&#039; and the &#039;&#039;&#039;Utilities unselected&#039;&#039;&#039; are the same icon, their image is a bit different. The drawer of the first one is slightly opened and there is a &amp;quot;glow&amp;quot; effect arround the first icon. These two visual clues show you the first directory icon has been selected by the user whereas the second one is not.&lt;br /&gt;
&lt;br /&gt;
==== App Icons ====&lt;br /&gt;
&lt;br /&gt;
Many applications provide the option to be &amp;quot;iconified&amp;quot; either by clicking on an iconification gadget in their window title bars or by selecting a menu item.  In those events, the application&#039;s window will disappear and an &amp;quot;app icon&amp;quot; will appear on the background of the Workbench screen.  Double-clicking on the app icon will cause the icon to disappear and the application&#039;s window to reappear.  Even while the application is iconified, it does continue to run and perform whatever the user may have it doing.&lt;br /&gt;
&lt;br /&gt;
Some applications may also place an app icon on the Workbench background even while the application is open to allow the user to be able to drop other file icons on the app icon and have them be used by the application.&lt;br /&gt;
&lt;br /&gt;
=== Graphic gadgets ===&lt;br /&gt;
Within AmigaOS and application windows, there can be any number of graphic devices meant to be operated by your mouse with clicks and drags - these are known as &amp;quot;gagdets&amp;quot;.  In most cases, the gagdets are simple analogs of real world objects - like buttons you press with your finger, forms you fill out with a pencil or tabs on folders.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig5-1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Buttons ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Buttons.jpg|frame|right]]&lt;br /&gt;
Buttons (or &amp;quot;Boolean gadgets&amp;quot;) are some of the most common GUI objects.  With a simple left-click of your mouse button, they are used to perform actions, set configurations or indicate choices.  &lt;br /&gt;
&lt;br /&gt;
In AmigaOS, clicking &amp;quot;down&amp;quot; on a button typically causes the button to be rendered differently, to reflect that it has been &amp;quot;pressed&amp;quot;.  Engaging the button is not actually recognized until you let go with the mouse button over the graphic gadget.  This means that while the gadget has been clicked down, you always have the option of moving the mouse off the button gadget and then letting go and it will be as though the button had never been &amp;quot;pressed&amp;quot; or clicked on.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Text gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-StringGadgets.jpg|frame|right]]&lt;br /&gt;
A text gadget (or &amp;quot;String gadget&amp;quot;) works like a space in a paper form to be filled out - left click in the gadget, you will see a cursor appear and you can type your answer.&lt;br /&gt;
Once you&#039;ve finished typing your infrormation, you can either press the enter, carriage-return or tab keys for your entry to be recognized.&lt;br /&gt;
&lt;br /&gt;
Text or string gadgets can also come in a number of variants for specific uses.  Some can limit input to be numeric only (and may have adjacent buttons to increment or decrement the value).  Some string gadgets may be specifically be meant for file or directory names and they have adjacent gagdets that will bring up a file requester to set the value.  Many times a numeric gadget is paired with a slider gadget (as in the example above), where the value can either be set by typing in the gadget or by using the slider.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Sliders &amp;amp; Scroll Bars ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-SliderGadgets.jpg|frame|right]]&lt;br /&gt;
Slider gadgets work like controls many of have seen on their stereo systems - left-click and drag on the gadget &amp;quot;knob&amp;quot;  to move it back and forth to set a value.  A more sophisticated variant of the slider is the &amp;quot;scroll bar&amp;quot; that has a variably sized scroll bar contained in a scroll box that lets you see what proportion of the active range is visible or active.&lt;br /&gt;
&lt;br /&gt;
With all slider and scroller gadgets AmigaOS also lets you click in the area to either side of the knob or slider to adjust the setting.  In the case of sliders, the value will typically move by a fixed amount (+/- 1 or some suitable increment).  In the case of scroll bars, clicking in the scroll box on either side of the scroll bar will cause the value to move in increments of the scroll bar size.  Scroll bars also come with &amp;quot;scroll arrows&amp;quot; at the end of the scroll box that allow for finer movement of the scroll bar.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Cycle gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CycleGadgets.jpg|frame|right]]&lt;br /&gt;
Cycle gagdets are a variant on buttons that let you select from a number of specific choices.  You can either click on the majority of the gadget to pop-up a list of choices to select from or click on the circular arrow to cycle between the list of choices.  Cycle gagdets rarely cause actions to occur, they just adjust some setting or configuration.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Check Box &amp;amp; Radio Button gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CheckRadioGadgets.jpg|frame|right]]&lt;br /&gt;
Another variant of buttons, check boxes can be clicked to set on/off or yes/no conditions with a checkmark, just like a check box in a paper form.  Radio buttons are another variant where two or more round buttons are presented in a set and only one of the set can be clicked and activated, like the buttons on a stereo system.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Tabs ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Tabs.jpg|frame|right]]&lt;br /&gt;
Tabs are a graphical gadget that is used in combination with a &amp;quot;pages&amp;quot; or sets of gadgets and/or information, and you can click on the &amp;quot;tabs&amp;quot; to switch between the pages - like you might in a real notebook with tabbed pages.  This provides a efficient way to present more information and settings in a compact interface.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
====Requesters====&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-5.png|frame|right]]&lt;br /&gt;
As one uses AmigaOS and its applications, from time to time a &amp;quot;Requester&amp;quot; window may appear to ask the user a question - basically windows with gadgets in them. Such requesters can appear to confirm an action, obtain more information, make a selection or configuration. Typically a series of buttons across the bottom of the window will dispatch the requester, with the bottom-left button gadget indicating some affirmative choice and the bottom-right button gagdet cancelling the requester (performing no action or change).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keyboard Operation of Gadgets====&lt;br /&gt;
As with so many things, AmigaOS and its applications provide a secondary way to operate many of these gadgets - by keyboard.  If a window contains text gadgets, pressing your keyboard&#039;s TAB key will activate the text gadgets in sequence (a cursor will appear in each so you can type &amp;amp; edit).  Each press of the TAB key will cycle to the next gadget and pressing SHIFT + TAB will cycle through the gadgets in reverse order.&lt;br /&gt;
&lt;br /&gt;
You may have noticed in many of the above sample images that many of the gagdets or their adjacent &amp;quot;label&amp;quot; texts contain a single underlined character.  This is a sign that pressing that key on your keyboard will activate that gadget.  Each gadget can then be operated by your keyboard - just like clicking on a button, clicking on a tab, setting a text or numeric value, etc.  Of course, if you are in the midst of typing in a text gadget, then things you type will go into that gadget instead of operating other gagdets.&lt;br /&gt;
&lt;br /&gt;
== Finding Files in AmigaOS ==&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-ASLReq.jpg|frame|right]]&lt;br /&gt;
AmigaOS provides a consistent method for navigating your file system and finding your files from within your apps - the &amp;quot;ASL file requester&amp;quot;.  It is used by everything in AmigaOS and most third party applications.  It is the window (or &amp;quot;requester&amp;quot;) that appears when you want to open or save files.&lt;br /&gt;
&lt;br /&gt;
As you can see, the ASL file requester presents the files in a given location in your file systems (a directory or &amp;quot;drawer&amp;quot;) and shows their size, date of creation or last modification and any comments attached to the file.  The above example shows the same directory as appeared above in this page.&lt;br /&gt;
&lt;br /&gt;
At the bottom corners of the window are buttons to accept the selection (&amp;quot;OK&amp;quot;) or cancel the requester.  Between those are buttons to view all the drives &amp;amp; partitions on your system (&amp;quot;Volumes&amp;quot;) or to move to the &amp;quot;Parent&amp;quot; of the current directory.&lt;br /&gt;
&lt;br /&gt;
Also at the bottom of the window you will see three text gadgets.  The first of these is optional and allows you to filter what is shown in the file list - it is now shown filtering out any file with a &amp;quot;.info&amp;quot; suffix (those are AmigaOS icon files).  The next two lines reflect the current directory path name and the currently selected file name (also selected in the file list above).  In the case of saving files, you would type any name you wanted in the bottom text field to create a new file.  Clicking on the titles of the file list will let you sort the file list.&lt;br /&gt;
&lt;br /&gt;
Of course this being AmigaOS, the ASL requester has its own &amp;quot;preferences editor&amp;quot; that lets you set how the requester appears, is sorted by default and a number of mouse button short-cuts.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Controlling AmigaOS - Which Way? ==&lt;br /&gt;
&lt;br /&gt;
AmigaOS provides a number of parallel ways that the user can control and put their Amigas to use.  The easiest and most common method is to use the AmigaOS graphic icons, windows and mouse interface - the &amp;quot;Workbench&amp;quot; - using all the GUI elements described above.  But AmigaOS also provides a more traditional or &amp;quot;old fashioned&amp;quot; method called a command line interface (the &amp;quot;CLI&amp;quot; or &amp;quot;Shell&amp;quot;), where the user can type text commands and interact using a text interface.  AmigaOS also provides a unique means of &amp;quot;interprocess communications&amp;quot; where user can have many applications and parts of the OS &amp;quot;talk&amp;quot; to each other. &lt;br /&gt;
&lt;br /&gt;
=== The Workbench &amp;amp; Intuition ===&lt;br /&gt;
&lt;br /&gt;
As we described above, AmigaOS provides the &amp;quot;Workbench&amp;quot;, a straightforward, efficient and easy graphical means to start applications, manage your computer and all your files.   Files and programs are represented with icons, generally known as &amp;quot;Projects&amp;quot; and &amp;quot;Tools&amp;quot;.  They can be stored in any arrangement of directories (&amp;quot;Drawers&amp;quot;).  You double-click on a program icon and it will open in a Intuition GUI window on your Workbench screen. &lt;br /&gt;
&lt;br /&gt;
Please see the section about the AmigaOS [http://wiki.amigaos.net/index.php/UserDoc:Workbench Workbench] to learn these concepts:&lt;br /&gt;
&lt;br /&gt;
* What is the Workbench&lt;br /&gt;
* Workbench menus&lt;br /&gt;
* Keyboard control&lt;br /&gt;
* Workbench requesters&lt;br /&gt;
* Configuration&lt;br /&gt;
* Workbench help&lt;br /&gt;
&lt;br /&gt;
=== The Shell &amp;amp; DOS Commands ===&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Window-Shell.jpg|frame|right]]&lt;br /&gt;
The AmigaOS Shell can be opened by double-clicking the &amp;quot;Shell&amp;quot; icon in the AmigaOS &amp;quot;System&amp;quot; drawer.  The Shell is a text based interface that allows you to perform most of the same operations as the Workbench - to run and interact with application programs, manage files and control your Amiga computer.  AmigaOS also comes with dozens of standard &amp;quot;DOS commands&amp;quot; (programs purely meant for Shell usage).  Simply enter the name of a program or command (like &amp;quot;dir&amp;quot;) and press Enter, the command or program will run and it will print its results in the Shell window.  While considered old fashioned, many users find the Shell to still be the most efficient way to perform many tasks on the Amigas.&lt;br /&gt;
&lt;br /&gt;
Please see the section on the [[UserDoc:Shell|AmigaOS Shell]] to learn more.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Scripts &amp;amp; Messages ===&lt;br /&gt;
&lt;br /&gt;
Scripts are simple text files that contain a list of commands written in a variety of languages: the AmigaDOS, Arexx and Python languages are provided with AmigaOS - there are many others.  Each of these language has its strengths.  You&#039;ll have to learn the one that suits what you want to do.  You can create a script using a text editor. You can run such scripts from the Workbench or from the shell (or from any other script). By using ARexx ports provided by AmigaOS components (the Workbench or Multiview, for example) or third-party applications, scripts can be used to make your computer perform a wide variety of actions.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS System Tools ==&lt;br /&gt;
AmigaOS comes with a variety of programs to help in the preparation of your computer.  These include tools for:&lt;br /&gt;
&lt;br /&gt;
* Drive preparation (Media Toolbox, Format, Format DCRW &amp;amp; Mounter).&lt;br /&gt;
* Font Handling (TypeManager &amp;amp; FixFonts).&lt;br /&gt;
* Script Languages (RexxMast and Python).&lt;br /&gt;
* The Shell.&lt;br /&gt;
* Miscellaneous Utilities (Find, Help, Grim Reaper &amp;amp; Ringhio Server).&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Utilities ==&lt;br /&gt;
AmigaOS comes with a selection of utilities to assist the user, including:&lt;br /&gt;
&lt;br /&gt;
* Commodities.&lt;br /&gt;
* Editors (Notepad, MEmacs, PrefsObjectEditor &amp;amp; IconEdit).&lt;br /&gt;
* Postscript oriented apps (AmiPDF, AmiGS &amp;amp; Ghostscript).&lt;br /&gt;
* Disk apps (PartitionWizard &amp;amp; RawDisk).&lt;br /&gt;
* Screenblankers.&lt;br /&gt;
* AmiDock and Dockies.&lt;br /&gt;
* The Unarc dearchiver.&lt;br /&gt;
* PlayCD.&lt;br /&gt;
* Several &amp;quot;sub-programs&amp;quot; that are used by other system utilities (blankers, dockies)&lt;br /&gt;
* Miscellaneous apps (Clock, printing apps, KeyShow, install apps, etc.).&lt;br /&gt;
&lt;br /&gt;
Read [[Utilities|here]] to find all of them explained further.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Preferences ==&lt;br /&gt;
AmigaOS comes with a number of small programs used for modifying the system&#039;s settings. These are stored in the [[Prefs]] drawer, and include programs for modifying the following settings:&lt;br /&gt;
&lt;br /&gt;
* General appearance&lt;br /&gt;
* Screen resolution&lt;br /&gt;
* Desktop and window backgrounds&lt;br /&gt;
* Language settings&lt;br /&gt;
* Keyboard and mouse settings&lt;br /&gt;
* Printer settings&lt;br /&gt;
* Audio settings&lt;br /&gt;
&lt;br /&gt;
Read [[Prefs|here]] for details and explanations of all the preference programs.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=UserDoc_talk:Main&amp;diff=7724</id>
		<title>UserDoc talk:Main</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=UserDoc_talk:Main&amp;diff=7724"/>
		<updated>2014-05-29T14:45:02Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: Created page with &amp;quot;Just a thought: Might it be a good idea to have a User Documentation navigation section to the left, similar to the current Developers section? I was thinking that a few links...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Just a thought: Might it be a good idea to have a User Documentation navigation section to the left, similar to the current Developers section? I was thinking that a few links for reference for users might be a good thing, and much better than traversing through 2 or 3 pages to get to a reference section on Prefs programs or AmigaDOS commands or the likes? I&#039;d add it myself but I&#039;m not sure I&#039;m able to...&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7722</id>
		<title>UserDoc:Introduction to AmigaOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7722"/>
		<updated>2014-05-19T14:20:10Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* App Icons */ Grammar correction: &amp;quot;by menu item&amp;quot; -&amp;gt; &amp;quot;by selecting a menu item&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Like any modern personal computer system, AmigaOS presents a graphic interface and relies on common peripherals to let the user control their system.  &lt;br /&gt;
Beyond most systems, AmigaOS provides more flexibility and options in how the user can approach, configure and use their Amiga computer.&lt;br /&gt;
&lt;br /&gt;
In this page we will describe the details of AmigaOS graphic user interface (GUI) - how screens, windows and gadgets are presented and how you can use them.&lt;br /&gt;
We will also describe the various means by which the user can control and operate AmigaOS.  In additional pages, you can read about  [[UserDoc:How AmigaOS Works|how AmigaOS works]]  and what its components are.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Input - Point, Click and Type ==&lt;br /&gt;
&lt;br /&gt;
There are two common ways you can use and control your AmigaOS system - by mouse and keyboard.  &lt;br /&gt;
&lt;br /&gt;
But AmigaOS also lets you control your system by other input devices (like touchscreens or voice recognition) depending on drivers and devices connected.  Depending on software installed, AmigaOS can also be remotely controlled by networked protocols (like VNC and Synergy).  Finally, AmigaOS can be controlled internal scripts set up by the User.&lt;br /&gt;
&lt;br /&gt;
=== Using the mouse ===&lt;br /&gt;
&lt;br /&gt;
[[File:Style2.5.png|frame|right]]&lt;br /&gt;
&lt;br /&gt;
Typically in AmigaOS, you use a mouse to act on graphic elements (like &amp;quot;gadgets&amp;quot;, &amp;quot;icons&amp;quot; or webpage &amp;quot;links&amp;quot;).  By default, AmigaOS expects and supports mice or trackball pointing devices with at least two buttons.  The left mouse button is used to &amp;quot;left-click&amp;quot; on graphic objects, to select them or operate them. The right mouse button is used to &amp;quot;right-click&amp;quot; and display the menus of the current application.&lt;br /&gt;
&lt;br /&gt;
Optionally, one can use a mouse or trackball device with three (a &amp;quot;middle&amp;quot; button) and four buttons.  With such devices, the functionality of the additional buttons can vary by application or environment.  These functionalities can typically be configured by the user in specific applications or within AmigaOS (globally).&lt;br /&gt;
&lt;br /&gt;
Furthermore, scroll wheels are supported by AmigaOS in a context-based fashion.  If the current application&#039;s window is scrollable, the scrollwheel will act on that area.  If the mouse pointer is positioned over a specifically scrollable gadget, the scrollwheel will affect that gadget.&lt;br /&gt;
&lt;br /&gt;
In some applications and environments, you can also &amp;quot;double-click&amp;quot; (click twice, quickly) with the left button on an object to engage them.  In the Workbench file manager, a single mouse click will only &amp;quot;select&amp;quot; an icon, whereas a double-click will open drawer/directory, run an application or open a file in an associated program.&lt;br /&gt;
&lt;br /&gt;
Beside &amp;quot;clicking&amp;quot; - pressing down and releasing a mouse button at a specific location - you can also perform what is known as &amp;quot;dragging&amp;quot;, which means clicking down and then moving the mouse around before releasing the mouse button.  This is typically always done with the left mouse button and is done to select objects (draw a box around them), to adjust a control slider or to resize a window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Using the keyboard ===&lt;br /&gt;
&lt;br /&gt;
Of course the keyboard is used to enter text into text editing areas.  But your keyboard can do so much more with its special &amp;quot;qualifier&amp;quot; keys and AmigaOS.&lt;br /&gt;
&lt;br /&gt;
The most common example of a qualifier key is the &amp;quot;Shift&amp;quot; key which causes typed text to be made upper-case or capitalized.  There are more qualifier keys on most keyboards, here is a list of all of them:&lt;br /&gt;
* &#039;&#039;&#039;the Shift keys&#039;&#039;&#039; - the common key that causes your text to be capitalized.&lt;br /&gt;
* &#039;&#039;&#039;The &amp;quot;Alternate&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Alt&amp;quot; keys typically to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Control&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Ctrl&amp;quot; keys also to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Amiga&amp;quot; keys&#039;&#039;&#039; - special &amp;quot;A&amp;quot; keys on the right and left side of the space bar.  Besides being unique to AmigaOS, the right and left Amiga keys always mean different things (unlike the rest of the qualifier keys, most of the time).  If you have a non-AmigaOS keyboard, the &amp;quot;Windows&amp;quot; or MacOS &amp;quot;Command&amp;quot; keys function as &amp;quot;Amiga&amp;quot; keys.&lt;br /&gt;
** &#039;&#039;&#039;the Right Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; within your current application.&lt;br /&gt;
** &#039;&#039;&#039;the Left Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; that are globally active anytime and anywhere in your AmigaOS system.&lt;br /&gt;
While all of these qualifier keys don&#039;t usually do anything on their own, when you press and hold one or more of these keys down while pressing regular keys, they can change what you type (capitalizing or making alternate characters) or become powerful &amp;quot;short-cuts&amp;quot; within your applications or throughout your entire AmigaOS system.&lt;br /&gt;
&lt;br /&gt;
The most famous short-cuts are the &#039;&#039;&#039;copy&#039;&#039;&#039;, &#039;&#039;&#039;cut&#039;&#039;&#039; and &#039;&#039;&#039;paste&#039;&#039;&#039; operations that you can perform on selected text:&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga C&#039;&#039;&#039; short-cut copies any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga X&#039;&#039;&#039; short-cut &amp;quot;cuts&amp;quot; any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga V&#039;&#039;&#039; short-cut &amp;quot;pastes&amp;quot; any text or content from the Clipboard into your application (at the current cursor location).&lt;br /&gt;
&lt;br /&gt;
== The AmigaOS GUI - Intuition ==&lt;br /&gt;
&lt;br /&gt;
When AmigaOS has started, you will typically see the Workbench file manager.  This is the start of your experience with the AmigaOS GUI and it&#039;s most basic elements:  a screen with menus and windows containing icons and &amp;quot;gagdets&amp;quot;.  These components are the basic building blocks of virtually all AmigaOS &amp;amp; application interfaces.&lt;br /&gt;
&lt;br /&gt;
As with most things in AmigaOS, almost all of the following components can also be almost infinitely reconfigured, adjusted and graphically varied by the user.  In the AmigaOS &amp;quot;Preferences&amp;quot; drawer, the &amp;quot;GUI&amp;quot;, &amp;quot;ASL&amp;quot;, &amp;quot;Locale&amp;quot;, &amp;quot;Font&amp;quot;, &amp;quot;Palette&amp;quot;, &amp;quot;Poiner&amp;quot;, &amp;quot;PopUpMenu&amp;quot;, &amp;quot;Screens&amp;quot;, &amp;quot;Workbench&amp;quot; and &amp;quot;WBPattern&amp;quot; preferences editors easily allow a user to reconfigure the GUI of their Amiga in drammatic ways.&lt;br /&gt;
&lt;br /&gt;
AmigaOS also supports the use of alternate GUI systems in parallel with the default &amp;quot;Intuition&amp;quot; (aka &amp;quot;Reaction&amp;quot;) GUI system.  By default AmigaOS also comes with the &amp;quot;Magic User Interface system (&amp;quot;MUI&amp;quot;, a variant of the basic AmigaOS GUI system.  More than Intuition, MUI can be reconfigured even more widely using its own MUI configuration app.  &lt;br /&gt;
&lt;br /&gt;
Additionally, AmigaOS can use a number of third-party &amp;quot;cross-platform&amp;quot; GUI systems:  &amp;quot;AmiCygnix&amp;quot; GUI system - a native X11 GUI implementation for AmigaOS - and a native port of the &amp;quot;Qt&amp;quot; GUI system.  With either of these systems, it is possible to run ported applications compiled for AmigaOS, but running with these cross-platform GUI systems.&lt;br /&gt;
&lt;br /&gt;
To start with, we will explore the elements that make up the AmigaOS GUI system.&lt;br /&gt;
&lt;br /&gt;
=== Screens ===&lt;br /&gt;
&lt;br /&gt;
As start-up, the Workbench will be running on its &amp;quot;Workbench Screen&amp;quot;.  This will be the default location where most other application windows will also appear when started.&lt;br /&gt;
&lt;br /&gt;
Typically an AmigaOS screen will have a &amp;quot;title bar&amp;quot; across the top with a graphical &amp;quot;depth gadget&amp;quot; at the right end.  In the case of the Workbench screen,&lt;br /&gt;
there will be an AmigaOS &amp;quot;boing ball&amp;quot; at the left end and the title bar will display certain system information (OS version, memory availability, etc.).  Within the screen, the Workbench and any other applications can open windows, display icons and other GUI devices.  If you right-click over the title bar, it becomes a &amp;quot;Menu Bar&amp;quot;, showing you the control menus that are available for that application.&lt;br /&gt;
&lt;br /&gt;
In many cases, other applications may open screens in addition to the Workbench screen.  The &amp;quot;depth gadget&amp;quot; at the right end of each screen&#039;s title bar allows you to click from screen from screen.  Besides clicking on the screen&#039;s depth gadet, AmigaOS also lets the user see other screens behind the front screen by &amp;quot;dragging&#039; down on the screen title bar.&lt;br /&gt;
&lt;br /&gt;
The characteristics of the Workbench screen such as resolution and color depth can be configured in the &amp;quot;Screenmode&amp;quot; preferences editor.  Other screens can be either be configured in the &amp;quot;Screens&amp;quot; preferences editor or from within individual applications.  Typically, AmigaOS applications also give the user the choice of whether application runs on their own screens or the &amp;quot;public&amp;quot; Workbench screen.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
Windows are graphic containers that appear within AmigaOS screens.  Windows can be created by any number of different applications - the Workbench, Shell sessions or applications.  Outside of the Workbench file manager, each window usually reflects each individual running application.  In some cases, one application may open multiple documents in separate windows or additional &amp;quot;requester&amp;quot; windows might appear for an application.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig4-1.png]]&lt;br /&gt;
&lt;br /&gt;
Almost all windows of AmigaOS will have these common elements:&lt;br /&gt;
* &#039;&#039;&#039;Borders&#039;&#039;&#039; - A border around the window&#039;s contents.  Holding the Shift+Left-Amiga keys down while dragging any border will drag the window around.  &lt;br /&gt;
* &#039;&#039;&#039;Title bar&#039;&#039;&#039; - A thicker top border that typically contains a name of the application or it&#039;s contents.  The area of the title bar acts as a &amp;quot;drag bar&amp;quot; which you can use to drag the window around the screen.&lt;br /&gt;
* &#039;&#039;&#039;Depth gadget&#039;&#039;&#039; - The right-most gadget in the top title bar that either pulls the window to front (if it isn&#039;t frontmost) or pushes it to the back (if it&#039;s in front).  Holding down the Shift key while clicking this gagdet pushes the window to the back.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS, windows may also optionally have these additional features and elements:&lt;br /&gt;
* &#039;&#039;&#039;Close gadget&#039;&#039;&#039; - The left-most gadget in the title bar that closes the window.&lt;br /&gt;
* &#039;&#039;&#039;Scroll bar(s) and arrows&#039;&#039;&#039; - If the contents of the window can be scrolled in vertically and/or horizontally, there will be a scroll bar with arrow scroll buttons.  These scroll bars can also be used if the mouse pointer is over a scroll bar and the mouse scroll wheel is used.&lt;br /&gt;
* &#039;&#039;&#039;Zoom gadget&#039;&#039;&#039; - the second gadget from the right-most of the title bar which switches the window between two sizes.  Holding down the Shift key while clicking this gadget will make it fill the screen.&lt;br /&gt;
* &#039;&#039;&#039;Iconification gadget&#039;&#039;&#039; - left-most of the right-hand gadgets in the title bar which causes the window to disappear into an icon on the Workbench background - thus &amp;quot;Iconifying&amp;quot; the window or application.&lt;br /&gt;
* &#039;&#039;&#039;Sizing gadget&#039;&#039;&#039; - In the case of windows that can be resized, this is the gadget in the bottom right corner of the window that you can drag to resize the window.&lt;br /&gt;
&lt;br /&gt;
Each AmigaOS application can use almost infinite combinations of these features in the make up of their windows.&lt;br /&gt;
&lt;br /&gt;
=== Menus ===&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-4.png|frame|right]]&lt;br /&gt;
Menus are lists of items that will allow you to see and use what commands are available in an application.  The Workbench uses menus you can use to perform actions on the Workbench and its contents.  Menus typically provide many more functions and commands than can be presented to the user than just graphic buttons, etc. within an application&#039;s window, as a result they are a primary way most applications are used.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS menus can always be found for the current application by moving the mouse to the top of the screen and right-clicking.  The screen title bar will become a menu bar and will show the names of all the current application&#039;s menus.  &lt;br /&gt;
&lt;br /&gt;
By dragging with the right mouse button, each menu will display its &amp;quot;menu items&amp;quot;.  Each of those menu items corresponds to a command or setting.  In some cases you will find a &amp;quot;check box&amp;quot; on a menu item which you can click on to toggle a setting.  In other cases, you will find that menu items have a little arrow head that indicates that item actually has a &amp;quot;sub-menu&amp;quot; - a menu within a menu.  Menus ending with ellipses (&amp;quot;...&amp;quot;) indicate that menu item will open a window that can be cancelled without commiting any command.  For those menu items that might be deactivated (they may not apply at the moment), they will be &amp;quot;greyed-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The labels of many menu items will also include a letter or two with an &amp;quot;A&amp;quot; at the right edge.  This indicates what the keyboard Right-Amiga &amp;quot;short cut&amp;quot; is the equivalent of using that menu item within that application.  In the above screen shot, you can see that pressing the two keys - &amp;quot;Right-Amiga&amp;quot; and &amp;quot;N&amp;quot; - would do the same as that menu item - to create a new drawer.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Consistent Organization====&lt;br /&gt;
For the sake of consistency (when applicable), the first two AmigaOS menus of any application are typically organized with the following hierarchy and use these keyboard equivalents:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;First Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent: || &#039;&#039;&#039;Second Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent:&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PROJECT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  ||  ||&#039;&#039;&#039;EDIT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;New&#039;&#039;&#039;|| = Create new project in application.||Right-Amiga N||&#039;&#039;&#039;Cut&#039;&#039;&#039;|| = Cut the selected content into the Clipboard.||Right-Amiga X&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Open...&#039;&#039;&#039;|| = Open the file containing a project.||Right-Amiga O||&#039;&#039;&#039;Copy&#039;&#039;&#039;|| = Copy the selected content into the Clipboard.||Right-Amiga C&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save&#039;&#039;&#039;|| = Save the project to it&#039;s current file name.||Right-Amiga S||&#039;&#039;&#039;Paste&#039;&#039;&#039;|| = Paste the Clipboard contents into the project (at the current location).||Right-Amiga V&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save As...&#039;&#039;&#039;|| = Save the project to a file of a new name.|| ||&#039;&#039;&#039;Undo&#039;&#039;&#039;|| = Undo the last change to current project.||Right-Amiga Z&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Print&#039;&#039;&#039;|| = Print the current project.||Right-Amiga P||&#039;&#039;&#039;Redo&#039;&#039;&#039;|| = Restore the last change &amp;quot;undone&amp;quot; in the current project.|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Close&#039;&#039;&#039;|| = Close the project.|| || || ||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Quit&#039;&#039;&#039;|| = Quit the application.||Right-Amiga Q|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Menu Variations====&lt;br /&gt;
AmigaOS also includes a couple additional ways menus can be can serve the user:&lt;br /&gt;
&lt;br /&gt;
=====Pop-Up Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBPopUpMenu.jpg|frame|right]]&lt;br /&gt;
In the GUI preferences editor you can configure menus to &amp;quot;pop-up&amp;quot; under the mouse pointer whenever you right-click the mouse.  This means you do not need to move the mouse to the top of the screen to use the menus.  There are also options for making menus &amp;quot;sticky&amp;quot;, meaning that you don&#039;t need to drag the mouse to navigate the menus, but rather just right click and the menus stay open till you make a selection or click away.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Context Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBContextMenu.jpg|frame|right]]&lt;br /&gt;
The Workbench (with a utility added by default) and many applications provide &amp;quot;contextural menus&amp;quot;.  This means that you can put your mouse pointer over elements and right-click to pop-up a menu of things that are specific to the item you clicked over.  In the case of the Workbench (with the Context Menus utility), right clicking on a file will pop-up a menu of things that could be done with that file, like deleting it.&lt;br /&gt;
&lt;br /&gt;
All of these features provide both a simple means of using many functions within an application and at the same time allowing the user to configure a very efficient user interface that responds to nearly every whim.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Icons ===&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
Icons are small images which can represent a disk, a directory, an application file or data file.  Icons are primarilly used within the AmigaOS Workbench environment to represent all the file system objects the user can manipulate.  With these icons it is possible to select files, open them, delete them or move them around within the Workbench.  Applications may also make more limited use of icons to represent file system objects or may be used as imagery in an &amp;quot;icon bar&amp;quot; of buttons that can be clicked to perform various actions represented by icon imagery, like the Clock above.&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[[File:LibDiskIcon.png|frame|left|100px|Drive icon]]  [[File:Icons.png|frame|right|Directory with sub-directory, data and application file icons]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AmigaOS also uses different icon imagery to indicate various types of icons - drives, directories, files and applications.  Drive or partition icons look like little hard drives.  &lt;br /&gt;
A directory icon will look like a cabinet &amp;amp; drawer whereas a file icon will be designed to give a clue about the file content.&lt;br /&gt;
Data files are normally shown with a &amp;quot;page&amp;quot; motif and some graphics or text to reflect the file type.&lt;br /&gt;
Application files typically have the most free-form graphics that reflect their purpose, name or developer.&lt;br /&gt;
&lt;br /&gt;
The user can also edit the icon imagery using the icon editor, change how icons react to being double-clicked and adjust parameters stored within the icon file that affect how the represented file will be used.&lt;br /&gt;
&lt;br /&gt;
Many applications and all AmigaOS file requesters allow Workbench icons to be &amp;quot;dragged and dropped&amp;quot; into the application or requester windows and the associated file will be recognized by the application, if possible.&lt;br /&gt;
&lt;br /&gt;
==== Icon states ====&lt;br /&gt;
&lt;br /&gt;
Icons can look different not only because of their image but also depending on their state.  &lt;br /&gt;
&lt;br /&gt;
As you can see in the directory example, the 2 top left icons appear semi-transparent.  This subtle difference reflects whether the file or directory has an associated icon file with it.  In AmigaOS, any directory or file can have such an icon file that stores a unique icon image, unique program settings or specific settings for that file or directory.  That information can be adjusted within the Workbench and is automatically stored in a companion file with the same name, but with an added &#039;&#039;&#039;.info&#039;&#039;&#039; suffix.  &lt;br /&gt;
&lt;br /&gt;
While many files &amp;amp; directories and most applications have such &amp;quot;.info files&amp;quot; with them, they are not required and the Workbench can be set to show you &amp;quot;default icons&amp;quot; (based on the file types, etc.) so you can manipulate the corresponding objects.  Of course, AmigaOS can also be configured on a directory-by-directory basis to only show files that have associated &amp;quot;.info&amp;quot; files.&lt;br /&gt;
&lt;br /&gt;
In the same picture, the 2 top right directory icons also look slightly different.  While the &#039;&#039;&#039;Utilities selected&#039;&#039;&#039; and the &#039;&#039;&#039;Utilities unselected&#039;&#039;&#039; are the same icon, their image is a bit different. The drawer of the first one is slightly opened and there is a &amp;quot;glow&amp;quot; effect arround the first icon. These two visual clues show you the first directory icon has been selected by the user whereas the second one is not.&lt;br /&gt;
&lt;br /&gt;
==== App Icons ====&lt;br /&gt;
&lt;br /&gt;
Many applications provide the option to be &amp;quot;iconified&amp;quot; either by clicking on an iconification gadget in their window title bars or by selecting a menu item.  In those events, the application&#039;s window will disappear and an &amp;quot;app icon&amp;quot; will appear on the background of the Workbench screen.  Double-clicking on the app icon will cause the icon to disappear and the application&#039;s window to reappear.  Even while the application is iconified, it does continue to run and perform whatever the user may have it doing.&lt;br /&gt;
&lt;br /&gt;
Some applications may also place an app icon on the Workbench background even while the application is open to allow the user to be able to drop other file icons on the app icon and have them be used by the application.&lt;br /&gt;
&lt;br /&gt;
=== Graphic gadgets ===&lt;br /&gt;
Within AmigaOS and application windows, there can be any number of graphic devices meant to be operated by your mouse with clicks and drags - these are known as &amp;quot;gagdets&amp;quot;.  In most cases, the gagdets are simple analogs of real world objects - like buttons you press with your finger, forms you fill out with a pencil or tabs on folders.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig5-1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Buttons ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Buttons.jpg|frame|right]]&lt;br /&gt;
Buttons (or &amp;quot;Boolean gadgets&amp;quot;) are some of the most common GUI objects.  With a simple left-click of your mouse button, they are used to perform actions, set configurations or indicate choices.  &lt;br /&gt;
&lt;br /&gt;
In AmigaOS, clicking &amp;quot;down&amp;quot; on a button typically causes the button to be rendered differently, to reflect that it has been &amp;quot;pressed&amp;quot;.  Engaging the button is not actually recognized until you let go with the mouse button over the graphic gadget.  This means that while the gadget has been clicked down, you always have the option of moving the mouse off the button gadget and then letting go and it will be as though the button had never been &amp;quot;pressed&amp;quot; or clicked on.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Text gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-StringGadgets.jpg|frame|right]]&lt;br /&gt;
A text gadget (or &amp;quot;String gadget&amp;quot;) works like a space in a paper form to be filled out - left click in the gadget, you will see a cursor appear and you can type your answer.&lt;br /&gt;
Once you&#039;ve finished typing your infrormation, you can either press the enter, carriage-return or tab keys for your entry to be recognized.&lt;br /&gt;
&lt;br /&gt;
Text or string gadgets can also come in a number of variants for specific uses.  Some can limit input to be numeric only (and may have adjacent buttons to increment or decrement the value).  Some string gadgets may be specifically be meant for file or directory names and they have adjacent gagdets that will bring up a file requester to set the value.  Many times a numeric gadget is paired with a slider gadget (as in the example above), where the value can either be set by typing in the gadget or by using the slider.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Sliders &amp;amp; Scroll Bars ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-SliderGadgets.jpg|frame|right]]&lt;br /&gt;
Slider gadgets work like controls many of have seen on their stereo systems - left-click and drag on the gadget &amp;quot;knob&amp;quot;  to move it back and forth to set a value.  A more sophisticated variant of the slider is the &amp;quot;scroll bar&amp;quot; that has a variably sized scroll bar contained in a scroll box that lets you see what proportion of the active range is visible or active.&lt;br /&gt;
&lt;br /&gt;
With all slider and scroller gadgets AmigaOS also lets you click in the area to either side of the knob or slider to adjust the setting.  In the case of sliders, the value will typically move by a fixed amount (+/- 1 or some suitable increment).  In the case of scroll bars, clicking in the scroll box on either side of the scroll bar will cause the value to move in increments of the scroll bar size.  Scroll bars also come with &amp;quot;scroll arrows&amp;quot; at the end of the scroll box that allow for finer movement of the scroll bar.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Cycle gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CycleGadgets.jpg|frame|right]]&lt;br /&gt;
Cycle gagdets are a variant on buttons that let you select from a number of specific choices.  You can either click on the majority of the gadget to pop-up a list of choices to select from or click on the circular arrow to cycle between the list of choices.  Cycle gagdets rarely cause actions to occur, they just adjust some setting or configuration.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Check Box &amp;amp; Radio Button gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CheckRadioGadgets.jpg|frame|right]]&lt;br /&gt;
Another variant of buttons, check boxes can be clicked to set on/off or yes/no conditions with a checkmark, just like a check box in a paper form.  Radio buttons are another variant where two or more round buttons are presented in a set and only one of the set can be clicked and activated, like the buttons on a stereo system.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Tabs ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Tabs.jpg|frame|right]]&lt;br /&gt;
Tabs are a graphical gadget that is used in combination with a &amp;quot;pages&amp;quot; or sets of gadgets and/or information, and you can click on the &amp;quot;tabs&amp;quot; to switch between the pages - like you might in a real notebook with tabbed pages.  This provides a efficient way to present more information and settings in a compact interface.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
====Requesters====&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-5.png|frame|right]]&lt;br /&gt;
As one uses AmigaOS and it&#039;s applications, from time to time a &amp;quot;Requester&amp;quot; window may appear to ask the user a question - basically windows with gadgets in them.  Such requesters can appear to confirm an action, obtain more information, make a selection or configuration.  Typically a series of buttons across the bottom of the window will dispatch the requester, with the bottom-left button gadget indicating some affirmative choice and the bottom-right button gagdet cancelling the requester (performing no action or change).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keyboard Operation of Gadgets====&lt;br /&gt;
As with so many things, AmigaOS and its applications provide a secondary way to operate many of these gadgets - by keyboard.  If a window contains text gadgets, pressing your keyboard&#039;s TAB key will activate the text gadgets in sequence (a cursor will appear in each so you can type &amp;amp; edit).  Each press of the TAB key will cycle to the next gadget and pressing SHIFT + TAB will cycle through the gadgets in reverse order.&lt;br /&gt;
&lt;br /&gt;
You may have noticed in many of the above sample images that many of the gagdets or their adjacent &amp;quot;label&amp;quot; texts contain a single underlined character.  This is a sign that pressing that key on your keyboard will activate that gadget.  Each gadget can then be operated by your keyboard - just like clicking on a button, clicking on a tab, setting a text or numeric value, etc.  Of course, if you are in the midst of typing in a text gadget, then things you type will go into that gadget instead of operating other gagdets.&lt;br /&gt;
&lt;br /&gt;
== Finding Files in AmigaOS ==&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-ASLReq.jpg|frame|right]]&lt;br /&gt;
AmigaOS provides a consistent method for navigating your file system and finding your files from within your apps - the &amp;quot;ASL file requester&amp;quot;.  It is used by everything in AmigaOS and most third party applications.  It is the window (or &amp;quot;requester&amp;quot;) that appears when you want to open or save files.&lt;br /&gt;
&lt;br /&gt;
As you can see, the ASL file requester presents the files in a given location in your file systems (a directory or &amp;quot;drawer&amp;quot;) and shows their size, date of creation or last modification and any comments attached to the file.  The above example shows the same directory as appeared above in this page.&lt;br /&gt;
&lt;br /&gt;
At the bottom corners of the window are buttons to accept the selection (&amp;quot;OK&amp;quot;) or cancel the requester.  Between those are buttons to view all the drives &amp;amp; partitions on your system (&amp;quot;Volumes&amp;quot;) or to move to the &amp;quot;Parent&amp;quot; of the current directory.&lt;br /&gt;
&lt;br /&gt;
Also at the bottom of the window you will see three text gadgets.  The first of these is optional and allows you to filter what is shown in the file list - it is now shown filtering out any file with a &amp;quot;.info&amp;quot; suffix (those are AmigaOS icon files).  The next two lines reflect the current directory path name and the currently selected file name (also selected in the file list above).  In the case of saving files, you would type any name you wanted in the bottom text field to create a new file.  Clicking on the titles of the file list will let you sort the file list.&lt;br /&gt;
&lt;br /&gt;
Of course this being AmigaOS, the ASL requester has its own &amp;quot;preferences editor&amp;quot; that lets you set how the requester appears, is sorted by default and a number of mouse button short-cuts.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Controlling AmigaOS - Which Way? ==&lt;br /&gt;
&lt;br /&gt;
AmigaOS provides a number of parallel ways that the user can control and put their Amigas to use.  The easiest and most common method is to use the AmigaOS graphic icons, windows and mouse interface - the &amp;quot;Workbench&amp;quot; - using all the GUI elements described above.  But AmigaOS also provides a more traditional or &amp;quot;old fashioned&amp;quot; method called a command line interface (the &amp;quot;CLI&amp;quot; or &amp;quot;Shell&amp;quot;), where the user can type text commands and interact using a text interface.  AmigaOS also provides a unique means of &amp;quot;interprocess communications&amp;quot; where user can have many applications and parts of the OS &amp;quot;talk&amp;quot; to each other. &lt;br /&gt;
&lt;br /&gt;
=== The Workbench &amp;amp; Intuition ===&lt;br /&gt;
&lt;br /&gt;
As we described above, AmigaOS provides the &amp;quot;Workbench&amp;quot;, a straightforward, efficient and easy graphical means to start applications, manage your computer and all your files.   Files and programs are represented with icons, generally known as &amp;quot;Projects&amp;quot; and &amp;quot;Tools&amp;quot;.  They can be stored in any arrangement of directories (&amp;quot;Drawers&amp;quot;).  You double-click on a program icon and it will open in a Intuition GUI window on your Workbench screen. &lt;br /&gt;
&lt;br /&gt;
Please see the section about the AmigaOS [http://wiki.amigaos.net/index.php/UserDoc:Workbench Workbench] to learn these concepts:&lt;br /&gt;
&lt;br /&gt;
* What is the Workbench&lt;br /&gt;
* Workbench menus&lt;br /&gt;
* Keyboard control&lt;br /&gt;
* Workbench requesters&lt;br /&gt;
* Configuration&lt;br /&gt;
* Workbench help&lt;br /&gt;
&lt;br /&gt;
=== The Shell &amp;amp; DOS Commands ===&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Window-Shell.jpg|frame|right]]&lt;br /&gt;
The AmigaOS Shell can be opened by double-clicking the &amp;quot;Shell&amp;quot; icon in the AmigaOS &amp;quot;System&amp;quot; drawer.  The Shell is a text based interface that allows you to perform most of the same operations as the Workbench - to run and interact with application programs, manage files and control your Amiga computer.  AmigaOS also comes with dozens of standard &amp;quot;DOS commands&amp;quot; (programs purely meant for Shell usage).  Simply enter the name of a program or command (like &amp;quot;dir&amp;quot;) and press Enter, the command or program will run and it will print its results in the Shell window.  While considered old fashioned, many users find the Shell to still be the most efficient way to perform many tasks on the Amigas.&lt;br /&gt;
&lt;br /&gt;
Please see the section on the [[UserDoc:Shell|AmigaOS Shell]] to learn more.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Scripts &amp;amp; Messages ===&lt;br /&gt;
&lt;br /&gt;
Scripts are simple text files that contain a list of commands written in a variety of languages: the AmigaDOS, Arexx and Python languages are provided with AmigaOS - there are many others.  Each of these language has its strengths.  You&#039;ll have to learn the one that suits what you want to do.  You can create a script using a text editor. You can run such scripts from the Workbench or from the shell (or from any other script). By using ARexx ports provided by AmigaOS components (the Workbench or Multiview, for example) or third-party applications, scripts can be used to make your computer perform a wide variety of actions.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS System Tools ==&lt;br /&gt;
AmigaOS comes with a variety of programs to help in the preparation of your computer.  These include tools for:&lt;br /&gt;
&lt;br /&gt;
* Drive preparation (Media Toolbox, Format, Format DCRW &amp;amp; Mounter).&lt;br /&gt;
* Font Handling (TypeManager &amp;amp; FixFonts).&lt;br /&gt;
* Script Languages (RexxMast and Python).&lt;br /&gt;
* The Shell.&lt;br /&gt;
* Miscellaneous Utilities (Find, Help, Grim Reaper &amp;amp; Ringhio Server).&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Utilities ==&lt;br /&gt;
AmigaOS comes with a selection of utilities to assist the user, including:&lt;br /&gt;
&lt;br /&gt;
* Commodities.&lt;br /&gt;
* Editors (Notepad, MEmacs, PrefsObjectEditor &amp;amp; IconEdit).&lt;br /&gt;
* Postscript oriented apps (AmiPDF, AmiGS &amp;amp; Ghostscript).&lt;br /&gt;
* Disk apps (PartitionWizard &amp;amp; RawDisk).&lt;br /&gt;
* Screenblankers.&lt;br /&gt;
* AmiDock and Dockies.&lt;br /&gt;
* The Unarc dearchiver.&lt;br /&gt;
* PlayCD.&lt;br /&gt;
* Several &amp;quot;sub-programs&amp;quot; that are used by other system utilities (blankers, dockies)&lt;br /&gt;
* Miscellaneous apps (Clock, printing apps, KeyShow, install apps, etc.).&lt;br /&gt;
&lt;br /&gt;
Read [[Utilities|here]] to find all of them explained further.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Preferences ==&lt;br /&gt;
AmigaOS comes with a number of small programs used for modifying the system&#039;s settings. These are stored in the [[Prefs]] drawer, and include programs for modifying the following settings:&lt;br /&gt;
&lt;br /&gt;
* General appearance&lt;br /&gt;
* Screen resolution&lt;br /&gt;
* Desktop and window backgrounds&lt;br /&gt;
* Language settings&lt;br /&gt;
* Keyboard and mouse settings&lt;br /&gt;
* Printer settings&lt;br /&gt;
* Audio settings&lt;br /&gt;
&lt;br /&gt;
Read [[Prefs|here]] for details and explanations of all the preference programs.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7721</id>
		<title>UserDoc:Introduction to AmigaOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7721"/>
		<updated>2014-05-19T14:16:03Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Scripts &amp;amp; Messages */ Grammar correction: &amp;quot;such script&amp;quot; -&amp;gt; &amp;quot;such scripts&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Like any modern personal computer system, AmigaOS presents a graphic interface and relies on common peripherals to let the user control their system.  &lt;br /&gt;
Beyond most systems, AmigaOS provides more flexibility and options in how the user can approach, configure and use their Amiga computer.&lt;br /&gt;
&lt;br /&gt;
In this page we will describe the details of AmigaOS graphic user interface (GUI) - how screens, windows and gadgets are presented and how you can use them.&lt;br /&gt;
We will also describe the various means by which the user can control and operate AmigaOS.  In additional pages, you can read about  [[UserDoc:How AmigaOS Works|how AmigaOS works]]  and what its components are.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Input - Point, Click and Type ==&lt;br /&gt;
&lt;br /&gt;
There are two common ways you can use and control your AmigaOS system - by mouse and keyboard.  &lt;br /&gt;
&lt;br /&gt;
But AmigaOS also lets you control your system by other input devices (like touchscreens or voice recognition) depending on drivers and devices connected.  Depending on software installed, AmigaOS can also be remotely controlled by networked protocols (like VNC and Synergy).  Finally, AmigaOS can be controlled internal scripts set up by the User.&lt;br /&gt;
&lt;br /&gt;
=== Using the mouse ===&lt;br /&gt;
&lt;br /&gt;
[[File:Style2.5.png|frame|right]]&lt;br /&gt;
&lt;br /&gt;
Typically in AmigaOS, you use a mouse to act on graphic elements (like &amp;quot;gadgets&amp;quot;, &amp;quot;icons&amp;quot; or webpage &amp;quot;links&amp;quot;).  By default, AmigaOS expects and supports mice or trackball pointing devices with at least two buttons.  The left mouse button is used to &amp;quot;left-click&amp;quot; on graphic objects, to select them or operate them. The right mouse button is used to &amp;quot;right-click&amp;quot; and display the menus of the current application.&lt;br /&gt;
&lt;br /&gt;
Optionally, one can use a mouse or trackball device with three (a &amp;quot;middle&amp;quot; button) and four buttons.  With such devices, the functionality of the additional buttons can vary by application or environment.  These functionalities can typically be configured by the user in specific applications or within AmigaOS (globally).&lt;br /&gt;
&lt;br /&gt;
Furthermore, scroll wheels are supported by AmigaOS in a context-based fashion.  If the current application&#039;s window is scrollable, the scrollwheel will act on that area.  If the mouse pointer is positioned over a specifically scrollable gadget, the scrollwheel will affect that gadget.&lt;br /&gt;
&lt;br /&gt;
In some applications and environments, you can also &amp;quot;double-click&amp;quot; (click twice, quickly) with the left button on an object to engage them.  In the Workbench file manager, a single mouse click will only &amp;quot;select&amp;quot; an icon, whereas a double-click will open drawer/directory, run an application or open a file in an associated program.&lt;br /&gt;
&lt;br /&gt;
Beside &amp;quot;clicking&amp;quot; - pressing down and releasing a mouse button at a specific location - you can also perform what is known as &amp;quot;dragging&amp;quot;, which means clicking down and then moving the mouse around before releasing the mouse button.  This is typically always done with the left mouse button and is done to select objects (draw a box around them), to adjust a control slider or to resize a window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Using the keyboard ===&lt;br /&gt;
&lt;br /&gt;
Of course the keyboard is used to enter text into text editing areas.  But your keyboard can do so much more with its special &amp;quot;qualifier&amp;quot; keys and AmigaOS.&lt;br /&gt;
&lt;br /&gt;
The most common example of a qualifier key is the &amp;quot;Shift&amp;quot; key which causes typed text to be made upper-case or capitalized.  There are more qualifier keys on most keyboards, here is a list of all of them:&lt;br /&gt;
* &#039;&#039;&#039;the Shift keys&#039;&#039;&#039; - the common key that causes your text to be capitalized.&lt;br /&gt;
* &#039;&#039;&#039;The &amp;quot;Alternate&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Alt&amp;quot; keys typically to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Control&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Ctrl&amp;quot; keys also to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Amiga&amp;quot; keys&#039;&#039;&#039; - special &amp;quot;A&amp;quot; keys on the right and left side of the space bar.  Besides being unique to AmigaOS, the right and left Amiga keys always mean different things (unlike the rest of the qualifier keys, most of the time).  If you have a non-AmigaOS keyboard, the &amp;quot;Windows&amp;quot; or MacOS &amp;quot;Command&amp;quot; keys function as &amp;quot;Amiga&amp;quot; keys.&lt;br /&gt;
** &#039;&#039;&#039;the Right Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; within your current application.&lt;br /&gt;
** &#039;&#039;&#039;the Left Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; that are globally active anytime and anywhere in your AmigaOS system.&lt;br /&gt;
While all of these qualifier keys don&#039;t usually do anything on their own, when you press and hold one or more of these keys down while pressing regular keys, they can change what you type (capitalizing or making alternate characters) or become powerful &amp;quot;short-cuts&amp;quot; within your applications or throughout your entire AmigaOS system.&lt;br /&gt;
&lt;br /&gt;
The most famous short-cuts are the &#039;&#039;&#039;copy&#039;&#039;&#039;, &#039;&#039;&#039;cut&#039;&#039;&#039; and &#039;&#039;&#039;paste&#039;&#039;&#039; operations that you can perform on selected text:&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga C&#039;&#039;&#039; short-cut copies any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga X&#039;&#039;&#039; short-cut &amp;quot;cuts&amp;quot; any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga V&#039;&#039;&#039; short-cut &amp;quot;pastes&amp;quot; any text or content from the Clipboard into your application (at the current cursor location).&lt;br /&gt;
&lt;br /&gt;
== The AmigaOS GUI - Intuition ==&lt;br /&gt;
&lt;br /&gt;
When AmigaOS has started, you will typically see the Workbench file manager.  This is the start of your experience with the AmigaOS GUI and it&#039;s most basic elements:  a screen with menus and windows containing icons and &amp;quot;gagdets&amp;quot;.  These components are the basic building blocks of virtually all AmigaOS &amp;amp; application interfaces.&lt;br /&gt;
&lt;br /&gt;
As with most things in AmigaOS, almost all of the following components can also be almost infinitely reconfigured, adjusted and graphically varied by the user.  In the AmigaOS &amp;quot;Preferences&amp;quot; drawer, the &amp;quot;GUI&amp;quot;, &amp;quot;ASL&amp;quot;, &amp;quot;Locale&amp;quot;, &amp;quot;Font&amp;quot;, &amp;quot;Palette&amp;quot;, &amp;quot;Poiner&amp;quot;, &amp;quot;PopUpMenu&amp;quot;, &amp;quot;Screens&amp;quot;, &amp;quot;Workbench&amp;quot; and &amp;quot;WBPattern&amp;quot; preferences editors easily allow a user to reconfigure the GUI of their Amiga in drammatic ways.&lt;br /&gt;
&lt;br /&gt;
AmigaOS also supports the use of alternate GUI systems in parallel with the default &amp;quot;Intuition&amp;quot; (aka &amp;quot;Reaction&amp;quot;) GUI system.  By default AmigaOS also comes with the &amp;quot;Magic User Interface system (&amp;quot;MUI&amp;quot;, a variant of the basic AmigaOS GUI system.  More than Intuition, MUI can be reconfigured even more widely using its own MUI configuration app.  &lt;br /&gt;
&lt;br /&gt;
Additionally, AmigaOS can use a number of third-party &amp;quot;cross-platform&amp;quot; GUI systems:  &amp;quot;AmiCygnix&amp;quot; GUI system - a native X11 GUI implementation for AmigaOS - and a native port of the &amp;quot;Qt&amp;quot; GUI system.  With either of these systems, it is possible to run ported applications compiled for AmigaOS, but running with these cross-platform GUI systems.&lt;br /&gt;
&lt;br /&gt;
To start with, we will explore the elements that make up the AmigaOS GUI system.&lt;br /&gt;
&lt;br /&gt;
=== Screens ===&lt;br /&gt;
&lt;br /&gt;
As start-up, the Workbench will be running on its &amp;quot;Workbench Screen&amp;quot;.  This will be the default location where most other application windows will also appear when started.&lt;br /&gt;
&lt;br /&gt;
Typically an AmigaOS screen will have a &amp;quot;title bar&amp;quot; across the top with a graphical &amp;quot;depth gadget&amp;quot; at the right end.  In the case of the Workbench screen,&lt;br /&gt;
there will be an AmigaOS &amp;quot;boing ball&amp;quot; at the left end and the title bar will display certain system information (OS version, memory availability, etc.).  Within the screen, the Workbench and any other applications can open windows, display icons and other GUI devices.  If you right-click over the title bar, it becomes a &amp;quot;Menu Bar&amp;quot;, showing you the control menus that are available for that application.&lt;br /&gt;
&lt;br /&gt;
In many cases, other applications may open screens in addition to the Workbench screen.  The &amp;quot;depth gadget&amp;quot; at the right end of each screen&#039;s title bar allows you to click from screen from screen.  Besides clicking on the screen&#039;s depth gadet, AmigaOS also lets the user see other screens behind the front screen by &amp;quot;dragging&#039; down on the screen title bar.&lt;br /&gt;
&lt;br /&gt;
The characteristics of the Workbench screen such as resolution and color depth can be configured in the &amp;quot;Screenmode&amp;quot; preferences editor.  Other screens can be either be configured in the &amp;quot;Screens&amp;quot; preferences editor or from within individual applications.  Typically, AmigaOS applications also give the user the choice of whether application runs on their own screens or the &amp;quot;public&amp;quot; Workbench screen.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
Windows are graphic containers that appear within AmigaOS screens.  Windows can be created by any number of different applications - the Workbench, Shell sessions or applications.  Outside of the Workbench file manager, each window usually reflects each individual running application.  In some cases, one application may open multiple documents in separate windows or additional &amp;quot;requester&amp;quot; windows might appear for an application.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig4-1.png]]&lt;br /&gt;
&lt;br /&gt;
Almost all windows of AmigaOS will have these common elements:&lt;br /&gt;
* &#039;&#039;&#039;Borders&#039;&#039;&#039; - A border around the window&#039;s contents.  Holding the Shift+Left-Amiga keys down while dragging any border will drag the window around.  &lt;br /&gt;
* &#039;&#039;&#039;Title bar&#039;&#039;&#039; - A thicker top border that typically contains a name of the application or it&#039;s contents.  The area of the title bar acts as a &amp;quot;drag bar&amp;quot; which you can use to drag the window around the screen.&lt;br /&gt;
* &#039;&#039;&#039;Depth gadget&#039;&#039;&#039; - The right-most gadget in the top title bar that either pulls the window to front (if it isn&#039;t frontmost) or pushes it to the back (if it&#039;s in front).  Holding down the Shift key while clicking this gagdet pushes the window to the back.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS, windows may also optionally have these additional features and elements:&lt;br /&gt;
* &#039;&#039;&#039;Close gadget&#039;&#039;&#039; - The left-most gadget in the title bar that closes the window.&lt;br /&gt;
* &#039;&#039;&#039;Scroll bar(s) and arrows&#039;&#039;&#039; - If the contents of the window can be scrolled in vertically and/or horizontally, there will be a scroll bar with arrow scroll buttons.  These scroll bars can also be used if the mouse pointer is over a scroll bar and the mouse scroll wheel is used.&lt;br /&gt;
* &#039;&#039;&#039;Zoom gadget&#039;&#039;&#039; - the second gadget from the right-most of the title bar which switches the window between two sizes.  Holding down the Shift key while clicking this gadget will make it fill the screen.&lt;br /&gt;
* &#039;&#039;&#039;Iconification gadget&#039;&#039;&#039; - left-most of the right-hand gadgets in the title bar which causes the window to disappear into an icon on the Workbench background - thus &amp;quot;Iconifying&amp;quot; the window or application.&lt;br /&gt;
* &#039;&#039;&#039;Sizing gadget&#039;&#039;&#039; - In the case of windows that can be resized, this is the gadget in the bottom right corner of the window that you can drag to resize the window.&lt;br /&gt;
&lt;br /&gt;
Each AmigaOS application can use almost infinite combinations of these features in the make up of their windows.&lt;br /&gt;
&lt;br /&gt;
=== Menus ===&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-4.png|frame|right]]&lt;br /&gt;
Menus are lists of items that will allow you to see and use what commands are available in an application.  The Workbench uses menus you can use to perform actions on the Workbench and its contents.  Menus typically provide many more functions and commands than can be presented to the user than just graphic buttons, etc. within an application&#039;s window, as a result they are a primary way most applications are used.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS menus can always be found for the current application by moving the mouse to the top of the screen and right-clicking.  The screen title bar will become a menu bar and will show the names of all the current application&#039;s menus.  &lt;br /&gt;
&lt;br /&gt;
By dragging with the right mouse button, each menu will display its &amp;quot;menu items&amp;quot;.  Each of those menu items corresponds to a command or setting.  In some cases you will find a &amp;quot;check box&amp;quot; on a menu item which you can click on to toggle a setting.  In other cases, you will find that menu items have a little arrow head that indicates that item actually has a &amp;quot;sub-menu&amp;quot; - a menu within a menu.  Menus ending with ellipses (&amp;quot;...&amp;quot;) indicate that menu item will open a window that can be cancelled without commiting any command.  For those menu items that might be deactivated (they may not apply at the moment), they will be &amp;quot;greyed-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The labels of many menu items will also include a letter or two with an &amp;quot;A&amp;quot; at the right edge.  This indicates what the keyboard Right-Amiga &amp;quot;short cut&amp;quot; is the equivalent of using that menu item within that application.  In the above screen shot, you can see that pressing the two keys - &amp;quot;Right-Amiga&amp;quot; and &amp;quot;N&amp;quot; - would do the same as that menu item - to create a new drawer.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Consistent Organization====&lt;br /&gt;
For the sake of consistency (when applicable), the first two AmigaOS menus of any application are typically organized with the following hierarchy and use these keyboard equivalents:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;First Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent: || &#039;&#039;&#039;Second Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent:&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PROJECT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  ||  ||&#039;&#039;&#039;EDIT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;New&#039;&#039;&#039;|| = Create new project in application.||Right-Amiga N||&#039;&#039;&#039;Cut&#039;&#039;&#039;|| = Cut the selected content into the Clipboard.||Right-Amiga X&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Open...&#039;&#039;&#039;|| = Open the file containing a project.||Right-Amiga O||&#039;&#039;&#039;Copy&#039;&#039;&#039;|| = Copy the selected content into the Clipboard.||Right-Amiga C&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save&#039;&#039;&#039;|| = Save the project to it&#039;s current file name.||Right-Amiga S||&#039;&#039;&#039;Paste&#039;&#039;&#039;|| = Paste the Clipboard contents into the project (at the current location).||Right-Amiga V&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save As...&#039;&#039;&#039;|| = Save the project to a file of a new name.|| ||&#039;&#039;&#039;Undo&#039;&#039;&#039;|| = Undo the last change to current project.||Right-Amiga Z&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Print&#039;&#039;&#039;|| = Print the current project.||Right-Amiga P||&#039;&#039;&#039;Redo&#039;&#039;&#039;|| = Restore the last change &amp;quot;undone&amp;quot; in the current project.|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Close&#039;&#039;&#039;|| = Close the project.|| || || ||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Quit&#039;&#039;&#039;|| = Quit the application.||Right-Amiga Q|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Menu Variations====&lt;br /&gt;
AmigaOS also includes a couple additional ways menus can be can serve the user:&lt;br /&gt;
&lt;br /&gt;
=====Pop-Up Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBPopUpMenu.jpg|frame|right]]&lt;br /&gt;
In the GUI preferences editor you can configure menus to &amp;quot;pop-up&amp;quot; under the mouse pointer whenever you right-click the mouse.  This means you do not need to move the mouse to the top of the screen to use the menus.  There are also options for making menus &amp;quot;sticky&amp;quot;, meaning that you don&#039;t need to drag the mouse to navigate the menus, but rather just right click and the menus stay open till you make a selection or click away.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Context Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBContextMenu.jpg|frame|right]]&lt;br /&gt;
The Workbench (with a utility added by default) and many applications provide &amp;quot;contextural menus&amp;quot;.  This means that you can put your mouse pointer over elements and right-click to pop-up a menu of things that are specific to the item you clicked over.  In the case of the Workbench (with the Context Menus utility), right clicking on a file will pop-up a menu of things that could be done with that file, like deleting it.&lt;br /&gt;
&lt;br /&gt;
All of these features provide both a simple means of using many functions within an application and at the same time allowing the user to configure a very efficient user interface that responds to nearly every whim.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Icons ===&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
Icons are small images which can represent a disk, a directory, an application file or data file.  Icons are primarilly used within the AmigaOS Workbench environment to represent all the file system objects the user can manipulate.  With these icons it is possible to select files, open them, delete them or move them around within the Workbench.  Applications may also make more limited use of icons to represent file system objects or may be used as imagery in an &amp;quot;icon bar&amp;quot; of buttons that can be clicked to perform various actions represented by icon imagery, like the Clock above.&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[[File:LibDiskIcon.png|frame|left|100px|Drive icon]]  [[File:Icons.png|frame|right|Directory with sub-directory, data and application file icons]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AmigaOS also uses different icon imagery to indicate various types of icons - drives, directories, files and applications.  Drive or partition icons look like little hard drives.  &lt;br /&gt;
A directory icon will look like a cabinet &amp;amp; drawer whereas a file icon will be designed to give a clue about the file content.&lt;br /&gt;
Data files are normally shown with a &amp;quot;page&amp;quot; motif and some graphics or text to reflect the file type.&lt;br /&gt;
Application files typically have the most free-form graphics that reflect their purpose, name or developer.&lt;br /&gt;
&lt;br /&gt;
The user can also edit the icon imagery using the icon editor, change how icons react to being double-clicked and adjust parameters stored within the icon file that affect how the represented file will be used.&lt;br /&gt;
&lt;br /&gt;
Many applications and all AmigaOS file requesters allow Workbench icons to be &amp;quot;dragged and dropped&amp;quot; into the application or requester windows and the associated file will be recognized by the application, if possible.&lt;br /&gt;
&lt;br /&gt;
==== Icon states ====&lt;br /&gt;
&lt;br /&gt;
Icons can look different not only because of their image but also depending on their state.  &lt;br /&gt;
&lt;br /&gt;
As you can see in the directory example, the 2 top left icons appear semi-transparent.  This subtle difference reflects whether the file or directory has an associated icon file with it.  In AmigaOS, any directory or file can have such an icon file that stores a unique icon image, unique program settings or specific settings for that file or directory.  That information can be adjusted within the Workbench and is automatically stored in a companion file with the same name, but with an added &#039;&#039;&#039;.info&#039;&#039;&#039; suffix.  &lt;br /&gt;
&lt;br /&gt;
While many files &amp;amp; directories and most applications have such &amp;quot;.info files&amp;quot; with them, they are not required and the Workbench can be set to show you &amp;quot;default icons&amp;quot; (based on the file types, etc.) so you can manipulate the corresponding objects.  Of course, AmigaOS can also be configured on a directory-by-directory basis to only show files that have associated &amp;quot;.info&amp;quot; files.&lt;br /&gt;
&lt;br /&gt;
In the same picture, the 2 top right directory icons also look slightly different.  While the &#039;&#039;&#039;Utilities selected&#039;&#039;&#039; and the &#039;&#039;&#039;Utilities unselected&#039;&#039;&#039; are the same icon, their image is a bit different. The drawer of the first one is slightly opened and there is a &amp;quot;glow&amp;quot; effect arround the first icon. These two visual clues show you the first directory icon has been selected by the user whereas the second one is not.&lt;br /&gt;
&lt;br /&gt;
==== App Icons ====&lt;br /&gt;
&lt;br /&gt;
Many applications provide the option to be &amp;quot;iconified&amp;quot; either by clicking on an iconification gadget in their window title bars or by menu item.  In those events, the application&#039;s window will disappear and an &amp;quot;app icon&amp;quot; will appear on the background of the Workbench screen.  Double-clicking on the app icon will cause the icon to disappear and the application&#039;s window to reappear.  Even while the application is iconified, it does continue to run and perform whatever the user may have it doing.&lt;br /&gt;
&lt;br /&gt;
Some applications may also place an app icon on the Workbench background even while the application is open to allow the user to be able to drop other file icons on the app icon and have them be used by the application.&lt;br /&gt;
&lt;br /&gt;
=== Graphic gadgets ===&lt;br /&gt;
Within AmigaOS and application windows, there can be any number of graphic devices meant to be operated by your mouse with clicks and drags - these are known as &amp;quot;gagdets&amp;quot;.  In most cases, the gagdets are simple analogs of real world objects - like buttons you press with your finger, forms you fill out with a pencil or tabs on folders.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig5-1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Buttons ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Buttons.jpg|frame|right]]&lt;br /&gt;
Buttons (or &amp;quot;Boolean gadgets&amp;quot;) are some of the most common GUI objects.  With a simple left-click of your mouse button, they are used to perform actions, set configurations or indicate choices.  &lt;br /&gt;
&lt;br /&gt;
In AmigaOS, clicking &amp;quot;down&amp;quot; on a button typically causes the button to be rendered differently, to reflect that it has been &amp;quot;pressed&amp;quot;.  Engaging the button is not actually recognized until you let go with the mouse button over the graphic gadget.  This means that while the gadget has been clicked down, you always have the option of moving the mouse off the button gadget and then letting go and it will be as though the button had never been &amp;quot;pressed&amp;quot; or clicked on.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Text gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-StringGadgets.jpg|frame|right]]&lt;br /&gt;
A text gadget (or &amp;quot;String gadget&amp;quot;) works like a space in a paper form to be filled out - left click in the gadget, you will see a cursor appear and you can type your answer.&lt;br /&gt;
Once you&#039;ve finished typing your infrormation, you can either press the enter, carriage-return or tab keys for your entry to be recognized.&lt;br /&gt;
&lt;br /&gt;
Text or string gadgets can also come in a number of variants for specific uses.  Some can limit input to be numeric only (and may have adjacent buttons to increment or decrement the value).  Some string gadgets may be specifically be meant for file or directory names and they have adjacent gagdets that will bring up a file requester to set the value.  Many times a numeric gadget is paired with a slider gadget (as in the example above), where the value can either be set by typing in the gadget or by using the slider.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Sliders &amp;amp; Scroll Bars ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-SliderGadgets.jpg|frame|right]]&lt;br /&gt;
Slider gadgets work like controls many of have seen on their stereo systems - left-click and drag on the gadget &amp;quot;knob&amp;quot;  to move it back and forth to set a value.  A more sophisticated variant of the slider is the &amp;quot;scroll bar&amp;quot; that has a variably sized scroll bar contained in a scroll box that lets you see what proportion of the active range is visible or active.&lt;br /&gt;
&lt;br /&gt;
With all slider and scroller gadgets AmigaOS also lets you click in the area to either side of the knob or slider to adjust the setting.  In the case of sliders, the value will typically move by a fixed amount (+/- 1 or some suitable increment).  In the case of scroll bars, clicking in the scroll box on either side of the scroll bar will cause the value to move in increments of the scroll bar size.  Scroll bars also come with &amp;quot;scroll arrows&amp;quot; at the end of the scroll box that allow for finer movement of the scroll bar.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Cycle gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CycleGadgets.jpg|frame|right]]&lt;br /&gt;
Cycle gagdets are a variant on buttons that let you select from a number of specific choices.  You can either click on the majority of the gadget to pop-up a list of choices to select from or click on the circular arrow to cycle between the list of choices.  Cycle gagdets rarely cause actions to occur, they just adjust some setting or configuration.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Check Box &amp;amp; Radio Button gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CheckRadioGadgets.jpg|frame|right]]&lt;br /&gt;
Another variant of buttons, check boxes can be clicked to set on/off or yes/no conditions with a checkmark, just like a check box in a paper form.  Radio buttons are another variant where two or more round buttons are presented in a set and only one of the set can be clicked and activated, like the buttons on a stereo system.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Tabs ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Tabs.jpg|frame|right]]&lt;br /&gt;
Tabs are a graphical gadget that is used in combination with a &amp;quot;pages&amp;quot; or sets of gadgets and/or information, and you can click on the &amp;quot;tabs&amp;quot; to switch between the pages - like you might in a real notebook with tabbed pages.  This provides a efficient way to present more information and settings in a compact interface.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
====Requesters====&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-5.png|frame|right]]&lt;br /&gt;
As one uses AmigaOS and it&#039;s applications, from time to time a &amp;quot;Requester&amp;quot; window may appear to ask the user a question - basically windows with gadgets in them.  Such requesters can appear to confirm an action, obtain more information, make a selection or configuration.  Typically a series of buttons across the bottom of the window will dispatch the requester, with the bottom-left button gadget indicating some affirmative choice and the bottom-right button gagdet cancelling the requester (performing no action or change).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keyboard Operation of Gadgets====&lt;br /&gt;
As with so many things, AmigaOS and its applications provide a secondary way to operate many of these gadgets - by keyboard.  If a window contains text gadgets, pressing your keyboard&#039;s TAB key will activate the text gadgets in sequence (a cursor will appear in each so you can type &amp;amp; edit).  Each press of the TAB key will cycle to the next gadget and pressing SHIFT + TAB will cycle through the gadgets in reverse order.&lt;br /&gt;
&lt;br /&gt;
You may have noticed in many of the above sample images that many of the gagdets or their adjacent &amp;quot;label&amp;quot; texts contain a single underlined character.  This is a sign that pressing that key on your keyboard will activate that gadget.  Each gadget can then be operated by your keyboard - just like clicking on a button, clicking on a tab, setting a text or numeric value, etc.  Of course, if you are in the midst of typing in a text gadget, then things you type will go into that gadget instead of operating other gagdets.&lt;br /&gt;
&lt;br /&gt;
== Finding Files in AmigaOS ==&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-ASLReq.jpg|frame|right]]&lt;br /&gt;
AmigaOS provides a consistent method for navigating your file system and finding your files from within your apps - the &amp;quot;ASL file requester&amp;quot;.  It is used by everything in AmigaOS and most third party applications.  It is the window (or &amp;quot;requester&amp;quot;) that appears when you want to open or save files.&lt;br /&gt;
&lt;br /&gt;
As you can see, the ASL file requester presents the files in a given location in your file systems (a directory or &amp;quot;drawer&amp;quot;) and shows their size, date of creation or last modification and any comments attached to the file.  The above example shows the same directory as appeared above in this page.&lt;br /&gt;
&lt;br /&gt;
At the bottom corners of the window are buttons to accept the selection (&amp;quot;OK&amp;quot;) or cancel the requester.  Between those are buttons to view all the drives &amp;amp; partitions on your system (&amp;quot;Volumes&amp;quot;) or to move to the &amp;quot;Parent&amp;quot; of the current directory.&lt;br /&gt;
&lt;br /&gt;
Also at the bottom of the window you will see three text gadgets.  The first of these is optional and allows you to filter what is shown in the file list - it is now shown filtering out any file with a &amp;quot;.info&amp;quot; suffix (those are AmigaOS icon files).  The next two lines reflect the current directory path name and the currently selected file name (also selected in the file list above).  In the case of saving files, you would type any name you wanted in the bottom text field to create a new file.  Clicking on the titles of the file list will let you sort the file list.&lt;br /&gt;
&lt;br /&gt;
Of course this being AmigaOS, the ASL requester has its own &amp;quot;preferences editor&amp;quot; that lets you set how the requester appears, is sorted by default and a number of mouse button short-cuts.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Controlling AmigaOS - Which Way? ==&lt;br /&gt;
&lt;br /&gt;
AmigaOS provides a number of parallel ways that the user can control and put their Amigas to use.  The easiest and most common method is to use the AmigaOS graphic icons, windows and mouse interface - the &amp;quot;Workbench&amp;quot; - using all the GUI elements described above.  But AmigaOS also provides a more traditional or &amp;quot;old fashioned&amp;quot; method called a command line interface (the &amp;quot;CLI&amp;quot; or &amp;quot;Shell&amp;quot;), where the user can type text commands and interact using a text interface.  AmigaOS also provides a unique means of &amp;quot;interprocess communications&amp;quot; where user can have many applications and parts of the OS &amp;quot;talk&amp;quot; to each other. &lt;br /&gt;
&lt;br /&gt;
=== The Workbench &amp;amp; Intuition ===&lt;br /&gt;
&lt;br /&gt;
As we described above, AmigaOS provides the &amp;quot;Workbench&amp;quot;, a straightforward, efficient and easy graphical means to start applications, manage your computer and all your files.   Files and programs are represented with icons, generally known as &amp;quot;Projects&amp;quot; and &amp;quot;Tools&amp;quot;.  They can be stored in any arrangement of directories (&amp;quot;Drawers&amp;quot;).  You double-click on a program icon and it will open in a Intuition GUI window on your Workbench screen. &lt;br /&gt;
&lt;br /&gt;
Please see the section about the AmigaOS [http://wiki.amigaos.net/index.php/UserDoc:Workbench Workbench] to learn these concepts:&lt;br /&gt;
&lt;br /&gt;
* What is the Workbench&lt;br /&gt;
* Workbench menus&lt;br /&gt;
* Keyboard control&lt;br /&gt;
* Workbench requesters&lt;br /&gt;
* Configuration&lt;br /&gt;
* Workbench help&lt;br /&gt;
&lt;br /&gt;
=== The Shell &amp;amp; DOS Commands ===&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Window-Shell.jpg|frame|right]]&lt;br /&gt;
The AmigaOS Shell can be opened by double-clicking the &amp;quot;Shell&amp;quot; icon in the AmigaOS &amp;quot;System&amp;quot; drawer.  The Shell is a text based interface that allows you to perform most of the same operations as the Workbench - to run and interact with application programs, manage files and control your Amiga computer.  AmigaOS also comes with dozens of standard &amp;quot;DOS commands&amp;quot; (programs purely meant for Shell usage).  Simply enter the name of a program or command (like &amp;quot;dir&amp;quot;) and press Enter, the command or program will run and it will print its results in the Shell window.  While considered old fashioned, many users find the Shell to still be the most efficient way to perform many tasks on the Amigas.&lt;br /&gt;
&lt;br /&gt;
Please see the section on the [[UserDoc:Shell|AmigaOS Shell]] to learn more.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Scripts &amp;amp; Messages ===&lt;br /&gt;
&lt;br /&gt;
Scripts are simple text files that contain a list of commands written in a variety of languages: the AmigaDOS, Arexx and Python languages are provided with AmigaOS - there are many others.  Each of these language has its strengths.  You&#039;ll have to learn the one that suits what you want to do.  You can create a script using a text editor. You can run such scripts from the Workbench or from the shell (or from any other script). By using ARexx ports provided by AmigaOS components (the Workbench or Multiview, for example) or third-party applications, scripts can be used to make your computer perform a wide variety of actions.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS System Tools ==&lt;br /&gt;
AmigaOS comes with a variety of programs to help in the preparation of your computer.  These include tools for:&lt;br /&gt;
&lt;br /&gt;
* Drive preparation (Media Toolbox, Format, Format DCRW &amp;amp; Mounter).&lt;br /&gt;
* Font Handling (TypeManager &amp;amp; FixFonts).&lt;br /&gt;
* Script Languages (RexxMast and Python).&lt;br /&gt;
* The Shell.&lt;br /&gt;
* Miscellaneous Utilities (Find, Help, Grim Reaper &amp;amp; Ringhio Server).&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Utilities ==&lt;br /&gt;
AmigaOS comes with a selection of utilities to assist the user, including:&lt;br /&gt;
&lt;br /&gt;
* Commodities.&lt;br /&gt;
* Editors (Notepad, MEmacs, PrefsObjectEditor &amp;amp; IconEdit).&lt;br /&gt;
* Postscript oriented apps (AmiPDF, AmiGS &amp;amp; Ghostscript).&lt;br /&gt;
* Disk apps (PartitionWizard &amp;amp; RawDisk).&lt;br /&gt;
* Screenblankers.&lt;br /&gt;
* AmiDock and Dockies.&lt;br /&gt;
* The Unarc dearchiver.&lt;br /&gt;
* PlayCD.&lt;br /&gt;
* Several &amp;quot;sub-programs&amp;quot; that are used by other system utilities (blankers, dockies)&lt;br /&gt;
* Miscellaneous apps (Clock, printing apps, KeyShow, install apps, etc.).&lt;br /&gt;
&lt;br /&gt;
Read [[Utilities|here]] to find all of them explained further.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Preferences ==&lt;br /&gt;
AmigaOS comes with a number of small programs used for modifying the system&#039;s settings. These are stored in the [[Prefs]] drawer, and include programs for modifying the following settings:&lt;br /&gt;
&lt;br /&gt;
* General appearance&lt;br /&gt;
* Screen resolution&lt;br /&gt;
* Desktop and window backgrounds&lt;br /&gt;
* Language settings&lt;br /&gt;
* Keyboard and mouse settings&lt;br /&gt;
* Printer settings&lt;br /&gt;
* Audio settings&lt;br /&gt;
&lt;br /&gt;
Read [[Prefs|here]] for details and explanations of all the preference programs.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7720</id>
		<title>UserDoc:Introduction to AmigaOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=UserDoc:Introduction_to_AmigaOS&amp;diff=7720"/>
		<updated>2014-05-19T14:14:08Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: Added brief overview of Prefs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Like any modern personal computer system, AmigaOS presents a graphic interface and relies on common peripherals to let the user control their system.  &lt;br /&gt;
Beyond most systems, AmigaOS provides more flexibility and options in how the user can approach, configure and use their Amiga computer.&lt;br /&gt;
&lt;br /&gt;
In this page we will describe the details of AmigaOS graphic user interface (GUI) - how screens, windows and gadgets are presented and how you can use them.&lt;br /&gt;
We will also describe the various means by which the user can control and operate AmigaOS.  In additional pages, you can read about  [[UserDoc:How AmigaOS Works|how AmigaOS works]]  and what its components are.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Input - Point, Click and Type ==&lt;br /&gt;
&lt;br /&gt;
There are two common ways you can use and control your AmigaOS system - by mouse and keyboard.  &lt;br /&gt;
&lt;br /&gt;
But AmigaOS also lets you control your system by other input devices (like touchscreens or voice recognition) depending on drivers and devices connected.  Depending on software installed, AmigaOS can also be remotely controlled by networked protocols (like VNC and Synergy).  Finally, AmigaOS can be controlled internal scripts set up by the User.&lt;br /&gt;
&lt;br /&gt;
=== Using the mouse ===&lt;br /&gt;
&lt;br /&gt;
[[File:Style2.5.png|frame|right]]&lt;br /&gt;
&lt;br /&gt;
Typically in AmigaOS, you use a mouse to act on graphic elements (like &amp;quot;gadgets&amp;quot;, &amp;quot;icons&amp;quot; or webpage &amp;quot;links&amp;quot;).  By default, AmigaOS expects and supports mice or trackball pointing devices with at least two buttons.  The left mouse button is used to &amp;quot;left-click&amp;quot; on graphic objects, to select them or operate them. The right mouse button is used to &amp;quot;right-click&amp;quot; and display the menus of the current application.&lt;br /&gt;
&lt;br /&gt;
Optionally, one can use a mouse or trackball device with three (a &amp;quot;middle&amp;quot; button) and four buttons.  With such devices, the functionality of the additional buttons can vary by application or environment.  These functionalities can typically be configured by the user in specific applications or within AmigaOS (globally).&lt;br /&gt;
&lt;br /&gt;
Furthermore, scroll wheels are supported by AmigaOS in a context-based fashion.  If the current application&#039;s window is scrollable, the scrollwheel will act on that area.  If the mouse pointer is positioned over a specifically scrollable gadget, the scrollwheel will affect that gadget.&lt;br /&gt;
&lt;br /&gt;
In some applications and environments, you can also &amp;quot;double-click&amp;quot; (click twice, quickly) with the left button on an object to engage them.  In the Workbench file manager, a single mouse click will only &amp;quot;select&amp;quot; an icon, whereas a double-click will open drawer/directory, run an application or open a file in an associated program.&lt;br /&gt;
&lt;br /&gt;
Beside &amp;quot;clicking&amp;quot; - pressing down and releasing a mouse button at a specific location - you can also perform what is known as &amp;quot;dragging&amp;quot;, which means clicking down and then moving the mouse around before releasing the mouse button.  This is typically always done with the left mouse button and is done to select objects (draw a box around them), to adjust a control slider or to resize a window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Using the keyboard ===&lt;br /&gt;
&lt;br /&gt;
Of course the keyboard is used to enter text into text editing areas.  But your keyboard can do so much more with its special &amp;quot;qualifier&amp;quot; keys and AmigaOS.&lt;br /&gt;
&lt;br /&gt;
The most common example of a qualifier key is the &amp;quot;Shift&amp;quot; key which causes typed text to be made upper-case or capitalized.  There are more qualifier keys on most keyboards, here is a list of all of them:&lt;br /&gt;
* &#039;&#039;&#039;the Shift keys&#039;&#039;&#039; - the common key that causes your text to be capitalized.&lt;br /&gt;
* &#039;&#039;&#039;The &amp;quot;Alternate&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Alt&amp;quot; keys typically to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Control&amp;quot; keys&#039;&#039;&#039; - the &amp;quot;Ctrl&amp;quot; keys also to the bottom right and left of the keyboard.&lt;br /&gt;
* &#039;&#039;&#039;the &amp;quot;Amiga&amp;quot; keys&#039;&#039;&#039; - special &amp;quot;A&amp;quot; keys on the right and left side of the space bar.  Besides being unique to AmigaOS, the right and left Amiga keys always mean different things (unlike the rest of the qualifier keys, most of the time).  If you have a non-AmigaOS keyboard, the &amp;quot;Windows&amp;quot; or MacOS &amp;quot;Command&amp;quot; keys function as &amp;quot;Amiga&amp;quot; keys.&lt;br /&gt;
** &#039;&#039;&#039;the Right Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; within your current application.&lt;br /&gt;
** &#039;&#039;&#039;the Left Amiga key&#039;&#039;&#039; - is used for &amp;quot;short cuts&amp;quot; that are globally active anytime and anywhere in your AmigaOS system.&lt;br /&gt;
While all of these qualifier keys don&#039;t usually do anything on their own, when you press and hold one or more of these keys down while pressing regular keys, they can change what you type (capitalizing or making alternate characters) or become powerful &amp;quot;short-cuts&amp;quot; within your applications or throughout your entire AmigaOS system.&lt;br /&gt;
&lt;br /&gt;
The most famous short-cuts are the &#039;&#039;&#039;copy&#039;&#039;&#039;, &#039;&#039;&#039;cut&#039;&#039;&#039; and &#039;&#039;&#039;paste&#039;&#039;&#039; operations that you can perform on selected text:&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga C&#039;&#039;&#039; short-cut copies any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga X&#039;&#039;&#039; short-cut &amp;quot;cuts&amp;quot; any selected text or content to the Clipboard.&lt;br /&gt;
* the &#039;&#039;&#039;Right-Amiga V&#039;&#039;&#039; short-cut &amp;quot;pastes&amp;quot; any text or content from the Clipboard into your application (at the current cursor location).&lt;br /&gt;
&lt;br /&gt;
== The AmigaOS GUI - Intuition ==&lt;br /&gt;
&lt;br /&gt;
When AmigaOS has started, you will typically see the Workbench file manager.  This is the start of your experience with the AmigaOS GUI and it&#039;s most basic elements:  a screen with menus and windows containing icons and &amp;quot;gagdets&amp;quot;.  These components are the basic building blocks of virtually all AmigaOS &amp;amp; application interfaces.&lt;br /&gt;
&lt;br /&gt;
As with most things in AmigaOS, almost all of the following components can also be almost infinitely reconfigured, adjusted and graphically varied by the user.  In the AmigaOS &amp;quot;Preferences&amp;quot; drawer, the &amp;quot;GUI&amp;quot;, &amp;quot;ASL&amp;quot;, &amp;quot;Locale&amp;quot;, &amp;quot;Font&amp;quot;, &amp;quot;Palette&amp;quot;, &amp;quot;Poiner&amp;quot;, &amp;quot;PopUpMenu&amp;quot;, &amp;quot;Screens&amp;quot;, &amp;quot;Workbench&amp;quot; and &amp;quot;WBPattern&amp;quot; preferences editors easily allow a user to reconfigure the GUI of their Amiga in drammatic ways.&lt;br /&gt;
&lt;br /&gt;
AmigaOS also supports the use of alternate GUI systems in parallel with the default &amp;quot;Intuition&amp;quot; (aka &amp;quot;Reaction&amp;quot;) GUI system.  By default AmigaOS also comes with the &amp;quot;Magic User Interface system (&amp;quot;MUI&amp;quot;, a variant of the basic AmigaOS GUI system.  More than Intuition, MUI can be reconfigured even more widely using its own MUI configuration app.  &lt;br /&gt;
&lt;br /&gt;
Additionally, AmigaOS can use a number of third-party &amp;quot;cross-platform&amp;quot; GUI systems:  &amp;quot;AmiCygnix&amp;quot; GUI system - a native X11 GUI implementation for AmigaOS - and a native port of the &amp;quot;Qt&amp;quot; GUI system.  With either of these systems, it is possible to run ported applications compiled for AmigaOS, but running with these cross-platform GUI systems.&lt;br /&gt;
&lt;br /&gt;
To start with, we will explore the elements that make up the AmigaOS GUI system.&lt;br /&gt;
&lt;br /&gt;
=== Screens ===&lt;br /&gt;
&lt;br /&gt;
As start-up, the Workbench will be running on its &amp;quot;Workbench Screen&amp;quot;.  This will be the default location where most other application windows will also appear when started.&lt;br /&gt;
&lt;br /&gt;
Typically an AmigaOS screen will have a &amp;quot;title bar&amp;quot; across the top with a graphical &amp;quot;depth gadget&amp;quot; at the right end.  In the case of the Workbench screen,&lt;br /&gt;
there will be an AmigaOS &amp;quot;boing ball&amp;quot; at the left end and the title bar will display certain system information (OS version, memory availability, etc.).  Within the screen, the Workbench and any other applications can open windows, display icons and other GUI devices.  If you right-click over the title bar, it becomes a &amp;quot;Menu Bar&amp;quot;, showing you the control menus that are available for that application.&lt;br /&gt;
&lt;br /&gt;
In many cases, other applications may open screens in addition to the Workbench screen.  The &amp;quot;depth gadget&amp;quot; at the right end of each screen&#039;s title bar allows you to click from screen from screen.  Besides clicking on the screen&#039;s depth gadet, AmigaOS also lets the user see other screens behind the front screen by &amp;quot;dragging&#039; down on the screen title bar.&lt;br /&gt;
&lt;br /&gt;
The characteristics of the Workbench screen such as resolution and color depth can be configured in the &amp;quot;Screenmode&amp;quot; preferences editor.  Other screens can be either be configured in the &amp;quot;Screens&amp;quot; preferences editor or from within individual applications.  Typically, AmigaOS applications also give the user the choice of whether application runs on their own screens or the &amp;quot;public&amp;quot; Workbench screen.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
Windows are graphic containers that appear within AmigaOS screens.  Windows can be created by any number of different applications - the Workbench, Shell sessions or applications.  Outside of the Workbench file manager, each window usually reflects each individual running application.  In some cases, one application may open multiple documents in separate windows or additional &amp;quot;requester&amp;quot; windows might appear for an application.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig4-1.png]]&lt;br /&gt;
&lt;br /&gt;
Almost all windows of AmigaOS will have these common elements:&lt;br /&gt;
* &#039;&#039;&#039;Borders&#039;&#039;&#039; - A border around the window&#039;s contents.  Holding the Shift+Left-Amiga keys down while dragging any border will drag the window around.  &lt;br /&gt;
* &#039;&#039;&#039;Title bar&#039;&#039;&#039; - A thicker top border that typically contains a name of the application or it&#039;s contents.  The area of the title bar acts as a &amp;quot;drag bar&amp;quot; which you can use to drag the window around the screen.&lt;br /&gt;
* &#039;&#039;&#039;Depth gadget&#039;&#039;&#039; - The right-most gadget in the top title bar that either pulls the window to front (if it isn&#039;t frontmost) or pushes it to the back (if it&#039;s in front).  Holding down the Shift key while clicking this gagdet pushes the window to the back.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS, windows may also optionally have these additional features and elements:&lt;br /&gt;
* &#039;&#039;&#039;Close gadget&#039;&#039;&#039; - The left-most gadget in the title bar that closes the window.&lt;br /&gt;
* &#039;&#039;&#039;Scroll bar(s) and arrows&#039;&#039;&#039; - If the contents of the window can be scrolled in vertically and/or horizontally, there will be a scroll bar with arrow scroll buttons.  These scroll bars can also be used if the mouse pointer is over a scroll bar and the mouse scroll wheel is used.&lt;br /&gt;
* &#039;&#039;&#039;Zoom gadget&#039;&#039;&#039; - the second gadget from the right-most of the title bar which switches the window between two sizes.  Holding down the Shift key while clicking this gadget will make it fill the screen.&lt;br /&gt;
* &#039;&#039;&#039;Iconification gadget&#039;&#039;&#039; - left-most of the right-hand gadgets in the title bar which causes the window to disappear into an icon on the Workbench background - thus &amp;quot;Iconifying&amp;quot; the window or application.&lt;br /&gt;
* &#039;&#039;&#039;Sizing gadget&#039;&#039;&#039; - In the case of windows that can be resized, this is the gadget in the bottom right corner of the window that you can drag to resize the window.&lt;br /&gt;
&lt;br /&gt;
Each AmigaOS application can use almost infinite combinations of these features in the make up of their windows.&lt;br /&gt;
&lt;br /&gt;
=== Menus ===&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-4.png|frame|right]]&lt;br /&gt;
Menus are lists of items that will allow you to see and use what commands are available in an application.  The Workbench uses menus you can use to perform actions on the Workbench and its contents.  Menus typically provide many more functions and commands than can be presented to the user than just graphic buttons, etc. within an application&#039;s window, as a result they are a primary way most applications are used.&lt;br /&gt;
&lt;br /&gt;
In AmigaOS menus can always be found for the current application by moving the mouse to the top of the screen and right-clicking.  The screen title bar will become a menu bar and will show the names of all the current application&#039;s menus.  &lt;br /&gt;
&lt;br /&gt;
By dragging with the right mouse button, each menu will display its &amp;quot;menu items&amp;quot;.  Each of those menu items corresponds to a command or setting.  In some cases you will find a &amp;quot;check box&amp;quot; on a menu item which you can click on to toggle a setting.  In other cases, you will find that menu items have a little arrow head that indicates that item actually has a &amp;quot;sub-menu&amp;quot; - a menu within a menu.  Menus ending with ellipses (&amp;quot;...&amp;quot;) indicate that menu item will open a window that can be cancelled without commiting any command.  For those menu items that might be deactivated (they may not apply at the moment), they will be &amp;quot;greyed-out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The labels of many menu items will also include a letter or two with an &amp;quot;A&amp;quot; at the right edge.  This indicates what the keyboard Right-Amiga &amp;quot;short cut&amp;quot; is the equivalent of using that menu item within that application.  In the above screen shot, you can see that pressing the two keys - &amp;quot;Right-Amiga&amp;quot; and &amp;quot;N&amp;quot; - would do the same as that menu item - to create a new drawer.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Consistent Organization====&lt;br /&gt;
For the sake of consistency (when applicable), the first two AmigaOS menus of any application are typically organized with the following hierarchy and use these keyboard equivalents:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;First Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent: || &#039;&#039;&#039;Second Menu:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  || Keyboard equivalent:&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PROJECT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  ||  ||&#039;&#039;&#039;EDIT&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;New&#039;&#039;&#039;|| = Create new project in application.||Right-Amiga N||&#039;&#039;&#039;Cut&#039;&#039;&#039;|| = Cut the selected content into the Clipboard.||Right-Amiga X&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Open...&#039;&#039;&#039;|| = Open the file containing a project.||Right-Amiga O||&#039;&#039;&#039;Copy&#039;&#039;&#039;|| = Copy the selected content into the Clipboard.||Right-Amiga C&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save&#039;&#039;&#039;|| = Save the project to it&#039;s current file name.||Right-Amiga S||&#039;&#039;&#039;Paste&#039;&#039;&#039;|| = Paste the Clipboard contents into the project (at the current location).||Right-Amiga V&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Save As...&#039;&#039;&#039;|| = Save the project to a file of a new name.|| ||&#039;&#039;&#039;Undo&#039;&#039;&#039;|| = Undo the last change to current project.||Right-Amiga Z&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Print&#039;&#039;&#039;|| = Print the current project.||Right-Amiga P||&#039;&#039;&#039;Redo&#039;&#039;&#039;|| = Restore the last change &amp;quot;undone&amp;quot; in the current project.|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Close&#039;&#039;&#039;|| = Close the project.|| || || ||  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Quit&#039;&#039;&#039;|| = Quit the application.||Right-Amiga Q|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Menu Variations====&lt;br /&gt;
AmigaOS also includes a couple additional ways menus can be can serve the user:&lt;br /&gt;
&lt;br /&gt;
=====Pop-Up Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBPopUpMenu.jpg|frame|right]]&lt;br /&gt;
In the GUI preferences editor you can configure menus to &amp;quot;pop-up&amp;quot; under the mouse pointer whenever you right-click the mouse.  This means you do not need to move the mouse to the top of the screen to use the menus.  There are also options for making menus &amp;quot;sticky&amp;quot;, meaning that you don&#039;t need to drag the mouse to navigate the menus, but rather just right click and the menus stay open till you make a selection or click away.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Context Menus=====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-WBContextMenu.jpg|frame|right]]&lt;br /&gt;
The Workbench (with a utility added by default) and many applications provide &amp;quot;contextural menus&amp;quot;.  This means that you can put your mouse pointer over elements and right-click to pop-up a menu of things that are specific to the item you clicked over.  In the case of the Workbench (with the Context Menus utility), right clicking on a file will pop-up a menu of things that could be done with that file, like deleting it.&lt;br /&gt;
&lt;br /&gt;
All of these features provide both a simple means of using many functions within an application and at the same time allowing the user to configure a very efficient user interface that responds to nearly every whim.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Icons ===&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
Icons are small images which can represent a disk, a directory, an application file or data file.  Icons are primarilly used within the AmigaOS Workbench environment to represent all the file system objects the user can manipulate.  With these icons it is possible to select files, open them, delete them or move them around within the Workbench.  Applications may also make more limited use of icons to represent file system objects or may be used as imagery in an &amp;quot;icon bar&amp;quot; of buttons that can be clicked to perform various actions represented by icon imagery, like the Clock above.&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|[[File:LibDiskIcon.png|frame|left|100px|Drive icon]]  [[File:Icons.png|frame|right|Directory with sub-directory, data and application file icons]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AmigaOS also uses different icon imagery to indicate various types of icons - drives, directories, files and applications.  Drive or partition icons look like little hard drives.  &lt;br /&gt;
A directory icon will look like a cabinet &amp;amp; drawer whereas a file icon will be designed to give a clue about the file content.&lt;br /&gt;
Data files are normally shown with a &amp;quot;page&amp;quot; motif and some graphics or text to reflect the file type.&lt;br /&gt;
Application files typically have the most free-form graphics that reflect their purpose, name or developer.&lt;br /&gt;
&lt;br /&gt;
The user can also edit the icon imagery using the icon editor, change how icons react to being double-clicked and adjust parameters stored within the icon file that affect how the represented file will be used.&lt;br /&gt;
&lt;br /&gt;
Many applications and all AmigaOS file requesters allow Workbench icons to be &amp;quot;dragged and dropped&amp;quot; into the application or requester windows and the associated file will be recognized by the application, if possible.&lt;br /&gt;
&lt;br /&gt;
==== Icon states ====&lt;br /&gt;
&lt;br /&gt;
Icons can look different not only because of their image but also depending on their state.  &lt;br /&gt;
&lt;br /&gt;
As you can see in the directory example, the 2 top left icons appear semi-transparent.  This subtle difference reflects whether the file or directory has an associated icon file with it.  In AmigaOS, any directory or file can have such an icon file that stores a unique icon image, unique program settings or specific settings for that file or directory.  That information can be adjusted within the Workbench and is automatically stored in a companion file with the same name, but with an added &#039;&#039;&#039;.info&#039;&#039;&#039; suffix.  &lt;br /&gt;
&lt;br /&gt;
While many files &amp;amp; directories and most applications have such &amp;quot;.info files&amp;quot; with them, they are not required and the Workbench can be set to show you &amp;quot;default icons&amp;quot; (based on the file types, etc.) so you can manipulate the corresponding objects.  Of course, AmigaOS can also be configured on a directory-by-directory basis to only show files that have associated &amp;quot;.info&amp;quot; files.&lt;br /&gt;
&lt;br /&gt;
In the same picture, the 2 top right directory icons also look slightly different.  While the &#039;&#039;&#039;Utilities selected&#039;&#039;&#039; and the &#039;&#039;&#039;Utilities unselected&#039;&#039;&#039; are the same icon, their image is a bit different. The drawer of the first one is slightly opened and there is a &amp;quot;glow&amp;quot; effect arround the first icon. These two visual clues show you the first directory icon has been selected by the user whereas the second one is not.&lt;br /&gt;
&lt;br /&gt;
==== App Icons ====&lt;br /&gt;
&lt;br /&gt;
Many applications provide the option to be &amp;quot;iconified&amp;quot; either by clicking on an iconification gadget in their window title bars or by menu item.  In those events, the application&#039;s window will disappear and an &amp;quot;app icon&amp;quot; will appear on the background of the Workbench screen.  Double-clicking on the app icon will cause the icon to disappear and the application&#039;s window to reappear.  Even while the application is iconified, it does continue to run and perform whatever the user may have it doing.&lt;br /&gt;
&lt;br /&gt;
Some applications may also place an app icon on the Workbench background even while the application is open to allow the user to be able to drop other file icons on the app icon and have them be used by the application.&lt;br /&gt;
&lt;br /&gt;
=== Graphic gadgets ===&lt;br /&gt;
Within AmigaOS and application windows, there can be any number of graphic devices meant to be operated by your mouse with clicks and drags - these are known as &amp;quot;gagdets&amp;quot;.  In most cases, the gagdets are simple analogs of real world objects - like buttons you press with your finger, forms you fill out with a pencil or tabs on folders.&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig5-1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Buttons ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Buttons.jpg|frame|right]]&lt;br /&gt;
Buttons (or &amp;quot;Boolean gadgets&amp;quot;) are some of the most common GUI objects.  With a simple left-click of your mouse button, they are used to perform actions, set configurations or indicate choices.  &lt;br /&gt;
&lt;br /&gt;
In AmigaOS, clicking &amp;quot;down&amp;quot; on a button typically causes the button to be rendered differently, to reflect that it has been &amp;quot;pressed&amp;quot;.  Engaging the button is not actually recognized until you let go with the mouse button over the graphic gadget.  This means that while the gadget has been clicked down, you always have the option of moving the mouse off the button gadget and then letting go and it will be as though the button had never been &amp;quot;pressed&amp;quot; or clicked on.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Text gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-StringGadgets.jpg|frame|right]]&lt;br /&gt;
A text gadget (or &amp;quot;String gadget&amp;quot;) works like a space in a paper form to be filled out - left click in the gadget, you will see a cursor appear and you can type your answer.&lt;br /&gt;
Once you&#039;ve finished typing your infrormation, you can either press the enter, carriage-return or tab keys for your entry to be recognized.&lt;br /&gt;
&lt;br /&gt;
Text or string gadgets can also come in a number of variants for specific uses.  Some can limit input to be numeric only (and may have adjacent buttons to increment or decrement the value).  Some string gadgets may be specifically be meant for file or directory names and they have adjacent gagdets that will bring up a file requester to set the value.  Many times a numeric gadget is paired with a slider gadget (as in the example above), where the value can either be set by typing in the gadget or by using the slider.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Sliders &amp;amp; Scroll Bars ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-SliderGadgets.jpg|frame|right]]&lt;br /&gt;
Slider gadgets work like controls many of have seen on their stereo systems - left-click and drag on the gadget &amp;quot;knob&amp;quot;  to move it back and forth to set a value.  A more sophisticated variant of the slider is the &amp;quot;scroll bar&amp;quot; that has a variably sized scroll bar contained in a scroll box that lets you see what proportion of the active range is visible or active.&lt;br /&gt;
&lt;br /&gt;
With all slider and scroller gadgets AmigaOS also lets you click in the area to either side of the knob or slider to adjust the setting.  In the case of sliders, the value will typically move by a fixed amount (+/- 1 or some suitable increment).  In the case of scroll bars, clicking in the scroll box on either side of the scroll bar will cause the value to move in increments of the scroll bar size.  Scroll bars also come with &amp;quot;scroll arrows&amp;quot; at the end of the scroll box that allow for finer movement of the scroll bar.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Cycle gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CycleGadgets.jpg|frame|right]]&lt;br /&gt;
Cycle gagdets are a variant on buttons that let you select from a number of specific choices.  You can either click on the majority of the gadget to pop-up a list of choices to select from or click on the circular arrow to cycle between the list of choices.  Cycle gagdets rarely cause actions to occur, they just adjust some setting or configuration.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Check Box &amp;amp; Radio Button gadgets ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-CheckRadioGadgets.jpg|frame|right]]&lt;br /&gt;
Another variant of buttons, check boxes can be clicked to set on/off or yes/no conditions with a checkmark, just like a check box in a paper form.  Radio buttons are another variant where two or more round buttons are presented in a set and only one of the set can be clicked and activated, like the buttons on a stereo system.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
==== Tabs ====&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Tabs.jpg|frame|right]]&lt;br /&gt;
Tabs are a graphical gadget that is used in combination with a &amp;quot;pages&amp;quot; or sets of gadgets and/or information, and you can click on the &amp;quot;tabs&amp;quot; to switch between the pages - like you might in a real notebook with tabbed pages.  This provides a efficient way to present more information and settings in a compact interface.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
====Requesters====&lt;br /&gt;
&lt;br /&gt;
[[File:LibFig2-5.png|frame|right]]&lt;br /&gt;
As one uses AmigaOS and it&#039;s applications, from time to time a &amp;quot;Requester&amp;quot; window may appear to ask the user a question - basically windows with gadgets in them.  Such requesters can appear to confirm an action, obtain more information, make a selection or configuration.  Typically a series of buttons across the bottom of the window will dispatch the requester, with the bottom-left button gadget indicating some affirmative choice and the bottom-right button gagdet cancelling the requester (performing no action or change).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keyboard Operation of Gadgets====&lt;br /&gt;
As with so many things, AmigaOS and its applications provide a secondary way to operate many of these gadgets - by keyboard.  If a window contains text gadgets, pressing your keyboard&#039;s TAB key will activate the text gadgets in sequence (a cursor will appear in each so you can type &amp;amp; edit).  Each press of the TAB key will cycle to the next gadget and pressing SHIFT + TAB will cycle through the gadgets in reverse order.&lt;br /&gt;
&lt;br /&gt;
You may have noticed in many of the above sample images that many of the gagdets or their adjacent &amp;quot;label&amp;quot; texts contain a single underlined character.  This is a sign that pressing that key on your keyboard will activate that gadget.  Each gadget can then be operated by your keyboard - just like clicking on a button, clicking on a tab, setting a text or numeric value, etc.  Of course, if you are in the midst of typing in a text gadget, then things you type will go into that gadget instead of operating other gagdets.&lt;br /&gt;
&lt;br /&gt;
== Finding Files in AmigaOS ==&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-ASLReq.jpg|frame|right]]&lt;br /&gt;
AmigaOS provides a consistent method for navigating your file system and finding your files from within your apps - the &amp;quot;ASL file requester&amp;quot;.  It is used by everything in AmigaOS and most third party applications.  It is the window (or &amp;quot;requester&amp;quot;) that appears when you want to open or save files.&lt;br /&gt;
&lt;br /&gt;
As you can see, the ASL file requester presents the files in a given location in your file systems (a directory or &amp;quot;drawer&amp;quot;) and shows their size, date of creation or last modification and any comments attached to the file.  The above example shows the same directory as appeared above in this page.&lt;br /&gt;
&lt;br /&gt;
At the bottom corners of the window are buttons to accept the selection (&amp;quot;OK&amp;quot;) or cancel the requester.  Between those are buttons to view all the drives &amp;amp; partitions on your system (&amp;quot;Volumes&amp;quot;) or to move to the &amp;quot;Parent&amp;quot; of the current directory.&lt;br /&gt;
&lt;br /&gt;
Also at the bottom of the window you will see three text gadgets.  The first of these is optional and allows you to filter what is shown in the file list - it is now shown filtering out any file with a &amp;quot;.info&amp;quot; suffix (those are AmigaOS icon files).  The next two lines reflect the current directory path name and the currently selected file name (also selected in the file list above).  In the case of saving files, you would type any name you wanted in the bottom text field to create a new file.  Clicking on the titles of the file list will let you sort the file list.&lt;br /&gt;
&lt;br /&gt;
Of course this being AmigaOS, the ASL requester has its own &amp;quot;preferences editor&amp;quot; that lets you set how the requester appears, is sorted by default and a number of mouse button short-cuts.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Controlling AmigaOS - Which Way? ==&lt;br /&gt;
&lt;br /&gt;
AmigaOS provides a number of parallel ways that the user can control and put their Amigas to use.  The easiest and most common method is to use the AmigaOS graphic icons, windows and mouse interface - the &amp;quot;Workbench&amp;quot; - using all the GUI elements described above.  But AmigaOS also provides a more traditional or &amp;quot;old fashioned&amp;quot; method called a command line interface (the &amp;quot;CLI&amp;quot; or &amp;quot;Shell&amp;quot;), where the user can type text commands and interact using a text interface.  AmigaOS also provides a unique means of &amp;quot;interprocess communications&amp;quot; where user can have many applications and parts of the OS &amp;quot;talk&amp;quot; to each other. &lt;br /&gt;
&lt;br /&gt;
=== The Workbench &amp;amp; Intuition ===&lt;br /&gt;
&lt;br /&gt;
As we described above, AmigaOS provides the &amp;quot;Workbench&amp;quot;, a straightforward, efficient and easy graphical means to start applications, manage your computer and all your files.   Files and programs are represented with icons, generally known as &amp;quot;Projects&amp;quot; and &amp;quot;Tools&amp;quot;.  They can be stored in any arrangement of directories (&amp;quot;Drawers&amp;quot;).  You double-click on a program icon and it will open in a Intuition GUI window on your Workbench screen. &lt;br /&gt;
&lt;br /&gt;
Please see the section about the AmigaOS [http://wiki.amigaos.net/index.php/UserDoc:Workbench Workbench] to learn these concepts:&lt;br /&gt;
&lt;br /&gt;
* What is the Workbench&lt;br /&gt;
* Workbench menus&lt;br /&gt;
* Keyboard control&lt;br /&gt;
* Workbench requesters&lt;br /&gt;
* Configuration&lt;br /&gt;
* Workbench help&lt;br /&gt;
&lt;br /&gt;
=== The Shell &amp;amp; DOS Commands ===&lt;br /&gt;
&lt;br /&gt;
[[File:OS4-Window-Shell.jpg|frame|right]]&lt;br /&gt;
The AmigaOS Shell can be opened by double-clicking the &amp;quot;Shell&amp;quot; icon in the AmigaOS &amp;quot;System&amp;quot; drawer.  The Shell is a text based interface that allows you to perform most of the same operations as the Workbench - to run and interact with application programs, manage files and control your Amiga computer.  AmigaOS also comes with dozens of standard &amp;quot;DOS commands&amp;quot; (programs purely meant for Shell usage).  Simply enter the name of a program or command (like &amp;quot;dir&amp;quot;) and press Enter, the command or program will run and it will print its results in the Shell window.  While considered old fashioned, many users find the Shell to still be the most efficient way to perform many tasks on the Amigas.&lt;br /&gt;
&lt;br /&gt;
Please see the section on the [[UserDoc:Shell|AmigaOS Shell]] to learn more.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Scripts &amp;amp; Messages ===&lt;br /&gt;
&lt;br /&gt;
Scripts are simple text files that contain a list of commands written in a variety of languages: the AmigaDOS, Arexx and Python languages are provided with AmigaOS - there are many others.  Each of these language has its strengths.  You&#039;ll have to learn the one that suits what you want to do.  You can create a script using a text editor. You can run such script from the Workbench or from the shell (or from any other script). By using ARexx ports provided by AmigaOS components (the Workbench or Multiview, for example) or third-party applications, scripts can be used to make your computer perform a wide variety of actions.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS System Tools ==&lt;br /&gt;
AmigaOS comes with a variety of programs to help in the preparation of your computer.  These include tools for:&lt;br /&gt;
&lt;br /&gt;
* Drive preparation (Media Toolbox, Format, Format DCRW &amp;amp; Mounter).&lt;br /&gt;
* Font Handling (TypeManager &amp;amp; FixFonts).&lt;br /&gt;
* Script Languages (RexxMast and Python).&lt;br /&gt;
* The Shell.&lt;br /&gt;
* Miscellaneous Utilities (Find, Help, Grim Reaper &amp;amp; Ringhio Server).&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Utilities ==&lt;br /&gt;
AmigaOS comes with a selection of utilities to assist the user, including:&lt;br /&gt;
&lt;br /&gt;
* Commodities.&lt;br /&gt;
* Editors (Notepad, MEmacs, PrefsObjectEditor &amp;amp; IconEdit).&lt;br /&gt;
* Postscript oriented apps (AmiPDF, AmiGS &amp;amp; Ghostscript).&lt;br /&gt;
* Disk apps (PartitionWizard &amp;amp; RawDisk).&lt;br /&gt;
* Screenblankers.&lt;br /&gt;
* AmiDock and Dockies.&lt;br /&gt;
* The Unarc dearchiver.&lt;br /&gt;
* PlayCD.&lt;br /&gt;
* Several &amp;quot;sub-programs&amp;quot; that are used by other system utilities (blankers, dockies)&lt;br /&gt;
* Miscellaneous apps (Clock, printing apps, KeyShow, install apps, etc.).&lt;br /&gt;
&lt;br /&gt;
Read [[Utilities|here]] to find all of them explained further.&lt;br /&gt;
&lt;br /&gt;
== AmigaOS Preferences ==&lt;br /&gt;
AmigaOS comes with a number of small programs used for modifying the system&#039;s settings. These are stored in the [[Prefs]] drawer, and include programs for modifying the following settings:&lt;br /&gt;
&lt;br /&gt;
* General appearance&lt;br /&gt;
* Screen resolution&lt;br /&gt;
* Desktop and window backgrounds&lt;br /&gt;
* Language settings&lt;br /&gt;
* Keyboard and mouse settings&lt;br /&gt;
* Printer settings&lt;br /&gt;
* Audio settings&lt;br /&gt;
&lt;br /&gt;
Read [[Prefs|here]] for details and explanations of all the preference programs.&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Utilities&amp;diff=7719</id>
		<title>Utilities</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Utilities&amp;diff=7719"/>
		<updated>2014-05-19T12:38:39Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Blankers (Dir) */ Added basic description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Below is the list of what is included in a default AmigaOS installation. You can find either programs or a group of &amp;quot;sub-programs&amp;quot; that another program needs. For your convenience they are marked with a &amp;quot;(Dir)&amp;quot; if they represent a directory.&lt;br /&gt;
&lt;br /&gt;
= AmigaOS SYS:Utilities =&lt;br /&gt;
&lt;br /&gt;
== AmiGS (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== AmiPDF (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Blankers (Dir) ==&lt;br /&gt;
The Blankers drawer contains individual modules which are used to blank the screen, usually replacing the screen&#039;s contents with moving patterns or images. Each module can provide a different effect, and it is these modules which are used by the ScreenBlanker commodity. Additional modules can be downloaded and added to this drawer. The modules used are selected using the [[Blanker preferences]] program.&lt;br /&gt;
&lt;br /&gt;
== bru ==&lt;br /&gt;
&lt;br /&gt;
== Calculator ==&lt;br /&gt;
&lt;br /&gt;
== CatComp ==&lt;br /&gt;
&lt;br /&gt;
== Clock ==&lt;br /&gt;
&lt;br /&gt;
== Commodities (Dir) ==&lt;br /&gt;
The Commodities drawer contains small &amp;quot;[[commodity]]&amp;quot; programs - little applications which can add or modify features of AmigaOS in order to adjust its behaviour to your liking. Examples include [[Exchange]] for controlling all commodities, [[ClickToFront]] for changing how windows are moved to the front of the view on screen, and [[ScreenBlanker]] which shows a screen saver after a period of inactivity.&lt;br /&gt;
&lt;br /&gt;
== Dockies (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Ghostscript (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== GraphicDump ==&lt;br /&gt;
&lt;br /&gt;
== HDBackup ==&lt;br /&gt;
&lt;br /&gt;
Note: Not yet released as of May 2014.&lt;br /&gt;
&lt;br /&gt;
== IconEdit ==&lt;br /&gt;
&lt;br /&gt;
== InitPrinter ==&lt;br /&gt;
&lt;br /&gt;
== Installation Utility ==&lt;br /&gt;
&lt;br /&gt;
== Installer ==&lt;br /&gt;
&lt;br /&gt;
== InstallExtras (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== KeyShow ==&lt;br /&gt;
&lt;br /&gt;
== LogViewer ==&lt;br /&gt;
&lt;br /&gt;
== MEmacs ==&lt;br /&gt;
&lt;br /&gt;
== More ==&lt;br /&gt;
&lt;br /&gt;
== [[MultiView]] ==&lt;br /&gt;
&lt;br /&gt;
[[MultiView]] is a multipurpose viewer utility. It will display all files for which a datatype is installed. Multiview is capable of displaying different files such as text, pictures, sound and animations.&lt;br /&gt;
It can be controlled by a GUI, command line arguments and an AREXX interface.&lt;br /&gt;
&lt;br /&gt;
== NotePad ==&lt;br /&gt;
Notepad is a utility for editing plain text files. It supports clipboard operation for copying and pasting text to and from other files and applications, and can be controlled using a simple GUI. For more advanced users, Notepad can be used for editing scripts, such as [[ARexx]] scripts or the [[S:User-Startup]] file.&lt;br /&gt;
&lt;br /&gt;
== PartitionWizard ==&lt;br /&gt;
&lt;br /&gt;
== PlayCD ==&lt;br /&gt;
&lt;br /&gt;
== ppp_connector, ppp_dialer, ppp_sample ==&lt;br /&gt;
&lt;br /&gt;
== PrefsObjectsEditor ==&lt;br /&gt;
&lt;br /&gt;
== PrintFiles ==&lt;br /&gt;
&lt;br /&gt;
== RawDisk ==&lt;br /&gt;
&lt;br /&gt;
== SGrab (Dir) ==&lt;br /&gt;
The [[SGrab]] drawer contains the SGrab commodity and documentation. SGrab is used for taking screengrabs of AmigaOS screens and saving them in a location and format of your choosing. Many options are available, such as hotkey activation and adjustable image quality. See the enclosed documentation for more details.&lt;br /&gt;
&lt;br /&gt;
== ShowConfig ==&lt;br /&gt;
&lt;br /&gt;
== UnArc ==&lt;br /&gt;
&lt;br /&gt;
== USBInspector ==&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Utilities&amp;diff=7718</id>
		<title>Utilities</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Utilities&amp;diff=7718"/>
		<updated>2014-05-19T12:31:43Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* SGrab (Dir) */ Added basic description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Below is the list of what is included in a default AmigaOS installation. You can find either programs or a group of &amp;quot;sub-programs&amp;quot; that another program needs. For your convenience they are marked with a &amp;quot;(Dir)&amp;quot; if they represent a directory.&lt;br /&gt;
&lt;br /&gt;
= AmigaOS SYS:Utilities =&lt;br /&gt;
&lt;br /&gt;
== AmiGS (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== AmiPDF (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Blankers (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== bru ==&lt;br /&gt;
&lt;br /&gt;
== Calculator ==&lt;br /&gt;
&lt;br /&gt;
== CatComp ==&lt;br /&gt;
&lt;br /&gt;
== Clock ==&lt;br /&gt;
&lt;br /&gt;
== Commodities (Dir) ==&lt;br /&gt;
The Commodities drawer contains small &amp;quot;[[commodity]]&amp;quot; programs - little applications which can add or modify features of AmigaOS in order to adjust its behaviour to your liking. Examples include [[Exchange]] for controlling all commodities, [[ClickToFront]] for changing how windows are moved to the front of the view on screen, and [[ScreenBlanker]] which shows a screen saver after a period of inactivity.&lt;br /&gt;
&lt;br /&gt;
== Dockies (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Ghostscript (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== GraphicDump ==&lt;br /&gt;
&lt;br /&gt;
== HDBackup ==&lt;br /&gt;
&lt;br /&gt;
Note: Not yet released as of May 2014.&lt;br /&gt;
&lt;br /&gt;
== IconEdit ==&lt;br /&gt;
&lt;br /&gt;
== InitPrinter ==&lt;br /&gt;
&lt;br /&gt;
== Installation Utility ==&lt;br /&gt;
&lt;br /&gt;
== Installer ==&lt;br /&gt;
&lt;br /&gt;
== InstallExtras (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== KeyShow ==&lt;br /&gt;
&lt;br /&gt;
== LogViewer ==&lt;br /&gt;
&lt;br /&gt;
== MEmacs ==&lt;br /&gt;
&lt;br /&gt;
== More ==&lt;br /&gt;
&lt;br /&gt;
== [[MultiView]] ==&lt;br /&gt;
&lt;br /&gt;
[[MultiView]] is a multipurpose viewer utility. It will display all files for which a datatype is installed. Multiview is capable of displaying different files such as text, pictures, sound and animations.&lt;br /&gt;
It can be controlled by a GUI, command line arguments and an AREXX interface.&lt;br /&gt;
&lt;br /&gt;
== NotePad ==&lt;br /&gt;
Notepad is a utility for editing plain text files. It supports clipboard operation for copying and pasting text to and from other files and applications, and can be controlled using a simple GUI. For more advanced users, Notepad can be used for editing scripts, such as [[ARexx]] scripts or the [[S:User-Startup]] file.&lt;br /&gt;
&lt;br /&gt;
== PartitionWizard ==&lt;br /&gt;
&lt;br /&gt;
== PlayCD ==&lt;br /&gt;
&lt;br /&gt;
== ppp_connector, ppp_dialer, ppp_sample ==&lt;br /&gt;
&lt;br /&gt;
== PrefsObjectsEditor ==&lt;br /&gt;
&lt;br /&gt;
== PrintFiles ==&lt;br /&gt;
&lt;br /&gt;
== RawDisk ==&lt;br /&gt;
&lt;br /&gt;
== SGrab (Dir) ==&lt;br /&gt;
The [[SGrab]] drawer contains the SGrab commodity and documentation. SGrab is used for taking screengrabs of AmigaOS screens and saving them in a location and format of your choosing. Many options are available, such as hotkey activation and adjustable image quality. See the enclosed documentation for more details.&lt;br /&gt;
&lt;br /&gt;
== ShowConfig ==&lt;br /&gt;
&lt;br /&gt;
== UnArc ==&lt;br /&gt;
&lt;br /&gt;
== USBInspector ==&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Utilities&amp;diff=7717</id>
		<title>Utilities</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Utilities&amp;diff=7717"/>
		<updated>2014-05-19T12:28:56Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Commodities (Dir) */  Added basic description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Below is the list of what is included in a default AmigaOS installation. You can find either programs or a group of &amp;quot;sub-programs&amp;quot; that another program needs. For your convenience they are marked with a &amp;quot;(Dir)&amp;quot; if they represent a directory.&lt;br /&gt;
&lt;br /&gt;
= AmigaOS SYS:Utilities =&lt;br /&gt;
&lt;br /&gt;
== AmiGS (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== AmiPDF (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Blankers (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== bru ==&lt;br /&gt;
&lt;br /&gt;
== Calculator ==&lt;br /&gt;
&lt;br /&gt;
== CatComp ==&lt;br /&gt;
&lt;br /&gt;
== Clock ==&lt;br /&gt;
&lt;br /&gt;
== Commodities (Dir) ==&lt;br /&gt;
The Commodities drawer contains small &amp;quot;[[commodity]]&amp;quot; programs - little applications which can add or modify features of AmigaOS in order to adjust its behaviour to your liking. Examples include [[Exchange]] for controlling all commodities, [[ClickToFront]] for changing how windows are moved to the front of the view on screen, and [[ScreenBlanker]] which shows a screen saver after a period of inactivity.&lt;br /&gt;
&lt;br /&gt;
== Dockies (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Ghostscript (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== GraphicDump ==&lt;br /&gt;
&lt;br /&gt;
== HDBackup ==&lt;br /&gt;
&lt;br /&gt;
Note: Not yet released as of May 2014.&lt;br /&gt;
&lt;br /&gt;
== IconEdit ==&lt;br /&gt;
&lt;br /&gt;
== InitPrinter ==&lt;br /&gt;
&lt;br /&gt;
== Installation Utility ==&lt;br /&gt;
&lt;br /&gt;
== Installer ==&lt;br /&gt;
&lt;br /&gt;
== InstallExtras (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== KeyShow ==&lt;br /&gt;
&lt;br /&gt;
== LogViewer ==&lt;br /&gt;
&lt;br /&gt;
== MEmacs ==&lt;br /&gt;
&lt;br /&gt;
== More ==&lt;br /&gt;
&lt;br /&gt;
== [[MultiView]] ==&lt;br /&gt;
&lt;br /&gt;
[[MultiView]] is a multipurpose viewer utility. It will display all files for which a datatype is installed. Multiview is capable of displaying different files such as text, pictures, sound and animations.&lt;br /&gt;
It can be controlled by a GUI, command line arguments and an AREXX interface.&lt;br /&gt;
&lt;br /&gt;
== NotePad ==&lt;br /&gt;
Notepad is a utility for editing plain text files. It supports clipboard operation for copying and pasting text to and from other files and applications, and can be controlled using a simple GUI. For more advanced users, Notepad can be used for editing scripts, such as [[ARexx]] scripts or the [[S:User-Startup]] file.&lt;br /&gt;
&lt;br /&gt;
== PartitionWizard ==&lt;br /&gt;
&lt;br /&gt;
== PlayCD ==&lt;br /&gt;
&lt;br /&gt;
== ppp_connector, ppp_dialer, ppp_sample ==&lt;br /&gt;
&lt;br /&gt;
== PrefsObjectsEditor ==&lt;br /&gt;
&lt;br /&gt;
== PrintFiles ==&lt;br /&gt;
&lt;br /&gt;
== RawDisk ==&lt;br /&gt;
&lt;br /&gt;
== SGrab (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== ShowConfig ==&lt;br /&gt;
&lt;br /&gt;
== UnArc ==&lt;br /&gt;
&lt;br /&gt;
== USBInspector ==&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Utilities&amp;diff=7716</id>
		<title>Utilities</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Utilities&amp;diff=7716"/>
		<updated>2014-05-19T12:21:43Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* NotePad */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Below is the list of what is included in a default AmigaOS installation. You can find either programs or a group of &amp;quot;sub-programs&amp;quot; that another program needs. For your convenience they are marked with a &amp;quot;(Dir)&amp;quot; if they represent a directory.&lt;br /&gt;
&lt;br /&gt;
= AmigaOS SYS:Utilities =&lt;br /&gt;
&lt;br /&gt;
== AmiGS (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== AmiPDF (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Blankers (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== bru ==&lt;br /&gt;
&lt;br /&gt;
== Calculator ==&lt;br /&gt;
&lt;br /&gt;
== CatComp ==&lt;br /&gt;
&lt;br /&gt;
== Clock ==&lt;br /&gt;
&lt;br /&gt;
== Commodities (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Dockies (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Ghostscript (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== GraphicDump ==&lt;br /&gt;
&lt;br /&gt;
== HDBackup ==&lt;br /&gt;
&lt;br /&gt;
Note: Not yet released as of May 2014.&lt;br /&gt;
&lt;br /&gt;
== IconEdit ==&lt;br /&gt;
&lt;br /&gt;
== InitPrinter ==&lt;br /&gt;
&lt;br /&gt;
== Installation Utility ==&lt;br /&gt;
&lt;br /&gt;
== Installer ==&lt;br /&gt;
&lt;br /&gt;
== InstallExtras (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== KeyShow ==&lt;br /&gt;
&lt;br /&gt;
== LogViewer ==&lt;br /&gt;
&lt;br /&gt;
== MEmacs ==&lt;br /&gt;
&lt;br /&gt;
== More ==&lt;br /&gt;
&lt;br /&gt;
== [[MultiView]] ==&lt;br /&gt;
&lt;br /&gt;
[[MultiView]] is a multipurpose viewer utility. It will display all files for which a datatype is installed. Multiview is capable of displaying different files such as text, pictures, sound and animations.&lt;br /&gt;
It can be controlled by a GUI, command line arguments and an AREXX interface.&lt;br /&gt;
&lt;br /&gt;
== NotePad ==&lt;br /&gt;
Notepad is a utility for editing plain text files. It supports clipboard operation for copying and pasting text to and from other files and applications, and can be controlled using a simple GUI. For more advanced users, Notepad can be used for editing scripts, such as [[ARexx]] scripts or the [[S:User-Startup]] file.&lt;br /&gt;
&lt;br /&gt;
== PartitionWizard ==&lt;br /&gt;
&lt;br /&gt;
== PlayCD ==&lt;br /&gt;
&lt;br /&gt;
== ppp_connector, ppp_dialer, ppp_sample ==&lt;br /&gt;
&lt;br /&gt;
== PrefsObjectsEditor ==&lt;br /&gt;
&lt;br /&gt;
== PrintFiles ==&lt;br /&gt;
&lt;br /&gt;
== RawDisk ==&lt;br /&gt;
&lt;br /&gt;
== SGrab (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== ShowConfig ==&lt;br /&gt;
&lt;br /&gt;
== UnArc ==&lt;br /&gt;
&lt;br /&gt;
== USBInspector ==&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Utilities&amp;diff=7715</id>
		<title>Utilities</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Utilities&amp;diff=7715"/>
		<updated>2014-05-19T12:21:07Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* NotePad */ Added basic description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Below is the list of what is included in a default AmigaOS installation. You can find either programs or a group of &amp;quot;sub-programs&amp;quot; that another program needs. For your convenience they are marked with a &amp;quot;(Dir)&amp;quot; if they represent a directory.&lt;br /&gt;
&lt;br /&gt;
= AmigaOS SYS:Utilities =&lt;br /&gt;
&lt;br /&gt;
== AmiGS (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== AmiPDF (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Blankers (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== bru ==&lt;br /&gt;
&lt;br /&gt;
== Calculator ==&lt;br /&gt;
&lt;br /&gt;
== CatComp ==&lt;br /&gt;
&lt;br /&gt;
== Clock ==&lt;br /&gt;
&lt;br /&gt;
== Commodities (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Dockies (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== Ghostscript (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== GraphicDump ==&lt;br /&gt;
&lt;br /&gt;
== HDBackup ==&lt;br /&gt;
&lt;br /&gt;
Note: Not yet released as of May 2014.&lt;br /&gt;
&lt;br /&gt;
== IconEdit ==&lt;br /&gt;
&lt;br /&gt;
== InitPrinter ==&lt;br /&gt;
&lt;br /&gt;
== Installation Utility ==&lt;br /&gt;
&lt;br /&gt;
== Installer ==&lt;br /&gt;
&lt;br /&gt;
== InstallExtras (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== KeyShow ==&lt;br /&gt;
&lt;br /&gt;
== LogViewer ==&lt;br /&gt;
&lt;br /&gt;
== MEmacs ==&lt;br /&gt;
&lt;br /&gt;
== More ==&lt;br /&gt;
&lt;br /&gt;
== [[MultiView]] ==&lt;br /&gt;
&lt;br /&gt;
[[MultiView]] is a multipurpose viewer utility. It will display all files for which a datatype is installed. Multiview is capable of displaying different files such as text, pictures, sound and animations.&lt;br /&gt;
It can be controlled by a GUI, command line arguments and an AREXX interface.&lt;br /&gt;
&lt;br /&gt;
== NotePad ==&lt;br /&gt;
Notepad is a utility for editing plain text files. It supports clipboard operation for copying and pasting text to and from other files and applications, and can be controlled using a simple GUI. For more advanced users, Notepad can be used for editing scripts, such as ARexx scripts or the S:User-Startup file.&lt;br /&gt;
&lt;br /&gt;
== PartitionWizard ==&lt;br /&gt;
&lt;br /&gt;
== PlayCD ==&lt;br /&gt;
&lt;br /&gt;
== ppp_connector, ppp_dialer, ppp_sample ==&lt;br /&gt;
&lt;br /&gt;
== PrefsObjectsEditor ==&lt;br /&gt;
&lt;br /&gt;
== PrintFiles ==&lt;br /&gt;
&lt;br /&gt;
== RawDisk ==&lt;br /&gt;
&lt;br /&gt;
== SGrab (Dir) ==&lt;br /&gt;
&lt;br /&gt;
== ShowConfig ==&lt;br /&gt;
&lt;br /&gt;
== UnArc ==&lt;br /&gt;
&lt;br /&gt;
== USBInspector ==&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Configuring_Workbench_and_AmigaOS&amp;diff=7024</id>
		<title>Configuring Workbench and AmigaOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Configuring_Workbench_and_AmigaOS&amp;diff=7024"/>
		<updated>2014-01-31T17:03:17Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: /* Configuring through the User-startup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Workbench]][[Category:Preferences]]&lt;br /&gt;
AmigaOS and the Workbench comes with a suite of program preferences to adjust Sound, Graphics, Text, Display, Font settings and more.&lt;br /&gt;
&lt;br /&gt;
== Configuring through the User-startup ==&lt;br /&gt;
&lt;br /&gt;
The user-startup is a simple AmigaDOS script containing commands that will be executed everytime AmigaOS starts.&lt;br /&gt;
It is optional but it is always used by the user as it is an easy way to add custom settings to the system.&lt;br /&gt;
&lt;br /&gt;
The [[UserDoc:System_Scripts#startup-sequence|startup-sequence]] is so critical for the correct starting of the operating system that it is recommended to never modify it. Instead, users can edit the [[UserDoc:System_Scripts#user-startup|user-startup]] to start their own programs or set their own settings.&lt;br /&gt;
&lt;br /&gt;
As an example, if you want to create an assign each time you boot AmigaOS, just add the following line to your user-startup:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Assign myassign: Disk:mydirectory&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configuring through the Devs:... ==&lt;br /&gt;
&lt;br /&gt;
== The Save/Use/Test concept==&lt;br /&gt;
&lt;br /&gt;
[[File:Save-use-test-cancel.png|frame|Buttons at the bottom of the preferences programs]]&lt;br /&gt;
In AmigaOS you can modify some settings and test them &#039;&#039;&#039;without&#039;&#039;&#039; storing the modifications on disk. This is very handy because you can modify a lot of settings but you can always go back very easily to your saved configuration. You don&#039;t need to keep a list of all the changes you do and there is no fear you break something.&lt;br /&gt;
When you want to cancel all your tests, just restart the system and you automatically restore the previous (correct) settings.&lt;br /&gt;
This way it&#039;s up to the user to decide when the settings will be saved. The operating system will never store modifications by itself.&lt;br /&gt;
&lt;br /&gt;
To reflect this mechanism all preferences programs have the following 4 buttons (if possible):&lt;br /&gt;
&lt;br /&gt;
* Save&lt;br /&gt;
This will save on disk the current settings so they will become permanent. The preferences program will also close.&lt;br /&gt;
&lt;br /&gt;
* Use&lt;br /&gt;
When you click this button, the current settings will be applied on the system but &#039;&#039;not saved&#039;&#039; on disk. The preferences program will also close.&lt;br /&gt;
&lt;br /&gt;
* Test&lt;br /&gt;
This button will apply the current settings but the program will stay open. This way you can immediately see the result of your settings and you can modify them again and do another test.&lt;br /&gt;
&lt;br /&gt;
* Cancel&lt;br /&gt;
This will cancel any modification you did since the program was opened. Changes will be reverted and the program will close.&lt;br /&gt;
&lt;br /&gt;
== List of all the preferences programs you can use ==&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/AHI|AHI]] (Audio Hardware Interface) - Allows for control over the audio functions of your Amiga&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/amigainput|AmigaInput]] - Setup for gamepads and joysticks&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/asl|ASL]] - Allows for control over file requesters&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/compatibility|Compatibility]] - Manages the 68K Just-in-time compiler settings&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/console|Console]] - Controls the settings for the Amiga Shell&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/deficons|DefIcons]] - Interface to allow behaviour of default icons&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/dos|DOS]] - Manages DOS settings&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/font|Font]] - Controls Font selection for Workbench, Screens, and Windows&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/gui|GUI]] - Used to control the look and feel of various elements of the AmigaOS 4 interface&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/input|Input]] - Controls the settings for the keyboard and mouse&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/internet|Internet]] - Contains settings for the computer&#039;s network connections&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/locale|Locale]] - Sets the user&#039;s preferred languages&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/notifications|Notifications]] - Controls the behaviour of Ringhio, the AmigaOS 4.1 pop-up notification system&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/palette|Palette]] - Allows the user to adjust certain colours used for some on-screen elements&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/Picasso96Mode|Picasso96Mode]] - Advanced controls for creating and modifying graphics modes&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/pointer|Pointer]] - Allows editing of the mouse pointer&#039;s image&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/popupmenu|PopupMenu]] - Settings controlling the look and behaviour of the system&#039;s pop-up menus&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/printer|Printer]] -&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/printergfx|PrinterGfx]] -&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/printerps|PrinterPS]] -&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/screenblanker|ScreenBlanker]] - Preferences for the system&#039;s screen saver / screen blanker&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/ScreenMode|ScreenMode]] - Settings for screen resolution and colour depth&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/screens|Screens]] - Allows the setting up and control of custom screens for applications&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/serial|Serial]] - Sets the default settings for the serial port&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/time|Time]] - Allows the user to set the system&#039;s time and date&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/timezone|Timezone]] - Allows the user to set their current timezone and Daylight Saving Time preferences&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/uboot|UBoot]] - Advanced settings concerning the computer&#039;s initial booting system&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/usb|USB]] - Contains USB preferences and information&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/wbpattern|WBPattern]] - Settings for the background of the Workbench screen and directory windows&lt;br /&gt;
  &lt;br /&gt;
[[Workbench/Prefs/wbstartup|WBStartup]] - Controls which programs are launched when Workbench starts&lt;br /&gt;
&lt;br /&gt;
[[Workbench/Prefs/workbench|Workbench]] - Settings which control certain aspects of the Workbench&#039;s behaviour&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Using_the_Workbench&amp;diff=3595</id>
		<title>Using the Workbench</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Using_the_Workbench&amp;diff=3595"/>
		<updated>2012-07-24T12:27:44Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: More detail in closing drawers section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Workbench]]&lt;br /&gt;
There are two primary means of interacting with icons or files on the Workbench, those sat on the Workbench screen, also known as the Desktop, and those sat in Drawers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Workbench Screen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Workbench screen is the primary visual component of your system. Its main element is the Workbench root window; it can be either a normal window, or, more commonly used, a backdrop window, in which case the window frame vanishes, and its content is displayed directly on the Workbench background. Nevertheless, it is actually still technically a window. In either case, the role of the root window is the same: icons and other windows appear on it.&lt;br /&gt;
&lt;br /&gt;
The Workbench screen itself is identified by the Amiga Workbench title bar located along the top border of the display. The title bar also displays the number of bytes of graphics memory and other memory currently available. You can change which pieces of information are displayed in the title bar; this is done in the Workbench preferences program in your Prefs drawer, where also other useful adjustments can be made to the way your Workbench operates.&lt;br /&gt;
&lt;br /&gt;
When you boot your Amiga, the Workbench root window contains icons for any disks present in the system (including removable disks), the Ram Disk, and any other icons determined by your system configuration.&lt;br /&gt;
&lt;br /&gt;
If you press the right mouse button, the title bar will show all available [[Using_the_Workbench_menus|menus]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Drawers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A Drawer displays the content of a directory or folder stored on your computer.&lt;br /&gt;
&lt;br /&gt;
By default, the files shown here all have an associated icon file. The icon is the little image you actually see. To open a file, double-click its icon. Files without an associated icon are normally hidden.&lt;br /&gt;
&lt;br /&gt;
In order to display all files (i.e. even those without an icon), select [[Window_Menu_-_Show...|Show All Files]] in the Window menu.&lt;br /&gt;
&lt;br /&gt;
To close the window, click on its close gadget (located in the top left corner of the window), select [[Window_Menu_-_Close|Close]] in the Window menu or press &#039;&#039;Right AMIGA+K&#039;&#039; (see [[Using_the_keyboard_to_control_Workbench|keystrokes]] for a list of useful keyboard shortcuts).&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Using_the_Workbench&amp;diff=3594</id>
		<title>Using the Workbench</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Using_the_Workbench&amp;diff=3594"/>
		<updated>2012-07-24T11:53:26Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: Rearranged files in drawers description to improve grammar; added a little more detail.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Workbench]]&lt;br /&gt;
There are two primary means of interacting with icons or files on the Workbench, those sat on the Workbench screen, also known as the Desktop, and those sat in Drawers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Workbench Screen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Workbench screen is the primary visual component of your system. Its main element is the Workbench root window; it can be either a normal window, or, more commonly used, a backdrop window, in which case the window frame vanishes, and its content is displayed directly on the Workbench background. Nevertheless, it is actually still technically a window. In either case, the role of the root window is the same: icons and other windows appear on it.&lt;br /&gt;
&lt;br /&gt;
The Workbench screen itself is identified by the Amiga Workbench title bar located along the top border of the display. The title bar also displays the number of bytes of graphics memory and other memory currently available. You can change which pieces of information are displayed in the title bar; this is done in the Workbench preferences program in your Prefs drawer, where also other useful adjustments can be made to the way your Workbench operates.&lt;br /&gt;
&lt;br /&gt;
When you boot your Amiga, the Workbench root window contains icons for any disks present in the system (including removable disks), the Ram Disk, and any other icons determined by your system configuration.&lt;br /&gt;
&lt;br /&gt;
If you press the right mouse button, the title bar will show all available [[Using_the_Workbench_menus|menus]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Drawers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A Drawer displays the content of a directory or folder stored on your computer.&lt;br /&gt;
&lt;br /&gt;
By default, the files shown here all have an associated icon file. The icon is the little image you actually see. To open a file, double-click its icon. Files without an associated icon are normally hidden.&lt;br /&gt;
&lt;br /&gt;
In order to display all files (i.e. even those without an icon), select [[Window_Menu_-_Show...|Show All Files]] in the Window menu.&lt;br /&gt;
&lt;br /&gt;
To close the window, select [[Window_Menu_-_Close|Close]] in the Window menu or press &#039;&#039;&#039;AMIGA+K&#039;&#039; (see [[Using_the_keyboard_to_control_Workbench|keystrokes]] for a list of useful keyboard shortcuts).&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Configuring_Workbench_and_AmigaOS&amp;diff=3316</id>
		<title>Configuring Workbench and AmigaOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Configuring_Workbench_and_AmigaOS&amp;diff=3316"/>
		<updated>2012-06-29T12:40:50Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Workbench]][[Category:Preferences]]&lt;br /&gt;
AmigaOS and the Workbench comes with a suite of program preferences to adjust Sound, Graphics, Text, Display, Font settings and more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here are the preferences programs that are available in AmigaOS 4.x:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[amigaos41ahi|AHI]] (Audio Hardware Interface) - Allows for control over the audio functions of your Amiga&lt;br /&gt;
&lt;br /&gt;
[[amigaos41amigainput|AmigaInput]] - Setup for gamepads and joysticks&lt;br /&gt;
&lt;br /&gt;
[[amigaos41asl|ASL]] - Allows for control over file requesters&lt;br /&gt;
&lt;br /&gt;
[[amigaos41compatibility|Compatibility]] - Manages the 68K Just-in-time compiler settings&lt;br /&gt;
&lt;br /&gt;
[[amigaos41console|Console]] - Controls the settings for the Amiga Shell&lt;br /&gt;
&lt;br /&gt;
[[amigaos41deficons|DefIcons]] - Interface to allow behavour of default icons&lt;br /&gt;
&lt;br /&gt;
[[amigaos41dos|DOS]] - Manages DOS settings&lt;br /&gt;
&lt;br /&gt;
[[amigaos41font|Font]] - Controls Font selection for Workbench, Screens, and Windows&lt;br /&gt;
&lt;br /&gt;
[[amigaos41gui|GUI]] - Used to control the look and feel of various elements of the AmigaOS 4 interface&lt;br /&gt;
&lt;br /&gt;
[[amigaos41input|Input]] - Controls the settings for the keyboard and mouse&lt;br /&gt;
&lt;br /&gt;
[[amigaos41internet|Internet]] - Contains settings for the computer&#039;s network connections&lt;br /&gt;
&lt;br /&gt;
[[amigaos41locale|Locale]] - Sets the user&#039;s preferred languages&lt;br /&gt;
&lt;br /&gt;
[[amigaos41notifications|Notifications]] - Controls the behaviour of Ringhio, the AmigaOS 4.1 pop-up notification system&lt;br /&gt;
&lt;br /&gt;
[[amigaos41palette|Palette]] - Allows the user to adjust certain colours used for some on-screen elements&lt;br /&gt;
&lt;br /&gt;
[[amigaos41Picasso96Mode|Picasso96Mode]] - Advanced controls for creating and modifying graphics modes&lt;br /&gt;
&lt;br /&gt;
[[amigaos41pointer|Pointer]] - Allows editing of the mouse pointer&#039;s image&lt;br /&gt;
&lt;br /&gt;
[[amigaos41popupmenu|PopupMenu]] - Settings controlling the look and behaviour of the system&#039;s pop-up menus&lt;br /&gt;
&lt;br /&gt;
[[amigaos41printer|Printer]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41printergfx|PrinterGfx]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41printerps|PrinterPS]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41screenblanker|ScreenBlanker]] - Preferences for the system&#039;s screen saver / screen blanker&lt;br /&gt;
&lt;br /&gt;
[[amigaos41screenmode|ScreenMode]] - Settings for screen resolution and colour depth&lt;br /&gt;
&lt;br /&gt;
[[amigaos41screens|Screens]] - Allows the setting up and control of custom screens for applications&lt;br /&gt;
&lt;br /&gt;
[[amigaos41serial|Serial]] - Sets the default settings for the serial port&lt;br /&gt;
&lt;br /&gt;
[[amigaos41time|Time]] - Allows the user to set the system&#039;s time and date&lt;br /&gt;
&lt;br /&gt;
[[amigaos41timezone|Timezone]] - Allows the user to set their current timezone and Daylight Saving Time preferences&lt;br /&gt;
&lt;br /&gt;
[[amigaos41uboot|UBoot]] - Advanced settings concerning the computer&#039;s initial booting system&lt;br /&gt;
&lt;br /&gt;
[[amigaos41usb|USB]] - Contains USB preferences and information&lt;br /&gt;
&lt;br /&gt;
[[amigaos41wbpattern|WBPattern]] - Settings for the background of the Workbench screen and directory windows&lt;br /&gt;
  &lt;br /&gt;
[[amigaos41wbstartup|WBStartup]] - Controls which programs are launched when Workbench starts&lt;br /&gt;
&lt;br /&gt;
[[amigaos41workbench|Workbench]] - Settings which control certain aspects of the Workbench&#039;s behaviour&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Configuring_Workbench_and_AmigaOS&amp;diff=3315</id>
		<title>Configuring Workbench and AmigaOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Configuring_Workbench_and_AmigaOS&amp;diff=3315"/>
		<updated>2012-06-29T12:40:24Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Workbench]][[Category:Preferences]]&lt;br /&gt;
AmigaOS and the Workbench comes with a suite of program preferences to adjust Sound, Graphics, Text, Display, Font settings and more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here are the preferences programs that are available in AmigaOS 4.x:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[amigaos41ahi|AHI]] (Audio Hardware Interface) - Allows for control over the audio functions of your Amiga&lt;br /&gt;
&lt;br /&gt;
[[amigaos41amigainput|AmigaInput]] - Setup for gamepads and joysticks&lt;br /&gt;
&lt;br /&gt;
[[amigaos41asl|ASL]] - Allows for control over file requesters&lt;br /&gt;
&lt;br /&gt;
[[amigaos41compatibility|Compatibility]] - Manages the 68K Just-in-time compiler settings&lt;br /&gt;
&lt;br /&gt;
[[amigaos41console|Console]] - Controls the settings for the Amiga Shell&lt;br /&gt;
&lt;br /&gt;
[[amigaos41deficons|DefIcons]] - Interface to allow behavour of default icons&lt;br /&gt;
&lt;br /&gt;
[[amigaos41dos|DOS]] - Manages DOS settings&lt;br /&gt;
&lt;br /&gt;
[[amigaos41font|Font]] - Controls Font selection for Workbench, Screens, and Windows&lt;br /&gt;
&lt;br /&gt;
[[amigaos41gui|GUI]] - Used to control the look and feel of various elements of the AmigaOS 4 interface&lt;br /&gt;
&lt;br /&gt;
[[amigaos41input|Input]] - Controls the settings for the keyboard and mouse&lt;br /&gt;
&lt;br /&gt;
[[amigaos41internet|Internet]] - Contains settings for the computer&#039;s network connections&lt;br /&gt;
&lt;br /&gt;
[[amigaos41locale|Locale]] - Sets the user&#039;s preferred languages&lt;br /&gt;
&lt;br /&gt;
[[amigaos41notifications|Notifications]] - Controls the behaviour of Ringhio, the AmigaOS 4.1 pop-up notification system&lt;br /&gt;
&lt;br /&gt;
[[amigaos41palette|Palette]] - Allows the user to adjust certain colours used for some on-screen elements&lt;br /&gt;
&lt;br /&gt;
[[amigaos41Picasso96Mode|Picasso96Mode]] - Advanced controls for creating and modifying graphics modes&lt;br /&gt;
&lt;br /&gt;
[[amigaos41pointer|Pointer]] - Allows editing of the mouse pointer&#039;s image&lt;br /&gt;
&lt;br /&gt;
[[amigaos41popupmenu|PopupMenu]] - Settings controlling the look and behaviour of the system&#039;s pop-up menus&lt;br /&gt;
&lt;br /&gt;
[[amigaos41printer|Printer]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41printergfx|PrinterGfx]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41printerps|PrinterPS]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41screenblanker|ScreenBlanker]] - Preferences for the system&#039;s screen saver / screen blanker&lt;br /&gt;
&lt;br /&gt;
[[amigaos41screenmode|ScreenMode]] - Settings for screen resolution and colour depth&lt;br /&gt;
&lt;br /&gt;
[[amigaos41screens|Screens]] - Allows the setting up and control of custom screens for applications&lt;br /&gt;
&lt;br /&gt;
[[amigaos41serial|Serial]] - Sets the default settings for the serial port&lt;br /&gt;
&lt;br /&gt;
[[amigaos41time|Time]] - Allows the user to set the system&#039;s time and date&lt;br /&gt;
&lt;br /&gt;
[[amigaos41timezone|Timezone]] - Allows the user to set theyr current timezone and Daylight Saving Time preferences&lt;br /&gt;
&lt;br /&gt;
[[amigaos41uboot|UBoot]] - Advanced settings concerning the computer&#039;s initial booting system&lt;br /&gt;
&lt;br /&gt;
[[amigaos41usb|USB]] - Contains USB preferences and information&lt;br /&gt;
&lt;br /&gt;
[[amigaos41wbpattern|WBPattern]] - Settings for the background of the Workbench screen and directory windows&lt;br /&gt;
  &lt;br /&gt;
[[amigaos41wbstartup|WBStartup]] - Controls which programs are launched when Workbench starts&lt;br /&gt;
&lt;br /&gt;
[[amigaos41workbench|Workbench]] - Settings which control certain aspects of the Workbench&#039;s behaviour&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=Configuring_Workbench_and_AmigaOS&amp;diff=3314</id>
		<title>Configuring Workbench and AmigaOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=Configuring_Workbench_and_AmigaOS&amp;diff=3314"/>
		<updated>2012-06-29T07:46:48Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Workbench]][[Category:Preferences]]&lt;br /&gt;
AmigaOS and the Workbench comes with a suite of program preferences to adjust Sound, Graphics, Text, Display, Font settings and more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here are the preferences programs that are available in AmigaOS 4.x:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[amigaos41ahi|AHI]] (Audio Hardware Interface) - Allows for control over the audio functions of your Amiga&lt;br /&gt;
&lt;br /&gt;
[[amigaos41amigainput|AmigaInput]] - Setup for gamepads and joysticks&lt;br /&gt;
&lt;br /&gt;
[[amigaos41asl|ASL]] - Allows for control over file requesters&lt;br /&gt;
&lt;br /&gt;
[[amigaos41compatibility|Compatibility]] - Manages the 68K Just-in-time compiler settings&lt;br /&gt;
&lt;br /&gt;
[[amigaos41console|Console]] - Controls the settings for the Amiga Shell&lt;br /&gt;
&lt;br /&gt;
[[amigaos41deficons|DefIcons]] - Interface to allow behavor of default icon&lt;br /&gt;
&lt;br /&gt;
[[amigaos41dos|DOS]] - Manages DOS settings&lt;br /&gt;
&lt;br /&gt;
[[amigaos41font|Font]] - Controls Font selection for Workbench, Screens, and Windows&lt;br /&gt;
&lt;br /&gt;
[[amigaos41gui|GUI]] - &lt;br /&gt;
&lt;br /&gt;
[[amigaos41input|Input]] - Controls the settings for the keyboard and mouse&lt;br /&gt;
&lt;br /&gt;
[[amigaos41internet|Internet]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41locale|Locale]] -   &lt;br /&gt;
&lt;br /&gt;
[[amigaos41notifications|Notifications]] - Controls the behaviour of Ringhio, the AmigaOS 4.1 pop-up notification system&lt;br /&gt;
&lt;br /&gt;
[[amigaos41palette|Palette]] - &lt;br /&gt;
&lt;br /&gt;
[[amigaos41Picasso96Mode|Picasso96Mode]] - Advanced controls for creating and modifying graphics modes&lt;br /&gt;
&lt;br /&gt;
[[amigaos41pointer|Pointer]] - Allows editing of the mouse pointer&#039;s image&lt;br /&gt;
&lt;br /&gt;
[[amigaos41popupmenu|PopupMenu]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41printer|Printer]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41printergfx|PrinterGfx]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41printerps|PrinterPS]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41screenblanker|ScreenBlanker]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41screenmode|ScreenMode]] - Settings for screen resolution and colour depth&lt;br /&gt;
&lt;br /&gt;
[[amigaos41screens|Screens]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41serial|Serial]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41time|Time]] - Allows the user to set the system&#039;s time and date&lt;br /&gt;
&lt;br /&gt;
[[amigaos41timezone|Timezone]] - &lt;br /&gt;
&lt;br /&gt;
[[amigaos41uboot|UBoot]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41usb|USB]] -&lt;br /&gt;
&lt;br /&gt;
[[amigaos41wbpattern|WBPattern]] - Settings for the background of the Workbench screen and directory windows&lt;br /&gt;
  &lt;br /&gt;
[[amigaos41wbstartup|WBStartup]] - Controls which programs are launched when Workbench starts&lt;br /&gt;
&lt;br /&gt;
[[amigaos41workbench|Workbench]] - Settings which control certain aspects of the Workbench&#039;s behaviour&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=UserDoc:Workbench&amp;diff=3313</id>
		<title>UserDoc:Workbench</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=UserDoc:Workbench&amp;diff=3313"/>
		<updated>2012-06-29T07:36:06Z</updated>

		<summary type="html">&lt;p&gt;Rob Cranley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AmigaOS has it&#039;s own desktop environment called [[Using_the_Workbench|Workbench]].&lt;br /&gt;
&lt;br /&gt;
[[Using_the_Workbench|Workbench]] comes with a range of features to help users access and arrange their documents, photographs, music and video files in an intuitive manner. Naturally, users may also customise the look and feel of [[Using_the_Workbench|Workbench]] from the background desktop image through to the design of the interface and much more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Using_the_Workbench|Understanding Workbench]]&lt;br /&gt;
&lt;br /&gt;
[[Using the Workbench menus|Using the Workbench menus]]&lt;br /&gt;
&lt;br /&gt;
[[Using the keyboard to control Workbench|Using the keyboard to control Workbench]]&lt;br /&gt;
&lt;br /&gt;
[[Understanding Workbench requesters|Understanding Workbench requesters]]&lt;br /&gt;
&lt;br /&gt;
[[Configuring Workbench and AmigaOS|Configuring Workbench and AmigaOS]]&lt;br /&gt;
&lt;br /&gt;
[[AmigaOS_Updates|Updating to the latest version of AmigaOS]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Glossary|Glossary]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Workbench Help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
By pressing the Help key on your keyboard (commonly found sharing the Scroll Lock key on a modern keyboard) you can open Workbench Help.&lt;br /&gt;
Workbench Help is context-sensitive, when you press the Help key it will open up directly into the section of Workbench Help most relevant.  For instance, if the Workbench desktop is selected, pressing the Help key will open the guide on the page about the [[Using_the_Workbench|Workbench Screen]].&lt;/div&gt;</summary>
		<author><name>Rob Cranley</name></author>
	</entry>
</feed>