initial checkin

This commit is contained in:
gdr 1997-10-07 01:43:55 +00:00
parent 6ec822da35
commit e4e2dd505c
10 changed files with 16407 additions and 0 deletions

709
doc/refs.aug96/gsh.12.html Normal file
View File

@ -0,0 +1,709 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 2.0">
<title>GNO Shell User's Manual</title>
</head>
<body bgcolor="#FFFFFF">
<p align="right"><font size="7" face="Times"><b>GNO Shell User's
Manual</b></font></p>
<p align="right"><font size="5" face="Times">By Tim Meekins,
Albert Chin, and Jawaid Bazyar</font></p>
<p align="right"><font size="5" face="Times">Edited by Andrew
Roughan</font></p>
<p align="right">&nbsp;</p>
<p align="right">&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font size="6" face="Times">Table of Contents</font></p>
<p>&nbsp;</p>
<p><b>Chapter 1 Getting started with the GNO Shell </b></p>
<dir>
<li>Introduction <br>
Customizing the Shell Environment <br>
Invoking gsh </li>
</dir>
<p><b>Chapter 2 Interacting with the GNO Shell </b></p>
<dir>
<li>Executing Commands <br>
Command-line Editor <br>
Command Input <br>
Command Editing <br>
History Editing Keys<br>
Command, Filename and Variable completion </li>
</dir>
<p><b>Chapter 3 Using the GNO Shell more productively </b></p>
<dir>
<li>What does this command do? <br>
Option Arguments <br>
Entering Multiple commands <br>
Using Aliases as Shorthand <br>
Redirecting Input and Output <br>
Pipelines <br>
Job Control <br>
Working with Pathnames <br>
Pathname Expansion <br>
Quoting Special Characters <br>
How gsh Finds a Command </li>
</dir>
<p><b>Chapter 4 Built-in Commands </b></p>
<dir>
<li>Built-ins vs EXE Commands <br>
Shell Commands <br>
Kernel Commands <br>
Environment Commands </li>
</dir>
<p><b>Chapter 5 Shell Variables </b></p>
<dir>
<li>Using shell variables <br>
Scope <br>
Description of Pre-defined Shell Variables <br>
Accessing shell variables </li>
</dir>
<p><b>Appendix A Sample gsh session </b></p>
<p><b>Appendix B Prefix Conventions </b></p>
<p><b>Appendix C Errors </b></p>
<p><b>Appendix D Signals </b></p>
<p><b>Appendix E Non-Compliant Applications </b></p>
<p><b>Appendix F Termcaps </b></p>
<p><b>Glossary </b></p>
<p>&nbsp;</p>
<p><b>Index 63</b></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font size="6" face="Times">Chapter 1</font></p>
<p><font size="6" face="Times">Getting started with the GNO Shell</font></p>
<p align="right"><font size="2" face="Times">&quot;Computer
operating systems are among the most complex objects created by
mankind...&quot;</font></p>
<p align="right"><font size="2" face="Times">Douglas Comer,
Operating System Design, The Xinu Approach</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font face="Times"><b>Introduction</b></font></p>
<p>&nbsp;</p>
<p><font face="Times">The GNO shell is an integral part of the
GNO Multitasking Environment (GNO/ME). The GNO shell provides the
interface between the user and the GNO Kernel. While both work
together, the jobs they perform are quite different. This manual
documents the functions of the shell.</font></p>
<p><font face="Times">The user interacts with the shell through a
command-line interface. Command-line interfaces provide a unique
way of interacting with the operating system. Unlike GUIs
(Graphical User Interfaces), with which you are already familiar
with by using programs such as the Finder and ShrinkIt! GS, all
commands are typically entered using the keyboard. The shell
interprets commands and passes them to the kernel for control and
execution.</font></p>
<p><font face="Times">The command-line interface will be
unfamiliar to some people However, once the command-line
interface has been mastered, the user should have no difficulty
using any current or future GNO applications. Those of you
already familiar with Unix interfaces, such as the C shell,
Bourne shell, and Korn shell, or the ORCA shell on the Apple
IIGS, will begin to realize the advantages which GNO/ME is able
to provide.</font></p>
<p><font face="Times">The way this manual is presented allows the
complete beginner to simply work through the chapters in a
chronological prder. Chapter 2 familiarises the user with
entering basic commands whereas the more powerful GNO/ME features
are introduced in Chapter 3. Chapter 4 documents the commands
which are built into the GNO Shell and Chapter 5 explains shell
variables which give the user control over how thier installation
functions.</font></p>
<p>&nbsp;</p>
<p><font face="Times"><b>Customizing the Shell Environment</b></font></p>
<p><font face="Times">When <b>gsh</b>, the implimentation of the
GNO Shell, is executed, it reads in and processes the <i>gshrc</i>
file. This file contains start-up instructions for the shell,
which can be used to customize the operation of the shell and
other aspects of the system. It is created by the GNO Installer
during the installation process.</font></p>
<p><font face="Times">The following is a sample <i>gshrc</i> file
(line numbers have been added for convenience):</font></p>
<pre>
1 ###
2 #
3 # GNO 2.0 gshrc file
4 #
5 ###
6 #
7 # Initialize our environment
8 #
9 set path=&quot;:hard:gno:bin :hard:gno:usr:bin&quot;
10 set prompt=&quot;[%h] %S%t%s %C&gt; &quot;
11 set home=&quot;:hard:gno:user:root&quot;
12 set term=gnocon
13 export path prompt home term
14 setenv history=100 savehist=25
15 ###
16 #
17 #Set up standard prefixes for utilities.
18 #
19 ###
20 prefix 2 :software:orca:libraries
21 prefix 3 :software:orca
22 prefix 4 :software:orca:shell
23 prefix 5 :software:orca:languages
24 prefix 6 :software:orca:utilities
25 prefix 7 :tmp
26 ###
27 #
28 # Set up prefixes for Orca2.0(tm)'s benefit
29 #
30 ###
31 prefix 13 :software:orca:libraries
32 prefix 14 :software:orca
33 prefix 15 :software:orca:shell
34 prefix 16 :software:orca:languages
35 prefix 17 :software:orca:utilities
36 alias ls 'ls -CF'
37 alias dir 'ls -al'
38 alias cp 'cp -i'
39 alias rm 'cp -p rm'
40 alias mv 'cp -p mv'
41 setenv usrman='/usr/man'
42 set fignore='.a .root .sym'
43 alias zcat 'compress -cd'
44 setenv pager=less
45 setenv less=-e
46 set nonewline=1
47 #
48 # Move to home directory
49 #
50 cd line
</pre>
<p><font face="Times">When you install GNO/ME, the GNO installer
knows where to find the GNO utilities and any ORCA utilities you
may have. Unfortunately it does not know where all the other
utilities and applications that you may wish to use are located.
It is therefore necessary to edit the setup file in order to tell
the GNO shell where these programs are on your hard disk.</font></p>
<p><font face="Times">The setup file, <i>gshrc</i>, is located in
the /usr directory of the path where you installed GNO/ME. You
can use any text editor from the desktop to edit the <i>gshrc</i>
file, or if you are already familiar with the editor <b>vi</b>
you can use this utility after launching the GNO kernel.</font></p>
<p><font face="Times">Line 9 is the statement that we are
concerned with. <b>Hard </b>represents the name of your
particular hard drive volume where you have installed GNO/ME.</font></p>
<p><font size="2" face="Courier">set path=&quot;:hard:gno:bin
:hard:gno:usr:bin&quot; line #9</font></p>
<p><font face="Times">You will see that spaces have been inserted
between pathnames. The space is the pathname separator and the
colon has been used as the path delimiter for this specific
variable, PATH. As an exercise, add your system directory to this
statement. Line 9 should now look like this:</font></p>
<p><font size="2" face="Courier">set path=&quot;:hard:gno:bin
:hard:gno:usr:bin :hard:system&quot;</font></p>
<p><font face="Times">What you have just done allows the GNO
shell to find the <b>Finder</b> application. Now go ahead and add
any pathnames that hold utilities or applications that you will
use frequently from GNO/ME. It should also be noted that it is
possible to have more than one pathname containing EXE, SYS16, or
EXEC files; this is impossible under ORCA. The PATH variable is
discussed thoroughly in Chapter 5.</font></p>
<p><font face="Times">For now, the remaining lines of the <i>gshrc</i>
file do not need editing. As you gain an understanding of the
system you may wish to make further changes to the <i>gshrc</i>
file. Make sure you save the file before you exit the editor.</font></p>
<p><font face="Times">It is possible to modify these instructions
while the GNO shell is active, but any changes will be lost upon
exiting <b>gsh.</b> If you wish the changes to remain effective
for the next session you must add them to the <i>gshrc</i> file.</font></p>
<p><font face="Times">By customizing the <i>gshrc</i> file it is
possible to make the GNO environment more like U</font><font
size="2" face="Times">NIX, </font><font face="Times">the ORCA
environment, or something completly different. Customization of
the GNO environment leads to greater user productivity.</font></p>
<p>&nbsp;</p>
<p><font face="Times"><b>Invoking </b>.i.<b>gsh</b></font></p>
<p><font face="Times">GNO/ME can be launched from a program
launcher, such as the System 6.0 Finder. Launch the GNO Kernel
program, <b>kern</b> by double clicking on it. The GNO kernel
automatically executes the supplied GNO shell, <b>gsh</b>.</font></p>
<p><font face="Times">The prompt, &quot;<tt>[1] 2:00am root </tt></font><font
size="2" face="Courier"><tt>%</tt></font><font face="Times">&quot;,
indicates that <b>gsh</b> is ready to receive input from the
keyboard.</font></p>
<p><font face="Times">To start a new <b>gsh</b> from the
command-line simply type <b>gsh</b>. If multiple copies of the <b>gsh</b>
process are undesirable, use the command <b>source gsh</b>
instead. This is useful for testing changes made to the <i>gshrc</i>
file. <b>Source</b> is a built-in comand which is discussed in
Chapter 4 <b>Shell commands</b>.</font></p>
<p>&nbsp;</p>
<p><font size="6" face="Times">Chapter 2</font></p>
<p><font size="6" face="Times">Interacting with the GNO Shell</font></p>
<p>&nbsp;</p>
<p><font face="Times"><b>Executing Commands</b></font></p>
<p><font face="Times">A command consists of two parts: a name and
its arguments. The command name is the name used to start the
command. The name is usually the name of a file which can be
executed. The only exceptions are commands which are built-in to
the shell. These commands are documented in Chapter 4 <b>Built-In
Commands</b>. Any shell utility command with a filetype of EXE,
SYS16, or EXEC, can be executed in this fashion. The command name
must be separated from the command arguments with a space.</font></p>
<p><font face="Times">The command arguments are parameters that
the command takes as data to work with (In Applesoft BASIC,
&quot;</font><font size="2" face="Courier">HELLO WORLD</font><font
face="Times">&quot; would be an argument for the </font><font
size="2" face="Courier">PRINT</font><font face="Times"> command).
Command arguments are separated from each other with a space.
Note that although arguments extend the usefulness of a command,
not all commands have arguments. Any arguments entered after the
command will be passed by the shell to the program when it starts
exectuting. </font></p>
<p><font face="Times">The examples below use the following
commands:</font></p>
<p><font size="2" face="Courier"><b>qtime</b></font><font
face="Times"> displays time in English text.</font></p>
<p><font size="2" face="Courier"><b>echo</b></font><font
face="Times"> prints arguments to the screen.</font></p>
<p><font face="Times">Examples:</font></p>
<p><font size="2" face="Courier">% <b>qtime</b></font></p>
<p><font size="2" face="Courier">It's almost five.</font></p>
<p><font size="2" face="Courier">% <b>echo II Infinitum</b></font></p>
<p><font size="2" face="Courier">II Infinitum</font></p>
<p><font face="Times">At the simplest level the user enters
commands to the shell by typing them on the keyboard. <b>Gsh</b>
includes a command-line editor to help the user enter and edit
commands. The editor also provides a way to modify and execute
previous commands. Additionally the editor can help complete the
names of commands, filenames and variables.</font></p>
<p><font face="Times"><b></b></font>&nbsp;</p>
<p><font face="Times"><b>Command-line Editor</b></font></p>
<p><font face="Times">Below is a complete description of the
functions of the command-line editor with short examples
depicting how each editing key works.</font></p>
<p><font face="Times">Throughout the examples the underline
character, &quot;</font><font size="2" face="Courier">_</font><font
face="Times">&quot;, will be used to represent the current cursor
position. In addition, &quot;OA&quot; is used to represent the
Open Apple key and the term <i>word</i> is used to indicate a
string of characters consisting of only letters, digits, and
underscores. To the right of a editing key entry is the </font><font
size="2" face="Courier">bindkey</font><font size="2" face="Times">
</font><font face="Times">function name which is used to remap
editing functions to new keys. This information is included for
reference purposes only. See Chapter 4 <b>Shell Commands</b> for
more information on the </font><font size="2" face="Courier">bindkey</font><font
face="Times"> command.</font></p>
<p><font face="Times">It should be pointed out that at this stage
that the user should not be concerned with what the actual
commands used in the examples do, rather the user should
concentrate on how the command-line editor functions work.</font></p>
<p>&nbsp;</p>
<p><font face="Times"><b>Command Input</b></font></p>
<p><font size="2" face="Courier">These command-line editor keys
deal with entering text directly on the command-line.</font></p>
<p><font size="2" face="Courier">RETURN</font><font face="Times">
</font><font size="2" face="Courier"><b>newline</b></font></p>
<blockquote>
<p><font face="Times">The return key is used to terminate
line input. <b>gsh</b> then interprets the command on the
line and acts accordingly. The position of the cursor on the
command-line does not matter.</font></p>
<p><font size="2" face="Courier">Before</font></p>
<p><font size="2" face="Courier">% <b>echo f</b><b><u>o</u></b><b>o
bar</b> (RETURN)</font></p>
<p><font size="2" face="Courier">After</font></p>
<p><font size="2" face="Courier">foo bar</font></p>
<p><font size="2" face="Courier">% _</font></p>
</blockquote>
<p><font size="2" face="Courier">CTRL-D</font><font face="Times">
&lt;no bindkey name&gt;</font></p>
<blockquote>
<p><font face="Times">Exits <b>gsh</b> if it was the first
character typed on the command-line. If there are still jobs
running in the background or stopped, <b>gsh</b> will display
&quot;</font><font size="2" face="Courier">There are stopped
jobs.</font><font face="Times">&quot; If you press </font><font
size="2" face="Courier">CTRL-D</font><font face="Times"> a
second time without an intervening command, <b>gsh</b> will
terminate all the jobs in the job list and exit.</font></p>
</blockquote>
<p><font size="2" face="Courier">CTRL-R</font><font face="Times">
</font><font size="2" face="Courier"><b>redraw</b></font></p>
<blockquote>
<p><font face="Times">Moves to the next line and re-displays
the current command-line. Use this to redraw the current line
if the screen becomes garbled.</font></p>
</blockquote>
<p><font size="2" face="Courier">CTRL-L</font><font face="Times">
</font><font size="2" face="Courier"><b>clear-screen</b></font></p>
<blockquote>
<p><font face="Times">Clears the screen, moves the cursor to
the top line, and redraws the prompt and any command-line
that was in the process of being edited.</font></p>
</blockquote>
<p><font face="Times"><b>Command Editing</b></font></p>
<p><font size="2" face="Courier">These command-line editor keys
allow editing of the command-line text.</font></p>
<p><font size="2" face="Courier">CTRL-B <b>backward-char</b></font></p>
<blockquote>
<p><font size="2" face="Courier">LEFT-ARROW</font><font
face="Times"> Moves the cursor one character to the left. You
cannot move past the first character on the line. If so, <b>gsh</b>
will output an error beep.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>print f</b><b><u>o</u></b><b>o
bar</b> (LEFT-ARROW) % <b>print </b><b><u>f</u></b><b>oo bar</b></font></p>
</blockquote>
<p><font size="2" face="Courier">CTRL-F <b>forward-char</b></font></p>
<p><font size="2" face="Courier">RIGHT-ARROW</font><font
face="Times"> Moves the cursor one character to the right. You
cannot move past the last character on the line. If so, <b>gsh</b>
will output an error beep.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>print f</b><b><u>o</u></b><b>o
bar</b> (RIGHT-ARROW) % <b>print fo</b><b><u>o</u></b><b> bar</b></font></p>
<p><font size="2" face="Courier">DELETE</font><font face="Times">
</font><font size="2" face="Courier"><b>backward-delete-char</b></font></p>
<p><font face="Times">Deletes the character to the left of the
cursor. You can delete up to the first character on the
command-line.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>print f</b><b><u>o</u></b><b>o
bar</b> (DELETE) % <b>print </b><b><u>o</u></b><b>o bar</b></font></p>
<p><font size="2" face="Courier">CLEAR <b>kill-whole-line</b></font></p>
<p><font size="2" face="Courier">CTRL-X</font><font face="Times">
Deletes all characters on the command line and positions the
cursor after the prompt.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>prin</b><b><u>t</u></b><b>
foo bar</b> (CTRL-X) % <b>_</b> </font></p>
<p><font size="2" face="Courier">CTRL-Y;</font><font face="Times">
</font><font size="2" face="Courier"><b>kill-end-of-line</b></font></p>
<p><font face="Times">Deletes all characters from the cursor to
the end of the command-line.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>print f</b><b><u>o</u></b><b>o
bar</b> (CTRL-Y) % <b>print f_</b> </font></p>
<p><font size="2" face="Courier">CTRL-D <b>delete-char</b></font></p>
<p><font size="2" face="Courier">OA-D</font><font face="Times">
Deletes the character under the cursor.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>print fo</b><b><u>o</u></b><b>
bar</b> (OA-D) % <b>print fo</b><b><u> </u></b><b>bar</b></font></p>
<p><font size="2" face="Courier">CTRL-A <b>beginning-of-line</b></font></p>
<p><font size="2" face="Courier">OA-&lt;</font><font face="Times">
Moves the cursor to the beginning of the line.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>print </b><b><u>f</u></b><b>oo
bar</b> (OA-&lt;) % <b><u>p</u></b><b>rint foo bar</b></font></p>
<p><font size="2" face="Courier">CTRL-E <b>end-of-line</b></font></p>
<p><font size="2" face="Courier">OA-&gt;</font><font face="Times">
Moves the cursor to the first position past the last character on
the line.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>print </b><b><u>f</u></b><b>oo
bar</b> (OA-&gt;) % <b>print foo bar</b><b><u>_</u></b> </font></p>
<p><font size="2" face="Courier">OA-RIGHT-ARROW <b>forward-word</b></font></p>
<p><font face="Times">Moves the cursor right to the last
character of the current word.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>print </b><b><u>f</u></b><b>oo
bar</b> (OA-RIGHT-ARROW) % <b>print fo</b><b><u>o</u></b><b> bar</b></font></p>
<p><font size="2" face="Courier">OA-LEFT ARROW <b>backward-word</b></font></p>
<p><font face="Times">Moves the cursor left to the beginning of
the current word.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>print f</b><b><u>o</u></b><b>o
bar</b> (OA-LEFT ARROW) % <b>print </b><b><u>f</u></b><b>oo bar</b></font></p>
<p><font size="2" face="Courier">% <b>print foo </b><b><u>b</u></b><b>ar</b>
(OA-LEFT ARROW) % <b>print </b><b><u>f</u></b><b>oo bar</b></font></p>
<p><font size="2" face="Courier">OA-E</font><font face="Times"> </font><font
size="2" face="Courier"><b>toggle-cursor</b></font></p>
<p><font face="Times">Toggles input mode between insert and
overstrike. Overstrike mode is distinguished by a solid inverse
cursor and insert mode by a blinking '</font><font size="2"
face="Courier"><b>_</b></font><font face="Times">' cursor. In
overstrike mode, any characters that are typed directly
over-write those characters below the cursor. In insert mode, the
characters typed are inserted before the character below the
cursor.</font></p>
<p><font face="Times"><b>History Editing Keys</b></font></p>
<p><font face="Times">These command-line editor keys allow access
to previously entered commands. The GNO shell automatically keeps
track of previous commands in what is called a history buffer.</font></p>
<p><font face="Times">The maximum number of command-lines saved
in the history buffer is determined by the shell variable . A
default value for this variable is set in the <i>gshrc</i> file
that the GNO Installer creates. The lines saved to the history
buffer are kept between sessions. That is, when you exit <b>gsh</b>,
$</font><font size="2" face="Courier">SAVEHIST</font><font
face="Times"> command-lines are saved to the </font><font
size="2" face="Courier">history</font><font face="Times"> file in
your </font><font size="2" face="Courier">$HOME</font><font
face="Times"> directory. When <b>gsh</b> is invoked again, all
command-lines saved in the history buffer will be available using
history editing keys. See Chapter 5 <b>Description of Predefined
Shell Variables</b> for more informtation on the </font><font
size="2" face="Courier">HISTORY</font><font face="Times"> and </font><font
size="2" face="Courier">SAVEHIST</font><font face="Times">
variables.</font></p>
<dir>
<li><font size="2" face="Courier">CTRL-P <b>up-history</b></font><p><font
size="2" face="Courier">UP-ARROW</font><font face="Times">
Fetches the previous command-line. If the current
command-line is the first line in the history buffer, the
next line fetched will be an empty command-line. If
invoked again, the last line in the history buffer will
be displayed.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>print foo bar</b></font></p>
<p><font size="2" face="Courier">% <b>echo Apple II</b></font></p>
<p><font size="2" face="Courier">% <b>echo GNO/ME</b></font></p>
<p><font size="2" face="Courier">% <b>_</b> (UP-ARROW) % <b>echo
GNO/ME_</b> </font></p>
<p><font size="2" face="Courier">% <b>echo GNO/ME_</b>
(UP-ARROW) % <b>echo Apple II_</b> </font></p>
<p><font size="2" face="Courier">CTRL-N <b>down-history</b></font></p>
<p><font size="2" face="Courier">DOWN-ARROW</font><font
face="Times"> Fetches the next command-line. If the
current command-line is the last command line in the
history buffer, the next line fetched will be the first
command-line in the history buffer.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% print foo bar</font></p>
<p><font size="2" face="Courier">% echo Apple II</font></p>
<p><font size="2" face="Courier">% echo GNO/ME</font></p>
<p><font size="2" face="Courier">% <b>_</b> (DOWN-ARROW)
% <b>print foo bar_</b> </font></p>
<p><font size="2" face="Courier">% <b>print foo bar_</b>
(DOWN-ARROW) % <b>echo Apple II_</b> </font></p>
<p><font face="Times"><b>Command, Filename and Variable
completion</b></font></p>
<p><font face="Times">These command-line editor keys can
be used to complete filenames, commands and variables.</font></p>
<p><font size="2" face="Courier">CTRL-D</font><font
face="Times"> </font><font size="2" face="Courier"><b>list-choices</b></font></p>
<p><font face="Times">Lists commands and pathnames that
match the current word.</font></p>
<p><font size="2" face="Courier">Before</font></p>
<p><font size="2" face="Courier">% <b>print foo_ bar</b>
(CTRL-D)</font></p>
<p><font size="2" face="Courier">After</font></p>
<p><font size="2" face="Courier">foo.c fool foo.m</font></p>
<p><font size="2" face="Courier">% <b>print foo_ bar</b></font></p>
<p><font size="2" face="Courier">TAB</font><font
face="Times"> </font><font size="2" face="Courier"><b>complete-word</b></font></p>
<p><font face="Times">Command, pathname and variable
completion. If the cursor is positioned on the first word
of the command-line, command pathname is performed, else
pathname or variable completion is performed. The word is
expanded to the closest matching command, pathname or
variable. Characters are appended up to the point that
they would cause more than one. If a complete pathname
results for pathname completion, <b>gsh</b> appends a
&quot;</font><font size="2" face="Courier">/</font><font
face="Times">&quot; if the pathname is a directory;
otherwise, it appends a space.</font></p>
<p><font size="2" face="Courier">Before After</font></p>
<p><font size="2" face="Courier">% <b>ca_</b> (TAB) % <b>cat_</b></font></p>
<p><font size="2" face="Courier">% <b>mo_ foo.c</b> (TAB)
% <b>more_ foo.c</b></font></p>
<p><font size="2" face="Courier">% <b>more fo_</b> (TAB)
% <b>more foo_</b> </font></p>
<p><font size="2" face="Courier">% <b>echo $TERMC_</b>
(TAB) % <b>echo $TERMCAP_</b></font></p>
<p><font face="Times">Note that if there is more than one
match for the partial command, <b>gsh</b> will sound a
beep on the speaker. You can use the CTRL-D (</font><font
size="2" face="Courier">list-choices</font><font
face="Times">) command to see the list of possible
matches, and should either finish entering the command
manually or type enough additional characters to
guarantee a unique match.</font></p>
<p><font face="Times">If the </font><font size="2"
face="Courier">$FIGNORE </font><font face="Times">variable
is set, <b>gsh</b> ignores filenames (when doing
completion) that end with any of the suffixes in </font><font
size="2" face="Courier">$FIGNORE</font><font face="Times">.
See Chapter 5 <b>Description of Pre-defined Shell
Variables</b> for more information regarding the </font><font
size="2" face="Courier">$FIGNORE </font><font
face="Times">variable.</font></p>
</li>
</dir>
<p><font face="Times"><b>Other ways of entering commands</b></font></p>
<p><font face="Times"><u>Terminal Input</u></font></p>
<p><font face="Times">An example involving the connection of a
terminal; will be dealt with in Chapter 3 <b>Redirecting Input
and Output</b> but it is necessary to mention here that when
using .i.<b>gsh</b> over a terminal, some keystrokes must be
slightly modified. This is because there are no terminals that
can transmit the OA key. Instead, a two-key sequence must be used
which replaces OA with ESC. For example, instead of pressing OA-E
to toggle insert mode, you can type ESC-E over a terminal to do
the same thing.</font></p>
<p><font face="Times">If you will be using terminals seriously
then you should install the Remote Access package.</font></p>
<dir>
<li><font face="Times"><u>Script File</u></font></li>
</dir>
<p><font face="Times">While you would normally type commands on
the command-line, you can also store a series of often used
commands in a file. A file containing such a series of commands
is called a script. A script is normally created by using a text
editor.</font></p>
<p><font face="Times">By typing the name of the script file, the
shell will execute it, line by line, as if you had typed each
command separately. The <i>gshrc</i> file presented in Chapter 1 <b>Customizing
the Shell Environment</b> is an example of a script file.</font></p>
</body>
</html>

1579
doc/refs.aug96/gsh.3.html Normal file

File diff suppressed because it is too large Load Diff

996
doc/refs.aug96/gsh.4.html Normal file
View File

@ -0,0 +1,996 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 2.0">
<title>GNO Shell User's Manual</title>
</head>
<body bgcolor="#FFFFFF">
<p><font size="6" face="Times">Chapter 4</font></p>
<p><font size="6" face="Times">Built-in Commands</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"><b>Built-ins vs EXE Commands</b></font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">The term &quot;built-ins&quot; is used to
describe commands that exist within the shell itself. These
utilities run faster than external commands because the code is
already loaded into memory. Files of type &quot;EXE&quot;, on the
other hand, must be loaded into memory by <b>gsh</b> and
executed. If an EXE command is executed again, it might, again,
have to be loaded into memory. This results in longer execution
time for the program.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"><b>gsh</b> has a number of built-in
commands which allow you to work with the shell, the GNO kernel,
and the shell environment.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">The following section describes the
commands that are built-in to <b>gsh</b>. The &quot;[..]&quot;
character sequence represents an optional argument to a command.
The term &quot;</font><font size="2" face="Courier">SIGNAL</font><font
face="Times">&quot; is used to represent one of the signal names
or numbers listed in Appendix D <b>Signals</b>. The sequence
&quot;...&quot; means the command accepts multiple arguments of
the same type as the argument before the &quot;...&quot;
sequence. The sequence &quot;{..}&quot; is used to represent a
set, which is a list of possible arguments to choose from.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"><b>Shell Commands</b></font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">Shell built-ins provide support for
external shell commands (i.e. EXE files and shell scripts) and
provide some commands used in every-day work.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>bindkey [-l] function string</b></font></p>
<p><font face="Times">Bindkey is used to customize the shell's
command-line editor. Any key on the keyboard can be mapped to any
of a number of functions. The various functions are as follows:</font></p>
<dir>
<li><font size="2" face="Courier">backward-char</font><font
face="Times"> move cursor left</font><p><font size="2"
face="Courier">backward-delete-char</font><font
face="Times"> delete character to left</font></p>
<p><font size="2" face="Courier">backward-word</font><font
face="Times"> move cursor left one word</font></p>
<p><font size="2" face="Courier">beginning-of-line</font><font
face="Times"> move cursor to beginning of line</font></p>
<p><font size="2" face="Courier">clear-screen</font><font
face="Times"> clear screen and redraw prompt</font></p>
<p><font size="2" face="Courier">complete-word</font><font
face="Times"> perform filename completion</font></p>
<p><font size="2" face="Courier">delete-char</font><font
face="Times"> delete character under cursor</font></p>
<p><font size="2" face="Courier">down-history</font><font
face="Times"> replace command line with next history</font></p>
<p><font size="2" face="Courier">end-of-line</font><font
face="Times"> move cursor to end of line</font></p>
<p><font size="2" face="Courier">forward-char</font><font
face="Times"> move cursor to the right</font></p>
<p><font size="2" face="Courier">forward-word</font><font
face="Times"> move cursor one word to the right</font></p>
<p><font size="2" face="Courier">kill-end-of-line</font><font
face="Times"> delete line from cursor to end of line</font></p>
<p><font size="2" face="Courier">kill-whole-line</font><font
face="Times"> delete the entire command line</font></p>
<p><font size="2" face="Courier">list-choices</font><font
face="Times"> list file completion matches</font></p>
<p><font size="2" face="Courier">newline</font><font
face="Times"> finished editing, accept command line</font></p>
<p><font size="2" face="Courier">raw-char</font><font
face="Times"> character as-is</font></p>
<p><font size="2" face="Courier">redisplay</font><font
face="Times"> redisplay the command line</font></p>
<p><font size="2" face="Courier">toggle-cursor</font><font
face="Times"> toggle between insert and overwrite cursor</font></p>
<p><font size="2" face="Courier">undefined-char</font><font
face="Times"> this key does nothing</font></p>
<p><font size="2" face="Courier">up-history</font><font
face="Times"> replace command line with previous history</font></p>
</li>
</dir>
<p><font face="Times">Keys are bound to functions, not
vice-versa. This means that you can have any number of commands
refer to the same function. For example, the default bindings
have </font><font size="2" face="Courier">CTRL-A</font><font
face="Times"> and </font><font size="2" face="Courier">OA-&lt;</font><font
face="Times"> both bound to </font><font size="2" face="Courier">beginning-of-line</font><font
face="Times">.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">Most of the function names are
self-explanatory, and are explained in Chapter 2, but a few
deserve discussion. </font><font size="2" face="Courier">raw-char</font><font
face="Times"> is what you should bind a key that should be
inserted into the command-line as-is. The regular printable ASCII
set, such as the letters a-z, numbers, etc. are bound to </font><font
size="2" face="Courier">raw-char</font><font face="Times">.
Control characters should not be bound to </font><font size="2"
face="Courier">raw-char</font><font face="Times"> because the
command-line editor will become confused (most control characters
act as special GNO/ME console feature codes - see the <i>GNO
Kernel Reference Manual</i>, Chapter 4 <b>TextTools Replacement</b>).</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">Any keystroke that should be rejected by
the editor should be bound to </font><font size="2"
face="Courier">undefined-char</font><font face="Times">. By
default, this includes control characters and OA-sequences that
are not assigned to any editing features. Any key bound to </font><font
size="2" face="Courier">undefined-char</font><font face="Times">
will cause <b>gsh</b> to beep and ignore the key.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">You can actually bind key sequences, not
just keystrokes, to functions. There is no limit other than
memory to how many characters are in a command sequence.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">Because terminals do not have the OA (Open
Apple) key, ; is actually mapped by the kernel to a two-character
sequence consisting of </font><font size="2" face="Courier">ESC</font><font
face="Times"> and the key. For example, OA-Y would actually
produce </font><font size="2" face="Courier">ESC-Y</font><font
face="Times">.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">Control characters in the </font><font
size="2" face="Courier"><b>string</b></font><font face="Times">
are represented in ^X format; e.g. CTRL-A is represented by ^A.
ESC (and OA) is represented by ^[.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">Examples:</font></p>
<p><font size="2" face="Courier">% <b>bindkey kill-end-of-line ^K</b></font><font
face="Times"> map CTRL-K to kill-end-of-line (like Emacs)</font></p>
<p><font size="2" face="Courier">% <b>bindkey clear-screen ^[^X</b></font><font
face="Times"> map OA-CLEAR to clear-screen</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>commands</b></font></p>
<p><font face="Times">Displays a list of all built-in shell
commands.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>cd [pathname]</b></font></p>
<p><font size="2" face="Courier"><b>chdir [pathname]</b></font></p>
<p><font face="Times">Changes the current working directory to
pathname. If </font><font size="2" face="Courier">pathname</font><font
face="Times"> is not given, the default </font><font size="2"
face="Courier">HOME</font><font face="Times"> directory (i.e. the
value of the </font><font size="2" face="Courier">HOME</font><font
face="Times"> environment variable) is used. This makes it easy
to move back to your home directory. Under <b>gsh</b>, unlike
most U</font><font size="2" face="Times">NIX</font><font
face="Times"> shells, the cd is not necessary, except to change
automatically to your HOME directory. If a command is not a
built-in or EXE file, but is instead the name of a directory, a
cd is implied and performed on the directory unless the </font><font
size="2" face="Courier">NODIREXEC</font><font face="Times">
variable has been set.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier">[1] gno&gt; <b>cd utilities</b></font></p>
<p><font size="2" face="Courier">[2] gno/utilities&gt; <b>echo
$HOME</b></font></p>
<p><font size="2" face="Courier">/dev/gno</font></p>
<p><font size="2" face="Courier">[3] gno/utilities&gt; <b>cd</b></font></p>
<p><font size="2" face="Courier">[4] gno&gt; <b>utilities</b></font></p>
<p><font size="2" face="Courier">[5] gno/utilities&gt; <b>../utilities</b></font></p>
<p><font size="2" face="Courier">[6] gno/utilities&gt; <b>~</b></font></p>
<p><font size="2" face="Courier">[7] gno&gt; _</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>clear</b></font></p>
<p><font face="Times">This command takes no arguments. When
invoked, the screen will be cleared.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>df</b></font></p>
<p><font face="Times">This command takes no arguments. When
invoked, a listing of free blocks for every block device is
given. In addition, the device name, type, file system, and
capacity is listed.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier">[1] gno&gt; <b>df</b></font></p>
<p><font size="2" face="Courier"></font>&nbsp;</p>
<p><font size="2" face="Courier">.d## Volume Device Free Total
Capacity System</font></p>
<p><font size="2" face="Courier">---- ----------------
---------------- ------- ------- -------- -----------</font></p>
<p><font size="2" face="Courier">.d1 :Procyon .CVTECH.S6.A 3166
41037 92% ProDOS</font></p>
<p><font size="2" face="Courier">.d2 Apple 3.5 Drive
.APPLEDISK3.5A </font></p>
<p><font size="2" face="Courier">.d3 Apple 3.5 Drive
.APPLEDISK3.5B </font></p>
<p><font size="2" face="Courier">.d4 Console Driver .CONSOLE </font></p>
<p><font size="2" face="Courier">.d5 :Day .CVTECH.S6.B 15881
65535 75% ProDOS</font></p>
<p><font size="2" face="Courier">.d6 :Night .CVTECH.S6.C 39274
65535 40% HFS</font></p>
<p><font size="2" face="Courier">.d7 :Left .CVTECH.S6.D 5365
51776 89% ProDOS</font></p>
<p><font size="2" face="Courier">.d8 :Right .CVTECH.S6.E 27477
65535 58% ProDOS</font></p>
<p><font size="2" face="Courier">.d9 :Software .CVTECH.S6.F 3289
40960 91% ProDOS</font></p>
<p><font size="2" face="Courier">.d10 :RAM5 .RAMDISK 505 512 1%
ProDOS</font></p>
<p><font size="2" face="Courier">.d11 :Conner 40 .AFP1 7368 80604
90% AppleShare</font></p>
<p><font size="2" face="Courier">.d12 AppleTalk fsd .AFP2 </font></p>
<p><font size="2" face="Courier">....</font></p>
<p><font size="2" face="Courier">.d24 AppleTalk fsd .AFP14 </font></p>
<p><font size="2" face="Courier">.d25 AppleTalk RPM .RPM </font></p>
<p><font size="2" face="Courier">.d26 AppleTalk Main .APPLETALK </font></p>
<p><font size="2" face="Courier">.d27 Serial Modem .SERIAL2 </font></p>
<p><font size="2" face="Courier">.d28 :system .APPLESCSI.HD01.
27561 50773 45% ProDOS</font></p>
<p><font size="2" face="Courier">.d29 :dev .APPLESCSI.HD01. 43431
65108 33% ProDOS</font></p>
<p><font size="2" face="Courier">.d30 :usr .APPLESCSI.HD01. 44376
48725 8% ProDOS</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier">Volume</font><font face="Times">
- Name of device.</font></p>
<p><font size="2" face="Courier">Device</font><font face="Times">
- GS/OS device name.</font></p>
<p><font size="2" face="Courier">Free</font><font face="Times"> -
Total number of free blocks on device.</font></p>
<p><font size="2" face="Courier">Total</font><font face="Times">
- Total number of blocks on device.</font></p>
<p><font size="2" face="Courier">Capacity</font><font
face="Times"> - Percentage of used blocks on device.</font></p>
<p><font size="2" face="Courier">System</font><font face="Times">
- Format of file system. With System Software 6.0.1, the file
systems available are ProDOS, HFS, Pascal, MS-DOS, and DOS 3.3,
and some CD-ROM formats.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>echo [-n] arg [arg ...]</b></font></p>
<p><font face="Times">Expands the &quot;</font><font size="2"
face="Courier">arg</font><font face="Times">&quot; expression(s)
and outputs them to the screen. If the &quot;</font><font
size="2" face="Courier">-n</font><font face="Times">&quot; switch
is specified, a </font><font size="2" face="Courier">NEWLINE</font><font
face="Times"> character is not output after the last &quot;</font><font
size="2" face="Courier">arg</font><font face="Times">&quot;
expression. Special escape sequences may also be included in the
arguments, similar to those used in C strings:</font></p>
<p><font size="2" face="Courier">\b</font><font face="Times"> -
Backspace</font></p>
<p><font size="2" face="Courier">\f</font><font face="Times"> -
Clears screen (form feed)</font></p>
<p><font size="2" face="Courier">\n</font><font face="Times"> -
Newline</font></p>
<p><font size="2" face="Courier">\r</font><font face="Times"> -
Return</font></p>
<p><font size="2" face="Courier">\t</font><font face="Times"> -
Tab</font></p>
<p><font size="2" face="Courier">\nnn</font><font face="Times"> -
A decimal ASCII code. nnn represents the ASCII code.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier">[1] gno&gt; <b>echo Hello World</b></font></p>
<p><font size="2" face="Courier">Hello World</font></p>
<p><font size="2" face="Courier">[2] gno&gt; <b>echo -n Hello
World</b></font></p>
<p><font size="2" face="Courier">Hello World[3] gno&gt; <b>echo
$PATH $HOME 'come get to $gnome'</b></font></p>
<p><font size="2" face="Courier">/dev/gno/utilities
/dev/orca/utilities /dev/gno come get to $gnome</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>exit</b></font></p>
<p><font face="Times">Exits the shell or terminates a shell
script.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>history</b></font></p>
<p><font face="Times">This command displays the list of previous
command-line entries. The number of entries saved is set in the </font><font
size="2" face="Courier">$HISTORY</font><font face="Times">
variable.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"><b>pushd</b></font></p>
<p><font face="Times"><b>popd [+n]</b></font></p>
<p><font face="Times"><b>dirs</b></font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">These three commands maintain the shell's <i>directory
stack.</i> Let's say you're working in a directory
/src/myprogs/class/program.1/, and you want to temporarily go to
another directory. Instead of having to 'cd' there and 'cd' back
to a very long directory name (i.e., lots of typing), you can use
the pushd command, like so:</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier">gsh&gt; <b>pushd /etc</b> </font><font
size="2" face="Times">{ start in /src/myprogs/class/program.1/ }</font></p>
<p><font size="2" face="Courier">...</font></p>
<p><font size="2" face="Courier">gsh&gt; <b>popd</b> </font><font
size="2" face="Times">{ back in /src/myprogs/class/program.1/ }</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">The </font><font size="2" face="Courier">pushd</font><font
face="Times"> command stores the current directory on a stack,
and then changes the current directory to the argument. When you
want to go back to the original directory, type popd. The shell
will pull the last directory off the stack and 'cd' to that
directory.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">The </font><font size="2" face="Courier">popd
</font><font face="Times">command when given an argument of +n
will remove the n'th directory from the stack. It does not change
to that directory.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">The </font><font size="2" face="Courier">dirs
</font><font face="Times">command displays the current directory
stack.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>pwd</b></font></p>
<p><font face="Times">Displays the current working directory.
This is useful if you have not configured the </font><font
size="2" face="Courier">$PROMPT</font><font face="Times"> string
to output your current working directory.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier">[1]&gt; <b>cd $HOME</b></font></p>
<p><font size="2" face="Courier">[2]&gt; <b>pwd</b></font></p>
<p><font size="2" face="Courier">/user/root</font></p>
<p><font size="2" face="Courier">[3]&gt; <b>cd utilities</b></font></p>
<p><font size="2" face="Courier">[4]&gt; <b>pwd</b></font></p>
<p><font size="2" face="Courier">/user/root/utilities</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>source</b></font></p>
<p><font face="Times">When a script is executed, <b>gsh</b>
creates a new process to run the script. As a result, scripts
cannot change the shell's prefixes and certain other parameters.
Instead of executing the script directly, you may use the </font><font
size="2" face="Courier">source</font><font face="Times"> command
which does not create a new process to execute the script. Thus,
the </font><font size="2" face="Courier">source</font><font
face="Times"> command is effectively exactly like typing all the
commands in the script from the keyboard.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>tset</b></font></p>
<p><font face="Times">The </font><font size="2" face="Courier">tset</font><font
face="Times"> command causes the shell to reread the </font><font
size="2" face="Courier">/etc/termcap</font><font face="Times">
file and reset its output system to use the terminal type
specified in the $TERM variable. On startup, after reading the </font><font
size="2" face="Courier">gshrc</font><font face="Times"> file, <b>gsh</b>
automatically does a </font><font size="2" face="Courier">tset</font><font
face="Times">. <b>gsh</b> also automatically does a tset whenever
the </font><font size="2" face="Courier">$TERM</font><font
face="Times"> variable is changed with the </font><font size="2"
face="Courier">set</font><font face="Times"> command. You would
use tset manually if, for example, a utility changed the value of
</font><font size="2" face="Courier">$TERM</font><font
face="Times">.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>which command_name
[command_name ...]</b></font></p>
<p><font face="Times">Let's say that you are working on a new
version of the venerable shell utility </font><font size="2"
face="Courier">ls</font><font face="Times">. Since a search of
the hash table is done before searching the current directory,
you might accidentally be using the wrong version of the command.
You make changes and run the new program, but your changes don't
seem to appear! Use the </font><font size="2" face="Courier">which</font><font
face="Times"> command to check your sanity. Which also comes in
handy in locating duplicate program names in the </font><font
size="2" face="Courier">$PATH</font><font face="Times">
directories (for example, an </font><font size="2" face="Courier">ls</font><font
face="Times"> in both </font><font size="2" face="Courier">/bin</font><font
face="Times"> and </font><font size="2" face="Courier">/usr/bin</font><font
face="Times">.)</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">The way to access a utility in the current
directory which has the same name as a program in the </font><font
size="2" face="Courier">$PATH</font><font face="Times"> is to
prefix the command name with '</font><font size="2"
face="Courier">.</font><font face="Times">', as in &quot;</font><font
size="2" face="Courier">./ls</font><font face="Times">&quot;.
Also, see </font><font size="2" face="Courier">unhash</font><font
face="Times">.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"><b></b></font>&nbsp;</p>
<p><font face="Times"><b>Kernel Commands</b></font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"><b>gsh</b> provides a set of commands to
control the GNO kernel. These commands mainly deal with job
control. See Chapter 3 <b>Job Control</b>.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>bg { %job | pid }</b></font></p>
<p><font face="Times">Starts the specified job, if stopped, and
places it in the background.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>fg { %job | pid }</b></font></p>
<p><font face="Times">Starts the specified job, if stopped, and
brings it into the foreground.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>jobs [-l]</b></font></p>
<p><font face="Times">Displays a list of the shell's jobs. If the
&quot;</font><font size="2" face="Courier">-l</font><font
face="Times">&quot; switch is specified, the process id is
included in the job list.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier">[1] gno&gt; <b>cmpl foo.c
keep=foo &amp;</b></font></p>
<p><font size="2" face="Courier">[1] + Running cmpl foo.c
keep=foo &amp;</font></p>
<p><font size="2" face="Courier">[2] gno&gt; <b>echo hello</b></font></p>
<p><font size="2" face="Courier">hello</font></p>
<p><font size="2" face="Courier">[3] gno&gt; <b>jobs</b></font></p>
<p><font size="2" face="Courier">[1] + Running cmpl foo.c
keep=foo &amp;</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>kill {[-SIGNAL] %job | pid |
[-l]</b></font></p>
<p><font face="Times">The kill command will send the signal </font><font
size="2" face="Courier">SIGNAL</font><font face="Times"> to the
process number pid. The ps command documented below describes how
to list all process ID's currently executing.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier">SIGNAL</font><font face="Times">
can be either a numeric value or string representing the signal
to be sent to the process. All signals are documented in Appendix
D <b>Signals</b>, with numeric and string value listed.
Alternatively, specifying the </font><font size="2"
face="Courier">-l</font><font face="Times"> option will list all
the signals and their names.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">If the process number isn't known, but the
job number is, replace the pid with a '%' followed by the job
number.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b></b></font>&nbsp;</p>
<p><font size="2" face="Courier"><b></b></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>ps</b></font></p>
<p><font face="Times">This command takes no arguments. When
invoked, a list of all currently running processes is displayed.</font></p>
<p><font size="2" face="Courier"></font>&nbsp;</p>
<p><font size="2" face="Courier">[2] 9:52pm root&gt; <b>ls -lR
:hard:gno &gt; /ram5/dev &amp;</b></font></p>
<p><font size="2" face="Courier">[1] + 35 Running ls -lR
:hard:gno &amp;</font></p>
<p><font size="2" face="Courier">[3] 9:53pm root&gt; <b>ps</b></font></p>
<p><font size="2" face="Courier">ID STATE TT MMID UID TIME
COMMAND</font></p>
<p><font size="2" face="Courier">1 ready co 1002 0000 0:26
NullProcess</font></p>
<p><font size="2" face="Courier">2 ready co 1005 0000 0:02 gsh</font></p>
<p><font size="2" face="Courier">35 ready co 100A 0000 0:01 ls
-lR :hard:gno</font></p>
<p><font size="2" face="Courier">36 running co 1007 0000 0:00 ps</font></p>
<p><font size="2" face="Courier">[4] 9:53pm root&gt; </font></p>
<p><font size="2" face="Courier">[1] + Done ls -lR :hard:gno</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier">ID</font><font face="Times"> - A
unique process ID assigned to a command by GNO. Use this number
to reference any process.</font></p>
<p><font size="2" face="Courier">STATE</font><font face="Times">
- Current state of the process. Each process can be in any of the
following states: </font></p>
<p><font face="Times"></font>&nbsp;</p>
<dir>
<li><font face="Courier">RUNNING</font><font face="Times">
the process is currently in execution.</font><p><font
face="Courier">READY</font><font face="Times"> the
process is not currently executing, but is ready to be
executed as soon as it is assigned a time slice.</font></p>
<p><font face="Courier">BLOCKED</font><font face="Times">
the process is waiting for a slow I/O operation to
complete (for instance, a read from a TTY).</font></p>
<p><font face="Courier">NEW</font><font face="Times"> the
process has been created, but has not executed yet.</font></p>
<p><font face="Courier">SUSPENDED</font><font
face="Times"> the process was stopped with
SIGSTOP,SIGTSTP,SIGTTIN, or SIGTTOU.</font></p>
<p><font face="Courier">WAITING</font><font face="Times">
the process is waiting on a semaphore 'signal' operation.
Programs waiting for data from a pipe have this state.</font></p>
<p><font face="Courier">WAITSIGCH</font><font
face="Times"> the process is waiting to receive a SIGCHLD
signal.</font></p>
<p><font face="Courier">PAUSED</font><font face="Times">
the process is waiting for any signal.</font></p>
</li>
</dir>
<p><font size="2" face="Courier">TTY</font><font face="Times"> -
Terminal connected to process.</font></p>
<p><font face="Times">MMID - Memory Manager ID assigned to
process.</font></p>
<p><font face="Times">UID - ID of the user who initiated the
process.</font></p>
<p><font size="2" face="Courier">TIME</font><font face="Times"> -
How much CPU time this process has used. This is not the elapsed
time of the process.</font></p>
<p><font size="2" face="Courier">COMMAND</font><font face="Times">
- Command-line string used to invoke process.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>setdebug { val | {+|-}flag }</b></font></p>
<p><font face="Times">Turns GNO kernel debugging code on or off.
The value passed consists of a bit field, where each bit
specifies a different type of debugging code to activate. An
alternate method is to provide a list of debug flags, either
preceded by a '+' or a '-'. Those preceded by a '+' are
activated, and those preceeded with a '-' are deactivated. All
debugging is deactivated by passing a value of 0. Running
setdebug wtth no arguments returns a list of the debugging flags.
Legal flags include:</font></p>
<p><font size="2" face="Courier">gsostrace</font><font
face="Times"> - Trace GS/OS calls</font></p>
<p><font size="2" face="Courier">gsosblocks</font><font
face="Times"> - Trace GS/OS parameter blocks</font></p>
<p><font size="2" face="Courier">gsoserrors</font><font
face="Times"> - Trace GS/OS errors</font></p>
<p><font size="2" face="Courier">pathtrace</font><font
face="Times"> - Trace GS/OS pathnames</font></p>
<p><font size="2" face="Courier">sigtrace</font><font
face="Times"> - Trace signals</font></p>
<p><font size="2" face="Courier">systrace</font><font
face="Times"> - Trace system calls</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>stop { %job | pid }</b></font></p>
<p><font face="Times">Stops the execution of all processes in a
specified job.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"><b>Environment Commands</b></font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">The last set of commands, environment
commands, modify the <b>gsh</b> environment. Many of these
commands have been used in other parts of this manual and,
therefore, should not be new.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>alias [name] [value]</b></font></p>
<p><font face="Times">Creates an alias for a string. When this
alias is referenced as a command, </font><font size="2"
face="Courier">value</font><font face="Times"> will be expanded
into the command line. For commands that require many arguments
or have several steps, you could set up an alias to save typing.
You can also use aliases to create new names for commands. To
obtain a list of all aliases, invoke </font><font size="2"
face="Courier">alias</font><font face="Times"> with no arguments.
To list the value of an alias, invoke </font><font size="2"
face="Courier">alias</font><font face="Times"> with name only.
Here are some alias examples:</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times"><u>Alias</u> <u>Command Name</u></font></p>
<p><font size="2" face="Courier">ll or list_long ls -l</font></p>
<p><font size="2" face="Courier">backup_sys cp -r /system
/BackupDrive&amp;</font></p>
<p><font size="2" face="Courier">backup_home cp -r $HOME
/BackupDrive&amp;</font></p>
<p><font size="2" face="Courier">print echo</font></p>
<p><font size="2" face="Courier">catalog ls -l</font></p>
<p><font size="2" face="Courier">delete rm</font></p>
<p><font size="2" face="Courier">copy cp</font></p>
<p><font size="2" face="Courier">type more</font></p>
<p><font size="2" face="Courier">rename mv</font></p>
<p><font size="2" face="Courier"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>export </b>;<b>[variable ...]</b></font></p>
<p><font face="Times">When a shell environment variable is marked
as exportable, any process that is created from within the
current process (most likely <b>gsh</b>), will be passed copies
of the exported variables. See </font><font size="2"
face="Courier"><b>setenv</b></font><font face="Times"> and
Chapter 5 <b>Scope of shell variables.</b></font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>hash</b></font></p>
<p><font face="Times">Displays a list of all commands currently
in the shell's hash table; i.e., a list of commands in the
various $PATH directories.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>prefix [prefixnum
[prefixname]]</b></font></p>
<p><font face="Times">GNO maintains a list of 32 'prefixes' for
each process. Prefixes allow the user to reference a directory
with a number. While <b>gsh</b> provides this ability with
environment variables, the prefix command exists to support the
ORCA compilers and other utilities that are dependent on certain
GS/OS prefixes. Appendix B contains a list of these prefixes and
their &quot;default&quot; meanings, as documented in the &quot;<i>Apple
IIGS GS/OS Reference</i>&quot;, Volume 1.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">If </font><font size="2" face="Courier">prefixname</font><font
face="Times"> is not given, the value of </font><font size="2"
face="Courier">prefixnum</font><font face="Times"> is displayed.
If neither argument is given, a list of currently assigned
prefixes is displayed.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>rehash</b></font></p>
<p><font face="Times">To decrease the time spent searching for a
command, <b>gsh</b> builds a table of all commands which were
found in the pathnames set in the </font><font size="2"
face="Courier">$PATH</font><font face="Times"> variable. When a
command is invoked, only this list is searched. When the </font><font
size="2" face="Courier">$PATH</font><font face="Times"> variable
is changed, <b>gsh</b> must rebuild this list. The </font><font
size="2" face="Courier"><b>rehash</b></font><font face="Times">
command tells <b>gsh</b> to rebuild the list.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">While the old list is still active, if </font><font
size="2" face="Courier">$PATH</font><font face="Times"> is
changed and one of the previous search paths is no longer online,
<b>gsh</b> will try and execute the command from the offline
device, resulting in a command failure.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">To make this a one-step process, the </font><font
size="2" face="Courier">change.path</font><font face="Times">
shell script listed in Chapter 5, <b>Accessing shell variables</b>
can be used.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>set [var] [value] [{var
value} ...]</b></font></p>
<p><font size="2" face="Courier"><b>set var=value [var=value ...]</b></font></p>
<p><font size="2" face="Courier"><b>setenv [var value]... </b></font></p>
<p><font face="Times">Use these command to create or modify
environment variables. If </font><font size="2" face="Courier">set</font><font
face="Times"> is invoked with no arguments, a list of the current
environment variables is displayed. If only </font><font size="2"
face="Courier">var</font><font face="Times"> is given as an
argument, the value of </font><font size="2" face="Courier">var</font><font
face="Times"> is displayed. To set or reset a variable, use both
the </font><font size="2" face="Courier">var</font><font
face="Times"> and </font><font size="2" face="Courier">value</font><font
face="Times"> arguments. There are two ways to set a variable,
either by &quot;</font><font size="2" face="Courier">var value</font><font
face="Times">&quot; or &quot;</font><font size="2" face="Courier">var=value</font><font
face="Times">&quot;. To set multiple variables at once, simply
list them all on the command line as shown above.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier">setenv</font><font face="Times">
works just like </font><font size="2" face="Courier">set</font><font
face="Times">, but automatically exports the variable(s) or lists
only exported variables.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font face="Times">When using </font><font size="2"
face="Courier">set</font><font face="Times"> or </font><font
size="2" face="Courier">setenv</font><font face="Times"> to view
a list of variables, exported variables appear in ALL CAPS.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>unalias name [name ...]</b></font></p>
<p><font face="Times">To remove an alias from the alias list, use
this command. To remove multiple aliases with one command,
specify all the aliases on the command line.</font></p>
<p><font face="Times"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>unhash</b></font></p>
<p><font face="Times">To disable the internal hash table created
with the </font><font size="2" face="Courier">rehash</font><font
face="Times"> command, use this command. This is useful if you
wish to use only utilities in the current working directory
(during testing, for example).</font></p>
<p><font size="2" face="Courier"></font>&nbsp;</p>
<p><font size="2" face="Courier"><b>unset </b>;<b>var [var...]</b></font></p>
<p><font face="Times">To remove a variable from the environment,
use </font><font size="2" face="Courier">unset</font><font
face="Times">. </font><font size="2" face="Courier">unset</font><font
face="Times"> accepts multiple names if more than one variable is
to be deleted. Future attempts to access the variable </font><font
size="2" face="Courier">var</font><font face="Times"> will result
in an error or a NULL string, depending on the circumstances.</font></p>
<p><font size="2" face="Courier"></font>&nbsp;</p>
<p><font size="2" face="Courier">[8] 9:57pm root&gt; <b>set</b></font></p>
<p><font size="2" face="Courier">PAGER = less</font></p>
<p><font size="2" face="Courier">PATH = :hard:gno:bin
:right:gno:usr:bin</font></p>
<p><font size="2" face="Courier">user1 = foo</font></p>
<p><font size="2" face="Courier">USRMAN = /usr/man</font></p>
<p><font size="2" face="Courier">HISTORY = 30</font></p>
<p><font size="2" face="Courier">status = 227</font></p>
<p><font size="2" face="Courier">fignore = .a .root .sym</font></p>
<p><font size="2" face="Courier">TERM = gnocon</font></p>
<p><font size="2" face="Courier">LESS = -e</font></p>
<p><font size="2" face="Courier">PROMPT = [%h] %S%t%s %C&gt; </font></p>
<p><font size="2" face="Courier">HOME = :hard:gno:user:root</font></p>
<p><font size="2" face="Courier">user = user1</font></p>
<p><font size="2" face="Courier">nonewline = 1</font></p>
<p><font size="2" face="Courier">[9] 9:57pm root&gt; <b>unset
user1</b></font></p>
<p><font size="2" face="Courier">[10] 9:57pm root&gt; <b>unset
user</b></font></p>
<p><font size="2" face="Courier">[11] 9:57pm root&gt; <b>set</b></font></p>
<p><font size="2" face="Courier">PAGER = less</font></p>
<p><font size="2" face="Courier">PATH = :hard:gno:bin
:right:gno:usr:bin</font></p>
<p><font size="2" face="Courier">USRMAN = /usr/man</font></p>
<p><font size="2" face="Courier">HISTORY = 30</font></p>
<p><font size="2" face="Courier">status = 0</font></p>
<p><font size="2" face="Courier">fignore = .a .root .sym</font></p>
<p><font size="2" face="Courier">TERM = gnocon</font></p>
<p><font size="2" face="Courier">LESS = -e</font></p>
<p><font size="2" face="Courier">PROMPT = [%h] %S%t%s %C&gt; </font></p>
<p><font size="2" face="Courier">HOME = :hard:gno:user:root</font></p>
<p><font size="2" face="Courier">nonewline = 1</font></p>
<p>&nbsp;</p>
</body>
</html>

1849
doc/refs.aug96/gsh.5.html Normal file

File diff suppressed because it is too large Load Diff

844
doc/refs.aug96/install.html Normal file
View File

@ -0,0 +1,844 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 2.0">
<title>GNO/ME Version 2</title>
</head>
<body bgcolor="#FFFFFF">
<p><font size="7" face="Times">GNO/ME Version 2.0</font></p>
<p><font size="5" face="Times">By Jawaid Bazyar and Tim Meekins</font></p>
<hr>
<p><font face="Times">The GNO Multitasking Environment is
Copyright 1991-1996 by Procyon Enterprises Incorporated</font></p>
<p><font face="Times">Documentation, second edition, August 1996.</font></p>
<p><font face="Times">The ORCA/C run-time libraries are Copyright
1987-1993 Byte Works, Inc. and distributed with permission.</font></p>
<p><font face="Times">This product includes software developed by
the University of California, Berkeley and its contributors.</font></p>
<p><font face="Times">GNO/ME 2.0 also includes several utilities
and libraries produced by outside authors and in the public
domain. This software is included solely as a convenience to
users of GNO/ME, and is not considered part of GNO/ME for
copyright purposes.</font></p>
<p><font face="Times">GNO and GNO/ME are trademarks of Procyon
Enterprises Incorporated.</font></p>
<p><font face="Times">Apple IIGS, APW, Finder, GS/OS, ProDOS,
Macintosh, and HFS are registered trademarks of Apple Computer,
Inc.</font></p>
<p><font face="Times">AppleWorks GS is a trademark of Claris
Corp.</font></p>
<p><font face="Times">UNIX is a registered trademark of AT&amp;T
Bell Laboratories.</font></p>
<p><font face="Times"><b>Important Notice</b>: This is a fully
copyrighted work and as such is protected under the copyright
laws of the United States of America. According to these laws,
consumers of copywritten material may make copies for their
personal use only. Duplication for any other purpose whatsoever
would constitute infringement of copyright laws and the offender
would be liable to civil damages of up to $50,000 in addition to
actual damages, plus criminal penalties of up to one year
imprisonment and/or a $10,000 fine.</font></p>
<p><font face="Times">Procyon Enterprises Inc. MAKES NO
WARRANTIES, EITHER EXPRESS OR IMPLIED, REGARDING THE ENCLOSED
COMPUTER SOFTWARE PACKAGE, ITS MERCHANTABILITY OR ITS FITNESS FOR
ANY PARTICULAR PURPOSE. THE EXCLUSION OF IMPLIED WARRANTIES IS
NOT PERMITTED IN SOME STATES. THE ABOVE EXCLUSION MAY NOT APPLY
TO YOU. THIS WARRANTY PROVIDES YOU WITH SPECIFIC LEGAL RIGHTS.
THERE MAY BE OTHER RIGHTS THAT YOU MAY HAVE WHICH VARY FROM STATE
TO STATE.</font></p>
<p><font face="Times">This product is sold for use on a <i>single
computer</i> at a <i>single location</i>. For information on
obtaining a site license for using multiple copies, contact the
publisher.</font></p>
<p><font face="Times">Procyon Enterprises, Inc.<br>
P.O. Box 641<br>
Englewood, CO 80151-0641 USA<br>
(303) 781-3273</font></p>
<hr>
<p><font size="6" face="Times">Credits</font></p>
<p><font face="Times">&quot;Always listen to experts. They'll
tell you what can't be done, and why. Then do it.&quot;<br>
Lazarus Long</font></p>
<p><font face="Times">The <b>GNO</b> <b>M</b>ultitasking <b>E</b>nvironment
for the Apple IIgs </font></p>
<p><font face="Times">Copyright 1991-1993, Procyon Enterprises
Inc. and Tim Meekins</font></p>
<p><font face="Times">Please direct all inquiries to:</font></p>
<dir>
<li><font face="Times"><b>Procyon, Inc.<br>
PO Box 641<br>
Englewood, CO 80151-0641 USA<br>
(303) 781-3273</b></font></li>
</dir>
<p><font face="Times">For on-line technical assistance, contact:</font></p>
<ul>
<li><font face="Times">America OnLine : </font><font
face="Courier">GNOJawaid, GNOTim2</font></li>
<li><font face="Times">GEnie : </font><font face="Courier">Procyon.Inc</font></li>
<li><font face="Times">Internet : </font><font face="Courier">bazyar@hypermall.com</font></li>
<li><font face="Times">Delphi : </font><font face="Courier">JAWAIDB</font></li>
</ul>
<p><font face="Times">Written by:</font></p>
<p><font face="Times"><b>Jawaid Bazyar</b> Kernel &amp;
Documentation<br>
<b>Tim Meekins</b> Shell &amp; Documentation<br>
<b>Albert Chin</b> Documentation<br>
<b>Andrew Roughan </b>Documentation<b><br>
Derek Taubert</b> Kernel support and utilities<br>
<b>Greg Thompson, Philip Vandry</b>, <b>James Brookes</b>, <b>Ian
Schmidt</b> Utilities</font></p>
<p><font face="Times">With many thanks to:</font></p>
<dir>
<li><font face="Times">Bill Gulstad, Rob Knauerhase, and
everyone on the GNOBETA Internet mailing list</font><p><font
face="Times">Dave Lyons, for tolerating my endless
questions since the beginning of time, for getting me
started in IIgs programming, and for calling GNO 'cool'.</font></p>
<p><font face="Times">Mike Westerfield, for your
technical assistance and all your work in making great
development tools for the IIgs.</font></p>
</li>
</dir>
<p><font face="Times">Special thanks to:</font></p>
<dir>
<li><font face="Times">Matt Deatherage, for egging me on to
complete the project; also, for your most helpful
technical support through DEVSUPPORT- you guys made this
thing possible!</font><p><font face="Times">Randy Hyde,
for telling me it couldn't be done.</font></p>
</li>
</dir>
<hr>
<p><font size="6" face="Times">Miscellaneous</font></p>
<p><font face="Times"><b>Reporting Bugs</b></font></p>
<p><font face="Times">In any large piece of computer software
such as the GNO/ME system, bugs are sure to turn up, no matter
how much testing is performed on the software before it goes out
the door. If you discover a bug in GNO/ME, we'd like to hear
about it. There are several things we require, however, to make
bug reports useful to us.</font></p>
<p><font face="Times">First of all, we need a complete
description of your computer system; how much RAM, what cards, in
what slots, what type of disk storage, etc. This information is
very important in tracking down hardware-dependent bugs. Also, we
need to know the version numbers of the software involved; the
GNO Kernel, the GNO Shell, and any utilities.</font></p>
<p><font face="Times">Second, we need a step-by-step description
of how to duplicate the bug. If this requires writing down
individual keystrokes, then we need it. Only in this way can we
decide whether the bug is hardware dependent or global.</font></p>
<p><font face="Times">You can send bug reports to any of the
electronic mail addresses listed on the 'Credits' page, or by
mailing a disk containing a description of the problem and the
necessary software and files to the Procyon address.</font></p>
<p><font face="Times"><b>User Projects</b></font></p>
<p><font face="Times">If you're working on a project which
utilizes GNO/ME in some way, we'd like to know about it. Just
contact us by mail, phone, or whatever is most convenient for
you, and tell us about your project. If possible, we'll
coordinate your efforts with those of other programmers. If we
really like your project and think it may be useful to others, we
may include it on the next GNO/ME distribution!</font></p>
<p><font face="Times"><b>Software Piracy</b></font></p>
<p><font face="Times">If you copied GNO/ME from someone and are
now reading this, take a moment to reflect on what you've done.
GNO/ME is a project that has consumed around three man-years of
effort, huge amounts of money, and a lot of grief on our part.
The kernel alone consists of over 18,000 lines of source code;
the shell and utilities make up another twenty to thirty thousand
lines.</font></p>
<p><font face="Times">Is it right that you're now benefiting from
our effort without any just compensation to the authors and
Procyon, Inc.? We are Apple II programmers born, bred and raised
in the spirit of the machine; we love to program it, and probably
always will. But if we cannot make enough money to make it
worthwhile to continue work on GNO/ME, then we won't; because by
worthwhile, we mean not only food on the table, but resources for
expansion; expansion of our IIgs product line and support to IIgs
owners being abandoned by the rest of the industry. In short,
support us and we'll support you.</font></p>
<p><font face="Times">GNO/ME is very inexpensive when you
consider what it allows you to do, and what it will allow you to
do when software development for GNO/ME starts full-swing. And
it's a small price to pay indeed for our loyalty to you, the IIgs
owner.</font></p>
<p><font face="Times">To all you GNO/ME purchasers out there:
thank you very much. We will continue to provide you with new
IIgs products until our hair and teeth fall out, and our fingers
are too frail to type the keys (and even then, with Easy Access,
we might crank out a program or two). We hope you will be
sufficiently impressed with the system to recommend it to others.</font></p>
<p><font face="Times">p.s. Remember - if someone comes up to you
on the street and offers you some IBM, <b>Just Say GNO!</b></font></p>
<hr>
<p><font size="6" face="Times">Preface</font></p>
<p><font face="Times">Computers are tools. The flexibility of a
tool determines how useful it is. Early computers were much like
the one this software was written for: the Apple IIgs. They could
only run one program at a time, and their usefulness was limited
to what the particular program the user was executing offered. In
the late 1960's, a team of researchers at AT&amp;T began
developing the UNIX operating system. The UNIX design was
partially based on the premise that most programs are I/O bound,
that is, most of the time the program executes is spent waiting
for user input or other I/O operations. While one program is
waiting for I/O, why not allow another program to execute? This
is what they did, and the result was one of the most successful
computer operating systems ever created.</font></p>
<p><font face="Times">The Apple IIgs, like the Macintosh it is
modelled after, provides very limited multitasking abilities in
the form of desk accessories (NDAs). The programs in the NDA menu
are available in whatever application you use as long as it
follows Apple's guidelines. However, there are many graphics
based programs that don't support NDAs, and in addition there is
a wealth of software that has been developed for the Byte Works'
ORCA environment. This environment is mainly text-based, and thus
makes access to NDAs impossible. As if that wasn't enough, it's
very difficult to write an NDA to allow the application to keep
running concurrently. So the benefits are lost, and we're back at
ground zero.</font></p>
<p><font face="Times">Enter the GNO Multitasking Environment.
What was once just dreamed about is now a reality. GNO/ME
provides an environment that is almost entirely compatible with
software developed for the ORCA environment. But GNO/ME also
provides a wealth of new abilities, lots of new ground for
developers and users alike.</font></p>
<p><font face="Times">Before we begin describing, we'd like to
respond to those who say such a multitasking system isn't
possible on the Apple IIgs. Obviously it is: you hold it in your
hands. Some say the Apple IIgs isn't powerful enough to make
multitasking useful. We point out that the Apple IIgs is much
more powerful than the first computers UNIX was designed to run
on; they only had 64K of real memory, and were 16 bit machines.
Some ask why you'd ever need to run more than one program at
once. These are the same people who asked why we'd ever need more
than 64K of memory, or more than 140K of storage on disks (end
soapbox).</font></p>
<hr>
<p><font size="6" face="Times">Introduction</font></p>
<p><font face="Times">The GNO Multitasking Environment provides
pre-emptive multitasking. Many programs can be executing at the
same time; each is called a 'process'. Each process is allowed to
run for a short period of time (1/20th of a second on average).
When its time runs out, the current process is set aside and
another one chosen to run next. This cycle continues until there
are no more processes left (i.e. when you exit GNO/ME). Starting
up processes to run 'in the background' is a simple matter of
adding a few characters to the shell commands.</font></p>
<p><font face="Times">GNO/ME provides a shell that takes full
advantage of the multitasking ability provided. The most
important feature of the shell is job control (starting,
terminating, and suspending processes). But the shell also
provides power never before seen on the Apple IIgs. The ability
to choose files by 'wildcard' has been around for a while, but
the GNO Shell takes this to a new level with 'regular
expressions', a very powerful yet simple programming language.
Other benefits of the GNO shell are too numerous to mention. (see
the <i>GNO Shell User's Manual </i>for details).</font></p>
<p><font face="Times">In addition to being compatible with the
ORCA system, GNO/ME is a very powerful programming environment.
Available to the programmer are all the calls needed to control
processes, support Inter-Process Communication, and other tools
needed in a multitasking environment. </font></p>
<p><font face="Times">GNO/ME also boasts the first completely
consistent method for accessing serial and console I/O. The IIgs
TextTools have been incredibly enhanced to provide a truly
all-encompassing interface for serial, console, and IPC
applications. Imagine being able to attach terminals to your GS,
and have a useful shell in each one. Multiuser BBSs, remote
dial-ups, UUCP or SLIP that doesn't take over your computer- the
applications are endless!</font></p>
<p><font face="Times">With all this talk of shell utilities, have
desktop users (users of programs like AppleWorks GS) been left
behind? Absolutely not. GNO/ME doesn't allow more than one
desktop program to run concurrently, but it DOES let you run a
desktop program with as many text applications as you like. In
other words, no functionality is lost from the IIgs by using
GNO/ME.</font></p>
<p><font face="Times">Finally, the GNO Multitasking Environment
comes with a large number of free utilities that bring some of
the power of a UNIX system to the Apple IIgs. Also, a number of
programming libraries are included that make it easy to port
programs from UNIX or MS-DOS systems to the Apple IIgs.</font></p>
<hr>
<p><font size="6" face="Times">The GNO/ME package</font></p>
<p><font face="Times">Included in your GNO/ME Version 2.0 package
are:</font></p>
<ul>
<li><font face="Times">this GNO/ME overview </font></li>
<li><font face="Times">the GNO Shell User's Manual</font></li>
<li><font face="Times">the GNO Kernel Reference Manual</font></li>
<li><font face="Times">a selection of utility and library
documentation</font></li>
<li><font face="Times">a reading list containing a wide
selection of books for both the user and the programmer</font></li>
<li><font face="Times">three disks containing the GNO Kernel,
GNO Shell, and loads of utilities</font></li>
</ul>
<hr>
<p><font size="6" face="Times">Hardware Requirements</font></p>
<p><font face="Times">GNO/ME will work on any Apple IIgs with at
least 2 MegaBytes of memory and a hard drive.</font></p>
<p><font face="Times">You should have at least 5 MegaBytes of
hard disk space free.</font></p>
<p><font face="Times">We recommend 4 MegaBytes of Memory and an
accellerator card, especially if you will be using GNO with many
background processes. A modem and access to an on-line service
will greatly speed access to technical assistance and new
utilities as they are made available.</font></p>
<hr>
<p><font size="6" face="Times">Installation</font></p>
<p><font face="Times">GNO/ME is a very large system. Most of the
system is stored on the three disks in a compressed format. For
this reason we recommend that you read this section carefully and
use the included automated installation program to save yourself
the major headache of arranging everything. You'll need a hard
drive partition with at least 5 Megabytes free to install GNO/ME.
The entire installation process should take no longer than 10
minutes. </font></p>
<p><font face="Times">If you are upgrading from GNO 1.0 to GNO
2.0, we recommend that you install GNO 2.0 on a new area of your
hard drive. This is because GNO 2.0 provides new versions of
almost all the utilities and other software provided with GNO
1.0. You can then move the parts of your old system that aren't a
part of the standard GNO 2.0 distribution over to the new
installation. </font></p>
<p><font face="Times">The installer program is able to the copy
the GNO libraries for use with the ORCA languages and tools. If
you want to use your ORCA languages and tools, you should answer
the appropriate questions during the install process. ORCA
installation is covered in more detail below.</font></p>
<p><font face="Times">Step 1:</font></p>
<dir>
<li><font face="Times">Copy the contents of /GNO.Disk1 to the
partition where you want to install GNO/ME. The easiest
way to do this is to run the IIGS Finder&trade; program,
insert the </font><font size="2" face="Courier">/GNO.Disk1</font><font
face="Times"> disk, and drag the </font><font size="2"
face="Courier">/GNO.Disk1</font><font face="Times"> onto
the icon of the drive you want to install on. The Finder
will tell you that the disks are of a different size, and
ask you if you wish to place the contents of </font><font
size="2" face="Courier">/GNO.Disk1</font><font
face="Times"> in a folder on the hard drive partition.
Answer &quot;Yes&quot;, and the Finder will copy the
data.</font></li>
</dir>
<p><font face="Times">Step 2:</font></p>
<dir>
<li><font face="Times">Open the newly created </font><font
size="2" face="Courier">GNO.Disk1</font><font
face="Times"> folder on the partition and execute 'Kern'
by double-clicking on the </font><font size="2"
face="Courier">Kern</font><font face="Times"> icon. </font><font
size="2" face="Times">GNO.Disk1</font><font face="Times">
contains a minimal GNO system which you have just started
up. You'll see some copyright messages, and after a few
seconds the desktop will appear.</font></li>
</dir>
<p><font face="Times">Step 3:</font></p>
<dir>
<li><font face="Times">Install will ask you questions before
the installation process begins. Questions asked by
Install are boldfaced in the following discussion. If
you're uncertain of how to answer, click on the 'Info'
button to get more information on the question. This
information is reproduced here for ease of reference.</font><p><font
face="Times"><b>Do you have existing Byteworks (ORCA)
language products?</b></font></p>
<p><font face="Times">If you use Byteworks language
products such as ORCA/C, ORCA/M, ORCA/Pascal, etc. and
wish to use them from GNO/ME then answer 'Yes' to this
question. Otherwise, answer 'No'.</font></p>
<p><font face="Times">Clicking on the 'Info' button will
display the following text:</font></p>
<p><font size="2" face="Geneva,Arial">If you currently
use products such as ORCA/C, ORCA/Pascal, ORCA/M, etc.,
and wish to use them from GNO/ME then you should answer
'Yes' to this dialog.</font></p>
<p><font size="2" face="Geneva,Arial">Install will then
ask you to locate the file &quot;ORCA.SYS16&quot; (the
ORCA Shell). Usually, it will be in a directory called
&quot;ORCA&quot; on one of your hard drive partitions. On
our system, it is :software:orca. The location of this
file determines where Install puts the GNO-specific
ORCA/C header files and libraries (in the ORCA LIBRARIES
directory). If you have renamed ORCA.SYS16 to something
else, select that instead. </font></p>
<p><font size="2" face="Geneva,Arial">Install uses this
information to correctly set the ORCA prefixes and add
the EXECUTABLES directory to the $PATH variable in your
gshrc file. See the GNO Shell User's Manual, Appendix B,
for more information on the ORCA prefixes.</font></p>
<p><font face="Times"><b>Do you want to install the
modified ORCA/C 2.0 ORCALIB library?</b></font></p>
<p><font face="Times">If you have ORCA/C 2.0 installed
and you answered 'Yes' to the previous question, then you
should answer 'Yes' now. If you have ORCA/C 1.3
installed, or you do not have any ORCA languages or
tools, then you should answer 'No'.</font></p>
<p><font face="Times">Clicking 'Info' will display the
following text:</font></p>
<p><font size="2" face="Geneva,Arial">GNO/ME 2.0 comes
with a modified version of the ORCA/C ORCALIB standard
library. This library adds specific support for some of
GNO's special files (pipes, terminals, etc) transparently
and corrects other problems the standard ORCALIB has with
GNO.</font></p>
<p><font size="2" face="Geneva,Arial">This special
ORCALIB is only for use with ORCA/C 2.0. It will NOT work
with previous versions of ORCA/C.</font></p>
<p><font size="2" face="Geneva,Arial">Note that all of
GNO's other libraries (libgno, libbsd, libc) work fine
with ORCA/C 1.3.</font></p>
<p><font face="Times"><b>Do you want to install the
Multi-User package?</b></font></p>
<p><font face="Times">If you wish to have the Multi User
package installed, answer 'Yes'. It is recommended that
new users do not install this package until they are
familiar with the system. This package is not fully
discussed in the GNO/ME manuals and may introduce many
unfamiliar concepts.</font></p>
<p><font face="Times">Clicking 'Info' will display the
following text:</font></p>
<p><font size="2" face="Geneva,Arial">The 'Multi-User'
package consists of a number of cooperating programs,
including init(8) and login(8). MU provides for
password-protected access to the GNO Shell via the
console or serial ports (modems and dedicated terminals).
It also handles multiple user accounts, and a certain
level of protection between users. </font></p>
<p><font size="2" face="Geneva,Arial">If you will be
using a terminal with GNO, or want to be able to dial
into GNO with a modem, you should install MU.</font></p>
<p><font size="2" face="Geneva,Arial">You may wish to
hold off setting up the Multi-User package until you
learn your way around GNO a little better, as it's simple
to set up MU later.</font></p>
</li>
</dir>
<p><font face="Times">Step 4:</font></p>
<dir>
<li><font face="Times">The Installer will now proceed to
arrange the GNO Multitasking Environment on your hard
drive. Initially, the contents of /GNO.Disk1 will be
moved into the proper places on the volume you have
chosen. When asked by the Installer, you should place
/GNO.Disk2 and /GNO.Disk3 into the disk drive. The
contents of these disks will be extracted and
decompressed into their proper places.</font><p><font
face="Times">If the installer cannot finish it's tasks
for some reason, it will abort to the shell. At this
point you should study the error messages to determine
the cause of the failure, </font></p>
</li>
</dir>
<p><font face="Times">Step 5:</font></p>
<dir>
<li><font face="Times">When the Installer finishes, you will
be returned to the GNO prompt. At this time you should
type 'exit' to return to Finder and delete the </font><font
size="2" face="Courier">GNO.Disk1</font><font
face="Times"> directory, as it is no longer needed (GNO
is completely installed in a subdirectory </font><font
face="Courier">'</font><font size="2" face="Courier">GNO</font><font
face="Courier">'</font><font face="Times"> on the same
partition </font><font size="2" face="Courier">GNO.Disk1</font><font
face="Times"> is on.</font></li>
</dir>
<p><font face="Times">That's all!</font></p>
<p><font face="Times"><b>What has been installed?</b></font></p>
<p><font face="Times">If you examine the directory that you chose
for GNO/ME, you will find that the Installer has created several
directories. Here is a brief rundown of thier contents:</font></p>
<p>&nbsp;</p>
<dir>
<li><font face="Times">:gno:bin: This directory contains the
executable shell utilities included with the GNO/ME
package.</font></li>
<li><font face="Times">gno:dev: This directory contains
device drivers. The GNO/ME package includes serial
drivers for the II</font><font size="2" face="Times">GS</font><font
face="Times">' built-in modem and printer ports.</font></li>
<li><font face="Times">:gno:etc: Various system configuration
files</font></li>
<li><font face="Times">:gno:initrc This a startup file for
kern and must remain in this directory.</font></li>
<li><font face="Times">:gno:kern This is the GNO kernel.
Launch this to start GNO/ME.</font></li>
<li><font face="Times">:gno:lib: This directory is provided
for,,,, It is currently empty.</font></li>
<li><font face="Times">:gno:tmp: This directory is provided
for,,,, It is currently empty.</font></li>
<li><font face="Times">:gno:user: This directory is created
if you installed the Multi-User package. It contains a
user directories for users of the system. Currently there
is only one: 'root'. </font></li>
<li><font face="Times">:gno:usr: This directory contains UNIX
System Resources (USR).</font></li>
<li><font face="Times">:gno:usr:bin: Miscellaneous utilities</font></li>
<li><font face="Times">:gno:usr:man: This directory contains
the manual pages for the 'man' utility. There are eight
categories of information as defined by UNIX standards.
These eight categories are presented in either formatted
(man) or unformatted (cat) entries.</font></li>
<li><font face="Times">:gno:usr:games: The classic &quot;Hunt
the Wumpus&quot; game, and perhaps others.</font></li>
<li><font face="Times">:gno:usr:sbin: System administration
utilities.</font></li>
</dir>
<hr>
<p><font size="6" face="Times">Desk Accessories</font></p>
<p><font face="Times">The following is a description of the desk
accessories that are shipped with GNO/ME.</font></p>
<p><font face="Times"><b>GSI NDA</b></font></p>
<p><font face="Times">The Graphical Shell Interface New Desk
Accessory allows you to access the shell from a window inside a
desktop application. Selecting 'GSI' from the Apple menu opens a
window and brings up a shell in it. You can use the shell in this
window just as you would in text mode.</font></p>
<p><font face="Times">At this time, GSI doesn't support any
terminal emulations; i.e., it's a 'dumb' interface. As a result,
full screen programs like 'less' and 'vi' will not work properly
in GSI.</font></p>
<p><font face="Times"><b>Suspend NDA</b></font></p>
<p><font face="Times">The Suspend New Desk Accessory allows you
to temporarily stop a desktop program and return to the text
shell. To return to the desktop program, simply type '<b>fg</b>'.</font></p>
<p><font face="Times">You may put desktop programs in the
background ('<b>bg</b>') at your own risk. This is not guaranteed
to work for all programs, and putting a desktop program in the
background will not put the Apple IIgs in text mode.</font></p>
<p><font face="Times">Also, do not run another desktop program
when one is currently suspended. The GNO kernel tries to cleanly
terminate the second program, but may not always be able to
accomplish this.</font></p>
<p><font face="Times"><b>GNO Snooper CDA</b></font></p>
<p><font face="Times">The GNO Snooper CDA is a utility that is
very helpful in debugging software, and reporting system crashes.
Snooper has access to information inside the kernel that is not
generally available to processes.</font></p>
<p><font face="Times">When you enter the control panel and choose
&quot;GNO Snooper&quot; a process list is displayed, which is
very similar to the 'ps' shell command, and a menu is presented
with the following options:</font></p>
<p><font face="Times">D)etails</font></p>
<p><font face="Times">Get detailed information on a process.
Snooper asks you for the process ID number of the process you
want to investigate. Snooper then dumps the state of the 65816
registers and shows various other information about the process.</font></p>
<p><font face="Times">K)ill</font></p>
<p><font face="Times">This option sends a SIGKILL (signal number
9) to a process. Just type in the process ID of the process you
want to kill.</font></p>
<p><font face="Times">P)rocess Group Dump</font></p>
<p><font face="Times">Dumps the system process group tables,
which is very useful for debugging code which manipulates process
groups. The first table, 'pgrp', is the process group reference
count table. This table lists how many processes (and TTYs)
belong to that process group. pgrp ID's start at 2, so the first
pgrp listed is 2.</font></p>
<p><font face="Times">The second listing is the ttyStruct table.
This table shows which pgrp each TTY belongs to. The TTYs start
with .null (0), then move on to .ttyb, .ttya, .ttyco, etc.</font></p>
<p><font face="Times">F)ile Table Dump</font></p>
<p><font face="Times">Lists all open files that GNO knows about.
The information is presented in tuples. The first element is the
real GS/OS refNum or device driver ID. The second is the type of
file (GSOS, ttyXX, or PIPE). The third is how many references to
that file are open. This information is global, so if two
processes have .NULL opened, the refcount for .tty00 will be 2.</font></p>
<hr>
<p><font size="6" face="Times">Reading List</font></p>
<p><font face="Times"><b>Recommended Reading for Users</b></font></p>
<p><font face="Times">Title: Learning Unix<br>
Author: James Gardner<br>
Publisher: Sams<br>
Edition: 1991<br>
ISBN: 0-672-30001-X</font></p>
<p><font face="Times">Comment: With disks containing MSDOS
simulation of Unix (MKS Tools). A good tutorial / reference book
for those without constant access to Unix.</font></p>
<p><font face="Times">Title: The Unix Operating System<br>
Author: Kaare Christian<br>
Publisher: Wiley<br>
Edition: 2nd ed. 1988<br>
ISBN: 0-471-84781-X</font></p>
<p><font face="Times">Comment: A classic overview of Unix
commands. Good in coverage.</font></p>
<p><font face="Times">Title: Peter Norton's Guide to Unix<br>
Authors: Peter Norton and Harley Hahn<br>
Publisher: Bantam Computer<br>
Edition: 1991<br>
ISBN: 0-553-35260-1</font></p>
<p><font face="Times">Comment: Good coverage. A good introduction
for beginners (especially those accustomed to DOS).</font></p>
<p><font face="Times">Title: Unix in a Nutshell<br>
Authors: Daniel Gilly and O'Reilly staff<br>
Publisher: O'Reilly<br>
Edition: 2nd ed. 1992 (System V and Solaris 2)<br>
ISBN: 1-56592-001-5</font></p>
<p><font face="Times">Comment: **** Highly Recommended **** An
excellent desktop reference to almost all Unix commands &quot;a
complete reference containing all commands and options, plus
generous descriptions and examples that put the commands in
context.&quot; Also, an edition for 4.3. BSD.</font></p>
<p><font face="Times">Title: Life with Unix - A Guide for
Everyone<br>
Authors: Don Libes and Sandy Ressler<br>
Publisher: Prentice Hall<br>
Edition: 1990<br>
ISBN: 0-13-536657-7</font></p>
<p><font face="Times">Comment: **** Highly Recommended **** An
everything-you-want-to-know-about-Unix book. It includes info you
might not find elsewhere. &quot;This book is the
&quot;other&quot; book about Unix, a study in reading between the
lines - which is very much what learning UNIX is like.&quot;</font></p>
<p><font face="Times">Title: Unix for the Impatient<br>
Authors: Paul Abrahams and Bruce Larson<br>
Publisher: Addison Wesley<br>
Edition: 1992<br>
ISBN: 0-201-55703-7</font></p>
<p><font face="Times">Comment: **** Highly Recommended **** A
new, comprehensive, in-depth reference to Unix. &quot;a handbook
you can use both as a manual to learn UNIX and as a ready
reference for fast answers to specific UNIX questions.&quot;</font></p>
<p><font face="Times">Title: Learning the vi Editor<br>
Author: Linda Lamb<br>
Publisher: O'Reilly<br>
Edition: 1990<br>
ISBN: 0-937175-67-6</font></p>
<p><font face="Times">Comment: A very good guide to vi and ex
commands. With a quick reference card.</font></p>
<p><font face="Times">Titles: vi Tutor and vi Reference<br>
Authors: Michael Pierce and Robert Ware (Tut), Maarten Litmaati
(Ref)<br>
Edition: 1.3 (Tut), 8 (Ref)</font></p>
<p><font face="Times">Comment: These and other good vi stuff are
obtainable by anonymous ftp from cs.uwp.edu (in pub/vi) ...</font></p>
<p><font face="Times"><b>Recommended Reading for Programmers</b></font></p>
<p><font face="Times">Title: The Design and Implementation of the
4.3 BSD Unix Operating System<br>
Authors: Samuel Leffler et al<br>
Publisher: Addison-Wesley<br>
Edition: 1990<br>
ISBN: 0-201-06196-1</font></p>
<p><font face="Times">Comment: An authoritative description of
the design of BSD Unix. &quot;It covers the internal structure of
the 4.3BSD system and the concepts, data structures, and
algorithms used in implementing the system facilities.&quot;</font></p>
<p><font face="Times">Title: The Unix Programming Environment<br>
Authors: Brian Kernighan and Rob Pike<br>
Publisher: Prentice-Hall<br>
Edition: 1984<br>
ISBN: 0-13-937681-X</font></p>
<p><font face="Times">Comment: A true classic on Unix
programming.</font></p>
<p><font face="Times">Title: Advanced Programming in The Unix
Environment<br>
Author: Richard Stevens<br>
Publisher: Addison-Wesley<br>
Edition: 1992<br>
ISBN: 0-201-56317-7</font></p>
<p><font face="Times">Comment: **** Highly Recommended **** A
going-to-be classic on how programs work under Unix. The source
codes and errata list are obtainable by anonymous ftp from
ftp.uu.net (in /published/books).</font></p>
<p><font face="Times">Title: Advanced Unix Programming<br>
Author: Marc Rochkind<br>
Publisher: Prentice Hall<br>
Edition: 1985<br>
ISBN: 0-13-011818-4</font></p>
<p><font face="Times">Comment: A superb book covering all system
calls in detail.</font></p>
<p><font face="Times">Title: Using C on the Unix System<br>
Author: David Curry<br>
Publisher: O'Reilly<br>
Edition: 1990<br>
ISBN: 0-937175-23-4</font></p>
<p><font face="Times">Comment: This book is directed to
(would-be) system programmers.</font></p>
<p><font face="Times"><b>Required Reading for Programmers</b></font></p>
<p><font face="Times">Title: The C Programming Language<br>
Authors: Brian Kernighan and Dennis Ritchie <br>
Publisher: Prentice Hall<br>
Edition: 2nd ed. 1988<br>
ISBN: 0-13-110362-8</font></p>
<p><font face="Times">Comment: The answers to the exercises can
be found in C Answer Book written by Tondo and Gimpel and
published by Prentice Hall (ISBN: 0-13-109653-2).</font></p>
<p><font face="Times">All the books listed below are available
from:</font></p>
<p><font face="Times">Resource Central<br>
PO Box 11250<br>
Overland Park Kansas 66207<br>
(913) 469 6502</font></p>
<p><font face="Times">Title: Apple IIgs ToolBox Reference.<br>
Volumes 1, 2 &amp; 3<br>
Author: Apple Computer<br>
Publisher: Addison-Wesley</font></p>
<p><font face="Times">Title: Programmers Reference for System 6.0<br>
Author: Mike Westerfield<br>
Publisher: Byteworks, Inc</font></p>
<p><font face="Times">Title: Apple IIgs Firmware Reference<br>
Author: Apple Computer<br>
Publisher: Addison-Wesley</font></p>
<p><font face="Times">Title: GS/OS Reference<br>
Author: Apple Computer<br>
Publisher: Addison-Wesley</font></p>
</body>
</html>

2798
doc/refs.aug96/kern.html Normal file

File diff suppressed because it is too large Load Diff

2396
doc/refs.aug96/man1.html Normal file

File diff suppressed because it is too large Load Diff

1398
doc/refs.aug96/man2.html Normal file

File diff suppressed because it is too large Load Diff

1871
doc/refs.aug96/man3.html Normal file

File diff suppressed because it is too large Load Diff

1967
doc/refs.aug96/man4.html Normal file

File diff suppressed because it is too large Load Diff