aboutsummaryrefslogtreecommitdiff
path: root/doc/cluser.ms
diff options
context:
space:
mode:
Diffstat (limited to 'doc/cluser.ms')
-rw-r--r--doc/cluser.ms1177
1 files changed, 1177 insertions, 0 deletions
diff --git a/doc/cluser.ms b/doc/cluser.ms
new file mode 100644
index 00000000..264dc21f
--- /dev/null
+++ b/doc/cluser.ms
@@ -0,0 +1,1177 @@
+.RP
+.ND
+.TL
+A User's Guide to the IRAF Command Language
+.AU
+D. Tody
+G. Jacoby
+.AI
+.K2 "" "" "*"
+March 1984
+.AB
+This document presents an overview of the IRAF Command language
+and how to use it. The discussion is aimed at the first time
+user and concentrates on how to execute tasks from the Command
+Language. The focus is the Command Language itself, as opposed
+to the many packages and tasks comprising the IRAF system,
+and on using the command language to run existing programs,
+rather than adding new ones of one's own making.
+.AE
+.bp
+.SH
+Scope of this Document
+.PP
+This document is an introduction to the basic features of the IRAF
+Command Language (CL), and is not intended to be a complete guide to
+using and programming the IRAF system. We concern ourselves here
+primarily with the use of the CL to execute commands entered interactively
+at the terminal. The first time user rarely needs to do more than enter
+commands and run an occasional background job. The IRAF system and
+applications packages are described elsewhere; much of the available
+documentation is accessible at the terminal via the online \fBhelp\fR facilties.
+Programming in the CL or in the IRAF environment is beyond the scope of
+this document and is described in the \fICL Programmer's Manual\fR,
+the \fIReference Manual for the IRAF Subset Preprocessor Language\fR,
+the \fIProgrammer's Crib Sheet\fR, and other documents.
+.NH
+Introduction
+.NH 2
+Function of the Command Language
+.PP
+The basic function of the command language is to execute external tasks and
+manage their parameters.
+The CL provides a consistent interface between the user and all applications
+programs, giving the user complete control over the parameters, data, and
+system resources (graphics devices, etc.) used by IRAF programs.
+The CL makes it easy to run individual programs by prompting the user with
+the names of the available programs and by prompting for parameters as
+necessary when a program is run.
+Equally important, the CL provides powerful facilities for connecting
+programs together to solve special problems.
+.PP
+The CL is primarily a \fIcommand\fR language, and only secondarily an
+interpreted \fIprogramming\fR language.
+To be a good command language, the CL must make
+it as easy as possible to enter commands to perform common functions.
+To this end the CL provides menus, prompting, minimum match abbreviations,
+a concise command syntax for simple commands, parameter defaults, and a
+history mechanism for correcting errors and for repeating previous commands
+with a minimum of typing.
+To be a good programming language the CL must
+be reasonably efficient, able to evaluate complex expressions,
+compile and run general procedures, and much more.
+The present CL is a good command language; as a programming language
+it is usable but needs a lot of work.
+.PP
+.NH 2
+Capabilities of the CL
+.PP
+Besides fulfilling the basic function of a command language,
+the CL is capable of performing the mundane operations of
+a desk calculator, evaluating expressions, and some limited
+programming functions. These simple features provide a very
+powerful means of connecting and interacting with tasks.
+This will become more apparent in the later discussion of usage.
+.PP
+The CL has many features that UNIX users will be familiar with.
+For example, the output of any task may be redirected to a file
+or to another task. Beware, though, that there are many
+differences. The CL and the IRAF system present the user with a
+complete environment which is independent of the underlying operating
+system. Users running IRAF under VMS, UNIX, AOS, or any other operating
+system can type exactly the same commands while in the CL.
+.NH
+Getting Started
+.NH 2
+Setting up the IRAF environment
+.PP
+A visitor using IRAF at KPNO does not have to do anything special to run IRAF.
+Computer support personnel will provide a login on one of the VAX computers
+and configure the environment as necessary to run IRAF. Staff members and
+long term visitors will already have established themselves on a VAX and will
+need to perform a few simple operations before the CL and IRAF can be used
+for anything serious.
+.PP
+An IRAF session begins with entry of the command "\fBcl\fR" to run the CL.
+When the CL starts up, it looks for a file called \fBlogin.cl\fR in the
+"current" directory. If the CL is run from a directory that does not
+contain a login.cl file, it will indeed run and can be used for simple things
+like evaluating numerical expressions, but it will not work properly for
+all functions. Therefore, decide what directory is to be your IRAF login
+directory, and \fIalways run the CL from a properly configured IRAF login
+directory\fR. The login directory, once set up, can be used for any number
+of sessions. If you wish, you can set up several independent login
+directories for working with different types of data.
+.RS
+.IP [1]
+Decide on a login directory and go there.
+.IP [2]
+Type \fBmkiraf\fR.
+.RE
+.PP
+That is all that is required. In addition, you may wish to edit the
+resulting login.cl file and change some of the defaults.
+The default login file consists mostly of environment declarations
+(\fBset\fR statements) defining directories, devices, and so on.
+The use of the environment and the significance of the standard environment
+variables are discussed in a later section.
+.NH 2
+Starting the CL
+.PP
+After configuring your IRAF directory, type the command "\fBcl\fP"
+to run the command language. After a bit the welcome message
+will appear on your terminal, the first or root "menu" of IRAF will be
+printed, and the \fBcl>\fP prompt will be issued indicating that the
+CL is ready for the first command.
+.KS
+.TS
+center tab(%);
+l l l l l.
+artdata%digiphot%images%local%softools
+astrometry%dtoi%imred%nsurfbrt%system
+database%filterphot%language%onedspec%twodspec
+dataio%focas%lists%plot%utilities
+.TE
+.KE
+.PP
+Everything in the root menu of IRAF is a \fBpackage\fR.
+A package is a set of tasks which are logically connected.
+For example, the "plot" package contains
+an assortment of tasks used to plot things. One can "load" any package
+by simply typing its name; loading a package makes the tasks in the package
+known to the CL. You must load a package before any of the tasks therein
+can be run.
+.PP
+Once the CL prompt appears, a large number of tasks are available and
+ready to be executed. A list of all loaded packages and the tasks in each
+package may be obtained by typing the command \fB??\fP.
+This will list the tasks organized by package, starting with the "current"
+package (note that the system comes up with the \fBclpackage\fR, \fBsystem\fR,
+and \fBlanguage\fR packages already loaded). The tasks are listed in the
+order in which they are searched when you type a command.
+Type \fB?\fP to list only the task names in the current package,
+or \fB?\fIpackagename\fR to list the tasks in package "packagename".
+.NH 2
+Executing commands from the CL
+.PP
+At this point you may want to try executing a few simple commands.
+The first thing to try is the \fBhelp\fR command. This will give
+additional information about the tasks and subpackages in the current package.
+In this and all subsequent examples, the text typed by the user is shown
+in boldface.
+.DS
+cl> \fBhelp\fR
+.DE
+For detailed information about a particular task, type "help" followed
+by the name of the task for which help documentation is desired.
+For example,
+.DS
+cl> \fBhelp help\fR
+.DE
+will print detailed information about the \fBhelp\fR program itself.
+.PP
+Now let's try running some tasks from the \fBsystem\fR package, which
+is already loaded. To list the file "login.cl" on the terminal enter the
+following command:
+.DS
+cl> \fBpage login.cl\fP
+.DE
+The \fBpage\fR routine will pause at the end of each page of text,
+waiting for you to type RETURN before displaying the next page.
+To get a directory listing, type:
+.DS
+cl> \fBdir\fP
+.DE
+which is actually an abbreviation for "directory".
+All package, task, and parameter names may be abbreviated
+while working interactively. Any abbreviation may be given which contains
+sufficient characters to uniquely identify the name; if the abbreviation
+is not unique, an error message is printed.
+To list all your files with the ".cl" extension, you can type:
+.DS
+cl> \fBdir "*.cl"\fP
+.DE
+Note that the pattern string \fB*.cl\fP \fImust be enclosed in quotes\fR
+or you will get a "syntax error" message from the CL.
+This is because the CL is attempting to evaluate every command
+as a possible aprithmetic expression and the asterisk is a valid
+arithmetic operator.
+Without the quotes, there is no way of knowing whether an argument to
+a task is a string with odd characters or an arithmetic expression.
+When in doubt, use quotes around strings and filenames.
+Either apostrophes or quotes may be used to delimit strings in the CL.
+.PP
+Packages are entered the same way tasks are run,
+i.e. by merely typing the name of the package or task as a command
+(a package is in fact a special kind of task).
+Enter the "utilities" package by typing:
+.DS
+cl> \fButilities\fP
+.DE
+or just:
+.DS
+cl> \fBut\fP
+.DE
+Note also that the prompt has changed from \fBcl>\fP to \fBut>\fP to
+let you know you have entered another package, and that
+a set of new tasknames is now available to you.
+.PP
+Upon entry to the \fButilities\fR package you will be presented with a
+menu listing the tasks in the new package. One of the utility programs
+is the \fBprecess\fR program, used to precess lists of astronomical
+coordinates. The simplest way to run \fBprecess\fR is to type only
+its name:
+.DS
+ut> \fBprecess\fP
+.DE
+and you will be prompted for the name of an input file containing a list
+of coordinates to be precessed, and the years over which the
+precession is to be computed. If you do not have the coordinates in a
+file give the file name as "STDIN" (it must be upper case), and
+you can enter the coordinates interactively from the terminal.
+Any number of coordinates (input lines from the "file" STDIN) may be entered;
+signal the "end of file" by typing the EOF sequence,
+\fB<ctrl/z>\fR on the KPNO systems.
+Coordinates are entered in pairs (RA DEC) in either decimal or sexagesimal
+notation (i.e., 12.5 or 12:30:04.2). If you have any problems type
+\fBhelp precess\fR for additional information, including examples.
+.PP
+If you have a long list of coordinates to precess, try entering
+them into a file. The command
+.DS
+ut> \fBedit coords.1950\fP
+.DE
+will call up the default editor (\fBvi\fP on the UNIX systems) to edit the
+file "coords.1950".
+After creating your coordinate file and exiting the editor in the usual
+fashion, you will be back in the CL. Now try executing \fBprecess\fP taking
+input from the file:
+.DS
+ut> \fBprecess coords.1950\fP
+.DE
+Of course the output will still be placed on the terminal, so
+you may wish to redirect the output into a file as well:
+.DS
+ut> \fBprecess coords.1950, > coords.1984\fP
+.DE
+Note that \fIarguments must be delimited by commas\fR or you will
+get a "syntax error" message from the CL. The following UNIX-like command
+will cause a syntax error:
+.DS
+ut> \fBprecess coords.1950 > coords.1984\fP (illegal syntax)
+.DE
+.PP
+If the coordinate list is very long, you may wish to process
+the list as a background job. Probably you will not like to be bothered
+by the background task asking for parameters, so be sure to enter
+all the necessary parameters on the command line. If you are not
+sure what parameters are required or in what order, the fastest way to
+find out is to use the "list parameter" task \fBlparam\fR to find out:
+.DS
+ut> \fBlparam precess\fR
+.DE
+The \fBlparam\fR task will list the task's parameters in the order in
+which they must be given on the command line, showing the current values
+of the parameters and the prompt strings as well (more on this later).
+To execute the task \fBprecess\fR in the background, type:
+.DS
+ut> \fBprecess coords.1950, 1950, 1984, > coords.1984 & \fP
+.DE
+The CL will be available for further interactive use and will
+inform you when the background job is complete.
+.PP
+Now that you are a couple of layers deep into the CL, you may
+wonder how to exit. If you type \fBbye\fP, you will exit the current
+package and rise one level of loaded packages. If you type \fBbye\fP at the
+CL prompt level, you will exit from the CL completely.
+.NH
+Basic Usage
+.NH 2
+CL parameters
+.PP
+The CL is actually a task and has a set of parameters which
+can be used to direct its execution. For example, you may wish
+to keep a record of all commands you type. The CL will do this
+if you set the boolean parameter \fBkeeplog\fP to yes. (Boolean
+parameters can assume only the values yes or no.) Simply type:
+.DS
+cl> \fBkeeplog = yes\fP
+.DE
+All subsequent commands will be written to the log file defined by the
+string parameter \fBlogfile\fP which defaults to the file name
+"uparm$logfile". You may choose to set this file name to "session1",
+for example, by:
+.DS
+cl> \fBlogfile = 'session1'\fP
+.DE
+For a full list of CL variables type "lparam cl". The CL variables
+which affect the behavior of the CL and which you may wish to alter are:
+.TS
+center box;
+cb s s
+ci | ci | ci
+l | l | l.
+CL Parameters
+_
+parameter default value function
+=
+abbreviate yes accept abbreviations
+keeplog no record commands in a file
+logfile "uparm$logfile" log file name
+menus yes print menu when package changes
+notify yes signal when background job terminates
+.TE
+.PP
+The CL parameters are initialized to their default values in your
+\fBlogin.cl\fR file. Any changes made by assignment will be lost when
+you log out of the CL (this is not true of the parameters of a normal
+task). To permanently change the value of a CL parameter, you should
+edit your login.cl file.
+
+.NH 2
+Environment Variables
+.PP
+In addition to the CL parameters, which affect only the operation of
+the CL, the CL maintains a table of "environment variables" which
+affect the operation of all IRAF programs. Environment variables are
+created or redefined with the \fBset\fR command; \fBset\fR without
+any arguments prints the current list of variables. The environment
+list is used to define logical names for directories, to associate
+physical devices with logical device names, and to provide control
+over the low level functioning of the IRAF file i/o system.
+.PP
+The default environment list is created at login time, i.e., when the
+CL is first run.
+One may add new environment variables, or redefine old ones,
+at any time during
+a session with the \fBset\fR command. Set declarations made during
+execution, however, may be lost upon exit from a package. To make
+sure environment declarations last for a full session, they should be
+made immediately after logging in. To make environment declarations
+permanent, they should be placed in your \fBlogin.cl\fR file.
+.PP
+A selection of the more important environment variables is shown in the
+table below. The permissible names of devices are system dependent;
+the KPNO devices are "vt100", "vt640" (retrographics enhanced vt100),
+"tek4012" or "4012", "versatec", and "imagen".
+.TS
+center box;
+cb s s
+ci | ci | ci
+l | l | l.
+Selected Environment Variables
+_
+variable default value usage
+=
+terminal "vt100" default terminal device
+printer "imagen" default line printer device
+stdgraph "vt640" name of graphics terminal
+stdplot "versatec" batch plotter device
+stdvdm "uparm$vdm" name of graphics metacode file
+stdimage "iism70" image display device
+clobber no clobber (overwrite) files
+filewait yes wait for busy files to become available
+imdir "/tmp2/iraf/" directory where bulk data is stored
+.TE
+.PP
+File \fBclobber\fR refers to the UNIX-like feature of silently
+overwriting an existing file when the output file to be created has
+the same name. If file clobber is disabled (\fBclobber=no\fR, the default)
+neither the CL nor an IRAF program called from the CL will create a new
+file if an old file exists with the same name; the program will abort
+instead. If \fBfilewait\fR is enabled (\fBfilewait=yes\fR, the default),
+a program which cannot access an existing file will wait for it to become
+available. This happens when a job needs to write to a file which
+is already opened for writing by another job.
+.PP
+The logical directory \fBimdir\fR is where the IRAF system will store
+your image data. IRAF images will appear to be created in your local
+user directory, but in fact it is only the header file which goes there.
+The pixels are put in a second file on one of the temporary files systems,
+which are configured and managed with large datasets in mind. These \fBpixel
+storage files\fR are transparent to the user, but if you have a great
+deal of data it may be more efficient to set up your own directory on
+a temporary files system, and redefine \fBimdir\fR accordingly.
+Having a private \fBimdir\fR also makes it convenient to save data on
+tape and later restore it to disk; the header files are usually small
+enough so that they need not be archived if the data is going to be restored
+within a week or two.
+.PP
+The \fBset\fR statement is used to set environment variables. For example,
+to change the name of the graphics terminal from the KPNO default "vt640"
+to "tek4012":
+.DS
+cl> \fBset stdgraph = tek4012\fR
+.DE
+To change the name of the default printer device from the default "imagen"
+to "versatec" (perhaps because it is physically closer to your terminal).
+.DS
+cl> \fBset printer = versatec\fR
+.DE
+.PP
+The \fBset\fR command is only used to change the \fBsystem wide defaults\fR
+for output devices and such. All IRAF programs which write to the line
+printer or a graphics device also permit the device to be selected on the
+command line. The name of the terminal, and the terminal characteristics
+(baud rate, etc.) are most conveniently set with the command \fBstty\fR in
+the package \fBsystem\fR.
+.NH 2
+File and directory names
+.PP
+The IRAF system employs a virtual file system so that all file references
+will look the same on any computer. The IRAF primitives convert "virtual
+file names" into their host operating system equivalents. In general,
+either the virtual file name or the equivalent system dependent file name
+may be used in a command entered by the user. The IRAF system itself
+uses only the virtual form for reasons of transportability.
+.PP
+The environment list described in the last section plays a fundamental
+role in the mapping of virtual file names. The environment list is used
+to define logical directories, equating the system dependent name of the
+directory to a logical name. An example of a virtual file name is the
+default logfile, "uparm$logfile". The "uparm" field,
+delimited by the $ character, is the logical directory; the file name
+within that directory is "logfile".
+.PP
+Although file names cannot be abbreviated the way commands can,
+pattern matching may be used to refer to many files by typing only a
+short string (the pattern). The pattern matching metacharacters are
+identical to those used in the UNIX operating system. For example,
+to print all files having extensions of '.cl', type:
+.DS
+cl> \fBlprint '*.cl'\fP
+.DE
+To page through all files with the "cl" extension in the logical directory
+"system":
+.DS
+cl> \fBpage 'system$*.cl'
+.DE
+To delete a list of files:
+.DS
+cl> \fBdelete 'file1,file2,file3'
+.DE
+.PP
+.PP
+Note the quotes around the pattern strings; these are required due to the
+presence of the asterisk character in the first two examples, and the
+comma in the final example. To be more precise, a string need not be
+quoted provided [1] it appears as an identifier (a name) in an argument
+list not enclosed in parenthesis, and [2] the string contains only instances
+of the alphanumeric characters, underscore, period, and dollar sign.
+If the string contains any special characters, i.e., an arithmetic or
+boolean operator, comma, question mark, etc., it must be quoted.
+If in doubt, use quotes (either apostrophes or quotes will do).
+.PP
+For example, consider the following simple command:
+.DS
+cl> \fBdelete filex\fR
+.DE
+The name "filex" given here is actually ambiguous, i.e., it could be either
+the name of a file (a string constant) or the name of a string \fIparameter\fR
+set to the name of the file to deleted. In this simple and common case,
+the CL is will quietly assume that "filex" is the name of a file.
+Either of the following forms are equivalent to this command and both are
+unambiguous:
+.DS
+cl> \fBdelete "filex"\fR
+.DE
+.DS
+cl> \fBdelete ("filex")\fR
+.DE
+The following command is also unambiguous, and specifies that the CL is to
+take the name of the file to be deleted from the \fIparameter\fR "filename":
+.DS
+cl> \fBdelete (filename)\fR
+.DE
+.PP
+Note also that in all the examples, a \fBsingle\fR string type argument,
+the file matching template, is used to refer to a list of files.
+A template is a string consisting of one or more filenames or patterns
+delimited by commas. This convention is employed by all IRAF tasks which
+operate on lists of files. Be careful not to confuse a file list template,
+which is a string, with the argument list itself. Thus,
+.DS
+cl> \fBdelete 'file1, file2, prog.*'\fR
+.DE
+is perfectly acceptable, while
+.DS
+cl> \fBdelete file, file2, 'prog.*'\fR
+.DE
+is incorrect.
+.PP
+Often it is useful to be able to use multiple directories to organize
+data. For example, you may have a directory for M87 data, and one for M8.
+To print the name of your current directory, or the pathway through the
+system to your directory, type
+.DS
+cl> \fBpath\fP
+.DE
+The system dependent pathname of the current directory will be printed
+(\fBpath\fR is an abbreviation for "system.pathnames").
+To change to a new directory, type:
+.DS
+cl> \fBchdir \fInewdir\fR
+.DE
+where \fInewdir\fR is either the name by which the directory is known to the
+underlying operating system, or an IRAF logical directory name defined with
+a \fBset\fP command. For example to define the logical directory "M87"
+on a UNIX based system, execute the following \fBset\fR command (note the
+trailing '/'):
+.DS
+cl> \fBset M87 = "/usr/myname/iraf/M87/"
+.DE
+and then you may type either of the following commands to change the current
+directory to "M87" (note \fIchdir\fR may be abbreviated to \fIch\fR).
+.DS
+cl> \fBchdir M87\fR
+cl> \fBchdir "/usr/myname/iraf/M87"
+.DE
+.PP
+Of course it is not necessary to change to a directory to reference the files
+therein. Your login directory, for example, already has the logical name
+\fBhome\fR assigned to it. The following command would page the \fBlogin.cl\fR
+file in your home directory, regardless of the current directory:
+.DS
+cl> \fBpage home$login.cl\fR
+.DE
+.NH 2
+Parameters
+.PP
+Nearly all tasks have a formally defined set of parameters associated with
+them. A task's parameters may be listed with the command
+\fBlparam \fItaskname\fR. For example, to list the parameters for the
+task \fBdelete\fR, used to delete files:
+.DS
+cl> \fBlparam delete\fP
+.DE
+The following list will appear giving the parameter name, its
+current value, and the prompt string associated with it.
+.DS
+.cs 1 18
+.br
+ files = list of files to be deleted
+ go_ahead = yes ?
+ (verify = no) verify operation before deleting each file?
+(default_acti = yes) default delete action for verify query
+ (mode = ql)
+.DE
+.cs 1
+.PP
+Notice that there are two types of parameters, those with and without
+parentheses around the \fIparam=value\fR fields. The parameters not
+enclosed in parentheses are called \fBpositional parameters\fR,
+and will be queried for if not given on the command line. The first
+positional parameter will be set by the first "positional" argument on the
+command line, the second positional parameter by the second positional argument,
+and so on. A \fBpositional argument\fR is an argument which is associated
+with a parameter by its position in the command line; nonpositional arguments
+refer to parameters by name and must follow the positional arguments.
+The parameters enclosed in parentheses are called \fBhidden parameters\fR,
+and are the topic of the next section.
+.NH 3
+Hidden parameters
+.PP
+The last three lines in the above example describe additional "hidden"
+parameters. The CL does not query for hidden parameters, but automatically
+uses the default values. A query will be generated only if there is no
+default value, or if the default value is illegal for some reason.
+Hidden parameters may be set on the command line, but unlike positional
+parameters, the command line value will not be "learned", i.e., become
+the new default value. The default value of a hidden parameter may only
+be changed by an explicit assigment, and one should exercise caution
+in doing so, because it is easy to forget that the parameter has been changed.
+.PP
+Hidden parameters make it possible to easily change the behavior of a task,
+achieving considerable flexibility without requiring many arguments on the
+command line, or annoying queries for parameters. Hidden parameters come close
+to making it possible to please everybody, since the user can modify the default
+behavior of a task to make it do what they want. Hidden parameters can
+also be dangerous if they are used improperly (i.e., for data dependent
+parameters in scientific programs).
+.PP
+The \fBdelete\fR task is a good example of a task which it is nice to be
+able to personalize. The default behavior of \fBdelete\fR is to simply
+delete the named file or files (provided they are not "protected" files).
+File deletion is dangerous, particularly since a file name matching
+template may be used to delete many files. For example, the command
+.DS
+cl> \fBdelete '*'\fR
+.DE
+will delete \fIall\fR of the (unprotected) files in the current directory.
+IRAF recognizes a number of special pattern matching metacharacters in
+addition to "*", and one could easily get burnt if they were not familiar
+with the use of file matching templates.
+.PP
+To eliminate this possibility you might want to change the default behavior
+of \fBdelete\fR to interactively verify each file deletion. This is done
+by changing the value of the hidden parameter "verify", which defaults
+to \fIno\fR. Hidden parameters of type boolean (yes/no) may be overridden
+temporarily on the command line, as follows:
+.DS
+cl> \fBdelete '*.dat', verify+\fR
+.DE
+or, equivalently,
+.DS
+cl> \fBdelete '*.dat', verify=yes
+.DE
+Either of these commands would cause a prompt to be issued naming
+each file matching the template, and asking you if you want to delete
+it (this will happen even in batch mode). Setting a hidden parameter
+on the command line only overrides the value of that parameter for
+that call; the default value is not changed. To permanently change
+the default value of a hidden parameter, an explicit assignment is
+required:
+.DS
+cl> \fBdelete.verify = yes\fR
+.DE
+.PP
+This will "permanently" change the value of the "verify" parameter
+to yes, causing all subsequent file deletions to be verified, unless
+\fBdelete\fR is called with the argument "verify\(mi" or "verify=no"
+on the command line. The "permanently" is qualified because it may
+be undone by another assignment, or by "unlearning" the \fBdelete\fR
+parameters. The \fBunlearn\fR task restores the system default values
+of the parameters for a single task or for an entire package.
+Thus,
+.DS
+cl> \fBunlearn delete\fR
+.DE
+will restore the parameters of the task \fBdelete\fR to their default
+values, and
+.DS
+cl> \fBunlearn system\fR
+.DE
+will restore the defaults for \fIall of the tasks\fR in the
+package "system". If you want to restore the defaults for all the
+parameters that ever were, delete the contents of the logical directory
+\fBuparm\fR:
+.DS
+cl> \fBdelete "uparm$*.par"\fR
+.DE
+.NH 3
+Specifying the parameters to a task
+.PP
+In many cases, it will be obvious what the arguments to a task
+should be, either from the context of what the task does, or
+from a parameter listing. If you are unsure how to proceed,
+you can simply type the task name, and answer the questions.
+Each prompt will include a minimum and maximum acceptable value
+if one applies, and the current value of the parameter if
+one exists. If you wish to retain the current value, simply
+press RETURN. Otherwise, type in a new value.
+.PP
+Once you are familiar with the operation of a task, you can
+enter the parameter values on the command line in the
+order in which they appear in the \fBlparam\fR parameter listing.
+A command line argument may be any general expression, much like
+the arguments to a Fortran subroutine. Parameters may also be
+set using the "paramname = value" notation on the command line,
+but any positional arguments must be given first.
+.PP
+For example, the precession task requires a file name (parameter \fIinput\fR),
+a starting year (parameter \fIstartyear\fR), and an ending year (parameter
+\fIendyear\fR); the latter two parameters specify the interval over
+which the coordinate transformation is to occur.
+This task can be executed in any of the following ways:
+.DS
+cl> \fBprecess STDIN,1950,1984\fP
+.DE
+.DS
+cl> \fBprecess stdepoch=1984+i*4\fP
+.DE
+.DS
+cl> \fBprecess\fP
+.DE
+In the last two cases, the CL will prompt for the missing information.
+In the second case, an expression is used to compute the value of the
+hidden parameter \fBstdepoch\fR.
+Some legal value of the variable 'i' must have been specified previously,
+otherwise the CL will ask for that as well. The capability to specify
+the values of parameters using expressions is most useful within
+\fBwhile\fR loops; this is an advanced topic which will be touched on later.
+.NH 2
+Pipes and i/o redirection
+.PP
+We have already seen how tasks can take their input from either the
+terminal or from a file, and send the output to either the terminal
+or a file. The capability to change the standard input and output
+of a task on the command line is called \fBi/o redirection\fR. The default
+standard input and output for a task is the user terminal.
+.PP
+The \fBpipe\fR syntax is a powerful kind of i/o redirection.
+A "pipe" is formed by connecting the output of one task
+to the input of another task; an arbitrary number of tasks may be connected
+together in this way to form a single pipe command.
+UNIX users will already be familiar with the concept and uses of pipes,
+but beware that CL pipes differ from UNIX pipes in that the tasks
+execute serially rather than concurrently (nothing comes out of the
+end of the pipe until all the input has been read in). Note also that
+CL queries are not affected by the use of i/o redirection or pipes.
+.PP
+A simple example of the use of a pipe is redirecting the output of a command
+to the line printer. This can be done with i/o redirection as follows.
+.DS
+cl> \fBhelp help, > tempfile\fR
+cl> \fBlprint tempfile\fR
+cl> \fBdelete tempfile\fR
+.DE
+The pipe notation accomplishes the same thing and is far more concise:
+.DS
+cl> \fBhelp help | lprint\fR
+.DE
+.PP
+For a more sophisticated example of the use of pipes, load the \fBlists\fR
+package and try out the following command:
+.DS
+li> \fB?? | words | match ":",stop+ | sort | table\fR
+.DE
+This sequence takes the list of menus produced by \fB??\fR, breaks it into
+a list of words, filters out the lines that contain the colon character
+(the package names), sorts the list, and prints a super menu listing the
+tasks in all loaded packages.
+.NH 2
+Command Syntax
+.PP
+The form of a task call is the task name, optionally followed by an
+argument list. The argument list may optionally be enclosed in
+parenthesis. The argument list consists of a list of expressions
+delimited by commas. Simple filename or string arguments appearing
+in unparenthesized argument lists need not be quoted (see \(sc3.3).
+Any positional arguments must be given first, followed by
+"keyword = value" assignments, switches ("param+"), and i/o redirection
+assignments ("> file"). The latter three types of arguments may
+appear in any order. Commas may be used as placeholders to skip
+positional arguments that need not be set, as shown in the following
+example:
+.DS
+cl> \fBtype "coords.1950" | precess ,1950,1984.3\fR
+.DE
+.PP
+The form of a command is not limited to solitary calls to tasks.
+For example, several tasks may be called in sequence on a single
+command line, using the semicolon character to delimit each call:
+.DS
+cl> \fBclear; dir\fR
+.DE
+This command clears the terminal screen, then lists the files in the
+current directory. If the command sequence to be executed is too
+big to fit on a single line, it can be enclosed in curly brackets:
+.DS
+.cs 1 18
+cl> \fB{\fR
+>>> \fBclear\fR
+>>> \fBdirectory\fR
+>>> \fBbeep\fR
+>>> \fB}\fR
+.DE
+.cs 1
+An arbitrary number of commands may be entered in this way and executed
+as a single unit. The prompt will change to \fB>>>\fR after the first
+line to signal that the CL requires more input before it can execute the
+command. If an argument list is too large to fit all on one line,
+continuation is understood if the last item on a line is a comma,
+the "pipe" character ("|"), or an operator (i.e., '+' or '||').
+.DS
+.cs 1 18
+cl> \fBgraph "pix[*,5],pix[*,10],pix[*,15]", po+, marker=circle,\fR
+>>> \fBxlabel=column, ylabel=intensity, title = "lines 5, 10, and 15"\fR
+.DE
+.PP
+.cs 1
+.NH 2
+Aborting tasks
+.PP
+Any task may be aborted by typing the interrupt sequence (<ctrl/c> on
+the KPNO systems). Control will return to the point at which the last
+interactive command was entered. When an IRAF program run from the CL
+is interrupted, it will usually perform some cleanup functions, deleting
+partially written files and so on. If an error (or another interrupt)
+should occur during error recovery, the program will issue the following
+message:
+.DS
+PANIC: Error recursion during error recovery
+.DE
+.PP
+A panic abort is usually harmless, but may result in some half-written
+dreg files being left behind.
+.NH 2
+Background Jobs
+.PP
+Any command, including multiline commands involving calls to several tasks,
+may be executed in the background by appending the character "&" to the
+end of the command block. The CL will print out the job number of the
+background job and return control to the terminal. Background job numbers
+are always small integers in the range 1 to N, where N is the maximum
+permissible number of background jobs (typically 3-6).
+.DS
+cl> \fBcontour 'm92', dev=stdplot &\fR
+[1]
+cl>
+.DE
+If the task runs to completion, and if the CL \fBnotify\fR parameter is
+set to yes, the message "\fB[1] done\fR" will be printed on your terminal
+when the task completes. If the background job writes to the standard
+output, and the standard output has not been redirected, the output of
+the background job will come out on your terminal mixed in with the output
+from whatever else you are doing.
+.PP
+If sometime during the processing of a background job, the job finds that
+it needs to query for a parameter, the message
+.DS
+[1] stopped waiting for parameter input
+.DE
+will appear on your terminal. It is not necessary to respond to such a
+request immediately; when a convenient point is reached, respond as
+follows:
+.DS
+cl> \fBservice 1\fR
+.DE
+The prompt string from the background job will be printed, just as if
+you were running the job interactively. Respond to the query and the
+background job will continue executing. If you do not respond to the
+request for service from a background job, it will eventually time
+out and abort.
+.PP
+The \fBkill\fR command may be used to abort a background job. The argument
+is the logical job number printed by the CL when the background job
+was spawned (or a list of jobs to be killed):
+.DS
+cl> \fBkill 1\fR
+.DE
+Sometimes it is desirable to wait for a background job to complete before
+resuming interactive work. For example, you might reach a point where
+you cannot proceed until the background job has finished writing a file.
+The \fBwait\fR command is used to wait for \fIall\fR currently running
+background tasks to complete (this is a deficiency which will be corrected
+at some point):
+.DS
+cl> \fBwait; beep\fR
+.DE
+.PP
+There is at present no really nice way to get status on the progress of
+background jobs. The command "\fBspy v\fR" will command the host
+operating system to print
+the processor status (in a system dependent form), including information
+on the status of all running processes.
+.NH 2
+Sending commands to the host operating system
+.PP
+Sometimes it is necessary to send a command to the host operating system.
+Any command may be sent to the underlying operating system by prefacing
+the command with the escape character "!". The rest of the command line
+will be passed on unmodified. For example, to read your mail on a UNIX
+system,
+.DS
+\fBcl> !mail\fR
+.DE
+Upon exiting the mail routine, you will be back in the CL.
+.NH
+Advanced Usage
+.NH 2
+The History mechanism
+.PP
+The CL \fBhistory mechanism\fR keeps a record of recent commands and provides
+a way of reusing those commands to enter new commands with a minimum of
+typing. In particular, the last command entered can easily be edited to
+correct an error, without having to retype the entire command.
+The history mechanism should not be confused with the logfile; the history
+mechanism does not permanently record commands, and the logfile cannot
+be used to save typing.
+.PP
+The \fBhistory\fR command is used to display the last few commands entered:
+.DS
+.cs 1 18
+cl> \fBhistory\fR
+101 urand 200,2 | graph po+, marker=circle, szmarker=.03
+102 help graph | lprint
+103 history
+cl>
+.DE
+.cs 1
+By default, the last 15 commands entered are printed, each preceeded by
+the command number. To print the last N commands, add the argument N to
+the \fBhistory\fR command line; this will become the new default (-N will
+not change the default).
+.PP
+Given the history record sequence shown above, any of the following
+commands could be used to repeat command 101:
+.DS
+cl> \fB^101\fR
+.DE
+.DS
+cl> \fB^-3\fR
+.DE
+.DS
+cl> \fB^ur\fR
+.DE
+.DS
+cl> \fB^?mark?\fR
+.DE
+.PP
+The history command \fB^ur\fR finds the last command \fIbeginning\fR with the
+string "ur", and executes it. The command \fB?mark?\fR finds the last
+command \fIcontaining\fR the string "mark", and executes it (the trailing
+? is optional if it is the last character on the line).
+A \fB^\fR alone would merely repeat the last command entered.
+The recalled command will be echoed for verification.
+.PP
+Repeating a command in this fashion can be dangerous, of course, if you
+make an error and recall the wrong command (watch out for \fB^delete\fR).
+To play it safe, append the string \fB:p\fR to the history command:
+.DS
+cl> \fB^ur:p\fR
+urand 200,2 | graph po+, marker=circle, szmarker=.03
+cl>
+.DE
+This will recall the command and enter it as the most recent command in
+the history buffer, but will not execute it. One can then type \fB^\fR
+to execute the command. Often it is more useful to recall an old command
+and edit it slightly. This is done as follows:
+.DS
+.cs 1 18
+cl> \fB^ur:p\fR
+urand 200,2 | graph po+, marker=circle, szmarker=.03
+cl> \fB^circle^box\fR
+urand 200,2 | graph po+, marker=box, szmarker=.03
+.DE
+.cs 1
+This sequence would recall command 101, change the string "circle" to
+"box", and execute the new command. The same notation may be used to
+correct errors in the last command entered. By default, only the first
+matched substring is replaced; a trailing \fB^g\fR may be added to replace
+all matched substrings.
+.PP
+Often it is useful to be able to reuse the \fBarguments\fR of a previous
+command. The notation \fB^^\fR refers to the first argument in
+of the last command entered, \fB^$\fR to the last argument of the last
+command, and \fB^*\fR to the whole argument list. Thus,
+.DS
+cl> \fBdir "file1, file2, *.cl, home$junk", op=l\fR
+cl> \fBlprint ^^\fR
+.DE
+would print a long-form directory listing of the files specified by the
+template, then print the same files on the line printer.
+.PP
+One of the most useful features of the history mechanism is the ability to
+repeat a command with additional arguments appended. Almost any
+history command may be followed by some extra text which is appended to the
+command recalled from the history. For example,
+.DS
+cl> \fBurand 200,2 | graph po+\fR
+cl> \fB^^, title = "200 random numbers"\fR
+urand 200,2 | graph po+, title = "200 random numbers"
+.DE
+In this case the notation \fB^^\fR refers to the \fIentire last command\fR
+entered. The notation is unambiguous because the \fB^^\fR appears at
+the start of the command line; do not confuse it with the use of \fB^^\fR
+to reference the first argument.
+.NH 2
+Expressions and intrinsic functions
+.PP
+We have already seem some simple examples of CL expressions. The CL has a
+conventional modern expression syntax which should be familiar to most
+users. The following operators are provided:
+.DS
+.cs 1 18
++ \(mi * / the conventional arithmetic operators
+** exponentiation
+// string concatenation
+< < = less than, less than or equals
+> > = greater than, greater than or equals
+!= = = not equal, equal (2 equal signs)
+&& || \fBand\fR, \fBor\fR
+! \fBnot\fR
+.DE
+.cs 1
+.PP
+Parenthesis may be used to alter the default order of evaluation of an
+expression. Quotes are not optional in expressions or anywhere inside
+parenthesis; identifiers are assumed to be the names of parameters.
+.PP
+All of the Fortran intrinsic functions are provided, with the exception
+of the hyperbolic and complex functions (the CL has no complex datatype).
+The datatypes supported by the CL are \fBboolean\fR, \fBinteger\fR, \fBreal\fR,
+\fBstring\fR, and several exotic types discussed in the Programmer's Guide.
+Mixed mode expressions involving integers and reals are permitted.
+Explicit type conversion is implemented with the intrinsic functions
+\fBint\fR, \fBreal\fR, and \fBstr\fR, the latter converting an argument
+of any datatype into a string.
+.PP
+The CL provides a special type of statement for evaluating expressions
+and printing the value out on the terminal. The form of the statement
+is an expression preceeded by the equals sign:
+.DS
+= \fIexpression\fR
+.DE
+If you prefer, the more conventional and more general \fBprint\fR statement
+can be used with the same results:
+.DS
+\fBprint (\fIexpression [, expression, ...] \fB)\fR
+.DE
+For example, try entering the following expressions and see if you
+can predict the results:
+.DS
+cl> \fB= (sin(.5)**2 + cos(.5)**2)\fR
+.DE
+.DS
+cl> \fB= (mod (int(4.9), 2) == 0)\fR
+cl> \fB^int^nint\fR
+.DE
+.DS
+cl> \fB= "map" // radix (512, 8)\fR
+.DE
+.DS
+cl> \fB= delete.verify\fR
+.DE
+.NH 2
+Image Sections
+.PP
+All IRAF programs which operate upon images may be used to operate on
+the entire image (the default) or any \fBsection\fR of the image.
+A special notation is used to specify image sections. The section
+notation is appended to the file name of the image, much like an
+array subscript is appended to an array name in a conventional programming
+language. If no section is specified, the entire image will be used.
+
+.KS
+.TS
+center;
+ci ci
+l l.
+section refers to
+
+pix[] whole image
+pix[i,j] the pixel value (scalar) at [i,j]
+pix[*,*] whole image, two dimensions
+pix[*,\(mi*] flip y-axis
+pix[*,*,b] band B of three dimensional image
+pix[*,*:s] subsample in y by S
+pix[*,l] line L of image
+pix[c,*] column C of image
+pix[i1:i2,j1:j2] subraster of image
+pix[i1:i2:sx,j1:j2:sy] subraster with subsampling
+.TE
+.KE
+
+.PP
+A limited class of coordinate transformations may be specified using image
+sections (but transpose is \fInot\fR one of them).
+The "match all" (asterisk), flip, subsample, index, and range notations
+shown in the table may be combined just about any way that makes sense.
+Some examples have already appeared in the text. As a simple example,
+the following command will graph line 10 of the image "pix" (the \fBgraph\fR
+utility is in the \fBplot\fR package):
+.DS
+cl> \fBgraph "pix[*,10]"\fR
+.DE
+To generate a contour plot of an 800 pixel square, two dimensional image
+on the graphics terminal, subsampling by a factor of 16 in both dimensions:
+.DS
+cl> \fBcontour "pix[*:16,*:16]"\fR
+.DE
+To display the fifth x,z plane of the three dimensional image named "cube"
+on frame 1 of the image display device (\fBdisplay\fR is in the
+subpackage \fBtv\fR of the package \fBimages\fR):
+.DS
+cl> \fBdisplay "cube[*,5,*]", 1\fR
+.DE
+.NH 2
+Statements and inline scripts
+.PP
+Since this is not a reference manual, we will not attempt to present a
+complete definition of the syntax of the command language.
+Nonetheless it can be helpful to understand a few of the more useful
+types of statements. The last section introduced two statements,
+the \fBimmediate\fR statement (\fI=expr\fR) and the \fBprint\fR statement.
+The \fBassignment\fR statement should also be familiar, but there is
+more to it than first meets the eye.
+.PP
+The assignment statement is most often used to set the value of a parameter.
+Since most parameters are local parameters belonging to some task, the
+"dot" notation must be used to name both the task and the parameter.
+Thus, in \(sc3.4.1 we used the statement
+.DS
+cl> \fBdelete.verify = yes\fR
+.DE
+to set the value of the "verify" parameter belonging to the task "delete".
+The task \fBdelete\fR belongs to the \fBsystem\fR package. If there
+happened to be another task named \fBdelete\fR in the searchpath, we
+would have to specify the package name as well to make the assignment
+unambiguous:
+.DS
+cl> \fBsystem.delete.verify = yes\fR
+.DE
+In this unfortunate situation of two tasks with the same name in different
+packages, we would also have to specify the package name explicitly
+just to be able to run the task:
+.DS
+cl> \fBsys.del \fIfiles\fR
+.DE
+.PP
+Often we do not want to simply assign a value to a parameter,
+but rather we want to increment, decrement, or scale a parameter.
+These functions can all be performed with assignment statements
+in the CL, using the assignment operators \fB+=\fR, \fB\(mi=\fR, \fB*=\fR,
+\fB/=\fR and \fB//=\fR. For example, to increment the value of
+a parameter, we would use the \fB+=\fR "assignment" statement:
+.DS
+cl> \fBsum_of_squares += (x ** 2)\fR
+.DE
+This statement increments the parameter "sum_of_squares" by the value of
+the expression \fB(x**2)\fR.
+.PP
+The CL provides the \fBif\fR, \fBif else\fR, and \fBwhile\fR statements
+for controlling the flow of execution in a command. These statements
+are quite useful for writing little loops to do things at the command
+level. For example, to print the values of the first ten powers
+of two:
+.DS
+.cs 1 18
+cl> \fBi=1; j=2\fR
+cl> \fBwhile (i <= 10) {\fR
+>>> \fB print (j)\fR
+>>> \fB j *= 2\fR
+>>> \fB i += 1\fR
+>>> \fB}\fR
+.DE
+.cs 1
+.PP
+This example illustrates the use of the builtin CL variables \fBi\fR
+and \fBj\fR. A number of variables are provided in the CL for interactive
+use; for a full listing type \fBlparam cl\fR. In short, the integer
+variables provided are \fBi,j,k\fR, the real variables are \fBx,y,z\fR,
+the string variables are \fBs1,s2,s3\fR, and the booleans are
+\fBb1,b2,b3\fR.
+.PP
+Note the parenthesized argument list in the call to \fBprint\fR in the above
+loop. If the parameter \fBj\fR were not enclosed in parenthesis,
+the CL would interpret it as a \fIstring\fR rather than a parameter,
+and erroneously print "j" each time through the loop. To avoid nasty
+surprises like this, \fIalways enclose argument lists in parenthesis in
+loops and within scripts\fR. As a rule, if arguments lists are not
+parenthesized when entering simple commands, but are always parenthesized
+in loops and scripts, the CL will probably do what you expect it to.
+.PP
+A \fBlist structured\fR parameter is also provided for reading lists
+(i.e., of file names). Lists are especially useful for setting up batch
+jobs. For example, suppose we want to make a series of contour plots
+on the standard plotter device. This can be done by interactively
+entering a command to produce each plot, but this is tedious, so
+we prepare a list of "image sections" to be plotted, one per line
+in the text file "sections". The following command could then be used
+to generate the plots in the background:
+.DS
+.cs 1 18
+cl> \fBlist = "sections"\fR
+cl> \fBwhile (fscan (list, s1) != EOF)\fR
+>>> \fB contour (s1, device = "stdplot") &\fR
+.DE
+.cs 1
+.PP
+If one starts writing commands very much more complicated than these
+examples, it is time to learn about \fBscript tasks\fR. A script task
+with an arbitary set of local parameters, calling the i/o functions built
+into the CL, can be used to write actual programs at the CL level.
+That is too complicated for us to go into here, but there are plenty of
+examples of CL scripts tasks (files with ".cl" extensions) in the system,
+and more detailed information is given in the CL Programmer's Guide.