deer manual
(deer project, 2006-2008, Antonio Maschio @ )
Last updated: December 05, 2008
Index
-----
1. Introduction
2. The Dartmouth Operating System emulator
2.1 deer options
2.2 First run
2.3 Customizable variables
2.4 System commands
2.5 Tips on manipulating files
3. Conclusions
4. References
1. INTRODUCTION
------------
deer is an acronym for Dartmouth Environment Elementary Renderer; though
there are already emulators of the Dartmouth OS (on which the original BASIC
language environment ran), more complete and capable of running BASIC and ALGOL
(see [1]), I wanted to build my own, and I wanted to do it in two languages:
- deer, the "operating system", in bash, due do its extreme ability to deal
with strings (while lacking floating numbers);
- dib, the BASIC interpreter, in C, for its speed and its math functions.
This was particularly interesting because I had to dive into a more complete
bash and C theory before coding, and I was very pleased by that.
I spent one year (or so) in building deer, partly because of my need to study,
and partly because I have a family that occupies my head and time, and leaves
me nights bits for coding. Finally the OS was ready, but my BASIC was far to be
completed. It's not that easy to program an algebraic language (my experience
was limited to stack languages, which are very easy to build). You can read
the rest about this story in the file 'dib manual.txt'.
2. THE DARTMOUTH OPERATING SYSTEM EMULATOR
---------------------------------------
deer is not a complete replica of the original Sixties OS. It's rather a
subsystem, but as such it can create, edit, run, delete BASIC programs, and
has some other features, along with minor differences compared to the
original OS.
I discarded all the connection commands (network, kermit, and so on) and all
the documentation files (which couldn't be applied to my work); besides,
documentation takes its time to be written and read, so I limited it to a HELP
screen. There are no games, no web browsers, no mail readers. Nonetheless, you
will be able to build your own BASIC programs.
To tell the truth, I'm conscious that this emulator goes beyond the real
capabilities of the original OS; in all, deer is probably a subset of an
Eighties OS version, rather than a Sixties on. In any case, I set it to make
it work, to be rather useful; all the commands contained into [2] have been
implemented, along with a bunch of others to ease the programmer's task.
2.1 deer OPTIONS
------------
Usage: deer
Options are:
-h --help Give this help and exit
-l --lower-allowed Disable conversion of input characters to upper case
-t n Set auto shutoff to n seconds (n=0 disable shut-off)
-v --version Show version and exit
-x --extended-features Enable extended BASIC features (pass -x to dib)
Option -x is passed 'as-is' to dib (if you use another interpreter, don't set
it in deer because it may have a different usage).
By default, auto shutoff is set to three minutes (180 seconds).
2.2 FIRST RUN
---------
The first time you run deer, it will create a hidden directory into your $HOME,
named '.deer/' .
After you log in, a subdirectory will be created with the first 6 characters of
the user number turned to upper (e.g., if you type myra8697 at the prompt, the
directory .deer/MYRA86 will be created); all subsequent logins with MYRA86 will
use the same directory, and different users will have different directories. So
you can have many projects, each under a particular user. Please note that the
original DTSS accepted a login username made of six numbers or one letter and
five any characters; deer is less restrictive, in this regard, and will accept
any series of characters, cutting them to six and turning them to capitals.
If you want, you can copy the content of folder 'USER/' (contained into the
package) to you user home: you will have a complete set of examples and a
working environment ready to go; type
$ cp -r USER/* ~/.deer/MYRA86).
from within the deer unpacked installation directory.
When you run deer, yor will see the screen cleared, and a few data will be
displayed on the upper left corner:
DARTMOUTH COLLEGE TIME SHARING, T1
04 OCT. 2008, AT 13:36, 011 USERS.
(You will see different time values and different logged users.) T1 means
Tonibin 1, and is the machine simulated by deer (the original was D1, but
I believe I had to change it).
At this point only three commands are available:
- HELLO to start a sequence to establish a connection to the system;
- HELP to print a couple of help screens with all the available deer commands,
all aimed to help you in writing, maintaining, saving, retrieving, printing
and running your files and programs.
- BYE (also GOODBYE) to log off (there's an automatic log off if you don't
type nothing for 3 minutes - see options below for changing this behavior);
2.3 CUSTOMIZABLE VARIABLES
----------------------
Before running deer, you can change some default variables values contained in
the first lines of the script. They are:
deered
------
It contains the deer editor name, enclosed into double quotes. Default editor
is vim, but you can use the one you prefer (emacs, vile, nano etc.), even a
graphical one, if you want to.
deerless
--------
It contains the deer viewer name, enclosed into double quotes.The viewer is
used to examine a file without changing its contents, so you may use a pure
viewer, here, or you can even set it to an editor.
INTERVAL
--------
It contains the number of seconds for the autologoff procedure. Any value
greater than 0 sets the option for that number of seconds (default is 180,
which is about three minutes). If you put here 0, the timing feature is
disabled.
noTiming
--------
It contains the flag for disabling ($TRUE) or enabling ($FALSE) the timing
feature. A value of 0 for INTERVAL sets automatically noTiming to TRUE, but
you can disable the feature without changing INTERVAL (for a temporary usage,
for instance). Default is $FALSE (Timing enabled).
DELAY
-----
It contains the delay factor for an empty cycle to be performed to slow down
the listing of a BUILD or a BASIC file. On my emac G4 1.42 GHz, a value of
1000 corresponds to about 2 lines per second (a speed comparable to the one
of the old dear 8086). Default is (aha!) 1000.
basic
-----
(Important) It contains the name of the executable of a basic compiler or
interpreter of your choice. Of course, by default, deer comes with dib.
EF
--
For dib: it contains all the options you want to pass to it, and in particular
the Extended Features option "-x"; by default it's void, so that deer will
execute only standard BASIC (version III) programs.
For other compilers/interpreters: you can put any meaningful option you want
to pass to your BASIC.
Important: don't change anything else, unless you know what you're doing.
2.4 SYSTEM COMMANDS
---------------
Notes "before"
--------------
1) in the following:
- a PROGRAM file is a BASIC listing (with each line starting with a number);
this kind of file may be executed.
- a BUILD file is a text file in free format; this kind of file cannot be
executed; it's useful for writing documentation files.
- CURRENT is the current file (PROGRAM or BUILD).
- ARG is the (sometimes optional) argument of a command.
Commands belong to three classes:
- Class 1 commands require a value, so if you don't give an argument,
you will be requested to give one;
- Class 2 commands act on CURRENT file if no argument is given, or on
the file whose name match the argument;
- Class 3 commands act on CURRENT file only, or are general purpose
commands requiring no arguments
The class is exposed into square brackets before the command name.
2) any command (except HELP, HELLO and LIST--) is recognized by means of the
first three letters (so CAT and CATALYTIC will all act as CATALOG). But
beware: you have to type HELLO, HELP and LIST-- in full, though, to make
them work.
3) the string WHAT? is printed if you type a command which is not recognized.
4) the same condensed information (or so) can be obtained with HELP.
5) some information about I/O transfers and CRU (Computer Resources Usage)
have been grabbed by iostat. The iostat program I use comes from Mac OS X,
the system on which I work, thus it's a BSD version. Linux users and other
UNIX implementations may have a different (sometimes very different) version
of the program, capable of giving very diverse data, but not compatible
with the settings in deer. In any case don't worry: These data wont'
interfere with BASIC.
***
Here's the command list (text enclosed into {} is typed by you).
[3]ACCOUNT
Give some accounting information
Note: original data were CRU, SECS, I/O, CORE, written on one line.
I don't know exactly what's the meaning of these data, but I cannot
replicate them in bash on a UNIX machine. So I changed them to reflect
more practical needs for the deer user, and they will be reported in
two lines, the first with headers, the second with values.
Data will be:
- CRU (here Computer Resources Usage): it uses iostat for retrieving
idle percentage of the system, subtracting it from 100 and yielding
the global system resources usage.
- I/O (not knowing the original meaning of that): it expresses,
through iostat and in terms of MB/s, the amount of exchanged memory.
- LOGTIME: it expresses the total account session time.
- RUNS: it expresses the total of RUNs (assuming this has some meaning
for moderns systems)
SECS and CORE, two original data of the ACCOUNT command, have been
'forgotten', since I have no idea what they were and how to parallel
them with those on my UNIX machine.
[1]APPEND
Add file {name} to the end of CURRENT file. Usage:
{APPEND}
APPENDING FILE NAME--{name}
or
{APPEND name}
Note: If you APPEND a BUILD file to another, their content won't
overlap. If you APPEND a PROGRAM to another, the appended file will
overwrite all lines whose number appears in both files. If you APPEND
a PROGRAM to a BUILD file it will appear with its line numbers as a
listing queued to the BUILD file. You cannot APPEND a BUILD file to a
PROGRAM. A warning appears when you try to do so.
[3]BUILD
Allow entering free text on CURRENT file. To terminate input press
RETURN three consecutive times.
CAUTION!
If you type BUILD with an existing PROGRAM as CURRENT, its state will
turn to BUILD, and a subsequent REPLACE will overwrite the PROGRAM
file. So, before BUILD, be sure to open or create a BUILD file.
[3]BYE/GOODBYE
Terminate current session. If CURRENT has not been save to disk yet,
the system will invite you to use SAVE or REPLACE; this advice will
appear once only; if you save the file or not, when you retype BYE
you'll be allowed to exit anyhow.
[3]CATALOG
Give information about user saved files in the CURRENT catalog
[1]CREATE
Create new catalog under CURRENT with name {name}. Usage:
{CREATE}
CATALOG NAME--{name}
or
{CREATE name}
[3]EDIT
Edit CURRENT saved file with user editor (see variable 'deered')
[1]ENTER
Changes CURRENT catalog to catalog {name}. Usage:
{ENTER}
CATALOG NAME--{name}
or
{ENTER name}
[3]HELLO
Start a sequence of questions for logging in. Here's an example of
output:
{HELLO}
0.38 CRU
USER NUMBER--{MYRA86}
SYSTEM--{BASIC}
NEW OR OLD--{OLD}
OLD PROBLEM NAME--{LINEAR}
READY.
[3]HELP/EXPLAIN
Print a help screen (in future versions, EXPLAIN may expanded to show
help for each command)
[3]HOME
Shortcut for enter *MYCAT; re-enters main catalog
[3]IGNORE
Retrieve saved file, losing all changes made
[3]LENGTH
Give length of CURRENT file
[3]LIST
List CURRENT file (BUILD or PROGRAM)
[3]LIST--XXXXX
List CURRENT BASIC file starting from line XXXXX. Mind the two dashes
following LIST.
[1]NEW
Create a new empty file and set it CURRENT with name {name} and
state PROGRAM (you can safely type BUILD after NEW, because the file
is empty). Usage:
{NEW}
NEW PROBLEM NAME--{name}
or
{NEW name}
[1]OLD
Retrieve an existing file with name {name} and set it CURRENT; the
state will be PROGRAM if the first character of the file is a number,
otherwise it will be a BUILD file. Usage:
{OLD}
OLD PROBLEM NAME--{name}
or
{OLD name}
[2]PUNCH
Send CURRENT file to printer. Usage:
{PUNCH}
Send file {name} (which may be different from CURRENT) to printer.
Usage:
{PUNCH name}
[1]RENAME
Change name of CURRENT file to {name}, retaining the state (PROGRAM
or BUILD). Usage:
{RENAME}
RENAME PROBLEM NAME--{name}
or
{RENAME name}
[3]REPLACE
Save CURRENT file replacing previous contents.
[3]RUN
Execute CURRENT PROGRAM file; an implicit SAVE/REPLACE is done, so
you don't need to type SAVE or REPLACE, before running a program; this
is because sources to run must be taken from the disk file, and they
must be the more recent too! The same was applied in the 1964 OS (see
the October 1964 BASIC manual for examples in which a program typing
is directly followed bu a RUN).
[3]SAVE
Store CURRENT file to disk if file does not exist (if file exists,
a warning will appear; in this case use REPLACE).
[3]SCRATCH
Empty CURRENT file, retaining the state (PROGRAM or BUILD).
[3]SORT
Sort contents of CURRENT BUILD file; a PROGRAM is always sorted
automatically in memory and during saving.
[1]SYSTEM
Change system language (fake) to {name} (actually, only BASIC is
accepted). Usage:
{SYSTEM}
SYSTEM NAME--{name}
or
{SYSTEM name}
[2]UNSAVE
Delete CURRENT file from disk. Usage:
{UNSAVE}
Delete a file or a catalog from disk. Usage:
{UNSAVE name}
CAUTION!
1) Don't use this command thoughtlessly! Remember that, if you type
UNSAVE, deer **won't** ask you for a file name; rather, IT WILL DELETE
CURRENT FILE! If you want to delete a different file, you **have** to
type its name after UNSAVE!
2) If used with catalogs (directories), UNSAVE will delete the catalog
***AND ALL ITS FILES***! Nothing is asked, nothing is written.
In all, use it with GREAT CARE!
[3]USERS
Give number of currently logged users (fake)
It's a random number to give the impression the system is not used
by you only!
[2]VIEW
Show CURRENT file without editing it (using user viewer). Usage:
{VIEW}
Show file {name} with user viewer. Usage:
{VIEW name}
[3]WHAT
Give information about current session in the form:
CURRENT FILE MOTION
COMPUTER T1 (deer system)
USER NUMBER 242424
SYSTEM BASIC
SEARCH PATH :242424
***
Notes "after"
-------------
1) After any command performance, successful or not, a READY will be printed
so that you may type next command
2) Please, pay attention to the UNSAVE command: if you happen to type UNSAVE
inadvertently, you can recover the file (because it's still in memory)
typing SAVE immediately after it. File will be rewritten.
3) The command EXTEND (which is off-topic) has some meaning only for dib, the
BASIC interpreter. It may be used to activate dib's extended features from
console, if you have forgotten to start deer with option -x.
4) The SAVE and REPLACE commands play a similar role: the first must be used
the first time you write a file to disk; the second must be used when you
want to replace what's stored on disk with what's on memory, updating
file's contents.
5) The command EXIT has been given to offer a helping hand to shell users. It
behaves in the very same way of BYE.
2.5 TIPS ON MANIPULATING FILES
-------------------------
In the following, I assume that:
is the directory where we are
is the destination directory
is the name of current file
is a new name for current file or a name of an existing file
other than current
SAVE and REPLACE must be used with the following cautions:
- SAVE if the file doesn't exist
- REPLACE if the file exists
Anywhere I write SAVE you must read SAVE or REPLACE, depending on the file
existence.
2.5.1 How to move CURRENT file to another directory
--------------------------------------------
UNSAVE
ENTER
SAVE
This procedure is not safe, because if something happens to your system
between UNSAVE and SAVE the file is lost, though it's very unlikely since it's
a question of a few seconds; in any case, if you want a safer (and longer)
procedure:
ENTER
SAVE
ENTER
UNSAVE
2.5.2 How to rename an existing file
------------------------------
UNSAVE
RENAME
SAVE
A safer procedure:
RENAME
SAVE
OLD
UNSAVE
2.5.3 How to move and rename a file to another directory
--------------------------------------------------
UNSAVE
ENTER
RENAME
SAVE
A safer procedure:
ENTER
RENAME
SAVE
ENTER
OLD
UNSAVE
2.5.4 How to copy a file in the same directory (renaming it)
------------------------------------------------------
RENAME
SAVE
2.5.5 How to copy a file in another directory with the same name
----------------------------------------------------------
ENTER
SAVE
2.5.6 How to copy a file in another directory with another name
---------------------------------------------------------
ENTER
RENAME
SAVE
2.5.7 How to delete a file
--------------------
UNSAVE
3. CONCLUSIONS
-----------
deer is an emulation, written in bash: don't expect it to be fast, precise,
robust. After all it's more like a game. And remember that dib, the BASIC
interpreter, may be used all alone, as UNIX program, and in this case deer
may be forgotten.
But, please, if you want to help me improve this program, write me tips and
snippets of code to better it or make it compatible with other UNIX systems.
I hope you like deer.
It's GPL: Enjoy!
4. REFERENCES
----------
The following documents were very useful to understand basic principles and
set up general behaviors:
[1] The dtss simulator, with many information about the system, can be found
at http://www.dtss.org/ - in the site you can also find a link to an
emulator written in java and running online (a registration is requested
in order to use it - I didn't).
[2] "Dartmouth BASIC manual" for version II, October 1964, is available as a
pdf file at http://www.bitsavers.org/pdf/dartmouth/BASIC_Oct64.pdf
[3] "Programming with BASIC", by Byron S. Gottfried, edition 1, 1975 (Italian
version, titled "Programmare in BASIC", Schaum 1982).
[4] "Dartmouth Time-sharing System - a brief description", from october 1964,
outlines the system in which the OS was implemented, and is available as a
pdf file at http://www.bitsavers.org/pdf/dartmouth/DTSS_descr_Oct64.pdf
*** ***
(written with gvim)
               (
geocities.com/it/tonibin/deer)                   (
geocities.com/it/tonibin)                   (
geocities.com/it)