home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
emacs-18.59-diffs.gz
/
emacs-18.59-diffs
Wrap
Text File
|
1996-10-13
|
1MB
|
36,473 lines
This file contains patches that transform the baseline version into
the amiga version. Assuming that you have unarchived the baseline
version in the current directory, just run the command:
patch -p1 -E -b .pbak <diff-file
where 'diff-file' is this patch file. After running patch you should
remove all the generated *.pbak files, and look for any *.rej files
that indicate a problem patching the baseline source.
diff -rup --new-file baseline/fsf/emacs18/Product-Info amiga/fsf/emacs18/Product-Info
--- baseline/fsf/emacs18/Product-Info Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/Product-Info Sat Sep 28 00:00:00 1996
@@ -0,0 +1,62 @@
+.name
+emacs
+.fullname
+GNU Emacs editor
+.type
+Text Editing
+.short
+GNU Emacs editor
+.description
+GNU Emacs is the GNU incarnation of the advanced, self-documenting,
+customizable, extensible real-time display editor Emacs. (The `G' in
+`GNU' is not silent.)
+
+We say that Emacs is a "display" editor because normally the text
+being edited is visible on the screen and is updated automatically as
+you type your commands.
+
+We call it a "real-time" editor because the display is updated very
+frequently, usually after each character or pair of characters you
+type. This minimizes the amount of information you must keep in your
+head as you edit.
+
+We call Emacs advanced because it provides facilities that go beyond
+simple insertion and deletion: filling of text; automatic indentation
+of programs; viewing two or more files at once; and dealing in terms
+of characters, words, lines, sentences, paragraphs, and pages, as well
+as expressions and comments in several different programming
+languages. It is much easier to type one command meaning "go to the
+end of the paragraph" than to find that spot with simple cursor keys.
+
+"Self-documenting" means that at any time you can type a special
+character, `Control-h', to find out what your options are. You can
+also use it to find out what any command does, or to find all the
+commands that pertain to a topic.
+
+"Customizable" means that you can change the definitions of Emacs
+commands in little ways. For example, if you use a programming
+language in which comments start with `<**' and end with `**>', you
+can tell the Emacs comment manipulation commands to use those strings.
+Another sort of customization is rearrangement of the command set.
+For example, if you prefer the four basic cursor motion commands (up,
+down, left and right) on keys in a diamond pattern on the keyboard,
+you can have it.
+
+"Extensible" means that you can go beyond simple customization and
+write entirely new commands, programs in the Lisp language to be run
+by Emacs's own Lisp interpreter. Emacs is an "on-line extensible"
+system, which means that it is divided into many functions that call
+each other, any of which can be redefined in the middle of an editing
+session. Any part of Emacs can be replaced without making a separate
+copy of all of Emacs. Most of the editing commands of Emacs are
+written in Lisp already; the few exceptions could have been written in
+Lisp but are written in C for efficiency. Although only a programmer
+can write an extension, anybody can use it afterward.
+.version
+18.59
+.author
+Richard Stallman
+.distribution
+GNU Public License
+.described-by
+Fred Fish (fnf@amigalib.com)
diff -rup --new-file baseline/fsf/emacs18/amiga/README amiga/fsf/emacs18/amiga/README
--- baseline/fsf/emacs18/amiga/README Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/README Sat Sep 28 00:00:00 1996
@@ -0,0 +1,11 @@
+This version of emacs is still built with SAS C. It also requires
+David Gay's unix emulation library, which can be found in the unix
+subdirectory here. You may have to go through some contortions to
+recompile it though.
+
+The files in amiga-extra are various things I received in the emacs
+distribution from David Gay, but didn't have any time to examine
+very closely, so they are stuck there in limbo for the time being.
+
+-Fred ><>
+ 12-Jul-94
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/INSTALL.AMIGA amiga/fsf/emacs18/amiga/amiga-extra/INSTALL.AMIGA
--- baseline/fsf/emacs18/amiga/amiga-extra/INSTALL.AMIGA Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/INSTALL.AMIGA Sat Sep 28 00:00:00 1996
@@ -0,0 +1,58 @@
+DON'T FORGET: This version of Emacs REQUIRES AmigaOS V2.04 or later !!
+
+If you are updating from a previous version, the following steps apply:
+- You must redefine your GNUEMACS: assign (the name of the directory
+ has changed from emacs-18.58 to emacs-18.59).
+- You should make sure you are using the lisp files (*.el and *.elc) which
+ come with this release, as several of them have changed.
+
+New users should do the following (assuming you are in the emacs-18.59
+directory):
+
+1. Copy amiga/.emacs, amiga/.emacs-menu.menu, amiga/.emacs-menu.el to s:
+2. Copy amiga/c/#? to somewhere in your path.
+3. Add an assign GNUEMACS: <wherever you've put the emacs directory> to
+ your User-Startup.
+4. Install Matt Dillon's fifo.library and fifo: handler if you want to use
+ external processes (This can be found on Fish disks). If you have any
+ problems, try a version at least as recent as that on Fish Disk 588.
+5. Define various environment variables (these all have defaults, so this
+ isn't absolutely necessary, except for ESHELL) :
+
+ USER - a username (a la Unix) (default "user")
+ USERNAME - your full name (default same as $USER)
+ HOME - your "home" directory (This is the directory refered to
+ by ~/<file>, and where the .emacs file is looked for)
+ (default "s:").
+ HOSTNAME - a name for your system (default "amiga")
+ ESHELL - where to find an unix-like shell (no default). By unix-like
+ I mean that it should not open a window to get its input.
+ The only tested value for this is GNUEMACS:etc/sh.
+
+ For instance, I have the following values:
+ USER: dgay, USERNAME: David E. Gay, HOSTNAME: owl,
+ ESHELL: gnuemacs:etc/sh
+
+6. If you want to check that emacs is working, type
+
+ assign gnuemacs: ""
+ emacs
+
+ If all goes well, emacs should open a window. If you get
+ memacs: Unknown command
+ you have an alias for emacs. Try editing s:Shell-Startup and removing it.
+
+ If you get
+ emacs: file is not executable
+ try typing
+ protect <wherever you put the commands from step 2>/emacs +s
+
+ And finally, if you get
+ wrong number of arguments
+ if failed returncode 10
+ make sure that you have getstack in your path
+
+7. If you are going to use emacs over a serial line, you must install
+ the termcap file, which comes with the source version. To do so, type:
+
+ join gnuemacs:etc/termcap.ucb gnuemacs:etc/termcap.amiga as s:termcap
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs Sat Sep 28 00:00:00 1996
@@ -0,0 +1 @@
+;; Put your configuration commands here.
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.el
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1 @@
+(amiga-menus-set (quote (("Project" (("Open C-x C-f" (call-interactively (quote find-file)) 79) ("Save C-x C-s" (call-interactively (quote save-buffer)) 83) ("Save As C-x C-w" (call-interactively (quote write-file)) 87) nil ("Quit C-x C-c" (call-interactively (quote save-buffers-kill-emacs)) 81))) ("Edit" (("Undo C-_" (call-interactively (quote undo)) 85) nil ("Mark C-@" (call-interactively (quote set-mark-command)) 77) ("Cut C-w" (call-interactively (quote kill-region)) 88) ("Copy M-w" (call-interactively (quote copy-region-as-kill)) 67) ("Paste C-y" (call-interactively (quote yank)) 86) ("Paste Previous M-y" (call-interactively (quote yank-pop)) nil))) ("Search" (("Find Forward C-s" (call-interactively (quote isearch-forward)) 70) ("Find Backward C-r" (call-interactively (quote isearch-backward)) 66) nil ("Find Fwd Regexp M-C-s" (call-interactively (quote isearch-forward-regexp)) nil) ("Find Bwd Regexp" (call-interactively (quote isearch-backward-regexp)) nil) nil ("Query Replace M-%" (call-interactively (quote query-replace)) 82) ("Query Rpl Regexp" (call-interactively (quote query-replace-regexp)) nil))) ("Window" (("Split C-x 2" (call-interactively (quote split-window-vertically)) 50) ("Split H C-x 5" (call-interactively (quote split-window-horizontally)) nil) nil ("One Window C-x 1" (call-interactively (quote delete-other-windows)) 49) ("Delete C-x 0" (call-interactively (quote delete-window)) 48) nil ("Enlarge C-x ^" (call-interactively (quote enlarge-window)) 69) ("Next C-x o" (call-interactively (quote other-window)) 78))) ("Buffers" (("List C-x C-b" (call-interactively (quote list-buffers)) nil) ("Change C-x b" (call-interactively (quote switch-to-buffer)) nil) ("Kill C-x k" (call-interactively (quote kill-buffer)) nil))) ("Help" (("Tutorial C-h t" (call-interactively (quote help-with-tutorial)) 84) ("Information C-h i" (call-interactively (quote info)) 72) nil ("Where Is Command C-h w" (call-interactively (quote where-is)) nil) ("What Is Command C-h f" (call-interactively (quote describe-function)) nil) ("What Is Key C-h k" (call-interactively (quote describe-key)) nil) ("Apropos C-h a" (call-interactively (quote command-apropos)) nil))))))
\ No newline at end of file
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.menu amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.menu
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.menu Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.menu Sat Sep 28 00:00:00 1996
@@ -0,0 +1,38 @@
+(("Project" ("Open" find-file ?O)
+ ("Save" save-buffer ?S)
+ ("Save As" write-file ?W)
+ ()
+ ("Quit" save-buffers-kill-emacs ?Q))
+ ("Edit" ("Undo" undo ?U)
+ ()
+ ("Mark" set-mark-command ?M)
+ ("Cut" kill-region ?X)
+ ("Copy" copy-region-as-kill ?C)
+ ("Paste" yank ?V)
+ ("Paste Previous" yank-pop))
+ ("Search" ("Find Forward" isearch-forward ?F)
+ ("Find Backward" isearch-backward ?B)
+ ()
+ ("Find Fwd Regexp" isearch-forward-regexp)
+ ("Find Bwd Regexp" isearch-backward-regexp)
+ ()
+ ("Query Replace" query-replace ?R)
+ ("Query Rpl Regexp" query-replace-regexp))
+ ("Window" ("Split" split-window-vertically ?2)
+ ("Split H" split-window-horizontally)
+ ()
+ ("One Window" delete-other-windows ?1)
+ ("Delete" delete-window ?0)
+ ()
+ ("Enlarge" enlarge-window ?E)
+ ("Next" other-window ?N))
+ ("Buffers" ("List" list-buffers)
+ ("Change" switch-to-buffer)
+ ("Kill" kill-buffer))
+ ("Help" ("Tutorial" help-with-tutorial ?T)
+ ("Information" info ?H)
+ ()
+ ("Where Is Command" where-is)
+ ("What Is Command" describe-function)
+ ("What Is Key" describe-key)
+ ("Apropos" command-apropos)))
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/amiga.doc amiga/fsf/emacs18/amiga/amiga-extra/amiga/amiga.doc
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/amiga.doc Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/amiga.doc Sat Sep 28 00:00:00 1996
@@ -0,0 +1,605 @@
+1. Introduction
+---------------
+
+Emacs is a powerful, but sometimes cryptic, editor. In this Amiga
+version, I have tried to make it easier to use with menus, mouse
+support and arrow key support, but it still requires some getting used
+to. I would recommend starting with the tutorial, which can be started
+from the Help menu (if it is missing, you didn't install emacs
+correctly. Check that the file s:.emacs-menu.el exists) or from the
+keyboard by typing Control-H and then t.
+
+This file only describes the Amiga specific features of emacs, and it
+assumes a working knowledge of emacs. For more documentation you can
+consult the emacs help (Information in the Help menu, or C-h i) or
+read the emacs manual (which is the same document in a printed form).
+This manual can be bought from the
+
+ Free Software Foundation
+ 675 Mass Ave
+ Cambridge, MA 02139
+ USA
+
+See the file gnuemacs:etc/DISTRIB for more information (you can type
+C-h C-d to view it).
+
+To install emacs, read the file INSTALLATION.
+
+
+2. Changes since the last version
+---------------------------------
+
+Several features have been added since v1.26:
+
+- based on emacs 18.59 instead of 18.58
+- changes contributed by Christian E. Hopps: new AREXX code, enhancements
+to the screen routines (more flexibility, read window & screen size,
+...).
+- amiga-iconify is now a toggle (to allow deiconification from AREXX).
+- the infamous 'vfork: not enough memory' message is now more explicit :-)
+- miscellaneous bug fixes
+
+3. Using emacs in a window
+--------------------------
+
+Emacs runs in a window on the Workbench (this can be changed). It
+basically works like just any other version of GNU Emacs, using the
+same keys, etc. It uses the standard amiga keymap, but with some strange
+modifications:
+
+o The left alt key is stolen as a meta key for emacs. This means you can't use
+it to enter accents. However, the right alt key remains untouched. Hence
+'left alt-f e' moves forward one word and inserts an e, while
+'right alt-f e' inserts an e acute. In the rest of the text, the meta key
+always means the 'left alt' key.
+
+o C-space is always mapped to C-@, the set-mark command, for convenience.
+
+o The backspace key always sends DEL (delete previous character in emacs),
+and DEL sends C-d (delete character under cursor). If you don't like this,
+add the line
+ (setq amiga-remap-bsdel nil)
+to your .emacs file (in s:).
+
+o Keypad keys are prefixed with C-x C-^ K (so 0 generates C-x C-^ K 0).
+Normally, C-x C-^ K is a do-nothing operation, so the keypad keys just
+insert the usual character. If you want to redefine the keypad keys, you
+must do the following:
+
+ (global-set-key "\C-x\C-^K" (make-sparse-keymap))
+ (global-set-key "\C-x\C-^K0" '<function for key 0>)
+ (global-set-key "\C-x\C-^K1" '<function for key 0>)
+ ...
+
+Once you have redefined one key, you must define all of them (as C-x C-^ K
+is no longer a do-nothing command). If you still want a keypad to insert
+its usual character, you can use (for +)
+
+ (global-set-key "\C-x\C-^K+" 'self-insert-command)
+
+Even with this, the numeric keypad will not work with the incremental
+search function. The only way past that is to disable the C-x C-^ K
+prefix, with the following code:
+
+ (setq amiga-remap-numeric-keypad nil)
+
+(and you will then not be able to redefine the keypad keys).
+
+o The sequences for function & arrow keys are the standard Amiga ones,
+except that the initial character (CSI, code 155) is replaced by
+C-x C-^. For example, F1 is C-x C-^ 0 ~. You can always find the
+characters generated by a key by pressing it, and then executing
+M-x view-lossage. This displays the last 100 characters seen by emacs. So
+to define F1 to be view-lossage you would add
+
+ (global-set-key "\C-x\C-^0~" 'view-lossage)
+
+to s:.emacs (trying to define F1 interactively with M-x global-set-key
+will fail ...).
+
+
+There are several extra features:
+
+a) Mouse support, similar to the X-Windows version.
+
+You can position the cursor with the left mouse button. Other possibilites are:
+
+action result
+------------------------------
+shift-left button set mark at mouse position
+control-left button cut between point and mouse position
+meta-left button copy between point and mouse position
+middle button paste
+shift-middle button iconify emacs window (double click to deiconify)
+
+Some of the control, meta, etc combinations may be stolen by Intuition or
+commodities programs, so don't be surprised if they don't all work.
+
+All of these actions may be redefined (this is emacs after all!), see the
+file lisp/amiga-mouse.el for details (you will need to learn lisp if you don't
+already know it ...) [Note: this file is not included in the binary only
+distribution, you will need the source code version].
+
+b) Clipboard
+
+At first glance, emacs uses the Amiga clipboard, ie it cuts to the
+clipboard and pastes from it (via the menu operations or the C-w
+(kill-region), M-w (copy-region-as-kill) & C-y (yank) commands).
+
+Things are actually complicated by emacs use of a "kill ring" (ie it
+remembers the last 30 things cut. The M-y (yank-pop, menu command
+Paste Previous) allows you to recover old cuts):
+
+- When you cut (or copy) something in emacs it is placed in the
+clipboard.
+
+- When you paste (yank) something in emacs, it checks the clipboard to
+see if it contains anything new. If so, it pastes that.
+
+[Note: It also checks the clipboard when you cut something, and saves
+that in the kill-ring if necessary]
+
+All this effort is used to make the clipboard appear to operate
+transparently in emacs.
+
+c) Window
+
+By default, emacs runs in a window on the workbench screen using the
+system default font and the standard colours. All this can be changed:
+
+o The font can be specified with the -fn <font> <size> option when you
+run emacs. You can also use the amiga-set-font command interactively,
+or add a line like
+ (amiga-set-font "topaz" 11)
+to your s:.emacs file. The font must be non-proportional.
+
+o The window size and screen can be changed with the
+amiga-set-geometry function. It takes 4, 5 or 6 parameters, the (x,y)
+position of the window and its (width,height). The 5th optional
+parameter specifies the screen: a string gives the name of a public
+screen, t stands for the default public screen (normally the
+workbench) and nil means keep the same screen. Finally, if the 6th
+parameter is present and not nil, a backdrop window is used.
+
+For example, the lisp code
+ (amiga-set-geometry 0 0 640 400)
+resizes the emacs window to 640x400. If the screen would be too small
+given the current font (there must be room for 11x4 characters), the
+change is refused.
+
+Michael Kaiser has contributed a simple public screen creation
+utility: gnuemacs:amiga/contrib/kaiser/pub is a program that creates
+a public screen called "EmacsPublicScreen".
+
+o The foreground & background colours can be changed with the
+amiga-set-foreground-color & amiga-set-background-color commands. You
+specify the pen and not the actual colour (from 0 to 7 only,
+because of restrictions in console.device).
+
+o The inverse text & fill colours can be specified with
+amiga-set-inverse-text-pen and amiga-set-inverse-fill-pen. The
+choices are also pens 0 to 7, or 8 for reverse.
+
+o The emacs window can be iconified (onto the workbench) with the
+amiga-iconify command. This is bound to shift-middle button on a 3
+button mouse, and to C-z (which is normally bound to suspend-emacs,
+which doesn't work on the Amiga).
+
+To deiconify emacs, double click on the icon.
+
+Emacs will continue to answer to ARexx commands while iconified. The
+variable amiga-emacs-iconfied is set to 't' while emacs is iconified,
+'nil' the rest of the time. You can test this, eg to make sure that
+emacs is not iconified before reading some user input. If you wish to
+deiconify emacs from arexx, simply call (amiga-iconify) again (it is a
+toggle).
+
+You can specify the position for the icon with (amiga-set-icon-pos x
+y), or get the default position with (amiga-set-icon-pos nil nil).
+
+If you use the functions described above in s:.emacs, they will take
+effect before emacs's window is opened. This will avoid the nasty
+visual effects of the previous version.
+
+o You can manipulate the emacs window with amiga-activate-window,
+amiga-window-to-front and amiga-window-to-back.
+
+o You can get the window and screen size with (amiga-get-window-geometry)
+and (amiga-get-screen-geometry). The iconified status is now returned
+by amiga-get-window-geometry instead of the amiga-emacs-iconified variable.
+
+d) Menus
+
+If you have installed emacs correctly (see the INSTALLATION file), it
+will startup with some menus containing some useful basic
+functions (the layout was inspired from that of TurboText, another
+good editor which has the disadvantage of being more expensive than
+emacs ...). Alongside each item is the emacs key sequence which
+invokes that function, if any.
+
+Using the Menu Help functionality of AmigaOS 2.04, you can get help
+on any menu item by highlighting it with the mouse and pressing the
+Help key [This is easier if you're left handed :-)].
+
+The menus are not fixed, they are defined by the s:.emacs-menu.el file
+(which isn't human-readable). To modify them, edit s:.emacs-menu.menu.
+This contains a lisp-like (but quite legible even for lisp-haters)
+representation of the menus, which you can modify by adding items or
+menus. The format should be obvious (just make sure that closing
+brackets correspond to the correct opening ones, emacs always shows
+the corresponding '(' when you type a ')'. Also the last bracket
+should correspond with the first).
+
+When you have finished your changes, type C-c C-c. This will save your
+menus, and then generate a .el file from them (this takes several
+seconds even on an A3000. Be patient). Then save the resulting file.
+To have the new menus take effect immediately, type M-C-x while in the
+.el file.
+
+Enterprising lisp programmers can customise the menus even more by
+modifying the functions amiga-menus-dispatch and/or amiga-menus-help
+in lisp/amiga-mouse.el. This code basically receives a (menu-number
+menu-item-number) list and must take the appropriate action
+(currently, execute the command associated with that particular menu
+item). The lack of comments will surely not deter these audacious
+pionneers ...
+
+e) Command line options
+
+Beyond the standard emacs command line options (for which
+documentation tends to be rather sketchy, not to say missing), you can
+also use:
+
+-prealloc <n>: Reserve n bytes of memory for emacs exclusively. This
+option *must* be the first on the command line. On the A3000, chip
+memory can't be used for emacs (the details are complicated ...), so
+you will run out of memory sooner than expected. This option allows
+you to reserve some for emacs before it gets eaten by other programs.
+
+-fn <font> <size>: Set the font that emacs uses, like the
+amiga-set-font command (see section c, on windows). Note that there
+must be enough room for 11x4 characters in the standard 640x200
+window. So avoid fonts bigger than 40 points ...
+
+-nw: Don't use a window, use a serial port. See part 3, Using Emacs
+over a serial line.
+
+f) ARexx
+
+[The ARexx interface has been rewritten for this version by Christian
+E. Hopps]
+
+Emacs has a full ARexx interface. It can execute scripts and commands
+synchronously (waiting for the result) or asynchronously, and has an
+ARexx port from which it accepts commands.
+
+To execute a script, use the amiga-arexx-do-command command. This
+asks for the script file name (the default extension is .elx). If you
+just want to execute a simple ARexx command, you can prefix those
+commands with C-u and specify the string to execute.
+
+From lisp, you can use
+ (amiga-arexx-send-command "<file>" nil) for a script, and
+ (amiga-arexx-send-command "<commands>" t) for direct execution.
+(and the same for amiga-arexx-do-command). The result of
+amiga-arexx-send-command is an integer that can be passed to
+amiga-arexx-wait-command to wait for the completion of the script or
+command. It can also be used with amiga-arexx-check-command to check
+if the script has finished. For example:
+
+ (let ((arexx-id (amiga-send-command "start-fun" nil)))
+ ... do something here ...
+ ; and wait for arexx script to end
+ (amiga-arexx-wait-command arexx-id))
+
+amiga-arexx-wait-command returns the result of the script/command.
+
+amiga-arexx-do-command-with-results is like amiga-arexx-do-command,
+but it returns the result of the script/command.
+
+Emacs's ARexx port accepts commands in lisp, and is usually called
+EMACS1 (if you run emacs twice simulatenously, the second one will
+have EMACS2, and so on). For example (from a shell),
+
+ rx "address EMACS1 '(beginning-of-buffer)'"
+
+will set point to the beginning of the buffer.
+
+ARexx commands are only processed at certain times, so be careful how
+you design your applications. These are:
+
+o While waiting for commands from the keyboard (ie when emacs is
+idle or iconified).
+o While processing a synchronous (amiga-arexx-do-command) script or
+waiting for a script to terminate with amiga-arexx-wait-command.
+o When the amiga-arexx-process function is called.
+
+They also affect the user visible state by default (ie calling
+beginning-of-buffer as above modifies the user's position). Avoid
+sending random commands at random times, or use save-excursion.
+
+As usual, all this behaviour can be modified to some extent. Look in
+amiga-init.el for details [The source code is the documentation...].
+
+There are a few arexx examples in the amiga/contrib directory.
+
+g) Workbench support
+
+Beyond iconification (see the section on the emacs window), emacs
+supports a number of features for Workbench users:
+
+- emacs can be run from the Workbench, by all the usual methods
+ (double clicking on the tool, double clicking on a project which
+ has temacs as its default tool, etc). All the projects that are
+ passed to temacs will be loaded (if they are files), or listed
+ with dired (if they are directories).
+
+- icons can be dropped in emacs's window, the corresponding file
+ or directory will be loaded or listed.
+
+- icons can be created for files that are saved. This is the default
+ when emacs is run from the workbench. This is controlled by the
+ amiga-create-icons variable: if you always want icons to be
+ created, add
+
+ (setq amiga-create-icons t)
+
+ to s:.emacs, or
+
+ (setq amiga-create-icons nil)
+
+ if you never want them.
+
+h) external processes
+
+This version of emacs fully supports synchronous (used to get the
+result of ls for dired, for instance) and asynchronous (as in the
+'shell' command) processes. However, it requires Matt Dillon's
+'fifo.device' and 'fifo:' devices to function. See the INSTALLATION
+file for details.
+
+This allows full support for all emacs functions which call external
+programs, providing that said programs exist on the Amiga. The
+following work:
+ compile (for SAS C 5.10b, with a few occasional problems)
+ grep
+ shell (but see the discussions below)
+ display-time
+ dired
+ list-directory
+ sort-...
+
+The compile command sometimes has problems finding file names in the
+error messages, and tries to read the current directory instead. If
+you are patient, it moves on to the next file.
+
+Because of differences between AmigaOS & Unix, sending signals (eg
+interrupt, kill) to processes is not very reliable. The following
+points must be kept in mind:
+
+- In some unlikely cases, the appropriate process to signal won't be
+ found.
+- The stop-process & continue-process functions don't work.
+- interrupt-process & quit-process send a ctrl-c & ctrl-d to the
+ process and all its children (probably).
+- kill-process also sends a ctrl-c & ctrl-d. It then pretends that
+ the process has died.
+
+All input sent to a process after an end-of-file is ignored. The process
+just sees an endless sequence of end-of-files. This is most visible with
+the shell command, where if you send an end-of-file to a program (eg type)
+with C-c C-d, the shell will exit. The bug is in fifo.device, not in emacs.
+
+The input & output of processes run inside emacs look like interactive
+files (which allows, for instance, shells to run correctly). However, this
+confuses some programs which expect all interactive files to be Amiga
+consoles and causes them to crash. Several versions of ls suffer from this
+problem (they run into problems while trying to get the window size).
+
+amiga-process-stack-size is the size of the stack for new processes. If it
+is 0 (the default), emacs's stack size is used.
+
+
+4. Using emacs over a serial line
+---------------------------------
+
+To use emacs over a serial port, you must do:
+
+ setenv TERM <terminal type> (eg vt100)
+ emacs -nw
+
+The setenv line can be put in your User-Startup, so as to avoid typing
+it every time.
+
+Emacs cannot simply guess how your terminal works from its name, it
+needs a description of it. This is found in a termcap file, which
+emacs looks for in s:termcap. If you didn't install this file with emacs,
+you can do so by typing (in a CLI):
+
+ join gnuemacs:etc/termcap.ucb gnuemacs:etc/termcap.amiga as s:termcap
+
+[Note: These files only come with the source version]
+
+The -nw prevents the use of a window.
+
+If you have several serial ports, you can type
+
+ emacs -dev ser2.device 2 -nw
+
+to use port 2 of device ser2.device. Use of the -dev option still requires the
+-nw.
+
+These options (-dev & -nw) *must* be specified at the start of the
+command line.
+
+The descriptions of the Clipboard, the command line options and the
+ARexx port in part 2 above also apply to use over a serial port.
+
+
+5. Redumping emacs [This section for expert users only]
+-------------------------------------------------------
+
+Enterprising users may want to change the lisp files which are loaded
+into the Emacs dump file. The procedure for doing this is very similar
+to that with the Unix version, except that the amount of pure storage
+can be changed without recompiling emacs. This will allow users
+without SAS C v5.10b to still make such changes.
+
+The necessary lisp files are only included in the source distribution,
+so you will have to get that first. Once that is available, that you
+have made all your changes (eg adding some extra files to be dumped),
+use the following sequence to redump emacs:
+
+ cd gnuemacs:etc
+ stack 20000
+ /temacs -pure <n> -malloc <m> -nl -batch -l loadup dump
+
+The -pure <n> and -malloc <m> options should only be necessary if you
+add extra files to be dumped, see below how to choose values for n &
+m. The above order for the parameters must be preserved. Specifying
+dump without -nl & -batch will have unpredicatable consequences.
+
+Once all the files are loaded, a new copy of gnuemacs:etc/EMACS-DATA
+will be saved, and all should work correctly. If you get one of the
+following messages:
+
+ Pure Lisp storage exhausted
+
+ Emacs dump: ran out of memory for malloc.
+
+read the following description of the -pure & -malloc options:
+
+When emacs is dumped, it saves (amongst other things) the copies of
+two zones of memory, called the pure storage area and the malloc hunk.
+These contain an internal representation of the lisp code, so the more
+code you include in a dumped emacs, the bigger these need to be. The
+default sizes of these are reasonable sizes for the standard lisp code
+which is dumped, but you will probably need to increase them if you
+add some more lisp modules. The best way to find the new values for n
+(size of pure area) and m (size of the malloc hunk), is to run the
+command
+
+ cd gnuemacs:etc
+ stack 20000
+ /temacs -pure 200000 -malloc 200000 -nl -batch -l loadup dump
+
+(these sizes should be largely sufficient, but if you still get one of
+the two error messages above, increase them). Then run emacs as usual,
+and look at the values of the 2 lisp variables
+
+ pure-bytes-used
+and amiga-malloc-bytes-used
+
+pure-bytes used contains the minimum value for n, and
+amiga-malloc-bytes-used the minimum value for m. Add 1000 to these for
+luck to get values for n and m, and redump emacs using these.
+
+For those who are into modifying the C source, the default values are
+130000 for n (see DEF_PURESIZE in s-amiga.h) and 92000 for m (see
+MALLOC_HUNK_SIZE in amiga.h).
+
+6. Source
+---------
+
+Source for emacs and all the programs included with it should be
+obtainable from the same place as this file. If not, please send me
+mail (if you are on the Internet) and I will provide the missing
+pieces. Specifically, there should be:
+
+- The emacs sources
+- Sources for the 'unix library' needed to compile emacs
+- Source for the programs in the c directory (ls, sort, rmdir, grep).
+This consists of the GNU fileutils, textutils and grep packages.
+
+Distributing the binary without these packages is a violation of
+the GNU General Public License (see the file COPYRIGHT in the etc
+directory) under which emacs is distributed.
+
+7. Thanks & Problems
+--------------------
+
+I would like to thank the following people for their help while porting
+emacs:
+
+- Mark D. Henning for the early port of emacs. He's the person who got
+emacs working on the Amiga ...
+- Christian E. Hopps for enhancements to the screen display code, a
+rewrite of the AREXX code, testing and useful suggestions.
+- All the beta testers and people who contributed useful utilities (see
+the amiga/contrib directory):
+ Jean-Marc Vandel
+ Philippe Morel
+ Jukka Partanen
+ Michael Witbrock
+ Tero Manninen
+ Alan Bair
+ Hugh D. Gamble
+ Tapio Heiskanen
+ Teddy Wang
+ Richard McGowen
+ Keith Hanlan
+ Carsten Heyl
+ Anders Lindgren
+ Michel Schinz
+ Hans-Joachim Widmaier
+ Michael Kaiser
+
+Please send any bug reports, enhancement requests, etc to:
+
+Post: E-mail:
+David Gay dgay@di.epfl.ch
+19 Chemin de la Source
+CH-1296 Coppet
+Vaud
+Switzerland
+
+8. Ordering Information
+-----------------------
+
+I can provide a complete copy of my development directory, which
+includes:
+
+o the standard emacs-18.59 files
+o modified and new lisp files
+o Amiga-specific source, as text and in RCS format (highlighting the
+changes from a standard unix distribution, and the different versions).
+o assorted lisp packages hacked for the Amiga (I will be posting some
+of these in due course):
+ - a tags-like access to the 2.0 autodocs (you must already have a
+ copy of these ...)
+ - gnus (a news reader) for use with Matt Dillon's uucp package.
+ - getris, a tetris clone for emacs
+
+All these as a tar file on a QIC-150 tape, for $200 (the same price as
+the FSF, so as not to undercut them), or 300SF. This price is valid
+until the 31st December 1993, and includes shipping by surface mail.
+
+Please send all orders, by postal mail, to
+
+ David Gay
+ 19 Chemin de la Source
+ CH-1296 Coppet
+ Vaud
+ Switzerland
+
+ Tel: +(41)-22 776 35 81 [Evenings, Central European Time]
+ Fax: +(41)-22 776 70 58
+
+Include with your order:
+- A cheque, in dollars or Swiss francs.
+- Your *complete* address (don't forget the country, etc).
+- A phone or fax number so I can contact you if I have any problems.
+
+I will be glad to include, on request, and with full source, some
+other pieces of software I have written:
+- An HP11 calculator (this is an update to the version available on
+fish disks, with some bug fixes and 2.0 specific features).
+- A scheme compiler for the Amiga, still in an alpha state.
+- A fortune cookie program, including 1 megabyte of cookies (merged
+from various sources).
+
+
+Dvaid Gay
+dgay@di.epfl.ch
+Ecole Polytechnique Federale de Lausanne - Switzerland
+Laboratoire d'Informatique Technique
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/announce1.28 amiga/fsf/emacs18/amiga/amiga-extra/amiga/announce1.28
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/announce1.28 Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/announce1.28 Sat Sep 28 00:00:00 1996
@@ -0,0 +1,39 @@
+GNU Emacs 18.59, Amiga RELEASE 1.28
+-----------------------------------
+
+Emacs is a very powerful, but sometimes cryptic, text editor. Its basic
+features are similar to those of the MEmacs editor which comes with
+AmigaOS (in the Tools directory), but has numerous other facilities:
+- unlimited undo.
+- language specific editing, with automatic (re)indentation.
+- a dialect of lisp as extension language, leading to extreme
+ reconfigurability.
+- abbreviations for commonly typed words.
+- complete on-line manual.
+- powerful search & replace facilities (including wildcards).
+
+In this Amiga version, I have tried to make it easier to use with menus,
+mouse, clipboard, rexx and workbench support.
+
+This version (1.28) is an update on version 1.26. It tracks the update
+from GNU Emacs 18.58 to 18.59.
+
+System requirements:
+- AmigaOS 2.04
+- At least 2MB of memory (emacs uses about 750k + memory for the files
+ being edited).
+- 2.5MB of free disk space for the binary version, 8MB for the
+ source version (but you can remove some of the files once it has been
+ installed).
+- Emacs works with a 68000 (A500,A2000), but is a bit slow. It is very
+ pleasant to use with a 68030/25MHz ...
+
+This port was originally based on that of Mark Henning (gnuemacs
+v1.10), but after having made rather extensive modifications, added
+numerous features and updated it to Emacs 18.59, I decided to
+release it myself.
+
+David Gay
+dgay@di.epfl.ch
+Ecole Polytechnique Federale de Lausanne, Switzerland.
+Laboratoire d'Informatique Technique.
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/emacs amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/emacs
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/emacs Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/emacs Sat Sep 28 00:00:00 1996
@@ -0,0 +1,26 @@
+.key a1,a2,a3,a4,a5,a6,a7,a8,a9
+.bra {
+.ket }
+; Startup script for GNU Emacs
+; Make sure the FIFO handler is ready
+assign >NIL: FIFO: exists
+if warn
+ if exists L:fifo-handler
+ echo "Starting fifo-handler"
+ run <NIL: >NIL: L:fifo-handler
+ else
+ echo "Cannot find L:fifo-handler."
+ echo "External processes will not work."
+ endif
+endif
+; Increase the stack size as needed
+set stack=`getstack`
+if not $stack gt 40000 val
+ stack 40000
+endif
+; Invoke GNU Emacs
+run gnuemacs:temacs {a1} {a2} {a3} {a4} {a5} {a6} {a7} {a8} {a9}
+; Restore the previous stack size
+stack $stack
+unset stack
+
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/etags.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/etags.uue
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/etags.uue Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/etags.uue Sat Sep 28 00:00:00 1996
@@ -0,0 +1,610 @@
+begin 666 etags
+M```#\P`````````"``````````$``!B&```"^P```^D``!B&2.=^_B1()`!)
+M^0`````L>``$1_D```=`<@`@/````2M@`B;!4<C__"E/!W`I3@=H)FX!%"`K
+M`*QG#.6(($`@*``TY8A@!B`/D*L`.B(/DH`&@0```(`I00=$L*P&B&14("P&
+MB`:`````@"E`!Y`B/``!``%.KO\Z2H!G``'2*4`'C"(`!H````"`*4`'1-"L
+M!H@,;@`D`!1M&"E`!X@I00>$DJP'D$'L!X`@@4ZN_21@`BY`0JP';'``(CP`
+M`#``3J[^SB9N`11#^@&*<`!.KOW8*4`+Y&8&<&1@``#F*6L`F`=D2JL`K&<`
+M`'X@:P"LT<C1R")H`!#3R=/)(`)R`!(9*4D'=-"!7H`"0/_\*4`'?$CG0$`B
+M/``!``%.KO\Z3-\"`DJ`9@AP%"\`9P`!%B!`*4`'>"`"4X#4@1&R```@`E."
+M4<C_]A&\`"`@`E."$;P`(B`"$;$@`"`!4<K_^!"\`"(O"&!*0>L`7$ZN_H!!
+MZP!<3J[^C"E`!VPO`"1`("H`)&<8+&P+Y"!`(B@``$ZN_Z`I0`=D(@!.KO^"
+M(&P';"\(2&P'0"!H`"0I:``$!W1.ND=P3KHRNG``8`0@+P`$)&P'<"4`+'@`
+M!`QN`"0`%&T22JP'@&<,0>P'@%FL!XA.KOTD+DH@+`=<9P0@0$Z03KI'2$ZZ
+M1UP@+`>09PPB;`>,+'@`!$ZN_RY*K`=L9R`L;`OD(BP'9&<$3J[_IBQX``1.
+MKO]\(FP';$ZN_H9@$BQX``0@+`=\9P@B;`=X3J[_+B)L"^1.KOYB(!],WW]^
+M3G5D;W,N;&EB<F%R>0`@#Y!\`'2PK`=$90!*^)[\`&1(YP<4+B\`?"IO`(!Z
+M`"E5"B9P`2E``#IP`;Z`;P`!$B!M``1R+;(09@`!!BP`(&T`!")(T\9*$6<`
+M`.[1QA`02(!(P')"D(%G-EF`9T!R&Y"!9TA9@&=,4X!G3G(.D(%G``"44X!G
+M``"44X!G``">4X!G``"24X!G``"@8```N!E\`#\`!$*L`#I@``"6&7P`+P`$
+M0JP`.F```(A2K``B8```@%*L`#I@>$J%;Q8O+`HF2'H#&DAL!M!.NE#@3^\`
+M#&!R4H53AUB-<`&^@&\((&T`!$H09A8O+`HF2'H#%$AL!M!.NE"V3^\`#&!(
+M*6T`!``&8#)2K``F8"92K``J0JP`.F`<4JP`+F`64JP`,E*L`#9"K``Z8`A2
+MK``V0JP`.E*&8`#_"%.'6(U@`/[J<`&^@&X<+RP*)DAZ`N)(;`;03KI06$AX
+M``%.ND]Z3^\`$$JL``9F$D'Z`OA*K``Z9P1!^@+H*4@`!F$`!6!(;`HV80`@
+MYDAL"CYA`"#>4$]*K``Z9T1!^@+22JP`(F<$0?H"QB\(+RP`!DZZ5_I03RE`
+M"BYF)"\L"B9(>@*P2&P&T$ZZ3^@NK``&3KHD\DAX``%.ND\"3^\`$'`!*4``
+M'B`L`!ZPAVQ,(@#E@29U&``O"V$`!=!83TJL`#IG,"\L"C)A``\6+H`O"TAZ
+M`F8O+`HN3KI/F"ZL"C)A``KZ+JP*,F$`">I/[P`00JP*,E*L`!Y@K$JL`#IG
+M$"\L"BY.NE7"0I=.NDZ06$]*K``V9Q`O+`HR80`*P$*73KI.>EA/2JP`*F=&
+M?`&\AVP\2'H"#B\L``9.NC[X(`;E@"ZU"``O+``&2'H!_$AO`"1.NDZP2&\`
+M*$ZZ38A(>@'B3KHHW$_O`!Q2AF#`4JP`(D'Z`;Q*K``B9P1!^@&P+P@O+``&
+M3KI6Y%!/*4`*+F8D+RP`!DAZ`9I(;`;03KI.TBZL``9.NB/<2'@``4ZZ3>Q/
+M[P`0+RP*,F$`"B`NK`HN3KI5!%A/2JP`*F<@(&P`!B\(+PA(>@&*2&\`($ZZ
+M3B1(;P`D3KI,_$_O`!1"ITZZ3:I83TS?*.#>_`!D3G4@#`D*```@"0HB)R,H
+M*5M=>WT]+2LE*B\F?%Y^(3P^.RPN.C\``$%"0T1%1D=(24I+3$U.3U!14E-4
+M55976%E:7V%B8V1E9F=H:6IK;&UN;W!Q<G-T=79W>'EZ)```04)#1$5&1TA)
+M2DM,34Y/4%%24U155E=865I?86)C9&5F9VAI:FML;6YO<'%R<W1U=G=X>7HD
+M,#$R,S0U-C<X.0``+#L``"5S.B`M9B!F;&%G(&UA>2!O;FQY(&)E(&=I=F5N
+M(&]N8V4*`"5S.B`M9B!F;&%G(&UU<W0@8F4@9F]L;&]W960@8GD@82!F:6QE
+M;F%M90H`57-A9V4Z("5S(%LM0D9A971U=W9X72!;+68@;W5T9FEL95T@9FEL
+M92`N+BX*`%1!1U,``'1A9W,``&$`=P`E<SH@```,"B5S+"5D"@``3U1!1U,`
+M96=R97`@/B5S("UV("<))7,))R!/5$%'4P!C.G-O<G0@9G)O;2`E<R!T;R`E
+M<P``<@!T97@`875X`&)B;`!L`&5L``!L<W``;&ES<```8VP``&-L:7-P`'-M
+M``!S8VT`<V-H96UE``!T`'-C:`!330``4T--`"5S.B!T;V\@;6%N>2!E;G1R
+M:65S('1O('-O<G0*`&UA:6X``$T````E<R0`)2XU,',`)7,Z($1U<&QI8V%T
+M92!E;G1R>2!I;B!F:6QE("5S+"!L:6YE("5D.B`E<PH``%-E8V]N9"!E;G1R
+M>2!I9VYO<F5D"@`E<SH@1'5P;&EC871E(&5N=')Y(&EN(&9I;&5S("5S(&%N
+M9"`E<SH@)7,@*%=A<FYI;F<@;VYL>2D*```E<R5C)60L)60*```E<PDE<PD`
+M`"5D```E<R`E<R`E9`H`)2TQ-G,E-&0@)2TQ-G,@)7,*``!D969I;F4``'1Y
+M<&5D968`<W1R=6-T``!U;FEO;@!E;G5M``!$148`:6YT96=E<@!R96%L``!L
+M;V=I8V%L`&-O;7!L97@`8VAA<F%C=&5R`&1O=6)L90``<')E8VES:6]N`&9U
+M;F-T:6]N``!S=6)R;W5T:6YE``!P<F]G<F%M`'!R;V-E9'5R90`Z8VAA<'1E
+M<CIS96-T:6]N.G-U8G-E8W1I;VXZ<W5B<W5B<V5C=&EO;CIE<6YO.FQA8F5L
+M.G)E9CIC:71E.F)I8FET96TZ='EP96]U=`!415A404=3``H`=FER='5A;"!M
+M96UO<GD@97AH875S=&5D``"_[`=$90!$($CG`01^`'!_OH!L,'``0>P)%A&`
+M>`!![`B7$8!X`$'L"!@1@'@`0>P'F1&`>`!![`F5$;P``7@`4H=@RBIL``H0
+M%6<2$@!(@4'L!YD1O``!$`!2C6#J*FP`#A`59Q(2`$B!0>P(&!&\``$0`%*-
+M8.HJ;``6$!5G$A(`2(%![`B7$;P``1``4HU@ZBIL`!(0%6<2$@!(@4'L"181
+MO``!$`!2C6#J*FP`&A`59Q`2`$B!0>P)E4(P$`!2C6#L&6P'HP>9&6P((@@8
+M&6P)(`D6&6P(H0B7&6P)GPF53-\@@$YU(`^0?``,L*P'1&4`0S)(YP`4*F\`
+M#$AZ_-8O#4ZZ4<103RE`"BIF'B\L"B9(>OQZ2&P&T$ZZ2;(NC4ZZ'KY/[P`,
+M8``"7"\-80`;3BE`"B)(>``N+PUA`!NF3^\`#"9`(`MG4D'K``%(>OR&+PA.
+MND,B4$]*@&<H0>L``4AZ_'8O"$ZZ0PY03TJ`9Q1!ZP`!2'K\9B\(3KI"^E!/
+M2H!F%B\L"BIA`!:4+JP**DZZ3Y!83V```>P@"V<``)!!ZP`!2'K\.B\(3KI"
+MRE!/2H!G9$'K``%(>OPH+PA.ND*V4$]*@&=00>L``4AZ_!@O"$ZZ0J)03TJ`
+M9SQ!ZP`!2'K\""\(3KI"CE!/2H!G*$'K``%(>OOZ+PA.ND)Z4$]*@&<40>L`
+M`4AZ^^HO"$ZZ0F903TJ`9A8O+`HJ80`2L"ZL"BI.ND[\6$]@``%8(`MG``#Z
+M0>L``4AZ^\`O"$ZZ0C903TJ`9P``T$'K``%(>ONN+PA.ND(@4$]*@&<``+I!
+MZP`!2'K[G"\(3KI""E!/2H!G``"D0>L``4AZ^XXO"$ZZ0?103TJ`9P``CD'K
+M``%(>OMZ+PA.ND'>4$]*@&=X0>L``4AZ^VHO"$ZZ0<I03TJ`9V1!ZP`!2'K[
+M6B\(3KI!ME!/2H!G4'!ML"O__V8@<&.P*__^9AAP<[`K__UF$$'K``$O"&$`
+M`*)83TJ`9BAP3;`K__]F-'!#L"O__F8L<%.P*__]9B1!ZP`!+PAA``!Z6$]*
+M@&<4+RP**F$`$O@NK`HJ3KI-_%A/8%@@"V=&$"L``7)CL`%G/')HL`%G-G)Y
+ML`%G,$HK``)F*B\L"BIA``W@6$]*@&<,+RP**DZZ3<)83V`>0J="IR\L"BI.
+MNDLJ3^\`#&$`!S0O+`HJ3KI-HEA/3-\H`$YUO^P'1&4`0)(O#2IO``@0%6<0
+M<C"P`6T&<CFP`6_P<`!@`G`!*E].=2`/D'P`1+"L!T1E`$!DGOP`.$CG#Q0H
+M+P!H*B\`9"PO`&`>+P!;2'@`($ZZ0PQ83R9`(`MF,B\L"B9(>OHJ2&P&T$ZZ
+M1M8NK`HR80`"."ZL"C)A``$H0JP*,DAX`"!A`!HV3^\`$"9`2JP`.F9J2JP`
+M-F9D2'KZ#B\O`%A.ND!&4$]*@&922'@`+R\L"B)A`!B@4$\J0$J`9@8J;`HB
+M8`)2C4AZ^>@O#4AZ^>!A`!E<2'@`+B\`+T``8&$`&'1/[P`4*D`@#6<(2BT`
+M`F8"0A4@;P!,+T@`5"\O`%1A`!?L6$\F@"=L"B(`!!='``@G10`*)T0`#I'(
+M)T@`'"=(`!A*K``Z9PHB;P!<0C%H`&`Z2JP`-F8T+R\`7$ZZ/V183W(RL(%L
+M!D'Z^69@!$'Z^60O+P!<+PA(;P`A3KI%<$_O``Q![P`9+T@`7"\O`%QA`!=Z
+M6$\G0``22JP*,F8(($LI2`HR8`PO+`HR+PMA```^4$],WRCPWOP`.$YU(`]9
+M0+"L!T1E`#[J+PTJ;P`((`UG%B\M`!QAY"Z-3KI`,%A/($TJ:``88.8J7TYU
+M(`^0?``8L*P'1&4`/KA(YP$4)F\`%"IO`!`O$R\53KH^^%!/+@!*K``Z9G1*
+MAV9P(&T`!")K``2SR&8R2JP`+F8``)`O%2\L"A8O""\L"B9(>OB:2&P&T$ZZ
+M111(>OB\2&P&T$ZZ10A/[P`@8&1**P`69B1*K``N9AXO%2\K``0O+0`$+RP*
+M)DAZ^*9(;`;03KI$W$_O`!@7?``!`!9@,DJ':A@@*P`89PPO`"\-80#_4%!/
+M8!PG30`88!8@*P`<9PPO`"\-80#_.%!/8`0G30`<3-\H@$YU(`^0?``8L*P'
+M1&4`/>!(YR`4*F\`$"`-9P`#Y"\M`!AAWEA/2JP`.F<D+RT`#B\M``I(>`!_
+M+RT`$DAZ^%@O+`HN3KI$4D_O`!A@``.H2JP`-F8``U8O+0`$+Q5(>OA"+RP*
+M+DZZ1#!/[P`02BT`"&<``K`@;`HN""@``0`;9W!2J``,(&P*+B`H``RPJ``4
+M;CXB2"!I``12J0`$$"P`!!"`<@JP`68>(&P*+@@H``8`&V<2+PA.NDE@6$\0
+M+``$<@`2`&`($"P`!'(`$@!@'B!L"BY3J``,$"P`!$B`2,`O+`HN+P!.ND00
+M4$\B`&`6$"P`!$B`2,`O+`HN+P!.ND/X4$\B`"!L"BX(*``!`!MG6E*H``P@
+M;`HN("@`#+"H`!1N,")((&D`!%*I``1P7A"`<@JP`688(&P*+@@H``8`&V<,
+M+PA.NDC06$]P7F`"<%Y@%B!L"BY3J``,+RP*+DAX`%Y.ND.24$]@#B\L"BY(
+M>`!>3KI#@E!/)FT`$A`39P`!#G)<L`%G"!0L``2P`F9P(&P*+@@H``$`&V=6
+M4J@`#"!L"BX@*``,L*@`%&XL(F@`!%*H``02@7`*L@!F&"!L"BX(*``&`!MG
+M#"\(3KI(2%A/<%Q@`G!<8!8@;`HN4Z@`#"\L"BY(>`!<3KI#"E!/8`XO+`HN
+M2'@`7$ZZ0OI03R!L"BX(*``!`!MG:%*H``P@;`HN("@`#+"H`!1N.")((&D`
+M!%*I``00$Q"`<@JP`68<(&P*+@@H``8`&V<0+PA.ND?46$\0$W(`$@!@!A`3
+M<@`2`&`<(&P*+E.H``P0$TB`2,`O+`HN+P!.ND**4$\B`&`4$!-(@$C`+RP*
+M+B\`3KI"=%!/(@!2BV``_O`@;`HN""@``0`;9VY2J``,(&P*+B`H``RPJ``4
+M;CPB:``$4J@`!!`L``02@'(*L`%F'B!L"BX(*``&`!MG$B\(3KI'1EA/$"P`
+M!'(`$@!@"!`L``1R`!(`8!X@;`HN4Z@`#!`L``1(@$C`+RP*+B\`3KI!]E!/
+M(@!@+!`L``1(@$C`+RP*+B\`3KI!WE!/(@!@%"\M``I(>O6`+RP*+DZZ069/
+M[P`,(&P*+@@H``$`&V=84J@`#"!L"BX@*``,L*@`%&XN(D@@:0`$4JD`!'`*
+M$("P`&88(&P*+@@H``8`&V<,+PA.ND:B6$]P"F`"<`I@%B!L"BY3J``,+RP*
+M+DAX``I.ND%D4$]@6B\L"BY(>``*3KI!5%!/8$I*K``R9R9P/]"M``IR0$ZZ
+M.3XO`"\M``0O%4AZ].9(;`:N3KI`R$_O`!1@'B\M`!(O+0`$+RT`"B\52'KT
+MT$AL!JY.ND"H3^\`&"\M`!QA`/P&6$],WR@$3G4@#UE`L*P'1&4`.=Y(YP,$
+M*F\`$'X`(`UG4B\M`!AAX"X`+JT`'&'8WH`NK0`23KHYR%A/5H#>@"PM``I*
+MAF<.4H<@!G(*3KHXK"P`8.XL+0`.2H9F`E*'2H9G#E*'(`9R"DZZ.)`L`N
+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
+M(@!T?=2"=BA.KOZD<!1.NNY03-]LC-[\`%!.=2HJ(%-T86-K($]V97)F;&]W
+M("HJ``!%6$E4``!I;G1U:71I;VXN;&EB<F%R>0!*@&H``!Y$@$J!:@``#$2!
+M80``($2!3G5A```81(!$@4YU2H%J```,1(%A```&1(!.=2\"2$$T`68``")(
+M0$A!2$(T`&<```:$P3`"2$`T`(3!,`)(0C(")!].=2\#=A`,00"`9```!N&9
+M44,,00@`9```!NF964,,02``9```!N6954-*06L```;CF5-#-`#FJ$A"0D+F
+MJDA#@,$V`#`"-`-(0<3!D()D```&4T/0@7(`,@-(0^>X2$#!028?)!].=0``
+M2.=P`"0`9R!*@68$0H!@&"8`QL%(0L3!2$)"0M:"2$'`P4A`0D#0@TS?``Y.
+M=0``("P'<`1``?0N0$[Z_F```"!O``0@"$H89OQ32)'`(`A.=0``(&\`!")O
+M``@@+P`,2H!G$%.`$ABR&68,2@%G!%.`:O)P`$YU;@1P_TYU<`%.=0``(&\`
+M!")O``@2&+(99@A*`6;V<`!.=6X$</].=7`!3G4B;P`((&\`!"`O``PB"&`$
+M$-EG"%.`9/A@!D(84X!D^B`!3G4B;P`((&\`!"`($-EF_$YU(F\`""!O``0@
+M+P`,(@A*@&\6L<EE#-/`T<`1(5.`9OI@!A#94X!F^B`!3G4@;P`$("\`"$CG
+M`Q0N`"I(9A(@#68$<`!@:"!-3KH`;G``8%X@#68*(`=,WRC`3OH!R"9-58LP
+M/'__P%-(P.6`+``($P`/9PP,:X``__YF!"PK__(@!TZZ`:`F0$J`9@1P`&`>
+MO(=C!"`'8`(@!B!-(DM@`A+84X!D^B!-3KH`#B`+3-\HP$YU(&\`!"`(9@).
+M=5F`2.<\,B(L"]QF#BE\````%@N<3-],/$YU(D&P@6\2)`'4J0`$!H(````4
+ML()L`F`((BD``&?48.`F`0:#````$+"#;<9G$B1#0H(T*@`":[KEBM:"6(-@
+MZ"1`-"H``&JJ"*H`!P``0H,V*@`"`D-__^6+2FH``FM`1_(X!$IK``!K-D*$
+M."L``@)$?__EC-B#6(3DC%B#2FL``FH$`$2``#5$``)K$BH$Y8PT,D@$`D*`
+M`(I"-85(!$*$."H``&=,Y8Q$A$?R2/Q*:P``:SY"A#@K``+EC$*%.BH``@)%
+M?__EC=B%6(18@^2,2FH``FH$`$2``#=$``)K$BH$Y8PT,T@$`D*``(I"-X5(
+M!->I``@F*0`$MJP%@&X,MJD`"&8Z2JD``&<T("P+W"!`LH!F#"EI```+W&`0
+M(&@``+*H``!F]B%I`````"`I``0&@````!0L>``$3J[_+DS?3#Q.=2`O``1*
+M@&8,*7P````6"YQP`$YU2.<^,E:``H#____\#(```?_\;@``N+"L!8!N``"P
+M)BP+W&<``*@B0["I``AN,B(L"^"RJ0`,9BA%Z0`02E)K$$*$."H``@)$?__E
+MC+"$;QI"A#@J``)K".6,1?)(!<)BD``&=F(D-@O@CJ``<``$?R"`1"A;"$
+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
+M+P`````````%G```!:(```7"```%^@``!CP`````````````````````````
+M``````````````````````````C,7'M]````3VL``````!0`````````````
+M``````!,8V]N<V]L93H``"5S.B```&EN='5I=&EO;BYL:6)R87)Y````.B``
+M`#0R``!5;FMN;W=N(&5R<F]R(&-O9&4```H```!T:6UE<BYD979I8V4`````
+M_____V9I9F\N;&EB<F%R>0```````````````````,P``0```````````,X`
+M``````````````!&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R
+M<G5P=````````$YO(&UE;6]R>0```&$`1F%I;&5D('1O(&-R96%T92!T:6UE
+M<@``3DE,.@``3DE,.@``3DE,.@``*@!.24PZ``!);G9A;&ED('=I;&1C87)D
+M("5S`$5R<F]R(&5X<&%N9&EN9R!A<F=U;65N=',`55-%4@``=7-E<@``55-%
+M4DY!344``$A/344``',Z``!32$5,3`!B:6XZ<V@``$A/4U1.04U%``!A;6EG
+M80!.24PZ`````)LP('$``$9A:6QE9"!T;R!I;FET:6%L:7-E($DO3P``86UI
+M9V$@<W!E8VEF:6,@97)R;W(``````?!5;FMN;W=N(&5R<F]R`&YO="!O=VYE
+M<@!N;R!S=6-H(&9I;&4@;W(@9&ER96-T;W)Y`&YO('-U8V@@<')O8V5S<P!I
+M;G1E<G)U<'1E9"!S>7-T96T@8V%L;`!I+V\@97)R;W(`;F\@<W5C:"!D979I
+M8V4@;W(@861D<F5S<P!A<F=U;65N="!L:7-T('1O;R!L;VYG``!E>&5C(&9O
+M<FUA="!E<G)O<@!B860@9FEL92!N=6UB97(`;F\@8VAI;&0@<')O8V5S<P``
+M;F\@;6]R92!P<F]C97-S97,`;F]T(&5N;W5G:"!M96UO<GD`<&5R;6ES<VEO
+M;B!D96YI960`8F%D(&%D9')E<W,`8FQO8VL@9&5V:6-E(')E<75I<F5D`&UO
+M=6YT(&1E=FEC97,@8G5S>0``9FEL92!E>&ES=',`8W)O<W,M9&5V:6-E(&QI
+M;FL`;F\@<W5C:"!D979I8V4``&YO="!A(&1I<F5C=&]R>0!I<R!A(&1I<F5C
+M=&]R>0``:6YV86QI9"!A<F=U;65N=```9FEL92!T86)L92!O=F5R9FQO=P!T
+M;V\@;6%N>2!O<&5N(&9I;&5S`&YO="!A('1Y<&5W<FET97(``'1E>'0@9FEL
+M92!B=7-Y``!F:6QE('1O;R!B:6<``&YO('-P86-E(&QE9G0@;VX@9&5V:6-E
+M`&EL;&5G86P@<V5E:P``<F5A9"UO;FQY(&9I;&4@<WES=&5M`'1O;R!M86YY
+M(&QI;FMS``!B<F]K96X@<&EP90!M871H(&%R9W5M96YT`')E<W5L="!T;V\@
+M;&%R9V4``$DO3R!S=')E86T@96UP='D``&9I;&4@;F%M92!T;V\@;&]N9P``
+M9&ER96-T;W)Y(&YO="!E;7!T>0!T;V\@;6%N>2!S;V9T(&QI;FMS("AL;V]P
+M/RD````""@```A@```(B```"/````DP```)D```";@```H@```*@```"L@``
+M`L(```+4```"Y@```O@```,*```#%@```RP```-````#3````UX```-N```#
+M?@```XX```.@```#M````\@```/:```#Z@```_@```00```$'@``!#0```1$
+M```$4```!%X```1P```$@@``!)8```2J````)@``9&]O<BXE;'@N)6QX``!.
+M;R!M96UO<GD```!````@("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@
+M($@0$!`0$!`0$!`0$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!
+M`0$!`0$!`0$!`0$!`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("
+M`@(0$!`0(```````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````/H```!JX```````````````````````````````````````````;0
+M````````````````````````````````````````````````````````````
+M```````````````````````````````"````@``````-__\````.``X`````
+M``````````#__P````0`!````````$Q"```'`/__````!``$````````3%@`
+M`````````````^P````(````````!S0```<@````0@```!H````6````$@``
+M``X````*````+@````$```<D```&K@``!HP```5>```%6@``!58```52```%
+M3@``!4H```5&```%0@``!3X```4Z```%-@``!3(```4N```%*@``!28```4B
+M```%'@``!1H```46```%$@``!0X```4*```%!@``!0(```3^```$^@``!/8`
+M``3R```$[@``!.H```3F```$X@``!-X```3:```$U@``!-(```3.```$R@``
+:!,8```(&````X````-0```!@`````````_+:
+`
+end
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/getstack.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/getstack.uue
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/getstack.uue Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/getstack.uue Sat Sep 28 00:00:00 1996
@@ -0,0 +1,8 @@
+begin 666 getstack
+M```#\P`````````!```````````````G```#Z0```"=93TCG(!Y)^0````"3
+MR2QX``1.KO[:*D!#^@!P<"4L>``$3J[]V"9`2H!G-B(M`*SE@2]!`!0@;P`4
+M(B@`-.6!+P%!^@!2(@@L2R0/3J[\1D_O``0B2RQX``1.KOYB<`!@`G`43-]X
+M!%A/3G4D5D52.B!G971S=&%C:R`Q+C`@*#(Q+C,N.3,I``!D;W,N;&EB<F%R
+,>0`E;&0*``````/R
+`
+end
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/grep.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/grep.uue
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/grep.uue Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/grep.uue Sat Sep 28 00:00:00 1996
@@ -0,0 +1,1028 @@
+begin 666 grep
+M```#\P`````````"``````````$``"F2```+:@```^D``"F22.=^_B1()`!)
+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
+M#W(!X:K"P83G5.^AFH("\`!%E/2.<!%B]``!!^`&`N("T`%$ZZ&/XF0$J`
+M9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL>``$3J[_+B!L+80L>``$3J[^
+MC"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`<`'OH"P`<`F^@&8&<`!.N@L4
+M("PM',"&9P:-K"T@8'HJ!D:%RZPM($J':V9P(+Z`;&`@!^>`0>PL'"IP"``P
+M?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X48!G-&`*2&P&0$ZZ^?Q83W``
+M3KH*MF`@(`UG'"`'YX`H!D'L+!R(L`@$B:PM'"`'3I5&A,FL+1P@+"T@P(9F
+MBDS?(/!.=2`O``0O#B(L+!B"@'``+'@`!$ZN_LXL7TYU("\`!"\.(@`@+"P8
+M@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A`/X02H!G"'P!<`YA`/\,(`=A
+M`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!<`-A`/[H(`=A`/Z&2H!G"'P!
+M<!1A`/[6(`9,WP#`3G4@+P`$+P<I0`R$<`@N'V``_KQP`&$`_V!@DV2.<!
+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
+M9P@,$``M9@1V`5)($!@$```P;1H,```);A0D`>6!TH+2@4H#9@32@BDH!@
+MWB*!(`B0BE.`3-\$#$YU(&\`!"\-*D@(+0`#`!MF,"`L#"Q.N@4.*T``!"M`
+M`!!F"G`,*4`M3'#_8!8K;`PL`!1P\\&M`!A"K0`,0JT`"'``*E].=0``(&\`
+M!$CG(!0J2"9-8"!P`!`30>P*O0@P``$(`&<*<@`2`'0@DH)@!'(`$@`6P4H3
+M9MP@#4S?*`1.=0``GOP`4$CG,39#^@"$<``L>``$3J[]V"I`2H!F!G`43KKL
+MJGX`(&P,K!XH__\@!T/O`!Q@`A+84X!D^D(W>!Q![P`<*4@,1$/L#$Q'[`Q@
+M+$V1R)7*<``B`'1]U()V*$ZN_J1P%$ZZ[&1,WVR,WOP`4$YU*BH@4W1A8VL@
+M3W9E<F9L;W<@*BH``$58250``&EN='5I=&EO;BYL:6)R87)Y`$J`:@``'D2`
+M2H%J```,1(%A```@1(%.=6$``!A$@$2!3G5*@6H```Q$@6$```9$@$YU+P)(
+M030!9@``(DA`2$%(0C0`9P``!H3!,`)(0#0`A,$P`DA",@(D'TYU+P-V$`Q!
+M`(!D```&X9E10PQ!"`!D```&Z9E90PQ!(`!D```&Y9E50TI!:P``!N.94T,T
+M`.:H2$)"0N:J2$.`P38`,`(T`TA!Q,&0@F0```930]"!<@`R`TA#Y[A(0,%!
+M)A\D'TYU``!(YW``)`!G($J!9@1"@&`8)@#&P4A"Q,%(0D)"UH)(0<#!2$!"
+M0-"#3-\`#DYU```@+`RH!$`!]"Y`3OK^8```(&\`!"`(2AAF_%-(D<`@"$YU
+M```@;P`$("\`"+`09PA*&&;X<`!.=2`(3G4@;P`$(F\`""`O``Q*@&<04X`2
+M&+(99@Q*`6<$4X!J\G``3G5N!'#_3G5P`4YU```@;P`$(F\`"!(8LAEF"$H!
+M9O9P`$YU;@1P_TYU<`%.=2)O``@@;P`$("\`#"((8`00V6<(4X!D^&`&0AA3
+M@&3Z(`%.=2)O``@@;P`$("\`#"((2H!O%K')90S3P-'`$2%3@&;Z8`80V5.`
+M9OH@`4YU(&\`!"`O``A(YP,4+@`J2&82(`UF!'``8&@@34ZZ`&YP`&!>(`UF
+M"B`'3-\HP$[Z`@`F356+,#Q__\!32,#E@"P`"!,`#V<,#&N``/_^9@0L*__R
+M(`=.N@'8)D!*@&8$<`!@'KR'8P0@!V`"(`8@32)+8`(2V%.`9/H@34ZZ``X@
+M"TS?*,!.=2!O``0@"&8"3G59@$CG/#(B+"V,9@XI?````!8M3$S?3#Q.=2)!
+ML(%O$B0!U*D`!`:"````%+"";`)@""(I``!GU@)@$&@P```!"P@VW&9Q(D
+M0T*"-"H``FNZY8K6@EB#8.@D0#0J``!JJ@BJ``<``$*#-BH``@)#?__EBTIJ
+M``)K0$?R.`1*:P``:S9"A#@K``("1'__Y8S8@UB$Y(Q8@TIK``)J!`!$@``U
+M1``":Q(J!.6,-#)(!`)"@`"*0C6%2`1"A#@J``!G3.6,1(1'\DC\2FL``&L^
+M0H0X*P`"Y8Q"A3HJ``("17__Y8W8A5B$6(/DC$IJ``)J!`!$@``W1``":Q(J
+M!.6,-#-(!`)"@`"*0C>%2`37J0`()BD`!+:L"KAN#+:I``AF.DJI``!G-"`L
+M+8P@0+*`9@PI:0``+8Q@$"!H``"RJ```9O8A:0`````@*0`$!H`````4+'@`
+M!$ZN_RY,WTP\3G4@+P`$(B\`"$CG#`1.NOSR*@!.N@`H*D!*@&8$<`!@$'@`
+M8`9"-4@`4H2XA67V(`U,WR`P3G4``"`O``1*@&8,*7P````6+4QP`$YU2.<^
+M,E:``H#____\#(```?_\;@``N+"L"KAN``"P)BPMC&<``*@B0["I``AN,B(L
+M+9"RJ0`,9BA%Z0`02E)K$$*$."H``@)$?__EC+"$;QI"A#@J``)K".6,1?)(
+M!<)BD``&=F(D-@O@CJ``<``$?R"`1"A;"$9SPL!)R`689F!"`$8##DCDIJ
+M``)J!`!&@``J`.2--T8``C=%```U10`">@1*1FL.-#)(!`)"@`",0C6&2`0F
+M*0`(EH"6A2-#``@@"EB`3-],?$YU*@"PK`JX:@0@+`JX*``&@````!0B+"V0
+M+'@`!$ZN_SI*@&8**7P````,+4Q@S")`1>D`$"-L+8P``"E)+8PC1``$(VPM
+MD``,)@26A6<H68-G)"-#``A'\E@$-7R`````Y(TU10`"-T4``.2+`$.``#=#
+M``)@%$*I``@U?(````#DC`!$@``U1``"(`I8@$S?3'Q.=2!O``0@+P`((B\`
+M#")O`!!93TCG#S8L`2X`*D@O20`@<`&^@&,``+(F3=?&(`=5@&8D+PLO#2!-
+M(DLL;P`H3I903TJ`;P``DB`&($TB2TZZ]Z1@``"$(`?BB"(&3KKZ]B)-T\`@
+M!B!-3KKWBB1->@!X`6`J+PTO"R!+(DTL;P`H3I903TJ`:A)2A=7&M<MG"B`&
+M($LB2DZZ]US7QE*$N(=ETK7-9PH@!B!-(DI.NO=&)F\`("`%(@8@32)+80#_
+M4B!*T<8@!Y"%4X`B!B)+3-]L\%B/8`#_.DS?;/!83TYU3OKO9D[Z[UX@+P`$
+M2.<!!"X`*FP,=&`((&T`!$Z0*E4@#6;T2^P+Q'`&P*T`&%6`9A@@+0`$D*T`
+M$&<.(BT`'"!M`!#!04ZZ[IP@32I0(`UFUB`'3-\@@$[ZY8`@;P`$0JPMG"E(
+M+:!(;P`,+R\`#$AL+9Q!^@`00_H`+$ZZ$K1/[P`,3G5#["V<4IEP`"!1$!@B
+MB'+_(LA*@&<"(@`@`4YU("\`!%E/+H!3K"V<4ZPMH%A/3G4``"`O``0@;P`(
+M+PTB`"I(4I5#[0`((!%2D1N!"`P@&0R````"`&T40>T`#")M``1R`<%!3KH#
+MU$*M``@J7TYUGOP"#"\-*F\"%$*O``Q"KP`$+TT`"$AO`APO+P(<0?K_JD/O
+M``Q.NA-V4$\@+P`,9Q!![P`0(F\`"'(!P4%.N@.*""T`!0`;9@@(+0`$`!MG
+M!'#_8`0@+P`$*E_>_`(,3G4O#2(`*DA#U5*9(!%2D1N!"`@@&0R````"`&T2
+M0>T`"$/L"^9R`4ZZ`T!"K0`$*E].=9[\`@A"KP`$0I=(;P(0+R\"$$'Z_[I#
+M[P`(3KH2[E!/("\`!&<00>\`"$/L"^9R`<%!3KH#`G`PP*P+_F<$</]@`B`7
+MWOP""$YU("\`!"!O``A93TCG`P0N`"I(?``?0``/<D'2@<*M`!AF#`CM``4`
+M&W#_8``!0'`SP*T`&%6`9U!P3$8`P*T`&')`TH&P@68,".T``0`;0JT`#&`T
+M""T`!0`;9P9P_V```0QP;D8`P*T`&')N1@&P@68,".T``0`;0JT`#&`*<``K
+M0``,8```YB`M``RPK0`4;#(@;0`$4JT`!"`'$(!2K0`,""T`!@`;9PYR"KZ!
+M9@@@34ZZ`V@L`$J&9P``JB`&8```J@@M``(`&V<N0JT`#"`M`!Q![P`/<@%.
+MNNPT+`!2@&8(".T`!0`;8'(@!E.`9VP([0`$`!M@9$JM`!1F("!-3KKUN$J`
+M9PH([0`%`!MP_V!8<``K0``,*VT`$``$("T`#+"M`!1M""!-3KH"[BP`".T`
+M`0`;(&T`!%*M``0@!Q"`4JT`#`@M``8`&V<.<@J^@68(($U.N@+"+`!*AF<$
+M(`9@!G(`$@<@`4S?(,!83TYU(&\`!%E/2.<!!"I(0>P+Q+O(9D1![`OF3KH"
+MC@@M``T`&F<T("T`'$'O``MR`4ZZ[-PN`&\*?@`>+P`+8``!($J'9@@([0`$
+M`!M@!@CM``4`&W[_8``!"%.M``AM$"!M``12K0`$<``0$&```/1P,\"M`!A3
+M@&<T<%Q&`,"M`!AR0-*!L(%F%`CM````&P@M``0`&V<6</]@``#&0JT`"`CM
+M``4`&W#_8```M@@M``(`&V=&0JT`"'X`'BT`($J'9PA"+0`@8```EB`M`!Q!
+M[P`+<@%.NNPV+@!O"'X`'B\`"V!Z2H=F"`CM``0`&V`&".T`!0`;?O]@9$JM
+M`!1F%"!-3KKT1$J`9PH([0`%`!MP_V!,(&T`$"M(``0@+0`<(BT`%"!M`!!.
+MNNOB*T``""X`;Q)3K0`((&T`!%*M``1^`!X08!A*AV8(".T`!``;8`H([0`%
+M`!M"K0`(?O\@!TS?((!83TYU(&\`!"`O``@B+P`,(F\`$%E/2.</$"P!+@`F
+M22](`!0@!B('3KKUGBH`>`!*AV<$2H9F!G``8```_'`PP*L`&&8*<$'0@,"K
+M`!AF#`CK``4`&W``8```WG`SP*L`&%6`9U!P3$8`P*L`&')`TH&P@68,".L`
+M`0`;0JL`#&`T""L`!0`;9P9P`&```*IP;D8`P*L`&')N1@&P@68,".L``0`;
+M0JL`#&`*0JL`#'``8```A$JK`!1F3`@K``(`&V9$($M.NO,<2H!G.@CK``4`
+M&W``8&`@;P`4$!@B:P`$$H!2JP`$4JL`#%.%4H0O2``4<@JP`68.""L`!@`;
+M9P8@2TZZ`#X@*P`,L*L`%&P$2H5NPDJ%;Q8@2TZZ`"8@*P`<(@4@;P`43KKI
+M#-B`(`0B!TZZ]`!,WPCP6$].=2!O``1(YP$$*D@@#6<``*!P0="`P*T`&&8L
+M(&T`$$/M``0BR$*90BT`('``(L`(+0`'`!MG!@BM````&PBM``0`&V```(I*
+MK0`49T0@+0`,:@9R`"M!``P@+0`,9R@B+0`<(&T`$,%!3KKHCBX`4H!F"`CM
+M``4`&V`,OJT`#&<&".T`!``;*VT`$``$0JT`#'`PP*T`&&82""T`!P`;9P9P
+M_,&M`!AP`&`D</]@('X`2^P+Q$JM`!AG#"!-80#_1DJ`9P)^_RI5(`UFZ"`'
+M3-\@@$YU(&\`!$CG`00J2'X`(`UG!B`M`!AF!'#_8$`(+0`!`!MG""!-3KK_
+M"BX`<`S`K0`89@Y*K0`49P@@;0`03KKU#D*M`!@@+0`<3KK/XE*'9P1*@&<$
+M</]@`G``3-\@@$YU(&\`!")O``@O;P`,``193TCG#Q0F;P`@*DDO2``8?@`L
+M+`PP>@!*JP`89P8@2TZZ_W1P`!`M``%R*Y"!9R!R-I"!9P93@&<$8"!\`'(K
+MLBT``E?`1`!(@$C`*@!@#'H!<&&P+0`"9@)\`'``$!5R89"!9PQR$9"!9QI;
+M@&<D8#9*A5;`<@&2``!!`0B,@7Y`X8]@*$J%5L!R`)(`D@",@6`:2H56P'(!
+MD@``00$``$$"`(R!8`9P`&```(`O+`PT+P8O+P`@3KK>($_O``PH`%*`9@1P
+M`&!B2H5G!@C'``=@,'``$!5R89"!9PQR$9"!9QI;@&<:8!H(QP`!2'@``B`$
+M<@!.NN?`6$]@!GX!8`)^`@@&``]F!`C'``^1R$OK`!`JR"K()T0`'"=(``0G
+M2``,)T@`""K'(`M,WRCP6$].=0``(&\`!")O``A13TCG`!1([P,```A+[`O$
+M8`0F32I3(`UG!DJM`!AF\B`-9AYP(DZZ]1PJ0$J`9@1P`&`>($TFB'`A<@`0
+MP5'(__PO#2!O``PB;P`03KK^=%A/3-\H`%!/3G4``"!O``0B;P`(+V\`#``$
+M+V\`$``(+V\`%``,+V\`&``0GOP`&$CG#S8F;P!$*DDO2``D)&\`2'X`?`!Z
+M`"`+9P9P`22`8`)"DG``(&\`)!`00>P*O0@P``((`&<P<`\@;P`DP!A(@$C`
+M(@?E@=*'TH'2@"X!+T@`)'``(&\`)!`00>P*O0@P``((`&;0(&\`)!`0<FRP
+M`6<4<FBP`68(4J\`)'P!8`QR3+`!9@92KP`D>@$O1@`P+T4`-$Z5*``@;P`D
+M$!!R8[`!9QYR;K`!9QAR6[`!9Q)@!$Z5*`!![`J]"#```T@`9O!P_[B`9@P@
+M;P!`((1P`&``!11P`"!O`"00$')8D(%G``'P5X!G``-D48!G``+T4X!G``#:
+M6X!G7EN`9R)3@&<``6)3@&<``;I7@&<``PY5@&<``)I7@&<``;A@``2V<``D
+M@"(+9P`$L"1O`#Q*AF802H5F#"!3(A)3@2"!8``$F"X24X<D4TJ&9P8TAV``
+M!(@DAV``!()Z`$J'9P9P`;Z`;QYP+;B`9P9R*[B!9A*X@&8$</]@`G``*@!.
+ME2@`4X=P,+B`9G!.E2@`0>P*O0@P``$(`&<((`1R()"!8`(@!')8L(%F``#4
+M8``!,'H`<"VX@&<&<BNX@68\N(!F!'#_8`)P`"H`3I4H`&`J>@!*AV<&<`&^
+M@&\><"VX@&<&<BNX@682N(!F!'#_8`)P`"H`3I4H`%.'0>P*O0@P``)(`&8,
+M(&\`0""$<`!@``/8?``@!'(/P($B!N6!TH;2@=*`+`%.E2@`4X=G#$'L"KT(
+M,``"2`!FVB`+9P`#G$J%:@)$AB132J\`-&<&)(9@``.(2J\`,&<&-(9@``-\
+M)(9@``-V<#"X@&T&<#>X@&\,(&\`0""$<`!@``-L?``@!'('P('GAMR`3I4H
+M`%.'9PQP,+B`;09P-[B`;^(@"V<``S@D4TJO`#1G!B2&8``#*DJO`#!G!C2&
+M8``#'B2&8``#&$J'9@)^"$*O`#!P`2]``#1Z`7`MN(!F!GK_3I4H`"1O`$`O
+M10`@0>P*O0@P``=(`&8()(1P`&```NPJ!$Z5*`!*AV<&<`*^@&\P<#"Z@&8J
+M<'BX@&<&<%BX@&8>3I4H`$'L"KT(,``'"`!F""2$<`!@``*R?`!3AV!H2H=G
+M!G`!OH!O+$7L"KW5Q0@2``)G!BP%<#"<@`@2``!G!BP%<#><@`@2``%G.BP%
+M<%><@&`R?`!@+NF&"!(``F<((`1R,)"!C(`($@``9P@@!'(WD(&,@`@2``%G
+M!G)7F(&,A$Z5*`!3AV<,1>P*O=7$"!(`!V;"(`MG``(@("\`(&H"1(8D4TJO
+M`#1G!B2&8``""DJO`#!G!C2&8``!_B2&8``!^"`+9QX@4U*3(`00@&`43I4H
+M`%*`9Q`@"V<((%-2DR`$$(!3AV[H</^X@&8``=`@;P!`((1P`&```<P@"V<&
+M(%-2DQ"$3I4H`%*`9Q!3AV<,0>P*O0@P``-(`&?>(`MG``&6(%-"$&```8Y2
+MKP`D<%X@;P`DL!!F#'P!4J\`)"!O`"1@`GP`+T@`+'!=L!!F'E*O`"1@&"!O
+M`"1*$&8,(F\`0"*$<`!@``%<4J\`)'!=(&\`)+`09MY*AF<``+`O;P`L`"A\
+M`&!X(&\`*!`0<BVP`69"2H9G/D7H``$B;P`DL\IG,BQ*>@`:$B].`"B\A6,&
+M(`8L!2H`N(9E0+B%8CP@"V<$(%-"$"!O`$`@A$'I``%@``#N<@`2`+*$9AHB
+M"V<$(E-"$2)O`$`BA")O`"12B2`)8```SGP`'!!2KP`H(&\`*+'O`"1F`/]^
+M(`MG!B!34I,0A$Z5*`!2@&<&4X=F`/]<(%-"$&```(PO;P`L`"A\`&!,(&\`
+M*!`0<BVP`68L2H9G*$7H``$B;P`DL\IG'")*>@`:$B])`"B\A6,&(`8L!2H`
+MN(9E!+B%8RA\`"!O`"@<$'``$!"PA&<84J\`*"!O`"BQ[P`D9JH@"V<F(%-"
+M$&`@(`MG!B!34I,0A$Z5*`!2@&<$4X=F@"!30A!@!'``8`X@;P!`((0@;P`D
+M4H@@"$S?;/#>_``83G4``"!O``0B;P`(+V\`#``$+V\`$``(GOP`-$CG+S8F
+M;P!@*F\`7$CO`P``+$(O`#M"+P`Z0B\`.4(O`#@??``@`#="KP!4</\O0`!0
+M0B\`-GX`?`!%[P`\8$IP`"!O`"P0$'(@D(%G(E>`9R91@&<258!G!E>`9R)@
+M,A]\``$`.V`>'WP``0`Z8!8??``!`#E@#A]\``$`.&`&'WP`,``W4J\`+"!O
+M`"Q*$&:N<`&P+P`[9@8??``@`#=R*B!O`"RR$&8>+&\`,")66)8B$2]!`%1L
+M"$2O`%0?0``[4J\`+&`,0^\`5$ZZZ'K1KP`L(&\`+!`0<BZP`69&4J\`+'`J
+M(&\`++`09APB;P`P(%%8D2`0+T``4&P&</\O0`!04J\`+&`60^\`4$ZZZ#@J
+M`&8&0J\`4&`$VZ\`+!]\`"``-W``(&\`+!`0<DR0@6<4<AR0@6<&68!G"F`2
+M'WP``@`V8`8??``!`#92KP`L(&\`+%*((F\`+!`1<@`2`!]``"0O2``F<%"2
+M@&<``1!1@6<``1QP"Y*`9P`!T%.!9U!;@6=,6X%G(E.!9P`!`E.!9P``ZE>!
+M9P`!@%6!9P``\%>!9P``ZF```;@D;P`P<`*P+P`V9@X@4EB2(E`@$S*`8``"
+M2B!26)(B4"*38``"/B)O`#`@45B1*!!J!'X!1(1*AV<,1>\`/1]\`"T`/&`B
+M2B\`.F<,1>\`/1]\`"L`/&`02B\`.6<,1>\`/1]\`"``/'P!(`0@2DZZYE(J
+M`"`O`%!F!DJ$9P`!Y"`O`%!J!G(!+T$`4"@O`%"8A6\<($K1Q"`%(DI.NNH<
+M<C`@2F`"$,%3A&3Z*B\`4-R%(`53@&8``000$K`O`#=F``#Z2J\`4&8``/)"
+M$F```.P@+P!0:@9P""]``%`??``!`#9P`K`O`#9F$")O`#`@45B1(!!X`#@`
+M8`HB;P`P(%%8D2@0$"\`)')UL`%G`/]:<F^P`68>2B\`.&<,1>\`/1]\`#``
+M/'P!(`0@2DZZY<)@`/\^2B\`.&<2'WP`,``\1>\`/A]\`'@`/7P"(`0@2DZZ
+MY=XJ``@O``4`)&8`_Q1![P`\3KKFRF``_P@B;P`P(%%8D210(`IF!$7Z`/(@
+M2DH89OQ3B)'**@@@+P!0:P2PA6\$+T4`4"PO`%!@('P!(F\`,"!16)$@$!]`
+M`#Q"+P`]8`9P`&```*Q%[P`\("\`5+"&;`AR`"]!`%1@!)VO`%1*+P`[9QY@
+M"'``$!H@2TZ54X9L]&`&($MP($Z54Z\`5&ST8&I*AV8,2B\`.68&2B\`.F=&
+M$!)R(+`!9PQT*[`"9P9T+;`"9C)*AFLNLB\`-V828`IP`!`O`#<@2TZ54Z\`
+M5&SP<``0&B!+3I53AF`*<``0+P`W($M.E5.O`%1L\&`(<``0&B!+3I53AFST
+M("\`)DS?;/3>_``T3G4``"!O``0B;P`(+V\`#``$+V\`$``(+V\`%``,GOP`
+M#$CG`S0J2"])`!1^`"9O`"Q@``$@0J\`&'P`(&\`*!P8)&\`%"](`"A#[`J]
+M"#$``V@`9@``VG`EO(!F``"H<"6P$&8@4J\`*$Z5+`!![`J]"#```V@`9O!P
+M);R`9P``U&```-IP*B!O`"BP$&<&)$M8BV`&E<I2KP`H0J\`'$AO`!@O"DAO
+M`"0O+P`P(&\`.")-3KKU'D_O`!`D0$J`5L%$`4B!2,$L`6<$+TH`*"`O`!QR
+M_["!9A!*AF<$WJ\`&$J';G@@`6!V("\`'&<,<@`2`"`!(&\`%$Z0(`IG7MZO
+M`!A@3DZ5+T``'"!O`!Q#[`J](`@(,0`#"`!FZ"`O`!R\@&<N<@`2`"`!3I)@
+M+DZ5+T``'"!O`!Q#[`J](`@(,0`#"`!FZ"`O`!QR`!(`(`%.DB!O`"A*$&8`
+M_MH@!TS?+,#>_``,3G4``"!O``0B;P`(+V\`#``$+V\`$``(GOP`#$CG`!0F
+M22I(+V\`'``08#AP);`O``QF)B!O`!BP$&8&4J\`&&`8+PLO#4/O`!A.NOHL
+M4$]*@&<&+T``&&`*<``0+P`,($M.E2!O`!@0&!]```PO2``82@!FMDS?*`#>
+M_``,3G4@;P`$((A8D$*H``0A2``(3G4``"!O``1(YP`&*DA*K0`*9PHB32QX
+M``1.KOZ8&WP`_P`(</\K0``4<``0+0`/+'@`!$ZN_K`B37`B3J[_+DS?8`!.
+M=0``(&\`!"`O``A(YP,6+@`J2'#_+'@`!$ZN_K8<`$B&2,8@!E*`9@1P`&!@
+M<"(B/``!``%.KO\Z)D!*@&8((`9.KOZP8$1!ZP`*(,T71P`)%WP`!``(0A@0
+MQI/)3J[^VB=``!`@#6<((DM.KOZ>8!I!ZP`8)T@`%$'K`!0G2``<0JL`&!=\
+M``(`("`+3-]HP$YU+P@O`$ZY``!:5E!/3G4``"`O``0@;P`((F\`#"(O`!!*
+M@&8:+P$O"2\(2'H`%$AL#`A.NNK>WOP`%$[ZVZQ.=4%S<V5R=&EO;B`H)7,I
+M(&9A:6QE9"!I;B!F:6QE("5S(&%T(&QI;F4@)60*`````````^P````-````
+M````I=X``#&.```Q<```,78``#&"```QB```,7P``#%J```Q7@``,60```)N
+M```"8@```F@````"`````0```!0````*`````````_(```/J```#'DUE;6]R
+M>2!E>&AA=7-T960``&X@(3T@,```9&9A+F,`365M;W)Y(&5X:&%U<W1E9```
+M;B`A/2`P``!D9F$N8P!-96UO<GD@97AH875S=&5D``!5;F9I;FES:&5D(%P@
+M<75O=&4``%5N9FEN:7-H960@7"!Q=6]T90``56YB86QA;F-E9"!;``!5;F)A
+M;&%N8V5D(%L``%5N8F%L86YC960@6P``56YB86QA;F-E9"!;``!5;F)A;&%N
+M8V5D(%L``%5N8F%L86YC960@6P``56YB86QA;F-E9"!;``!5;F)A;&%N8V5D
+M(%L``%5N8F%L86YC960@6P``56YB86QA;F-E9"!;``!5;F)A;&%N8V5D("@`
+M`$YO('-Y;G1A>"!S<&5C:69I960`56YB86QA;F-E9"`I``!O=70@;V8@;65M
+M;W)Y`````````````````$EN=F%L:60@<F5G=6QA<B!E>'!R97-S:6]N``!5
+M;FUA=&-H960@7"@``%5N;6%T8VAE9"!<*0``4')E;6%T=7)E(&5N9"!O9B!R
+M96=U;&%R(&5X<')E<W-I;VX`3F5S=&EN9R!T;V\@9&5E<```4F5G=6QA<B!E
+M>'!R97-S:6]N('1O;R!B:6<``$UE;6]R>2!E>&AA=7-T960`````!]!.;R!P
+M<F5V:6]U<R!R96=U;&%R(&5X<')E<W-I;VX``$UE;6]R>2!E>&AA=7-T960`
+M`$UE;6]R>2!E>&AA=7-T960``````````````````5!/4TE83%E?0T]24D5#
+M5``M+0``)7,Z(&]P=&EO;B!@)7,G(&ES(&%M8FEG=6]U<PH`)7,Z(&]P=&EO
+M;B!@+2TE<R<@9&]E<VXG="!A;&QO=R!A;B!A<F=U;65N=`H``"5S.B!O<'1I
+M;VX@8"5C)7,G(&1O97-N)W0@86QL;W<@86X@87)G=6UE;G0*```E<SH@;W!T
+M:6]N(&`E<R<@<F5Q=6ER97,@86X@87)G=6UE;G0*`"5S.B!U;G)E8V]G;FEZ
+M960@;W!T:6]N(&`M+25S)PH`)7,Z('5N<F5C;V=N:7IE9"!O<'1I;VX@8"5C
+M)7,G"@`E<SH@=6YR96-O9VYI>F5D(&]P=&EO;BP@8VAA<F%C=&5R(&-O9&4@
+M,"5O"@``)7,Z('5N<F5C;V=N:7IE9"!O<'1I;VX@8"TE8R<*```E<SH@;W!T
+M:6]N(&`M)6,G(')E<75I<F5S(&%N(&%R9W5M96YT"@`````E<SH@365M;W)Y
+M(&5X:&%U<W1E9"`H)7,I"@``)7,Z($UE;6]R>2!E>&AA=7-T960@*"5S*0H`
+M`"5S.B!R96%D(&]N("5S(&9A:6QE9"`H)7,I"@`\<W1D:6X^`"5S)6,``"5D
+M)6,``"5D)6,```````$M+2TM+2TM+2TM"@`M+2TM+2TM+2TM"@`M+2TM+2TM
+M+2TM"@!5<V%G93H@)7,@6RU#5F)C:&EL;G-V=WA=(%LM;G5M72!;+4$@;G5M
+M72!;+4(@;G5M72!;+68@9FEL95T*("`@("`@(%LM95T@97AP<B!;9FEL92XN
+M+ET*`$=.52!E/V=R97`L('9E<G-I;VX@,2XV```P,3(S-#4V-S@Y03I".D-6
+M8F-E.F8Z:&EL;G-V=W@``"5D```E9```)7,*`"5S.B!G971O<'0H,RD@;&5T
+M(&]N92!B>2$*``!R`"5S.B`E<SH@)7,*`%PH7EQ\6UY!+5IA+7I?75PI7"@`
+M7EPH`%PI7"A;7D$M6F$M>E]=7'PD7"D`7"DD`$U54U1$14)51P!M=7-T(&AA
+M=F4Z("(E<R(*```E<SH@)7,Z("5S"@`E<SHE9`H``"5D"@`E<PH`)60*`#QS
+M=&1I;CX*```E<SH@)7,*`$]K```````4```````````````````%B&-O;G-O
+M;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R>0```'1I;65R+F1E=FEC90``
+M``#_____9FEF;RYL:6)R87)Y```````````````````%Z``!```````````%
+MZ@```````````````$`H(REA;&QO8V$N8PDQ+C$```````````````!&86EL
+M960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=````````$YO(&UE
+M;6]R>0```&$`1F%I;&5D('1O(&-R96%T92!T:6UE<@``3DE,.@``3DE,.@``
+M3DE,.@``*@!.24PZ``!);G9A;&ED('=I;&1C87)D("5S`$5R<F]R(&5X<&%N
+M9&EN9R!A<F=U;65N=',`55-%4@``=7-E<@``55-%4DY!344``$A/344``',Z
+M``!32$5,3`!B:6XZ<V@``$A/4U1.04U%``!A;6EG80!.24PZ`````)LP('$`
+M`$9A:6QE9"!T;R!I;FET:6%L:7-E($DO3P``86UI9V$@<W!E8VEF:6,@97)R
+M;W(`````!RA5;FMN;W=N(&5R<F]R`&YO="!O=VYE<@!N;R!S=6-H(&9I;&4@
+M;W(@9&ER96-T;W)Y`&YO('-U8V@@<')O8V5S<P!I;G1E<G)U<'1E9"!S>7-T
+M96T@8V%L;`!I+V\@97)R;W(`;F\@<W5C:"!D979I8V4@;W(@861D<F5S<P!A
+M<F=U;65N="!L:7-T('1O;R!L;VYG``!E>&5C(&9O<FUA="!E<G)O<@!B860@
+M9FEL92!N=6UB97(`;F\@8VAI;&0@<')O8V5S<P``;F\@;6]R92!P<F]C97-S
+M97,`;F]T(&5N;W5G:"!M96UO<GD`<&5R;6ES<VEO;B!D96YI960`8F%D(&%D
+M9')E<W,`8FQO8VL@9&5V:6-E(')E<75I<F5D`&UO=6YT(&1E=FEC97,@8G5S
+M>0``9FEL92!E>&ES=',`8W)O<W,M9&5V:6-E(&QI;FL`;F\@<W5C:"!D979I
+M8V4``&YO="!A(&1I<F5C=&]R>0!I<R!A(&1I<F5C=&]R>0``:6YV86QI9"!A
+M<F=U;65N=```9FEL92!T86)L92!O=F5R9FQO=P!T;V\@;6%N>2!O<&5N(&9I
+M;&5S`&YO="!A('1Y<&5W<FET97(``'1E>'0@9FEL92!B=7-Y``!F:6QE('1O
+M;R!B:6<``&YO('-P86-E(&QE9G0@;VX@9&5V:6-E`&EL;&5G86P@<V5E:P``
+M<F5A9"UO;FQY(&9I;&4@<WES=&5M`'1O;R!M86YY(&QI;FMS``!B<F]K96X@
+M<&EP90!M871H(&%R9W5M96YT`')E<W5L="!T;V\@;&%R9V4``$DO3R!S=')E
+M86T@96UP='D``&9I;&4@;F%M92!T;V\@;&]N9P``9&ER96-T;W)Y(&YO="!E
+M;7!T>0!T;V\@;6%N>2!S;V9T(&QI;FMS("AL;V]P/RD````'0@``!U````=:
+M```'=```!X0```><```'I@``!\````?8```'Z@``!_H```@,```('@``"#``
+M``A"```(3@``"&0```AX```(A```")8```BF```(M@``",8```C8```([```
+M"0````D2```)(@``"3````E(```)5@``"6P```E\```)B```"98```FH```)
+MN@``"<X```GB````)@``9&]O<BXE;'@N)6QX``!.;R!M96UO<GD```!````@
+M("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0$!`0
+M$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!`0$!
+M$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0(```````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````````/H```"^8`````
+M``````````````````````````````````````P(````````````````````
+M````````````````````````````````````````````````````````````
+M```````````"````@``````-__\````.``X```````````````#__P````0`
+M!````````(EV```,./__````!``$````````B8P``````````````^P````"
+M````````#&P```Q8````+@````$```Q<```+Y@``"\0```J6```*D@``"HX`
+M``J*```*A@``"H(```I^```*>@``"G8```IR```*;@``"FH```IF```*8@``
+M"EX```I:```*5@``"E(```I.```*2@``"D8```I"```*/@``"CH```HV```*
+M,@``"BX```HJ```*)@``"B(```H>```*&@``"A8```H2```*#@``"@H```H&
+@```*`@``"?X```<^```%_```!?````6<`````````_(2
+`
+end
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/ls.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/ls.uue
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/ls.uue Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/ls.uue Sat Sep 28 00:00:00 1996
@@ -0,0 +1,929 @@
+begin 666 ls
+M```#\P`````````"``````````$``".[```$S````^D``".[2.=^_B1()`!)
+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
+MNB^2<``@;"GD$"@`#W(!X:K!.@3G5.^B_D("\`!%E/2.<!%B]``!!^`&`N
+M("T`%$ZZ+SHF0$J`9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL>``$3J[_
+M+B!L*>0L>``$3J[^C"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`<`'OH"P`
+M<`F^@&8&<`!.N@L4("P4I,"&9P:-K!2H8'HJ!D:%RZP4J$J':V9P(+Z`;&`@
+M!^>`0>P3I"IP"``P?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X48!G-&`*
+M2&P(@$ZZ^'!83W``3KH*MF`@(`UG'"`'YX`H!D'L$Z2(L`@$B:P4I"`'3I5&
+MA,FL%*0@+!2HP(9FBDS?(/!.=2`O``0O#B(L$Z""@'``+'@`!$ZN_LXL7TYU
+M("\`!"\.(@`@+!.@@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A`/X02H!G
+M"'P!<`YA`/\,(`=A`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!<`-A`/[H
+M(`=A`/Z&2H!G"'P!<!1A`/[6(`9,WP#`3G4@+P`$+P<I0!&H<`@N'V``_KQP
+M`&$`_V!@DV2.<!%'X`2^P3I#9\``$JBT*M``12AU"-<""^@&WP0JP4J$*L
+M%*1"K!.@80#]U&$`_>IA`/VB3-\H@&``_?AA`/VX8`#^"```2&P(E$ZZ]TQ8
+M3TYU("\`!"\-3KI,="I`2H!F`F'B(`TJ7TYU(&\`!"`O``@O"TZZ2F@F0$J`
+M9@)AQB`+)E].=2!O``0O#2I((`UF!$OL")X@34H89OQ3B)'-(`A2@$ZZ3"@@
+M0$J`9@1P`&`((D@2W6;\(`@J7TYU64](YP,T?@!\`"!L%+`F:`#08"Q**P`(
+M9B0P/`4`P&L`#F8:4H<@:P`*(`A*&&;\4XB1P"`(W(#<JP`45(8F4TJ39M`@
+M!U*`Y8#0AF$`_THI0!3(Y8<@0")`T\=%Z0`$+T``%&8*0>P(D"E(%,A@5B!L
+M%+`J:`#08$)*+0`(9CHP/`4`P&T`#F8P)FT`"BXM`!0@;P`4(,HO2``48`(4
+MVTH39OH4_``])FT`$&`"%-L@!U.'2H!F]D(:*E5*E6:Z(&\`%$*03-\LP%A/
+M3G4@;P`$("\`""\-*D@J@$*M``3E@&$`_K0K0``(*E].=2!O``0B;P`(("\`
+M#$CG(C0F22I(2H!G"B!+80#^PB1`8`(D2R`*9SXB%20M``2T@6TB+`'<AG00
+MTH*\@6T"(@8J@2`!Y8`@;0`(3KI(YBM```AG$D?M``0B$U*;Y8$@6R&*&`!P
+M`4S?+$1.=2!O``0B;P`(("\`#&&22H!F!&$`_AI.=2!O``0B;P`(2.<`%"9)
+M*D@@+0`$T*L`!+"5;Q+0@"J`Y8`@;0`(80#^&BM```@B+0`$Y8$@;0`(T<$@
+M*P`$(@#E@2)K``A@`A#94X%D^M&M``0@:P`(3-\H`$[Z2-8@;P`$(F\`""]O
+M``P`!"`O`!`B+P`464](YP(T+`$J221(+T@`$$J`9T13@&<*4X!G``"V8```
+M]%.&9R(@+P`8(@V0@2!O`!!",`@`($$B;P`08`(2V%.`9/I@``#.0>P(H")O
+M`!`2V&;\8```OB9O`!A@;G!<L!5F9DHM``%G8%2-<`&\@&8&%/P`86!4(`95
+M@&9&$"W__TB`2,!R(Y"!9RY5@&<J58!G)E.`9R)3@&<>4X!G&G(5D(%G%'(<
+MD(%G#E6`9PIR'Y"!9P15@&8$%/P`)Q3M__]@"!3M__]@`A3=N\MECF!`)F\`
+M&&`V<"JP%68N2BT``6<H5(T0+?__2(!(P')ED(%G#'()D(%F#!3\``I@#A3\
+M`!M@"!3M__]@`A3=N\MEQD(23-\L0%A/3G6>_`$L2.<_-BIO`5@@;!'$#&@`
+M)0`49`I(>``43KK)OEA/0JP1#'`!*4`1""E`$2YP`BE`$2HI0!%0*7P```"$
+M$4R3R2QX``1.KO[:*4`4L$ZZ\YPI0!2T9@I(;`BB3KKS>%A/(&P4M$ZZ]"PI
+M0!2X+&P4M"!6+&@`%"E.%,1![P$P3J[_OBEO`3`4O$ZZ])1.NONL(&P4L"`H
+M`*QG$.6`(D`B*0`TY8$I013`8`8I:`"$%,!*%68``.A![`BZ(@@L;"H4)#P`
+M``/N3J[_XBP`0>P(P"((3J[_XBX`0>P(QB((3J[_XBH`2H9G"$J'9P1*A68B
+M2H9G!B(&3J[_W$J'9P8B!TZN_]Q*A6<&(@5.KO_<80#[<G`!+P`O!2\`+P<B
+M!L%!3KHC6"!L$<@@*``<0>\!6&$`_)Y/[P`0?`!^`&!0(FP1R"!I`"0@,'@`
+M9SXB`$/O`#`D"2QL*A1V0.6+3J[^;DJ`9R8B;!'((&D`)-''("@`!&<((@(D
+M`$ZN_(Y![P%(0^\`,'`!80#\V%*&4(<@;!'(O*@`'&VF8``"S"QL*A1.KO_*
+M*`!.KO_$*@!^`"!L%+`L*`#@9BA^`4'L",PB""0\```#[4ZN_^(L`&820>P(
+MSB((3J[_XBP`9@1A`/JD+P<O!G``+P`O!2($P4%.NB**0>\!6'`!80#[UB`\
+M```%&F$`^HX@0#%\!```$B]``#QP0.6(80#Z>D_O`!!^0.6/+T`!.&`"4HT0
+M%4B`2,!![`_I"#```P@`9NP0%6<``A9R(K`!9C!2C29-8!!P*K`59@A*+0`!
+M9P)2C5*-$!5G!G(BL`%FYB1-$!5R(K`!9@)2C7P"8%1P)[`59B!2C29-8`)2
+MC1`59P9R)[`!9O0D37`GL!5F`E*-?`%@+B9-8!!P7+`59@A*+0`!9P)2C5*-
+M$!5G$G(@L`%G#'(*L`%G!G()L`%FVB1-?``@2RH*FHL@!5*`+T@`*&$`^;8F
+M0$JO`4QF("`%($LB;P`H3KI#WD(S6`!![P%((DMP`&$`^V!@`/\FVH5R$-J!
+MNH=O%"!O`3A.ND2((`5A`/EV+@4O0`$X+PH@!B!+(F\`+'(!80#[KEA/(@LD
+M+P$X)@<L;"H43J[\N"H`;!!"$B\O`"A(;`C43KKP?E!/2H5F(B\*(`8@2R)O
+M`"QR`&$`^W1![P%,(DMP`&$`^NA83V``_JQZ`2!O`"Q"J``(0B@`$4(H`!`O
+M"B`&($LB;P`L<@)A`/M`0>\!0'`080#Z)EA/(@LD+P`L+&PJ%$ZN_,HH`&8\
+M8"IZ`")O`"S2_`$80>\!/'`!80#Z($J`9@1X9V`2(B\`+"QL*A1.KOS$*`!*
+MA&?2(B\`+"QL*A1.KOR^<'30@+B`9PI(;`CH3KKOREA/2H5G(B\*(`8@2R)O
+M`"QR`&$`^L!![P%,(DMP`&$`^C183V``_?@@+P%`(&\!1$ZZ/AI![P%(0^\!
+M/&$`^BH@2TZZ0TY@`/W6(&\!.$ZZ0T(@;P`L3KI#.F$`^))![`D"3KHC5BE`
+M"`AF"$'L"0@I2`@(0>P)#DZZ(T`I0`@<9@8I;`@("!Q![`D83KHC+"E`""!F
+M"$'L"1XI2`@@0>P)(DZZ(Q8I0`@D9@A![`DH*4@()$'L"3!.NB,`*4`4S&8(
+M0>P).BE(%,P@+P%,(&\!4")L%,A.NE&^<`!.ND:T3-]L_-[\`2Q.=2`O``1(
+MYP,`+@!*K!309P0@!V!@?``@!P*````!)&<"?`@(!P`'9P0`1@`%"`<`!&<$
+M",8``@@'``%G!`C&```(!P`#9P0(Q@`!"`<``&<$",8`!B`'<DG`@7)`L(%F
+M!`!&`$((!P`)9P0(Q@`%(`8*0``/3-\`P$YU("\`!$CG!@`L`$JL%-!G""`&
+M`D`/_V!>>@`*1@`/"`8``V<$>DGEC2`&<@7`@5N`9@0(Q0`'"`8``F<$",4`
+M!`@&``!G!`C%``$@!G)"P(%G!`C%``8(!@`!9P0(Q0`#"`8`!F<$",4```@&
+M``5G!`C%``D@!4S?`&!.=0``2.<#`$ZZ\7HN`'P`8`HO!DZZ[^)83U*&O(=M
+M\DS?`,!.=2`O``0O!RX`8=1.NN]63KKV6"!L%+1.NNX4+P=.NL.J6$\N'TYU
+M("\`!"\'+A]@U```("\`!"(O``@@;P`,44](YP,D+`$N`"I(3KKUU"`'3KKP
+MV$J`9QHB0"!I`"`O2``4(`8@:0`$(DTD;P`43I)@`G#_3-\DP%!/3G4``)[\
+M``Q(YR\V*F\`-'X#SJ\`.'P!(&P4L"9H`+@J/````^Q.NO5^2H=G"G`"OH!G
+M!'(`8`)R`2]!`"AP`;Z`9PA5AV<$<`!@`G`!+T``+"!-0^P)0$ZZ.Z)*@&8&
+M>/]@``%4</\@;!2P(4``N"(-+&PJ%'3^3J[_K"X`(&P4L"%+`+A*@&9X+&PJ
+M%$ZN_WQ.NB&,+``@+!&D<BY&`;"!9P1*@&8*?@$J/````^Y@%B`&58!F#`@O
+M``@`.F<$<`%@`G``+@!*AV<L?``(+P`(`#IG'`@O``\`.F<&>`)@``#6("\`
+M/$ZZ_88H`&```,AX_V```,(I1BFL</]@``%"0J<L;"H4<@(D#TZN_QQ/[P`$
+M)$!*@&<,(@<D"DZN_YI*@&86(`IG""0*<@).KO\63KHAYG#_8``!""@J`'0D
+M"G("3J[_%B('3J[_IG!0Z8C`KP`X#(````4`9@QP$2E`*:QP_V```-I*KP`H
+M9P8(!``#9@Q*KP`L9Q((!``"9PQP#2E`*:QP_V```+8(+P`)`#IG(B(-)#P`
+M``/N3J[_XDJ`9P@B`$ZN_]Q@"DZZ(6IP_V```(P(+P`(`#IG!"`%8`8@/```
+M`^TD`"(-+&PJ%$ZN_^(J`&8(3KHA/G#_8&`(+P`)`#IF!$J&9@0L!&`"?/]^
+M`$JO`"AG`GX!2J\`+&<$",<``0@O``,`.V<$",<``R\'(`4B!DZZ&SY83RX`
+M;!QP_R!L%+`A0`"X(@4L;"H43J[_W"!L%+`A2P"X(`=,WVSTWOP`#$YU(&\`
+M!"\O``PO+P`,+PAA`/VH3^\`#$YU(&\`!$CG.`!P_\`H``-R`!(`</_`*``"
+M=``4`'#_P"@``78`%@!P_\`0>``8`.&$B(/AA(B"X82(@2`$3-\`'$YU2.<C
+M-$OL%49![`ED1>P)5"3(0>P):"3(0JP)8$*:?@`L+!5.1^P<D&`\("L`!"(`
+MY8$@3='K``A#Z`?J1>P)5"6)&`!*@&<&<`$I0`E@2H=G!DJK``1F""`31(`I
+M0`E<4H?6_``0OH9MP'X`+"P52F`Z<``B!P:!```%V!`U&`!(P.F`($TB``:!
+M```'4M'U&``&@```!TXD-0@`Y8)#Z`?J1>P)5"6)*`!2A[Z&;<),WRS$3G4@
+M;P`$(F\`")[\"BA(YSLV+T@`*"])`"P@"&8(3>P);"].`"AP.B!O`"BP$&8$
+M4J\`*"!O`"AP.DZZ/"I*@&9.<`HB`"!O`"@@"$H89OQ3B)'`THA2@7!!LH!E
+M!G#_8``"3$'L"7A#[P`Q$MAF_$'O`#%#[`F$3KH\5$'O`#$B;P`H3KH\2$'O
+M`#$O2``H0J<O+P`L3KK^6E!/+@!2@&8&</]@``(((`=![P!R(CP```G:3KH>
+M`"P`(`=.NNM$2H!F!G`LO(!D!G#_8``!X$'O`(IA`/XX+@!![P".80#^+BIO
+M`"PJ@$'O`))A`/X@*T``!$'O`)9A`/X4*T``"$'O`)IA`/X(*T``#"(5:S!T
+M,K*";BHF+0`(;R1X"K:$;AXH+0`$:Q@,A````7)N$$J`:PRP@FX(MH=G"DJ'
+M9P9P_V```6K2@>6!("T`""0`U(+4@-2"("T`!"8`Y8/6@-:"UJT`#-:!UH=P
+M+-:`O(-D!G#_8``!.$?O`)Y\`"1-8!`@2V$`_8@E0``06(M2AEB*O*T`!&WJ
+M?`!@(!`;(@8&@0``!=@;@!@`<@`2`+*M``AM!G#_8```]E*&O*T`!&W:?`!!
+M[0=*)$@O2``D8$H@2V$`_3HD@$OK``40*P`$<@`2`"5!``1G"E.!9P9P_V``
+M`+Q'[0`!$!5R`!(`)4$`"&T**F\`++*M``QO!G#_8```G%*&U/P`$+RM``AM
+ML'P`8`X@!@:````'ZAN;"`!2AKRM``QM["`&!H````?J0C4(`'P`VOP('F`>
+M($MA`/R^*H!%ZP`$($IA`/RR*T``!$?J``12AE"-(&\`++R0;=I\`"1O`"0J
+M;P`L8"A*AV8&0JH`#&`8$!M(@$C`)4``#'(!L(%G"$J`9P1P_V`.4H;4_``0
+MO*T`"&W2<`!,WVS<WOP**$YU(&\`!%E/+PTJ2&`"4HT0%1]```1G)DB`2,!!
+M[`_I"#```@@`9A80+P`$<BRP`6<,<BVP`6<&<BNP`6;0(`TJ7UA/3G4@;P`$
+M(F\`""`O``PB+P`064](YP<4+`$N`"9)*D@@#6<2$!5(@$C`0>P/Z0@P``((
+M`&8$<`!@2GH`8"(0+P`42(!(P"(%Y8'2A=*!TH`J`7`PFH"ZAF\$<`!@)E*-
+M$!4?0``49Q!(@$C`0>P/Z0@P``((`&;&NH=L!'``8`0FA2`-3-\HX%A/3G4@
+M;P`$(F\`"%E/2.<`%"9)0^\`"'``<AAA`/]L*D!*@&8$<`!@:B`O``@B`.F!
+MDH`@`>F`D('I@":`<#JP%69.0>T``4/O``AP`'([80#_."I`2H!F!'``8#8@
+M+P`((@#I@9*`Y8'3DW`ZL!5F($'M``%#[P`(<`!R.V$`_PHJ0$J`9@1P`&`(
+M("\`"-&3(`U,WR@`6$].=2!O``0B;P`(64](YP$4*DDO2``,$!!R+;`!9@A^
+M`5*O``Q@,$B`2,!![`_I"#```@@`9AAR*R!O``RR&%?`1`!(@$C`+T@`#$J`
+M9P1^`&`$<`!@'"!O``PB36$`_Q0F0$J`9@1P`&`(2H=G`D25(`M,WRB`6$].
+M=2!O``0B;P`(GOP`#$CG`"0J22](`!!P2K`09BA"E4/H``%![0`$+T@`#"!)
+M(F\`#'`!(CP```%M80#^/"]``!!@``"T<$VP$&9\<`(J@$/H``%![0`,+T@`
+M#"!)(F\`#'`!<@QA`/X0(D!*@&8&<`!@``#`1>D``7`NL!%G!G``8```L$'M
+M``@B2"!*<`%R!6$`_>0B0$J`9@9P`&```)1%Z0`!<"ZP$6<&<`!@``"$0>T`
+M!")(($IP`'(&80#]N"]``!!@,!`02(!(P$/L#^D(,0`""`!G&G`!*H!#[0`$
+M<``B/````6UA`/V,+T``$&`$<`!@/"`O`!!F!'``8#)P+R!O`!"P$&8<0^@`
+M`4'M`!`O2``,($DB;P`,80#]VB]``!!@""M\```<(``0("\`$$S?)`#>_``,
+M3G4@+P`$(B\`""!O``PO;P`0``2>_``D2.<_%"I(*@`N`20'=@/$@R]``#@O
+M00`\2H)F#"`'<F1.NC4<2H%F$B`'<F3EB4ZZ-0Y*@6<$<`!@`G`!+``@%4J`
+M9PQ3@&=(4X!G9F```7X@+0`$(@!3@20!U(+4@28"Z8.6@B0#Z8*4@^^"+@7>
+M@B]'`$!*AF<``51R/+"!;0`!3`:'``%1@"]'`$!@``$^("T`!"(`TH'2@"0!
+MZ8*4@2("Z8&2@N^!VH$O10!`8``!'"@%?@`J+0`,4X4@!M"`T(;I@$?L"8;7
+MP"]``"!@&B`;(@#2@=*`)`'I@I2!(@+I@9*"[X'8@5*'OH5MXBXO`#PO1``D
+M(BT`#'0"LH)N!B8'4X-@`B8'(`-R9$ZZ-#`B`-*!2H!J`E:`Y(`O0``L(`,O
+M00`P<F1.NC04(`%J`E:`Y(!V"=:M``PO0``T(`,O00`H<@Q.NC/V4H$@`>>`
+MD('0@)"!T(!5@'(*3KHSX$?O`"C0F]"O`#30FY";4H!R!TZZ,\HN`6H"7H<L
+M+0`$G(=J`EZ&>@$H+0`(8!PN!EZ'(BT`#.6!0>P)@M'O`""^L!@`;`@L!U*%
+MNH1MX"`&T(#0AB(`Z8&2@"`!Z8"0@>^`(B\`)-*`+T$`0"`O`$#0K0`0T*\`
+M2$S?*/S>_``D3G4@;P`$(F\`""`O``R>_`!82.<_-BI(+$U'[P`T)L`FR";)
+M+TX`,$J`9QP@"$H89OQ3B)'`+`@B"-.O`#AP,[*`91Q\,F`880#ZJBP`G(TO
+M0``X<@.\@6P&</]@``-Z+T8`+"!O`#A*$&8&</]@``-H0^\`=&$`^^8O0``X
+M9@9P_V```U0F;P`\0>P)[B)+80#WL"X`9P)"DR!O`#A*$&<``KXJ2"](`'QA
+M`/I((@"2C2]``#@O00!X=@.R@VP&</]@``,4(&\`.!`09R!R++`!9QIR.[`!
+M9Q1#[P!P80#[?B]``#AF%'#_8``"["`\___Q\-"O`'0O0`!P(&\`.!`0<BRP
+M`6<(<CNP`68``5A#Z``!($E#[P!<80#[NBI`2H!F!G#_8``"L$7M``%P++`5
+M9P9P_V```J`@2D/O`$AA`/N4+T``.&8&</]@``**(&\`.$H09P9P_V```GP@
+M2W`"(4``""%\````B``$("\`<$2`3>@'2BS`<`$LP%*&+,8@+P!T1(!-Z`=:
+M+,!"GD*>UOP`$$7H!=AZ`"P\```'LB!*+R\`="](`"P@!2(&0>\`8&$`_&8N
+M`"ZO`'0@!2(&0>\`3&$`_%183R@`2^H``D7K``B^@&\:($L@A'`!(F\`*!*`
+M)DHA1P`$)$U"*0`!8!@@2R"'(F\`*$(1)DHA1``$)$T3?``!``$@!G(#P(%F
+M#"`&<F1.NC%$2H%F$B`&<F3EB4ZZ,39*@6<$<`!@`G`!(@#E@4'L">8@,!@`
+M(@#2@=*`)@'I@Y:!)`/I@I2#[X+:@E*(8```?U;P#_0F```1P@;P`X2A!G
+M!G#_8``!9DJ'9P9P_V```5QX`'P`>@!"KP!$?@`J2V!P2JT'3F<^("\`1"('
+MZ8$D+P!P!H$```=*)C,8`-:"+T,`1$J&9PJP@V<&</]@``$<1((K0@=*("\`
+M+%*`*T`'4GP!8"8@!2(O`'0J+0=*VH%*A&<*L(5G!G#_8```[D2!*T$'2D*M
+M!U)X`5*'VOP`$+ZK``AMBDJ&9P1*A&8&</]@``#(?`!^`"I+*"\`1&`Z<``B
+M!P:!```%V!`S&`!(P.F`($O1P$/H!THO20!`2H9G"DJI``QF!"`$8`(@!=&M
+M`!`L*0`$4H=8C;ZK``1MP&`@<`!R`2=!``@G0``$)"\`=$2"3>L'2BS"+,`L
+MP"]``'@J;P`\+B\`+"`'4H`K0``,+"\`>&<(T(92@"M```QR,["!8P1P_V`P
+MVOP'ZB`'($TB;P`P3KHQ;"!-T<=+Z``!0A!*AF<0(`8@32)O`'Q.NC%20C5H
+M`'``3-]L_-[\`%A.=2!O``0O#2I(0>P)2")-80#T4$J`9PQ![`E((DUP`6$`
+M_`PJ7TYU+PU![`GZ3KH2"BI`2H!F!BI?8```7'`!*4`HHDH59AY"K!5&0JP5
+M2D*L')!"K!R80>P)2$/L'3`2V&;\8"P@34/L%49A`//T2H!G'G`ZL!5G$"!-
+M0^P51G``80#[JDJ`9PA![!5&80#_=BI?8`#S#G`!*4`HHD/L%4:1R&$`\[Q*
+M@&<(0>P51F$`_U1@`/+N(&\`!"`O``@B;P`,GOP`$$CG`Q0J24CO`0$`$"!O
+M`!0O4``82JPHHF8$80#_1$JL%4IG"B`O`!BPK!56;"!^`$?L%49@$%*'UOP`
+M$+ZL%4YM!'X`8#)*JP=.9NI@*GX!1^P52BPL%4I@#B`O`!BPJP`0;0A2AUB+
+MOH9M[D/L%4;3QWX`'BD%U^F'0>P<D-''+PTO2``@(!!![P`<0^P51F$``,(@
+M;P`@(B@`!"M!`"#E@4'L'3`B;P`@T>D`"$/L"50CB!@`*T@`*%A/3-\HP-[\
+M`!!.=2!O``1#[!34<`!A`/\J0>P4U"`(3G4@;P`$("\`"")O``Q(YP$4+@`F
+M22I(2JPHIF8.<`$I0"BF0>P>]&$`_CHO"R`'($U#[![T80``0EA/2H=G!D'L
+M"@)@!$'L)MXG2``H3-\H@$YU(&\`!$/L%0!P`&&N0>P5`"`(3G4@;P`$("\`
+M"")O``PO;P`0``2>_``,2.</-"X`)F\`+"I(?`!Z`"@1(`3G@"])`"#3P$7I
+M"!Y@0"]*`"0@%;"2;38@;P`DL)!F*$J$9@8@*``$;AKGA"(H``0B;P`@!H0`
+M``@:LK%(`&X$<`!@`G`!*@`L*``$8`93A%&*;+H@%2(\``%1@$ZZ+.PH`"`5
+M(CP``5&`3KHLWM*'DH8L`6`(!H8``5&`4X1*AFOT8`@$A@`!48!2A`R&``%1
+M@&SP(`8B/```#A!.NBRL)T``""`&(CP```X03KHLG"`!+T$`''(\3KHLD"=`
+M``0@+P`<<CQ.NBR")H%*A6<"4I,@!%B`<@=.NBQP)T$`&&P$7JL`&"P\```'
+MLDJ$:T`@!G(#P(%F#"`&<F1.NBQ,2H%F$B`&<F3EB4ZZ+#Y*@6<$<`!@`G`!
+M*@`B`.6!1>P)YB`R&`"X@&U`4H:8@`4X8@!G(#P(%F#"`&<F1.NBP*2H%F
+M$B`&<F3EB4ZZ*_Q*@6<$<`!@`G`!*@#E@$'L">;8L`@`2H1KQ@2&```';"=&
+M`!0G1``<(`70@-"%Z8!%[`F&U<!"JP`08`XB*P`0Y8&8LA@`4JL`$"(K`!#E
+M@;BR&`!LYE*$)T0`#$*K`"`G1P`D3-\L\-[\``Q.=2!O``0O#2I(("T`&"(`
+MTH'2@$'L"@;1P2`M`!`B`-*!TH!#[`H;T\$@/```!VS0K0`4+P`O%2\M``0O
+M+0`(+RT`#"\)+PA(;`I`2&P5+$ZZ,C1/[P`D0>P5+"`(*E].=2!O``0O#6$`
+M_3@@0"I?8)0@;P`$(F\`""`O``PO!RX`(!&PAVT4(@=.NBL"T9`@$2('3KHJ
+M^"*!8"I*@&HF4Y#?D6P@(!%$@"('3KHJX"(0DH!3@2"!(!%$@"('3KHJSIZ!
+M(H<N'TYU(&\`!")O``A(YP$4)DDJ2"XM`!2>JP`49BPN+0`0GJL`$&8B+BT`
+M#)ZK``QF&"XM``B>JP`(9@XN+0`$GJL`!&8$+A6>DR`'3-\H@$YU(&\`!")O
+M``@@+P`,+V\`$``$GOP`<$CG/S0N`"IO`)@O20`L0I4O2``H0^\`7'`*(MA1
+MR/_\("\`7'(^L(%L!$J`:@Y![P!@0^\`7'`\80#_%D'O`&1#[P!@<#QA`/\(
+M0>\`:$/O`&1P&&$`_OI![P!P0^\`;'`,80#^[&!,("\`<%.O`'`&@```!VLB
+M`'0#PH)F"G)D3KHIWDJ!9AH@/```!VS0KP!P<F3EB4ZZ*<A*@6<$<`!@`G`!
+M(@#E@4'L">8@,!@`T:\`:"`O`&AOKBP\```';-RO`'`@!G(#P(%F#"`&<F1.
+MNBF.2H%F$B`&<F3EB4ZZ*8!*@6<$<`!@`G`!)"\`;.6")@#6@]:`Z8-![`F&
+MT<,L,"@`("\`:+"&;QI'[P!HG9M2DPR;````#&V>0J\`;%*O`'!@E"`O`%Q"
+MKP!<>@!R`2]!`(@O0``D4H4@+P"(T(`O0`"(("\`B&[N("\`B&H$<`!@!'`!
+MZZ`O0`"(2&\`,"\'2&\`D"!O`#A.D$'O`#Q#[P!H80#^+$_O``PH`&<N(`53
+MA4J`:@9P_V```1!*A6H&4Z\`B$<`'KH"P`2H1O!IVO`(A@M-VO`(A@KB`O
+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
+M;1H,```);A0D`>6!TH+2@4H#9@32@BDH!@WB*!(`B0BE.`3-\$#$YU(&\`
+M!"\-*D@(+0`#`!MF,"`L$5A.N@4.*T``!"M``!!F"G`,*4`IK'#_8!8K;!%8
+M`!1P\\&M`!A"K0`,0JT`"'``*E].=0``(&\`!$CG(!0J2"9-8"!P`!`30>P/
+MZ0@P``$(`&<*<@`2`'0@DH)@!'(`$@`6P4H39MP@#4S?*`1.=0``GOP`4$CG
+M,39#^@"$<``L>``$3J[]V"I`2H!F!G`43KK!BGX`(&P1T!XH__\@!T/O`!Q@
+M`A+84X!D^D(W>!Q![P`<*4@1:$/L$7!'[!&$+$V1R)7*<``B`'1]U()V*$ZN
+M_J1P%$ZZP41,WVR,WOP`4$YU*BH@4W1A8VL@3W9E<F9L;W<@*BH``$58250`
+M`&EN='5I=&EO;BYL:6)R87)Y`$J`:@``'D2`2H%J```,1(%A```@1(%.=6$`
+M`!A$@$2!3G5*@6H```Q$@6$```9$@$YU+P)(030!9@``(DA`2$%(0C0`9P``
+M!H3!,`)(0#0`A,$P`DA",@(D'TYU+P-V$`Q!`(!D```&X9E10PQ!"`!D```&
+MZ9E90PQ!(`!D```&Y9E50TI!:P``!N.94T,T`.:H2$)"0N:J2$.`P38`,`(T
+M`TA!Q,&0@F0```930]"!<@`R`TA#Y[A(0,%!)A\D'TYU``!(YW``)`!G($J!
+M9@1"@&`8)@#&P4A"Q,%(0D)"UH)(0<#!2$!"0-"#3-\`#DYU```@+!',!$`!
+M]"Y`3OK^8```(&\`!"`(2AAF_%-(D<`@"$YU```@;P`$("\`"")\`````$H0
+M9PJP&&;X0^C__V#R(`E.=2!O``0@+P`(L!!G"$H89OAP`$YU(`A.=2!O``0B
+M;P`(("\`#$J`9Q!3@!(8LAEF#$H!9P13@&KR<`!.=6X$</].=7`!3G4``"!O
+M``0B;P`($ABR&68(2@%F]G``3G5N!'#_3G5P`4YU(F\`""!O``0@"$H89OQ3
+MB!#99OQ.=0``(F\`""!O``0@+P`,(@A@!!#99PA3@&3X8`9"&%.`9/H@`4YU
+M(F\`""!O``0@+P`,(@A*@&\6L<EE#-/`T<`1(5.`9OI@!A#94X!F^B`!3G4@
+M;P`$("\`"$CG`Q0N`"I(9A(@#68$<`!@:"!-3KH`;G``8%X@#68*(`=,WRC`
+M3OH!R"9-58LP/'__P%-(P.6`+``($P`/9PP,:X``__YF!"PK__(@!TZZ`:`F
+M0$J`9@1P`&`>O(=C!"`'8`(@!B!-(DM@`A+84X!D^B!-3KH`#B`+3-\HP$YU
+M(&\`!"`(9@).=5F`2.<\,B(L*@QF#BE\````%BFL3-],/$YU(D&P@6\2)`'4
+MJ0`$!H(````4L()L`F`((BD``&?48.`F`0:#````$+"#;<9G$B1#0H(T*@`"
+M:[KEBM:"6(-@Z"1`-"H``&JJ"*H`!P``0H,V*@`"`D-__^6+2FH``FM`1_(X
+M!$IK``!K-D*$."L``@)$?__EC-B#6(3DC%B#2FL``FH$`$2``#5$``)K$BH$
+MY8PT,D@$`D*``(I"-85(!$*$."H``&=,Y8Q$A$?R2/Q*:P``:SY"A#@K``+E
+MC$*%.BH``@)%?__EC=B%6(18@^2,2FH``FH$`$2``#=$``)K$BH$Y8PT,T@$
+M`D*``(I"-X5(!->I``@F*0`$MJP/Y&X,MJD`"&8Z2JD``&<T("PJ#"!`LH!F
+M#"EI```J#&`0(&@``+*H``!F]B%I`````"`I``0&@````!0L>``$3J[_+DS?
+M3#Q.=2`O``1*@&8,*7P````6*:QP`$YU2.<^,E:``H#____\#(```?_\;@``
+MN+"L#^1N``"P)BPJ#&<``*@B0["I``AN,B(L*A"RJ0`,9BA%Z0`02E)K$$*$
+M."H``@)$?__EC+"$;QI"A#@J``)K".6,1?)(!<)BD``&=F(D-@O@CJ``<`
+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
+M`&9I;&4M='EP90!I9VYO<F4``&1E<F5F97)E;F-E`&QI=&5R86P`<75O=&4M
+M;F%M90``<F5C=7)S:79E`&9O<FUA=```<V]R=```=&%B<VEZ90!T:6UE``!H
+M96QP``!V97)S:6]N`&%M:6=A`````````````````````&$````$````````
+M``````!B````#```````````````9````!8````````2$`````$````@````
+M``````````!I````)@``````````````:P```#```````````````&X```!`
+M``````````````!'````2@``````````````<0```%X``````````````'(`
+M``!F``````````````!S````;`````$`````````=P```'(`````````````
+M`$$```!^``````````````!"````C@``````````````1@```)@`````````
+M`````$8```"B`````0````````!)````J@``````````````3````+8`````
+M`````````$X```"^``````````````!1````R@``````````````4@```-0`
+M```!``````````P```#<`````0`````````*````X@````$`````````5```
+M`.H````!``````````L```#P````````$G`````!````]@```````!)T````
+M`0```/X```````````````T`````````````````````=F5R8F]S90!L;VYG
+M``!C;VUM87,``&AO<FEZ;VYT86P``&%C<F]S<P``=F5R=&EC86P``'-I;F=L
+M92UC;VQU;6X````"U````MP```+B```"Z@```O8```+^```#"```````````
+M``````````0````#`````P````(````!;F]N90``=&EM90``<VEZ90``97AT
+M96YS:6]N`````U(```-8```#7@```V0```````````````,````$`````F%T
+M:6UE`&%C8V5S<P``=7-E`&-T:6UE`'-T871U<P`````#D@```Y@```.@```#
+MI````ZH``````````@````(````"`````0````$E<PH``````````````%!/
+M4TE83%E?0T]24D5#5`!#3TQ534Y3`%1!0E-)6D4`86)C9&9G:6ML;6YP<7)S
+M='5W.GA!0D-&1TDZ3$Y14E-4.E58,0!I;G9A;&ED(&QI;F4@=VED=&@Z("5S
+M```J(0``+BHA`&EN=F%L:60@=&%B('-I>F4Z("5S``!S;W)T('1Y<&4`=&EM
+M92!T>7!E`&9O<FUA="!T>7!E`"5S```E<P``)7,Z"@``)7,Z"@``=&]T86P@
+M)74*`"5S```E<P``)39U(```)2IU(```)7,@)3-U(``E+3AU(``E+3@N.',@
+M`"4M.'4@`"4M."XX<R``)3-U+"`E,W4@`"4X;'4@`"5S(``@+3X@``!<7```
+M7&X``%QB``!<<@``7'0``%QF``!<(```7"(``%PE,#-O`"4V=2```"4J=2``
+M`%5S86=E.B`E<R!;+6%B8V1G:6ML;6YP<7)S='5X04)#1D=,3E%24U58,5T@
+M6RUW(&-O;'-=(%LM5"!C;VQS72!;+4D@<&%T=&5R;ET*("`@("`@(%LM+6%L
+M;%T@6RTM97-C87!E72!;+2UD:7)E8W1O<GE=(%LM+6EN;V1E72!;+2UK:6QO
+M8GET97-=(%LM+6QI=&5R86Q="B`@("`@("!;+2UN=6UE<FEC+75I9"UG:61=
+M(%LM+6AI9&4M8V]N=')O;"UC:&%R<UT@6RTM<F5V97)S95T@6RTM<VEZ95T*
+M("`@("`@(%LM+7=I9'1H/6-O;'-=(%LM+71A8G-I>F4]8V]L<UT@6RTM86QM
+M;W-T+6%L;%T@6RTM:6=N;W)E+6)A8VMU<'-="@`@("`@("`@6RTM8VQA<W-I
+M9GE=(%LM+69I;&4M='EP95T@6RTM:6=N;W)E/7!A='1E<FY=(%LM+61E<F5F
+M97)E;F-E70H@("`@("`@6RTM<75O=&4M;F%M95T@6RTM<F5C=7)S:79E72!;
+M+2US;W)T/7MN;VYE+'1I;64L<VEZ92QE>'1E;G-I;VY]70H@("`@("`@6RTM
+M9F]R;6%T/7ML;VYG+'9E<F)O<V4L8V]M;6%S+&%C<F]S<RQV97)T:6-A;"QS
+M:6YG;&4M8V]L=6UN?5T*("`@("`@(%LM+71I;64]>V%T:6UE+&%C8V5S<RQU
+M<V4L8W1I;64L<W1A='5S?5T@6RTM;F\M9W)O=7!="B`@("`@("!;+2UH96QP
+M72!;+2UV97)S:6]N72!;<&%T:"XN+ET*``!'3E4@9FEL975T:6QS(#,N-@``
+M``>,``!/:P``````%```````````````````!Z1C;VYS;VQE.@``)7,Z(```
+M:6YT=6ET:6]N+FQI8G)A<GD```!T:6UE<BYD979I8V4`````_____V9I9F\N
+M;&EB<F%R>0``````````````````"`0``0``````````"`8`````````````
+M``!`*",I86QL;V-A+F,),2XQ````````````````=7-E<@`````(1`````!W
+M:&5E;```````"%(```A8``````A*1F%I;&5D('1O(&-R96%T92!T:6UE<@``
+M=7-E<B!I;G1E<G)U<'0```````!.;R!M96UO<GD```!A`$9A:6QE9"!T;R!C
+M<F5A=&4@=&EM97(``$Y)3#H``$Y)3#H``$Y)3#H``"H`3DE,.@``26YV86QI
+M9"!W:6QD8V%R9"`E<P!%<G)O<B!E>'!A;F1I;F<@87)G=6UE;G1S`%5315(`
+M`'5S97(``%5315).04U%``!(3TU%``!S.@``4TA%3$P`8FEN.G-H``!(3U-4
+M3D%-10``86UI9V$`3DE,.@````!'350`("`@`"`@(`````E,```)4```````
+M````("`@`"`@(`!S.FQO8V%L=&EM90!S.GIO;F5I;F9O```O`````!\````<
+M````'P```!X````?````'@```!\````?````'@```!\````>````'P```!\`
+M```=````'P```!X````?````'@```!\````?````'@```!\````>````'P``
+M`6T```%N<&]S:7AR=6QE<P``54Y)6%1:```@("``4W5N36]N5'5E5V5D5&AU
+M1G)I4V%T2F%N1F5B36%R07!R36%Y2G5N2G5L075G4V5P3V-T3F]V1&5C`"4N
+M,W,@)2XS<R4S9"`E,#(N,F0Z)3`R+C)D.B4P,BXR9"`E9`H```";,"!Q``!&
+M86EL960@=&\@:6YI=&EA;&ES92!)+T\``&%M:6=A('-P96-I9FEC(&5R<F]R
+M``````J(56YK;F]W;B!E<G)O<@!N;W0@;W=N97(`;F\@<W5C:"!F:6QE(&]R
+M(&1I<F5C=&]R>0!N;R!S=6-H('!R;V-E<W,`:6YT97)R=7!T960@<WES=&5M
+M(&-A;&P`:2]O(&5R<F]R`&YO('-U8V@@9&5V:6-E(&]R(&%D9')E<W,`87)G
+M=6UE;G0@;&ES="!T;V\@;&]N9P``97AE8R!F;W)M870@97)R;W(`8F%D(&9I
+M;&4@;G5M8F5R`&YO(&-H:6QD('!R;V-E<W,``&YO(&UO<F4@<')O8V5S<V5S
+M`&YO="!E;F]U9V@@;65M;W)Y`'!E<FUI<W-I;VX@9&5N:65D`&)A9"!A9&1R
+M97-S`&)L;V-K(&1E=FEC92!R97%U:7)E9`!M;W5N="!D979I8V5S(&)U<WD`
+M`&9I;&4@97AI<W1S`&-R;W-S+61E=FEC92!L:6YK`&YO('-U8V@@9&5V:6-E
+M``!N;W0@82!D:7)E8W1O<GD`:7,@82!D:7)E8W1O<GD``&EN=F%L:60@87)G
+M=6UE;G0``&9I;&4@=&%B;&4@;W9E<F9L;W<`=&]O(&UA;GD@;W!E;B!F:6QE
+M<P!N;W0@82!T>7!E=W)I=&5R``!T97AT(&9I;&4@8G5S>0``9FEL92!T;V\@
+M8FEG``!N;R!S<&%C92!L969T(&]N(&1E=FEC90!I;&QE9V%L('-E96L``')E
+M860M;VYL>2!F:6QE('-Y<W1E;0!T;V\@;6%N>2!L:6YK<P``8G)O:V5N('!I
+M<&4`;6%T:"!A<F=U;65N=`!R97-U;'0@=&]O(&QA<F=E``!)+T\@<W1R96%M
+M(&5M<'1Y``!F:6QE(&YA;64@=&]O(&QO;F<``&1I<F5C=&]R>2!N;W0@96UP
+M='D`=&]O(&UA;GD@<V]F="!L:6YK<R`H;&]O<#\I````"J(```JP```*N@``
+M"M0```KD```*_```"P8```L@```+.```"TH```M:```+;```"WX```N0```+
+MH@``"ZX```O$```+V```"^0```OV```,!@``#!8```PF```,.```#$P```Q@
+M```,<@``#((```R0```,J```#+8```S,```,W```#.@```SV```-"```#1H`
+M``TN```-0@```"8``&1O;W(N)6QX+B5L>```3F\@;65M;W)Y`'9I<G1U86P@
+M;65M;W)Y(&5X:&%U<W1E9```=FER='5A;"!M96UO<GD@97AH875S=&5D```E
+M=0``)74``````````````````0```#]03U-)6$Q97T-/4E)%0U0`+2T``"5S
+M.B!O<'1I;VX@8"5S)R!I<R!A;6)I9W5O=7,*`"5S.B!O<'1I;VX@8"TM)7,G
+M(&1O97-N)W0@86QL;W<@86X@87)G=6UE;G0*```E<SH@;W!T:6]N(&`E8R5S
+M)R!D;V5S;B=T(&%L;&]W(&%N(&%R9W5M96YT"@``)7,Z(&]P=&EO;B!@)7,G
+M(')E<75I<F5S(&%N(&%R9W5M96YT"@`E<SH@=6YR96-O9VYI>F5D(&]P=&EO
+M;B!@+2TE<R<*`"5S.B!U;G)E8V]G;FEZ960@;W!T:6]N(&`E8R5S)PH````E
+M<SH@:6QL96=A;"!O<'1I;VX@+2T@)6,*`"5S.B!O<'1I;VX@<F5Q=6ER97,@
+M86X@87)G=6UE;G0@+2T@)6,*``!5;FMN;W=N('-Y<W1E;2!E<G)O<@``)7,Z
+M(```.B`E<P`````E<SH@``!I;G9A;&ED`&%M8FEG=6]U<P`@)7,@8"5S)PH`
+M`````$```"`@("`@("`@("@H*"@H("`@("`@("`@("`@("`@("`@2!`0$!`0
+M$!`0$!`0$!`0$(2$A(2$A(2$A(00$!`0$!`0@8&!@8&!`0$!`0$!`0$!`0$!
+M`0$!`0$!`0$0$!`0$!""@H*"@H("`@("`@("`@("`@("`@("`@("`A`0$!`@
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````````````^@
+M```1$@``````````````````````````````````````````$30`````````
+M````````````````````````````````````````````````````````````
+M``````````````````````(`__\````.``X```````````````#__P````0`
+M!````````'T6```17/__````!``$````````?2P``````````````&0```/"
+M```#O@```[H```.V```#L@```WH```-V```#<@```VX```,N```#*@```R8`
+M``,B```#'@```QH```,6```"M````J0```*4```"A````G0```)D```"5```
+M`D0```(T```")````A0```($```!]````>0```'4```!Q````;0```&D```!
+ME````80```%T```!9````50```%$```!-````20```$4```!!````JP```*<
+M```!/```!YX```>X```(&```"`P```AD```(7@``"%H```A*```)6```"50`
+M``WV```-\@``#>X```WJ```-Y@``#>(```W>```-V@``#=8```W2```-S@``
+M#<H```W&```-P@``#;X```VZ```-M@``#;(```VN```-J@``#:8```VB```-
+MG@``#9H```V6```-D@``#8X```V*```-A@``#8(```U^```->@``#78```UR
+M```-;@``#6H```UF```-8@``#5X```J>```1$@``$/```!&````#[`````(`
+3```````1D```$7P````````#\EX`
+`
+end
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/rmdir.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/rmdir.uue
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/rmdir.uue Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/rmdir.uue Sat Sep 28 00:00:00 1996
@@ -0,0 +1,404 @@
+begin 666 rmdir
+M```#\P`````````"``````````$```\'```"=````^D```\'2.=^_B1()`!)
+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
+MU@)@$&@P```!"P@VW&9Q(D0T*"-"H``FNZY8K6@EB#8.@D0#0J``!JJ@BJ
+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
+M(!!X`#@`8`HB;P`P(%%8D2@0$"\`)')UL`%G`/]:<F^P`68>2B\`.&<,1>\`
+M/1]\`#``/'P!(`0@2DZZ\(Y@`/\^2B\`.&<2'WP`,``\1>\`/A]\`'@`/7P"
+M(`0@2DZZ\*HJ``@O``4`)&8`_Q1![P`\3KKQ6F``_P@B;P`P(%%8D210(`IF
+M!$7Z`/(@2DH89OQ3B)'**@@@+P!0:P2PA6\$+T4`4"PO`%!@('P!(F\`,"!1
+M6)$@$!]``#Q"+P`]8`9P`&```*Q%[P`\("\`5+"&;`AR`"]!`%1@!)VO`%1*
+M+P`[9QY@"'``$!H@2TZ54X9L]&`&($MP($Z54Z\`5&ST8&I*AV8,2B\`.68&
+M2B\`.F=&$!)R(+`!9PQT*[`"9P9T+;`"9C)*AFLNLB\`-V828`IP`!`O`#<@
+M2TZ54Z\`5&SP<``0&B!+3I53AF`*<``0+P`W($M.E5.O`%1L\&`(<``0&B!+
+M3I53AFST("\`)DS?;/3>_``T3G4``"!O``0B;P`(+V\`#``$+V\`$``(GOP`
+M#$CG`!0F22I(+V\`'``08#AP);`O``QF)B!O`!BP$&8&4J\`&&`8+PLO#4/O
+M`!A.NON44$]*@&<&+T``&&`*<``0+P`,($M.E2!O`!@0&!]```PO2``82@!F
+MMDS?*`#>_``,3G4@;P`$((A8D$*H``0A2``(3G4``"!O``1(YP`&*DA*K0`*
+M9PHB32QX``1.KOZ8&WP`_P`(</\K0``4<``0+0`/+'@`!$ZN_K`B37`B3J[_
+M+DS?8`!.=0``(&\`!"`O``A(YP,6+@`J2'#_+'@`!$ZN_K8<`$B&2,8@!E*`
+M9@1P`&!@<"(B/``!``%.KO\Z)D!*@&8((`9.KOZP8$1!ZP`*(,T71P`)%WP`
+M!``(0A@0QI/)3J[^VB=``!`@#6<((DM.KOZ>8!I!ZP`8)T@`%$'K`!0G2``<
+M0JL`&!=\``(`("`+3-]HP$YU+P@O`$ZY```"M%!/3G4``````^P````!````
+M````/!(````!`````0````H````````#\@```^H```)T<&%T:```:&5L<```
+M=F5R<VEO;@``````````````"4P````!````!@````````E0`````0````P`
+M```````)5`````$`````````````````````<``E<PH`)7,``%5S86=E.B`E
+M<R!;+7!=(%LM+7!A=&A=(%LM+6AE;'!=(%LM+79E<G-I;VY=(&1I<BXN+@H`
+M`$=.52!F:6QE=71I;',@,RXV`````)0``$]K```````4````````````````
+M````K&-O;G-O;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R>0```'1I;65R
+M+F1E=FEC90````#_____9FEF;RYL:6)R87)Y```````````````````!#``!
+M```````````!#@```````````````$`H(REA;&QO8V$N8PDQ+C$`````````
+M``````!&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=```
+M`````$YO(&UE;6]R>0```&$`1F%I;&5D('1O(&-R96%T92!T:6UE<@``3DE,
+M.@``3DE,.@``3DE,.@``*@!.24PZ``!);G9A;&ED('=I;&1C87)D("5S`$5R
+M<F]R(&5X<&%N9&EN9R!A<F=U;65N=',`55-%4@``=7-E<@``55-%4DY!344`
+M`$A/344``',Z``!32$5,3`!B:6XZ<V@``$A/4U1.04U%``!A;6EG80";,"!Q
+M``!&86EL960@=&\@:6YI=&EA;&ES92!)+T\``&%M:6=A('-P96-I9FEC(&5R
+M<F]R``````)$56YK;F]W;B!E<G)O<@!N;W0@;W=N97(`;F\@<W5C:"!F:6QE
+M(&]R(&1I<F5C=&]R>0!N;R!S=6-H('!R;V-E<W,`:6YT97)R=7!T960@<WES
+M=&5M(&-A;&P`:2]O(&5R<F]R`&YO('-U8V@@9&5V:6-E(&]R(&%D9')E<W,`
+M87)G=6UE;G0@;&ES="!T;V\@;&]N9P``97AE8R!F;W)M870@97)R;W(`8F%D
+M(&9I;&4@;G5M8F5R`&YO(&-H:6QD('!R;V-E<W,``&YO(&UO<F4@<')O8V5S
+M<V5S`&YO="!E;F]U9V@@;65M;W)Y`'!E<FUI<W-I;VX@9&5N:65D`&)A9"!A
+M9&1R97-S`&)L;V-K(&1E=FEC92!R97%U:7)E9`!M;W5N="!D979I8V5S(&)U
+M<WD``&9I;&4@97AI<W1S`&-R;W-S+61E=FEC92!L:6YK`&YO('-U8V@@9&5V
+M:6-E``!N;W0@82!D:7)E8W1O<GD`:7,@82!D:7)E8W1O<GD``&EN=F%L:60@
+M87)G=6UE;G0``&9I;&4@=&%B;&4@;W9E<F9L;W<`=&]O(&UA;GD@;W!E;B!F
+M:6QE<P!N;W0@82!T>7!E=W)I=&5R``!T97AT(&9I;&4@8G5S>0``9FEL92!T
+M;V\@8FEG``!N;R!S<&%C92!L969T(&]N(&1E=FEC90!I;&QE9V%L('-E96L`
+M`')E860M;VYL>2!F:6QE('-Y<W1E;0!T;V\@;6%N>2!L:6YK<P``8G)O:V5N
+M('!I<&4`;6%T:"!A<F=U;65N=`!R97-U;'0@=&]O(&QA<F=E``!)+T\@<W1R
+M96%M(&5M<'1Y``!F:6QE(&YA;64@=&]O(&QO;F<``&1I<F5C=&]R>2!N;W0@
+M96UP='D`=&]O(&UA;GD@<V]F="!L:6YK<R`H;&]O<#\I`````EX```)L```"
+M=@```I````*@```"N````L(```+<```"]````P8```,6```#*````SH```-,
+M```#7@```VH```.````#E````Z````.R```#P@```](```/B```#]```!`@`
+M``0<```$+@``!#X```1,```$9```!'(```2(```$F```!*0```2R```$Q```
+M!-8```3J```$_@```"8``&1O;W(N)6QX+B5L>```3F\@;65M;W)Y````````
+M`````````0```#]03U-)6$Q97T-/4E)%0U0`+2T``"5S.B!O<'1I;VX@8"5S
+M)R!I<R!A;6)I9W5O=7,*`"5S.B!O<'1I;VX@8"TM)7,G(&1O97-N)W0@86QL
+M;W<@86X@87)G=6UE;G0*```E<SH@;W!T:6]N(&`E8R5S)R!D;V5S;B=T(&%L
+M;&]W(&%N(&%R9W5M96YT"@``)7,Z(&]P=&EO;B!@)7,G(')E<75I<F5S(&%N
+M(&%R9W5M96YT"@`E<SH@=6YR96-O9VYI>F5D(&]P=&EO;B!@+2TE<R<*`"5S
+M.B!U;G)E8V]G;FEZ960@;W!T:6]N(&`E8R5S)PH````E<SH@:6QL96=A;"!O
+M<'1I;VX@+2T@)6,*`"5S.B!O<'1I;VX@<F5Q=6ER97,@86X@87)G=6UE;G0@
+M+2T@)6,*``!5;FMN;W=N('-Y<W1E;2!E<G)O<@``)7,Z(```.B`E<P``````
+M`$```"`@("`@("`@("@H*"@H("`@("`@("`@("`@("`@("`@2!`0$!`0$!`0
+M$!`0$!`0$(2$A(2$A(2$A(00$!`0$!`0@8&!@8&!`0$!`0$!`0$!`0$!`0$!
+M`0$!`0$0$!`0$!""@H*"@H("`@("`@("`@("`@("`@("`@("`A`0$!`@````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````````^@```(
+M;@``````````````````````````````````````````")``````````````
+M````````````````````````````````````````````````````````````
+M``````````````````(`__\````.``X```````````````#__P````0`!```
+M`````"NB```(N/__````!``$````````*[@``````````````#4````T````
+M)````!0````\````+````!P```"F````P````2````$4```%L@``!:X```6J
+M```%I@``!:(```6>```%F@``!98```62```%C@``!8H```6&```%@@``!7X`
+M``5Z```%=@``!7(```5N```%:@``!68```5B```%7@``!5H```56```%4@``
+M!4X```5*```%1@``!4(```4^```%.@``!38```4R```%+@``!2H```4F```%
+M(@``!1X```4:```"6@``"&X```A,```(W````^P````"````````".P```C8
+(`````````_(:
+`
+end
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/sort.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/sort.uue
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/sort.uue Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/sort.uue Sat Sep 28 00:00:00 1996
@@ -0,0 +1,650 @@
+begin 666 sort
+M```#\P`````````"``````````$``!F=```"L@```^D``!F=2.=^_B1()`!)
+M^0`````L>``$+P)(YP#@)FX!%"(K`*QG#.6)($$B*``TY8E@!B(/DJL`.G0`
+M(#P``!T<LJP)(&0((BP)(-"!=`$F02(\``$``4ZN_SI*@&8(3-\'!&```D`@
+M0"1`(D`@/````G:9_``````@W%.`9OH@'&<.($G1W-70((HD25.`8/`H2=G\
+M`````"E\```='`HD3-\'`"E."@!*`DS?``1([(``"@AG2"`,!(``````!H``
+M`!T<T*P)("(`!(````"`#&X`)``4;1@I0`H@*4$*')*L"2!![`H8((%.KOTD
+M8`(N0"`L"2`O0``$T:P*)"(/DHL&@0```(`I00G<0JP*!'``(CP``#``3J[^
+MSB9N`11#^@&(<`!.KOW8*4`=%&8&<&1@``#F*6L`F`G\2JL`K&<``'X@:P"L
+MT<C1R")H`!#3R=/)(`)R`!(9*4D*#-"!7H`"0/_\*4`*%$CG0$`B/``!``%.
+MKO\Z3-\"`DJ`9@AP%"\`9P`!!"!`*4`*$"`"4X#4@1&R```@`E."4<C_]A&\
+M`"`@`E."$;P`(B`"$;$@`"`!4<K_^!"\`"(O"&!*0>L`7$ZN_H!!ZP!<3J[^
+MC"E`"@0O`"1`("H`)&<8+&P=%"!`(B@``$ZN_Z`I0`G\(@!.KO^"(&P*!"\(
+M2&P)V"!H`"0I:``$"@Q.NDPD3KHVGG``8`0@+P`$)&P*""4`+'@`!`QN`"0`
+M%&T22JP*&&<,0>P*&%FL"B!.KOTD+DH@+`GT9P0@0$Z03KI+_$ZZ32Q*K`H$
+M9R`L;!T4(BP)_&<$3J[_IBQX``1.KO]\(FP*!$ZN_H9@$BQX``0@+`H49P@B
+M;`H03J[_+B)L'11.KOYB("P*)"),D_P`````3J[_+B`?3-]_?DYU9&]S+FQI
+M8G)A<GD````@#UE`L*P)W&4`408O#2IL&WI@#"\53KHO2%A/*FT`!"`-9O`J
+M7TYU(`^0?``,L*P)W&4`4-PO#2`O``@O`$ZZ4TA83RI`2H!F'$AL`)QP`"\`
+M+P!.NBA"8:9(>``"3KI5?$_O`!`@#2I?3G4@#Y!\``RPK`G<90!0F$CG`10N
+M+P`4)F\`$"`+9@HO1P`03-\H@&"42H=F#"\+3KI1@%A/<`!@,"\'+PM.NE#J
+M4$\F0$J`9AY(;`"V<``O`"\`3KHGV&$`_SQ(>``"3KI5$$_O`!`@"TS?*(!.
+M=2`/D'P`$+"L"=QE`%`J2.<`%"IO``P@34/L`-`0&+`99@9*`&;V9Q`O+P`0
+M+PU.NERF4$\@0&`$0>P))"9((`AF("\-2&P`TB\L',Q"ITZZ)VYA`/[22'@`
+M`DZZ5*9/[P`40>P))+'+9@9P`2E`&T(@"TS?*`!.=2`/D'P`#+"L"=QE`$^R
+M+PTJ;P`(+PU.NEG.6$]![`DDL<UG-$'L"4:QS6<L+PU.NEJ*6$]*@&<F2&P`
+MUB\L',Q"ITZZ)P)A`/YF2'@``DZZ5#I/[P`08`9PS\&M`!@J7TYU(`^0?``0
+ML*P)W&4`3U`O!BPO`!`@+P`,(&\`%")O``@O""\&+P`O"4ZZ5JI/[P`0L(9G
+M'DAL`.HO+!S,0J=.NB:D80#^"$AX``).NE/<3^\`$"P?3G4@#Y!\`!2PK`G<
+M90!.^DCG`10@;!LP(`A*&&;\4XB1P"X((`AR$-"!+P!A`/WR*D!(>``(80#]
+MZ%!/)D!*AV<J<"\@;!LPL#!X_V<>3KHG8%*L"B@O+`HH+P`O+!LP2&P`]B\-
+M3KI3U&`<3KHG0E*L"B@O+`HH+P`O+!LP2&P!""\-3KI3MD_O`!0FC2=L&WH`
+M!"E+&WH@#4S?*(!.=2`/44"PK`G<90!.7DCG`#0F;P`02^P;=F`6(&T`!")+
+M)%`0&;`:9@9*`&;V9P@J2$JM``1FY"9M``0@"V<:+Q-.NBQV+I-.ND\L*VL`
+M!``$+HM.ND\@6$],WRP`3G6_[`G<90!.!$CG(P1^`'P`<""^@&<&<@F^@68*
+M<@%![`XP(8%H`')_OH%B%D'L"!T(,``">`!G"G0!0^P*,".":`"^@6(,=%=!
+M[`@=Q#!X`&8*=`%![!(P(8)H`+Z!8@QT!T'L"!W$,'@`9A2^@&<0=`F^@F<*
+M=`%![!8P(8)H`+Z!8B9+[`@=V\<(%0`!9QH(%0`!9P@@!W(@D(%@`B`'0>P:
+M,!&`>`!@"B`'0>P:,!&`"`!2AUB(<```$`;0#_4$S?(,1.=2`/64"PK`G<
+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
+M<OB"QX``1.KOZ\*E5*E6:83-]H@%A/3G4@+P`$(B\`"$CG`0(N`"`!4X!G
+M#%.`9PA3@&<$78!F+"QX``1.KO]\(&P*`-#\`98@!V$`_T@@;`H`T/P!I"`'
+M80#_.DZN_W9P`&`(<!8I0!S,</],WT"`3G4@+P`$(B\`"$CG!@0L`2H`3KKH
+MYDJ%:@)$A;JL'-1F#DJ&9P8@!DZZYXIP`&!((`5.N@!N*D!*@&<&2JT`%&<*
+M<`,I0!S,</]@+"`&9R@B+0`0P4%A`/]8(@!P";R`9A1R`2M!`!0K0``8<!1.
+MNN=$<`!@`B`!3-\@8$YU```@;P`$2.<`!BI((DTL>``$3J[_!"!-3-]@`$[Z
+M"%0@+P`$2.<!!"X`*FP<V&`.("T`#+"'9@0@#6`(*E5*E6;N<`!,WR"`3G5(
+MYR`"0>P<V$ZZ&,H@+!RH(BP<M"0`LX("@@!___\I0AS44H(I0AS0+P$O`$AL
+M"`!(;!SD3KK?6D_O`!`L>``$3J[]9BE`'0AG$$'L'.1P`$ZZ&-XI0!T$9@I(
+M;`@.3KK@VEA/3-]`!$YU2.<`!B`L'0AG"B!`+'@`!$ZN_6!*K!T$9S@L>``$
+M3J[_?&`,(DUP'"QX``1.KO\N(&P=!"QX``1.KOZ,*D!*@&;B(&P=!$ZZL
+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
+M3#Q.=2)!L(%O$B0!U*D`!`:"````%+"";`)@""(I``!GU@)@$&@P```!"P
+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
+M04X`2E5,`$I53@!-05(`34%9`$Y/5@!/0U0`4T50```````````$````!```
+M``@````(````#`````P````"````$`````$````4````!P```!@````&````
+M'`````,````@````!0```"0````+````*`````H````L````"0`(`````$``
+M````'G9I<G1U86P@;65M;W)Y(&5X:&%U<W1E9```=FER='5A;"!M96UO<GD@
+M97AH875S=&5D```M`"5S``!E<G)O<B!C;&]S:6YG(&9I;&4``'=R:71E(&5R
+M<F]R`"5S+W-O<G0E-2XU9"4U+C5D`"5S<V]R="4U+C5D)34N-60``')E860@
+M97)R;W(``'(`)7,Z(&1I<V]R9&5R(&]N("5S"@!R`'<`<@!W`'(`<@!W`&EN
+M=F%L:60@9FEE;&0@<W!E8VEF:6-A=&EO;B!@)7,G```M`%1-4$1)4@``+W1M
+M<```;W!T:6]N(&`M:R<@<F5Q=6ER97,@86X@87)G=6UE;G0``&]P=&EO;B!@
+M+6\G(')E<75I<F5S(&%N(&%R9W5M96YT``!O<'1I;VX@8"UT)R!R97%U:7)E
+M<R!A;B!A<F=U;65N=```;W!T:6]N(&`M5"<@<F5Q=6ER97,@86X@87)G=6UE
+M;G0``"5S.B!U;G)E8V]G;FEZ960@;W!T:6]N(&`M)6,G"@``+0!W`'(`=P`E
+M<P``=P!F9FQU<V@``"T`=W)I=&4@97)R;W(`57-A9V4Z("5S(%LM8VUU<UT@
+M6RUT('-E<&%R871O<ET@6RUO(&]U='!U="UF:6QE72!;+50@=&5M<&1I<ET@
+M6RUB9&9I36YR70H@("`@("`@6RM03U,Q(%LM4$]3,EU=(%LM:R!03U,Q6RQ0
+M3U,R75T@6V9I;&4N+BY="@````!'3E4@=&5X='5T:6QS(#$N-@````+(``!5
+M;FMN;W=N('-Y<W1E;2!E<G)O<@``)7,Z(```.B`E<P````!/:P``````%```
+M`````````````````P1C;VYS;VQE.@``)7,Z(```:6YT=6ET:6]N+FQI8G)A
+M<GD```!T:6UE<BYD979I8V4`````_____V9I9F\N;&EB<F%R>0``````````
+M`````````V0``0```````````V8```````````````!&86EL960@=&\@8W)E
+M871E('1I;65R``!U<V5R(&EN=&5R<G5P=````````$YO(&UE;6]R>0```&$`
+M1F%I;&5D('1O(&-R96%T92!T:6UE<@``3DE,.@``3DE,.@``3DE,.@``*@!.
+M24PZ``!);G9A;&ED('=I;&1C87)D("5S`$5R<F]R(&5X<&%N9&EN9R!A<F=U
+M;65N=',`55-%4@``=7-E<@``55-%4DY!344``$A/344``',Z``!32$5,3`!B
+M:6XZ<V@``$A/4U1.04U%``!A;6EG80!.24PZ`````)LP('$``$9A:6QE9"!T
+M;R!I;FET:6%L:7-E($DO3P``86UI9V$@<W!E8VEF:6,@97)R;W(`````!(A5
+M;FMN;W=N(&5R<F]R`&YO="!O=VYE<@!N;R!S=6-H(&9I;&4@;W(@9&ER96-T
+M;W)Y`&YO('-U8V@@<')O8V5S<P!I;G1E<G)U<'1E9"!S>7-T96T@8V%L;`!I
+M+V\@97)R;W(`;F\@<W5C:"!D979I8V4@;W(@861D<F5S<P!A<F=U;65N="!L
+M:7-T('1O;R!L;VYG``!E>&5C(&9O<FUA="!E<G)O<@!B860@9FEL92!N=6UB
+M97(`;F\@8VAI;&0@<')O8V5S<P``;F\@;6]R92!P<F]C97-S97,`;F]T(&5N
+M;W5G:"!M96UO<GD`<&5R;6ES<VEO;B!D96YI960`8F%D(&%D9')E<W,`8FQO
+M8VL@9&5V:6-E(')E<75I<F5D`&UO=6YT(&1E=FEC97,@8G5S>0``9FEL92!E
+M>&ES=',`8W)O<W,M9&5V:6-E(&QI;FL`;F\@<W5C:"!D979I8V4``&YO="!A
+M(&1I<F5C=&]R>0!I<R!A(&1I<F5C=&]R>0``:6YV86QI9"!A<F=U;65N=```
+M9FEL92!T86)L92!O=F5R9FQO=P!T;V\@;6%N>2!O<&5N(&9I;&5S`&YO="!A
+M('1Y<&5W<FET97(``'1E>'0@9FEL92!B=7-Y``!F:6QE('1O;R!B:6<``&YO
+M('-P86-E(&QE9G0@;VX@9&5V:6-E`&EL;&5G86P@<V5E:P``<F5A9"UO;FQY
+M(&9I;&4@<WES=&5M`'1O;R!M86YY(&QI;FMS``!B<F]K96X@<&EP90!M871H
+M(&%R9W5M96YT`')E<W5L="!T;V\@;&%R9V4``$DO3R!S=')E86T@96UP='D`
+M`&9I;&4@;F%M92!T;V\@;&]N9P``9&ER96-T;W)Y(&YO="!E;7!T>0!T;V\@
+M;6%N>2!S;V9T(&QI;FMS("AL;V]P/RD````$H@``!+````2Z```$U```!.0`
+M``3\```%!@``!2````4X```%2@``!5H```5L```%?@``!9````6B```%K@``
+M!<0```78```%Y```!?8```8&```&%@``!B8```8X```&3```!F````9R```&
+M@@``!I````:H```&M@``!LP```;<```&Z```!O8```<(```'&@``!RX```="
+M````)@``9&]O<BXE;'@N)6QX``!.;R!M96UO<GD```!````@("`@("`@("`H
+M*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0$!`0$!"$A(2$A(2$
+MA(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!`0$!$!`0$!`0@H*"
+M@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0(```````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````/H```"48`````````````````
+M``````````````````````````EH````````````````````````````````
+M```````````````````````````````````````````````````````````"
+M````@``````-__\````.``X```````````````#__P````0`!````````%*B
+M```)F/__````!``$````````4K@``````````````#L```"(````@````'@`
+M``!P````:````&````!8````4````$@```!`````.````#````+:```#&```
+M`W@```-L```']@``!_(```?N```'Z@``!^8```?B```'W@``!]H```?6```'
+MT@``!\X```?*```'Q@``!\(```>^```'N@``![8```>R```'K@``!ZH```>F
+M```'H@``!YX```>:```'E@``!Y(```>.```'B@``!X8```>"```'?@``!WH`
+M``=V```'<@``!VX```=J```'9@``!V(```=>```$G@``"48```DD```)O```
+:`^P````"````````"<P```FX`````````_)>
+`
+end
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/compile.doc amiga/fsf/emacs18/amiga/amiga-extra/amiga/compile.doc
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/compile.doc Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/compile.doc Sat Sep 28 00:00:00 1996
@@ -0,0 +1,34 @@
+To compile emacs, you will need SAS C 6.01. If you try to make it work
+with Aztec C or gcc, you might run into difficulties with the dumping code:
+- The "small" data model (A4-relative) is used, to get all the variables
+ in one hunk.
+- Some variables are declared with the "far" attribute to get them out
+ of this hunk (and the dumping code depends on this). Move these to
+ the amiga_data.c module (which is for variables that shouldn't be
+ dumped).
+
+To compile:
+
+a) Install my 'unix compatibility' library (available by ftp and on fish
+ disks).
+
+b) Install as usual (see INSTALLATION).
+
+c) Compile the C preprocessor (SAS's one has a few problems ...):
+
+ cd gnuemacs:cpp
+ smake
+
+d) Compile & dump emacs
+
+ stack 20000
+ cd gnuemacs:src
+ smake
+ copy temacs /
+
+ (This takes around 20 minutes from scratch on an A2500/30).
+
+If all goes well, you should have a new version of emacs ...
+
+[Note: The DOC strings are not remade systematically. To change this,
+edit ymakefile and remove the comment from the rule for xemacs]
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,23 @@
+;;
+;; User-Name.el.
+;; ------------
+;; -ch3/11/93.
+;;
+;; This is a replacement for the (user-full-name) function that comes
+;; comes with emacs, so that it fetches the login name from $USERNAME
+;; and the full name from $REALNAME. As is the default on most amiga
+;; systems that are running UUCP and related utils.
+;;
+;; It will also check $USER for the login name.
+;;
+
+(defun user-login-name ()
+ (if (eq nil (getenv "UserName"))
+ (getenv "User")
+ (getenv "UserName")))
+
+(defun user-full-name ()
+ (if (eq nil (getenv "RealName"))
+ (user-login-name)
+ (getenv "RealName")))
+
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,14 @@
+;;
+;; This small bit of lisp will fix the so common #endif somthing
+;; (with no comment) code.
+;;
+
+(defun fix-endif-no-comment ()
+ (interactive)
+ (save-excursion
+ (beginning-of-buffer)
+ (replace-regexp "^#endif \\(.*\\)" "#endif /* \\1 */")
+ (beginning-of-buffer)
+ (replace-regexp "^#endif /\\* /\\* \\(.*\\) \\*/ \\*/" "#endif /* \\1 */")))
+
+
\ No newline at end of file
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker Sat Sep 28 00:00:00 1996
@@ -0,0 +1,286 @@
+From: chopps@ro-chp.UUCP (Chris Hopps)
+Subject: Emacs invoker.
+
+ This is the newest invoker of mine I am very pleased with it
+and think it would be good for inclusion in the main distribution.
+With the included rexx file (and some of the mods to emacs I sent you
+earlier,) this invoker supports multiple files on the cmd line. It
+also supports turning backups off for the files loaded on that line,
+and a WAIT command that will have Emacs return the prompt only after
+the files specified on the command line have been killed. The invoker
+also checks to see if Emacs is iconified if so it will de-iconify it.
+It brings emacs to the front and activates it (my mods needed for
+this.)
+
+This makes leaving GNUEmacs up and running all the time very feasable.
+The invoker can be used for programs like ``Arn'', ``Elm'' or whatever
+else kind of program that does something with a file after the editor
+returns.
+
+Here is the lisp code required for using the ``WAIT'' option of the
+invoker. It should be loaded in the .emacs file.
+
+-------8<-------------8<-------------8<-------------8<-------------8<--
+;; [notify-rexx-wait.el] notification of kill of a buffer to rexx.
+;; Copyright © 1993 Christian E. Hopps.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, write to the Free Software
+;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+;; I can be contacted at:
+;; bix: chopps
+;; uucp: chopps@ro-chp.UUCP (sycom.mi.org!ro-chp!chopps)
+
+(provide 'notify-rexx-wait)
+
+(make-variable-buffer-local 'notify-rexx-port)
+(set-default 'notify-rexx-port nil)
+
+;;; Set old-kill-buffer to the internal version
+;; first check to see if it has already been bound.
+;; if not then bind it to the internal.
+;;
+(if (not (fboundp 'old-rexx-notify-kill-buffer ))
+ (fset 'old-rexx-notify-kill-buffer (symbol-function 'kill-buffer)))
+
+;;; redefine kill-buffer to check to see if it should
+;; notify rexx that the buffer is being killed.
+;;
+(defun kill-buffer (buffer-strp)
+ "Notifys rexx that the current buffer is about to be killed. If it has one."
+ (interactive "bBuffer:")
+ (let ((buf nil))
+ (setq buf (get-buffer buffer-strp))
+ (switch-to-buffer buf)
+ (if (eq notify-rexx-port nil)
+ (old-rexx-notify-kill-buffer buffer-strp)
+ (amiga-arexx-send-command (concat "ADDRESS " notify-rexx-port "; QUIT") t)
+ (old-rexx-notify-kill-buffer buf))))
+-------8<-------------8<-------------8<-------------8<-------------8<--
+
+Here is the rexx code for the invoker, it can be copied to ``rexx:g.rexx''
+to be called from wshell with ``[prompt]g myfile.c WAIT'' or copied
+to ``s:g'' (or somewhere in path) to be called from the AmigaShell
+(make sure to set the ``s'' script bit.
+-------8<-------------8<-------------8<-------------8<-------------8<--
+/***[g.rexx]***************************************************/
+/* An invoker for GNU Emacs.
+ * Copyright © 1993 Christian E. Hopps
+ *
+ * FILES/M,WAIT=STICKY/S,NOBACKUPS/S"
+ *
+ * use WAIT or STICKY option to have g.rexx wait for buffers
+ * to be killed before returning (same as TurboText's ``WAIT''
+ * option or CED's ``STICKY'')
+ *
+ * NOBACKUPS will cause the files loaded by g.rexx not
+ * to perform backup saves.
+ *
+ * all options aply only to FILES that are specified on this
+ * invocation of g.rexx.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * I can be contacted at:
+ * bix: chopps
+ * uucp: chopps@ro-chp.UUCP (sycom.mi.org!ro-chp!chopps)
+ *
+ */
+
+options results
+PARSE ARG argv
+
+/* wait for buffer to be killed */
+wait = 0
+/* files that are being waited on. */
+waitingfiles = 0
+
+/* do not make backups */
+nobackups = 0
+
+/* Parse the args from command line. */
+idx = 0
+DO WHILE argv ~= ""
+ carg = GetNextItem()
+ uarg = UPPER(carg)
+ IF uarg = "STICKY" | uarg = "WAIT" THEN
+ wait = 1
+ ELSE IF uarg = "NOBACKUPS" THEN
+ nobackups = 1
+ ELSE IF uarg = "?" THEN DO
+ SAY "template: FILES/M,WAIT=STICKY/S,NOBACKUPS/S"
+ EXIT 0
+ END
+ ELSE IF uarg ~= "" THEN DO
+ IF SUBSTR(uarg,1,5) = "FILES" THEN DO
+ IF uarg = "FILES" THEN DO
+ file = GetNextItem()
+ IF file = "" THEN DO
+ SAY "template: FILES/M,WAIT=STICKY/S,NOBACKUPS/S"
+ EXIT 0
+ END
+ END
+ ELSE IF SUBSTR(uarg,6,1) = "=" THEN DO
+ file = SUBSTR(carg,7)
+ IF file = "" THEN DO
+ SAY "template: FILES/M,WAIT=STICKY/S,NOBACKUPS/S"
+ EXIT 0
+ END
+ END
+
+ END
+ ELSE DO
+ file = carg
+ IF file = "" THEN DO
+ SAY "template: FILES/M,WAIT=STICKY/S,NOBACKUPS/S"
+ EXIT 0
+ END
+ END
+ dir = PRAGMA('Directory')
+ IF 0 = pos(':',file) THEN DO
+ IF lc ~= '/' & lc ~= ':' THEN
+ dir = dir || '/'
+ filename = dir || file
+ END
+ ELSE DO
+ IF lc ~= '/' & lc ~= ':' THEN
+ dir = dir || '/'
+ filename = dir || file
+ END
+ filestoload.idx = filename
+ idx = idx + 1
+ END
+END
+
+IF wait = 1 THEN DO
+ start = 1
+ notifyport = "EMACS_NOTIFY" || start
+ DO WHILE SHOW('P',notifyport)
+ start = start + 1
+ notifyport = "EMACS_NOTIFY" || start
+ END
+
+ notifymp = OPENPORT(notifyport)
+ IF ~SHOW('P',notifyport) THEN DO
+ SAY "Cannot initialize the notification port."
+ EXIT 20
+ END
+END
+
+/* Load emacs if it is not already running */
+if (~show('p', 'EMACS1')) THEN DO
+ ADDRESS COMMAND
+ 'run >NIL: emacs'
+ 'waitforport EMACS1'
+END
+
+ADDRESS EMACS1
+
+IF wait = 1 THEN
+ "(require 'notify-rexx-wait)"
+
+/* will return either nil or t */
+"(symbol-value 'amiga-emacs-iconified)"
+
+IF result = "t" THEN
+ '(amiga-iconify)'
+
+fileidx = 0
+DO WHILE fileidx < idx
+ '(buffer-name)'
+ curbuf = RESULT
+
+ lisp = ' (progn '
+ IF curbuf ~= '"*scratch*"' THEN
+ lisp = lisp || ' (find-file-other-window "' || filestoload.fileidx || '"))'
+ ELSE
+ lisp = lisp || ' (find-file "' || filestoload.fileidx || '"))'
+
+ ADDRESS EMACS1 lisp
+
+ IF nobackups = 1 THEN DO
+ "(make-local-variable 'make-backup-files)"
+ '(setq make-backup-files nil)'
+ END
+
+ IF wait = 1 THEN DO
+ '(setq notify-rexx-port "' || notifyport || '")'
+ waitingfiles = waitingfiles + 1;
+ END
+ fileidx = fileidx + 1
+END
+
+'(amiga-window-to-front)'
+'(amiga-activate-window)'
+
+IF wait = 1 THEN DO
+ quitflag = 0
+ DO FOREVER
+ IF waitingfiles = 0 THEN
+ EXIT 0
+ t = WAITPKT(notifyport)
+
+ DO FOREVER
+ p = GETPKT(notifyport)
+ IF C2D(p) = 0 THEN BREAK
+ args = GETARG(p)
+
+ PARSE VAR args argval args
+ IF argval = "QUIT" THEN
+ waitingfiles = waitingfiles - 1
+
+ t = REPLY(p,1)
+ END
+ END
+END
+
+EXIT 0
+
+GetNextItem: PROCEDURE EXPOSE argv
+ch = LEFT(argv,1)
+DO WHILE ch = " " | ch = " "
+ argv = SUBSTR(argv,2)
+ ch = LEFT(argv,1)
+END
+ch = LEFT(argv,1)
+IF ch = '"' THEN
+ PARSE VAR argv '"'string'"' argv
+ELSE
+ PARSE VAR argv string argv
+RETURN string
+
+
+
+StripWS: PROCEDURE
+
+ARG string
+RETURN string
+-------8<-------------8<-------------8<-------------8<-------------8<--
+------------------------
+The Royal Oak Chophouse >> Chris Hopps
+Royal Oak, Michigan >> sycom.mi.org!ro-chp!chopps
+
+
\ No newline at end of file
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx Sat Sep 28 00:00:00 1996
@@ -0,0 +1,29 @@
+/* sayval.rexx
+ * -----------
+ * -ch3/18/93.
+ *
+ * call from dos prompt:
+ *
+ * sayval <some-emacs-symbol-name>
+ *
+ * ex: sayval amiga-emacs-iconified
+ *
+ * Christian E. Hopps.
+ */
+
+/* get the first arg from the command line and store in symbol */
+parse arg symbol
+
+/* address the emacs port */
+address EMACS1
+
+/* ask for full results */
+options results
+
+/* construct lisp inside emacs this will look like this
+ *
+ * (symbol-value 'some-variable-name) */
+
+/* call function by quoting the lisp code. */
+"(symbol-value '" || symbol || ")"
+say RESULT
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/README amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/README
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/README Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/README Sat Sep 28 00:00:00 1996
@@ -0,0 +1,50 @@
+dtags allows you to quickly lookup the autodocs for the AmigaOS functions
+while programming. It is a modification of the emacs TAGS facility.
+
+For example, you have forgotten the parameters for MakeLink. Your buffer contains:
+
+ if (MakeLink(
+
+you press the magic key (in my case M-g), and you get in an other buffer:
+
+dos.library/MakeLink dos.library/MakeLink
+
+ NAME
+ MakeLink -- Creates a filesystem link (V36)
+
+ SYNOPSIS
+ [...]
+
+which should solve all your problems ...
+
+To install this facility, you must:
+
+a) Have an assign of DOCS: to the directory containing the AmigaOS 2.0 autodocs.
+
+b) Copy dtags.el and dtags.elc to your lisp directory (probably gnuemacs:lisp).
+
+c) Execute the make-dtags.el file once (with M-x load-file). This will create
+a file called DTAGS in DOCS: to help emacs find the functions in the autodocs.
+
+d) Add the following lines to your .emacs file:
+
+(autoload 'visit-dtags-table "dtags" nil t)
+(autoload 'doc-tag "dtags" nil t)
+(autoload 'dtags-search "dtags" nil t)
+(autoload 'list-dtags "dtags" nil t)
+(autoload 'dtags-apropos "dtags" nil t)
+(autoload 'make-dtags "dtags" nil t)
+
+and optionally a key definition to execute doc-tag (the autodoc lookup function):
+
+(define-key global-map "\M-g" 'doc-tag)
+
+Usage:
+-----
+
+You just press M-g (if you chose that key). Emacs will prompt you for the
+function to lookup, but it will propose as a default a word near your
+cursor. Once this has been chosen, emacs will display the appropriate autodoc.
+You can enter a substring of the function name, in which case emacs will display
+the first one that matches it. If you want to see other functions containing the
+same substring, press M-, (or M-x tags-loop-continue).
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.el
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,237 @@
+;; Dtags facility for Emacs.
+;; Copyright (C) 1985, 1986, 1988 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY. No author or distributor
+;; accepts responsibility to anyone for the consequences of using it
+;; or for whether it serves any particular purpose or works at all,
+;; unless he says so in writing. Refer to the GNU Emacs General Public
+;; License for full details.
+
+;; Everyone is granted permission to copy, modify and redistribute
+;; GNU Emacs, but only under the conditions described in the
+;; GNU Emacs General Public License. A copy of this license is
+;; supposed to have been given to you along with GNU Emacs so you
+;; can know your rights and responsibilities. It should be in a
+;; file named COPYING. Among other things, the copyright notice
+;; and this notice must be preserved on all copies.
+
+
+(provide 'dtags)
+(load "tags")
+
+(defvar dtag-table-files nil
+ "List of file names covered by current dtag table.
+nil means it has not been computed yet; do (dtag-table-files) to compute it.")
+
+(defvar dtags-file-name "docs:DTAGS"
+ "Where to find the doc tags, use visit-dtags-table to change it.")
+
+(defun visit-dtags-table (file)
+ "Tell dtags commands to use tag table file FILE.
+FILE should be the name of a file created with the `etags' program.
+A directory name is ok too; it means file TAGS in that directory."
+ (interactive (list (read-file-name "Visit tags table: (default TAGS) "
+ default-directory
+ (concat default-directory "TAGS")
+ t)))
+ (setq file (expand-file-name file))
+ (if (file-directory-p file)
+ (setq file (concat file "DTAGS")))
+ (setq dtag-table-files nil
+ dtags-file-name file))
+
+(defun visit-dtags-table-buffer ()
+ "Select the buffer containing the current tag table.
+This is a file whose name is in the variable tags-file-name."
+ (or dtags-file-name
+ (call-interactively 'visit-dtags-table))
+ (set-buffer (or (get-file-buffer dtags-file-name)
+ (progn
+ (setq dtag-table-files nil)
+ (find-file-noselect dtags-file-name))))
+ (or (verify-visited-file-modtime (get-file-buffer dtags-file-name))
+ (cond ((yes-or-no-p "Dtags file has changed, read new contents? ")
+ (revert-buffer t t)
+ (setq dtag-table-files nil))))
+ (or (eq (char-after 1) ?\^L)
+ (error "File %s not a valid dtag table" dtags-file-name)))
+
+(defun dtag-table-files ()
+ "Return a list of files in the current dtag table.
+File names returned are absolute."
+ (save-excursion
+ (visit-dtags-table-buffer)
+ (or dtag-table-files
+ (let (files)
+ (goto-char (point-min))
+ (while (not (eobp))
+ (forward-line 1)
+ (end-of-line)
+ (skip-chars-backward "^,\n")
+ (setq prev (point))
+ (setq size (read (current-buffer)))
+ (goto-char prev)
+ (setq files (cons (expand-file-name
+ (buffer-substring (1- (point))
+ (save-excursion
+ (beginning-of-line)
+ (point)))
+ (file-name-directory dtags-file-name))
+ files))
+ (forward-line 1)
+ (forward-char size))
+ (setq dtag-table-files (nreverse files))))))
+
+(defun doc-tag (tagname &optional next)
+ "Find tag (in current tag table) whose name contains TAGNAME.
+ Selects the buffer that the tag is contained in
+and puts point at its definition.
+ If TAGNAME is a null string, the expression in the buffer
+around or before point is used as the tag name.
+ If second arg NEXT is non-nil (interactively, with prefix arg),
+searches for the next tag in the tag table
+that matches the tagname used in the previous find-tag.
+
+See documentation of variable tags-file-name."
+ (interactive (if current-prefix-arg
+ '(nil t)
+ (find-tag-tag "Find tag: ")))
+ (let (buffer file linebeg startpos)
+ (save-excursion
+ (visit-dtags-table-buffer)
+ (if (not next)
+ (goto-char (point-min))
+ (setq tagname last-tag))
+ (setq last-tag tagname)
+ (while (progn
+ (if (not (search-forward tagname nil t))
+ (error "No %sentries containing %s"
+ (if next "more " "") tagname))
+ (not (looking-at "[^\n\177]*\177"))))
+ (search-forward "\177")
+ (setq file (expand-file-name (file-of-tag)
+ (file-name-directory dtags-file-name)))
+ (setq linebeg
+ (buffer-substring (1- (point))
+ (save-excursion (beginning-of-line) (point))))
+ (search-forward ",")
+ (setq startpos (read (current-buffer))))
+ (let ((win (selected-window)))
+ (find-file-other-window file)
+ (widen)
+ (push-mark)
+ (let ((offset 1000)
+ found
+ (pat (concat (regexp-quote linebeg) "[ \t]")))
+ (or startpos (setq startpos (point-min)))
+ (while (and (not found)
+ (progn
+ (goto-char (- startpos offset))
+ (not (bobp))))
+ (setq found
+ (re-search-forward pat (+ startpos offset) t))
+ (setq offset (* 3 offset)))
+ (or found
+ (re-search-forward pat nil t)
+ (error "%s not found in %s" pat file)))
+ (beginning-of-line)
+ (recenter 0)
+ (select-window win)))
+ (setq tags-loop-form '(doc-tag nil t))
+ ;; Return t in case used as the tags-loop-form.
+ t)
+
+(defun dtags-search (regexp)
+ "Search through all files listed in tag table for match for REGEXP.
+Stops when a match is found.
+To continue searching for next match, use command \\[tags-loop-continue].
+
+See documentation of variable tags-file-name."
+ (interactive "sTags search (regexp): ")
+ (if (and (equal regexp "")
+ (eq (car tags-loop-form) 're-search-forward))
+ (tags-loop-continue nil)
+ (setq tags-loop-form
+ (list 're-search-forward regexp nil t))
+ (setq next-file-list (dtag-table-files))
+ (next-file)
+ (tags-loop-continue)))
+
+(defun list-dtags (string)
+ "Display list of dtags in file FILE.
+FILE should not contain a directory spec
+unless it has one in the dtag table."
+ (interactive "sList dtags (in file): ")
+ (with-output-to-temp-buffer "*Dtags List*"
+ (princ "Dtags in file ")
+ (princ string)
+ (terpri)
+ (save-excursion
+ (visit-dtags-table-buffer)
+ (goto-char 1)
+ (search-forward (concat "\f\n" string ","))
+ (forward-line 1)
+ (while (not (or (eobp) (looking-at "\f")))
+ (princ (buffer-substring (point)
+ (progn (skip-chars-forward "^\177")
+ (point))))
+ (terpri)
+ (forward-line 1)))))
+
+(defun dtags-apropos (string)
+ "Display list of all dtags in dtag table REGEXP matches."
+ (interactive "sDtag apropos (regexp): ")
+ (with-output-to-temp-buffer "*Dtags List*"
+ (princ "Dtags matching regexp ")
+ (prin1 string)
+ (terpri)
+ (save-excursion
+ (visit-dtags-table-buffer)
+ (goto-char 1)
+ (while (re-search-forward string nil t)
+ (beginning-of-line)
+ (princ (buffer-substring (point)
+ (progn (skip-chars-forward "^\177")
+ (point))))
+ (terpri)
+ (forward-line 1)))))
+
+(defun make-dtags (file)
+ (interactive "FDoc file: ")
+ (setq file (expand-file-name file))
+ (save-excursion
+ (find-file-noselect dtags-file-name)
+ (let ((buf-doc (get-buffer-create "*make-doc-temp*"))
+ (buf-tags (get-buffer-create dtags-file-name)))
+ ; First, create the header for the tags
+ (set-buffer buf-tags)
+ (goto-char (point-max))
+ (insert ?\f ?\n file ?,)
+ (let ((size-pos (point)))
+ (insert ?\n)
+ ; Now, we prepare the doc file
+ (set-buffer buf-doc)
+ (erase-buffer)
+ (insert-file file)
+ (goto-char (point-min))
+ ; We are now ready to find entries
+ (while (and (search-forward "\f" nil t)
+ (progn
+ (skip-chars-forward "\n")
+ (not (eobp))))
+ (let ((beg (point)))
+ (skip-chars-forward "^ \t")
+ (let ((fn (buffer-substring beg (point)))
+ (line (1+ (count-lines 1 beg))))
+ (set-buffer buf-tags)
+ (insert fn 127 (int-to-string line) ?, (int-to-string beg) ?\n)
+ (set-buffer buf-doc))))
+ (set-buffer buf-tags)
+ (let ((size (- (point) size-pos 1)))
+ (goto-char size-pos)
+ (insert (int-to-string size))))))
+ (pop-to-buffer (get-buffer dtags-file-name) t))
+
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.elc and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.elc differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,47 @@
+(require 'dtags)
+(make-dtags "docs:amiga.lib.doc")
+(make-dtags "docs:asl.doc")
+(make-dtags "docs:audio.doc")
+(make-dtags "docs:battclock.doc")
+(make-dtags "docs:battmem.doc")
+(make-dtags "docs:cia.doc")
+(make-dtags "docs:clipboard.doc")
+(make-dtags "docs:commodities.doc")
+(make-dtags "docs:console.doc")
+(make-dtags "docs:cx_lib.doc")
+(make-dtags "docs:debug.doc")
+(make-dtags "docs:disk.doc")
+(make-dtags "docs:diskfont.doc")
+(make-dtags "docs:dos.doc")
+(make-dtags "docs:exec.doc")
+(make-dtags "docs:expansion.doc")
+(make-dtags "docs:filesysres.doc")
+(make-dtags "docs:gadtools.doc")
+(make-dtags "docs:gameport.doc")
+(make-dtags "docs:graphics.doc")
+(make-dtags "docs:icon.doc")
+(make-dtags "docs:iffparse.doc")
+(make-dtags "docs:input.doc")
+(make-dtags "docs:intuition.doc")
+(make-dtags "docs:keyboard.doc")
+(make-dtags "docs:keymap.doc")
+(make-dtags "docs:layers.doc")
+(make-dtags "docs:mathffp.doc")
+(make-dtags "docs:mathieeedoubbas.doc")
+(make-dtags "docs:mathieeedoubtrans.doc")
+(make-dtags "docs:mathieeesingbas.doc")
+(make-dtags "docs:mathieeesingtrans.doc")
+(make-dtags "docs:mathtrans.doc")
+(make-dtags "docs:misc.doc")
+(make-dtags "docs:narrator.doc")
+(make-dtags "docs:parallel.doc")
+(make-dtags "docs:potgo.doc")
+(make-dtags "docs:printer.doc")
+(make-dtags "docs:rexxsyslib.doc")
+(make-dtags "docs:serial.doc")
+(make-dtags "docs:timer.doc")
+(make-dtags "docs:trackdisk.doc")
+(make-dtags "docs:translator.doc")
+(make-dtags "docs:utility.doc")
+(make-dtags "docs:wb.doc")
+
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/README amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/README
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/README Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/README Sat Sep 28 00:00:00 1996
@@ -0,0 +1,45 @@
+This directory contains several utilities sent by Tapio Hesikanen.
+
+Here follow a few explanations:
+
+From: hessu@fipnet.fi (Tapio Heiskanen)
+To: dgay@di.epfl.ch
+Subject: Here's a couple of software for you
+
+I was in need of fakemail and movemail, so I made them with some help of my
+friend. Both of those programs are in GNUEmacs distibution, so I thought if
+you'd like to include them.
+
+They should be developed further, but they fill my needs.
+If you make any changes to them, please send sources and binaries to me.
+
+I suppose you know how the progs should work so I won't write any docs for
+them.
+
+I also have an AREXX version of inews made up. If you would like to have,
+I could send to you. Maybe it should be in C, but REXX was enough for me.
+
+--
+ Tapio (hessu) Heiskanen _|_ Internet: hessu@diode.fipnet.fi
+ Sarkiniementie 11 B 18 \ / ICBM: 60 08 58 N / 24 52 53 E
+ 00210 HELSINKI _Y_ Telephone: +358 0 678284
+ FINLAND | Data: +358 0 6822206
+
+From: hessu@fipnet.fi (Tapio Heiskanen)
+To: dgay@di.epfl.ch
+Subject: Re: GNU Emacs 18.58, Amiga port 1.24
+
+[...]
+
+BTW: Included is a emacs.rexx script I made to ease my life. It checks first
+if the REXX-port exists and then starts emacs or just sends a rexx command
+respectively.
+
+--
+ Tapio (hessu) Heiskanen _|_ Internet: hessu@diode.fipnet.fi
+ Sarkiniementie 11 B 18 \ / ICBM: 60 08 58 N / 24 52 53 E
+ 00210 HELSINKI _Y_ Telephone: +358 0 678284
+ FINLAND | Data: +358 0 6822206
+
+distinews.lha contains directions for installing GNUS, the emacs news-reader,
+and a replacement for the inews command.
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/distinews.lha and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/distinews.lha differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx Sat Sep 28 00:00:00 1996
@@ -0,0 +1,25 @@
+/* emacs.rexx */
+
+
+parse arg params
+id=pragma('id')
+
+if ~show('P', 'EMACS1') then do
+ if ~open(out, 't:emacs', 'w') then do
+ say "EMACS.REXX: Can't open temporary file!"
+ exit 5
+ end
+ call writeln(out, 'stack 49152')
+ call writeln(out, 'run >nil: <nil: temacs' params)
+ call writeln(out, 'stack 16384')
+ call close(out)
+ address command 'execute t:emacs'
+ exit
+end
+
+
+if word(params,1)='-f' then do
+ address 'EMACS1' '('subword(params, 2)')'
+ exit
+end
+address 'EMACS1' '(find-file "'params'")'
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc Sat Sep 28 00:00:00 1996
@@ -0,0 +1,6 @@
+older fakemail.o fakemail.c
+if warn
+ incver version.h
+endif
+lc -L -M -E fakemail.c
+protect fakemail +p
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,68 @@
+/*
+ * FAKEMAIL.C
+ *
+ * compile: cc
+ *
+ * Written by Tapio Heiskanen
+ *
+ * Copyright (c) 1992 Ferry Island Technologies
+ * All rights reserved
+ *
+ * Created: 20-Jul-92
+ */
+
+#include "version.h"
+
+#include <proto/dos.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+char *version="$VER: fakemail V"VERSION;
+
+void main(int ac, char **arg)
+ {
+ char buf[256], hdr[256], name[256];
+ FILE *fifo, *sign;
+ int header=1;
+
+ sprintf(name, "T:fakemail%d", (int)name);
+
+ if(!(fifo=fopen(name, "w")))
+ {
+ printf("FAKEMAIL: Can't open temporary file %s\n", name);
+ exit(10);
+ }
+
+/* pipe stdin to t:<name> */
+
+ while(fgets(buf, 256, stdin))
+ {
+ if(*buf=='\n' && header)
+ if(sign=fopen("uulib:.fakemailhdrs", "r"))
+ {
+ while(fgets(hdr, 256, sign))
+ fputs(hdr, fifo);
+ fclose(sign);
+ header=0;
+ }
+ fputs(buf, fifo);
+ }
+
+
+/* cat uulib:.signature to t:<name> */
+
+ if(sign=fopen("uulib:.signature", "r"))
+ {
+ while(fgets(buf, 256, sign))
+ fputs(buf, fifo);
+ fclose(sign);
+ }
+ fclose(fifo);
+
+/* give the file for sendmail */
+
+ sprintf(name, "sendmail -f $user <T:fakemail%d", (int)name);
+ Execute(name, 0, 0);
+ sprintf(name, "T:fakemail%d", (int)name);
+ remove(name);
+ }
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts Sat Sep 28 00:00:00 1996
@@ -0,0 +1,7 @@
+-rr
+-v
+-cs
+-ms
+-Lc
+-Ld
+-Pfakemail
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1 @@
+#define VERSION "0.06"
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc Sat Sep 28 00:00:00 1996
@@ -0,0 +1,6 @@
+older movemail.o movemail.c
+if warn
+ incver version.h
+endif
+lc -L -M -E movemail.c
+protect movemail +p
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,44 @@
+/*
+ * MOVEMAIL.C
+ *
+ * compile: cc
+ *
+ * Written by Tapio Heiskanen
+ *
+ * Copyright (c) 1992 Ferry Island Technologies
+ * All rights reserved
+ *
+ * Created: 22-Jul-92
+ */
+
+#include "version.h"
+
+#include <proto/dos.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+char *version="$VER: movemail V"VERSION;
+
+void main(int ac, char **arg)
+ {
+ char buf[256];
+ FILE *tofile, *spoolfile;
+
+ if(!(spoolfile=fopen(arg[1], "r")))
+ {
+ printf("movemail: Can't open spool file %s\n", arg[1]);
+ exit(10);
+ }
+
+ if(!(tofile=fopen(arg[2], "a")))
+ {
+ printf("movemail: Can't open to file %s\n", arg[2]);
+ exit(10);
+ }
+
+ while(fgets(buf, 256, spoolfile))
+ fputs(buf, tofile);
+
+ fcloseall();
+ remove(arg[1]);
+ }
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts Sat Sep 28 00:00:00 1996
@@ -0,0 +1,7 @@
+-rr
+-v
+-cs
+-ms
+-Lc
+-Ld
+-Pmovemail
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1 @@
+#define VERSION "0.02"
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/README amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/README
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/README Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/README Sat Sep 28 00:00:00 1996
@@ -0,0 +1,24 @@
+Hi David !
+
+Just got your Emacs-port for my A 3000 - good work ! As I didn't have a
+tool for creating public screens, too, I simply wrote one. It's appended
+here (uuencoded). If you like it, include it in your next distribution.
+
+Regards, Michael
+
+------------------------------------------------------------------------------
+Michael Kaiser / Only my personal opinions
+Universitaet Karlsruhe
+Institut fuer Prozessrechentechnik und Robotik Internet : kaiser@ira.uka.de
+Postfach 6980 Tel. : +49 721 608-4051
+D-7500 Karlsruhe 1, FR Germany FAX : +49 721 606-740
+------------------------------------------------------------------------------
+Privat:
+Rintheimer Strasse 59 // Have you
+D-7500 Karlsruhe 1, FR Germany // hugged
+ \\ // your
+Tel. : (+49) (721) 61 18 19 \X/ Amiga today ?
+Komm. : Michael_Kaiser@KA.maus.de [A3000/20/260]
+------------------------------------------------------------------------------
+"Die schiessen auf mein schoenes Auto ... !" (Canardo)
+------------------------------------------------------------------------------
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/pub and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/pub differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING Sat Sep 28 00:00:00 1996
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/Emacs.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/Emacs.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_asm.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_asm.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_c.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_c.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_el.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_el.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_emacs.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_emacs.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_h.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_h.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_rexx.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_rexx.info differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.el
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,49 @@
+;;
+;; A new icon-creating scheme.
+;; When creating icons, the following replacement routine searches
+;; for icons of the name "def_<extension>.info".
+;; The routine searches first in the directories specified by the
+;; user in the variable "amiga-icon-path" and then in "env:Icons/".
+;; The directories in the list must contain the trailing slash.
+;;
+;; If it can't find any appropriate icons, and the file
+;; "env:Icons/def_emacs.info" exists, it is used. Otherwise
+;; the original function is called.
+;;
+;; Note that icons are only created when the variable
+;; "amiga-create-icons" is non-nil.
+;;
+;; Example: If the user would like to use the icons supplied by
+;; the SAS C-complier, the following lines could be placed
+;; in his or hers .emacs file:
+;; (setq amiga-icon-path '("sc:Icons/"))
+;; (setq amiga-create-icons t)
+;;
+
+(defvar amiga-icon-path '()
+ "A list of directories to scan when searching for new icons.")
+
+(if (not (fboundp 'old-amiga-put-icon))
+ (fset 'old-amiga-put-icon (symbol-function 'amiga-put-icon)))
+
+(defun amiga-put-icon (file force)
+ (if (or force (not (file-readable-p (concat file ".info"))))
+ (let ((extpos (string-match "\\.[a-zA-Z]\\'" file))
+ (iconname nil)
+ (path (append amiga-icon-path '("env:icons/")))
+ (found nil))
+ (if (and extpos (< 0 extpos))
+ (while (and (not found) path)
+ (setq iconname (concat (car path) "def_" (substring file (+ 1 extpos)) ".in\
+fo"))
+ (if (and iconname (file-readable-p iconname))
+ (progn
+ (copy-file iconname (concat file ".info"))
+ (setq found t)))
+ (setq path (cdr path))))
+ (if (not found)
+ (if (file-readable-p "env:Icons/def_emacs.info")
+ (copy-file "env:Icons/def_emacs.info" (concat file ".info"))
+ (old-amiga-put-icon file force))))))
+
+
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.info differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,91 @@
+;;
+;; FILE
+;; newicon.el $VER: V1.00 newicon.el
+;;
+;; DESCRIPTION
+;; A new icon-creating scheme.
+;;
+;; When creating icons, the following replacement routine searches
+;; for icons of the name "def_<extension>.info".
+;; The routine searches first in the directories specified a _list_
+;; by the user in the variable "amiga-icon-path" and then in
+;; "Gnuemacs:Icons/". The directories in the list must contain the
+;; trailing slash.
+;;
+;; If it can't find any appropriate icons, and the file
+;; "Gnuemacs:Icons/def_emacs.info" exists, it is used. Otherwise
+;; the original function is called.
+;;
+;; Note: icons are only created when the variable
+;; "amiga-create-icons" is non-nil.
+;;
+;; INSTALLATION
+;; Copy this file to a lisp-directory, for example Gnuemacs:lisp
+;;
+;; Create a directory called Gnuemacs:icons and copy the icons to it.
+;;
+;; Place the following line in your s:.emacs
+;; (setq amiga-create-icons t)
+;; (load "newicon")
+;;
+;; Example: If the user would like to use the icons supplied by
+;; the SAS C-complier, the following lines could be placed
+;; in his or hers .emacs file:
+;; (setq amiga-icon-path '("sc:Icons/"))
+;;
+;; LICENSE
+;; Copyright (C) 1993 Anders Lindgren
+;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2 of the License,or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY of FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, write to the Free Software
+;; Foundation, Inc., 675 Mass Ave, Cambridge, Ma 02139, USA.
+;;
+;; HOW TO CONTACT ME:
+;; voice: Scream Anders Lindgren LOUD
+;; email: d91ali@csd.uu.se
+;; mail: Anders Lindgren
+;; Kantorsg. 2-331
+;; S-754 24 Uppsala
+;; SUGA BBS:+46 (0)8 34 85 23
+;; +46 (0)8 34 32 76
+;;
+
+(defvar amiga-icon-path '()
+ "A list of directories to scan when searching for new icons.")
+
+(if (not (fboundp 'old-amiga-put-icon))
+ (fset 'old-amiga-put-icon (symbol-function 'amiga-put-icon)))
+
+(defun amiga-put-icon (file force)
+ (if (or force (not (file-readable-p (concat file ".info"))))
+ (let ((extpos (string-match "\\.[a-zA-Z]*\\'" file))
+ (iconname nil)
+ (path (append amiga-icon-path '("gnuemacs:icons/")))
+ (found nil))
+ (if (and extpos (< 0 extpos))
+ (while (and (not found) path)
+ (setq iconname (concat (car path) "def_" (substring file (+ 1 extpos)) ".info"))
+ (if (and iconname (file-readable-p iconname))
+ (progn
+ (copy-file iconname (concat file ".info"))
+ (setq found t)))
+ (setq path (cdr path))))
+ (if (not found)
+ (if (file-readable-p "gnuemacs:Icons/def_emacs.info")
+ (copy-file "gnuemacs:Icons/def_emacs.info" (concat file ".info"))
+ (old-amiga-put-icon file force))))))
+
+
+
+
+
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc.info differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,70 @@
+;;;
+;;; FILE
+;;; sticky.el $VER: V1.00 sticky.el
+;;;
+;;; DESCRIPTION
+;;; ELisp part of Emacs Starter Deluxe. This code
+;;; is loaded when Emacs is invoked in "sticky" mode.
+;;;
+;;; Place this file somewhere in your lisp-path, for example
+;;; in the directory GnuEmacs:lisp.
+;;;
+;;; Please read the file "starter.doc".
+;;;
+;;; AUTHORS
+;;; Anders Lindgren, d91ali@csd.uu.se
+;;; Bo Liljegren, bo-lilje@dsv.su.se
+;;;
+;;; LICENSE
+;;; Copyright (C) 1993 Anders Lindgren and Bo Liljegren
+;;;
+;;; This program is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 2 of the License, or
+;;; (at your option) any later version.
+;;;
+;;; This program is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY of FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with this program; if not, write to the Free Software
+;;; Foundation, Inc., 675 Mass Ave, Cambridge, Ma 02139, USA.
+;;;
+;;; HISTORY
+;;; 24-Sep-93 ALi Created this file.
+;;;
+
+
+(provide 'sticky)
+
+(make-variable-buffer-local 'sticky-rexx-port)
+(set-default 'sticky-rexx-port nil)
+
+(if (not (fboundp 'old-kill-buffer))
+ (fset 'old-kill-buffer (symbol-function 'kill-buffer)))
+
+;;; Redefine the kill-buffer function.
+;;; If the buffer is in "sticky" mode, notify the client that this buffer is no more.
+;;; The reason why we're asking whether to kill the buffer or not, is to avoid a situation
+;;; where the client is notified but the user answers no.
+(defun kill-buffer (buffer)
+ "One arg, a string or a buffer. Get rid of the specified buffer.
+Any processes that have this buffer as the `process-buffer' are killed
+with `delete-process'.
+Patched to notify client."
+ (interactive "bKill buffer: ")
+ (if (eq (setq buffer (get-buffer buffer)) nil)
+ nil
+ (save-excursion
+ (set-buffer buffer)
+ (if (or (not (buffer-modified-p buffer))
+ (not (buffer-file-name))
+ noninteractive
+ (yes-or-no-p (format "Buffer %s modified; kill anyway? " (buffer-name))))
+ (progn
+ (set-buffer-modified-p nil)
+ (if sticky-rexx-port
+ (amiga-arexx-send-command (concat "ADDRESS " sticky-rexx-port " TERMINATING") t))
+ (old-kill-buffer buffer))))))
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp.info differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx Sat Sep 28 00:00:00 1996
@@ -0,0 +1,286 @@
+/*
+FILE Emacs.rexx
+VERSION $VER: V1.06 Emacs.rexx
+DESCRIPTION Load a file into a (running) emacs.
+ emacs [flags and files]
+
+ The following options are supported:
+ -[not]tofront (Don't) move the Emacs window and screen
+ to the front.
+ -[not]sticky Do not terminate until the files on the
+ command line are killed.
+ -[no]screen Open a public screen (Requiers ScreenManager)
+
+ where the third and fourth argument corresponds to the
+ the screensize.
+AUTHOR Anders Lindgren, d91ali@csd.uu.se
+ Bo Liljegren, bo-lilje@dsv.su.se
+STATUS This file is in the public domain
+HISTORY
+ 11-Aug-92 ALi Created this file
+ 13-Aug-92 ALi Replaced "runwsh" with "run".
+ "else nop" added.
+ 14-Aug-92 ALi 1.00 V1.0 released.
+ 20-Aug-92 Bo L 1.01 Added ScreenManager stuff.
+ 03-Jan-93 ALi 1.02 MODE edited. COLOURS removed.
+ amiga-set-geometry moved to .emacs
+ 13-Jan-93 ALi 1.03 TOBACK added. SHANGHAI and DEFAULT removed,
+ emacs can now open itself correctly.
+ -nottofront flag added.
+ 20-Jan-93 Bo L 1.04 Replaced the static portname with the dynamic
+ in the 'WaitForPort'-line
+ 16 aug 93 Bo L 1.05 Changed screenresolution argument to DISPID.
+ To avoid nameconflict with different languages.
+ Changed ScrenManager parse part for those
+ (unblessed) who don't have WShell.
+ 22-Sep-93 ALi 1.06 Real option and filename parser added.
+ (amiga-window-to-front) and
+ (amiga-activate-window) called instead of
+ ScreenManager.
+ (cd ) removed. (Why should emacs move directry?)
+ Sticky option added.
+ Files loaded by (load-file ), even when Emacs
+ is started by the script.
+ Temporary file which sets the window size and
+ screen name added. (No use for anything in .emacs)
+ POPPUB option removed.
+ Now gets screen font from WB.
+*/
+
+OPTIONS RESULTS
+OPTIONS FAILAT 21
+
+/* Make sure required libraries are present */
+IF ~SHOW('l',"rexxsupport.library") THEN DO
+ IF ~ADDLIB("rexxsupport.library",0,-30,0) THEN DO
+ SAY "Can't find rexxsupport.library"
+ EXIT
+ END
+ END
+
+
+/* The name for the public screen */
+screenname = 'Emacs'
+
+portname = 'EMACS1'
+args = ARG(1)
+
+/* The commandline to send to a new emacs */
+cmd = ""
+
+/* A stem containing the options, the defaults are set here */
+flags.batch = 0 /* Batch mode, always start a new Emacs */
+flags.kill = 0 /* Kill a running emacs. */
+flags.screen = 1 /* Use a public screen (Requiers ScreenManager) */
+flags.sticky = 0 /* Wait until the buffers are terminated */
+flags.tofront = 1 /* Send the screen to the front */
+
+/* Argument parser */
+
+filesidx = 0
+DO WHILE LENGTH(args) > 1
+ args = strip(args, 'L') /* Strip leading blanks */
+ IF LEFT(args,1) = '"' THEN DO
+ filesidx = filesidx + 1
+ PARSE VAR args '"' files.filesidx '"' args
+ END
+ ELSE DO
+ PARSE VAR args onearg args
+ IF LEFT(onearg,1) = '-' THEN DO
+ SELECT
+ WHEN onearg = "-tofront" THEN flags.tofront = 1
+ WHEN onearg = "-nottofront" THEN flags.tofront = 0
+ WHEN onearg = "-sticky" THEN flags.sticky = 1
+ WHEN onearg = "-notsticky" THEN flags.sticky = 0
+ WHEN onearg = "-screen" THEN flags.screen = 1
+ WHEN onearg = "-noscreen" THEN flags.screen = 0
+ WHEN onearg = "-batch" THEN flags.batch = 1
+ WHEN onearg = "-kill" THEN DO
+ flags.kill = 1
+ cmd = cmd onearg
+ END
+ /* Emacs options with one argument */
+ WHEN (onearg = "-l" | onearg = "-load" | onearg = "-f",
+ | onearg = "-funcall" | onearg = "-i" | onearg = "-insert",
+ | onearg = "-t" | onearg = "-u" | onearg = "-user") THEN DO
+ PARSE VAR args optarg args
+ cmd = cmd onearg optarg
+ END
+ /* Emacs options with two arguments */
+ WHEN (onearg = "-dev" | onearg = "-fn") THEN DO
+ PARSE VAR args optarg1 optarg2 args
+ cmd = cmd onearg optarg1 optarg2
+ END
+ OTHERWISE cmd = cmd onearg
+ END
+ END
+ ELSE IF LEFT(onearg,1) = '+' THEN DO
+ PARSE VAR onearg '+' flags.linenumber
+ END
+ ELSE DO
+ filesidx = filesidx + 1
+ files.filesidx = onearg
+ END
+ END
+ END
+
+/* If in batch-mode, start a new Emacs synchronous using the
+ * original options */
+IF flags.batch THEN DO
+ ADDRESS COMMAND "temacs" arg(1)
+ EXIT rc
+ END
+
+
+/* If an Emacs Screen doesn't exists, create one */
+IF flags.screen & ~SHOWLIST('W',screenname||'-Demon') THEN DO
+ filnamn = 'T:SM'||d2x(random(256,1024,time('s')))
+ ADDRESS COMMAND 'ScreenManager INFO Workbench EXPERT >'||filnamn
+ IF ~OPEN(fil,filnamn,'R') THEN EXIT 20
+ cnt = 4
+ rad = READLN(fil)
+ IF EOF(fil) THEN cnt = 0
+ DO WHILE cnt ~= 0
+ ord = WORD(rad,1)
+ SELECT
+ WHEN ord = 'Position:' THEN DO
+ PARSE VAR rad . '=' xpos ' ' . '=' ypos ' ' .
+ cnt = cnt - 1
+ END
+ WHEN ord = 'Size:' THEN DO
+ PARSE VAR rad . '=' xsize ' ' . '=' ysize ' ' .
+ cnt = cnt - 1
+ END
+ WHEN ord = 'DisplayID:' THEN DO
+ resmode = WORD(rad,2)
+ cnt = cnt - 1
+ END
+ WHEN ord = 'Font:' THEN DO
+ PARSE VAR rad 'Font:' font '.font ' fontsize
+ font = strip(font)
+ cnt = cnt - 1
+ END
+ OTHERWISE
+ NOP
+ END
+ rad = READLN(fil)
+ IF EOF(fil) THEN cnt = 0
+ END
+ CALL CLOSE(fil)
+ CALL DELETE(filnamn)
+ menubar = fontsize + 2
+ ypos = ypos + menubar
+ ysize = ysize - menubar
+ ScrMng = ' OPEN '||screenname||' TITLE="'||screenname||' Screen"'
+ ScrMng = ScrMng||' DISPID='||resmode
+ ScrMng = ScrMng||' PLANES=2'
+ ScrMng = ScrMng||' PENS=011213103'
+ ScrMng = ScrMng||' FONT='||font||'.'||fontsize
+ ScrMng = ScrMng||' AUTOCLOSE' /* close screen when Emacs exists */
+ ScrMng = ScrMng||' TOBACK' /* It's moved to the front below */
+ ScrMng = ScrMng||' CX_TOFRONT="LCOMMAND e"'
+ ScrMng = ScrMng||' CX_DEFAULT="LCOMMAND SHIFT e"'
+ ADDRESS COMMAND 'ScreenManager' ScrMng
+
+ /* Create a small elisp file which sets the screen and size of Emacs */
+ sizefilename = 't:size' || d2x(random(256,1024,time('s'))) || '.el'
+ IF ~OPEN(fil, sizefilename, 'W') THEN EXIT 20
+ CALL WRITELN(fil, ';; Automagically created by Emacs.rexx')
+ CALL WRITELN(fil, '(amiga-set-geometry 0' fontsize+3 xsize ysize '"' || screenname || '")')
+ CALL CLOSE(fil)
+ cmd = cmd '-load' sizefilename
+ END
+
+/* Start a new Emacs, if no one exists. */
+IF SHOW('P', portname) = 0 THEN DO
+
+ CALL PRAGMA('stack', 40000)
+
+ ADDRESS COMMAND 'run <nil: >nil: temacs' cmd
+ ADDRESS COMMAND 'WaitForPort' portname
+ flags.kill = 0
+
+ END
+
+
+ADDRESS VALUE portname
+
+/* This no-op call doesn't return until after the
+ * t:sizeXX file has been read */
+"()"
+
+/* Delete the temporary file, if it was created. */
+IF SYMBOL('sizefilename') = 'VAR' THEN CALL DELETE(sizefilename)
+
+/* If in sticky mode, load sticky module into Emacs and
+ * open a communication port */
+IF flags.sticky THEN DO
+ "(require 'sticky)"
+
+ count = 1
+ DO UNTIL ~SHOW('P', stickyportname)
+ stickyportname = "EMACS_CLIENT" || count
+ count = count + 1
+ END
+
+ CALL OPENPORT(stickyportname)
+ IF ~SHOW('P', stickyportname) THEN DO
+ SAY "Emacs client: Can't open sticky port."
+ EXIT 20
+ END
+ END
+
+/* Get the current diretory. (There is no point in building a correct
+ * filename, since Emacs does that for us.) */
+dir = PRAGMA('directory')
+IF RIGHT(dir,1) ~= ':' THEN dir = dir || '/'
+
+stickycount = 0 /* The number of files to wait for */
+
+/* Load the files into emacs */
+DO i = 1 TO filesidx
+ '(find-file "' || dir || files.i || '")'
+
+ IF flags.sticky THEN DO
+ '(setq sticky-rexx-port "' || stickyportname || '")'
+ stickycount = stickycount + 1
+ END
+ END
+
+/* If the +linenumber option was given, go to the correct line */
+IF SYMBOL('flags.linenumber') = 'VAR' THEN '(goto-line ' || flags.linenumber || ')'
+
+/* Bring an activated Emacs window and screen to the front */
+IF flags.tofront THEN DO
+ '(amiga-window-to-front)'
+ '(amiga-activate-window)'
+ END
+
+/* If in sticky mode, wait for the buffers to be deleted */
+IF flags.sticky THEN DO
+ DO WHILE stickycount > 0
+
+ CALL WAITPKT(stickyportname)
+ pkt = GETPKT(stickyportname)
+ IF pkt = NULL() then iterate
+
+ IF GETARG(pkt) = "TERMINATING" THEN
+ stickycount = stickycount - 1
+
+ CALL REPLY(pkt, 0)
+
+ END
+
+ CALL CLOSEPORT(stickyportname)
+ END
+
+
+IF flags.kill THEN DO
+ '(save-buffers-kill-emacs)'
+ /* Screen normally closed automatically, but this won't hurt */
+ IF flags.screen THEN DO
+ ADDRESS COMMAND 'ScreenManager close' screenname
+ END
+ END
+
+EXIT 0
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexxmode10.lha and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexxmode10.lha differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/sas-c-emacs.lha and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/sas-c-emacs.lha differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc Sat Sep 28 00:00:00 1996
@@ -0,0 +1,260 @@
+
+
+
+ #### # # # ### ###
+ # ## ## # # # #
+ ## # # # # # # ##
+ # # # ##### # #
+ #### # # # # ### ###
+
+ ### ##### # ### ##### #### ###
+ # # # # # # # # # #
+ ### # # # ### # ## ###
+ # # ##### # # # # # #
+ ### # # # # # # #### # #
+
+ *** **** * * * * * ****
+ * * * * * * * * *
+ * * ** * * * * **
+ * * * * * * * * *
+ *** **** **** **** * * ****
+
+
+ ------------------------------------------------------
+ Release 1
+
+ Written by:
+ Anders Lindgren
+ Bo Liljegren
+
+ A (in our humble opinion) good Emacs starter
+ ------------------------------------------------------
+ FEATURING
+
+ o Load files into a running Emacs.
+
+ o Option to use a public screen (requiers ScreenManager).
+
+ o Full WB support; double-click icons into a running Emacs.
+
+ o New icon creating scheme, use different icons depending on what
+ type of file you are editing.
+
+ o Sticky flag, the script doesn't terminate until the requested
+ buffers are terminated.
+
+
+ LICENSE
+
+ Copyright (C) 1993 Anders Lindgren and Bo Liljegren
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY of FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, Ma 02139, USA.
+
+
+
+ CONTENTS
+
+The following files are contained in the archive:
+
+COPYING -- The Gnu General Public License
+starter.doc -- This file
+Emacs.info -- A nice Emacs icon drawn by Bo Liljegren
+rexx/emacs.rexx V1.06 -- The main starter script
+lisp/sticky.el V1.00 -- ELisp code used when a buffer is started with
+ the "-sticky" flag
+lisp/newicon.el V1.00 -- The ELisp code for the new icon creating scheme
+lisp/#?.elc -- Bytecompiled versions of the above files
+wbarg/wbarg V1.00 -- A utility which converts WB arguments
+ to shell dito
+wbarg/wbarg.c -- Source code for the above utility
+wbarg/makefile -- Rules for building the above with SAS/C 6.x.
+icons/def_#?.info -- Icons. All but def_el drawn by Christian A. Weber.
+
+
+
+
+
+ NEWSFLASH
+
+SUGA, Swedish User Group of Amiga is a non-profit nation wide club for
+Amiga-freaks in Sweden. It has been operating for many years (I joined
+in around -87, and have been more or less active ever since.) A
+newspaper with 16 to 20 pages is beeing distrubuted quaterly. A BBS is
+runed using the command line program NiKom, which is written by a
+member of the club. (Too bad for you non swedish speaking people that
+it isn't translated yet.) For the members in Stockholm we have a
+meeting every sunday between 11am and 3pm.
+
+Join by inserting only 150:- (less than $20) into the PostGiro account
+13 43 32-2. You can also just show up at the "Verksta'n" to see what
+it's all about!
+
+ Address: SUGA
+ Disponentvillan, Verkstan
+ Norrtullsgatan 12k
+ S-113 27 Stockholm
+
+ SUGA BBS:+46 (0)8 34 85 23
+ +46 (0)8 34 32 76
+
+
+ INSTALLATION
+
+Copy the files in the "lisp" directory into a directory in the
+Emacs load path, for example GnuEmacs:lisp.
+
+Copy the file in the "rexx" directory to REXX:
+
+Copy the file "wbarg/wbarg" into the GnuEmacs:etc directory.
+
+
+If you would like to use the new icon creating scheme then
+create a directory named GnuEmacs:icons and copy the contents
+of the "icons" to it and add the following line to your
+s:.emacs file.
+
+ (load "newicon")
+ (setq amiga-create-icons t)
+
+Older revisions of the script Emacs.rexx required that the command
+(amiga-set-geometry ) were executed in s:.emacs. This is no longer the
+case, hence the line should be removed.
+
+If the -screen option should be used, the program ScreenManager must
+be installed. The program is not included in this archive since its
+license does not allow it to be fully freely distributable, it can be
+found one ONE (yes, ONE I understood the license correctly) PD disk
+serie, and on AmiNet. If you can't find it you can order it from the
+author (you can also inform him of the existence of the Gnu General
+Public License):
+
+ Bernhard Möllemann
+ Luisenstraße 17
+ D-7500 Karlsruhe 1
+ Germany
+
+In the future we might rewrite Emacs.rexx so it uses some other screen
+opener, if it turns out that ScreenManager is too difficult to find.
+
+
+ EMACS.REXX
+
+The heart of the Emacs Starter Deluxe is the script emacs.rexx. It loads
+files into a running Emacs or starts a new Emacs. It is capable of opening
+a public screen by the help of the utility ScreenManager. The resolution
+and color of the screen is cloned from the Workbench, although the depth
+will always be two bitplanes.
+
+
+ Usage: [rx] emacs [options|+linenumber] [filenames]
+
+
+ -[not]tofront Bring the Emacs window and screes to the front.
+ Default is -tofront.
+
+ -[not]sticky Wait until the filenames requested are killed by
+ Emacs. Default is -notsticky.
+
+ -[no]screen Open a public screen and place Emacs on it.
+ This option requiers the program "ScreenManager".
+ Default is -screen.
+
+The script also handles standard Emacs options, even though some are
+implemented as no-ops when loading files into a running Emacs.
+
+The meaning of the standard option "-kill" is extended; if a running Emacs
+exists it is terminated.
+
+
+ WORKBENCH SUPPORT
+
+The Emacs Starter Deluxe has full Workbench support. This means that a
+file conneted to an icon can be loaded into a running Emacs.
+
+This feature requiers a project icon with the default tool set to
+"GnuEmacs:etc/wbarg" and the tooltype:
+ COMMAND=sys:rexxc/rx emacs
+
+A number of icons with this setup can be found in the icons directory
+of this archive.
+
+If no file is connected to an icon which is double-clicked Emacs will
+be started, or brought to front, but no file would be loaded.
+
+Note that the icons Emacs normally creates does NOT have the tool and
+tooltype set correctly. But, gentle reader, a solution to this problem
+can be found in the next section.
+
+
+ NEW ICON SCHEME
+
+To make as life simple as possible for workbench users a new icon
+creating scheme has been invented. To activate it please place the
+following lines in your s:.emacs file:
+
+ (load "newicon")
+ (setq amiga-create-icons t)
+
+The new scheme checks the extension of the file edited and tries to
+find an icon with the name "def_<extension>.el" in the icon path. If
+no one is found an icon named "GnuEmacs:icons/def_emacs.el" is used.
+As an emergency exit, the old icon creation routine is called.
+
+The icon path is defined to be the directories contained in the list
+"amiga-icon-path" and in the directory "GnuEmacs:Icons". Note that the
+directories in the list must end in a colon or slash.
+
+Example: If the user would like to use the icons supplied by the SAS
+C-complier and the icons supplied by DefaultIcon, the following lines
+could be placed in his or hers .emacs file:
+ (setq amiga-icon-path '("sc:Icons/" "Env:Icons/"))
+
+
+ SO WHAT'S THE DARK SIDE?
+
+All programs must have something which isn't working properly, and yes,
+there is one thing we don't recomend:
+Don't iconify Emacs, since the screen closes automatically when the Emacs
+window is closed. There is a way around it though; execute the emacs.rexx
+script again to open a new screen and then deiconify Emacs.
+
+If for some reason Emacs fails to start but the screen shows up it must
+be closed before the next attempt to start Emacs. This is done by issuing
+the command "ScreenManager CLOSE Emacs".
+
+
+ HOW TO CONTACT US
+
+If you would like new features to be added to Emacs Starter Deluxe, or if
+you whould discover a bug, don't hesitate to contact us:
+
+email: d91ali@csd.uu.se bo-lilje@dsv.su.se
+
+mail: Anders Lindgren Bo Liljegren
+ Kantorsg. 2-331 Skogvaktarg. 12
+ S-754 24 Uppsala 115 42 Stockholm
+
+voice: Scream Anders or Bosse LOUD
+
+
+ OTHER TITLES
+
+The following Emacs applications has been written by Anders Lindgren:
+
+rexx-mode -- A Complete editing mode and a source level
+ debugger for REXX. (Machine independent, but
+ it works on the Amiga.)
+sas-c-mode -- A minor mode for communication with the SAS/C
+ 6.x message browser SCMSG and more.
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc.info differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile Sat Sep 28 00:00:00 1996
@@ -0,0 +1,12 @@
+
+wbarg: wbarg.o
+ slink TO wbarg FROM lib:c.o wbarg.o LIB lib:sc.lib MAP wbarg.map hsflo
+ copy wbarg gnuemacs:etc
+
+wbarg.o: wbarg.c
+ sc wbarg.c
+
+release:
+ lha -x -a -r a wbarg.lha wbarg wbarg.c icons/\#? sc/\#? makefile newicon.el def_emacs.info README
+
+
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,379 @@
+/*
+ * FILE
+ * wbarg V1.0 by Anders Lindgren
+ *
+ * DESCRIPTION
+ * Convert WB arguments into shell dito.
+ *
+ * This programs looks for a tooltype of the name COMMAND, to which
+ * if adds the WB arguments, before executing the command as a shell
+ * process.
+ *
+ * One area of use is to set the COMMAND tooltype to:
+ * COMMAND=sys:rexxc/rx rexxscript
+ * to run the rexx script "rexxscript" with WB arguments.
+ *
+ * WARNING
+ * This is a HACK, it might stop to work on future OS-releases, if
+ * Commodore would change the path mechanism.
+ *
+ * This program should work under 1.3, but it hasn't been tested. If
+ * it is runed under V39 it takes advantage of new features. (under
+ * V37 AllocDosObject(DOS_CLI, ...) is buggy.)
+ *
+ * LICENSE
+ * Copyright (C) 1993 Anders Lindgren
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License,or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY of FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, Ma 02139, USA.
+ *
+ * HOW TO CONTACT ME:
+ * voice: Scream Anders Lindgren LOUD
+ * email: d91ali@csd.uu.se
+ * mail: Anders Lindgren
+ * Kantorsg. 2-331
+ * S-754 24 Uppsala
+ * SUGA BBS:+46 (0)8 34 85 23
+ * +46 (0)8 34 32 76
+ *
+ * TODO
+ * Define a STACK tooltype to set the stack size.
+ *
+ * HISTORY
+ * 09-Sep-93 Wrote the program.
+ * 28-Sep-93 Added the add/free_cli functions
+ * V1.0 Released
+ */
+
+#include <exec/types.h>
+
+#include <exec/memory.h>
+#include <exec/execbase.h>
+#include <dos/dos.h>
+#include <dos/dostags.h>
+#include <workbench/startup.h>
+
+#define __USE_SYSBASE
+
+#include <proto/exec.h>
+#include <proto/dos.h>
+#include <proto/icon.h>
+
+#include <stdio.h>
+#include <strings.h>
+
+
+#define CMDLINE 512 /* Length of the command line */
+
+
+/* Forward references */
+
+int get_command(struct WBArg * wbarg, char buffer[], int maxlen);
+void name_of_lock(BPTR lock, char buffer[], int maxlen);
+void usage(void);
+int add_cli(void);
+void free_cli(void);
+
+
+/* The version string */
+UBYTE *vers="\0$VER: wbarg 1.0 (" __DATE__ ")";
+
+/* The (secret?) structure of path */
+
+struct path {
+ BPTR next;
+ BPTR lock;
+};
+
+
+/* A combined cli-structure and BSTR:s used when KS < 39 */
+struct mycli {
+ struct CommandLineInterface cli; /* Must be the first entry in the structure! */
+ UBYTE set_name[80];
+ UBYTE command_name[80];
+ UBYTE prompt[80];
+ UBYTE command_file[80];
+};
+
+
+void
+main(int argc, char *argv[])
+{
+ char commandline[CMDLINE]; /* The commandline to issue */
+ char args[CMDLINE];
+
+ struct WBStartup * argmsg;
+ struct WBArg * wbarg;
+
+ BPTR olddir;
+ BPTR lock;
+
+ int found_cmd = FALSE; /* Flag: TRUE when a COMMAND tooltype is found */
+ int created_cli = FALSE; /* Flag: TRUE when we created our own cli-structure */
+
+ int i;
+
+ /* If we haven't got a Cli-structure, create one */
+ if (Cli() == NULL) {
+ if (add_cli()) {
+ created_cli = TRUE;
+ }
+ else {
+ puts("wbarg: Error while creating Cli-structure and path\n");
+ }
+
+ }
+
+
+ if (argc) {
+ usage(); /* It's no point in running it from the shell */
+ }
+ else {
+ argmsg = (struct WBStartup *)argv;
+ wbarg = argmsg->sm_ArgList;
+
+ args[0] = '\0';
+
+ for (i=0; i<argmsg->sm_NumArgs; i++) {
+
+ olddir = -1;
+ if ((wbarg->wa_Lock) && (*wbarg->wa_Name)) {
+ olddir = CurrentDir(wbarg->wa_Lock);
+ }
+
+ /* Get the command to execute */
+ if (get_command(wbarg, commandline, CMDLINE)) {
+ found_cmd = TRUE;
+ }
+
+ /* Build all the arguments */
+ if ((i>0) && *wbarg->wa_Name) {
+ if (lock = Lock(wbarg->wa_Name, ACCESS_READ)) {
+ strncat(args, " \"", CMDLINE);
+ name_of_lock(lock, args, CMDLINE);
+ strncat(args, "\"", CMDLINE);
+ UnLock(lock);
+ }
+ }
+
+ if (olddir != -1) {
+ CurrentDir(olddir);
+ }
+
+ wbarg++; /* Use the next argument to the next loop iteration */
+ }
+
+ if (found_cmd) {
+ strncat(commandline, args, CMDLINE);
+ Execute(commandline, NULL, NULL);
+ }
+ else {
+ usage(); /* No COMMAND tooltype found */
+ }
+ }
+ if (created_cli) {
+ /* ((struct Process *) FindTask(NULL))->pr_CLI = NULL; */
+ free_cli();
+ }
+}
+
+
+/*
+ * FUNCTION
+ * get_command
+ *
+ * DESCRIPTION
+ * Find a icon with the COMMAND tooltype set.
+ */
+
+int
+get_command(struct WBArg * wbarg, char buffer[], int maxlen)
+{
+ struct DiskObject * dobj;
+ char ** toolarray;
+ char * s = NULL;
+
+ if ((*wbarg->wa_Name) && (dobj = GetDiskObject(wbarg->wa_Name))) {
+ toolarray = (char **)dobj->do_ToolTypes;
+
+ if (s = (char *)FindToolType(toolarray, "COMMAND")) {
+ s[maxlen-1] = '\0'; /* Make sure the string is nullterminated */
+ strncpy(buffer, s, maxlen-1);
+ }
+ FreeDiskObject(dobj);
+ }
+ return(s == NULL ? FALSE : TRUE);
+}
+
+
+/*
+ * FUNCTION
+ * name_of_lock
+ *
+ * DESCRIPTION
+ * Create the filename from the lock supplied.
+ * NOTE: The name is ADDED to the string in the buffer.
+ */
+
+void
+name_of_lock(BPTR lock, char buffer[], int maxlen)
+{
+ BPTR newlock;
+ /* Static to save space on the stack during recursion */
+ static __aligned struct FileInfoBlock fib;
+ int root;
+
+ if (newlock = ParentDir(lock)) {
+ name_of_lock(newlock, buffer, maxlen);
+ UnLock(newlock);
+ root = FALSE;
+ }
+ else {
+ root = TRUE;
+ }
+
+ if (Examine(lock, & fib)) {
+ strncat(buffer, fib.fib_FileName, maxlen);
+ if (fib.fib_DirEntryType > 0) {
+ strncat(buffer, root ? ":" : "/", maxlen);
+ }
+ }
+}
+
+
+/*
+ * FUNCTION
+ * usage
+ *
+ * DESCRIPTION
+ * Write a small information text.
+ */
+
+void
+usage(void)
+{
+ puts("WBARG A program which converts workbench");
+ puts(" arguments to command line dito.");
+ puts("Usage: Create a project icon and set");
+ puts(" the tooltype named COMMAND to the");
+ puts(" command you would like to run");
+ puts("Example: COMMAND=sys:rexxc/rx someprogram");
+}
+
+
+/*
+ * FUNCTION
+ * add_cli
+ *
+ * DESCRIPTION
+ * Attaches a CommandLineInterface-structure to the current (WB-started)
+ * process and copies the path from the Workbench task.
+ *
+ * Return non-FALSE on success;
+ */
+
+int
+add_cli()
+{
+ struct CommandLineInterface * cli = NULL;
+ struct mycli * mycli;
+ struct Process * wb;
+ BPTR p; /* The path structure to copy from */
+ struct path * newp; /* The new path structure */
+ BPTR * prev;
+
+ /*
+ * Under 1.3 AllocDosObject does not exists, under <39 the DOS_CLI option is buggy
+ */
+ if (SysBase->LibNode.lib_Version < 39) {
+ if (mycli = (struct mycli *)AllocMem(sizeof(struct mycli), MEMF_CLEAR|MEMF_PUBLIC)) {
+ cli = & mycli->cli;
+ mycli->cli.cli_FailLevel = 10;
+ mycli->cli.cli_Background = DOSTRUE;
+ mycli->cli.cli_SetName = MKBADDR(& mycli->set_name);
+ mycli->cli.cli_CommandName = MKBADDR(& mycli->command_name);
+ mycli->cli.cli_Prompt = MKBADDR(& mycli->prompt);
+ mycli->cli.cli_CommandFile = MKBADDR(& mycli->command_file);
+ }
+ }
+ else {
+ cli = (struct CommandLineInterface *)AllocDosObjectTags(DOS_CLI, TAG_DONE);
+ }
+ if (cli) {
+ cli->cli_DefaultStack = 4096;
+ ((struct Process *) FindTask(NULL))->pr_CLI = MKBADDR(cli);
+
+ if (wb = (struct Process *)FindTask("Workbench")) {
+ prev = & cli->cli_CommandDir;
+
+ p = ((struct CommandLineInterface *)BADDR(wb->pr_CLI))->cli_CommandDir;
+ while(p){
+ if (newp = AllocMem(sizeof(struct path), MEMF_PUBLIC)) {
+ newp->lock = DupLock(((struct path *)BADDR(p))->lock);
+
+ * prev = MKBADDR(newp);
+ prev = & newp->next;
+ }
+ else {
+ * prev = NULL;
+ free_cli();
+ return(FALSE);
+ }
+ p = ((struct path *)BADDR(p))->next;
+ }
+ * prev = NULL; /* Terminate the linked list */
+ }
+ return(TRUE); /* OK */
+ }
+ return(FALSE); /* No cli structure allocated */
+}
+
+
+/*
+ * FUNCTION
+ * free_cli
+ *
+ * DESCRIPTION
+ * Undo the work of add_cli
+ */
+
+void
+free_cli()
+{
+ struct CommandLineInterface * cli;
+ struct path * p;
+ struct path * p_next;
+
+ if (cli = Cli()) {
+ p = (struct path *)BADDR(cli->cli_CommandDir);
+ cli->cli_CommandDir = NULL;
+
+ while (p) {
+ p_next = (struct path *)BADDR(p->next);
+ if (p->lock) {
+ UnLock(p->lock);
+ }
+ FreeMem((void *)p, sizeof(struct path));
+ p = p_next;
+ }
+ if (SysBase->LibNode.lib_Version < 39) {
+ FreeMem((void *)cli, sizeof(struct mycli));
+ }
+ else {
+ FreeDosObject(DOS_CLI, (void *)cli);
+ }
+
+ ((struct Process *) FindTask(NULL))->pr_CLI = NULL;
+ }
+}
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg.info differ
Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/xsh11.lha and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/xsh11.lha differ
diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/schinz/functions.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/schinz/functions.el
--- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/schinz/functions.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/schinz/functions.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,88 @@
+;; Code contributed by :
+;; Michel Schinz | INTERNET: Week-end: schinz@guano.alphanet.ch
+;; Epinettes 10a | Week : schinz@di.epfl.ch
+;; CH-2013 COLOMBIER | FIDONET: 2:302/562 (Michel Schinz)
+
+
+ (defun amiga-arexx-add-lib (lib entry)
+ "Adds the specified ARexx library, with given entry point."
+ (interactive "sLibrary name: \nnOffset: ")
+ (amiga-arexx-do-command (concat "CALL ADDLIB('" lib "',0," entry ")") t))
+
+ (defun amiga-reqtools-find-file ()
+ "Like find-file, but with RexxReqTools' file requester."
+ (interactive)
+ (amiga-arexx-add-lib "rexxreqtools.library" -30)
+ (amiga-arexx-do-command (concat "f = rtFileRequest('" default-directory
+ "',,'Find file')\n"
+ "IF f ~= '' THEN"
+ " '(find-file \"'||f||'\")'") t))
+
+ (defun amiga-reqtools-insert-file ()
+ "Like insert-file, but with RexxReqTools' file requester."
+ (interactive)
+ (amiga-arexx-add-lib "rexxreqtools.library" -30)
+ (amiga-arexx-do-command (concat "f = rtFileRequest('" default-directory
+ "',,'Insert file')\n"
+ "IF f ~= '' THEN"
+ " '(insert-file \"'||f||'\")'") t))
+
+ (defun amiga-reqtools-write-file ()
+ "Like write-file, but with RexxReqTools' file requester."
+ (interactive)
+ (let ((dir (file-name-directory buffer-file-name))
+ (file (file-name-nondirectory buffer-file-name)))
+ (amiga-arexx-add-lib "rexxreqtools.library" -30)
+ (amiga-arexx-do-command (concat "f = rtFileRequest('" dir "','" file
+ "','Write file',,"
+ "'rtfi_flags=freqf_save')\n"
+ "IF f ~= '' THEN"
+ " '(write-file \"'||f||'\")'") t)))
+
+ ;;; amiga-update-version-string
+ ;;; Michel Schinz
+ ;;; $VER: amiga_verstring.el 1.0 (7.05.1993)
+
+ (defun amiga-update-version-string ()
+ "Create/update a version string (CBM style) on the current line.
+ If no version string is present on the current line, create a new one
+ that looks like `$VER: <buffer-name> 1.0 (<current_date>)' at the
+ point position. If a version string is already present on the current
+ line, the date is ... updated and the revision is incremented.
+ Please note that currently, no spaces are allowed in the `name' field."
+ (interactive)
+ (save-excursion
+ (let (end-of-line-pos
+ name version revision date
+ (old-point-pos (point-marker)))
+ (let* ((date-string (current-time-string))
+ (garbage (string-match
+ " \\([A-Z][a-z][a-z]\\) *\\([0-9]*\\) .* \\([0-9]*\\)$"
+ date-string))
+ (day (substring date-string (match-beginning 2) (match-end 2)))
+ (month
+ (cdr (assoc
+ (substring date-string (match-beginning 1) (match-end 1))
+ '(("Jan" . "01") ("Feb" . "02") ("Mar" . "03") ("Apr" . "04")
+ ("May" . "05") ("Jun" . "06") ("Jul" . "07") ("Aug" . "08")
+ ("Sep" . "09") ("Oct" . "10") ("Nov" . "11") ("Dec" . "12")))))
+ (year (substring date-string (match-beginning 3) (match-end 3))))
+ (setq date (concat day "." month "." year)))
+ (end-of-line)
+ (setq end-of-line-pos (point))
+ (beginning-of-line)
+ (if (search-forward "$VER: " end-of-line-pos t)
+ (let ((start-of-version-string (- (point) 6)))
+ (re-search-forward
+ " *\\([^ ]*\\) *\\([0-9]*\\)\.\\([0-9]*\\) *([0-9.]*)" end-of-line-pos t)
+ (setq name (buffer-substring (match-beginning 1) (match-end 1))
+ version (buffer-substring (match-beginning 2) (match-end 2))
+ revision (+ 1 (string-to-int
+ (buffer-substring (match-beginning 3) (match-end 3)))))
+ (delete-region start-of-version-string (point)))
+ (progn (setq name (file-name-nondirectory (buffer-name))
+ version 1
+ revision 0)
+ (goto-char old-point-pos)))
+ (insert (concat "$VER: " name " " version "." revision " (" date ")")))))
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/alloca.h amiga/fsf/emacs18/amiga/unix/include/alloca.h
--- baseline/fsf/emacs18/amiga/unix/include/alloca.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/alloca.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,8 @@
+#ifndef ALLOCA_H
+#define ALLOCA_H
+
+#include <stddef.h>
+
+void *alloca(size_t size);
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/amiga/ioctl.h amiga/fsf/emacs18/amiga/unix/include/amiga/ioctl.h
--- baseline/fsf/emacs18/amiga/unix/include/amiga/ioctl.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/amiga/ioctl.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,15 @@
+#ifndef _AMIGA_H
+#define _AMIGA_H
+
+/* Amiga specific ioctl's */
+
+#define _AMIGA_IOCTL_BASE 2048
+
+#define _AMIGA_INTERACTIVE (_AMIGA_IOCTL_BASE + 0) /* Is file Interactive ? */
+#define _AMIGA_GET_FH (_AMIGA_IOCTL_BASE + 1) /* Get an AmigaOS fh for file */
+#define _AMIGA_FREE_FH (_AMIGA_IOCTL_BASE + 2) /* Free a fh obtained by GET_FH */
+#define _AMIGA_TRUNCATE (_AMIGA_IOCTL_BASE + 3) /* Truncate file to given size */
+#define _AMIGA_SETPROTECTION (_AMIGA_IOCTL_BASE + 4) /* Set (amiga) protection on file */
+#define _AMIGA_DELETE_IF_ME (_AMIGA_IOCTL_BASE + 5) /* Delete myself if I am the file whose lock is passed as parameter */
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/errno.h amiga/fsf/emacs18/amiga/unix/include/errno.h
--- baseline/fsf/emacs18/amiga/unix/include/errno.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/errno.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,51 @@
+/**
+*
+* The following symbols are the error codes returned by the UNIX system
+* functions. Typically, a UNIX function returns -1 when an error occurs,
+* and the global integer named errno contains one of these values.
+*
+*/
+#define EOSERR -1 /* Operating system error */
+
+#define EPERM 1 /* User is not owner */
+#define ENOENT 2 /* No such file or directory */
+#define ESRCH 3 /* No such process */
+#define EINTR 4 /* Interrupted system call */
+#define EIO 5 /* I/O error */
+#define ENXIO 6 /* No such device or address */
+#define E2BIG 7 /* Arg list is too long */
+#define ENOEXEC 8 /* Exec format error */
+#define EBADF 9 /* Bad file number */
+#define ECHILD 10 /* No child process */
+#define EAGAIN 11 /* No more processes allowed */
+#define ENOMEM 12 /* No memory available */
+#define EACCES 13 /* Access denied */
+#define EFAULT 14 /* Bad address */
+#define ENOTBLK 15 /* Bulk device required */
+#define EBUSY 16 /* Resource is busy */
+#define EEXIST 17 /* File already exists */
+#define EXDEV 18 /* Cross-device link */
+#define ENODEV 19 /* No such device */
+#define ENOTDIR 20 /* Not a directory */
+#define EISDIR 21 /* Is a directory */
+#define EINVAL 22 /* Invalid argument */
+#define ENFILE 23 /* No more files (units) allowed */
+#define EMFILE 24 /* No more files (units) allowed for this process */
+#define ENOTTY 25 /* Not a terminal */
+#define ETXTBSY 26 /* Text file is busy */
+#define EFBIG 27 /* File is too large */
+#define ENOSPC 28 /* No space left */
+#define ESPIPE 29 /* Seek issued to pipe */
+#define EROFS 30 /* Read-only file system */
+#define EMLINK 31 /* Too many links */
+#define EPIPE 32 /* Broken pipe */
+#define EDOM 33 /* Math function argument error */
+#define ERANGE 34 /* Math function result is out of range */
+#define EWOULDBLOCK 35 /* Operation would block */
+#define ENAMETOOLONG 36 /* File name is too long */
+#define ENOTEMPTY 37 /* Directory is not empty */
+#define ELOOP 38 /* Too many soft links found */
+
+extern int errno, _OSERR;
+extern int sys_nerr;
+extern char *sys_errlist[];
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/fcntl.h amiga/fsf/emacs18/amiga/unix/include/fcntl.h
--- baseline/fsf/emacs18/amiga/unix/include/fcntl.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/fcntl.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1 @@
+#include <sys/fcntl.h>
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/grp.h amiga/fsf/emacs18/amiga/unix/include/grp.h
--- baseline/fsf/emacs18/amiga/unix/include/grp.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/grp.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,12 @@
+#ifndef _GRP_H
+#define _GRP_H
+
+struct group {
+ char *gr_name; /* name of the group */
+ char *gr_passwd; /* encrypted password of the group */
+ gid_t gr_gid; /* numerical group ID */
+ char **gr_mem; /* null-terminated array of pointers to the
+ individual member names */
+};
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/internal/devices.h amiga/fsf/emacs18/amiga/unix/include/internal/devices.h
--- baseline/fsf/emacs18/amiga/unix/include/internal/devices.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/internal/devices.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,9 @@
+#ifndef DEVICES_H
+#define DEVICES_H
+
+struct IORequest *_device_open(char *name, unsigned long unit, unsigned long flags,
+ void *data, unsigned long data_len, int req_size);
+
+void _device_close(struct IORequest *ioreq);
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/internal/files.h amiga/fsf/emacs18/amiga/unix/include/internal/files.h
--- baseline/fsf/emacs18/amiga/unix/include/internal/files.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/internal/files.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,35 @@
+#ifndef FILES_H
+#define FILES_H
+
+struct fileinfo {
+ int flags;
+ void *userinfo;
+ unsigned long (*__regargs select_start)(void *userinfo, int rd, int wr);
+ void (*__regargs select_poll)(void *userinfo, int *rd, int *wr);
+ int (*__regargs read)(void *userinfo, void *buffer, unsigned int length);
+ int (*__regargs write)(void *userinfo, void *buffer, unsigned int length);
+ int (*__regargs lseek)(void *userinfo, long rpos, int mode);
+ int (*__regargs close)(void *userinfo, int internal);
+ int (*__regargs ioctl)(void *userinfo, int request, void *data);
+};
+
+/* FI_READ & WRITE replace O_RDONLY, WRONLY & RDWR. Other flags are left untouched */
+#define FI_READ 1
+#define FI_WRITE 2
+
+int _alloc_fd(void *userinfo, int flags,
+ unsigned long (*__regargs select_start)(void *userinfo, int rd, int wr),
+ void (*__regargs select_poll)(void *userinfo, int *rd, int *wr),
+ int (*__regargs read)(void *userinfo, void *buffer, unsigned int length),
+ int (*__regargs write)(void *userinfo, void *buffer, unsigned int length),
+ int (*__regargs lseek)(void *userinfo, long rpos, int mode),
+ int (*__regargs close)(void *userinfo, int internal),
+ int (*__regargs ioctl)(void *userinfo, int request, void *data)
+);
+
+void _free_fd(int fd);
+
+struct fileinfo *_find_fd(int fd);
+int _last_fd(void);
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/internal/messages.h amiga/fsf/emacs18/amiga/unix/include/internal/messages.h
--- baseline/fsf/emacs18/amiga/unix/include/internal/messages.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/internal/messages.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,9 @@
+void _message(char *format, ...);
+/* Display a message which is as visible as possible (either to the console
+ or to a requester).
+ Assume very little about library state */
+void _fail(char *format, ...);
+/* Display a message which is as visible as possible (either to the console
+ or to a requester).
+ Assume very little about library state.
+ Exit with error code RETURN_FAIL after that. */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/internal/timers.h amiga/fsf/emacs18/amiga/unix/include/internal/timers.h
--- baseline/fsf/emacs18/amiga/unix/include/internal/timers.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/internal/timers.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,20 @@
+#ifndef TIMERS_H
+#define TIMERS_H
+
+struct timeinfo {
+ struct timerequest *io;
+ int sent;
+};
+
+struct timeinfo *_alloc_timer(void);
+void _free_timer(struct timeinfo *timer);
+void _timer_abort(struct timeinfo *timer);
+ULONG _timer_sig(struct timeinfo *timer);
+
+void _timer_start(struct timeinfo *timer, int secs, int micros);
+/* _timer_start(timer, 0) stops a timer */
+
+int _timer_expired(struct timeinfo *timer);
+/* A non-started timer is defined to not have expired */
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/internal/vars.h amiga/fsf/emacs18/amiga/unix/include/internal/vars.h
--- baseline/fsf/emacs18/amiga/unix/include/internal/vars.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/internal/vars.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,11 @@
+#ifndef VARS_H
+#define VARS_H
+
+/* <_us, _startup_time> should be a pretty good unique identifier of
+ this process */
+extern struct Process *_us;
+extern long _stack_size;
+extern long _startup_time;
+extern int use_amiga_flags;
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/pwd.h amiga/fsf/emacs18/amiga/unix/include/pwd.h
--- baseline/fsf/emacs18/amiga/unix/include/pwd.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/pwd.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,19 @@
+#ifndef _PWD_H
+#define _PWD_H
+
+struct passwd {
+ char *pw_name;
+ char *pw_passwd;
+ uid_t pw_uid;
+ gid_t pw_gid;
+ int pw_quota;
+ char *pw_comment;
+ char *pw_gecos;
+ char *pw_dir;
+ char *pw_shell;
+};
+
+struct passwd *getpwuid(uid_t uid);
+struct passwd *getpwnam(char *name);
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/setjmp.h amiga/fsf/emacs18/amiga/unix/include/setjmp.h
--- baseline/fsf/emacs18/amiga/unix/include/setjmp.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/setjmp.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,55 @@
+/*-
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)setjmp.h 5.5 (Berkeley) 6/8/91
+ */
+
+#ifndef _SETJMP_H_
+#define _SETJMP_H_
+
+#define _JBLEN 14
+
+typedef int jmp_buf[_JBLEN];
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+int setjmp __P((jmp_buf));
+void longjmp __P((jmp_buf, int));
+
+#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
+int _setjmp __P((jmp_buf));
+void _longjmp __P((jmp_buf, int));
+#endif /* neither ANSI nor POSIX */
+__END_DECLS
+
+#endif /* !_SETJMP_H_ */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/signal.h amiga/fsf/emacs18/amiga/unix/include/signal.h
--- baseline/fsf/emacs18/amiga/unix/include/signal.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/signal.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,59 @@
+#ifndef _SIGNAL_H
+#define _SIGNAL_H
+
+#define NSIG 32 /* We define lots of signals (though most are never
+ generated) */
+
+/* Signal number definitions */
+/* Those which can be generated other than by kill are described with
+ <name>, amiga: <cause> */
+
+
+#define SIGHUP 1 /* hangup */
+#define SIGINT 2 /* interrupt, amiga: ctrl-c */
+#define SIGQUIT 3 /* quit, amiga: ctrl-d */
+#define SIGILL 4 /* illegal instruction */
+#define SIGTRAP 5 /* trace trap */
+#define SIGIOT 6 /* abort, amiga: abort() called */
+#define SIGEMT 7 /* emulator trap */
+#define SIGFPE 8 /* arithmetic exception, amiga: arith op */
+#define SIGKILL 9 /* kill */
+#define SIGBUS 10 /* bus error */
+#define SIGSEGV 11 /* segmentation violation */
+#define SIGSYS 12 /* bad argument to system call */
+#define SIGPIPE 13 /* write on pipe or socket with no reader,
+ amiga: generated for 'pipe's or 'sktpair's */
+#define SIGALRM 14 /* alarm clock, amiga: see alarm */
+#define SIGTERM 15 /* software termination */
+#define SIGURG 16 /* urgent condition on socket */
+/* SIGSTOP, SIGTSTP, SIGCONT, SIGTTIN, SIGTTOU undefined to avoid creating the
+ belief that we support stopped processes */
+#define SIGCHLD 20 /* child status has changed */
+#define SIGIO 23 /* I/O possible on a descriptor */
+/* Less usual signals: SIGXCPU, SIGXFSZ, SIGVTALARM, SIGPROF, SIGLOST not defined */
+#define SIGWINCH 28 /* window changed */
+#define SIGUSR1 30 /* user-defined signal 1 */
+#define SIGUSR2 31 /* user-defined signal 2 */
+
+#define SIG_IGN (void *)0
+#define SIG_DFL (void *)1
+
+struct sigvec {
+ void (*sv_handler)();
+ long sv_mask;
+ /*int sv_flags;*/ /* Not implemented */
+};
+
+void (*signal(int sig,void (*fn)(int)))(int);
+int sigvec(int sig, struct sigvec *vec, struct sigvec *ovec);
+long sigsetmask(long mask);
+long sigblock(long mask);
+
+#define sigmask(s) (1 << (s))
+
+/* Only kill(getpid(), sig) works */
+/* Also, getpid() is a unique number for this process */
+int getpid(void);
+int kill(int pid, int sig);
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/stat.h amiga/fsf/emacs18/amiga/unix/include/stat.h
--- baseline/fsf/emacs18/amiga/unix/include/stat.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/stat.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1 @@
+#include <sys/stat.h>
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/stdio.h amiga/fsf/emacs18/amiga/unix/include/stdio.h
--- baseline/fsf/emacs18/amiga/unix/include/stdio.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/stdio.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,7 @@
+/* Avoid problems with conflicting declarations for mkdir */
+#define mkdir __fake_mkdir
+#include "include:stdio.h"
+
+#define P_tmpdir "t:"
+
+#undef mkdir
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/stdlib.h amiga/fsf/emacs18/amiga/unix/include/stdlib.h
--- baseline/fsf/emacs18/amiga/unix/include/stdlib.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/stdlib.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,4 @@
+/* Avoid problems with conflicting declarations for mkdir */
+#define mkdir __fake_mkdir
+#include "include:stdlib.h"
+#undef mkdir
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/strings.h amiga/fsf/emacs18/amiga/unix/include/strings.h
--- baseline/fsf/emacs18/amiga/unix/include/strings.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/strings.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1 @@
+#include <string.h>
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/cdefs.h amiga/fsf/emacs18/amiga/unix/include/sys/cdefs.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/cdefs.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/cdefs.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 1991 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)cdefs.h 7.6 (Berkeley) 5/4/91
+ */
+
+#ifndef _CDEFS_H_
+#define _CDEFS_H_
+
+#if defined(__cplusplus)
+#define __BEGIN_DECLS extern "C" {
+#define __END_DECLS };
+#else
+#define __BEGIN_DECLS
+#define __END_DECLS
+#endif
+
+/*
+ * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
+ * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
+ * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
+ * in between its arguments. __CONCAT can also concatenate double-quoted
+ * strings produced by the __STRING macro, but this only works with ANSI C.
+ */
+#if defined(__STDC__) || defined(__cplusplus)
+#define __P(protos) protos /* full-blown ANSI C */
+#define __CONCAT(x,y) x ## y
+#define __STRING(x) #x
+
+#else /* !(__STDC__ || __cplusplus) */
+#define __P(protos) () /* traditional C preprocessor */
+#define __CONCAT(x,y) x/**/y
+#define __STRING(x) "x"
+
+#ifdef __GNUC__
+#define const __const /* GCC: ANSI C with -traditional */
+#define inline __inline
+#define signed __signed
+#define volatile __volatile
+
+#else /* !__GNUC__ */
+#define const /* delete ANSI C keywords */
+#define inline
+#define signed
+#define volatile
+#endif /* !__GNUC__ */
+#endif /* !(__STDC__ || __cplusplus) */
+
+#endif /* !_CDEFS_H_ */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/fcntl.h amiga/fsf/emacs18/amiga/unix/include/sys/fcntl.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/fcntl.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/fcntl.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,193 @@
+/*-
+ * Copyright (c) 1983, 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)fcntl.h 5.14 (Berkeley) 7/1/91
+ */
+
+#ifndef _FCNTL_H_
+#define _FCNTL_H_
+
+/*
+ * This file includes the definitions for open and fcntl
+ * described by POSIX for <fcntl.h>; it also includes
+ * related kernel definitions.
+ */
+
+#ifndef KERNEL
+#include <sys/types.h>
+#endif
+
+/*
+ * File status flags: these are used by open(2), fcntl(2).
+ * They are also used (indirectly) in the kernel file structure f_flags,
+ * which is a superset of the open/fcntl flags. Open flags and f_flags
+ * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
+ * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
+ */
+/* open-only flags */
+#define O_RDONLY 0x0000 /* open for reading only */
+#define O_WRONLY 0x0001 /* open for writing only */
+#define O_RDWR 0x0002 /* open for reading and writing */
+#define O_ACCMODE 0x0003 /* mask for above modes */
+
+#ifdef KERNEL
+/*
+ * Kernel encoding of open mode; separate read and write bits
+ * that are independently testable: 1 greater than the above.
+ */
+#define FREAD 0x0001
+#define FWRITE 0x0002
+#endif
+#define O_NONBLOCK 0x0004 /* no delay */
+#define O_APPEND 0x0008 /* set append mode */
+#ifndef _POSIX_SOURCE
+#define O_SHLOCK 0x0010 /* open with shared file lock */
+#define O_EXLOCK 0x0020 /* open with exclusive file lock */
+#define O_ASYNC 0x0040 /* signal pgrp when data ready */
+#define O_FSYNC 0x0080 /* synchronous writes */
+#endif
+#define O_CREAT 0x0100 /* create if nonexistant */
+#define O_TRUNC 0x0200 /* truncate to zero length */
+#define O_EXCL 0x0400 /* error if already exists */
+#ifdef KERNEL
+#define FMARK 0x1000 /* mark during gc() */
+#define FDEFER 0x2000 /* defer for next gc pass */
+#define FHASLOCK 0x4000 /* descriptor holds advisory lock */
+#endif
+
+/* defined by POSIX 1003.1; BSD default, so no bit required */
+#define O_NOCTTY 0 /* don't assign controlling terminal */
+
+#ifdef KERNEL
+/* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */
+#define FFLAGS(oflags) ((oflags) + 1)
+#define OFLAGS(fflags) ((fflags) - 1)
+
+/* bits to save after open */
+#define FMASK (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
+/* bits settable by fcntl(F_SETFL, ...) */
+#define FCNTLFLAGS (FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
+#endif
+
+/*
+ * The O_* flags used to have only F* names, which were used in the kernel
+ * and by fcntl. We retain the F* names for the kernel f_flags field
+ * and for backward compatibility for fcntl.
+ */
+#ifndef _POSIX_SOURCE
+#define FAPPEND O_APPEND /* kernel/compat */
+#define FASYNC O_ASYNC /* kernel/compat */
+#define FFSYNC O_FSYNC /* kernel */
+#define FNONBLOCK O_NONBLOCK /* kernel */
+#define FNDELAY O_NONBLOCK /* compat */
+#define O_NDELAY O_NONBLOCK /* compat */
+#endif
+
+/*
+ * Constants used for fcntl(2)
+ */
+
+/* command values */
+#define F_DUPFD 0 /* duplicate file descriptor */
+#define F_GETFD 1 /* get file descriptor flags */
+#define F_SETFD 2 /* set file descriptor flags */
+#define F_GETFL 3 /* get file status flags */
+#define F_SETFL 4 /* set file status flags */
+#ifndef _POSIX_SOURCE
+#define F_GETOWN 5 /* get SIGIO/SIGURG proc/pgrp */
+#define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */
+#endif
+#define F_GETLK 7 /* get record locking information */
+#define F_SETLK 8 /* set record locking information */
+#define F_SETLKW 9 /* F_SETLK; wait if blocked */
+
+/* file descriptor flags (F_GETFD, F_SETFD) */
+#define FD_CLOEXEC 1 /* close-on-exec flag */
+
+/* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
+#define F_RDLCK 1 /* shared or read lock */
+#define F_UNLCK 2 /* unlock */
+#define F_WRLCK 3 /* exclusive or write lock */
+#ifdef KERNEL
+#define F_WAIT 0x010 /* Wait until lock is granted */
+#define F_FLOCK 0x020 /* Use flock(2) semantics for lock */
+#define F_POSIX 0x040 /* Use POSIX semantics for lock */
+#endif
+
+/*
+ * Advisory file segment locking data type -
+ * information passed to system by user
+ */
+struct flock {
+ short l_type; /* lock type: read/write, etc. */
+ short l_whence; /* type of l_start */
+ off_t l_start; /* starting offset */
+ off_t l_len; /* len = 0 means until end of file */
+ pid_t l_pid; /* lock owner */
+};
+
+
+#ifndef _POSIX_SOURCE
+/* lock operations for flock(2) */
+#define LOCK_SH 0x01 /* shared file lock */
+#define LOCK_EX 0x02 /* exclusive file lock */
+#define LOCK_NB 0x04 /* don't block when locking */
+#define LOCK_UN 0x08 /* unlock file */
+#endif
+
+
+#ifndef KERNEL
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+int open __P((const char *, int, ...));
+int creat __P((const char *, mode_t));
+int fcntl __P((int, int, ...));
+#ifndef _POSIX_SOURCE
+int flock __P((int, int));
+#endif /* !_POSIX_SOURCE */
+__END_DECLS
+#endif
+
+#ifdef AMIGA
+#define O_NO_CLOSE 0x100 /* An available value, means don't close
+ underlying resource */
+/* Note: S_ISVTX (sticky) is mapped to the pure bit.
+ The amiga script bit is mapped to world execute ...
+ user S_IWRITE is the and of the amiga write & delete bits.
+ group S_IWRITE is the amiga write bit.
+ world S_IWRITE is the amiga delete bit.
+ We always set the archive bit off.
+*/
+#endif
+
+#endif /* !_FCNTL_H_ */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/file.h amiga/fsf/emacs18/amiga/unix/include/sys/file.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/file.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/file.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,2 @@
+#include <fcntl.h>
+#include <sys/unistd.h>
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/filio.h amiga/fsf/emacs18/amiga/unix/include/sys/filio.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/filio.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/filio.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,3 @@
+#define FIONBIO 0 /* ioctl to change non blocking mode
+ data (an int *) is a pointer a boolean,
+ TRUE for non-blocking io */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/ioctl.h amiga/fsf/emacs18/amiga/unix/include/sys/ioctl.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/ioctl.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/ioctl.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1 @@
+#include <sys/termios.h>
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/param.h amiga/fsf/emacs18/amiga/unix/include/sys/param.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/param.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/param.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,11 @@
+#ifndef _PARAM_H
+#define _PARAM_H
+
+#define MAXPATHLEN 1024
+#define DEV_BSIZE 512
+
+#ifndef NULL
+#define NULL (0)
+#endif
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/socket.h amiga/fsf/emacs18/amiga/unix/include/sys/socket.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/socket.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/socket.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,4 @@
+/* Support for socket pairs only */
+
+#define AF_UNIX 0
+#define SOCK_STREAM 0
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/stat.h amiga/fsf/emacs18/amiga/unix/include/sys/stat.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/stat.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/stat.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,133 @@
+#ifndef _STAT_H
+#define _STAT_H
+
+/*-
+ * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)stat.h 7.11 (Berkeley) 3/3/91
+ */
+
+struct stat
+{
+ dev_t st_dev; /* inode's device */
+ ino_t st_ino; /* inode's number */
+ mode_t st_mode; /* inode protection mode */
+ nlink_t st_nlink; /* number of hard links */
+ uid_t st_uid; /* user ID of the file's owner */
+ gid_t st_gid; /* group ID of the file's group */
+ dev_t st_rdev; /* device type */
+ off_t st_size; /* file size, in bytes */
+ time_t st_atime; /* time of last access */
+ long st_spare1;
+ time_t st_mtime; /* time of last data modification */
+ long st_spare2;
+ time_t st_ctime; /* time of last file status change */
+ long st_spare3;
+ long st_blksize; /* optimal blocksize for I/O */
+ long st_blocks; /* blocks allocated for file */
+ u_long st_flags; /* user defined flags for file */
+ u_long st_gen; /* file generation number */
+};
+
+#define S_ISUID 0004000 /* set user id on execution */
+#define S_ISGID 0002000 /* set group id on execution */
+#ifndef _POSIX_SOURCE
+#define S_ISTXT 0001000 /* sticky bit */
+#endif
+
+#define S_IRWXU 0000700 /* RWX mask for owner */
+#define S_IRUSR 0000400 /* R for owner */
+#define S_IWUSR 0000200 /* W for owner */
+#define S_IXUSR 0000100 /* X for owner */
+
+#ifndef _POSIX_SOURCE
+#define S_IREAD S_IRUSR
+#define S_IWRITE S_IWUSR
+#define S_IEXEC S_IXUSR
+#endif
+
+#define S_IRWXG 0000070 /* RWX mask for group */
+#define S_IRGRP 0000040 /* R for group */
+#define S_IWGRP 0000020 /* W for group */
+#define S_IXGRP 0000010 /* X for group */
+
+#define S_IRWXO 0000007 /* RWX mask for other */
+#define S_IROTH 0000004 /* R for other */
+#define S_IWOTH 0000002 /* W for other */
+#define S_IXOTH 0000001 /* X for other */
+
+#ifndef _POSIX_SOURCE
+#define S_IFMT 0170000 /* type of file */
+#define S_IFIFO 0010000 /* named pipe (fifo) */
+#define S_IFCHR 0020000 /* character special */
+#define S_IFDIR 0040000 /* directory */
+#define S_IFBLK 0060000 /* block special */
+#define S_IFREG 0100000 /* regular */
+#define S_IFLNK 0120000 /* symbolic link */
+#define S_IFSOCK 0140000 /* socket */
+
+#define S_ISVTX 0001000 /* save swapped text even after use */
+
+#define S_BLKSIZE 512 /* block size used in the stat struct */
+
+ /* 0666 */
+#define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
+#endif
+
+#define S_ISDIR(m) ((m & 0170000) == 0040000) /* directory */
+#define S_ISCHR(m) ((m & 0170000) == 0020000) /* char special */
+#define S_ISBLK(m) ((m & 0170000) == 0060000) /* block special */
+#define S_ISREG(m) ((m & 0170000) == 0100000) /* regular file */
+#define S_ISFIFO(m) ((m & 0170000) == 0010000) /* fifo */
+#ifndef _POSIX_SOURCE
+#define S_ISLNK(m) ((m & 0170000) == 0120000) /* symbolic link */
+#define S_ISSOCK(m) ((m & 0170000) == 0140000) /* socket */
+#endif
+
+#ifndef KERNEL
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+mode_t umask __P((mode_t));
+int chmod __P((const char *, mode_t));
+int fstat __P((int, struct stat *));
+int mkdir __P((char *, mode_t));
+int mkfifo __P((char *, mode_t));
+int stat __P((char *, struct stat *));
+#ifndef _POSIX_SOURCE
+int fchmod __P((int, mode_t));
+int lstat __P((char *, struct stat *));
+#endif /* not POSIX */
+__END_DECLS
+#endif
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/termios.h amiga/fsf/emacs18/amiga/unix/include/sys/termios.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/termios.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/termios.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,15 @@
+#ifndef _TERMIOS_H
+#define _TERMIOS_H
+
+struct winsize {
+ unsigned short ws_row; /* rows, in characters */
+ unsigned short ws_col; /* columns, in characters */
+ unsigned short ws_xpixel; /* horizontal size, pixels - not used */
+ unsigned short ws_ypixel; /* vertical size, pixels - not used */
+};
+
+#define _TERMIO_IOCTL_BASE 1024
+
+#define TIOCGWINSZ (_TERMIO_IOCTL_BASE + 0)
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/time.h amiga/fsf/emacs18/amiga/unix/include/sys/time.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/time.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/time.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 1982, 1986 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)time.h 7.6 (Berkeley) 2/22/91
+ */
+
+#ifndef _SYS_TIME_H_
+#define _SYS_TIME_H_
+
+/*
+ * Structure returned by gettimeofday(2) system call,
+ * and used in other calls.
+ */
+/* This defines a struct timeval, with basically equivalent fields. So we use it */
+#undef LONGBITS /* This is for emacs's sake */
+#include <devices/timer.h>
+#undef LONGBITS
+/* But we need these defines */
+#define tv_sec tv_secs
+#define tv_usec tv_micro
+
+struct timezone {
+ int tz_minuteswest; /* minutes west of Greenwich */
+ int tz_dsttime; /* type of dst correction */
+};
+#define DST_NONE 0 /* not on dst */
+#define DST_USA 1 /* USA style dst */
+#define DST_AUST 2 /* Australian style dst */
+#define DST_WET 3 /* Western European dst */
+#define DST_MET 4 /* Middle European dst */
+#define DST_EET 5 /* Eastern European dst */
+#define DST_CAN 6 /* Canada */
+
+/*
+ * Operations on timevals.
+ *
+ * NB: timercmp does not work for >= or <=.
+ */
+#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
+#define timercmp(tvp, uvp, cmp) \
+ ((tvp)->tv_sec cmp (uvp)->tv_sec || \
+ (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
+#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
+
+#ifndef KERNEL
+#include <time.h>
+
+#ifndef _POSIX_SOURCE
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+int adjtime __P((const struct timeval *, struct timeval *));
+int gettimeofday __P((struct timeval *, struct timezone *));
+int settimeofday __P((const struct timeval *, const struct timezone *));
+int utimes __P((const char *, const struct timeval *));
+__END_DECLS
+#endif /* !POSIX */
+
+#endif /* !KERNEL */
+
+#endif /* !_SYS_TIME_H_ */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/timeb.h amiga/fsf/emacs18/amiga/unix/include/sys/timeb.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/timeb.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/timeb.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,12 @@
+#ifndef _TIMEB_H
+#define _TIMEB_H
+
+struct timeb
+{
+ time_t time;
+ unsigned short millitm;
+ short timezone;
+ short dstflag;
+};
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/types.h amiga/fsf/emacs18/amiga/unix/include/sys/types.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/types.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/types.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,90 @@
+/*-
+ * Copyright (c) 1982, 1986, 1991 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)types.h 7.17 (Berkeley) 5/6/91
+ */
+
+#ifndef _TYPES_H_
+#define _TYPES_H_
+
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+typedef unsigned long u_long;
+typedef unsigned short ushort; /* Sys V compatibility */
+
+typedef char * caddr_t; /* core address */
+typedef long daddr_t; /* disk address */
+typedef long dev_t; /* device number */
+typedef u_long ino_t; /* inode number */
+typedef long off_t; /* file offset (should be a quad) */
+typedef u_short nlink_t; /* link count */
+typedef long swblk_t; /* swap offset */
+typedef long segsz_t; /* segment size */
+typedef u_short uid_t; /* user id */
+typedef u_short gid_t; /* group id */
+typedef int pid_t; /* process id */
+typedef int mode_t; /* permissions */
+typedef u_long fixpt_t; /* fixed point number */
+
+#ifndef _POSIX_SOURCE
+typedef struct _uquad { u_long val[2]; } u_quad;
+typedef struct _quad { long val[2]; } quad;
+typedef long * qaddr_t; /* should be typedef quad * qaddr_t; */
+
+#define major(x) ((int)(((u_int)(x) >> 8)&0xff)) /* major number */
+#define minor(x) ((int)((x)&0xff)) /* minor number */
+#define makedev(x,y) ((dev_t)(((x)<<8) | (y))) /* create dev_t */
+#endif
+
+typedef long clock_t;
+typedef long time_t;
+#ifndef _SIZE_T
+#define _SIZE_T
+typedef unsigned int size_t;
+#endif
+
+#ifndef _POSIX_SOURCE
+/*
+ * My implementation only allows 32 fds in select.
+ */
+#define FD_SETSIZE 32
+
+typedef long fd_set;
+
+#define FD_SET(n, p) (*(p) |= (1 << (n)))
+#define FD_CLR(n, p) (*(p) &= ~(1 << (n)))
+#define FD_ISSET(n, p) (*(p) & (1 << (n)))
+#define FD_ZERO(p) bzero((char *)(p), sizeof(*(p)))
+
+#endif /* !_POSIX_SOURCE */
+#endif /* !_TYPES_H_ */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/unistd.h amiga/fsf/emacs18/amiga/unix/include/sys/unistd.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/unistd.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/unistd.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 1989 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)unistd.h 5.14 (Berkeley) 4/1/91
+ */
+
+#ifndef _SYS_UNISTD_H_
+#define _SYS_UNISTD_H_
+
+/* compile-time symbolic constants */
+
+/* access function */
+#ifndef F_OK
+#define F_OK 0 /* test for existence of file */
+#define X_OK 0x01 /* test for execute or search permission */
+#define W_OK 0x02 /* test for write permission */
+#define R_OK 0x04 /* test for read permission */
+#endif
+
+/* whence values for lseek(2) */
+#define SEEK_SET 0 /* set file offset to offset */
+#define SEEK_CUR 1 /* set file offset to current plus offset */
+#define SEEK_END 2 /* set file offset to EOF plus offset */
+
+#ifndef _POSIX_SOURCE
+/* whence values for lseek(2); renamed by POSIX 1003.1 */
+#define L_SET SEEK_SET
+#define L_INCR SEEK_CUR
+#define L_XTND SEEK_END
+#endif
+
+#endif /* !_SYS_UNISTD_H_ */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/vlimit.h amiga/fsf/emacs18/amiga/unix/include/sys/vlimit.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/vlimit.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/vlimit.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,2 @@
+/* Dummy for Emacs so that we can run on VMS... */
+#define LIM_DATA 0
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/wait.h amiga/fsf/emacs18/amiga/unix/include/sys/wait.h
--- baseline/fsf/emacs18/amiga/unix/include/sys/wait.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/sys/wait.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)wait.h 7.17 (Berkeley) 6/19/91
+ */
+
+/*
+ * This file holds definitions relevent to the wait4 system call
+ * and the alternate interfaces that use it (wait, wait3, waitpid).
+ */
+
+/*
+ * Macros to test the exit status returned by wait
+ * and extract the relevant values.
+ */
+#define _W_INT(i) (i)
+
+#define _WSTATUS(x) (_W_INT(x) & 0177)
+#define _WSTOPPED 0177 /* _WSTATUS if process is stopped */
+#define WIFSTOPPED(x) (_WSTATUS(x) == _WSTOPPED)
+#define WSTOPSIG(x) (_W_INT(x) >> 8)
+#define WIFSIGNALED(x) (_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
+#define WTERMSIG(x) (_WSTATUS(x))
+#define WIFEXITED(x) (_WSTATUS(x) == 0)
+#define WEXITSTATUS(x) (_W_INT(x) >> 8)
+#define W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
+#define W_STOPCODE(sig) ((sig) << 8 | _WSTOPPED)
+
+/*
+ * Option bits for the second argument of wait4. WNOHANG causes the
+ * wait to not hang if there are no stopped or terminated processes, rather
+ * returning an error indication in this case (pid==0). WUNTRACED
+ * indicates that the caller should receive status about untraced children
+ * which stop due to signals. If children are stopped and a wait without
+ * this option is done, it is as though they were still running... nothing
+ * about them is returned.
+ */
+#define WNOHANG 1 /* dont hang in wait */
+#define WUNTRACED 2 /* tell about stopped, untraced children */
+
+#ifndef KERNEL
+#include <sys/types.h>
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+struct rusage; /* forward declaration */
+
+pid_t wait __P((int *));
+pid_t waitpid __P((pid_t, int *, int));
+pid_t wait3 __P((int *, int, struct rusage *));
+pid_t wait4 __P((pid_t, int *, int, struct rusage *));
+__END_DECLS
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/time.h amiga/fsf/emacs18/amiga/unix/include/time.h
--- baseline/fsf/emacs18/amiga/unix/include/time.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/time.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 1989 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)time.h 5.12 (Berkeley) 3/9/91
+ */
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+#include <sys/types.h>
+
+struct tm {
+ int tm_sec; /* seconds after the minute [0-60] */
+ int tm_min; /* minutes after the hour [0-59] */
+ int tm_hour; /* hours since midnight [0-23] */
+ int tm_mday; /* day of the month [1-31] */
+ int tm_mon; /* months since January [0-11] */
+ int tm_year; /* years since 1900 */
+ int tm_wday; /* days since Sunday [0-6] */
+ int tm_yday; /* days since January 1 [0-365] */
+ int tm_isdst; /* Daylight Savings Time flag */
+ long tm_gmtoff; /* offset from CUT in seconds */
+ char *tm_zone; /* timezone abbreviation */
+};
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+char *asctime __P((const struct tm *));
+clock_t clock __P((void));
+char *ctime __P((const time_t *));
+double difftime __P((time_t, time_t));
+struct tm *gmtime __P((const time_t *));
+struct tm *localtime __P((const time_t *));
+time_t mktime __P((struct tm *));
+size_t strftime __P((char *, size_t, const char *, const struct tm *));
+time_t time __P((time_t *));
+
+#ifndef _ANSI_SOURCE
+void tzset __P((void));
+#endif /* not ANSI */
+
+#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
+/*char *timezone __P((int, int));*/
+void tzsetwall __P((void));
+#endif /* neither ANSI nor POSIX */
+__END_DECLS
+
+#endif /* !_TIME_H_ */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/tzfile.h amiga/fsf/emacs18/amiga/unix/include/tzfile.h
--- baseline/fsf/emacs18/amiga/unix/include/tzfile.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/tzfile.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 1988 Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Arthur David Olson of the National Cancer Institute.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)tzfile.h 5.10 (Berkeley) 4/3/91
+ */
+
+#ifndef _TZFILE_H_
+#define _TZFILE_H_
+
+/*
+ * Information about time zone files.
+ */
+ /* Time zone object file directory */
+#define TZDIR "s:zoneinfo"
+#define TZDEFAULT "s:localtime"
+#define TZDEFRULES "posixrules"
+
+/*
+** Each file begins with. . .
+*/
+
+struct tzhead {
+ char tzh_reserved[24]; /* reserved for future use */
+ char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */
+ char tzh_leapcnt[4]; /* coded number of leap seconds */
+ char tzh_timecnt[4]; /* coded number of transition times */
+ char tzh_typecnt[4]; /* coded number of local time types */
+ char tzh_charcnt[4]; /* coded number of abbr. chars */
+};
+
+/*
+** . . .followed by. . .
+**
+** tzh_timecnt (char [4])s coded transition times a la time(2)
+** tzh_timecnt (unsigned char)s types of local time starting at above
+** tzh_typecnt repetitions of
+** one (char [4]) coded GMT offset in seconds
+** one (unsigned char) used to set tm_isdst
+** one (unsigned char) that's an abbreviation list index
+** tzh_charcnt (char)s '\0'-terminated zone abbreviations
+** tzh_leapcnt repetitions of
+** one (char [4]) coded leap second transition times
+** one (char [4]) total correction after above
+** tzh_ttisstdcnt (char)s indexed by type; if TRUE, transition
+** time is standard time, if FALSE,
+** transition time is wall clock time
+** if absent, transition times are
+** assumed to be wall clock time
+*/
+
+/*
+** In the current implementation, "tzset()" refuses to deal with files that
+** exceed any of the limits below.
+*/
+
+/*
+** The TZ_MAX_TIMES value below is enough to handle a bit more than a
+** year's worth of solar time (corrected daily to the nearest second) or
+** 138 years of Pacific Presidential Election time
+** (where there are three time zone transitions every fourth year).
+*/
+#define TZ_MAX_TIMES 370
+
+#define NOSOLAR /* 4BSD doesn't currently handle solar time */
+
+#ifndef NOSOLAR
+#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */
+#else
+#define TZ_MAX_TYPES 10 /* Maximum number of local time types */
+#endif
+
+#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */
+
+#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */
+
+#define SECSPERMIN 60
+#define MINSPERHOUR 60
+#define HOURSPERDAY 24
+#define DAYSPERWEEK 7
+#define DAYSPERNYEAR 365
+#define DAYSPERLYEAR 366
+#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR)
+#define SECSPERDAY ((long) SECSPERHOUR * HOURSPERDAY)
+#define MONSPERYEAR 12
+
+#define TM_SUNDAY 0
+#define TM_MONDAY 1
+#define TM_TUESDAY 2
+#define TM_WEDNESDAY 3
+#define TM_THURSDAY 4
+#define TM_FRIDAY 5
+#define TM_SATURDAY 6
+
+#define TM_JANUARY 0
+#define TM_FEBRUARY 1
+#define TM_MARCH 2
+#define TM_APRIL 3
+#define TM_MAY 4
+#define TM_JUNE 5
+#define TM_JULY 6
+#define TM_AUGUST 7
+#define TM_SEPTEMBER 8
+#define TM_OCTOBER 9
+#define TM_NOVEMBER 10
+#define TM_DECEMBER 11
+
+#define TM_YEAR_BASE 1900
+
+#define EPOCH_YEAR 1970
+#define EPOCH_WDAY TM_THURSDAY
+
+/*
+** Accurate only for the past couple of centuries;
+** that will probably do.
+*/
+
+#define isleap(y) (((y) % 4) == 0 && ((y) % 100) != 0 || ((y) % 400) == 0)
+
+#endif /* !_TZFILE_H_ */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/unistd.h amiga/fsf/emacs18/amiga/unix/include/unistd.h
--- baseline/fsf/emacs18/amiga/unix/include/unistd.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/unistd.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,178 @@
+/*-
+ * Copyright (c) 1991 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)unistd.h 5.13 (Berkeley) 6/17/91
+ */
+
+#ifndef _UNISTD_H_
+#define _UNISTD_H_
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <sys/unistd.h>
+
+#define STDIN_FILENO 0 /* standard input file descriptor */
+#define STDOUT_FILENO 1 /* standard output file descriptor */
+#define STDERR_FILENO 2 /* standard error file descriptor */
+
+#ifndef NULL
+#define NULL 0 /* null pointer constant */
+#endif
+
+typedef int ssize_t; /* count of bytes or error indication */
+
+__BEGIN_DECLS
+void _exit __P((int));
+int access __P((const char *, int));
+u_int alarm __P((u_int));
+int chdir __P((const char *));
+int chown __P((const char *, uid_t, gid_t));
+int close __P((int));
+char *cuserid __P((char *));
+int dup __P((int));
+int dup2 __P((int, int));
+int execl __P((const char *, const char *, ...));
+int execle __P((const char *, const char *, ...));
+int execlp __P((const char *, const char *, ...));
+int execv __P((const char *, char * const *));
+int execve __P((const char *, char * const *, char * const *));
+int execvp __P((const char *, char * const *));
+pid_t fork __P((void));
+long fpathconf __P((int, int)); /* not yet */
+char *getcwd __P((const char *, int));
+gid_t getegid __P((void));
+uid_t geteuid __P((void));
+gid_t getgid __P((void));
+int getgroups __P((int, int *)); /* XXX (gid_t *) */
+char *getlogin __P((void));
+pid_t getpgrp __P((void));
+pid_t getpid __P((void));
+pid_t getppid __P((void));
+uid_t getuid __P((void));
+int isatty __P((int));
+int link __P((const char *, const char *));
+off_t lseek __P((int, off_t, int));
+long pathconf __P((const char *, int)); /* not yet */
+int pause __P((void));
+int pipe __P((int *));
+ssize_t read __P((int, void *, size_t));
+int rmdir __P((const char *));
+int setgid __P((gid_t));
+int setpgid __P((pid_t, pid_t));
+pid_t setsid __P((void));
+int setuid __P((uid_t));
+u_int sleep __P((u_int));
+long sysconf __P((int)); /* not yet */
+pid_t tcgetpgrp __P((int));
+int tcsetpgrp __P((int, pid_t));
+char *ttyname __P((int));
+int unlink __P((const char *));
+ssize_t write __P((int, const void *, size_t));
+
+#ifndef _POSIX_SOURCE
+
+/* structure timeval required for select() */
+#include <sys/time.h>
+
+int acct __P((const char *));
+int async_daemon __P((void));
+char *brk __P((const char *));
+int chflags __P((const char *, long));
+int chroot __P((const char *));
+char *crypt __P((const char *, const char *));
+int des_cipher __P((const char *, char *, long, int));
+int des_setkey __P((const char *key));
+int encrypt __P((char *, int));
+void endusershell __P((void));
+int exect __P((const char *, char * const *, char * const *));
+int fchdir __P((int));
+int fchflags __P((int, long));
+int fchown __P((int, int, int));
+int fnmatch __P((const char *, const char *, int));
+int fsync __P((int));
+int ftruncate __P((int, off_t));
+int getdtablesize __P((void));
+long gethostid __P((void));
+int gethostname __P((char *, int));
+mode_t getmode __P((const void *, mode_t));
+int getpagesize __P((void));
+char *getpass __P((const char *));
+char *getusershell __P((void));
+char *getwd __P((char *)); /* obsoleted by getcwd() */
+int initgroups __P((const char *, int));
+int mknod __P((const char *, mode_t, dev_t));
+int mkstemp __P((char *));
+char *mktemp __P((char *));
+int nfssvc __P((int));
+int nice __P((int));
+void psignal __P((u_int, const char *));
+extern char *sys_siglist[];
+int profil __P((char *, int, int, int));
+int rcmd __P((char **, int, const char *,
+ const char *, const char *, int *));
+char *re_comp __P((const char *));
+int re_exec __P((const char *));
+int readlink __P((const char *, char *, int));
+int reboot __P((int));
+int revoke __P((const char *));
+int rresvport __P((int *));
+int ruserok __P((const char *, int, const char *, const char *));
+void *sbrk __P((unsigned));
+int select __P((int, fd_set *, fd_set *, fd_set *, struct timeval *));
+int setegid __P((gid_t));
+int seteuid __P((uid_t));
+int setgroups __P((int, const int *));
+void sethostid __P((long));
+int sethostname __P((const char *, int));
+int setkey __P((const char *));
+int setlogin __P((const char *));
+void *setmode __P((const char *));
+int setpgrp __P((pid_t pid, pid_t pgrp)); /* obsoleted by setpgid() */
+int setregid __P((int, int));
+int setreuid __P((int, int));
+int setrgid __P((gid_t));
+int setruid __P((uid_t));
+void setusershell __P((void));
+int swapon __P((const char *));
+int symlink __P((const char *, const char *));
+void sync __P((void));
+int syscall __P((int, ...));
+int truncate __P((const char *, off_t));
+int ttyslot __P((void));
+u_int ualarm __P((u_int, u_int));
+void usleep __P((u_int));
+int vfork __P((void));
+
+#endif /* !_POSIX_SOURCE */
+__END_DECLS
+
+#endif /* !_UNISTD_H_ */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/utime.h amiga/fsf/emacs18/amiga/unix/include/utime.h
--- baseline/fsf/emacs18/amiga/unix/include/utime.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/include/utime.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,3 @@
+struct utimbuf { time_t actime, modtime; };
+
+int utime(char *path, struct utimbuf *times);
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/intro.doc amiga/fsf/emacs18/amiga/unix/intro.doc
--- baseline/fsf/emacs18/amiga/unix/intro.doc Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/intro.doc Sat Sep 28 00:00:00 1996
@@ -0,0 +1,44 @@
+A quick guide to programs compiled with the unix library
+--------------------------------------------------------
+
+If you are using programs compiled with my unix library, you should note
+the following points:
+
+a) The following environment variables are taken into account by the unix library,
+and therefore by any program compiled with it:
+
+USER - A user name for the sole Amiga user (default "user").
+USERNAME - The full name of the sole Amiga user (default $USER).
+HOME - A "home" directory (default "s:") for programs that want one. Configuration
+ files will probably end up here ...
+SHELL - A program which behaves reasonably like a Unix shell (default "bin:sh").
+ You should copy the sh executable there if you don't have a Unix-like shell.
+HOSTNAME - The name of your machine (default "amiga").
+
+b) Command line parsing is a mixture of AmigaOS and Unix conventions (this
+explanation assumes familiarity with Unix terminology ...) :
+
+- Arguments in single quotes (') are left as is.
+
+- Within arguments in double quotes ("), * acts as an escape character. Arguments
+cotaining wildcards are expanded into several arguments (note that this is a
+different from the Unix behaviour). ' must be used to escape wildcards (this is the
+standard AmigaOS convention).
+
+- Within unquoted arguments, \ acts as an escape character for wildcards, spaces,
+etc. Arguments containing wildcards are expanded into several arguments.
+
+As an example, assume that uecho is an unix-like echo command compiled with the
+unix library, and that the current directory contains one file, echo.c. Then
+
+ uecho 'f*un\' "#?.c" "*.c" "\mad" \*.c \\ \n
+
+displays
+
+ f*un\ echo.c .c \mad *.c \ n
+
+c) Timezones. If you install the timezone information (provided with the
+unix library), you must set your system clock to GMT. Otherwise the times
+displayed or set by the unix library will be incorrect. To compensate, you
+won't have to adjust your system clock for daylight savings time (the local
+time calculated from GMT will always be correct).
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/mkmkf amiga/fsf/emacs18/amiga/unix/mkmkf
--- baseline/fsf/emacs18/amiga/unix/mkmkf Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/mkmkf Sat Sep 28 00:00:00 1996
@@ -0,0 +1,2 @@
+copy smakefile smakefile!
+perl src:unix/mkmkf.perl `glob *.c` >smakefile
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/mkmkf.perl amiga/fsf/emacs18/amiga/unix/mkmkf.perl
--- baseline/fsf/emacs18/amiga/unix/mkmkf.perl Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/mkmkf.perl Sat Sep 28 00:00:00 1996
@@ -0,0 +1,72 @@
+print "OBJS= ";
+for ($i = $#ARGV; $i >= 0; $i--)
+{
+ ($objs[$i] = $ARGV[$i]) =~ s/\.\w*$/\.o/;
+}
+&colprint(6, " ", @objs);
+print "\n\n";
+
+if (-f "smakefile.base")
+{
+ open(BASE, "smakefile.base");
+ print while (<BASE>);
+ close(BASE);
+}
+
+foreach $file (@ARGV)
+{
+ $dest = $file;
+ $dest =~ s/\.\w*$/\.o/;
+ if ($file =~ /\.c$/)
+ {
+ printf("%s: %s", $dest, $file);
+ $colto = length($dest) + length($file) + 2;
+ # Search for included files
+ %seen = ();
+ &included($file, 0);
+ &colprint($colto, " ", keys(%seen));
+ print "\n";
+ }
+ else
+ {
+ printf("%s: %s\n\n", $dest, $file);
+ }
+}
+
+sub colprint
+{
+ local($colto, $sep, @names) = @_;
+ $col = $colto;
+ $sl = length($sep);
+ foreach $name (@names)
+ {
+ $nl = length($name);
+ if ($col + $nl + $sl > 78)
+ {
+ print " \\\n", " " x $colto;
+ $col = $colto;
+ }
+ print $sep, $name;
+ $col += $sl + $nl;
+ }
+}
+
+sub included
+{
+ local($file, $input) = @_;
+ $input++;
+ if (!open($input, $file))
+ {
+ print STDERR "Can't open $file: $!\n";
+ return;
+ }
+ while (<$input>)
+ {
+ if (/^#\s*include\s*"([^"]*)"/ && !$seen{$1} && -e $1)
+ {
+ $seen{$1} = 1;
+ &included($1, $input);
+ }
+ }
+ close($input);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/SCOPTIONS amiga/fsf/emacs18/amiga/unix/src/SCOPTIONS
--- baseline/fsf/emacs18/amiga/unix/src/SCOPTIONS Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/SCOPTIONS Sat Sep 28 00:00:00 1996
@@ -0,0 +1,9 @@
+PARAMETERS=BOTH
+NOSTACKCHECK
+STRUCTUREEQUIVALENCE
+NOVERSION
+NOICONS
+INCLUDEDIR=/include/internal/
+INCLUDEDIR=/include/
+IGNORE=104
+IGNORE=74
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/_exit.c amiga/fsf/emacs18/amiga/unix/src/_exit.c
--- baseline/fsf/emacs18/amiga/unix/src/_exit.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/_exit.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,30 @@
+#include "amiga.h"
+#include "files.h"
+#include "fifofd.h"
+#include "signals.h"
+#include "timers.h"
+#include <fcntl.h>
+
+void _close_all(void)
+{
+ int fd, lfd = _last_fd();
+
+ for (fd = 0; fd < lfd; fd++) close(fd);
+}
+
+#undef _exit
+
+void __exit(int rc)
+{
+ _close_all();
+ _cleanup_fifo();
+ _cleanup_signals();
+ _free_timer(_odd_timer);
+ XCEXIT(rc);
+}
+
+void _exit(int rc)
+{
+ return __exit(rc);
+}
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/_main.c amiga/fsf/emacs18/amiga/unix/src/_main.c
--- baseline/fsf/emacs18/amiga/unix/src/_main.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/_main.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,471 @@
+#include "amiga.h"
+#include "signals.h"
+#include "fifofd.h"
+#include "timers.h"
+#include "amigaos.h"
+#include <exec/execbase.h>
+#include <dos/var.h>
+#include <workbench/startup.h>
+#include <proto/timer.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/time.h>
+#include <pwd.h>
+
+struct Process *_us;
+struct timeinfo *_odd_timer;
+ULONG _odd_sig;
+long _startup_time;
+long _stack_size;
+struct Library *TimerBase;
+
+static char *empty_env = 0; /* A default empty environment */
+char **environ; /* Unix style environment variable list */
+char *_system_name;
+
+extern struct ExecBase *SysBase;
+extern struct passwd _amiga_user;
+extern main(int argc, char **argv, char **envp);
+
+static void nomem(void)
+{
+ _fail("No memory");
+}
+
+static void *_xmalloc(unsigned n)
+{
+ void *p = malloc(n);
+
+ if (!p) nomem();
+
+ return p;
+}
+
+static void *_xrealloc(void *p, unsigned n)
+{
+ void *p2 = realloc(p, n);
+
+ if (!p2) nomem();
+
+ return p2;
+}
+
+static char *safe_copystr(char *str)
+{
+ char *new;
+
+ if (!str) str = "";
+ new = malloc(strlen(str) + 1);
+ if (!new) return 0;
+ return strcpy(new, str);
+}
+
+static char *copystr(char *str)
+{
+ char *new = safe_copystr(str);
+
+ if (!new) nomem();
+
+ return new;
+}
+
+void make_environ(void)
+/* Effect: Builds a UNIX style environ variable from the AmigaOS environment.
+*/
+{
+ int env_count = 0;
+ long env_len = 0;
+ struct LocalVar *scan_env;
+ char **new_environ, *env_text;
+
+ for (scan_env = (struct LocalVar *)_us->pr_LocalVars.mlh_Head;
+ scan_env->lv_Node.ln_Succ;
+ scan_env = (struct LocalVar *)scan_env->lv_Node.ln_Succ)
+ if (scan_env->lv_Node.ln_Type == LV_VAR &&
+ !(scan_env->lv_Flags & (GVF_GLOBAL_ONLY | GVF_BINARY_VAR)))
+ {
+ /* We only handle local text variables */
+ env_count++;
+ env_len += 2 + strlen(scan_env->lv_Node.ln_Name) + scan_env->lv_Len;
+ }
+
+ new_environ = environ = (char **)_xmalloc(sizeof(char *) * (1 + env_count) +
+ env_len);
+ env_text = (char *)(environ + (1 + env_count));
+ if (!environ) environ = &empty_env;
+ else
+ {
+ for (scan_env = (struct LocalVar *)_us->pr_LocalVars.mlh_Head;
+ scan_env->lv_Node.ln_Succ;
+ scan_env = (struct LocalVar *)scan_env->lv_Node.ln_Succ)
+ if (scan_env->lv_Node.ln_Type == LV_VAR &&
+ !(scan_env->lv_Flags & (GVF_GLOBAL_ONLY | GVF_BINARY_VAR)))
+ {
+ /* We only handle local text variables */
+ char *env_name = scan_env->lv_Node.ln_Name;
+ int env_len = scan_env->lv_Len;
+
+ *new_environ++ = env_text;
+ while (*env_name) *env_text++ = *env_name++;
+ *env_text++ = '=';
+ env_name = scan_env->lv_Value;
+ while (env_len--) *env_text++ = *env_name++;
+ *env_text++ = '\0';
+ }
+ *new_environ = 0;
+ }
+}
+
+/* _main routine.
+ Hides the differences between wb & cli.
+ Provides a unix-like environment (including coomand-line parsing &
+ wildcard expansion)
+*/
+
+#define DEFPATLEN 256
+#define NAMELEN 1024
+
+struct args
+{
+ int size;
+ int argc;
+ char **argv;
+};
+
+static void make_argv(struct args *args, int argc)
+{
+ args->size = argc;
+ args->argc = 0;
+ args->argv = _xmalloc(sizeof(char *) * argc);
+}
+
+static int safe_add_arg(struct args *args, char *argument, int copy)
+{
+ char *arg_copy;
+
+ if (copy) arg_copy = safe_copystr(argument);
+ else arg_copy = argument;
+ if (!arg_copy) return 0;
+
+ if (args->argc >= args->size)
+ {
+ /* Make argv bigger */
+ if (args->size * 2 < args->size + 16) args->size += 16;
+ else args->size *= 2;
+ args->argv = realloc(args->argv, sizeof(char *) * args->size);
+ if (!args->argv) return 0;
+ }
+ args->argv[args->argc++] = arg_copy;
+ return 1;
+}
+
+static void add_arg(struct args *args, char *argument, int copy)
+{
+ if (!safe_add_arg(args, argument, copy)) nomem();
+}
+
+static void concat_args(struct args *args, struct args *add)
+{
+ if (args->argc + add->argc > args->size)
+ {
+ args->size = (args->argc + add->argc) * 2;
+ args->argv = _xrealloc(args->argv, sizeof(char *) * args->size);
+ }
+ memcpy(args->argv + args->argc, add->argv, add->argc * sizeof(char *));
+ args->argc += add->argc;
+ free(add->argv);
+}
+
+typedef enum { quote_none, quote_single, quote_double } quote_type;
+typedef enum { extract_normal, extract_test, extract_pattern } extract_type;
+
+static void extract(char *buf, char *start, char *end,
+ quote_type type, extract_type extract)
+{
+ char *res = buf;
+
+ switch (type)
+ {
+ case quote_single:
+ if (extract != extract_test)
+ {
+ buf[end - start] = '\0';
+ memcpy(buf, start, end - start);
+ }
+ else strcpy(buf, "a"); /* Things in quotes are never patterns */
+ break;
+
+ case quote_none:
+ while (start < end)
+ {
+ if (start[0] == '\\' && start[1])
+ {
+ start += 2;
+ /* Wildcard are escaped */
+ if (extract == extract_test) *res++ = 'a';
+ else if (extract == extract_pattern)
+ switch (start[-1])
+ {
+ case '?': case '#': case '(': case ')': case '|': case '[':
+ case ']': case '~': case '%': case '*': case '\'':
+ *res++ = '\'';
+ default:
+ *res++ = start[-1];
+ break;
+ }
+ else *res++ = start[-1];
+ }
+ else *res++ = *start++;
+ }
+ *res++ = '\0';
+ break;
+
+ case quote_double:
+ while (start < end)
+ {
+ if (start[0] == '*' && start[1])
+ {
+ start += 2;
+ switch (start[-1])
+ {
+ case 'n': *res++ = '\n'; break;
+ case 'e': *res++ = '\x1b'; break;
+ default: *res++ = start[-1]; break;
+ }
+ }
+ else *res++ = *start++;
+ }
+ *res++ = '\0';
+ break;
+ }
+}
+
+void __stdargs _main(char *line)
+/* Effect: Call unix_main with wildcards in argc & argv expanded (like unix)
+ Also, do some early amiga initialisation for emacs.
+*/
+{
+ struct args args, wildargs;
+ char *pattern, *arg_start, *arg_end, *arg;
+ quote_type arg_quoted;
+ long patlen = DEFPATLEN;
+ struct AnchorPath *anchor;
+ struct timeval now;
+
+ if (SysBase->LibNode.lib_Version < 37) XCEXIT(20);
+
+ stdin->_file = 0;
+ stdin->_flag = _IOREAD;
+ stdout->_file = 1;
+ stdout->_flag = _IOWRT;
+ stderr->_file = 2;
+ stderr->_flag = _IORW | _IONBF;
+
+ _us = (struct Process *)FindTask(0);
+ _odd_timer = _alloc_timer();
+ if (!_odd_timer) _fail("Failed to create timer");
+ _odd_sig = _timer_sig(_odd_timer);
+ TimerBase = _odd_timer->io->tr_node.io_Device;
+ GetSysTime(&now);
+ _startup_time = now.tv_secs;
+
+ /* These use _startup_time, so must be here */
+ _init_fifo();
+ _init_signals();
+
+ if (_us->pr_CLI) _stack_size = ((struct CommandLineInterface *)BADDR(_us->pr_CLI))->cli_DefaultStack << 2;
+ else _stack_size = _us->pr_StackSize;
+
+ /* Make unix-like argc, argv (expand wildcards) */
+ if (!line[0]) /* Workbench, create argc & argv from files passed */
+ {
+ extern struct WBStartup *_WBenchMsg;
+ int i;
+ BPTR nilin = Open("NIL:",MODE_NEWFILE);
+ BPTR nilout = Open("NIL:",MODE_NEWFILE);
+ BPTR nilerr = Open("NIL:",MODE_NEWFILE);
+
+ /* Initialise I/O. Nothing is available */
+ if (!nilin || !nilout || !nilerr)
+ {
+ if (nilin) Close(nilin);
+ if (nilout) Close(nilout);
+ if (nilerr) Close(nilerr);
+ nomem();
+ }
+ _init_unixio(nilin, TRUE, nilout, TRUE, nilerr, TRUE);
+
+ /* Make argc, argv from Workbench parameters */
+ make_argv(&args, _WBenchMsg->sm_NumArgs);
+
+ for (i = 0; i < _WBenchMsg->sm_NumArgs; i++)
+ {
+ char filename[256];
+
+ if (_WBenchMsg->sm_ArgList[i].wa_Lock &&
+ NameFromLock(_WBenchMsg->sm_ArgList[i].wa_Lock, filename, 256))
+ {
+ if (_WBenchMsg->sm_ArgList[i].wa_Name)
+ AddPart(filename, _WBenchMsg->sm_ArgList[i].wa_Name, 256);
+ add_arg(&args, filename, TRUE);
+ }
+ /* else A parameter was lost, cry, cry, cry */
+ }
+ }
+ else /* From CLI expand wildcards (with unix-like command line parsing) */
+ {
+ int close_error;
+ BPTR in, out, error;
+
+ /* Initialise I/O. Copy CLI info */
+ in = Input();
+ out = Output();
+ close_error = FALSE;
+ if ((error = _us->pr_CES) == 0)
+ {
+ close_error = TRUE;
+ if ((error = Open("*", MODE_OLDFILE)) == 0)
+ if ((error = Open("NIL:", MODE_OLDFILE)) == 0) nomem();
+ }
+ _init_unixio(in, FALSE, out, FALSE, error, close_error);
+
+ make_argv(&args, 1);
+
+ anchor = _xmalloc(sizeof(struct AnchorPath) + NAMELEN);
+ anchor->ap_Strlen = NAMELEN;
+ pattern = _xmalloc(DEFPATLEN);
+ while (1)
+ {
+ long new_patlen;
+ int wild;
+
+ /* Skip white space */
+ while (isspace(*line)) line++;
+ if (!*line) break; /* End of command line */
+
+ /* Extract next word */
+ /* Words in double quotes are handled AmigaOS style
+ (+ filename expansion) */
+ if (*line == '"')
+ {
+ line++;
+ arg_start = line;
+ /* Find end of word */
+ while (*line && *line != '"')
+ {
+ /* * is an escape character inside double quotes
+ (AmigaOS compatibility) */
+ if ((*line == '*') && line[1]) line++;
+ line++;
+ }
+ arg_end = line;
+ if (*line == '"') line++;
+ arg_quoted = quote_double;
+ }
+ /* Words in single quotes are handled unix style */
+ else if (*line == '\'')
+ {
+ line++;
+ arg_start = line;
+ /* Find end of word */
+ while (*line && *line != '\'') line++;
+ arg_end = line;
+ if (*line == '\'') line++;
+ arg_quoted = quote_single;
+ }
+ /* Unquoted words are handled unix style */
+ else /* Plain word */
+ {
+ arg_start = line;
+ /* Find end of word */
+ while (*line && *line != ' ' && *line != '\n' && *line != '\t')
+ {
+ if (*line == '\\' && line[1]) line++;
+ line++;
+ }
+ arg_end = line;
+ arg_quoted = quote_none;
+ }
+ arg = _xmalloc(arg_end - arg_start + 1);
+ if (args.argc == 0) /* Command name is left untouched */
+ {
+ strncpy(arg, arg_start, arg_end - arg_start);
+ arg[arg_end - arg_start] = 0;
+ add_arg(&args, arg, FALSE);
+ }
+ else
+ {
+ new_patlen = (arg_end - arg_start) * 2 + 16;
+ if (new_patlen > patlen)
+ {
+ free(pattern);
+ pattern = _xmalloc(new_patlen);
+ patlen = new_patlen;
+ }
+ extract(arg, arg_start, arg_end, arg_quoted, extract_test);
+ wild = ParsePattern(arg, pattern, patlen);
+ if (wild < 0)
+ {
+ *arg_end = 0;
+ _fail("Invalid wildcard %s", arg_start);
+ }
+ if (!wild)
+ {
+ extract(arg, arg_start, arg_end, arg_quoted, extract_normal);
+ add_arg(&args, arg, FALSE);
+ }
+ else
+ {
+ int none = TRUE;
+ long error;
+
+ anchor->ap_Flags = anchor->ap_Reserved = anchor->ap_BreakBits = 0;
+ extract(arg, arg_start, arg_end, arg_quoted, extract_pattern);
+ make_argv(&wildargs, 16);
+ if (!(error = MatchFirst(arg, anchor)))
+ {
+ while (!error)
+ {
+ none = FALSE;
+ if (!safe_add_arg(&wildargs, anchor->ap_Buf, TRUE))
+ {
+ error = ERROR_NO_FREE_STORE;
+ break;
+ }
+ error = MatchNext(anchor);
+ }
+ MatchEnd(anchor);
+ }
+ if (error != ERROR_NO_MORE_ENTRIES)
+ _fail("Error expanding arguments");
+ if (none)
+ {
+ extract(arg, arg_start, arg_end, arg_quoted, extract_normal);
+ add_arg(&args, arg, FALSE);
+ }
+ else
+ {
+ tqsort(wildargs.argv, wildargs.argc);
+ concat_args(&args, &wildargs);
+ free(arg);
+ }
+ }
+ }
+ }
+ free(pattern);
+ free(anchor);
+ }
+
+ make_environ();
+
+ if (!(_amiga_user.pw_name = getenv("USER"))) _amiga_user.pw_name = "user";
+ if (!(_amiga_user.pw_gecos = getenv("USERNAME")))
+ _amiga_user.pw_gecos = _amiga_user.pw_name;
+ if (!(_amiga_user.pw_dir = getenv("HOME"))) _amiga_user.pw_dir = "s:";
+ if (!(_amiga_user.pw_shell = getenv("SHELL"))) _amiga_user.pw_shell = "bin:sh";
+ if (!(_system_name = getenv("HOSTNAME"))) _system_name = "amiga";
+
+ main(args.argc, args.argv, environ);
+ exit(0);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/_setjmp.asm amiga/fsf/emacs18/amiga/unix/src/_setjmp.asm
--- baseline/fsf/emacs18/amiga/unix/src/_setjmp.asm Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/_setjmp.asm Sat Sep 28 00:00:00 1996
@@ -0,0 +1,27 @@
+ XDEF __setjmp
+ XDEF __longjmp
+ XDEF @_setjmp
+ XDEF @_longjmp
+
+ csect text,0,,2,2
+
+__setjmp:
+ move.l 4(a7),a0 ; Get jmp_buf
+@_setjmp
+ move.l (a7),(a0)+ ; Save return address
+ movem.l a2-a7/d2-d7,(a0) ; Save registers
+ moveq #0,d0
+ rts
+
+__longjmp:
+ move.l 4(a7),a0 ; Get jmp_buf
+ move.l 8(a7),d0 ; Get result
+@_longjmp
+ bne.s ok
+ moveq #1,d0 ; Return must be != 0
+ok move.l (a0)+,a1 ; Get return address
+ movem.l (a0),a2-a7/d2-d7 ; Get registers
+ addq.l #4,a7 ; Pop return address
+ jmp (a1) ; And return to setjmp call
+
+ end
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/abort.c amiga/fsf/emacs18/amiga/unix/src/abort.c
--- baseline/fsf/emacs18/amiga/unix/src/abort.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/abort.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,11 @@
+#include "amiga.h"
+#include <signal.h>
+
+extern void _close_all(void);
+
+void abort(void)
+{
+ chkabort();
+ _close_all();
+ kill(getpid(), SIGIOT);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/access.c amiga/fsf/emacs18/amiga/unix/src/access.c
--- baseline/fsf/emacs18/amiga/unix/src/access.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/access.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,29 @@
+#include "amiga.h"
+#include "fibstat.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#undef access
+
+int __access(const char *name, int mode)
+{
+ int ret = -1;
+ struct stat sbuf;
+
+ chkabort();
+ if (_fibstat(name, &sbuf) == 0)
+ {
+ int fmode = (sbuf.st_mode & (S_IREAD | S_IEXEC)) >> 6 |
+ (sbuf.st_mode & (S_IWRITE >> 3)) >> 3;
+
+ if ((fmode & mode) == mode) ret = 0;
+ else errno = EACCES;
+ }
+ return ret;
+}
+
+int access(const char *name, int mode)
+{
+ return __access(name, mode);
+}
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/alloca.c amiga/fsf/emacs18/amiga/unix/src/alloca.c
--- baseline/fsf/emacs18/amiga/unix/src/alloca.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/alloca.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,194 @@
+/*
+ alloca -- (mostly) portable public-domain implementation -- D A Gwyn
+
+ last edit: 86/05/30 rms
+ include config.h, since on VMS it renames some symbols.
+ Use xmalloc instead of malloc.
+
+ This implementation of the PWB library alloca() function,
+ which is used to allocate space off the run-time stack so
+ that it is automatically reclaimed upon procedure exit,
+ was inspired by discussions with J. Q. Johnson of Cornell.
+
+ It should work under any C implementation that uses an
+ actual procedure stack (as opposed to a linked list of
+ frames). There are some preprocessor constants that can
+ be defined when compiling for your specific system, for
+ improved efficiency; however, the defaults should be okay.
+
+ The general concept of this implementation is to keep
+ track of all alloca()-allocated blocks, and reclaim any
+ that are found to be deeper in the stack than the current
+ invocation. This heuristic does not reclaim storage as
+ soon as it becomes invalid, but it will do so eventually.
+
+ As a special case, alloca(0) reclaims storage without
+ allocating any. It is a good idea to use alloca(0) in
+ your main control loop, etc. to force garbage collection.
+*/
+#ifndef lint
+static char SCCSid[] = "@(#)alloca.c 1.1"; /* for the "what" utility */
+#endif
+
+#ifdef emacs
+#include "config.h"
+#ifdef static
+/* actually, only want this if static is defined as ""
+ -- this is for usg, in which emacs must undefine static
+ in order to make unexec workable
+ */
+#ifndef STACK_DIRECTION
+you
+lose
+-- must know STACK_DIRECTION at compile-time
+#endif /* STACK_DIRECTION undefined */
+#endif static
+#endif emacs
+
+#ifndef alloca /* If compiling with GCC, this file's not needed. */
+
+#ifdef __STDC__
+typedef void *pointer; /* generic pointer type */
+#else
+typedef char *pointer; /* generic pointer type */
+#endif
+
+#define NULL 0 /* null pointer constant */
+
+extern void free();
+extern pointer malloc();
+
+/*
+ Define STACK_DIRECTION if you know the direction of stack
+ growth for your system; otherwise it will be automatically
+ deduced at run-time.
+
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown
+*/
+
+#ifndef STACK_DIRECTION
+#define STACK_DIRECTION 0 /* direction unknown */
+#endif
+
+#if (STACK_DIRECTION) != 0
+
+#define STACK_DIR STACK_DIRECTION /* known at compile-time */
+
+#else /* STACK_DIRECTION == 0; need run-time code */
+
+static int stack_dir; /* 1 or -1 once known */
+#define STACK_DIR stack_dir
+
+static void
+find_stack_direction (/* void */)
+{
+ static char *addr = NULL; /* address of first
+ `dummy', once known */
+ auto char dummy; /* to get stack address */
+
+ if (addr == NULL)
+ { /* initial entry */
+ addr = &dummy;
+
+ find_stack_direction (); /* recurse once */
+ }
+ else /* second entry */
+ if (&dummy > addr)
+ stack_dir = 1; /* stack grew upward */
+ else
+ stack_dir = -1; /* stack grew downward */
+}
+
+#endif /* STACK_DIRECTION == 0 */
+
+/*
+ An "alloca header" is used to:
+ (a) chain together all alloca()ed blocks;
+ (b) keep track of stack depth.
+
+ It is very important that sizeof(header) agree with malloc()
+ alignment chunk size. The following default should work okay.
+*/
+
+#ifndef ALIGN_SIZE
+#define ALIGN_SIZE sizeof(double)
+#endif
+
+typedef union hdr
+{
+ char align[ALIGN_SIZE]; /* to force sizeof(header) */
+ struct
+ {
+ union hdr *next; /* for chaining headers */
+ char *deep; /* for stack depth measure */
+ } h;
+} header;
+
+/*
+ alloca( size ) returns a pointer to at least `size' bytes of
+ storage which will be automatically reclaimed upon exit from
+ the procedure that called alloca(). Originally, this space
+ was supposed to be taken from the current stack frame of the
+ caller, but that method cannot be made to work for some
+ implementations of C, for example under Gould's UTX/32.
+*/
+
+static header *last_alloca_header = NULL; /* -> last alloca header */
+
+pointer
+alloca (size) /* returns pointer to storage */
+ unsigned size; /* # bytes to allocate */
+{
+ auto char probe; /* probes stack depth: */
+ register char *depth = &probe;
+
+#if STACK_DIRECTION == 0
+ if (STACK_DIR == 0) /* unknown growth direction */
+ find_stack_direction ();
+#endif
+
+ /* Reclaim garbage, defined as all alloca()ed storage that
+ was allocated from deeper in the stack than currently. */
+
+ {
+ register header *hp; /* traverses linked list */
+
+ for (hp = last_alloca_header; hp != NULL;)
+ if (STACK_DIR > 0 && hp->h.deep > depth
+ || STACK_DIR < 0 && hp->h.deep < depth)
+ {
+ register header *np = hp->h.next;
+
+ free ((pointer) hp); /* collect garbage */
+
+ hp = np; /* -> next header */
+ }
+ else
+ break; /* rest are not deeper */
+
+ last_alloca_header = hp; /* -> last valid storage */
+ }
+
+ if (size == 0)
+ return NULL; /* no allocation required */
+
+ /* Allocate combined header + user data storage. */
+
+ {
+ register pointer new = malloc (sizeof (header) + size);
+ /* address of header */
+
+ ((header *)new)->h.next = last_alloca_header;
+ ((header *)new)->h.deep = depth;
+
+ last_alloca_header = (header *)new;
+
+ /* User storage begins just after header. */
+
+ return (pointer)((char *)new + sizeof(header));
+ }
+}
+
+#endif /* no alloca */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/allocdos.c amiga/fsf/emacs18/amiga/unix/src/allocdos.c
--- baseline/fsf/emacs18/amiga/unix/src/allocdos.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/allocdos.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,6 @@
+#include <proto/dos.h>
+
+void *AllocDosObjectTags(ULONG type, ULONG tag1, ...)
+{
+ return AllocDosObject(type, &tag1);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/amiga.h amiga/fsf/emacs18/amiga/unix/src/amiga.h
--- baseline/fsf/emacs18/amiga/unix/src/amiga.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/amiga.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,39 @@
+#include <exec/types.h>
+#include <dos/dos.h>
+#include <proto/dos.h>
+#include <proto/exec.h>
+
+#include <errno.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <internal/vars.h>
+
+extern struct timeinfo *_odd_timer;
+extern ULONG _odd_sig;
+extern struct Library *TimerBase;
+
+int convert_oserr(int ioerr);
+void _seterr(void);
+void chkabort(void);
+
+#define ERROR do { _seterr(); return -1; } while(0)
+#define AMIGA_UID 1
+#define AMIGA_GID 0
+
+int _make_protection(int mode);
+int _make_mode(int protection);
+
+void _message(char *format, ...);
+/* Display a message which is as visible as possible (either to the console
+ or to as a requester).
+ Assume very little about library state */
+
+void _fail(char *format, ...);
+/* Display a message which is as visible as possible (either to the console
+ or to as a requester).
+ Assume very little about library state.
+ Exit with error code RETURN_FAIL after that. */
+
+void _sprintf(char *dest, char *format, ...);
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/amigaos.c amiga/fsf/emacs18/amiga/unix/src/amigaos.c
--- baseline/fsf/emacs18/amiga/unix/src/amigaos.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/amigaos.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,299 @@
+#include "amiga.h"
+#include "files.h"
+#include "signals.h"
+#include <exec/memory.h>
+#include <fcntl.h>
+#include <sys/termios.h>
+#include <amiga/ioctl.h>
+#include <string.h>
+
+/* Code for fd's describing AmigaOS files */
+
+struct amigainfo
+{
+ BPTR fh;
+ BPTR lock; /* A lock on the file (may be null) */
+ long protection; /* To be set when file is closed, -1 for none */
+ char interactive; /* True if file was interactive */
+ char deleted; /* True if file has been deleted but not closed */
+};
+
+static ULONG __regargs file_select_start(void *userinfo, int rd, int wr)
+{
+ /* Input always immediately available, gniark */
+ return (ULONG)-1;
+}
+
+static void __regargs file_select_poll(void *userinfo, int *rd, int *wr)
+{
+ /* Input always immediately available, gniark */
+}
+
+static int __regargs file_read(void *userinfo, void *buffer, unsigned int length)
+{
+ struct amigainfo *info = userinfo;
+ BPTR fh = info->fh;
+ LONG cnt;
+
+ if (info->deleted) return 0;
+ if ((cnt = Read(fh, buffer, length)) == -1) ERROR;
+ return (int)cnt;
+}
+
+static int __regargs file_write(void *userinfo, void *buffer, unsigned int length)
+{
+ struct amigainfo *info = userinfo;
+ BPTR fh = info->fh;
+ int cnt;
+
+ if (info->deleted) return 0;
+ if (info->interactive)
+ {
+ char *bufend = (char *)buffer + length;
+
+ /* Write by lines, more pleasant for user */
+ cnt = 0;
+ while (length)
+ {
+ char *end = buffer;
+ long nb;
+ unsigned len;
+
+ while (end < bufend && *end != '\n') end++;
+ if (end == bufend) len = end - (char *)buffer;
+ else len = end + 1 - (char *)buffer;
+
+ if ((nb = Write(fh, buffer, len)) == -1) ERROR;
+ cnt += nb;
+ if (nb != len) break;
+
+ buffer = end + 1;
+ length -= nb;
+ /* Interrupt write ? */
+ if (_handle_signals(_check_signals(0))) break;
+ }
+ }
+ else if ((cnt = Write(fh, buffer, length)) == -1) ERROR;
+ return cnt;
+}
+
+static int __regargs file_lseek(void *userinfo, long rpos, int mode)
+{
+ struct amigainfo *info = userinfo;
+ BPTR fh = info->fh;
+ LONG pos, err;
+
+ if (info->deleted) return 0;
+ pos = Seek(fh, rpos, mode - 1);
+ err = IoErr();
+ if (pos == -1 || err)
+ {
+ errno = convert_oserr(err);
+ return -1;
+ }
+ pos = Seek(fh, 0, OFFSET_CURRENT);
+ if (pos == -1 || err)
+ {
+ errno = convert_oserr(err);
+ return -1;
+ }
+ return pos;
+}
+
+static int __regargs file_close(void *userinfo, int internal)
+{
+ struct amigainfo *info = userinfo;
+ BPTR fh = info->fh;
+ long protection = info->protection;
+ char name[256];
+ int ok, deleted;
+
+ if (info->lock) UnLock(info->lock);
+ deleted = info->deleted;
+ free(info);
+ if (deleted) return 0;
+
+ ok = NameFromFH(fh, name, 256);
+ if (internal || Close(fh))
+ if (!ok || protection == -1 || SetProtection(name, protection)) return 0;
+ ERROR;
+}
+
+static int isfifo(BPTR fh)
+/* Requires: IsInteractive(fh) */
+/* Try & find out if fh is a fifo: file */
+{
+ WaitForChar(fh, 0);
+
+ return IoErr() == ERROR_ACTION_NOT_KNOWN;
+}
+
+static int GetWinBounds (BPTR fh, long *width, long *height)
+{
+ char buffer[16];
+ int ok = 0;
+
+ if (!isfifo(fh) && SetMode (fh, 1))
+ {
+ if ((Write (fh, "\x9b" "0 q", 4) == 4) &&
+ WaitForChar (fh, 10000L) &&
+ (Read (fh, buffer, sizeof (buffer)) > 9) &&
+ (buffer[0] == '\x9b'))
+ {
+ int y = StrToLong (buffer+5, height);
+ int x = StrToLong (buffer+5+y+1, width);
+ if ((x != -1) && (y != -1)) ok = 1;
+ }
+ SetMode (fh, 0);
+ }
+ return ok;
+}
+
+int _do_truncate(BPTR fh, off_t length)
+{
+ int err, ret = -1;
+ long oldsize, oldpos;
+
+ oldpos = Seek(fh, 0, OFFSET_END);
+ oldsize = Seek(fh, 0, OFFSET_END);
+
+ if (!(err = IoErr()) &&
+ SetFileSize(fh, length, OFFSET_BEGINNING) == length)
+ {
+ if (oldsize < length)
+ {
+ /* Zero extra bytes */
+ off_t bufsize = length - oldsize, left = bufsize;
+ char *buf;
+ char reserve[512];
+
+ if (!(buf = AllocMem(bufsize, MEMF_CLEAR)))
+ {
+ bufsize = AvailMem(MEMF_LARGEST) / 2;
+
+ if (bufsize < 512 || !(buf = AllocMem(bufsize, MEMF_CLEAR)))
+ {
+ bufsize = 512;
+ buf = reserve;
+ memset(reserve, 0, 512);
+ }
+ }
+ while (left > 0)
+ {
+ long count = left > bufsize ? bufsize : left;
+
+ chkabort();
+ if (Write(fh, buf, count) != count)
+ {
+ err = IoErr();
+ break;
+ }
+ left -= count;
+ }
+ if (buf != reserve) FreeMem(buf, bufsize);
+ }
+ if (!err) ret = 0;
+ }
+ if (oldpos < length) Seek(fh, oldpos, OFFSET_BEGINNING);
+
+ if (ret) errno = convert_oserr(err);
+ return ret;
+}
+
+static int __regargs file_ioctl(void *userinfo, int request, void *data)
+{
+ struct amigainfo *info = userinfo;
+ BPTR fh = info->fh;
+
+ if (!info->deleted)
+ switch (request)
+ {
+ case TIOCGWINSZ: {
+ struct winsize *ws = data;
+ long col, row;
+
+ if (info->interactive && GetWinBounds(fh, &col, &row))
+ {
+ ws->ws_col = col; ws->ws_row = row;
+ return 0;
+ }
+ errno = ENOTTY;
+ return -1;
+ }
+ case _AMIGA_INTERACTIVE: {
+ int *inter = data;
+
+ *inter = IsInteractive(fh);
+ return 0;
+ }
+ case _AMIGA_GET_FH: {
+ BPTR *gotfh = data;
+
+ *gotfh = fh;
+ return 0;
+ }
+ case _AMIGA_FREE_FH: return 0;
+ case _AMIGA_TRUNCATE: {
+ off_t length = *(off_t *)data;
+
+ return _do_truncate(fh, length);
+ }
+ case _AMIGA_SETPROTECTION:
+ info->protection = *(long *)data;
+ return 0;
+ case _AMIGA_DELETE_IF_ME: {
+ BPTR nlock = *(BPTR *)data;
+
+ if (!info->lock) info->lock = DupLockFromFH(info->fh);
+ if (info->lock && SameLock(nlock, info->lock) == LOCK_SAME)
+ {
+ char name[256];
+
+ if (NameFromFH(fh, name, 256))
+ {
+ UnLock(nlock);
+ UnLock(info->lock);
+ Close(fh);
+ SetProtection(name, 0);
+ info->deleted = TRUE;
+ info->lock = info->fh = 0;
+ if (DeleteFile(name)) return 0;
+ }
+ }
+ ERROR;
+ }
+ }
+ errno = EINVAL;
+ return -1;
+}
+
+int _alloc_amigafd(BPTR fh, long protection, long flags)
+{
+ struct amigainfo *new = (struct amigainfo *)malloc(sizeof(struct amigainfo));
+ int fd;
+
+ if (!new) { errno = ENOMEM; return -1; }
+ new->fh = fh;
+ new->lock = NULL;
+ new->protection = protection;
+ new->deleted = FALSE;
+ new->interactive = IsInteractive(fh);
+
+ fd = _alloc_fd(new, flags,
+ file_select_start, file_select_poll, file_read, file_write,
+ file_lseek, file_close, file_ioctl);
+ if (fd < 0) free(new);
+
+ return fd;
+}
+
+void _init_unixio(BPTR in, int close_in, BPTR out, int close_out,
+ BPTR error, int close_error)
+{
+ if (_alloc_amigafd(in, -1, FI_READ | (close_in ? 0 : O_NO_CLOSE)) == 0 &&
+ _alloc_amigafd(out, -1, FI_WRITE | (close_out ? 0 : O_NO_CLOSE)) == 1 &&
+ _alloc_amigafd(error, -1, FI_WRITE | (close_error ? 0 : O_NO_CLOSE)) == 2)
+ return;
+
+ _fail("Failed to initialise I/O");
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/amigaos.h amiga/fsf/emacs18/amiga/unix/src/amigaos.h
--- baseline/fsf/emacs18/amiga/unix/src/amigaos.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/amigaos.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,10 @@
+#ifndef AMIGAOS_H
+#define AMIGAOS_H
+
+int _alloc_amigafd(BPTR fh, long protection, long flags);
+
+void _init_unixio(BPTR in, int close_in, BPTR out, int close_out,
+ BPTR error, int close_error);
+int _do_truncate(BPTR fh, off_t length);
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/amigatime.c amiga/fsf/emacs18/amiga/unix/src/amigatime.c
--- baseline/fsf/emacs18/amiga/unix/src/amigatime.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/amigatime.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,55 @@
+#include "amiga.h"
+#include "timeconvert.h"
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <string.h>
+
+extern char *tzname[2];
+extern int daylight;
+
+int gettimeofday(struct timeval *tp, struct timezone *tzp)
+{
+ struct timeval now;
+
+ chkabort();
+
+ _gettime(&now);
+ if (tp) *tp = now;
+
+ if (tzp)
+ {
+ int dst;
+ struct tm *local;
+
+ local = localtime(&now.tv_secs);
+
+ tzp->tz_minuteswest = -local->tm_gmtoff / 60;
+ /* Guess a value for tz_dsttime, based on tzname[1] */
+ /* These guesses are not very good. */
+ dst = DST_NONE;
+ if (!strcmp(tzname[1], "MET DST")) dst = DST_MET;
+ else if (!strcmp(tzname[1], "WET DST")) dst = DST_WET;
+ else if (!strcmp(tzname[1], "EET DST")) dst = DST_EET;
+ else if (!strcmp(tzname[1], "EDT")) dst = DST_USA;
+ else if (!strcmp(tzname[1], "CDT")) dst = DST_USA;
+ else if (!strcmp(tzname[1], "MDT")) dst = DST_USA;
+ else if (!strcmp(tzname[1], "PDT")) dst = DST_USA;
+ else if (!strcmp(tzname[1], "AKDT")) dst = DST_USA;
+ tzp->tz_dsttime = dst;
+ }
+ return 0;
+}
+
+int ftime(struct timeb *ft)
+{
+ struct timeval now;
+ struct timezone zone;
+
+ gettimeofday(&now, &zone);
+ ft->time = now.tv_sec;
+ ft->millitm = now.tv_usec;
+ ft->timezone = zone.tz_minuteswest;
+ ft->dstflag = daylight;
+
+ return 0;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/bcmp.c amiga/fsf/emacs18/amiga/unix/src/bcmp.c
--- baseline/fsf/emacs18/amiga/unix/src/bcmp.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/bcmp.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,9 @@
+#include "amiga.h"
+#include <string.h>
+
+#undef bcmp
+
+int bcmp(char *b1, char *b2, int length)
+{
+ return length == 0 ? 0 : memcmp(b2, b1, length);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/bcopy.c amiga/fsf/emacs18/amiga/unix/src/bcopy.c
--- baseline/fsf/emacs18/amiga/unix/src/bcopy.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/bcopy.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,10 @@
+#include "amiga.h"
+#include <string.h>
+
+#undef bcopy
+
+void bcopy(char *b1, char *b2, int length)
+{
+ /* Unoptimised version */
+ memmove(b2, b1, length);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/bzero.c amiga/fsf/emacs18/amiga/unix/src/bzero.c
--- baseline/fsf/emacs18/amiga/unix/src/bzero.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/bzero.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,9 @@
+#include "amiga.h"
+#include <string.h>
+
+#undef bzero
+
+void bzero(char *b, int length)
+{
+ memset(b, 0, length);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/chmod.c amiga/fsf/emacs18/amiga/unix/src/chmod.c
--- baseline/fsf/emacs18/amiga/unix/src/chmod.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/chmod.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,8 @@
+#include "amiga.h"
+
+int chmod(const char *name, int mode)
+{
+ chkabort();
+ if (SetProtection(name, _make_protection(mode))) return 0;
+ ERROR;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/chown.c amiga/fsf/emacs18/amiga/unix/src/chown.c
--- baseline/fsf/emacs18/amiga/unix/src/chown.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/chown.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,4 @@
+#include "amiga.h"
+
+int chown(char *path, int owner, int group) { return 0; }
+int fchown(int fd, int owner, int group) { return 0; }
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/close.c amiga/fsf/emacs18/amiga/unix/src/close.c
--- baseline/fsf/emacs18/amiga/unix/src/close.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/close.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,26 @@
+#include "amiga.h"
+#include "files.h"
+#include <fcntl.h>
+
+#undef close
+
+int __close(int fd)
+{
+ struct fileinfo *fi;
+
+ chkabort();
+ if (fi = _find_fd(fd))
+ {
+ int err = fi->close(fi->userinfo, fi->flags & O_NO_CLOSE);
+
+ _free_fd(fd);
+ return err;
+ }
+ return -1;
+}
+
+int close(int fd)
+{
+ return __close(fd);
+}
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/creat.c amiga/fsf/emacs18/amiga/unix/src/creat.c
--- baseline/fsf/emacs18/amiga/unix/src/creat.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/creat.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,17 @@
+#include "amiga.h"
+#include "files.h"
+#include <fcntl.h>
+
+#undef creat
+
+int __creat(const char *file, int prot)
+{
+ chkabort();
+ return open(file, O_WRONLY | O_CREAT | O_TRUNC, prot);
+}
+
+int creat(const char *file, int prot)
+{
+ return __creat(file, prot);
+}
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/ctime.c amiga/fsf/emacs18/amiga/unix/src/ctime.c
--- baseline/fsf/emacs18/amiga/unix/src/ctime.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/ctime.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,1381 @@
+/*
+ * Copyright (c) 1987, 1989 Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Arthur David Olson of the National Cancer Institute.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)ctime.c 5.26 (Berkeley) 2/23/91";
+#endif /* LIBC_SCCS and not lint */
+
+/*
+** Leap second handling from Bradley White (bww@k.gp.cs.cmu.edu).
+** POSIX-style TZ environment variable handling from Guy Harris
+** (guy@auspex.com).
+*/
+
+/*LINTLIBRARY*/
+
+#include <sys/param.h>
+#include <fcntl.h>
+#include <time.h>
+#include <tzfile.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#ifdef __STDC__
+#include <stdlib.h>
+
+#define P(s) s
+#define alloc_size_t size_t
+#define qsort_size_t size_t
+#define fread_size_t size_t
+#define fwrite_size_t size_t
+
+#else /* !defined __STDC__ */
+
+#define P(s) ()
+
+typedef char * genericptr_t;
+typedef unsigned alloc_size_t;
+typedef int qsort_size_t;
+typedef int fread_size_t;
+typedef int fwrite_size_t;
+
+extern char * calloc();
+extern char * malloc();
+extern char * realloc();
+extern char * getenv();
+
+#endif /* !defined __STDC__ */
+
+extern time_t time();
+
+#define ACCESS_MODE O_RDONLY
+#define OPEN_MODE O_RDONLY
+
+#ifndef WILDABBR
+/*
+** Someone might make incorrect use of a time zone abbreviation:
+** 1. They might reference tzname[0] before calling tzset (explicitly
+** or implicitly).
+** 2. They might reference tzname[1] before calling tzset (explicitly
+** or implicitly).
+** 3. They might reference tzname[1] after setting to a time zone
+** in which Daylight Saving Time is never observed.
+** 4. They might reference tzname[0] after setting to a time zone
+** in which Standard Time is never observed.
+** 5. They might reference tm.TM_ZONE after calling offtime.
+** What's best to do in the above cases is open to debate;
+** for now, we just set things up so that in any of the five cases
+** WILDABBR is used. Another possibility: initialize tzname[0] to the
+** string "tzname[0] used before set", and similarly for the other cases.
+** And another: initialize tzname[0] to "ERA", with an explanation in the
+** manual page of what this "time zone abbreviation" means (doing this so
+** that tzname[0] has the "normal" length of three characters).
+*/
+#define WILDABBR " "
+#endif /* !defined WILDABBR */
+
+#ifndef TRUE
+#define TRUE 1
+#define FALSE 0
+#endif /* !defined TRUE */
+
+static const char GMT[] = "GMT";
+
+struct ttinfo { /* time type information */
+ long tt_gmtoff; /* GMT offset in seconds */
+ int tt_isdst; /* used to set tm_isdst */
+ int tt_abbrind; /* abbreviation list index */
+ int tt_ttisstd; /* TRUE if transition is std time */
+};
+
+struct lsinfo { /* leap second information */
+ time_t ls_trans; /* transition time */
+ long ls_corr; /* correction to apply */
+};
+
+struct state {
+ int leapcnt;
+ int timecnt;
+ int typecnt;
+ int charcnt;
+ time_t ats[TZ_MAX_TIMES];
+ unsigned char types[TZ_MAX_TIMES];
+ struct ttinfo ttis[TZ_MAX_TYPES];
+ char chars[(TZ_MAX_CHARS + 1 > sizeof GMT) ?
+ TZ_MAX_CHARS + 1 : sizeof GMT];
+ struct lsinfo lsis[TZ_MAX_LEAPS];
+};
+
+struct rule {
+ int r_type; /* type of rule--see below */
+ int r_day; /* day number of rule */
+ int r_week; /* week number of rule */
+ int r_mon; /* month number of rule */
+ long r_time; /* transition time of rule */
+};
+
+#define JULIAN_DAY 0 /* Jn - Julian day */
+#define DAY_OF_YEAR 1 /* n - day of year */
+#define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d - month, week, day of week */
+
+/*
+** Prototypes for static functions.
+*/
+
+static long detzcode P((const char * codep));
+static const char * getzname P((const char * strp));
+static const char * getnum P((const char * strp, int * nump, int min,
+ int max));
+static const char * getsecs P((const char * strp, long * secsp));
+static const char * getoffset P((const char * strp, long * offsetp));
+static const char * getrule P((const char * strp, struct rule * rulep));
+static void gmtload P((struct state * sp));
+static void gmtsub P((const time_t * timep, long offset,
+ struct tm * tmp));
+static void localsub P((const time_t * timep, long offset,
+ struct tm * tmp));
+static void normalize P((int * tensptr, int * unitsptr, int base));
+static void settzname P((void));
+static time_t time1 P((struct tm * tmp, void (* funcp)(),
+ long offset));
+static time_t time2 P((struct tm *tmp, void (* funcp)(),
+ long offset, int * okayp));
+static void timesub P((const time_t * timep, long offset,
+ const struct state * sp, struct tm * tmp));
+static int tmcomp P((const struct tm * atmp,
+ const struct tm * btmp));
+static time_t transtime P((time_t janfirst, int year,
+ const struct rule * rulep, long offset));
+static int tzload P((const char * name, struct state * sp));
+static int tzparse P((const char * name, struct state * sp,
+ int lastditch));
+
+#ifdef ALL_STATE
+static struct state * lclptr;
+static struct state * gmtptr;
+#endif /* defined ALL_STATE */
+
+#ifndef ALL_STATE
+static struct state lclmem;
+static struct state gmtmem;
+#define lclptr (&lclmem)
+#define gmtptr (&gmtmem)
+#endif /* State Farm */
+
+static int lcl_is_set;
+static int gmt_is_set;
+
+char * tzname[2] = {
+ WILDABBR,
+ WILDABBR
+};
+
+time_t timezone = 0;
+int daylight = 0;
+
+#ifdef ALTZONE
+time_t altzone = 0;
+#endif /* defined ALTZONE */
+
+static long
+detzcode(codep)
+const char * const codep;
+{
+ register long result;
+ register int i;
+
+ result = 0;
+ for (i = 0; i < 4; ++i)
+ result = (result << 8) | (codep[i] & 0xff);
+ return result;
+}
+
+static void
+settzname()
+{
+ register const struct state * const sp = lclptr;
+ register int i;
+
+ tzname[0] = WILDABBR;
+ tzname[1] = WILDABBR;
+ daylight = 0;
+ timezone = 0;
+#ifdef ALTZONE
+ altzone = 0;
+#endif /* defined ALTZONE */
+#ifdef ALL_STATE
+ if (sp == NULL) {
+ tzname[0] = tzname[1] = GMT;
+ return;
+ }
+#endif /* defined ALL_STATE */
+ for (i = 0; i < sp->typecnt; ++i) {
+ register const struct ttinfo * const ttisp = &sp->ttis[i];
+
+ tzname[ttisp->tt_isdst] =
+ (char *) &sp->chars[ttisp->tt_abbrind];
+ if (ttisp->tt_isdst)
+ daylight = 1;
+ if (i == 0 || !ttisp->tt_isdst)
+ timezone = -(ttisp->tt_gmtoff);
+#ifdef ALTZONE
+ if (i == 0 || ttisp->tt_isdst)
+ altzone = -(ttisp->tt_gmtoff);
+#endif /* defined ALTZONE */
+ }
+ /*
+ ** And to get the latest zone names into tzname. . .
+ */
+ for (i = 0; i < sp->timecnt; ++i) {
+ register const struct ttinfo * const ttisp =
+ &sp->ttis[sp->types[i]];
+
+ tzname[ttisp->tt_isdst] =
+ (char *) &sp->chars[ttisp->tt_abbrind];
+ }
+}
+
+static int
+tzload(name, sp)
+register const char * name;
+register struct state * const sp;
+{
+ register const char * p;
+ register int i;
+ register int fid;
+
+ if (name == NULL && (name = TZDEFAULT) == NULL)
+ return -1;
+ {
+ char fullname[FILENAME_MAX + 1];
+
+ if (name[0] == ':')
+ ++name;
+ if (!strchr(name, ':')) {
+ if ((p = TZDIR) == NULL)
+ return -1;
+ if ((strlen(p) + strlen(name) + 1) >= sizeof fullname)
+ return -1;
+ (void) strcpy(fullname, p);
+ (void) strcat(fullname, "/");
+ (void) strcat(fullname, name);
+ name = fullname;
+ }
+ if ((fid = open(name, OPEN_MODE)) == -1)
+ return -1;
+ }
+ {
+ register const struct tzhead * tzhp;
+ char buf[sizeof *sp + sizeof *tzhp];
+ int ttisstdcnt;
+
+ i = read(fid, buf, sizeof buf);
+ if (close(fid) != 0 || i < sizeof *tzhp)
+ return -1;
+ tzhp = (struct tzhead *) buf;
+ ttisstdcnt = (int) detzcode(tzhp->tzh_ttisstdcnt);
+ sp->leapcnt = (int) detzcode(tzhp->tzh_leapcnt);
+ sp->timecnt = (int) detzcode(tzhp->tzh_timecnt);
+ sp->typecnt = (int) detzcode(tzhp->tzh_typecnt);
+ sp->charcnt = (int) detzcode(tzhp->tzh_charcnt);
+ if (sp->leapcnt < 0 || sp->leapcnt > TZ_MAX_LEAPS ||
+ sp->typecnt <= 0 || sp->typecnt > TZ_MAX_TYPES ||
+ sp->timecnt < 0 || sp->timecnt > TZ_MAX_TIMES ||
+ sp->charcnt < 0 || sp->charcnt > TZ_MAX_CHARS ||
+ (ttisstdcnt != sp->typecnt && ttisstdcnt != 0))
+ return -1;
+ if (i < sizeof *tzhp +
+ sp->timecnt * (4 + sizeof (char)) +
+ sp->typecnt * (4 + 2 * sizeof (char)) +
+ sp->charcnt * sizeof (char) +
+ sp->leapcnt * 2 * 4 +
+ ttisstdcnt * sizeof (char))
+ return -1;
+ p = buf + sizeof *tzhp;
+ for (i = 0; i < sp->timecnt; ++i) {
+ sp->ats[i] = detzcode(p);
+ p += 4;
+ }
+ for (i = 0; i < sp->timecnt; ++i) {
+ sp->types[i] = (unsigned char) *p++;
+ if (sp->types[i] >= sp->typecnt)
+ return -1;
+ }
+ for (i = 0; i < sp->typecnt; ++i) {
+ register struct ttinfo * ttisp;
+
+ ttisp = &sp->ttis[i];
+ ttisp->tt_gmtoff = detzcode(p);
+ p += 4;
+ ttisp->tt_isdst = (unsigned char) *p++;
+ if (ttisp->tt_isdst != 0 && ttisp->tt_isdst != 1)
+ return -1;
+ ttisp->tt_abbrind = (unsigned char) *p++;
+ if (ttisp->tt_abbrind < 0 ||
+ ttisp->tt_abbrind > sp->charcnt)
+ return -1;
+ }
+ for (i = 0; i < sp->charcnt; ++i)
+ sp->chars[i] = *p++;
+ sp->chars[i] = '\0'; /* ensure '\0' at end */
+ for (i = 0; i < sp->leapcnt; ++i) {
+ register struct lsinfo * lsisp;
+
+ lsisp = &sp->lsis[i];
+ lsisp->ls_trans = detzcode(p);
+ p += 4;
+ lsisp->ls_corr = detzcode(p);
+ p += 4;
+ }
+ for (i = 0; i < sp->typecnt; ++i) {
+ register struct ttinfo * ttisp;
+
+ ttisp = &sp->ttis[i];
+ if (ttisstdcnt == 0)
+ ttisp->tt_ttisstd = FALSE;
+ else {
+ ttisp->tt_ttisstd = *p++;
+ if (ttisp->tt_ttisstd != TRUE &&
+ ttisp->tt_ttisstd != FALSE)
+ return -1;
+ }
+ }
+ }
+ return 0;
+}
+
+static const int mon_lengths[2][MONSPERYEAR] = {
+ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
+ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
+};
+
+static const int year_lengths[2] = {
+ DAYSPERNYEAR, DAYSPERLYEAR
+};
+
+/*
+** Given a pointer into a time zone string, scan until a character that is not
+** a valid character in a zone name is found. Return a pointer to that
+** character.
+*/
+
+static const char *
+getzname(strp)
+register const char * strp;
+{
+ register char c;
+
+ while ((c = *strp) != '\0' && !isdigit(c) && c != ',' && c != '-' &&
+ c != '+')
+ ++strp;
+ return strp;
+}
+
+/*
+** Given a pointer into a time zone string, extract a number from that string.
+** Check that the number is within a specified range; if it is not, return
+** NULL.
+** Otherwise, return a pointer to the first character not part of the number.
+*/
+
+static const char *
+getnum(strp, nump, min, max)
+register const char * strp;
+int * const nump;
+const int min;
+const int max;
+{
+ register char c;
+ register int num;
+
+ if (strp == NULL || !isdigit(*strp))
+ return NULL;
+ num = 0;
+ while ((c = *strp) != '\0' && isdigit(c)) {
+ num = num * 10 + (c - '0');
+ if (num > max)
+ return NULL; /* illegal value */
+ ++strp;
+ }
+ if (num < min)
+ return NULL; /* illegal value */
+ *nump = num;
+ return strp;
+}
+
+/*
+** Given a pointer into a time zone string, extract a number of seconds,
+** in hh[:mm[:ss]] form, from the string.
+** If any error occurs, return NULL.
+** Otherwise, return a pointer to the first character not part of the number
+** of seconds.
+*/
+
+static const char *
+getsecs(strp, secsp)
+register const char * strp;
+long * const secsp;
+{
+ int num;
+
+ strp = getnum(strp, &num, 0, HOURSPERDAY);
+ if (strp == NULL)
+ return NULL;
+ *secsp = num * SECSPERHOUR;
+ if (*strp == ':') {
+ ++strp;
+ strp = getnum(strp, &num, 0, MINSPERHOUR - 1);
+ if (strp == NULL)
+ return NULL;
+ *secsp += num * SECSPERMIN;
+ if (*strp == ':') {
+ ++strp;
+ strp = getnum(strp, &num, 0, SECSPERMIN - 1);
+ if (strp == NULL)
+ return NULL;
+ *secsp += num;
+ }
+ }
+ return strp;
+}
+
+/*
+** Given a pointer into a time zone string, extract an offset, in
+** [+-]hh[:mm[:ss]] form, from the string.
+** If any error occurs, return NULL.
+** Otherwise, return a pointer to the first character not part of the time.
+*/
+
+static const char *
+getoffset(strp, offsetp)
+register const char * strp;
+long * const offsetp;
+{
+ register int neg;
+
+ if (*strp == '-') {
+ neg = 1;
+ ++strp;
+ } else if (isdigit(*strp) || *strp++ == '+')
+ neg = 0;
+ else return NULL; /* illegal offset */
+ strp = getsecs(strp, offsetp);
+ if (strp == NULL)
+ return NULL; /* illegal time */
+ if (neg)
+ *offsetp = -*offsetp;
+ return strp;
+}
+
+/*
+** Given a pointer into a time zone string, extract a rule in the form
+** date[/time]. See POSIX section 8 for the format of "date" and "time".
+** If a valid rule is not found, return NULL.
+** Otherwise, return a pointer to the first character not part of the rule.
+*/
+
+static const char *
+getrule(strp, rulep)
+const char * strp;
+register struct rule * const rulep;
+{
+ if (*strp == 'J') {
+ /*
+ ** Julian day.
+ */
+ rulep->r_type = JULIAN_DAY;
+ ++strp;
+ strp = getnum(strp, &rulep->r_day, 1, DAYSPERNYEAR);
+ } else if (*strp == 'M') {
+ /*
+ ** Month, week, day.
+ */
+ rulep->r_type = MONTH_NTH_DAY_OF_WEEK;
+ ++strp;
+ strp = getnum(strp, &rulep->r_mon, 1, MONSPERYEAR);
+ if (strp == NULL)
+ return NULL;
+ if (*strp++ != '.')
+ return NULL;
+ strp = getnum(strp, &rulep->r_week, 1, 5);
+ if (strp == NULL)
+ return NULL;
+ if (*strp++ != '.')
+ return NULL;
+ strp = getnum(strp, &rulep->r_day, 0, DAYSPERWEEK - 1);
+ } else if (isdigit(*strp)) {
+ /*
+ ** Day of year.
+ */
+ rulep->r_type = DAY_OF_YEAR;
+ strp = getnum(strp, &rulep->r_day, 0, DAYSPERLYEAR - 1);
+ } else return NULL; /* invalid format */
+ if (strp == NULL)
+ return NULL;
+ if (*strp == '/') {
+ /*
+ ** Time specified.
+ */
+ ++strp;
+ strp = getsecs(strp, &rulep->r_time);
+ } else rulep->r_time = 2 * SECSPERHOUR; /* default = 2:00:00 */
+ return strp;
+}
+
+/*
+** Given the Epoch-relative time of January 1, 00:00:00 GMT, in a year, the
+** year, a rule, and the offset from GMT at the time that rule takes effect,
+** calculate the Epoch-relative time that rule takes effect.
+*/
+
+static time_t
+transtime(janfirst, year, rulep, offset)
+const time_t janfirst;
+const int year;
+register const struct rule * const rulep;
+const long offset;
+{
+ register int leapyear;
+ register time_t value;
+ register int i;
+ int d, m1, yy0, yy1, yy2, dow;
+
+ leapyear = isleap(year);
+ switch (rulep->r_type) {
+
+ case JULIAN_DAY:
+ /*
+ ** Jn - Julian day, 1 == January 1, 60 == March 1 even in leap
+ ** years.
+ ** In non-leap years, or if the day number is 59 or less, just
+ ** add SECSPERDAY times the day number-1 to the time of
+ ** January 1, midnight, to get the day.
+ */
+ value = janfirst + (rulep->r_day - 1) * SECSPERDAY;
+ if (leapyear && rulep->r_day >= 60)
+ value += SECSPERDAY;
+ break;
+
+ case DAY_OF_YEAR:
+ /*
+ ** n - day of year.
+ ** Just add SECSPERDAY times the day number to the time of
+ ** January 1, midnight, to get the day.
+ */
+ value = janfirst + rulep->r_day * SECSPERDAY;
+ break;
+
+ case MONTH_NTH_DAY_OF_WEEK:
+ /*
+ ** Mm.n.d - nth "dth day" of month m.
+ */
+ value = janfirst;
+ for (i = 0; i < rulep->r_mon - 1; ++i)
+ value += mon_lengths[leapyear][i] * SECSPERDAY;
+
+ /*
+ ** Use Zeller's Congruence to get day-of-week of first day of
+ ** month.
+ */
+ m1 = (rulep->r_mon + 9) % 12 + 1;
+ yy0 = (rulep->r_mon <= 2) ? (year - 1) : year;
+ yy1 = yy0 / 100;
+ yy2 = yy0 % 100;
+ dow = ((26 * m1 - 2) / 10 +
+ 1 + yy2 + yy2 / 4 + yy1 / 4 - 2 * yy1) % 7;
+ if (dow < 0)
+ dow += DAYSPERWEEK;
+
+ /*
+ ** "dow" is the day-of-week of the first day of the month. Get
+ ** the day-of-month (zero-origin) of the first "dow" day of the
+ ** month.
+ */
+ d = rulep->r_day - dow;
+ if (d < 0)
+ d += DAYSPERWEEK;
+ for (i = 1; i < rulep->r_week; ++i) {
+ if (d + DAYSPERWEEK >=
+ mon_lengths[leapyear][rulep->r_mon - 1])
+ break;
+ d += DAYSPERWEEK;
+ }
+
+ /*
+ ** "d" is the day-of-month (zero-origin) of the day we want.
+ */
+ value += d * SECSPERDAY;
+ break;
+ }
+
+ /*
+ ** "value" is the Epoch-relative time of 00:00:00 GMT on the day in
+ ** question. To get the Epoch-relative time of the specified local
+ ** time on that day, add the transition time and the current offset
+ ** from GMT.
+ */
+ return value + rulep->r_time + offset;
+}
+
+/*
+** Given a POSIX section 8-style TZ string, fill in the rule tables as
+** appropriate.
+*/
+
+static int
+tzparse(name, sp, lastditch)
+const char * name;
+register struct state * const sp;
+const int lastditch;
+{
+ const char * stdname;
+ const char * dstname;
+ int stdlen;
+ int dstlen;
+ long stdoffset;
+ long dstoffset;
+ register time_t * atp;
+ register unsigned char * typep;
+ register char * cp;
+ register int load_result;
+
+ stdname = name;
+ if (lastditch) {
+ stdlen = strlen(name); /* length of standard zone name */
+ name += stdlen;
+ if (stdlen >= sizeof sp->chars)
+ stdlen = (sizeof sp->chars) - 1;
+ } else {
+ name = getzname(name);
+ stdlen = name - stdname;
+ if (stdlen < 3)
+ return -1;
+ }
+ if (*name == '\0')
+ return -1;
+ else {
+ name = getoffset(name, &stdoffset);
+ if (name == NULL)
+ return -1;
+ }
+ load_result = tzload(TZDEFRULES, sp);
+ if (load_result != 0)
+ sp->leapcnt = 0; /* so, we're off a little */
+ if (*name != '\0') {
+ dstname = name;
+ name = getzname(name);
+ dstlen = name - dstname; /* length of DST zone name */
+ if (dstlen < 3)
+ return -1;
+ if (*name != '\0' && *name != ',' && *name != ';') {
+ name = getoffset(name, &dstoffset);
+ if (name == NULL)
+ return -1;
+ } else dstoffset = stdoffset - SECSPERHOUR;
+ if (*name == ',' || *name == ';') {
+ struct rule start;
+ struct rule end;
+ register int year;
+ register time_t janfirst;
+ time_t starttime;
+ time_t endtime;
+
+ ++name;
+ if ((name = getrule(name, &start)) == NULL)
+ return -1;
+ if (*name++ != ',')
+ return -1;
+ if ((name = getrule(name, &end)) == NULL)
+ return -1;
+ if (*name != '\0')
+ return -1;
+ sp->typecnt = 2; /* standard time and DST */
+ /*
+ ** Two transitions per year, from EPOCH_YEAR to 2037.
+ */
+ sp->timecnt = 2 * (2037 - EPOCH_YEAR + 1);
+ if (sp->timecnt > TZ_MAX_TIMES)
+ return -1;
+ sp->ttis[0].tt_gmtoff = -dstoffset;
+ sp->ttis[0].tt_isdst = 1;
+ sp->ttis[0].tt_abbrind = stdlen + 1;
+ sp->ttis[1].tt_gmtoff = -stdoffset;
+ sp->ttis[1].tt_isdst = 0;
+ sp->ttis[1].tt_abbrind = 0;
+ atp = sp->ats;
+ typep = sp->types;
+ janfirst = 0;
+ for (year = EPOCH_YEAR; year <= 2037; ++year) {
+ starttime = transtime(janfirst, year, &start,
+ stdoffset);
+ endtime = transtime(janfirst, year, &end,
+ dstoffset);
+ if (starttime > endtime) {
+ *atp++ = endtime;
+ *typep++ = 1; /* DST ends */
+ *atp++ = starttime;
+ *typep++ = 0; /* DST begins */
+ } else {
+ *atp++ = starttime;
+ *typep++ = 0; /* DST begins */
+ *atp++ = endtime;
+ *typep++ = 1; /* DST ends */
+ }
+ janfirst +=
+ year_lengths[isleap(year)] * SECSPERDAY;
+ }
+ } else {
+ int sawstd;
+ int sawdst;
+ long stdfix;
+ long dstfix;
+ long oldfix;
+ int isdst;
+ register int i;
+
+ if (*name != '\0')
+ return -1;
+ if (load_result != 0)
+ return -1;
+ /*
+ ** Compute the difference between the real and
+ ** prototype standard and summer time offsets
+ ** from GMT, and put the real standard and summer
+ ** time offsets into the rules in place of the
+ ** prototype offsets.
+ */
+ sawstd = FALSE;
+ sawdst = FALSE;
+ stdfix = 0;
+ dstfix = 0;
+ for (i = 0; i < sp->typecnt; ++i) {
+ if (sp->ttis[i].tt_isdst) {
+ oldfix = dstfix;
+ dstfix =
+ sp->ttis[i].tt_gmtoff + dstoffset;
+ if (sawdst && (oldfix != dstfix))
+ return -1;
+ sp->ttis[i].tt_gmtoff = -dstoffset;
+ sp->ttis[i].tt_abbrind = stdlen + 1;
+ sawdst = TRUE;
+ } else {
+ oldfix = stdfix;
+ stdfix =
+ sp->ttis[i].tt_gmtoff + stdoffset;
+ if (sawstd && (oldfix != stdfix))
+ return -1;
+ sp->ttis[i].tt_gmtoff = -stdoffset;
+ sp->ttis[i].tt_abbrind = 0;
+ sawstd = TRUE;
+ }
+ }
+ /*
+ ** Make sure we have both standard and summer time.
+ */
+ if (!sawdst || !sawstd)
+ return -1;
+ /*
+ ** Now correct the transition times by shifting
+ ** them by the difference between the real and
+ ** prototype offsets. Note that this difference
+ ** can be different in standard and summer time;
+ ** the prototype probably has a 1-hour difference
+ ** between standard and summer time, but a different
+ ** difference can be specified in TZ.
+ */
+ isdst = FALSE; /* we start in standard time */
+ for (i = 0; i < sp->timecnt; ++i) {
+ register const struct ttinfo * ttisp;
+
+ /*
+ ** If summer time is in effect, and the
+ ** transition time was not specified as
+ ** standard time, add the summer time
+ ** offset to the transition time;
+ ** otherwise, add the standard time offset
+ ** to the transition time.
+ */
+ ttisp = &sp->ttis[sp->types[i]];
+ sp->ats[i] +=
+ (isdst && !ttisp->tt_ttisstd) ?
+ dstfix : stdfix;
+ isdst = ttisp->tt_isdst;
+ }
+ }
+ } else {
+ dstlen = 0;
+ sp->typecnt = 1; /* only standard time */
+ sp->timecnt = 0;
+ sp->ttis[0].tt_gmtoff = -stdoffset;
+ sp->ttis[0].tt_isdst = 0;
+ sp->ttis[0].tt_abbrind = 0;
+ }
+ sp->charcnt = stdlen + 1;
+ if (dstlen != 0)
+ sp->charcnt += dstlen + 1;
+ if (sp->charcnt > sizeof sp->chars)
+ return -1;
+ cp = sp->chars;
+ (void) strncpy(cp, stdname, stdlen);
+ cp += stdlen;
+ *cp++ = '\0';
+ if (dstlen != 0) {
+ (void) strncpy(cp, dstname, dstlen);
+ *(cp + dstlen) = '\0';
+ }
+ return 0;
+}
+
+static void
+gmtload(sp)
+struct state * const sp;
+{
+ if (tzload(GMT, sp) != 0)
+ (void) tzparse(GMT, sp, TRUE);
+}
+
+void
+tzset()
+{
+ register const char * name;
+ void tzsetwall();
+
+ name = getenv("UNIXTZ");
+ if (name == NULL) {
+ tzsetwall();
+ return;
+ }
+ lcl_is_set = TRUE;
+#ifdef ALL_STATE
+ if (lclptr == NULL) {
+ lclptr = (struct state *) malloc(sizeof *lclptr);
+ if (lclptr == NULL) {
+ settzname(); /* all we can do */
+ return;
+ }
+ }
+#endif /* defined ALL_STATE */
+ if (*name == '\0') {
+ /*
+ ** User wants it fast rather than right.
+ */
+ lclptr->leapcnt = 0; /* so, we're off a little */
+ lclptr->timecnt = 0;
+ lclptr->ttis[0].tt_gmtoff = 0;
+ lclptr->ttis[0].tt_abbrind = 0;
+ (void) strcpy(lclptr->chars, GMT);
+ } else if (tzload(name, lclptr) != 0)
+ if (name[0] == ':' || tzparse(name, lclptr, FALSE) != 0)
+ (void) gmtload(lclptr);
+ settzname();
+}
+
+void
+tzsetwall()
+{
+ lcl_is_set = TRUE;
+#ifdef ALL_STATE
+ if (lclptr == NULL) {
+ lclptr = (struct state *) malloc(sizeof *lclptr);
+ if (lclptr == NULL) {
+ settzname(); /* all we can do */
+ return;
+ }
+ }
+#endif /* defined ALL_STATE */
+ if (tzload((char *) NULL, lclptr) != 0)
+ gmtload(lclptr);
+ settzname();
+}
+
+/*
+** The easy way to behave "as if no library function calls" localtime
+** is to not call it--so we drop its guts into "localsub", which can be
+** freely called. (And no, the PANS doesn't require the above behavior--
+** but it *is* desirable.)
+**
+** The unused offset argument is for the benefit of mktime variants.
+*/
+
+/*ARGSUSED*/
+static void
+localsub(timep, offset, tmp)
+const time_t * const timep;
+const long offset;
+struct tm * const tmp;
+{
+ register struct state * sp;
+ register const struct ttinfo * ttisp;
+ register int i;
+ const time_t t = *timep;
+
+ if (!lcl_is_set)
+ tzset();
+ sp = lclptr;
+#ifdef ALL_STATE
+ if (sp == NULL) {
+ gmtsub(timep, offset, tmp);
+ return;
+ }
+#endif /* defined ALL_STATE */
+ if (sp->timecnt == 0 || t < sp->ats[0]) {
+ i = 0;
+ while (sp->ttis[i].tt_isdst)
+ if (++i >= sp->typecnt) {
+ i = 0;
+ break;
+ }
+ } else {
+ for (i = 1; i < sp->timecnt; ++i)
+ if (t < sp->ats[i])
+ break;
+ i = sp->types[i - 1];
+ }
+ ttisp = &sp->ttis[i];
+ /*
+ ** To get (wrong) behavior that's compatible with System V Release 2.0
+ ** you'd replace the statement below with
+ ** t += ttisp->tt_gmtoff;
+ ** timesub(&t, 0L, sp, tmp);
+ */
+ timesub(&t, ttisp->tt_gmtoff, sp, tmp);
+ tmp->tm_isdst = ttisp->tt_isdst;
+ tzname[tmp->tm_isdst] = (char *) &sp->chars[ttisp->tt_abbrind];
+ tmp->tm_zone = &sp->chars[ttisp->tt_abbrind];
+}
+
+struct tm *
+localtime(timep)
+const time_t * const timep;
+{
+ static struct tm tm;
+
+ localsub(timep, 0L, &tm);
+ return &tm;
+}
+
+/*
+** gmtsub is to gmtime as localsub is to localtime.
+*/
+
+static void
+gmtsub(timep, offset, tmp)
+const time_t * const timep;
+const long offset;
+struct tm * const tmp;
+{
+ if (!gmt_is_set) {
+ gmt_is_set = TRUE;
+#ifdef ALL_STATE
+ gmtptr = (struct state *) malloc(sizeof *gmtptr);
+ if (gmtptr != NULL)
+#endif /* defined ALL_STATE */
+ gmtload(gmtptr);
+ }
+ timesub(timep, offset, gmtptr, tmp);
+ /*
+ ** Could get fancy here and deliver something such as
+ ** "GMT+xxxx" or "GMT-xxxx" if offset is non-zero,
+ ** but this is no time for a treasure hunt.
+ */
+ if (offset != 0)
+ tmp->tm_zone = WILDABBR;
+ else {
+#ifdef ALL_STATE
+ if (gmtptr == NULL)
+ tmp->TM_ZONE = GMT;
+ else tmp->TM_ZONE = gmtptr->chars;
+#endif /* defined ALL_STATE */
+#ifndef ALL_STATE
+ tmp->tm_zone = gmtptr->chars;
+#endif /* State Farm */
+ }
+}
+
+struct tm *
+gmtime(timep)
+const time_t * const timep;
+{
+ static struct tm tm;
+
+ gmtsub(timep, 0L, &tm);
+ return &tm;
+}
+
+static void
+timesub(timep, offset, sp, tmp)
+const time_t * const timep;
+const long offset;
+register const struct state * const sp;
+register struct tm * const tmp;
+{
+ register const struct lsinfo * lp;
+ register long days;
+ register long rem;
+ register int y;
+ register int yleap;
+ register const int * ip;
+ register long corr;
+ register int hit;
+ register int i;
+
+ corr = 0;
+ hit = FALSE;
+#ifdef ALL_STATE
+ i = (sp == NULL) ? 0 : sp->leapcnt;
+#endif /* defined ALL_STATE */
+#ifndef ALL_STATE
+ i = sp->leapcnt;
+#endif /* State Farm */
+ while (--i >= 0) {
+ lp = &sp->lsis[i];
+ if (*timep >= lp->ls_trans) {
+ if (*timep == lp->ls_trans)
+ hit = ((i == 0 && lp->ls_corr > 0) ||
+ lp->ls_corr > sp->lsis[i - 1].ls_corr);
+ corr = lp->ls_corr;
+ break;
+ }
+ }
+ days = *timep / SECSPERDAY;
+ rem = *timep % SECSPERDAY;
+#ifdef mc68k
+ if (*timep == 0x80000000) {
+ /*
+ ** A 3B1 muffs the division on the most negative number.
+ */
+ days = -24855;
+ rem = -11648;
+ }
+#endif /* mc68k */
+ rem += (offset - corr);
+ while (rem < 0) {
+ rem += SECSPERDAY;
+ --days;
+ }
+ while (rem >= SECSPERDAY) {
+ rem -= SECSPERDAY;
+ ++days;
+ }
+ tmp->tm_hour = (int) (rem / SECSPERHOUR);
+ rem = rem % SECSPERHOUR;
+ tmp->tm_min = (int) (rem / SECSPERMIN);
+ tmp->tm_sec = (int) (rem % SECSPERMIN);
+ if (hit)
+ /*
+ ** A positive leap second requires a special
+ ** representation. This uses "... ??:59:60".
+ */
+ ++(tmp->tm_sec);
+ tmp->tm_wday = (int) ((EPOCH_WDAY + days) % DAYSPERWEEK);
+ if (tmp->tm_wday < 0)
+ tmp->tm_wday += DAYSPERWEEK;
+ y = EPOCH_YEAR;
+ if (days >= 0)
+ for ( ; ; ) {
+ yleap = isleap(y);
+ if (days < (long) year_lengths[yleap])
+ break;
+ ++y;
+ days = days - (long) year_lengths[yleap];
+ }
+ else do {
+ --y;
+ yleap = isleap(y);
+ days = days + (long) year_lengths[yleap];
+ } while (days < 0);
+ tmp->tm_year = y - TM_YEAR_BASE;
+ tmp->tm_yday = (int) days;
+ ip = mon_lengths[yleap];
+ for (tmp->tm_mon = 0; days >= (long) ip[tmp->tm_mon]; ++(tmp->tm_mon))
+ days = days - (long) ip[tmp->tm_mon];
+ tmp->tm_mday = (int) (days + 1);
+ tmp->tm_isdst = 0;
+ tmp->tm_gmtoff = offset;
+}
+
+/*
+** A la X3J11
+*/
+
+char *
+asctime(timeptr)
+register const struct tm * timeptr;
+{
+ static const char wday_name[DAYSPERWEEK][3] = {
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+ };
+ static const char mon_name[MONSPERYEAR][3] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+ };
+ static char result[26];
+
+ (void) sprintf(result, "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %d\n",
+ wday_name[timeptr->tm_wday],
+ mon_name[timeptr->tm_mon],
+ timeptr->tm_mday, timeptr->tm_hour,
+ timeptr->tm_min, timeptr->tm_sec,
+ TM_YEAR_BASE + timeptr->tm_year);
+ return result;
+}
+
+char *
+ctime(timep)
+const time_t * const timep;
+{
+ return asctime(localtime(timep));
+}
+
+/*
+** Adapted from code provided by Robert Elz, who writes:
+** The "best" way to do mktime I think is based on an idea of Bob
+** Kridle's (so its said...) from a long time ago. (mtxinu!kridle now).
+** It does a binary search of the time_t space. Since time_t's are
+** just 32 bits, its a max of 32 iterations (even at 64 bits it
+** would still be very reasonable).
+*/
+
+#ifndef WRONG
+#define WRONG (-1)
+#endif /* !defined WRONG */
+
+static void
+normalize(tensptr, unitsptr, base)
+int * const tensptr;
+int * const unitsptr;
+const int base;
+{
+ if (*unitsptr >= base) {
+ *tensptr += *unitsptr / base;
+ *unitsptr %= base;
+ } else if (*unitsptr < 0) {
+ --*tensptr;
+ *unitsptr += base;
+ if (*unitsptr < 0) {
+ *tensptr -= 1 + (-*unitsptr) / base;
+ *unitsptr = base - (-*unitsptr) % base;
+ }
+ }
+}
+
+static int
+tmcomp(atmp, btmp)
+register const struct tm * const atmp;
+register const struct tm * const btmp;
+{
+ register int result;
+
+ if ((result = (atmp->tm_year - btmp->tm_year)) == 0 &&
+ (result = (atmp->tm_mon - btmp->tm_mon)) == 0 &&
+ (result = (atmp->tm_mday - btmp->tm_mday)) == 0 &&
+ (result = (atmp->tm_hour - btmp->tm_hour)) == 0 &&
+ (result = (atmp->tm_min - btmp->tm_min)) == 0)
+ result = atmp->tm_sec - btmp->tm_sec;
+ return result;
+}
+
+static time_t
+time2(tmp, funcp, offset, okayp)
+struct tm * const tmp;
+void (* const funcp)();
+const long offset;
+int * const okayp;
+{
+ register const struct state * sp;
+ register int dir;
+ register int bits;
+ register int i, j ;
+ register int saved_seconds;
+ time_t newt;
+ time_t t;
+ struct tm yourtm, mytm;
+
+ *okayp = FALSE;
+ yourtm = *tmp;
+ if (yourtm.tm_sec >= SECSPERMIN + 2 || yourtm.tm_sec < 0)
+ normalize(&yourtm.tm_min, &yourtm.tm_sec, SECSPERMIN);
+ normalize(&yourtm.tm_hour, &yourtm.tm_min, MINSPERHOUR);
+ normalize(&yourtm.tm_mday, &yourtm.tm_hour, HOURSPERDAY);
+ normalize(&yourtm.tm_year, &yourtm.tm_mon, MONSPERYEAR);
+ while (yourtm.tm_mday <= 0) {
+ --yourtm.tm_year;
+ yourtm.tm_mday +=
+ year_lengths[isleap(yourtm.tm_year + TM_YEAR_BASE)];
+ }
+ for ( ; ; ) {
+ i = mon_lengths[isleap(yourtm.tm_year +
+ TM_YEAR_BASE)][yourtm.tm_mon];
+ if (yourtm.tm_mday <= i)
+ break;
+ yourtm.tm_mday -= i;
+ if (++yourtm.tm_mon >= MONSPERYEAR) {
+ yourtm.tm_mon = 0;
+ ++yourtm.tm_year;
+ }
+ }
+ saved_seconds = yourtm.tm_sec;
+ yourtm.tm_sec = 0;
+ /*
+ ** Calculate the number of magnitude bits in a time_t
+ ** (this works regardless of whether time_t is
+ ** signed or unsigned, though lint complains if unsigned).
+ */
+ for (bits = 0, t = 1; t > 0; ++bits, t <<= 1)
+ ;
+ /*
+ ** If time_t is signed, then 0 is the median value,
+ ** if time_t is unsigned, then 1 << bits is median.
+ */
+ t = (t < 0) ? 0 : ((time_t) 1 << bits);
+ for ( ; ; ) {
+ (*funcp)(&t, offset, &mytm);
+ dir = tmcomp(&mytm, &yourtm);
+ if (dir != 0) {
+ if (bits-- < 0)
+ return WRONG;
+ if (bits < 0)
+ --t;
+ else if (dir > 0)
+ t -= (time_t) 1 << bits;
+ else t += (time_t) 1 << bits;
+ continue;
+ }
+ if (yourtm.tm_isdst < 0 || mytm.tm_isdst == yourtm.tm_isdst)
+ break;
+ /*
+ ** Right time, wrong type.
+ ** Hunt for right time, right type.
+ ** It's okay to guess wrong since the guess
+ ** gets checked.
+ */
+ sp = (const struct state *)
+ ((funcp == localsub) ? lclptr : gmtptr);
+#ifdef ALL_STATE
+ if (sp == NULL)
+ return WRONG;
+#endif /* defined ALL_STATE */
+ for (i = 0; i < sp->typecnt; ++i) {
+ if (sp->ttis[i].tt_isdst != yourtm.tm_isdst)
+ continue;
+ for (j = 0; j < sp->typecnt; ++j) {
+ if (sp->ttis[j].tt_isdst == yourtm.tm_isdst)
+ continue;
+ newt = t + sp->ttis[j].tt_gmtoff -
+ sp->ttis[i].tt_gmtoff;
+ (*funcp)(&newt, offset, &mytm);
+ if (tmcomp(&mytm, &yourtm) != 0)
+ continue;
+ if (mytm.tm_isdst != yourtm.tm_isdst)
+ continue;
+ /*
+ ** We have a match.
+ */
+ t = newt;
+ goto label;
+ }
+ }
+ return WRONG;
+ }
+label:
+ t += saved_seconds;
+ (*funcp)(&t, offset, tmp);
+ *okayp = TRUE;
+ return t;
+}
+
+static time_t
+time1(tmp, funcp, offset)
+struct tm * const tmp;
+void (* const funcp)();
+const long offset;
+{
+ register time_t t;
+ register const struct state * sp;
+ register int samei, otheri;
+ int okay;
+
+ if (tmp->tm_isdst > 1)
+ tmp->tm_isdst = 1;
+ t = time2(tmp, funcp, offset, &okay);
+ if (okay || tmp->tm_isdst < 0)
+ return t;
+ /*
+ ** We're supposed to assume that somebody took a time of one type
+ ** and did some math on it that yielded a "struct tm" that's bad.
+ ** We try to divine the type they started from and adjust to the
+ ** type they need.
+ */
+ sp = (const struct state *) ((funcp == localsub) ? lclptr : gmtptr);
+#ifdef ALL_STATE
+ if (sp == NULL)
+ return WRONG;
+#endif /* defined ALL_STATE */
+ for (samei = 0; samei < sp->typecnt; ++samei) {
+ if (sp->ttis[samei].tt_isdst != tmp->tm_isdst)
+ continue;
+ for (otheri = 0; otheri < sp->typecnt; ++otheri) {
+ if (sp->ttis[otheri].tt_isdst == tmp->tm_isdst)
+ continue;
+ tmp->tm_sec += sp->ttis[otheri].tt_gmtoff -
+ sp->ttis[samei].tt_gmtoff;
+ tmp->tm_isdst = !tmp->tm_isdst;
+ t = time2(tmp, funcp, offset, &okay);
+ if (okay)
+ return t;
+ tmp->tm_sec -= sp->ttis[otheri].tt_gmtoff -
+ sp->ttis[samei].tt_gmtoff;
+ tmp->tm_isdst = !tmp->tm_isdst;
+ }
+ }
+ return WRONG;
+}
+
+time_t
+mktime(tmp)
+struct tm * const tmp;
+{
+ return time1(tmp, localsub, 0L);
+}
+
+/* Call tzset() if necessary */
+void _tzset(void)
+{
+ if (!lcl_is_set) tzset();
+}
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/devices.c amiga/fsf/emacs18/amiga/unix/src/devices.c
--- baseline/fsf/emacs18/amiga/unix/src/devices.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/devices.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,33 @@
+#include "amiga.h"
+#include "devices.h"
+
+struct IORequest *_device_open(char *name, ULONG unit, ULONG flags,
+ APTR data, ULONG data_len, int req_size)
+{
+ struct MsgPort *port;
+ struct IORequest *ioreq;
+
+ if ((port = CreateMsgPort()) && (ioreq = CreateIORequest(port, req_size)))
+ {
+ if (data)
+ {
+ struct IOStdReq *io2 = (struct IOStdReq *)ioreq;
+ io2->io_Data = data;
+ io2->io_Length = data_len;
+ }
+ if (OpenDevice(name, unit, ioreq, flags) == 0) return ioreq;
+ }
+ if (ioreq) DeleteIORequest(ioreq);
+ if (port) DeletePort(port);
+ return 0;
+}
+
+void _device_close(struct IORequest *ioreq)
+{
+ if (ioreq)
+ {
+ CloseDevice(ioreq);
+ DeletePort(ioreq->io_Message.mn_ReplyPort);
+ DeleteIORequest(ioreq);
+ }
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/dir.c amiga/fsf/emacs18/amiga/unix/src/dir.c
--- baseline/fsf/emacs18/amiga/unix/src/dir.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/dir.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,177 @@
+#include "amiga.h"
+#include "dir_data.h"
+#include <string.h>
+
+/* opendir/readdir/etc ... emulation w/ stat support hack */
+
+static void free_entries(iDIR *info)
+{
+ struct idirent *scan = info->files;
+
+ while (scan)
+ {
+ struct idirent *next = scan->next;
+
+ free(scan);
+ scan = next;
+ }
+}
+
+static int gobble_dir(DIR *dir)
+{
+ iDIR *info = (iDIR *)dir->dd_buf;
+ long ioerr;
+ struct idirent **last = &info->files;
+ struct FileLock *dirlock;
+
+ free_entries(info);
+ last_dir = 0;
+ info->files = 0;
+ dir->dd_loc = 0;
+ /* Find a value for st_dev of stat() calls */
+ dirlock = BADDR(dir->dd_fd);
+ info->task = dirlock->fl_Task;
+ while (ExNext(dir->dd_fd, &info->fib))
+ {
+ u_short namlen = strlen(info->fib.fib_FileName);
+ u_short reclen = namlen + 1 + offsetof(struct idirent, entry.d_name);
+ struct idirent *newentry = (struct idirent *)malloc(reclen);
+ struct dirent *entry;
+
+ if (!newentry)
+ {
+ errno = ENOMEM;
+ return 0;
+ }
+ newentry->next = 0;
+ *last = newentry;
+ last = &newentry->next;
+
+ newentry->numblocks = info->fib.fib_NumBlocks;
+ newentry->size = info->fib.fib_Size;
+ newentry->date = info->fib.fib_Date;
+ newentry->type = info->fib.fib_DirEntryType;
+ newentry->protection = info->fib.fib_Protection;
+
+ entry = &newentry->entry;
+ entry->d_reclen = reclen;
+ entry->d_namlen = namlen;
+ entry->d_off = dir->dd_loc++;
+ strcpy(entry->d_name, info->fib.fib_FileName);
+ entry->d_ino = info->fib.fib_DiskKey;
+ }
+ info->pos = info->files;
+ dir->dd_loc = 0;
+ ioerr = IoErr();
+ if (ioerr == ERROR_NO_MORE_ENTRIES) return 1;
+
+ errno = convert_oserr(ioerr);
+ return 0;
+}
+
+DIR *opendir(char *dirname)
+{
+ DIR *new = (DIR *)malloc(sizeof *new);
+ iDIR *info = (iDIR *)malloc(sizeof *info);
+ char *dircopy = malloc(strlen(dirname) + 1);
+
+ chkabort();
+ if (new && dircopy && info)
+ {
+ new->dd_buf = (char *)info;
+ new->dd_size = sizeof *info;
+
+ info->files = info->pos = 0;
+ info->seeked = 0;
+ info->dirname = dircopy;
+ strcpy(dircopy, dirname);
+ info->cdir = _get_cd();
+
+ if ((new->dd_fd = Lock(dirname, ACCESS_READ)) &&
+ Examine(new->dd_fd, &info->fib))
+ {
+ if (gobble_dir(new)) return new;
+ }
+ else errno = convert_oserr(IoErr());
+ closedir(new);
+ return 0;
+ }
+
+ errno = ENOMEM;
+ if (new) free(new);
+ if (dircopy) free(dircopy);
+ if (info) free(info);
+
+ return 0;
+}
+
+void closedir(DIR *dir)
+{
+ iDIR *info = (iDIR *)dir->dd_buf;
+
+ chkabort();
+ last_dir = 0;
+ free_entries(info);
+ free(info->dirname);
+ if (dir->dd_fd) UnLock(dir->dd_fd);
+ free(dir->dd_buf);
+ free(dir);
+}
+
+struct dirent *readdir(DIR *dir)
+{
+ iDIR *info = (iDIR *)dir->dd_buf;
+ struct dirent *entry = 0;
+
+ chkabort();
+ if (info->seeked)
+ {
+ long cloc = 0;
+ struct idirent *pos;
+
+ pos = info->files;
+
+ while (cloc < dir->dd_loc && pos)
+ {
+ cloc++; pos = pos->next;
+ }
+ /*if (cloc != dir->dd_loc) error ...
+ This doesn't seem to be defined very precisely */
+ info->pos = pos;
+ info->seeked = 0;
+ }
+ if (info->pos)
+ {
+ entry = &info->pos->entry;
+
+ last_dir = dir;
+ last_entry = info->pos;
+
+ info->pos = info->pos->next;
+ dir->dd_loc++;
+ }
+ return entry;
+}
+
+long telldir(DIR *dir)
+{
+ chkabort();
+ return dir->dd_loc;
+}
+
+void seekdir(DIR *dir, long loc)
+{
+ iDIR *info = (iDIR *)dir->dd_buf;
+
+ chkabort();
+ info->seeked = 1;
+ dir->dd_loc = loc;
+}
+
+#if 0
+void rewwinddir(DIR *dir)
+{
+ chkabort();
+ gobble_dir(dir);
+}
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/dir_data.c amiga/fsf/emacs18/amiga/unix/src/dir_data.c
--- baseline/fsf/emacs18/amiga/unix/src/dir_data.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/dir_data.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,15 @@
+#include "amiga.h"
+#include "dir_data.h"
+
+DIR *last_dir;
+struct idirent *last_entry;
+
+BPTR _get_cd(void)
+{
+ BPTR dir = CurrentDir(0);
+
+ CurrentDir(dir);
+
+ return dir;
+}
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/dir_data.h amiga/fsf/emacs18/amiga/unix/src/dir_data.h
--- baseline/fsf/emacs18/amiga/unix/src/dir_data.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/dir_data.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,33 @@
+#ifndef DIR_DATA_H
+#define DIR_DATA_H
+
+#include <sys/dir.h>
+
+typedef struct
+{
+ char *dirname;
+ BPTR cdir;
+ struct FileInfoBlock fib;
+ struct idirent *files, *pos;
+ int seeked;
+ struct MsgPort *task; /* Used to fake a value for st_dev */
+} iDIR;
+
+struct idirent
+{
+ struct idirent *next;
+ /* Info needed for stat */
+ long numblocks;
+ long size;
+ struct DateStamp date;
+ long type;
+ long protection;
+ struct dirent entry;
+};
+
+extern DIR *last_dir;
+extern struct idirent *last_entry;
+
+BPTR _get_cd(void);
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/error.c amiga/fsf/emacs18/amiga/unix/src/error.c
--- baseline/fsf/emacs18/amiga/unix/src/error.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/error.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,47 @@
+#include "amiga.h"
+
+int errno;
+
+int convert_oserr(int ioerr)
+{
+ extern int _OSERR;
+
+ _OSERR = ioerr;
+ switch (ioerr)
+ {
+ case 0: return 0;
+ case ERROR_NO_FREE_STORE: return ENOMEM;
+ case ERROR_TASK_TABLE_FULL: return EAGAIN;
+ case ERROR_BAD_TEMPLATE: case ERROR_REQUIRED_ARG_MISSING: case ERROR_BAD_NUMBER:
+ case ERROR_KEY_NEEDS_ARG: case ERROR_TOO_MANY_ARGS:
+ case ERROR_UNMATCHED_QUOTES: return EINVAL;
+ case ERROR_LINE_TOO_LONG: return E2BIG;
+ case ERROR_FILE_NOT_OBJECT: return ENOEXEC;
+ case ERROR_OBJECT_IN_USE: return EBUSY;
+ case ERROR_OBJECT_EXISTS: return EEXIST;
+ case ERROR_DIR_NOT_FOUND: return ENOENT;
+ case ERROR_OBJECT_NOT_FOUND: return ENOENT;
+ case ERROR_BAD_STREAM_NAME: return EINVAL;
+ case ERROR_OBJECT_TOO_LARGE: return E2BIG;
+ case ERROR_ACTION_NOT_KNOWN: return EINVAL;
+ case ERROR_INVALID_COMPONENT_NAME: return ENAMETOOLONG;
+ case ERROR_INVALID_LOCK: return EINVAL;
+ case ERROR_OBJECT_WRONG_TYPE: return EINVAL;
+ case ERROR_DISK_WRITE_PROTECTED: return EROFS;
+ case ERROR_RENAME_ACROSS_DEVICES: return EXDEV;
+ case ERROR_DIRECTORY_NOT_EMPTY: return ENOTEMPTY;
+ case ERROR_TOO_MANY_LEVELS: return ELOOP;
+ case ERROR_DEVICE_NOT_MOUNTED: return ENODEV;
+ case ERROR_SEEK_ERROR: return EINVAL;
+ case ERROR_DISK_FULL: return ENOSPC;
+ case ERROR_DELETE_PROTECTED: return EACCES;
+ case ERROR_WRITE_PROTECTED: return EACCES;
+ case ERROR_READ_PROTECTED: return EACCES;
+ default: return EOSERR;
+ }
+}
+
+void _seterr(void)
+{
+ errno = convert_oserr(IoErr());
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/error_msg.c amiga/fsf/emacs18/amiga/unix/src/error_msg.c
--- baseline/fsf/emacs18/amiga/unix/src/error_msg.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/error_msg.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,48 @@
+#include "amiga.h"
+
+/* Gross hack because EOSERR is -1. */
+static char *sys_amiga_error = "amiga specific error";
+char *sys_errlist[] =
+ {
+ "Unknown error",
+ "not owner",
+ "no such file or directory",
+ "no such process",
+ "interrupted system call",
+ "i/o error",
+ "no such device or address",
+ "argument list too long",
+ "exec format error",
+ "bad file number",
+ "no child process",
+ "no more processes",
+ "not enough memory",
+ "permission denied",
+ "bad address",
+ "block device required",
+ "mount devices busy",
+ "file exists",
+ "cross-device link",
+ "no such device",
+ "not a directory",
+ "is a directory",
+ "invalid argument",
+ "file table overflow",
+ "too many open files",
+ "not a typewriter",
+ "text file busy",
+ "file too big",
+ "no space left on device",
+ "illegal seek",
+ "read-only file system",
+ "too many links",
+ "broken pipe",
+ "math argument",
+ "result too large",
+ "I/O stream empty",
+ "file name too long",
+ "directory not empty",
+ "too many soft links (loop?)"
+};
+
+int sys_nerr = ELOOP;
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/exec.c amiga/fsf/emacs18/amiga/unix/src/exec.c
--- baseline/fsf/emacs18/amiga/unix/src/exec.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/exec.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,143 @@
+#include "amiga.h"
+#include "processes.h"
+#include <amiga/ioctl.h>
+#include <exec/memory.h>
+#include <dos/dosextens.h>
+#include <dos/dostags.h>
+#include <string.h>
+
+int eexec(char *program, char **argv, int input, int output, int error,
+ char *dir, int stacksize)
+/* input = -1 -> inherit Input()
+ output = -1 -> inherit Output()
+ error = -1 -> inherit pr_CES
+ error = -2 -> stderr = stdout */
+{
+ int index, comsize, close_input, close_output, close_error;
+ char *combuf, *bp;
+ BPTR in, out, err, dirlock;
+ int _pseudo_close(int fd);
+
+ comsize = 256;
+ combuf = malloc(comsize);
+
+ if (input == -1)
+ {
+ in = Input();
+ close_input = FALSE;
+ }
+ else
+ {
+ if (ioctl(input, _AMIGA_GET_FH, &in) == -1) in = 0;
+ close_input = TRUE;
+ _pseudo_close(input);
+ }
+
+ if (output == -1)
+ {
+ out = Output();
+ close_output = FALSE;
+ }
+ else if (input == output)
+ {
+ out = in;
+ close_output = FALSE;
+ }
+ else
+ {
+ if (ioctl(output, _AMIGA_GET_FH, &out) == -1) out = 0;
+ close_output = out != in;
+ _pseudo_close(output);
+ }
+
+ if (error == -1)
+ {
+ err = _us->pr_CES;
+ close_error = FALSE;
+ }
+ else if (error == -2)
+ {
+ err = out;
+ close_error = FALSE;
+ }
+ else
+ {
+ if (ioctl(error, _AMIGA_GET_FH, &err) == -1) err = 0;
+ close_error = err != out && err != in;
+ _pseudo_close(error);
+ }
+
+ /* pr_CES is not always defined */
+ if (in && out && (err || error == -1))
+ if (combuf)
+ {
+ bp = combuf;
+ for (index = 0; argv[index] != 0; index++)
+ {
+ /* Use program as argv[0]. This loses some information, but ... */
+ char *arg = index == 0 ? program : argv[index];
+ char *s;
+ int len;
+
+ len = 3;
+ s = arg;
+ while (*s)
+ {
+ len++;
+ if (*s == '*' || *s == '"' || *s == '\n') len++;
+ s++;
+ }
+ if (bp + len + 1 >= combuf + comsize)
+ {
+ char *newbuf;
+
+ comsize += comsize + len;
+ newbuf = realloc(combuf, comsize);
+ if (!newbuf) { errno = ENOMEM; goto error; }
+ bp = newbuf + (bp - combuf);
+ combuf = newbuf;
+ }
+ *bp++ = ' ';
+ *bp++ = '"';
+ s = arg;
+ while (*s)
+ {
+ if (*s == '"' || *s == '*') *bp++ = '*';
+ else if (*s == '\n') *bp++ = '+';
+ *bp++ = *s++;
+ }
+ *bp++ = '"';
+ }
+ *bp = '\0';
+ if (dir) dirlock = Lock(dir, SHARED_LOCK);
+ else dirlock = 0;
+
+ if (dirlock || !dir)
+ {
+ int pid = _start_process(combuf, in, close_input, out, close_output,
+ err, close_error, dirlock, stacksize);
+
+ if (pid != -1)
+ {
+ free(combuf);
+ return pid;
+ }
+ }
+ else errno = convert_oserr(IoErr());
+ if (dirlock) UnLock(dirlock);
+ }
+ else errno = ENOMEM;
+
+ error:
+ if (in && close_input) Close(in);
+ if (out && close_output) Close(out);
+ if (err && close_error) Close(err);
+ if (combuf) free(combuf);
+ return -1;
+}
+
+int exec(char *program, char **argv, int input, int output,
+ char *dir, int stacksize)
+{
+ return eexec(program, argv, input, output, -1, dir, stacksize);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fchmod.c amiga/fsf/emacs18/amiga/unix/src/fchmod.c
--- baseline/fsf/emacs18/amiga/unix/src/fchmod.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/fchmod.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,10 @@
+#include "amiga.h"
+#include <amiga/ioctl.h>
+
+int fchmod(int fd, int mode)
+{
+ long amode = _make_protection(mode);
+
+ chkabort();
+ return ioctl(fd, _AMIGA_SETPROTECTION, &amode);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fcntl.c amiga/fsf/emacs18/amiga/unix/src/fcntl.c
--- baseline/fsf/emacs18/amiga/unix/src/fcntl.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/fcntl.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,43 @@
+#include "amiga.h"
+#include "files.h"
+#include <fcntl.h>
+#include <sys/filio.h>
+#include <stdarg.h>
+
+/* Flags that can be changed with fcntl */
+#define FCNTL_FLAGS (O_NDELAY | O_APPEND)
+
+int fcntl(int fd, int cmd, ...)
+{
+ struct fileinfo *fi;
+ va_list args;
+ int arg;
+
+ chkabort();
+ va_start(args, cmd);
+ arg = va_arg(args, int);
+ va_end(args);
+
+ if (fi = _find_fd(fd))
+ {
+ switch (cmd)
+ {
+ default: errno = EINVAL; break;
+ case F_GETFL: return fi->flags & FCNTL_FLAGS;
+ case F_SETFL:
+ {
+ int oldfl = fi->flags;
+
+ fi->flags = (fi->flags & ~FCNTL_FLAGS) | (arg & FCNTL_FLAGS);
+ if ((oldfl & O_NDELAY) != (fi->flags & O_NDELAY))
+ {
+ int ndelay = fi->flags & O_NDELAY;
+
+ return fi->ioctl(fi->userinfo, FIONBIO, &ndelay);
+ }
+ return 0;
+ }
+ }
+ }
+ return -1;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fibstat.c amiga/fsf/emacs18/amiga/unix/src/fibstat.c
--- baseline/fsf/emacs18/amiga/unix/src/fibstat.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/fibstat.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,90 @@
+#include "amiga.h"
+#include "fibstat.h"
+#include "timeconvert.h"
+#include <fcntl.h>
+#include <time.h>
+#include <sys/stat.h>
+#include <utility/tagitem.h>
+
+char _temp_fname[FNAMESIZE];
+
+void _lfibstat(char *name, struct FileInfoBlock *fib, struct MsgPort *task,
+ int isroot, struct stat *sbuf)
+{
+ long protection = fib->fib_Protection;
+
+ sbuf->st_dev = (long)task;
+ sbuf->st_rdev = 0;
+ sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
+ sbuf->st_blksize = 512;
+#ifdef PRETEND_LINKED
+ /* This forces programs (tar) to consider potential hard links */
+ sbuf->st_nlink = 2;
+#else
+ sbuf->st_nlink = 1;
+#endif
+ sbuf->st_blocks = fib->fib_NumBlocks;
+ /* Give directories an arbitrary size */
+ if (fib->fib_Size == 0 && fib->fib_DirEntryType > 0) sbuf->st_size = 2048;
+ else sbuf->st_size = fib->fib_Size;
+ sbuf->st_ino = fib->fib_DiskKey;
+ sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = _amiga2gmt(&fib->fib_Date);
+
+ switch (fib->fib_DirEntryType)
+ {
+ case ST_SOFTLINK:
+ {
+ int len;
+
+ if (name && (len = readlink(name, _temp_fname, FNAMESIZE - 1)) > 0)
+ sbuf->st_size = len;
+ else sbuf->st_size = 256; /* A random safish value */
+ sbuf->st_mode = S_IFLNK;
+ break;
+ }
+ case ST_PIPEFILE: sbuf->st_mode = S_IFIFO; break;
+ /* If Examine wasn't braindead this would be the right test */
+ case ST_ROOT: sbuf->st_mode = S_IFDIR; protection = 0; break;
+ case ST_FILE: /* Try & detect special files (eg windows) */
+ if (fib->fib_DiskKey == 0 && !fib->fib_FileName[0])
+ sbuf->st_mode = S_IFCHR;
+ else sbuf->st_mode = S_IFREG;
+ break;
+ default: sbuf->st_mode = fib->fib_DirEntryType > 0 ? S_IFDIR : S_IFREG; break;
+ }
+ /* Examine is braindead. You can't tell if you've examined a root directory
+ (for which the protection flags are invalid) or not. */
+ if (isroot) protection = 0;
+
+ sbuf->st_mode |= _make_mode(protection);
+}
+
+int _fibstat(char *name, struct stat *sbuf)
+{
+ int ret;
+ struct FileInfoBlock *fib;
+ BPTR lock = 0;
+
+ if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
+ (lock = Lock(name, ACCESS_READ)) &&
+ Examine(lock, fib))
+ {
+ BPTR parent = ParentDir(lock);
+ int isroot = !parent;
+ struct FileLock *flock = BADDR(lock);
+
+ if (parent) UnLock(parent);
+ _lfibstat(name, fib, flock->fl_Task, isroot, sbuf);
+ ret = 0;
+ }
+ else
+ {
+ ret = -1;
+ errno = convert_oserr(IoErr());
+ }
+ if (lock) UnLock(lock);
+ if (fib) FreeDosObject(DOS_FIB, fib);
+ return ret;
+}
+
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fibstat.h amiga/fsf/emacs18/amiga/unix/src/fibstat.h
--- baseline/fsf/emacs18/amiga/unix/src/fibstat.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/fibstat.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,12 @@
+#ifndef FIBSTAT_H
+
+#define FNAMESIZE 256
+
+extern char _temp_fname[FNAMESIZE];
+
+void _lfibstat(char *name, struct FileInfoBlock *fib, struct MsgPort *task,
+ int isroot, struct stat *sbuf);
+
+int _fibstat(char *name, struct stat *sbuf);
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fifo.h amiga/fsf/emacs18/amiga/unix/src/fifo.h
--- baseline/fsf/emacs18/amiga/unix/src/fifo.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/fifo.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,41 @@
+
+/*
+ * FIFO.H
+ *
+ * PUBLIC FIFO STRUCTURES AND DEFINES
+ */
+
+#ifndef LIBRARIES_FIFO_H
+#define LIBRARIES_FIFO_H
+
+#define FIFONAME "fifo.library"
+
+#define FIFOF_READ 0x00000100L /* intend to read from fifo */
+#define FIFOF_WRITE 0x00000200L /* intend to write to fifo */
+#define FIFOF_RESERVED 0xFFFF0000L /* reserved for internal use */
+#define FIFOF_NORMAL 0x00000400L /* request blocking/sig support*/
+#define FIFOF_NBIO 0x00000800L /* non-blocking IO */
+
+#define FIFOF_KEEPIFD 0x00002000L /* keep fifo alive if data pending */
+#define FIFOF_EOF 0x00004000L /* EOF on close */
+#define FIFOF_RREQUIRED 0x00008000L /* reader required to exist */
+
+#define FREQ_RPEND 1
+#define FREQ_WAVAIL 2
+#define FREQ_ABORT 3
+
+typedef void *FifoHan; /* returned by OpenFifo() */
+
+#ifndef IN_LIBRARY
+
+FifoHan OpenFifo(char *, long, long);
+void CloseFifo(FifoHan, long);
+long ReadFifo(FifoHan, char **, long);
+long WriteFifo(FifoHan, char *, long);
+void RequestFifo(FifoHan, struct Message *, long);
+long BufSizeFifo(FifoHan);
+
+#endif
+
+#endif
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fifo_pragmas.h amiga/fsf/emacs18/amiga/unix/src/fifo_pragmas.h
--- baseline/fsf/emacs18/amiga/unix/src/fifo_pragmas.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/fifo_pragmas.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,7 @@
+/* "fifo.library"*/
+#pragma libcall _FifoBase OpenFifo 1E 81003
+#pragma libcall _FifoBase CloseFifo 24 1002
+#pragma libcall _FifoBase ReadFifo 2A 81003
+#pragma libcall _FifoBase WriteFifo 30 81003
+#pragma libcall _FifoBase RequestFifo 36 81003
+#pragma libcall _FifoBase BufSizeFifo 3C 001
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fifofd.c amiga/fsf/emacs18/amiga/unix/src/fifofd.c
--- baseline/fsf/emacs18/amiga/unix/src/fifofd.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/fifofd.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,25 @@
+#include "amiga.h"
+#include "files.h"
+#include "fifofd.h"
+#include <time.h>
+
+struct Library *_FifoBase;
+int _fifo_sig = -1;
+long _fifo_base;
+long _fifo_offset;
+int _fifo_ok;
+
+void _init_fifo(void)
+{
+ _fifo_base = (int)_us ^ _startup_time * 65537;
+ _fifo_offset = 0;
+ _FifoBase = OpenLibrary("fifo.library", 0);
+ _fifo_sig = AllocSignal(-1);
+ _fifo_ok = _FifoBase != 0 && _fifo_sig >= 0;
+}
+
+void _cleanup_fifo(void)
+{
+ if (_fifo_sig >= 0) FreeSignal(_fifo_sig);
+ if (_FifoBase) CloseLibrary(_FifoBase);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fifofd.h amiga/fsf/emacs18/amiga/unix/src/fifofd.h
--- baseline/fsf/emacs18/amiga/unix/src/fifofd.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/fifofd.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,31 @@
+#ifndef FIFO_H
+#define FIFO_H
+
+#include "fifo.h"
+#include "fifo_pragmas.h"
+
+#define FIFO_BUFSIZE 1024
+#define FIFO_NAMELEN 32
+
+struct fifoinfo
+{
+ char name[FIFO_NAMELEN];
+ void *rfifo, *wfifo;
+ long maxsend, skip;
+ int flags;
+ struct Message *rmsg, *wmsg;
+ struct MsgPort *reply;
+};
+
+#define FIFO_MASTER 0x8000
+
+extern struct Library *_FifoBase;
+extern int _fifo_sig;
+extern long _fifo_base;
+extern long _fifo_offset;
+extern int _fifo_ok;
+
+void _init_fifo(void);
+void _cleanup_fifo(void);
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/files.c amiga/fsf/emacs18/amiga/unix/src/files.c
--- baseline/fsf/emacs18/amiga/unix/src/files.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/files.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,74 @@
+#include "amiga.h"
+#include "files.h"
+#include <string.h>
+
+/* Unix low-level IO emulation */
+/* --------------------------- */
+
+/* First, fd definition & allocation */
+
+static struct fileinfo *files;
+static int max_files;
+#define FILE_STEP 10 /* Nb of file descriptors to allocate at once */
+
+int _alloc_fd(void *userinfo, int flags,
+ ULONG (*__regargs select_start)(void *userinfo, int rd, int wr),
+ void (*__regargs select_poll)(void *userinfo, int *rd, int *wr),
+ int (*__regargs read)(void *userinfo, void *buffer, unsigned int length),
+ int (*__regargs write)(void *userinfo, void *buffer, unsigned int length),
+ int (*__regargs lseek)(void *userinfo, long rpos, int mode),
+ int (*__regargs close)(void *userinfo, int internal),
+ int (*__regargs ioctl)(void *userinfo, int request, void *data)
+)
+{
+ int fd;
+
+ for (fd = 0; fd < max_files; fd++)
+ if (!files[fd].userinfo)
+ {
+ files[fd].userinfo = (void *)1;
+ break;
+ }
+ if (fd == max_files)
+ {
+ struct fileinfo *newfiles;
+ int i;
+
+ /* Increase files array by FILE_STEP */
+ max_files += FILE_STEP;
+ newfiles = (struct fileinfo *)malloc(max_files * sizeof(struct fileinfo));
+ if (!newfiles)
+ {
+ errno = ENOMEM;
+ return -1;
+ }
+ memcpy(newfiles, files, (max_files - FILE_STEP) * sizeof(struct fileinfo));
+ if (files) free(files);
+ files = newfiles;
+ for (i = max_files - FILE_STEP; i < max_files; i++) files[i].userinfo = 0;
+ }
+ files[fd].userinfo = userinfo;
+ files[fd].flags = flags;
+ files[fd].select_start = select_start;
+ files[fd].select_poll = select_poll;
+ files[fd].read = read;
+ files[fd].write = write;
+ files[fd].lseek = lseek;
+ files[fd].close = close;
+ files[fd].ioctl = ioctl;
+ return fd;
+}
+
+void _free_fd(int fd)
+{
+ if (0 <= fd && fd < max_files) files[fd].userinfo = 0;
+}
+
+struct fileinfo *_find_fd(int fd)
+{
+ if (0 <= fd && fd < max_files && files[fd].userinfo) return &files[fd];
+ errno = EBADF;
+ return 0;
+}
+
+int _last_fd(void) { return max_files; }
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fstat.c amiga/fsf/emacs18/amiga/unix/src/fstat.c
--- baseline/fsf/emacs18/amiga/unix/src/fstat.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/fstat.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,52 @@
+#include "amiga.h"
+#include "fibstat.h"
+#include <dos/dosextens.h>
+#include <utility/tagitem.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <amiga/ioctl.h>
+
+int fstat(int fd, struct stat *sbuf)
+{
+ BPTR fh;
+ struct FileInfoBlock *fib;
+ int ret;
+
+ chkabort();
+ if (ioctl(fd, _AMIGA_GET_FH, &fh) == -1) return -1;
+ if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) && ExamineFH(fh, fib))
+ {
+ struct FileHandle *handle = BADDR(fh);
+
+ _lfibstat(NULL, fib, handle->fh_Type, 0, sbuf);
+ ret = 0;
+ }
+ else
+ {
+ int err = IoErr();
+
+ if (err == ERROR_ACTION_NOT_KNOWN)
+ /* Fake a stat result */
+ {
+ ret = 0;
+ sbuf->st_dev = (long)(((struct FileHandle *)BADDR(fh))->fh_Type);
+ sbuf->st_ino = 0;
+ sbuf->st_mode = 0777 | S_IFCHR;
+ sbuf->st_nlink = 1;
+ sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
+ sbuf->st_blksize = 512;
+ sbuf->st_blocks = 0;
+ sbuf->st_size = 0;
+ /* 1-Jan-1978 */
+ sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = 252460800;
+ }
+ else
+ {
+ ret = -1;
+ errno = convert_oserr(err);
+ }
+ }
+ if (fib) FreeDosObject(DOS_FIB, fib);
+ ioctl(fd, _AMIGA_FREE_FH, &fh);
+ return ret;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/ftruncate.c amiga/fsf/emacs18/amiga/unix/src/ftruncate.c
--- baseline/fsf/emacs18/amiga/unix/src/ftruncate.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/ftruncate.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,8 @@
+#include "amiga.h"
+#include <amiga/ioctl.h>
+
+int ftruncate(int fd, off_t length)
+{
+ chkabort();
+ return ioctl(fd, _AMIGA_TRUNCATE, &length);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/getenv.c amiga/fsf/emacs18/amiga/unix/src/getenv.c
--- baseline/fsf/emacs18/amiga/unix/src/getenv.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/getenv.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,31 @@
+#include "amiga.h"
+#include <string.h>
+
+/* This getenv removes trailing newlines & multiple calls don't
+ destroy results */
+char *getenv (const char *varname)
+{
+ char *return_string;
+ char buf[64];
+
+ chkabort();
+ if (varname && varname[0])
+ {
+ int len, size;
+
+ len = GetVar(varname, buf, 64, LV_VAR);
+ if (len >= 0)
+ {
+ size = IoErr();
+ return_string = malloc(size + 1);
+ if (!return_string) return 0;
+ if (size != len)
+ {
+ if (GetVar(varname, return_string, size + 1, LV_VAR) > 0)
+ return return_string;
+ }
+ else return strcpy(return_string, buf);
+ }
+ }
+ return 0;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/gethostname.c amiga/fsf/emacs18/amiga/unix/src/gethostname.c
--- baseline/fsf/emacs18/amiga/unix/src/gethostname.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/gethostname.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,11 @@
+#include "amiga.h"
+#include <unistd.h>
+
+extern char *_system_name;
+
+int gethostname(char *buf, int len)
+{
+ strncpy(buf, _system_name, len);
+
+ return 0;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/getpid.c amiga/fsf/emacs18/amiga/unix/src/getpid.c
--- baseline/fsf/emacs18/amiga/unix/src/getpid.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/getpid.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,8 @@
+#include "amiga.h"
+#include "processes.h"
+
+int getpid(void)
+{
+ chkabort();
+ return _our_pid;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/getwd.c amiga/fsf/emacs18/amiga/unix/src/getwd.c
--- baseline/fsf/emacs18/amiga/unix/src/getwd.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/getwd.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,8 @@
+#include "amiga.h"
+#include <sys/param.h>
+
+char *getwd (char *pathname)
+{
+ chkabort();
+ return getcwd(pathname, MAXPATHLEN);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/gid.c amiga/fsf/emacs18/amiga/unix/src/gid.c
--- baseline/fsf/emacs18/amiga/unix/src/gid.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/gid.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,4 @@
+#include "amiga.h"
+
+gid_t getgid(void) { return AMIGA_GID; }
+gid_t getegid(void) { return AMIGA_GID; }
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/grp.c amiga/fsf/emacs18/amiga/unix/src/grp.c
--- baseline/fsf/emacs18/amiga/unix/src/grp.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/grp.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,14 @@
+#include "amiga.h"
+#include <grp.h>
+
+static char *wheel_members[] = { "user", 0 };
+
+static struct group wheel = {
+ "wheel",
+ "",
+ AMIGA_GID,
+ wheel_members
+};
+
+struct group *getgrgid(gid_t gid) { return &wheel; }
+struct group *getgrnam(char *name) { return &wheel; }
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/index.c amiga/fsf/emacs18/amiga/unix/src/index.c
--- baseline/fsf/emacs18/amiga/unix/src/index.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/index.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,8 @@
+#include <string.h>
+
+#undef index
+
+char *index(char *str, int c)
+{
+ return strchr(str, c);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/ioctl.c amiga/fsf/emacs18/amiga/unix/src/ioctl.c
--- baseline/fsf/emacs18/amiga/unix/src/ioctl.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/ioctl.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,14 @@
+#include "amiga.h"
+#include "files.h"
+
+int ioctl(int fd, int request, caddr_t arg)
+{
+ struct fileinfo *fi;
+
+ chkabort();
+ if (fi = _find_fd(fd))
+ {
+ return fi->ioctl(fi->userinfo, request, arg);
+ }
+ return -1;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/isatty.c amiga/fsf/emacs18/amiga/unix/src/isatty.c
--- baseline/fsf/emacs18/amiga/unix/src/isatty.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/isatty.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,11 @@
+#include "amiga.h"
+#include <amiga/ioctl.h>
+
+int isatty(int fd)
+{
+ int istty;
+
+ chkabort();
+ if (ioctl(fd, _AMIGA_INTERACTIVE, &istty) != 0) return 0;
+ return istty;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/kill.c amiga/fsf/emacs18/amiga/unix/src/kill.c
--- baseline/fsf/emacs18/amiga/unix/src/kill.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/kill.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,74 @@
+#include "amiga.h"
+#include "signals.h"
+#include "processes.h"
+#include <exec/execbase.h>
+
+extern struct ExecBase *SysBase;
+
+static void break_list(struct List *tasks, BPTR fh)
+{
+ struct Process *p;
+
+ for (p = (struct Process *)tasks->lh_Head; p->pr_Task.tc_Node.ln_Succ;
+ p = (struct Process *)p->pr_Task.tc_Node.ln_Succ)
+ {
+ if (p->pr_Task.tc_Node.ln_Type == NT_PROCESS)
+ {
+ struct CommandLineInterface *cli = p->pr_CLI ? BADDR(p->pr_CLI) : 0;
+
+ if (p->pr_CIS == fh || p->pr_COS == fh || p->pr_CES == fh ||
+ cli && (cli->cli_StandardInput == fh || cli->cli_CurrentInput == fh ||
+ cli->cli_StandardOutput == fh || cli->cli_CurrentOutput == fh))
+ Signal(p, SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D);
+ }
+ }
+}
+
+static int magickill(BPTR fh, int signo)
+{
+ switch (signo)
+ {
+ case SIGINT: case SIGQUIT: case SIGKILL: case SIGHUP:
+ Forbid();
+ break_list(&SysBase->TaskReady, fh);
+ break_list(&SysBase->TaskWait, fh);
+ Permit();
+ return 0;
+ default: errno = EINVAL; return -1;
+ }
+}
+
+int kill(int pid, int signal)
+{
+ chkabort();
+ /* Our process list is now reasonably upto date */
+ if (pid < 0) pid = -pid; /* Consider that each process is a pg unto itself */
+ if (pid == _our_pid)
+ {
+ if (signal) _sig_dispatch(signal);
+ return 0;
+ }
+ else
+ {
+ struct process *entry;
+ int killrc;
+
+ entry = _find_pid(pid);
+ if (!entry || entry->status != alive)
+ {
+ errno = ESRCH;
+ return -1;
+ }
+ if (!signal) return 0;
+ killrc = magickill(entry->input, signal);
+ if (signal == SIGKILL)
+ {
+ /* Fake the kill from emacs point of view */
+ entry->status = exited;
+ entry->rc = SIGKILL;
+ _sig_dispatch(SIGCHLD);
+ return 0;
+ }
+ return killrc;
+ }
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/link.c amiga/fsf/emacs18/amiga/unix/src/link.c
--- baseline/fsf/emacs18/amiga/unix/src/link.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/link.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,16 @@
+#include "amiga.h"
+
+int link(char *from, char *to)
+{
+ BPTR from_lock = Lock(from, ACCESS_READ);
+
+ chkabort();
+ if (from_lock)
+ {
+ int ok = MakeLink(to, from_lock, 0);
+
+ UnLock(from_lock);
+ if (ok) return 0;
+ }
+ ERROR;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/lseek.c amiga/fsf/emacs18/amiga/unix/src/lseek.c
--- baseline/fsf/emacs18/amiga/unix/src/lseek.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/lseek.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,23 @@
+#include "amiga.h"
+#include "files.h"
+#include <fcntl.h>
+
+#undef lseek
+
+int __lseek(int fd, long rpos, int mode)
+{
+ struct fileinfo *fi;
+
+ chkabort();
+ if (fi = _find_fd(fd))
+ {
+ return fi->lseek(fi->userinfo, rpos, mode);
+ }
+ return -1;
+}
+
+int lseek(int fd, long rpos, int mode)
+{
+ return __lseek(fd, rpos, mode);
+}
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/message.c amiga/fsf/emacs18/amiga/unix/src/message.c
--- baseline/fsf/emacs18/amiga/unix/src/message.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/message.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,78 @@
+#include "amiga.h"
+#include <intuition/intuition.h>
+#include <stdarg.h>
+
+static struct EasyStruct msg = {
+ sizeof (struct EasyStruct),
+ 0,
+ NULL,
+ NULL,
+ "Ok",
+};
+
+static void message(char *format, long *args)
+/* Display a message which is as visible as possible (either to the console
+ or to as a requester).
+ Assume very little about library state */
+{
+ LONG msg_EasyRequestArgs(struct Window *window, struct EasyStruct *easyStruct,
+ ULONG *idcmpPtr, APTR args );
+#pragma libcall msg_IntuitionBase msg_EasyRequestArgs 24C BA9804
+ BPTR fh;
+ int close = FALSE;
+ extern char *_ProgramName;
+ extern struct WBStartup *_WBenchMsg;
+
+ fh = _us->pr_CES;
+ if (!fh)
+ if (!_WBenchMsg && (fh = Open("console:", MODE_OLDFILE))) close = TRUE;
+
+ if (fh)
+ {
+ VFPrintf(fh, "%s: ", &_ProgramName);
+ VFPrintf(fh, format, (long *)args);
+ FPutC(fh, '\n');
+ if (close) Close(fh);
+ }
+ else
+ {
+ struct Window *win = (struct Window *)_us->pr_WindowPtr;
+ if (win != (struct Window *)-1)
+ {
+ struct Library *msg_IntuitionBase = OpenLibrary("intuition.library", 37);
+
+ if (msg_IntuitionBase)
+ {
+ msg.es_Title = _ProgramName;
+ msg.es_TextFormat = format;
+ msg_EasyRequestArgs(win, &msg, 0, args);
+ CloseLibrary(msg_IntuitionBase);
+ }
+ }
+ }
+}
+
+void _message(char *format, ...)
+/* Display a message which is as visible as possible (either to the console
+ or to as a requester).
+ Assume very little about library state */
+{
+ va_list args;
+
+ va_start(args, format);
+ message(format, (long *)args);
+}
+
+void _fail(char *format, ...)
+/* Display a message which is as visible as possible (either to the console
+ or to as a requester).
+ Assume very little about library state.
+ Exit with error code RETURN_FAIL after that. */
+{
+ va_list args;
+
+ va_start(args, format);
+ message(format, (long *)args);
+
+ exit(RETURN_FAIL); /* The library should always be cleanup-able */
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/mkdir.c amiga/fsf/emacs18/amiga/unix/src/mkdir.c
--- baseline/fsf/emacs18/amiga/unix/src/mkdir.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/mkdir.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,20 @@
+#include "amiga.h"
+#include <stdarg.h>
+
+int mkdir(char *name, mode_t mode)
+{
+ BPTR lock;
+ long amode;
+
+ chkabort();
+
+ if (lock = CreateDir(name))
+ {
+ UnLock(lock);
+ /* We remove script because mode 777 contains it by def, but it is
+ meaningless for directories */
+ amode = _make_protection(mode) & ~(FIBF_SCRIPT);
+ if (SetProtection(name, _make_protection(mode))) return 0;
+ }
+ ERROR;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/mkfifo.c amiga/fsf/emacs18/amiga/unix/src/mkfifo.c
--- baseline/fsf/emacs18/amiga/unix/src/mkfifo.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/mkfifo.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,4 @@
+#include "amiga.h"
+
+int mkfifo(char *path, int mode, int dev) { errno = EOSERR; return -1; }
+int mknod(char *path, int mode, int dev) { errno = EOSERR; return -1; }
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/mktemp.c amiga/fsf/emacs18/amiga/unix/src/mktemp.c
--- baseline/fsf/emacs18/amiga/unix/src/mktemp.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/mktemp.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,26 @@
+#include "amiga.h"
+#include <string.h>
+#include <stdio.h>
+
+char *mktemp(char *name)
+{
+ int l;
+ char *change = name + strlen(name) - 6;
+ char letter = 'a';
+ char id[9], *end_id;
+
+ chkabort();
+ _sprintf(id, "%lx", _us);
+ l = strlen(id);
+ end_id = l > 5 ? id + l - 5 : id;
+ _sprintf(change, "a%s", end_id);
+
+ while (letter <= 'z')
+ {
+ *change = letter;
+ if (access(name, 0)) return name;
+ letter++;
+ }
+ name[0] = '\0';
+ return name;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/open.c amiga/fsf/emacs18/amiga/unix/src/open.c
--- baseline/fsf/emacs18/amiga/unix/src/open.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/open.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,141 @@
+#include "amiga.h"
+#include "files.h"
+#include "amigaos.h"
+#include <utility/tagitem.h>
+#include <stdarg.h>
+#include <fcntl.h>
+#include <string.h>
+
+
+#undef open
+
+int __open(const char *path, int flags, ...)
+{
+ int fd, acc = flags & 3, rd, wr, exists = TRUE, amode;
+ struct FileInfoBlock *fib;
+ BPTR plock, fh;
+ long fdflags, protection;
+ APTR pwindow = _us->pr_WindowPtr;
+ ULONG create = MODE_READWRITE; /* Mode to use when creating files. */
+
+ chkabort();
+
+ rd = acc == O_RDONLY || acc == O_RDWR;
+ wr = acc == O_WRONLY || acc == O_RDWR;
+
+ if (stricmp(path, "NIL:") == 0) amode = -1;
+ else
+ {
+ _us->pr_WindowPtr = (APTR)-1;
+ plock = Lock(path, ACCESS_READ);
+ _us->pr_WindowPtr = pwindow;
+ if (!plock)
+ {
+ int err = convert_oserr(IoErr()), ok;
+
+ /* Devices like pipe: don't like Lock ... */
+ if (_OSERR == ERROR_ACTION_NOT_KNOWN ||
+ _OSERR == 0) /* Some devices (tape:) don't set IoErr() ... */
+ {
+ ok = TRUE;
+ /* Most non-lockable devices don't like MODE_READWRITE.
+ So we have to throw shareable files out the window */
+ create = MODE_NEWFILE;
+ }
+ else /* Missing file ok if we are creating. */
+ ok = err == ENOENT && (flags & O_CREAT);
+
+ if (ok)
+ {
+ va_list vmode;
+
+ exists = FALSE;
+ if (flags & O_CREAT)
+ {
+ if (flags & 0x8000) /* SAS C runtime called us, no mode */
+ amode = FIBF_EXECUTE; /* Maybe 0 ? */
+ else
+ {
+ va_start(vmode, flags);
+ amode = _make_protection(va_arg(vmode, int));
+ va_end(vmode);
+ }
+ }
+ else amode = -1; /* Assume complete access */
+ }
+ else
+ {
+ errno = err;
+ return -1;
+ }
+ }
+ else /* File already exists, play with it */
+ {
+ /* Get protection */
+ if (!((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
+ Examine(plock, fib)))
+ {
+ if (fib) FreeDosObject(DOS_FIB, fib);
+ ERROR;
+ }
+ amode = fib->fib_Protection;
+ FreeDosObject(DOS_FIB, fib);
+ UnLock(plock);
+
+ /* Check access */
+ if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
+ {
+ errno = EEXIST;
+ return -1;
+ }
+ if ((rd && (amode & FIBF_READ) || wr && (amode & FIBF_WRITE)))
+ {
+ errno = EACCES;
+ return -1;
+ }
+
+ /* Truncate files, by opening in MODE_NEWFILE, then closing it.
+ This allows the file to be opened in shared mode after that (READWRITE or
+ OLDFILE), which is consistent with the unix semantics. */
+ if (flags & O_TRUNC)
+ {
+ BPTR tfh;
+
+ if (tfh = Open(path, MODE_NEWFILE)) Close(tfh);
+ else ERROR;
+ }
+ }
+ }
+ if (!(fh = Open(path, flags & O_CREAT ? create : MODE_OLDFILE)))
+ ERROR;
+
+
+ /* Protection is set when file is closed because OFS & FFS
+ don't appreciate it being done on MODE_NEWFILE files. */
+ if ((flags & O_TRUNC) || !exists) protection = amode;
+ else protection = -1;
+
+ fdflags = 0;
+ if (rd) fdflags |= FI_READ;
+ if (wr) fdflags |= FI_WRITE;
+ if (flags & O_APPEND) fdflags |= O_APPEND;
+
+ fd = _alloc_amigafd(fh, protection, fdflags);
+ if (fd < 0)
+ {
+ _us->pr_WindowPtr = (APTR)-1;
+ Close(fh);
+ _us->pr_WindowPtr = pwindow;
+ }
+ return fd;
+}
+
+int open(const char *path, int flags, ...)
+{
+ va_list vmode;
+
+ va_start(vmode, flags);
+ return __open(path, flags, va_arg(vmode, int));
+ va_end(vmode);
+}
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/perror.c amiga/fsf/emacs18/amiga/unix/src/perror.c
--- baseline/fsf/emacs18/amiga/unix/src/perror.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/perror.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,26 @@
+#include "amiga.h"
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+
+void perror(const char *s)
+{
+ char *err;
+ char amiga_err[81];
+
+ if (s && *s)
+ {
+ write(2, s, strlen(s));
+ write(2, ": ", 2);
+ }
+ if (errno > 0 && errno <= sys_nerr) err = sys_errlist[errno];
+ else if (errno == -1)
+ {
+ if (Fault(_OSERR, NULL, amiga_err, 81)) err = amiga_err;
+ else err = "42"; /* Shouldn't appear ... */
+ }
+ else err = "Unknown error code";
+
+ write(2, err, strlen(err));
+ write(2, "\n", 1);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/pipe.c amiga/fsf/emacs18/amiga/unix/src/pipe.c
--- baseline/fsf/emacs18/amiga/unix/src/pipe.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/pipe.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,354 @@
+#include "amiga.h"
+#include "files.h"
+#include "fifofd.h"
+#include "signals.h"
+#include <sys/filio.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <string.h>
+#include <stdio.h>
+#include <exec/memory.h>
+#include <amiga/ioctl.h>
+
+/* The pipe system call, using fifo: */
+
+static struct MsgPort *create_fifo_port(void)
+{
+ struct MsgPort *port = AllocMem(sizeof(*port), MEMF_CLEAR | MEMF_PUBLIC);
+
+ if (!port) return 0;
+ port->mp_Node.ln_Type = NT_MSGPORT;
+ port->mp_Flags = PA_SIGNAL;
+ port->mp_SigBit = _fifo_sig;
+ port->mp_SigTask = _us;
+ NewList(&port->mp_MsgList);
+
+ return port;
+}
+
+static void delete_fifo_port(struct MsgPort *port)
+{
+ FreeMem(port, sizeof(*port));
+}
+
+static void free_fifo(struct fifoinfo *fi)
+{
+ if (fi->rfifo) CloseFifo(fi->rfifo, 0);
+ if (fi->wfifo) CloseFifo(fi->wfifo, FIFOF_EOF);
+ if (fi->rmsg) free(fi->rmsg);
+ if (fi->wmsg) free(fi->wmsg);
+ delete_fifo_port(fi->reply);
+ free(fi);
+}
+
+/* Code for fd's describing fifos */
+
+static ULONG __regargs fifo_select_start(void *userinfo, int rd, int wr)
+{
+ struct fifoinfo *fi = userinfo;
+
+ if (rd) RequestFifo(fi->rfifo, fi->rmsg, FREQ_RPEND);
+ if (wr) RequestFifo(fi->wfifo, fi->wmsg, FREQ_WAVAIL);
+ return 1UL << _fifo_sig;
+}
+
+static void __regargs fifo_select_poll(void *userinfo, int *rd, int *wr)
+{
+ struct fifoinfo *fi = userinfo;
+ int rabort = *rd, wabort = *wr;
+ struct Message *msg;
+
+ while (msg = GetMsg(fi->reply))
+ {
+ if (msg == fi->rmsg) rabort = 0;
+ else if (msg == fi->wmsg) wabort = 0;
+ }
+ if (rabort)
+ {
+ *rd = 0;
+ RequestFifo(fi->rfifo, fi->rmsg, FREQ_ABORT);
+ }
+ if (wabort)
+ {
+ *wr = 0;
+ RequestFifo(fi->wfifo, fi->wmsg, FREQ_ABORT);
+ }
+ while (rabort || wabort)
+ {
+ while (!(msg = GetMsg(fi->reply))) Wait(1UL << _fifo_sig);
+ if (msg == fi->rmsg) rabort = 0;
+ else if (msg == fi->wmsg) wabort = 0;
+ }
+ /* Clear any signals we may have left behind */
+ SetSignal(0, 1UL << _fifo_sig);
+}
+
+/* Using 4.2BSD style semantics, with reads from fifo's returning immediately when
+ data is available, and blocking for empty fifo's only when O_NDELAY was not
+ specified on open */
+
+static int __regargs fifo_read(void *userinfo, void *buffer, unsigned int length)
+{
+ struct fifoinfo *fi = userinfo;
+ char *chars;
+ long ready;
+
+ while (!(ready = ReadFifo(fi->rfifo, &chars, fi->skip)))
+ {
+ ULONG sigs;
+
+ fi->skip = 0;
+ if (fi->flags & O_NDELAY)
+ {
+ errno = EWOULDBLOCK;
+ return -1;
+ }
+ Delay(1); /* Perversely, this improves the performance */
+ RequestFifo(fi->rfifo, fi->rmsg, FREQ_RPEND);
+ sigs = _wait_signals(1L << fi->reply->mp_SigBit);
+ RequestFifo(fi->rfifo, fi->rmsg, FREQ_ABORT);
+ while (!GetMsg(fi->reply)) Wait(1UL << _fifo_sig);
+
+ _handle_signals(sigs);
+ }
+ if (ready == -1) ready = 0;
+ if (ready > length) ready = length;
+ memcpy(buffer, chars, ready);
+ fi->skip = ready;
+
+ return (int)ready;
+}
+
+static int __regargs fifo_write(void *userinfo, void *_buffer, unsigned int length)
+{
+ struct fifoinfo *fi = userinfo;
+ long cansend, written;
+ char *buffer = _buffer;
+
+ if (length == 0) /* Send EOF */
+ {
+ char *fname, sname[FIFO_NAMELEN + 2], mname[FIFO_NAMELEN + 2];
+
+ /* Send EOF */
+ CloseFifo(fi->wfifo, FIFOF_EOF);
+ /* And reopen fifo */
+ /* Docs say that this clears EOF flag, maybe we should wait a bit ? */
+ /* The writer is the "master" in fifo: terms */
+ strcpy(mname, fi->name); strcat(mname, "_m");
+ strcpy(sname, fi->name); strcat(sname, "_s");
+
+ fname = !(fi->flags & FI_READ) || (fi->flags & FIFO_MASTER) ? mname : sname;
+ fi->wfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
+ FIFOF_WRITE | FIFOF_RREQUIRED);
+ if (fi->wfifo)
+ {
+ fi->maxsend = BufSizeFifo(fi->wfifo) / 2;
+ return 0;
+ }
+ /* We're in trouble. From now on, all writes will fail */
+ }
+ else if (fi->wfifo)
+ {
+ cansend = fi->maxsend;
+ written = 0;
+ while (length > 0)
+ {
+ long sent;
+
+ if (cansend > length) cansend = length;
+ while ((sent = WriteFifo(fi->wfifo, buffer, cansend)) == 0)
+ {
+ ULONG sigs;
+ int signaled;
+
+ if (fi->flags & O_NDELAY)
+ {
+ if (written != 0) return (int)written;
+ errno = EWOULDBLOCK;
+ return -1;
+ }
+ RequestFifo(fi->wfifo, fi->wmsg, FREQ_WAVAIL);
+ sigs = _wait_signals(1L << fi->reply->mp_SigBit);
+ RequestFifo(fi->wfifo, fi->wmsg, FREQ_ABORT);
+ while (!GetMsg(fi->reply)) Wait(1UL << _fifo_sig);
+ signaled = _handle_signals(sigs);
+ if (signaled && written != 0) return (int)written;
+ }
+ if (sent < 0) /* Some problem has occured */ goto fail;
+ written += sent;
+ length -= sent;
+ buffer += sent;
+ }
+ return (int)written;
+ }
+ fail:
+ /* Some problem has occured */
+ _sig_dispatch(SIGPIPE);
+ errno = EPIPE;
+ return -1;
+}
+
+static int __regargs fifo_lseek(void *userinfo, long rpos, int mode)
+{
+ errno = ESPIPE;
+ return -1;
+}
+
+static int __regargs fifo_close(void *userinfo, int internal)
+{
+ struct fifoinfo *fi = userinfo;
+
+ free_fifo(fi);
+ return 0;
+}
+
+static int __regargs fifo_ioctl(void *userinfo, int request, void *data)
+{
+ struct fifoinfo *fi = userinfo;
+
+ switch (request)
+ {
+ case FIONBIO:
+ if (*(int *)data) fi->flags |= O_NDELAY;
+ else fi->flags &= ~O_NDELAY;
+ return 0;
+ case _AMIGA_GET_FH: {
+ BPTR *fh = data;
+ char name[FIFO_NAMELEN + 12];
+
+ /* Get an AmigaOS fifo: onto the same fifo in the same role */
+ if ((fi->flags & (FI_READ | FI_WRITE)) == (FI_READ | FI_WRITE))
+ _sprintf(name, "fifo:%s/rwesK%s",
+ fi->name, fi->flags & FIFO_MASTER ? "m" : "");
+ else if (fi->flags & FI_READ) _sprintf(name, "fifo:%s/r", fi->name);
+ else _sprintf(name, "fifo:%s/mweK", fi->name);
+ *fh = Open(name, MODE_OLDFILE);
+
+ if (*fh) return 0;
+ ERROR;
+ }
+ case _AMIGA_FREE_FH: {
+ BPTR *fh = data;
+
+ if (*fh) Close(*fh);
+ return 0;
+ }
+ default: errno = EINVAL; return -1;
+ }
+}
+
+static int alloc_fifo(char *name, int reader, int writer, int master)
+{
+ struct fifoinfo *fi;
+ int fd;
+ struct MsgPort *reply = 0;
+ struct Message *rmsg = 0, *wmsg = 0;
+
+ if ((fi = (struct fifoinfo *)malloc(sizeof(struct fifoinfo))) &&
+ (reply = create_fifo_port()) &&
+ (rmsg = (struct Message *)malloc(sizeof(struct Message))) &&
+ (wmsg = (struct Message *)malloc(sizeof(struct Message))))
+ {
+ rmsg->mn_Node.ln_Type = NT_MESSAGE;
+ rmsg->mn_ReplyPort = reply;
+ rmsg->mn_Length = sizeof(*rmsg);
+ wmsg->mn_Node.ln_Type = NT_MESSAGE;
+ wmsg->mn_ReplyPort = reply;
+ wmsg->mn_Length = sizeof(*wmsg);
+ fi->reply = reply;
+ fi->rmsg = rmsg;
+ fi->wmsg = wmsg;
+ fi->rfifo = fi->wfifo = 0;
+
+ fi->flags = 0;
+ if (reader) fi->flags |= FI_READ;
+ if (writer) fi->flags |= FI_WRITE;
+ fd = _alloc_fd(fi, fi->flags, fifo_select_start, fifo_select_poll, fifo_read,
+ fifo_write, fifo_lseek, fifo_close, fifo_ioctl);
+ if (fd)
+ {
+ char *fname, sname[FIFO_NAMELEN + 2], mname[FIFO_NAMELEN + 2];
+
+ if (master) fi->flags |= FIFO_MASTER;
+ strcpy(fi->name, name);
+ /* The writer is the "master" in fifo: terms */
+ strcpy(mname, fi->name); strcat(mname, "_m");
+ strcpy(sname, fi->name); strcat(sname, "_s");
+
+ if (reader)
+ {
+ fname = !writer || !master ? mname : sname;
+ fi->rfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
+ FIFOF_READ);
+ }
+ if (writer)
+ {
+ fname = !reader || master ? mname : sname;
+ fi->wfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
+ FIFOF_WRITE | FIFOF_RREQUIRED);
+ }
+ if ((fi->rfifo || !reader) && (fi->wfifo || !writer))
+ {
+ if (fi->wfifo) fi->maxsend = BufSizeFifo(fi->wfifo) / 2;
+ fi->skip = 0;
+ return fd;
+ }
+ if (fi->rfifo) CloseFifo(fi->rfifo, 0);
+ if (fi->wfifo) CloseFifo(fi->wfifo, 0);
+ }
+ if (fd >= 0) _free_fd(fd);
+ }
+ if (rmsg) free(rmsg);
+ if (wmsg) free(wmsg);
+ if (reply) delete_fifo_port(reply);
+ if (fi) free(fi);
+ return -1;
+}
+
+int pipe(int fd[2])
+{
+ char name[FIFO_NAMELEN];
+ struct fileinfo *f0;
+
+ chkabort();
+ if (!_fifo_ok)
+ {
+ errno = ENXIO;
+ return -1;
+ }
+
+ _sprintf(name, "uxfifo.%lx", _fifo_base + _fifo_offset++);
+
+ if ((fd[0] = alloc_fifo(name, TRUE, FALSE, FALSE)) >= 0)
+ if ((fd[1] = alloc_fifo(name, FALSE, TRUE, FALSE)) >= 0) return 0;
+ else
+ {
+ if (f0 = _find_fd(fd[0])) free_fifo(f0->userinfo);
+ _free_fd(fd[0]);
+ }
+ return -1;
+}
+
+int socketpair(int domain, int type, int protocol, int sv[2])
+{
+ char name[FIFO_NAMELEN];
+ struct fileinfo *f0;
+
+ chkabort();
+ if (!_fifo_ok)
+ {
+ errno = ENXIO;
+ return -1;
+ }
+
+ _sprintf(name, "uxfifo.%lx", _fifo_base + _fifo_offset++);
+
+ if ((sv[0] = alloc_fifo(name, TRUE, TRUE, TRUE)) >= 0)
+ if ((sv[1] = alloc_fifo(name, TRUE, TRUE, FALSE)) >= 0) return 0;
+ else
+ {
+ if (f0 = _find_fd(sv[0])) free_fifo(f0->userinfo);
+ _free_fd(sv[0]);
+ }
+ return -1;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/popen.c amiga/fsf/emacs18/amiga/unix/src/popen.c
--- baseline/fsf/emacs18/amiga/unix/src/popen.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/popen.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,93 @@
+#include "amiga.h"
+#include "processes.h"
+#include "fifofd.h"
+#include <amiga/ioctl.h>
+#include <exec/memory.h>
+#include <dos/dosextens.h>
+#include <dos/dostags.h>
+#include <string.h>
+
+struct pprocess
+{
+ struct pprocess *next;
+ FILE *f;
+ int pid;
+};
+
+static struct pprocess *_pplist;
+
+FILE *popen(char *command, char *type)
+{
+ FILE *pipe;
+ BPTR in, out;
+ int close_in, close_out;
+ char pname[24];
+ struct pprocess *pp = (struct pprocess *)malloc(sizeof(struct pprocess));
+
+ _sprintf(pname, "pipe:uxopen.%lx", _fifo_base + _fifo_offset++);
+
+ if (type[0] == 'w' && type[1] == '\0')
+ {
+ pipe = fopen(pname, "w");
+ out = Output(); close_out = FALSE;
+ in = Open(pname, MODE_OLDFILE); close_in = TRUE;
+ }
+ else if (type[0] == 'r' && type[1] == '\0')
+ {
+ pipe = fopen(pname, "r");
+ in = Input(); close_in = FALSE;
+ out = Open(pname, MODE_NEWFILE); close_out = TRUE;
+ }
+ else
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+
+ if (!in || !out) _seterr();
+ if (pipe && in && out && pp)
+ {
+ pp->pid = _start_process(command, in, close_in, out, close_out,
+ -1, FALSE, 0, 0);
+
+ if (pp->pid)
+ {
+ pp->next = _pplist;
+ _pplist = pp;
+ pp->f = pipe;
+
+ return pipe;
+ }
+ }
+ if (pp) free(pp);
+ if (in && close_in) Close(in);
+ if (out && close_out) Close(out);
+ if (pipe) fclose(pipe);
+
+ return NULL;
+}
+
+int pclose(FILE *f)
+{
+ struct pprocess **scan = &_pplist;
+
+ while (*scan)
+ {
+ if ((*scan)->f == f) /* found */
+ {
+ struct pprocess *son = *scan;
+ int status;
+ int pid = son->pid;
+
+ *scan = son->next; /* Remove process from list */
+
+ fclose(son->f);
+ free(son);
+ /* Wait for process to terminate */
+ if (waitpid(pid, &status, NULL) >= 0) return status;
+ return -1;
+ }
+ scan = &(*scan)->next;
+ }
+ return -1;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/processes.c amiga/fsf/emacs18/amiga/unix/src/processes.c
--- baseline/fsf/emacs18/amiga/unix/src/processes.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/processes.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,56 @@
+#include "amiga.h"
+#include <clib/alib_protos.h>
+
+#include "processes.h"
+
+int _next_pid, _our_pid;
+struct MinList _processes;
+char _door_name[DOOR_LEN];
+struct MsgPort *_children_exit;
+struct MsgPort *_startup_port;
+
+void _free_entry(struct process *p)
+{
+ Remove((struct Node *)p);
+ free(p);
+}
+
+struct process *_find_pid(int pid)
+{
+ struct process *entry;
+
+ scan_processes (entry) if (entry->pid == pid) return entry;
+
+ return 0;
+}
+
+void _init_processes(void)
+{
+ NewList((struct List *)&_processes);
+ /* Choose a fairly unique pid for ourselves, but keep it within a range
+ which guarantees positive pid's for all created processes.
+ This range is further restricted to 23 bits so that a pid fits within the
+ range of an emacs number (generally 24 bits, though it is 26 on the Amiga) */
+ _our_pid = ((int)_us ^ _startup_time) & 0x7fffff;
+ _next_pid = _our_pid + 1;
+ _sprintf(_door_name, "door.%lx.%lx", _us, _startup_time);
+ if ((_startup_port = CreateMsgPort()) &&
+ (_children_exit = CreatePort(_door_name, 0))) return;
+
+ _fail("No memory");
+}
+
+void _cleanup_processes(void)
+{
+ if (_startup_port) DeleteMsgPort(_startup_port);
+ if (_children_exit)
+ {
+ struct exit_message *msg;
+
+ Forbid();
+ while (msg = (struct exit_message *)GetMsg(_children_exit))
+ FreeMem(msg, sizeof(struct exit_message));
+ DeletePort(_children_exit);
+ Permit();
+ }
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/processes.h amiga/fsf/emacs18/amiga/unix/src/processes.h
--- baseline/fsf/emacs18/amiga/unix/src/processes.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/processes.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,46 @@
+#ifndef _PROCESSES_H
+#define _PROCESSES_H_
+
+struct process
+{
+ struct MinNode node;
+ struct Task *process;
+ int pid;
+ BPTR input;
+ enum { alive, exited } status;
+ int rc;
+};
+
+struct exit_message /* Sent by children when exiting */
+{
+ struct Message m;
+ int pid;
+ int rc;
+};
+
+extern int _next_pid, _our_pid;
+extern struct MinList _processes;
+#define DOOR_LEN 32
+extern char _door_name[DOOR_LEN];
+extern struct MsgPort *_children_exit;
+extern struct MsgPort *_startup_port;
+
+#define scan_processes(p) for (p = (struct process *)_processes.mlh_Head; \
+ p->node.mln_Succ; \
+ p = (struct process *)p->node.mln_Succ)
+
+#define no_processes() (_processes.mlh_Head->mln_Succ == 0)
+
+void _free_entry(struct process *p);
+struct process *_find_pid(int pid);
+void _init_processes(void);
+void _cleanup_processes(void);
+
+int _start_process(char *command,
+ BPTR input, int close_input,
+ BPTR output, int close_output,
+ BPTR error, int close_error,
+ BPTR dir,
+ long stacksize);
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/protection.c amiga/fsf/emacs18/amiga/unix/src/protection.c
--- baseline/fsf/emacs18/amiga/unix/src/protection.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/protection.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,73 @@
+#include "amiga.h"
+#include <sys/stat.h>
+
+int use_amiga_flags;
+
+int _make_protection(int mode)
+{
+ int amode;
+
+ if (use_amiga_flags) return mode;
+
+ /* We always turn archive off */
+ amode = 0;
+
+ /* Read: if any unix read */
+ if (mode & (S_IRUSR | S_IRGRP | S_IROTH)) amode |= FIBF_READ;
+
+ /* Write: if user write or group write
+ Delete: if user write or world write */
+ if (mode & S_IWUSR) amode |= FIBF_WRITE | FIBF_DELETE;
+ if (mode & S_IWGRP) amode |= FIBF_WRITE;
+ if (mode & S_IWOTH) amode |= FIBF_DELETE;
+
+ /* Execute: if group execute or user execute and not world execute
+ Script: if world execute or user execute ant not group execute */
+ if (mode & S_IXGRP) amode |= FIBF_EXECUTE;
+ if (mode & S_IXOTH) amode |= FIBF_SCRIPT;
+ if ((mode & (S_IXUSR | S_IXGRP | S_IXOTH)) == S_IXUSR)
+ amode |= FIBF_EXECUTE | FIBF_SCRIPT;
+
+ /* Pure: if sticky */
+ if (mode & S_ISVTX) amode |= FIBF_PURE;
+
+ /* Make correct bits active 0 */
+ amode ^= FIBF_READ | FIBF_WRITE | FIBF_EXECUTE | FIBF_DELETE;
+ return amode;
+}
+
+int _make_mode(int protection)
+{
+ int mode;
+
+ if (use_amiga_flags) return protection & ~S_IFMT;
+
+ mode = 0;
+ /* make all bits active 1 */
+ protection ^= FIBF_READ | FIBF_WRITE | FIBF_EXECUTE | FIBF_DELETE;
+
+ /* Read user, group, world if amiga read */
+ if (protection & FIBF_READ) mode |= S_IRUSR | S_IRGRP | S_IROTH;
+
+ /* Write:
+ user if amiga write & delete
+ group if amiga write
+ other if amiga delete */
+ if ((protection & (FIBF_WRITE | FIBF_DELETE)) == (FIBF_WRITE | FIBF_DELETE))
+ mode |= S_IWUSR;
+ if (protection & FIBF_WRITE) mode |= S_IWGRP;
+ if (protection & FIBF_DELETE) mode |= S_IWOTH;
+
+ /* Execute:
+ user if amiga execute or script
+ group if amiga execute
+ world if amiga script */
+ if (protection & (FIBF_EXECUTE | FIBF_SCRIPT)) mode |= S_IXUSR;
+ if (protection & FIBF_EXECUTE) mode |= S_IXGRP;
+ if (protection & FIBF_SCRIPT) mode |= S_IXOTH;
+
+ /* Sticky: if pure */
+ if (protection & FIBF_PURE) mode |= S_ISVTX;
+
+ return mode;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/pseudo_c.c amiga/fsf/emacs18/amiga/unix/src/pseudo_c.c
--- baseline/fsf/emacs18/amiga/unix/src/pseudo_c.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/pseudo_c.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,18 @@
+#include "amiga.h"
+#include "files.h"
+#include <fcntl.h>
+
+int _pseudo_close(int fd)
+{
+ struct fileinfo *fi;
+
+ chkabort();
+ if (fi = _find_fd(fd))
+ {
+ int err = fi->close(fi->userinfo, TRUE);
+
+ _free_fd(fd);
+ return err;
+ }
+ return -1;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/pwd.c amiga/fsf/emacs18/amiga/unix/src/pwd.c
--- baseline/fsf/emacs18/amiga/unix/src/pwd.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/pwd.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,13 @@
+#include "amiga.h"
+#include <pwd.h>
+
+struct passwd _amiga_user = {
+ NULL, "",
+ AMIGA_UID, AMIGA_GID,
+ 0, "", NULL,
+ NULL, NULL
+ };
+
+struct passwd *getpwuid(uid_t uid) { return &_amiga_user; }
+struct passwd *getpwnam(char *name) { return &_amiga_user; }
+char *getlogin(void) { return _amiga_user.pw_name; }
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/read.c amiga/fsf/emacs18/amiga/unix/src/read.c
--- baseline/fsf/emacs18/amiga/unix/src/read.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/read.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,24 @@
+#include "amiga.h"
+#include "files.h"
+#include <fcntl.h>
+
+#undef read
+
+int __read(int fd, void *buffer, unsigned int length)
+{
+ struct fileinfo *fi;
+
+ chkabort();
+ if (fi = _find_fd(fd))
+ {
+ if (fi->flags & FI_READ) return fi->read(fi->userinfo, buffer, length);
+ errno = EACCES;
+ }
+ return -1;
+}
+
+int read(int fd, void *buffer, unsigned int length)
+{
+ return __read(fd, buffer, length);
+}
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/readlink.c amiga/fsf/emacs18/amiga/unix/src/readlink.c
--- baseline/fsf/emacs18/amiga/unix/src/readlink.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/readlink.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,38 @@
+#include "amiga.h"
+#include <string.h>
+
+int readlink(char *path, char *buf, int bufsiz)
+{
+ struct DevProc *dev = NULL;
+
+ chkabort();
+
+ while (1)
+ {
+ struct DevProc *newdev = GetDeviceProc(path, dev);
+ long err;
+
+ FreeDeviceProc(dev);
+ if (!(dev = newdev)) ERROR;
+
+ buf[0] = '\0';
+ if (ReadLink(dev->dvp_Port, dev->dvp_Lock, path, buf, bufsiz + 1))
+ {
+ FreeDeviceProc(dev);
+ if (!buf[0])
+ {
+ /* Play games with apparent 2.x ram: bug */
+ errno = ENOENT;
+ return -1;
+ }
+ return strlen(buf);
+ }
+ err = IoErr();
+ if (!(err == ERROR_OBJECT_NOT_FOUND && (dev->dvp_Flags & DVPF_ASSIGN)))
+ {
+ FreeDeviceProc(dev);
+ errno = convert_oserr(err);
+ return -1;
+ }
+ }
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/rename.c amiga/fsf/emacs18/amiga/unix/src/rename.c
--- baseline/fsf/emacs18/amiga/unix/src/rename.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/rename.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,24 @@
+#include "amiga.h"
+
+int rename(const char *from, const char *to)
+{
+ long err;
+
+ chkabort();
+ if (Rename(from, to)) return 0;
+ err = IoErr();
+ if (err == ERROR_OBJECT_EXISTS)
+ {
+ if (DeleteFile(to) && Rename(from, to)) return 0;
+ err = IoErr();
+
+ if (err == ERROR_DELETE_PROTECTED)
+ {
+ if (SetProtection(to, 0) && DeleteFile(to) && Rename(from, to))
+ return 0;
+ err = IoErr();
+ }
+ }
+ errno = convert_oserr(err);
+ return -1;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/rindex.c amiga/fsf/emacs18/amiga/unix/src/rindex.c
--- baseline/fsf/emacs18/amiga/unix/src/rindex.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/rindex.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,8 @@
+#include <string.h>
+
+#undef rindex
+
+char *rindex(char *str, int c)
+{
+ return strrchr(str, c);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/rmdir.c amiga/fsf/emacs18/amiga/unix/src/rmdir.c
--- baseline/fsf/emacs18/amiga/unix/src/rmdir.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/rmdir.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,31 @@
+#include "amiga.h"
+#include <utility/tagitem.h>
+
+int rmdir(char *name)
+{
+ struct FileInfoBlock *fib = 0;
+ BPTR lock = 0;
+
+ if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
+ (lock = Lock(name, ACCESS_READ)) &&
+ Examine(lock, fib))
+ {
+ int isdir = fib->fib_DirEntryType > 0;
+
+ UnLock(lock);
+ FreeDosObject(DOS_FIB, fib);
+
+ if (isdir)
+ {
+ if (DeleteFile(name)) return 0;
+ ERROR;
+ }
+ errno = ENOTDIR;
+ return -1;
+ }
+ errno = convert_oserr(IoErr());
+
+ if (lock) UnLock(lock);
+ if (fib) FreeDosObject(DOS_FIB, fib);
+ return -1;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/select.c amiga/fsf/emacs18/amiga/unix/src/select.c
--- baseline/fsf/emacs18/amiga/unix/src/select.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/select.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,72 @@
+#include "amiga.h"
+#include "files.h"
+#include "signals.h"
+#include "timers.h"
+#include <sys/time.h>
+
+int select(int nfds, int *rfds, int *wfds, int *efds, struct timeval *timeout)
+{
+ int fdmask, i, fdcount;
+ int poll = timeout && timeout->tv_sec == 0 && timeout->tv_usec == 0;
+ ULONG eventmask, sigs;
+ int orfds = rfds ? *rfds : 0, owfds = wfds ? *wfds : 0, oefds = efds ? *efds : 0;
+
+ for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
+ {
+ int rd = orfds & fdmask, wr = owfds & fdmask;
+
+ chkabort();
+ if (rd || wr)
+ {
+ struct fileinfo *fi = _find_fd(i);
+
+ if (!fi) return -1;
+ if (rd && !(fi->flags & FI_READ) || wr && !(fi->flags & FI_WRITE))
+ {
+ errno = EACCES;
+ return -1;
+ }
+ }
+ }
+
+ if (timeout) _timer_start(_odd_timer, timeout->tv_sec, timeout->tv_usec);
+ else _timer_abort(_odd_timer);
+ fdcount = 0;
+ do
+ {
+ eventmask = 0;
+ for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
+ {
+ int rd = orfds & fdmask, wr = owfds & fdmask;
+
+ if (rd || wr)
+ {
+ struct fileinfo *fi = _find_fd(i);
+
+ eventmask |= fi->select_start(fi->userinfo, rd, wr);
+ }
+ }
+
+ if (eventmask == -1 || poll) /* Don't wait */ sigs = _check_signals(0);
+ else /* Wait*/ sigs = _wait_signals(_odd_sig | eventmask);
+
+ for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
+ {
+ int rd = orfds & fdmask, wr = owfds & fdmask;
+
+ if (rd || wr)
+ {
+ struct fileinfo *fi = _find_fd(i);
+
+ fi->select_poll(fi->userinfo, &rd, &wr);
+ if (!rd && rfds) *rfds &= ~fdmask;
+ if (!wr && wfds) *wfds &= ~fdmask;
+ if (rd || wr) fdcount++;
+ }
+ }
+ _handle_signals(sigs);
+ }
+ while (fdcount == 0 && !_timer_expired(_odd_timer) && !poll);
+
+ return fdcount;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/setjmp.c amiga/fsf/emacs18/amiga/unix/src/setjmp.c
--- baseline/fsf/emacs18/amiga/unix/src/setjmp.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/setjmp.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,15 @@
+#include "amiga.h"
+#include "signals.h"
+#include <setjmp.h>
+
+int setjmp(jmp_buf jb)
+{
+ jb[0] = _sig_mask;
+ return _setjmp(jb + 1);
+}
+
+void longjmp(jmp_buf jb, int val)
+{
+ sigsetmask(jb[0]);
+ _longjmp(jb + 1, val);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/siglist.c amiga/fsf/emacs18/amiga/unix/src/siglist.c
--- baseline/fsf/emacs18/amiga/unix/src/siglist.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/siglist.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,35 @@
+char *sys_siglist[] =
+{
+ "no signal",
+ "hangup",
+ "interrupt",
+ "quit",
+ "illegal instruction",
+ "trace trap",
+ "abort",
+ "emt instruction",
+ "floating point exception",
+ "kill",
+ "bus error",
+ "segmentation violation",
+ "bad argument to system call",
+ "write on a pipe with no one to read it",
+ "alarm clock",
+ "software termination signal from kill",
+ "status signal",
+ "sendable stop signal not from tty",
+ "stop signal from tty",
+ "continue a stopped process",
+ "child status has changed",
+ "background read attempted from control tty",
+ "background write attempted from control tty",
+ "input record available at control tty",
+ "exceeded CPU time limit",
+ "exceeded file size limit",
+ "unknown signal",
+ "unknown signal",
+ "window changed",
+ "unknown signal",
+ "user signal 1",
+ "user signal 2",
+};
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/signal.c amiga/fsf/emacs18/amiga/unix/src/signal.c
--- baseline/fsf/emacs18/amiga/unix/src/signal.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/signal.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,26 @@
+#include "amiga.h"
+#include "signals.h"
+
+int sigvec(int sig, struct sigvec *vec, struct sigvec *ovec)
+{
+ chkabort();
+ if (sig >= 1 && sig < NSIG)
+ {
+ if (ovec) *ovec = _sig_handlers[sig];
+ if (vec) _sig_handlers[sig] = *vec;
+ return 0;
+ }
+ errno = EINVAL;
+ return -1;
+}
+
+void (*signal(int sig,void (*fn)(int)))(int)
+{
+ struct sigvec vec, ovec;
+
+ vec.sv_handler = fn;
+ vec.sv_mask = 0;
+ /*vec.sv_flags = 0;*/
+ if (sigvec(sig, &vec, &ovec)) return -1;
+ return ovec.sv_handler;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/signals.c amiga/fsf/emacs18/amiga/unix/src/signals.c
--- baseline/fsf/emacs18/amiga/unix/src/signals.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/signals.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,211 @@
+#include "amiga.h"
+#include "timers.h"
+#include "signals.h"
+#include "processes.h"
+
+static ULONG signalsigs; /* When one of these occur, call handle_signals */
+struct sigvec _sig_handlers[NSIG];
+long _sig_mask, _sig_pending;
+
+/* Alarm signal */
+/* ------------ */
+
+static struct timeinfo *alarm_timer;
+
+static int check_alarm(ULONG sigs)
+{
+ return alarm_timer && _timer_expired(alarm_timer);
+}
+
+void alarm(int secs)
+/* Effect: Schedule a SIGALRM after secs seconds
+*/
+{
+ _timer_start(alarm_timer, secs, 0);
+}
+
+static void init_alarm(void)
+{
+ if (!(alarm_timer = _alloc_timer())) _fail("Failed to create timer");
+ signalsigs |= _timer_sig(alarm_timer);
+}
+
+static void cleanup_alarm(void)
+{
+ _free_timer(alarm_timer);
+}
+
+/* SIGINT definition */
+/* ----------------- */
+
+static void init_sigint(void)
+{
+ signalsigs |= SIGBREAKF_CTRL_C;
+}
+
+/*static void cleanup_sigint(void) { }*/
+
+static int check_sigint(ULONG sigs)
+{
+ return (sigs & SIGBREAKF_CTRL_C) != 0;
+}
+
+/* SIGQUIT definition */
+/* ------------------ */
+
+static void init_sigquit(void)
+{
+ signalsigs |= SIGBREAKF_CTRL_D;
+}
+
+/*static void cleanup_sigquit(void) { }*/
+
+static int check_sigquit(ULONG sigs)
+{
+ return (sigs & SIGBREAKF_CTRL_D) != 0;
+}
+
+/* SIGCHLD definition */
+/* ------------------ */
+
+static void init_children(void)
+{
+ _init_processes();
+ signalsigs |= 1L << _children_exit->mp_SigBit;
+}
+
+static void cleanup_children(void)
+{
+ _cleanup_processes();
+}
+
+static int check_children(ULONG sigs)
+{
+ struct exit_message *msg;
+ int change = FALSE;
+
+ while (msg = (struct exit_message *)GetMsg(_children_exit))
+ {
+ struct process *p;
+
+ if ((p = _find_pid(msg->pid)) && p->status == alive)
+ {
+ change = TRUE;
+ p->status = exited;
+ p->rc = msg->rc;
+ }
+ FreeMem(msg, sizeof(struct exit_message));
+ }
+ return change;
+}
+
+/* Signal dispatching */
+/* ------------------ */
+
+void _sig_dispatch(int sig)
+/* Effect: Do the action associated with signal sig it it isn't masked
+ Mask it for the duration of the signal exec
+*/
+{
+ void (*fn)(int);
+ long smask = 1 << sig;
+
+ if (sig == SIGKILL) _exit(0);
+
+ if (_sig_mask & smask) _sig_pending |= smask;
+ else
+ do
+ {
+ _sig_pending &= ~smask;
+ if (sig >= 0 && sig < NSIG)
+ {
+ fn = _sig_handlers[sig].sv_handler;
+
+ if (fn == SIG_DFL)
+ switch (sig)
+ {
+ case SIGCHLD: case SIGURG: case SIGWINCH: break;
+ case SIGINT: case SIGQUIT: _message("user interrupt");
+ default: _exit(0);
+ }
+ else if (fn != SIG_IGN)
+ {
+ int mask = smask | _sig_handlers[sig].sv_mask;
+
+ _sig_mask |= mask;
+ fn(sig);
+ _sig_mask &= ~mask;
+ }
+ }
+ }
+ while (_sig_pending & smask); /* Signal may have been generated during the
+ signal handling function. */
+}
+
+ULONG _check_signals(ULONG extra_sigs)
+{
+ return SetSignal(0, signalsigs | extra_sigs);
+}
+
+ULONG _wait_signals(ULONG extra_sigs)
+{
+ return Wait(signalsigs | extra_sigs);
+}
+
+int _handle_signals(ULONG sigs)
+{
+ int signaled = 0;
+
+ if (check_alarm(sigs)) { signaled = 1; _sig_dispatch(SIGALRM); }
+ if (check_sigint(sigs)) { signaled = 1; _sig_dispatch(SIGINT); }
+ if (check_sigquit(sigs)) { signaled = 1; _sig_dispatch(SIGQUIT); }
+ if (check_children(sigs)) { signaled = 1; _sig_dispatch(SIGCHLD); }
+
+ return signaled;
+}
+
+/* Patch into SAS signal stuff so as to replace it */
+
+void CXFERR(int code)
+{
+ extern int _FPERR;
+
+ _FPERR = code;
+ _sig_dispatch(SIGFPE);
+}
+
+void chkabort(void)
+/* Checks all signals */
+{
+ _handle_signals(_check_signals(0));
+}
+
+void Chk_Abort(void) { chkabort(); }
+
+/* Initialisation */
+/* -------------- */
+
+void _init_signals(void)
+{
+ int i;
+
+ for (i = 0; i < NSIG; i++)
+ {
+ _sig_handlers[i].sv_handler = SIG_DFL;
+ _sig_handlers[i].sv_mask = 0;
+ /*_sig_handlers[i].sv_flags = 0;*/
+ }
+
+ _sig_mask = _sig_pending = 0;
+ signalsigs = 0;
+
+ init_sigint(); init_sigquit(); init_alarm(); init_children();
+}
+
+void _cleanup_signals(void)
+{
+ cleanup_alarm();
+ /*cleanup_sigquit();*/
+ /*cleanup_sigint();*/
+ cleanup_children();
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/signals.h amiga/fsf/emacs18/amiga/unix/src/signals.h
--- baseline/fsf/emacs18/amiga/unix/src/signals.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/signals.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,21 @@
+#ifndef SIGNALS_H
+#define SIGNALS_H
+
+#include <signal.h>
+
+extern struct sigvec _sig_handlers[NSIG];
+extern long _sig_mask, _sig_pending;
+
+void _sig_dispatch(int sig);
+/* Effect: Do the action associated with signal sig it it isn't masked
+ Mask it for the duration of the signal exec
+*/
+
+ULONG _check_signals(ULONG extra_sigs);
+ULONG _wait_signals(ULONG extra_sigs);
+int _handle_signals(ULONG sigs);
+
+void _init_signals(void);
+void _cleanup_signals(void);
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/sigpause.c amiga/fsf/emacs18/amiga/unix/src/sigpause.c
--- baseline/fsf/emacs18/amiga/unix/src/sigpause.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/sigpause.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,16 @@
+#include "amiga.h"
+#include "signals.h"
+
+int sigpause(long mask)
+{
+ long oldmask = sigsetmask(mask);
+ ULONG sigs;
+
+ sigs = _check_signals(0);
+ while (!_handle_signals(sigs)) sigs = _wait_signals(0);
+
+ sigsetmask(oldmask);
+
+ errno = EINTR;
+ return -1;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/sigsetmask.c amiga/fsf/emacs18/amiga/unix/src/sigsetmask.c
--- baseline/fsf/emacs18/amiga/unix/src/sigsetmask.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/sigsetmask.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,22 @@
+#include "amiga.h"
+#include "signals.h"
+
+long sigsetmask(long mask)
+{
+ int oldmask = _sig_mask, i, imask;
+
+ chkabort();
+ _sig_mask = mask;
+
+ /* Check all pending signals */
+ for (i = 0, imask = 1; i < NSIG; i++, imask <<= 1)
+ if ((_sig_pending & imask) && !(_sig_mask & imask))
+ _sig_dispatch(i);
+
+ return oldmask;
+}
+
+long sigblock(long mask)
+{
+ return sigsetmask(_sig_mask | mask);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/sleep.c amiga/fsf/emacs18/amiga/unix/src/sleep.c
--- baseline/fsf/emacs18/amiga/unix/src/sleep.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/sleep.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,13 @@
+#include "amiga.h"
+#include "timers.h"
+#include "signals.h"
+
+int sleep(unsigned seconds)
+{
+ chkabort();
+ _timer_start(_odd_timer, seconds, 0);
+
+ while (!_timer_expired(_odd_timer)) _handle_signals(_wait_signals(_odd_sig));
+
+ return 0;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/smakefile amiga/fsf/emacs18/amiga/unix/src/smakefile
--- baseline/fsf/emacs18/amiga/unix/src/smakefile Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/smakefile Sat Sep 28 00:00:00 1996
@@ -0,0 +1,128 @@
+OBJS= mkdir.o devices.o processes.o kill.o abort.o error.o error_msg.o \
+ fcntl.o select.o read.o lseek.o chmod.o getwd.o mktemp.o link.o \
+ getenv.o time.o write.o creat.o sleep.o uid.o exec.o truncate.o \
+ strftime.o rmdir.o sigpause.o isatty.o mkfifo.o fchmod.o ftruncate.o \
+ bzero.o fibstat.o bcmp.o chown.o rename.o amigaos.o ctime.o open.o \
+ ioctl.o _exit.o gid.o protection.o umask.o _main.o signals.o grp.o \
+ pipe.o unlink.o alloca.o readlink.o pwd.o timeconvert.o amigatime.o \
+ bcopy.o utime.o files.o close.o fifofd.o timers.o index.o rindex.o \
+ pseudo_c.o wait4.o siglist.o perror.o gethostname.o setjmp.o allocdos.o \
+ message.o symlink.o fstat.o access.o dir_data.o dir.o stat.o \
+ sigsetmask.o signal.o getpid.o start.o popen.o tmpnam.o
+
+DEFS = define=SOFTLINK
+OPTIMIZE = opt
+CFLAGS = $(OPTS) $(DEFS) gst=amiga.sym $(OPTIMIZE)
+
+all: amiga.sym unix.lib unix-hard.lib
+
+ALLOBJS = $(OBJS) sprintf.o _setjmp.o
+
+unix.lib: $(ALLOBJS)
+ -delete unix.lib ram:unix.lib
+ oml ram:unix.lib <@<
+r $(ALLOBJS)
+<
+ copy ram:unix.lib ""
+
+unix-hard.lib: unix.lib fibstat-hard.o
+ copy unix.lib ram:
+ oml ram:unix.lib d fibstat.c
+ oml ram:unix.lib r fibstat-hard.o
+ copy ram:unix.lib unix-hard.lib
+
+sprintf.o: sprintf.asm
+ asm -osprintf.o -iINCLUDE: sprintf.asm
+
+_setjmp.o: _setjmp.asm
+ asm -o_setjmp.o -iINCLUDE: _setjmp.asm
+
+amiga.sym: amiga.h
+ copy amiga.h am.c
+ sc makegst=amiga.sym $(OPTS) am.c
+ delete am.c
+
+fibstat-hard.o: fibstat.c
+ $(CC) $(CFLAGS) DEF PRETEND_LINKED objname $@ fibstat.c
+
+mkdir.o: mkdir.c amiga.h
+devices.o: devices.c amiga.h
+processes.o: processes.c processes.h amiga.h
+kill.o: kill.c processes.h signals.h amiga.h
+abort.o: abort.c amiga.h
+error.o: error.c amiga.h
+error_msg.o: error_msg.c amiga.h
+fcntl.o: fcntl.c amiga.h
+select.o: select.c signals.h amiga.h
+read.o: read.c amiga.h
+lseek.o: lseek.c amiga.h
+chmod.o: chmod.c amiga.h
+getwd.o: getwd.c amiga.h
+mktemp.o: mktemp.c amiga.h
+link.o: link.c amiga.h
+getenv.o: getenv.c amiga.h
+time.o: time.c timeconvert.h amiga.h
+write.o: write.c amiga.h
+creat.o: creat.c amiga.h
+sleep.o: sleep.c signals.h amiga.h
+uid.o: uid.c amiga.h
+exec.o: exec.c processes.h amiga.h
+truncate.o: truncate.c amigaos.h amiga.h
+strftime.o: strftime.c
+rmdir.o: rmdir.c amiga.h
+sigpause.o: sigpause.c signals.h amiga.h
+isatty.o: isatty.c amiga.h
+mkfifo.o: mkfifo.c amiga.h
+fchmod.o: fchmod.c amiga.h
+ftruncate.o: ftruncate.c amiga.h
+bzero.o: bzero.c amiga.h
+fibstat.o: fibstat.c timeconvert.h fibstat.h amiga.h
+bcmp.o: bcmp.c amiga.h
+chown.o: chown.c amiga.h
+rename.o: rename.c amiga.h
+amigaos.o: amigaos.c signals.h amiga.h
+ctime.o: ctime.c
+open.o: open.c amigaos.h amiga.h
+ioctl.o: ioctl.c amiga.h
+_exit.o: _exit.c fifo_pragmas.h fifo.h fifofd.h signals.h amiga.h
+gid.o: gid.c amiga.h
+protection.o: protection.c amiga.h
+umask.o: umask.c amiga.h
+_main.o: _main.c fifo_pragmas.h fifo.h amigaos.h fifofd.h signals.h amiga.h
+signals.o: signals.c processes.h signals.h amiga.h
+grp.o: grp.c amiga.h
+pipe.o: pipe.c fifo_pragmas.h fifo.h fifofd.h signals.h amiga.h
+unlink.o: unlink.c amiga.h
+alloca.o: alloca.c
+readlink.o: readlink.c amiga.h
+pwd.o: pwd.c amiga.h
+timeconvert.o: timeconvert.c timeconvert.h amiga.h
+amigatime.o: amigatime.c timeconvert.h amiga.h
+bcopy.o: bcopy.c amiga.h
+utime.o: utime.c timeconvert.h amiga.h
+files.o: files.c amiga.h
+close.o: close.c amiga.h
+fifofd.o: fifofd.c fifo_pragmas.h fifo.h fifofd.h amiga.h
+timers.o: timers.c amiga.h
+index.o: index.c
+rindex.o: rindex.c
+pseudo_c.o: pseudo_c.c amiga.h
+wait4.o: wait4.c processes.h signals.h amiga.h
+siglist.o: siglist.c
+perror.o: perror.c amiga.h
+gethostname.o: gethostname.c amiga.h
+setjmp.o: setjmp.c signals.h amiga.h
+allocdos.o: allocdos.c
+message.o: message.c amiga.h
+symlink.o: symlink.c amiga.h
+fstat.o: fstat.c fibstat.h amiga.h
+access.o: access.c fibstat.h amiga.h
+dir_data.o: dir_data.c dir_data.h amiga.h
+dir.o: dir.c dir_data.h amiga.h
+stat.o: stat.c dir_data.h fibstat.h amiga.h
+sigsetmask.o: sigsetmask.c signals.h amiga.h
+signal.o: signal.c signals.h amiga.h
+getpid.o: getpid.c processes.h amiga.h
+start.o: start.c processes.h amiga.h
+popen.o: popen.c fifo_pragmas.h fifo.h processes.h fifofd.h amiga.h
+tmpnam.o: tmpnam.c amiga.h
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/smakefile.base amiga/fsf/emacs18/amiga/unix/src/smakefile.base
--- baseline/fsf/emacs18/amiga/unix/src/smakefile.base Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/smakefile.base Sat Sep 28 00:00:00 1996
@@ -0,0 +1,26 @@
+DEFS = define=SOFTLINK
+OPTIMIZE = debug=sf
+CFLAGS = $(OPTS) $(DEFS) gst=amiga.sym $(OPTIMIZE)
+
+all: amiga.sym unix.lib
+
+ALLOBJS = $(OBJS) sprintf.o _setjmp.o
+
+unix.lib: $(ALLOBJS)
+ -delete unix.lib ram:unix.lib
+ oml ram:unix.lib <@<
+r $(ALLOBJS)
+<
+ copy ram:unix.lib ""
+
+sprintf.o: sprintf.asm
+ asm -osprintf.o -iINCLUDE: sprintf.asm
+
+_setjmp.o: _setjmp.asm
+ asm -o_setjmp.o -iINCLUDE: _setjmp.asm
+
+amiga.sym: amiga.h
+ copy amiga.h am.c
+ sc makegst=amiga.sym $(OPTS) am.c
+ delete am.c
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/sprintf.asm amiga/fsf/emacs18/amiga/unix/src/sprintf.asm
--- baseline/fsf/emacs18/amiga/unix/src/sprintf.asm Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/sprintf.asm Sat Sep 28 00:00:00 1996
@@ -0,0 +1,29 @@
+ XDEF __sprintf
+ XREF _AbsExecBase
+ XREF _LVORawDoFmt
+
+ csect text,0,,2,2
+
+__sprintf
+save equ 16
+ movem.l a2/a3/a6/d2,-(a7) ; save bytes copied to stack
+
+ move.l save+8(a7),a0
+ lea save+12(a7),a1
+ lea copychar(pc),a2
+ move.l save+4(a7),a3
+ move.l a3,d2
+
+ move.l _AbsExecBase,a6
+ jsr _LVORawDoFmt(a6)
+ move.l a3,d0 ; # of characters printed
+ sub.l d2,d0
+
+ movem.l (a7)+,a2/a3/a6/d2
+ rts
+
+copychar
+ move.b d0,(a3)+
+ rts
+
+ end
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/start.c amiga/fsf/emacs18/amiga/unix/src/start.c
--- baseline/fsf/emacs18/amiga/unix/src/start.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/start.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,118 @@
+#include "amiga.h"
+#include "processes.h"
+#include <amiga/ioctl.h>
+#include <exec/memory.h>
+#include <dos/dosextens.h>
+#include <dos/dostags.h>
+#include <string.h>
+
+/* Variables used by a child that is starting up */
+struct MemList *_child_entry; /* Memory used for child's code */
+static struct Message startup_message;
+struct exit_message *_child_exit;
+char *_child_command;
+int _child_command_len;
+char *_child_door_name;
+
+static void __saveds __interrupt _child_startup(void)
+{
+ struct exit_message *exit = _child_exit;
+ char *command = _child_command;
+ int command_len = _child_command_len;
+ char *door_name = _child_door_name;
+ struct Process *us = (struct Process *)FindTask(0);
+ struct DOSBase *local_DOSBase = DOSBase;
+#pragma libcall local_DOSBase local_SystemTagList 25E 2102
+ struct TagItem stags[2];
+ struct MsgPort *parent;
+
+ AddTail(&us->pr_Task.tc_MemEntry, _child_entry);
+
+ PutMsg(_startup_port, &startup_message);
+
+ /* From now on parent may disappear */
+ stags[0].ti_Tag = SYS_UserShell; stags[0].ti_Data = TRUE;
+ stags[1].ti_Tag = TAG_END;
+ exit->rc = local_SystemTagList(command, stags) << 8;
+
+ /* Send result to parent if he is around */
+ Forbid();
+ if (parent = FindPort(door_name)) PutMsg(parent, exit);
+ else FreeMem(exit, sizeof(struct exit_message));
+ Permit();
+
+ FreeMem(door_name, DOOR_LEN);
+ FreeMem(command, command_len);
+}
+
+int _start_process(char *command,
+ BPTR input, int close_input,
+ BPTR output, int close_output,
+ BPTR error, int close_error,
+ BPTR dir,
+ long stacksize)
+{
+ struct process *entry = (struct process *)malloc(sizeof(struct process));
+ static struct MemList alloc_child = { { 0 }, 1 };
+
+ _child_command_len = strlen(command) + 1;
+ _child_command = AllocMem(_child_command_len, MEMF_PUBLIC);
+ strcpy(_child_command, command);
+
+ _child_exit = AllocMem(sizeof(struct exit_message), MEMF_PUBLIC);
+ _child_door_name = AllocMem(DOOR_LEN, MEMF_PUBLIC);
+
+ alloc_child.ml_ME[0].me_Reqs = MEMF_PUBLIC;
+ alloc_child.ml_ME[0].me_Length = (char *)&_start_process - (char *)&_child_startup;
+ _child_entry = AllocEntry(&alloc_child);
+
+ if (entry && _child_command && _child_exit && _child_door_name &&
+ (long)_child_entry > 0)
+ {
+ memcpy(_child_entry->ml_ME[0].me_Addr, &_child_startup,
+ _child_entry->ml_ME[0].me_Length);
+ strcpy(_child_door_name, _door_name);
+
+ entry->pid = _next_pid++;
+ entry->input = input;
+
+ /* This message is sent by the child when it has started */
+ startup_message.mn_Length = sizeof(startup_message);
+ startup_message.mn_Node.ln_Type = NT_MESSAGE;
+
+ /* This message is sent by the child when it exits */
+ _child_exit->m.mn_Length = sizeof(*_child_exit);
+ _child_exit->m.mn_Node.ln_Type = NT_MESSAGE;
+ _child_exit->pid = entry->pid;
+
+ entry->process = CreateNewProcTags(NP_Entry, _child_entry->ml_ME[0].me_Addr,
+ NP_Input, input,
+ NP_CloseInput, (long)close_input,
+ NP_Output, output,
+ NP_CloseOutput, (long)close_output,
+ NP_Error, error,
+ NP_CloseError, (long)close_error,
+ dir ? NP_CurrentDir : TAG_IGNORE, dir,
+ NP_StackSize,
+ stacksize > 0 ? stacksize : _stack_size,
+ NP_Cli, TRUE,
+ TAG_END);
+ if (entry->process)
+ {
+ do WaitPort(_startup_port); while (!GetMsg(_startup_port));
+ entry->status = alive;
+ AddHead((struct List *)&_processes, (struct Node *)entry);
+ return entry->pid;
+ }
+ errno = convert_oserr(IoErr());
+ }
+ else errno = ENOMEM;
+
+ if (entry) free(entry);
+ if (_child_command) FreeMem(_child_command, _child_command_len);
+ if (_child_exit) FreeMem(_child_exit, sizeof(struct exit_message));
+ if (_child_door_name) FreeMem(_child_door_name, DOOR_LEN);
+ if ((long)_child_entry > 0) FreeEntry(_child_entry);
+
+ return -1;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/stat.c amiga/fsf/emacs18/amiga/unix/src/stat.c
--- baseline/fsf/emacs18/amiga/unix/src/stat.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/stat.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,96 @@
+#include "amiga.h"
+#include "fibstat.h"
+#include "dir_data.h"
+#include <sys/stat.h>
+#include <string.h>
+
+static int attach (char *dest, int dlen, char *dirname, char *name)
+{
+ char *dirnamep = dirname;
+
+ while (*dirnamep && --dlen > 0)
+ *dest++ = *dirnamep++;
+ /* Add '/' if `dirname' doesn't already end with it. */
+ if (dirnamep > dirname && dirnamep[-1] != '/' && dirnamep[-1] != ':' && --dlen > 0)
+ *dest++ = '/';
+
+ while (*name && --dlen > 0)
+ *dest++ = *name++;
+ *dest = 0;
+
+ return dlen > 0;
+}
+
+static struct FileInfoBlock fakefib;
+
+static int fakestat(int soft, char *name, struct stat *sbuf)
+{
+ /* See if we want information on the last file returned from readdir */
+ if (last_dir)
+ {
+ iDIR *last_info = (iDIR *)last_dir->dd_buf;
+
+ if (last_info->cdir == _get_cd() &&
+ attach(_temp_fname, FNAMESIZE - 1, last_info->dirname,
+ last_entry->entry.d_name) &&
+ strcmp(_temp_fname, name) == 0 &&
+ (soft || last_entry->type != ST_SOFTLINK))
+ {
+ if (last_entry->type == ST_LINKFILE || last_entry->type == ST_LINKDIR)
+ {
+ /* Find real block, this allows tar to detect hard links */
+ BPTR cd = CurrentDir(last_dir->dd_fd);
+ BPTR l = Lock(last_entry->entry.d_name, ACCESS_READ);
+
+ if (l)
+ {
+ Examine(l, &fakefib);
+ UnLock(l);
+ }
+ CurrentDir(cd);
+ }
+ else
+ fakefib.fib_DiskKey = last_entry->entry.d_ino;
+
+ fakefib.fib_NumBlocks = last_entry->numblocks;
+ fakefib.fib_Size = last_entry->size;
+ fakefib.fib_Date = last_entry->date;
+ fakefib.fib_DirEntryType = last_entry->type;
+ fakefib.fib_Protection = last_entry->protection;
+
+ _lfibstat(name, &fakefib, last_info->task, 0, sbuf);
+
+ return 1;
+ }
+ }
+ return 0;
+}
+
+int stat(char *name, struct stat *sbuf)
+{
+ chkabort();
+ if (fakestat(0, name, sbuf)) return 0;
+ return _fibstat(name, sbuf);
+}
+
+int lstat(char *name, struct stat *sbuf)
+{
+ chkabort();
+ if (fakestat(1, name, sbuf)) return 0;
+ if (readlink(name, _temp_fname, FNAMESIZE - 1) < 0) return _fibstat(name, sbuf);
+
+ /* Symbolic link, fake a stat block */
+ sbuf->st_dev = 0;
+ sbuf->st_rdev = 0;
+ sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
+ sbuf->st_blksize = 512;
+ sbuf->st_nlink = 1;
+ sbuf->st_blocks = 0;
+ sbuf->st_size = strlen(_temp_fname);
+ sbuf->st_ino = 0;
+ /* 1-Jan-1978 */
+ sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = 252460800;
+ sbuf->st_mode = S_IFLNK | 0777;
+
+ return 0;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/strftime.c amiga/fsf/emacs18/amiga/unix/src/strftime.c
--- baseline/fsf/emacs18/amiga/unix/src/strftime.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/strftime.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,291 @@
+/*
+ * Copyright (c) 1989 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)strftime.c 5.11 (Berkeley) 2/24/91";
+#endif /* LIBC_SCCS and not lint */
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <tzfile.h>
+#include <string.h>
+
+static char *afmt[] = {
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
+};
+static char *Afmt[] = {
+ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
+ "Saturday",
+};
+static char *bfmt[] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
+ "Oct", "Nov", "Dec",
+};
+static char *Bfmt[] = {
+ "January", "February", "March", "April", "May", "June", "July",
+ "August", "September", "October", "November", "December",
+};
+
+static size_t gsize;
+static char *pt;
+static int _add(), _conv(), _secs();
+
+size_t
+strftime(s, maxsize, format, t)
+ char *s;
+ size_t maxsize;
+ const char *format;
+ const struct tm *t;
+{
+ static size_t _fmt();
+
+ pt = s;
+ if ((gsize = maxsize) < 1)
+ return(0);
+ if (_fmt(format, t)) {
+ *pt = '\0';
+ return(maxsize - gsize);
+ }
+ return(0);
+}
+
+static size_t
+_fmt(format, t)
+ register char *format;
+ struct tm *t;
+{
+ for (; *format; ++format) {
+ if (*format == '%')
+ switch(*++format) {
+ case '\0':
+ --format;
+ break;
+ case 'A':
+ if (t->tm_wday < 0 || t->tm_wday > 6)
+ return(0);
+ if (!_add(Afmt[t->tm_wday]))
+ return(0);
+ continue;
+ case 'a':
+ if (t->tm_wday < 0 || t->tm_wday > 6)
+ return(0);
+ if (!_add(afmt[t->tm_wday]))
+ return(0);
+ continue;
+ case 'B':
+ if (t->tm_mon < 0 || t->tm_mon > 11)
+ return(0);
+ if (!_add(Bfmt[t->tm_mon]))
+ return(0);
+ continue;
+ case 'b':
+ case 'h':
+ if (t->tm_mon < 0 || t->tm_mon > 11)
+ return(0);
+ if (!_add(bfmt[t->tm_mon]))
+ return(0);
+ continue;
+ case 'C':
+ if (!_fmt("%a %b %e %H:%M:%S %Y", t))
+ return(0);
+ continue;
+ case 'c':
+ if (!_fmt("%m/%d/%y %H:%M:%S", t))
+ return(0);
+ continue;
+ case 'D':
+ if (!_fmt("%m/%d/%y", t))
+ return(0);
+ continue;
+ case 'd':
+ if (!_conv(t->tm_mday, 2, '0'))
+ return(0);
+ continue;
+ case 'e':
+ if (!_conv(t->tm_mday, 2, ' '))
+ return(0);
+ continue;
+ case 'H':
+ if (!_conv(t->tm_hour, 2, '0'))
+ return(0);
+ continue;
+ case 'I':
+ if (!_conv(t->tm_hour % 12 ?
+ t->tm_hour % 12 : 12, 2, '0'))
+ return(0);
+ continue;
+ case 'j':
+ if (!_conv(t->tm_yday + 1, 3, '0'))
+ return(0);
+ continue;
+ case 'k':
+ if (!_conv(t->tm_hour, 2, ' '))
+ return(0);
+ continue;
+ case 'l':
+ if (!_conv(t->tm_hour % 12 ?
+ t->tm_hour % 12 : 12, 2, ' '))
+ return(0);
+ continue;
+ case 'M':
+ if (!_conv(t->tm_min, 2, '0'))
+ return(0);
+ continue;
+ case 'm':
+ if (!_conv(t->tm_mon + 1, 2, '0'))
+ return(0);
+ continue;
+ case 'n':
+ if (!_add("\n"))
+ return(0);
+ continue;
+ case 'p':
+ if (!_add(t->tm_hour >= 12 ? "PM" : "AM"))
+ return(0);
+ continue;
+ case 'R':
+ if (!_fmt("%H:%M", t))
+ return(0);
+ continue;
+ case 'r':
+ if (!_fmt("%I:%M:%S %p", t))
+ return(0);
+ continue;
+ case 'S':
+ if (!_conv(t->tm_sec, 2, '0'))
+ return(0);
+ continue;
+ case 's':
+ if (!_secs(t))
+ return(0);
+ continue;
+ case 'T':
+ case 'X':
+ if (!_fmt("%H:%M:%S", t))
+ return(0);
+ continue;
+ case 't':
+ if (!_add("\t"))
+ return(0);
+ continue;
+ case 'U':
+ if (!_conv((t->tm_yday + 7 - t->tm_wday) / 7,
+ 2, '0'))
+ return(0);
+ continue;
+ case 'W':
+ if (!_conv((t->tm_yday + 7 -
+ (t->tm_wday ? (t->tm_wday - 1) : 6))
+ / 7, 2, '0'))
+ return(0);
+ continue;
+ case 'w':
+ if (!_conv(t->tm_wday, 1, '0'))
+ return(0);
+ continue;
+ case 'x':
+ if (!_fmt("%m/%d/%y", t))
+ return(0);
+ continue;
+ case 'y':
+ if (!_conv((t->tm_year + TM_YEAR_BASE)
+ % 100, 2, '0'))
+ return(0);
+ continue;
+ case 'Y':
+ if (!_conv(t->tm_year + TM_YEAR_BASE, 4, '0'))
+ return(0);
+ continue;
+ case 'Z':
+ if (!t->tm_zone || !_add(t->tm_zone))
+ return(0);
+ continue;
+ case '%':
+ /*
+ * X311J/88-090 (4.12.3.5): if conversion char is
+ * undefined, behavior is undefined. Print out the
+ * character itself as printf(3) does.
+ */
+ default:
+ break;
+ }
+ if (!gsize--)
+ return(0);
+ *pt++ = *format;
+ }
+ return(gsize);
+}
+
+static
+_secs(t)
+ struct tm *t;
+{
+ static char buf[15];
+ register time_t s;
+ register char *p;
+ struct tm tmp;
+
+ /* Make a copy, mktime(3) modifies the tm struct. */
+ tmp = *t;
+ s = mktime(&tmp);
+ for (p = buf + sizeof(buf) - 2; s > 0 && p > buf; s /= 10)
+ *p-- = s % 10 + '0';
+ return(_add(++p));
+}
+
+static
+_conv(n, digits, pad)
+ int n, digits;
+ char pad;
+{
+ static char buf[10];
+ register char *p;
+
+ for (p = buf + sizeof(buf) - 2; n > 0 && p > buf; n /= 10, --digits)
+ *p-- = n % 10 + '0';
+ while (p > buf && digits-- > 0)
+ *p-- = pad;
+ return(_add(++p));
+}
+
+static
+_add(str)
+ register char *str;
+{
+ for (;; ++pt, --gsize) {
+ if (!gsize)
+ return(0);
+ if (!(*pt = *str++))
+ return(1);
+ }
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/symlink.c amiga/fsf/emacs18/amiga/unix/src/symlink.c
--- baseline/fsf/emacs18/amiga/unix/src/symlink.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/symlink.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,14 @@
+#include "amiga.h"
+
+int symlink(char *from, char *to)
+{
+#ifdef SOFTLINK
+ chkabort();
+ if (MakeLink(to, from, 1)) return 0;
+ ERROR;
+#else
+ _OSERR = ERROR_NOT_IMPLEMENTED;
+ errno = EOSERR;
+ return -1;
+#endif
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/time.c amiga/fsf/emacs18/amiga/unix/src/time.c
--- baseline/fsf/emacs18/amiga/unix/src/time.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/time.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,12 @@
+#include "amiga.h"
+#include "timeconvert.h"
+
+time_t time(time_t *clock)
+{
+ struct timeval now;
+
+ if (_gettime(&now) < 0) return -1;
+ if (clock) *clock = now.tv_secs;
+
+ return (time_t)now.tv_secs;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/timeconvert.c amiga/fsf/emacs18/amiga/unix/src/timeconvert.c
--- baseline/fsf/emacs18/amiga/unix/src/timeconvert.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/timeconvert.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,94 @@
+#include "amiga.h"
+#include "timeconvert.h"
+#include <time.h>
+#include <proto/timer.h>
+
+int _gettime(struct timeval *tp)
+{
+ struct tm *local;
+ time_t gmt;
+
+ GetSysTime(tp);
+ /* Correct for different epoch (78 vs 70) */
+ tp->tv_secs += 252460800;
+
+#ifdef USE_LOCAL
+ /* correct for timezone */
+ local = gmtime(&tp->tv_secs);
+ local->tm_isdst = -1; /* We don't know about dst */
+ gmt = mktime(local);
+
+ if (gmt == -1)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ tp->tv_secs = gmt;
+#endif
+ return 0;
+}
+
+#ifdef USE_LOCAL
+
+/* System is storing local time */
+
+void _gmt2amiga(time_t time, struct DateStamp *date)
+{
+ struct tm *local, *gmt;
+
+ local = localtime(&time);
+ gmt = gmtime(&time);
+ date->ds_Tick = 50 * local->tm_sec;
+ date->ds_Minute = local->tm_min + local->tm_hour * 60;
+
+ /* Now calculate the day assuming we are in GMT */
+ date->ds_Days = (time - 252460800) / 86400;
+ /* And correct by comparing local with GMT */
+ if (local->tm_year < gmt->tm_year ||
+ local->tm_year == gmt->tm_year && local->tm_yday < gmt->tm_yday)
+ date->ds_Days--;
+ if (local->tm_year > gmt->tm_year ||
+ local->tm_year == gmt->tm_year && local->tm_yday > gmt->tm_yday)
+ date->ds_Days++;
+}
+
+time_t _amiga2gmt(struct DateStamp *date)
+{
+ struct tm *local;
+ time_t secs;
+
+ secs = date->ds_Tick / 50 + date->ds_Minute * 60 + date->ds_Days * 86400 +
+ 252460800;
+ local = gmtime(&secs);
+ local->tm_isdst = -1; /* We don't know about dst */
+
+ return mktime(local);
+}
+
+#else
+
+/* System is storing GMT */
+/* Leap seconds are not handled !! */
+
+void _gmt2amiga(time_t time, struct DateStamp *date)
+{
+ time_t time78, day_secs;
+
+ time78 = time - 252460800; /* Change Epoch */
+ date->ds_Days = time78 / 86400;
+ day_secs = time78 % 86400;
+ date->ds_Minute = day_secs / 60;
+ date->ds_Tick = 50 * (day_secs % 60);
+}
+
+time_t _amiga2gmt(struct DateStamp *date)
+{
+ time_t secs;
+
+ secs = date->ds_Tick / 50 + date->ds_Minute * 60 + date->ds_Days * 86400 +
+ 252460800;
+
+ return secs;
+}
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/timeconvert.h amiga/fsf/emacs18/amiga/unix/src/timeconvert.h
--- baseline/fsf/emacs18/amiga/unix/src/timeconvert.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/timeconvert.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,27 @@
+#ifndef TIMECONVERT_H
+#define TIMECONVERT_H
+
+#include <time.h>
+
+int _gettime(struct timeval *tp);
+/* Effect: Store GMT time into tp.
+ If USE_LOCAL is defined, assume system stores local time,
+ otherwise it stores GMT.
+*/
+
+void _gmt2amiga(time_t time, struct DateStamp *date);
+/* Effect: Converts a time expressed in seconds since
+ the 1 January 1970 0:00:00 GMT, to an Amiga time.
+ If USE_LOCAL is defined, Amiga time is assumed to
+ be stored as local time, otherwise as GMT.
+ Modifies: date, to contain the time in Amiga format
+*/
+
+time_t _amiga2gmt(struct DateStamp *date);
+/* Effect: Convert a date expressed in Amiga format (as a
+ local time if USE_LOCAL is defined, as GMT otherwise)
+ to a number of seconds since 1 January 1970 0:00:00 GMT.
+ Returns: this latter time
+*/
+
+#endif
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/timers.c amiga/fsf/emacs18/amiga/unix/src/timers.c
--- baseline/fsf/emacs18/amiga/unix/src/timers.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/timers.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,72 @@
+#include "amiga.h"
+#include "devices.h"
+#include "timers.h"
+
+struct timeinfo *_alloc_timer(void)
+{
+ struct timeinfo *timer = AllocMem(sizeof(struct timeinfo), 0);
+
+ if (!timer) return 0;
+ timer->sent = FALSE;
+ timer->io = (struct timerequest *)
+ _device_open("timer.device", UNIT_VBLANK, 0L, 0L, 0, sizeof(struct timerequest));
+ if (!timer->io)
+ {
+ FreeMem(timer, sizeof(struct timeinfo));
+ return 0;
+ }
+ return timer;
+}
+
+void _free_timer(struct timeinfo *timer)
+{
+ if (timer)
+ {
+ _timer_abort(timer);
+ _device_close(timer->io);
+ FreeMem(timer, sizeof(struct timeinfo));
+ }
+}
+
+void _timer_abort(struct timeinfo *timer)
+{
+ if (timer->sent)
+ {
+ AbortIO(timer->io);
+ WaitIO(timer->io);
+ /* Clear timer io signal */
+ /*SetSignal(0, timer_sig(timer));*/
+ timer->sent = FALSE;
+ }
+}
+
+ULONG _timer_sig(struct timeinfo *timer)
+{
+ return 1UL << timer->io->tr_node.io_Message.mn_ReplyPort->mp_SigBit;
+}
+
+void _timer_start(struct timeinfo *timer, int secs, int micros)
+/* _timer_start(timer, 0) stops a timer */
+{
+ _timer_abort(timer);
+ if (secs || micros)
+ {
+ timer->io->tr_time.tv_secs = secs;
+ timer->io->tr_time.tv_micro = micros;
+ timer->io->tr_node.io_Command = TR_ADDREQUEST;
+ SendIO(timer->io);
+ timer->sent = TRUE;
+ }
+}
+
+int _timer_expired(struct timeinfo *timer)
+/* A non-started timer is defined to not have expired */
+{
+ if (timer->sent && CheckIO(timer->io))
+ {
+ WaitIO(timer->io);
+ timer->sent = FALSE;
+ return TRUE;
+ }
+ return FALSE;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/tmpnam.c amiga/fsf/emacs18/amiga/unix/src/tmpnam.c
--- baseline/fsf/emacs18/amiga/unix/src/tmpnam.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/tmpnam.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,13 @@
+#include "amiga.h"
+#include <string.h>
+#include <stdio.h>
+
+char *tmpnam(char *s)
+{
+ static char tmpbuf[L_tmpnam];
+
+ if (!s) s = tmpbuf;
+
+ strcpy(s, P_tmpdir "tmp_XXXXXX");
+ return mktemp(s);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/truncate.c amiga/fsf/emacs18/amiga/unix/src/truncate.c
--- baseline/fsf/emacs18/amiga/unix/src/truncate.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/truncate.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,21 @@
+#include "amiga.h"
+#include "amigaos.h"
+
+int truncate(char *path, off_t length)
+{
+ BPTR fh = Open(path, MODE_OLDFILE);
+ int err;
+
+ chkabort();
+ if (fh)
+ {
+ int ret = _do_truncate(fh, length);
+
+ if (Close(fh) || ret) return ret;
+ err = IoErr();
+ }
+ else err = IoErr();
+
+ errno = convert_oserr(err);
+ return -1;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/uid.c amiga/fsf/emacs18/amiga/unix/src/uid.c
--- baseline/fsf/emacs18/amiga/unix/src/uid.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/uid.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,4 @@
+#include "amiga.h"
+
+uid_t getuid(void) { return AMIGA_UID; }
+uid_t geteuid(void) { return AMIGA_UID; }
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/umask.c amiga/fsf/emacs18/amiga/unix/src/umask.c
--- baseline/fsf/emacs18/amiga/unix/src/umask.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/umask.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,3 @@
+#include "amiga.h"
+
+int umask(int mask) { return 0; }
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/unix-hard.lib.uue amiga/fsf/emacs18/amiga/unix/src/unix-hard.lib.uue
--- baseline/fsf/emacs18/amiga/unix/src/unix-hard.lib.uue Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/unix-hard.lib.uue Sat Sep 28 00:00:00 1996
@@ -0,0 +1,1186 @@
+begin 666 unix-hard.lib
+M```#^@``*UH```/I````"2!O``0@UTC0_/QP`$YU(&\`!"`O``AF`G`!(EA,
+MT/S\6(].T0```_(```/I````#$CG(#(@;P`80^\`'$7Z`!PF;P`4)`LL>0``
+M``!.K@``(`N0@DS?3`1.=1;`3G4``````^^!```#7T%B<T5X96-"87-E````
+M`0```!B&```#7TQ63U)A=T1O1FUT`````0```!X````````#\@```^D````*
+M(&\`!"\-*D@@#68$2^P``$'L```B31+89OPO#4ZZ``!83RI?3G4``````_@`
+M```!`````0```!(````!`````@````X````````#[X,```)?;6MT96UP````
+M``$````>`````````_$````#`````$]05%,`!`!````#\@```^H````$=#IT
+M;7!?6%A86%A8`````````_(```/K````"0```_(```/I````;R!O``0B;P`(
+MGOP`($CG+Q8F22](`"`O20`D<`Q.N@``*D`@+```4JP``"(L``#2@"\!2&P`
+M`$AO`#!.N@``3^\`#'!WL!-F-DHK``%F,$'O`"A#[``03KH``"9`+&P``$ZN
+M_\0N`'P`0>\`*"(()#P```/M3J[_XBH`>`%@1G!RL!-F-DHK``%F,$'O`"A#
+M[``23KH``"9`+&P``$ZN_\HJ`'@`0>\`*"(()#P```/N3J[_XBX`?`%@"G`6
+M*4```&```(Q*A6<$2H=F!$ZZ```@"V="2H5G/DJ'9SH@#6<V<``O`"\`+P!(
+M>/__+P8O!R`%(@0@;P`X3KH``$_O`!@K0``(9Q`JK```*4T``"M+``0@"V`Z
+M(`UG!B!-3KH``$J%9PY*A&<*(@4L;```3J[_W$J'9PY*AF<*(@<L;```3J[_
+MW"`+9P8@2TZZ``!P`$S?:/3>_``@3G4@;P`$44](YP$T)DA+[```+T@`$&`Z
+M(&H`!+'+9C`F52XK``@JDR!K``1.N@``($M.N@``0J=(;P`8+P=.N@``3^\`
+M#$J`:PX@+P`48`HJ2B15(`IFP'#_3-\L@%!/3G4``````_@````#`````0``
+M`)````!4````-`````,````"```!:````0P```$(`````````^^#```"0&UA
+M;&QO8P`````!````'H8```1?7V9I9F]?;V9F<V5T`````````@```"@````D
+MA@```U]?9FEF;U]B87-E``````$````L@P```U]?<W!R:6YT9@````````$`
+M```\@P```D!F;W!E;@```````@```)0```!8A@```E]$3U-"87-E````!```
+M`3X```$L````F@```%Z&```"7V5R<FYO```````!````OH,```)`7W-E=&5R
+M<@````$```#.@P``!$!?<W1A<G1?<')O8V5S<P`````!````^H,```)`9G)E
+M90````````(```&,```!'H,```)`9F-L;W-E``````(```&&```!3(,```)?
+M=V%I='!I9`````$```&8`````````_$````#`````$]05%,`!`!````#\@``
+M`^H````%<&EP93IU>&]P96XN)6QX`'<`<@````/R```#ZP````$```/R```#
+MZ0```,6>_``82.<A/DGY`````$7L`!@J6B!:+AHF;``D+T@`()/)+'@`!$ZN
+M_MHD;```($!#Z`!*($DB;```3J[_"B!L``!#[``$3J[^DD/O`"0B_(```"1P
+M`2+`0IDB+P`@0>\`)"0(+$I.KOVBX8`K0``8+'@`!$ZN_WPB2TZN_GI*@&<*
+M($`B34ZN_I)@"")-<!Q.KO\N3J[_=B)+<"!.KO\N(F\`("`'3J[_+DS??(3>
+M_``82H!.=2!O``0@+P`((B\`#"]O`!``!"]O`!0`""]O`!@`#"]O`!P`$"]O
+M`"``%"]O`"0`&%E/2.</%BHO`#@L+P`T+@`J2"]!`!QP'$ZZ```F0"!-2AAF
+M_%.(D<T@"%*`*4``('(!+'@`!$ZN_SHI0``<(D`2W6;\<!QR`4ZN_SHI0``8
+M<"!R`4ZN_SHI0``D<`$I0``00?K_G"`(0_K^L)")*4``%$'L``!.KO\B*4``
+M`"(+9P`!2DJL`!QG``%"2JP`&&<``3I*K``D9P`!,DJ`;P`!+"!L```@*``4
+M0?K^;B)L```B:0`08`(2V%.`9/I![```(FP`)!+89OP@+```4JP``"=```PG
+M1P`03>P`%CS\`!1P!1E```P@5C%\`!P`$A%```@@7B%K``P`%"`\@``#\DJ&
+M9@)P`2@`2H5O!"`%8`0@+```0J=(>``!+SR```/Z+P`O/(```_,O!B\$+R\`
+M3"\\@``#\2\O`%`O/(```_`O+P!4+SR```/O+R\`6"\\@``#[2\O`%@O/(``
+M`^XO!R\\@``#["!L```O*``0+SR```/K+&P``"(/3J[^#D_O`%0G0``(9S0@
+M;```+'@`!$ZN_H`@;```+'@`!$ZN_HQ*@&?D0JL`%$'L```B2RQX``1.KO\0
+M("L`#&!H+&P``$ZN_WQ.N@``8`)P#"E````@"V<&($M.N@``("P`'&<.(D`@
+M+``@+'@`!$ZN_RX@+``89PPB0'`<+'@`!$ZN_RX@+``D9PPB0'`@+'@`!$ZN
+M_RX@+```;PH@0"QX``1.KO\<</],WVCP6$].=0```_@````#`````0```5H`
+M``%6```!1@```!<````"```"_````NH```+8```"S````L0```)0```!S```
+M`<(```&J```!E@```8H```%\```!=````6P```%B```!0````30```$B```!
+M%````$0````X````&@```!`````````#[X$```-?3&EN:V5R1$(````````!
+M````"H8```)?1$]30F%S90````,```*F```"7@```"R&```$7U]S=&%R='5P
+M7W!O<G0```````,```)^```"<@```$"#```"0&UA;&QO8P`````!```!`(8`
+M``-?7V1O;W)?;F%M90`````!```!IH8```-?7VYE>'1?<&ED```````"```!
+MM@```;*&```#7U]S=&%C:U]S:7IE`````0```?J&```#7U]P<F]C97-S97,`
+M`````0```I*#```$0&-O;G9E<G1?;W-E<G(```````$```*NA@```E]E<G)N
+M;P```````0```K:#```"0&9R964````````!```"P`````````/Q`````P``
+M``!/4%13``0`0````_(```/J````!@````````````````````$`````````
+M`````_(```/K````"@```_(```/I`````TZZ```@+```3G4``````^^#```#
+M0&-H:V%B;W)T`````````0````*&```#7U]O=7)?<&ED`````````0````8`
+M```````#\0````,`````3U!44P`$`$````/R```#Z0```",@+P`$(&\`"")O
+M``Q(YP$4+@`F22I(3KH``'`!OH!M+'`@OH!L)B`+9PX@!^>`0^P``-/`)MDF
+MV2`-9PSGAT'L``#1QR#=(-UP`&`(<!8I0```</],WRB`3G4@+P`$(&\`")[\
+M`!`O2``(0J\`#$'O``A#UV&62H!G"#!\__\@"&`"(!?>_``03G4``````^^#
+M```#0&-H:V%B;W)T`````````0```!B&```$7U]S:6=?:&%N9&QE<G,`````
+M``(```!`````,(8```)?97)R;F\```````$```!0`````````_$````#````
+M`$]05%,`!`!````#\@```^D````5("\`!$CG#P`N`"PL``!.N@``*4<``'H`
+M>`$@+```P(1G#B`L``#`A&8&(`5.N@``4H78A'`@NH!MX"`&3-\`\$YU("\`
+M!"\'(@`@+```@($N'V"P```#[X8```-?7W-I9U]M87-K```````$````3```
+M`"0````4````#(,```-`8VAK86)O<G0````````!````$(8```1?7W-I9U]P
+M96YD:6YG`````````0```!R#```$0%]S:6=?9&ES<&%T8V@```````$````N
+M`````````_$````#`````$]05%,`!`!````#\@```^D```":(&\`!"`O``@B
+M;P`,+V\`$``$64](YR$T+@`F;P`<*D@D22])`!1@`AK:2A)G!%.';O:U[P`4
+M8QH0*O__<B^P`6<0=#JP`F<*4X=O!AK!8`(:VTH39P13AV[V0A5*AU[`1`!(
+M@$C`3-\LA%A/3G4@+P`$(&\`"")O``Q93TCG)S8N`"I(+TD`($JL``!G``#^
+M(&P``"9H``Q.N@``(BL`!+*`9@``Z"!L``!(:``L0>P``")3<`!&`&$`_UA8
+M3TJ`9P``RD'L```B31`8L!EF``"\2@!F]&8``+1*AV80(&P``"`H`!AR`["!
+M9P``H"!L```@*``8<ORP@6<$68!F/B)L```B$2QL``!.KO^"+``@;```T/P`
+M+"((=/Y.KO^L*@!G$B(%0>P``"0(3J[_FB(%3J[_IB(&3J[_@F`&*6@`(```
+M(&P``"EH``0`@"EH``@`?$/H``Q%[`"$)-DDV239(&P``"EH`!@`!"EH`!P`
+M="\O`"`O*P$8($U#[```<`!.N@``4$]P`6`"<`!,WVSD6$].=2!O``0B;P`(
+M2.<`%"9)*DA.N@``($TB2W``80#^R$J`9P1P`&`,($TB2TS?*`!.^@``3-\H
+M`$YU(&\`!")O``A(YP`4)DDJ2$ZZ```@32)+<`%A`/Z02H!F<$AX`/](;```
+M+PU.N@``3^\`#$J`:@P@32)+3-\H`$[Z``!+TT*=0JL`$G`!-T``#D)K`!`G
+M?````@``,C=```Q"JP`V0>P``")(2AEF_%.)D\@G20`60IT@/`\,/P`G0``B
+M)T``&B=``"HJ_```H?]P`$S?*`!.=0```_@````(`````0```7X```%P```!
+M:@```5H```%2```!3````4(```$H`````````^^&```#7VQA<W1?9&ER````
+M`````P```0(```"2````BH,```)`7V=E=%]C9`````$```":A@```U]L87-T
+M7V5N=')Y``````8```%D```!1@```1(```#P````X````*B&```#7U]T96UP
+M7V9N86UE````!````C8```'V````Q@```+"&```"7T1/4T)A<V4````!```!
+M"(,```-`7VQF:6)S=&%T```````!```!A(,```-`8VAK86)O<G0````````"
+M```!X````:B#```#0%]F:6)S=&%T`````````@```A````'&@P```U]R96%D
+M;&EN:P````````$```'\`````````_$````#`````$]05%,`!`!````#\@``
+M`^L```!!```#\@```^D```#0(&\`!%E/2.<`%"](``@@;P`(*F@!#&`*)E4@
+M34ZZ```J2R`-9O),WR@`6$].=2!O``2>_``02.<@-BI()FT`#$/K`0PO2``<
+M+TD`("!+8;1"K```0JL!#$*M``0@%>6`($`G:``,`1A!ZP`(+T@`&&```)Y!
+MZP`0(DA*&6;\4XF3R"`)D<C0_``L<@`R`-*(4H%T`#0!/T``%C]!`!0@`DZZ
+M```D0$J`9@9P#&```)Q-TD*>(&\`(""*+U``("SK`(@LZP"$0>L`C$/J``PB
+MV"+8(M@E:P`,`!@E:P!\`!Q+Z@`@.V\`%``$.V\`%@`&(&\`'"`H``12J``$
+M*T``"$'J`"Q#ZP`0$-EF_"JK``@J;P`<(A4D+P`8+&P``$ZN_Y1*@&8`_TXG
+M:P$,`1!"K0`$+&P``$ZN_WQR=-*!L(%F!'`!8`I.N@``*4```'``3-]L!-[\
+M`!!.=2!O``193TCG(#8O2``4<!!.N@``*D!P1^6(3KH``"9`(&\`%"`(2AAF
+M_%.(D<`@"%*`3KH``"1`3KH``"`-9P``@B`*9WP@"V=X*TL`#"M\```!'``(
+MD<@G2`$0)T@!#"=(`10FBB!O`!04V&;\3KH``"=```0B+P`4+&P``'3^3J[_
+MK"J`9R)!ZP`((@`D""QL``!.KO^:2H!G#B!-80#^.$J`9Q0@#6`^+&P``$ZN
+M_WQ.N@``*4```"!-80``-F`D<`PI0```(`UG!B!-3KH``"`*9P8@2DZZ```@
+M"V<&($M.N@``<`!,WVP$6$].=2!O``1(YP`6*D@F;0`,3KH``$*L```@2V$`
+M_:`@4TZZ```@%6<*(@`L;```3J[_IB!M``Q.N@``($U,WV@`3OH``"!O``19
+M3TCG`S0O2``4(&\`%"IH``R7RTZZ``!*K0$49R1^`"1M`0P@;P`4+"@`!&`$
+M4H<D4KZ&;`0@"F;T*TH!$$*M`10@+0$09R(F0-;\`"`I;P`4``!%[0$0(%(I
+M2```(%(DT"!O`!12J``$(`M,WRS`6$].=2!O``0O#2I(3KH``"`M``0J7TYU
+M(&\`!"`O``A(YP$4+@`J2"9M``Q.N@``<`$G0`$4*T<`!$S?*(!.=0```^^#
+M```"0&9R964````````'```"B@```H````)J```"/@```C0```(J````'H8`
+M``-?;&%S=%]D:7(````````#```"X@```EX```!2@P```D!M86QL;V,`````
+M!````8X```%V```!;````**&```"7T1/4T)A<V4````&```"=````@8```'L
+M```!U@```30```$<@P``!$!C;VYV97)T7V]S97)R```````"```"#@```4B&
+M```"7V5R<FYO```````#```"(````A(```%,@P```T!C:&MA8F]R=```````
+M``4```,N```##@```J8```):```!E(,```)`7V=E=%]C9`````$```'*A@``
+M`U]L87-T7V5N=')Y``````$```+L`````````_$````#`````$]05%,`!`!`
+M```#\@```^D````(2.<!`BQL``!R`$ZN_X(N`"(`3J[_@B`'3-]`@$YU````
+M``/OA@```E]$3U-"87-E`````0````8````````#\0````,`````3U!44P`$
+M`$````/R```#ZP````(```/R```#Z0```!L@;P`$("\`")[\`$1(YP,$+@`J
+M2'S_3KH``"!-0^\`#DZZ``!*@&8D<!#`KP`6YH!R4.6)PJ\`%NR!@H#"A[*'
+M9@1\`&`&<`TI0```(`9,WR#`WOP`1$YU(&\`!"`O``A(YP$$3-\@@&">````
+M``/O@P```T!C:&MA8F]R=`````````$````8@P```T!?9FEB<W1A=```````
+M``$````BA@```E]E<G)N;P```````0```$H````````#\0````,`````3U!4
+M4P`$`$````/R```#Z0```$$@+P`$(&\`"%E/2.<G%BX`*DA.N@``2&\`'$AX
+M"`$O!TZZ``!/[P`,4H!F!G#_8```RD*G+&P``'(")`].KO\<3^\`!"9`2H!G
+M+"(O`!PD"TZN_GI*0&<>("\`'.6`+PT@0"\H``@B0G``D<A.N@``4$]\`&!@
+M3J[_?"H`<BY&`;"!9D9\`"`O`!SE@"!`*J@`"$WM``1"GBS\```A_W`!/,`\
+MP$)>*WP```(``#)"K0`V0JT`%B`\#PP_`"M``"(K0``:*T``*F`,?/\@!4ZZ
+M```I0```(`MG#"0++&P``'("3J[_%DAO`!Q(>`@"+P=.N@``3^\`#"`&3-]H
+MY%A/3G4``````^^#```#0&-H:V%B;W)T`````````0```!2#```"7VEO8W1L
+M```````"````\@```"*&```"7T1/4T)A<V4````"````W@```#:#```#0%]L
+M9FEB<W1A=````````0```&Z#```$0&-O;G9E<G1?;W-E<G(```````$```#0
+MA@```E]E<G)N;P```````0```-0````````#\0````,`````3U!44P`$`$``
+M``/R```#Z0````X@;P`$(F\`"$CG,!8F22I(3KH``"(+)`TL;```=@%.KOY$
+M2H!G!'``8`9.N@``</],WV@,3G4``````^^#```#0&-H:V%B;W)T````````
+M`0```!*&```"7T1/4T)A<V4````!````&H,```)`7W-E=&5R<@````$````L
+M`````````_$````#`````$]05%,`!`!````#\@```^D````^(&\`!")O``A9
+M3TCG,S8J2'X`(&P``"PH`.`O20`@2H9F($JL``!F&D'L`!@B""QL```D/```
+M`^U.KO_B+`!G`GX!2H9G-B(&0>P`(B0(0>P``"8(+&P``$ZN_IXB!B0-)B\`
+M($ZN_IXB!G0*3J[^R$J'9U@B!DZN_]Q@4"!L```F:`"X,'S__[?(9T!#[``H
+M<"4L>``$3J[]V"1`2H!G+"EL````#"E-`!`O"B!++$I#[``$E<HF;P`D3J[]
+MM$S?!``B2BQX``1.KOYB3-]LS%A/3G4@;P`$0^\`"&$`_RI.=2!O``1#[P`(
+M80#_''`43KH``$YU``````/X````!@````$```"R````J````*0```".````
+M2@```"H````````#[X8```%?7W5S`````@```'X````4A@```U]?5T)E;F-H
+M37-G``````$````DA@```E]$3U-"87-E`````@```%8````PA@``!%]?4')O
+M9W)A;4YA;64````````"````H@```%"#```"0&5X:70````````!````\@``
+M``````/Q`````P````!/4%13``0`0````_(```/J````#T]K```````4````
+M`````````````````&-O;G-O;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R
+M>0```````^P````!`````0```!0````````#\@```^D````'2.<@`B(O``Q!
+M[P`0)`@L;```3J[_'$S?0`1.=0```^^&```"7T1/4T)A<V4````!````$```
+M``````/Q`````P````!/4%13``0`0````_(```/I````#R!O``0O#2I(*JP`
+M`$'M``0J7T[Z```@;P`$("\`"$CG`00N`"I((!5.N@``0>T`!"`'3-\@@$[Z
+M`````````^^&```#7U]S:6=?;6%S:P```````0````J#```"0%]S971J;7``
+M```!````%(,```-`<VEG<V5T;6%S:P`````!````*H,```-`7VQO;F=J;7``
+M```````!````.`````````/Q`````P````!/4%13``0`0````_(```/I````
+M!R!O``0@+P`(+P`O+```+PA.N@``3^\`#'``3G4```/OA@``!%]?<WES=&5M
+M7VYA;64````````!````#(,```)?<W1R;F-P>0````$````2`````````_$`
+M```#`````$]05%,`!`!````#\@```^D````I(&\`!)[\`%1(YS@6*D@@#6<D
+M2A5G("!-2AAF_%.(D<TB""!-<`).N@``0>P``'`"(@!.N@``("P``&\2L*P`
+M`&X,Y8!![```)G`(`&`L4H!F)"(L``!![P`;)@@L;```=`!X44ZN_BQ*0&<$
+M)D-@"D?L``1@!$?L``@@2TH89OQ3B)'+(@@@2W`"3KH``$'L`!QP`G(!3KH`
+M`$S?:!S>_`!43G4```/X````!`````$```"0````>````'(````L````````
+M`^^#```"0'=R:71E```````$````F````(P````T````*(8```)?97)R;F\`
+M``````$````XA@```U]S>7-?;F5R<@````````$````^A@```U]S>7-?97)R
+M;&ES=`````$```!&A@```E]?3U-%4E(``````0```%2&```"7T1/4T)A<V4`
+M```!````7@````````/Q`````P````!/4%13``0`0````_(```/J````"#H@
+M```T,@``56YK;F]W;B!E<G)O<B!C;V1E```*```````#\@```^D````````#
+M\0````,`````3U!44P`$``````/R```#Z@```,9N;R!S:6=N86P`:&%N9W5P
+M``!I;G1E<G)U<'0`<75I=```:6QL96=A;"!I;G-T<G5C=&EO;@!T<F%C92!T
+M<F%P``!A8F]R=`!E;70@:6YS=')U8W1I;VX`9FQO871I;F<@<&]I;G0@97AC
+M97!T:6]N``!K:6QL``!B=7,@97)R;W(`<V5G;65N=&%T:6]N('9I;VQA=&EO
+M;@``8F%D(&%R9W5M96YT('1O('-Y<W1E;2!C86QL`'=R:71E(&]N(&$@<&EP
+M92!W:71H(&YO(&]N92!T;R!R96%D(&ET``!A;&%R;2!C;&]C:P!S;V9T=V%R
+M92!T97)M:6YA=&EO;B!S:6=N86P@9G)O;2!K:6QL`'-T871U<R!S:6=N86P`
+M<V5N9&%B;&4@<W1O<"!S:6=N86P@;F]T(&9R;VT@='1Y`'-T;W`@<VEG;F%L
+M(&9R;VT@='1Y``!C;VYT:6YU92!A('-T;W!P960@<')O8V5S<P``8VAI;&0@
+M<W1A='5S(&AA<R!C:&%N9V5D``!B86-K9W)O=6YD(')E860@871T96UP=&5D
+M(&9R;VT@8V]N=')O;"!T='D``&)A8VMG<F]U;F0@=W)I=&4@871T96UP=&5D
+M(&9R;VT@8V]N=')O;"!T='D`:6YP=70@<F5C;W)D(&%V86EL86)L92!A="!C
+M;VYT<F]L('1T>0!E>&-E961E9"!#4%4@=&EM92!L:6UI=`!E>&-E961E9"!F
+M:6QE('-I>F4@;&EM:70``'5N:VYO=VX@<VEG;F%L``!U;FMN;W=N('-I9VYA
+M;```=VEN9&]W(&-H86YG960``'5N:VYO=VX@<VEG;F%L``!U<V5R('-I9VYA
+M;"`Q`'5S97(@<VEG;F%L(#(```````````H````2````'````"(````V````
+M0@```$@```!8````<@```'@```""````F@```+8```#>````Z@```1````$>
+M```!0````58```%R```!C````;@```'D```""@```B(```(\```"3````EP`
+M``)L```"?````HH```/L````(`````$```,4```#$````PP```,(```#!```
+M`P````+\```"^````O0```+P```"[````N@```+D```"X````MP```+8```"
+MU````M````+,```"R````L0```+````"O````K@```*T```"L````JP```*H
+M```"I````J````*<```"F`````````/R```#Z0```#H@+P`$(&\`""(O``PB
+M;P`064](YP<4+`$N`"I(+TD`%'H`)FP``&`N2H=G""`K``R^@&8@>@%P`;"K
+M`!1F%BHK``P@#6<$*JL`&"!+3KH``"`%8"HF4TJ39LX(!@``9P1P`&`:2H5F
+M"G`**4```'#_8`QP`$ZZ``!.N@``8*),WRC@6$].=2!O``0@+P`((F\`#$CG
+M`10B`'``3-\H@&``_W`@;P`$+PUP`"(`D\DJ7V``_UX@+P`$(&\`""(O``Q(
+MYP,$+`$N`"I(4H!F`GX`2H=J`D2'(`<B!B!-D\E,WR#`8`#_+``````#[X8`
+M``-?7W!R;V-E<W-E<P`````!````)(,```-`7V9R965?96YT<GD````!````
+M3H8```)?97)R;F\```````$```!L@P``!$!?=V%I=%]S:6=N86QS```````!
+M````=H,```1`7VAA;F1L95]S:6=N86QS`````0```'H````````#\0````,`
+M````3U!44P`$`$````/R```#Z0```!(@+P`$44](YP,`+@!.N@``(`=.N@``
+M2H!G(B)`(&D`'"](``P@:0`$<`$B;P`,3I$L`"`'3KH``"`&8`)P_TS?`,!0
+M3TYU``````/O@P```T!C:&MA8F]R=`````````$````.@P```T!?9FEN9%]F
+M9`````````$````4@P```T!?9G)E95]F9`````````$````V`````````_$`
+M```#`````$]05%,`!``````#\@```^D````#(&\`!"`O``A.^@`````#[X,`
+M``)`<W1R<F-H<@````$````*`````````_$````#`````$]05%,`!``````#
+M\@```^D````#(&\`!"`O``A.^@`````#[X,```)`<W1R8VAR``````$````*
+M`````````_$````#`````$]05%,`!``````#\@```^D```!-2.<`!G`(<@`L
+M>``$3J[_.BI`2H!F!'``8"Y"K0`$2'@`*'``+P!![```<@&3R<%!3KH``%!/
+M*H!F#")-<`A.KO\N<`!@`B`-3-]@`$YU(&\`!$CG``8J2"`-9Q@@36$``!X@
+M54ZZ```B37`(+'@`!$ZN_RY,WV``3G4@;P`$2.<`!BI(2JT`!&<4(E4L>``$
+M3J[^(")53J[^)D*M``1,WV``3G4@;P`$(%`B:``.<``0*0`/<@'AH2`!3G4@
+M;P`$("\`""(O``Q(YP,&+`$N`"I(8:I*AV8$2H9G'B)5(T<`("-&`"0S?``)
+M`!PL>``$3J[^,G`!*T``!$S?8,!.=2!O``1(YP`&*DA*K0`$9QPB52QX``1.
+MKOXL2D!G#B)53J[^)D*M``1P`6`"<`!,WV``3G4```/X`````0````$````H
+M`````````^^#```$0%]D979I8V5?;W!E;@````````$````R@P``!$!?9&5V
+M:6-E7V-L;W-E```````!````9@````````/Q`````P````!/4%13``0`0```
+M`_(```/J````!'1I;65R+F1E=FEC90````````/R```#Z0```!XO#B`L```B
+M`$A!0D'2@"`L``"S@"E```1"K``(0^P`!'``+'@`!$ZN_=@I0```</].KOZV
+M2(!(P"E```!*K```9PA*@&L$<`%@`G``*4``#"Q?3G4O#B`L``!K""QX``1.
+MKOZP("P``&<*(D`L>``$3J[^8BQ?3G4```/X`````P````$```!8````.@``
+M`!X````&`````@```&8```!.````/@```"P````:````%@````````/OA@``
+M!%]?<W1A<G1U<%]T:6UE```````!````!(8```%?7W5S`````0```!``````
+M```#\0````,`````3U!44P`$`$````/R```#Z@````7_____9FEF;RYL:6)R
+M87)Y`````````_(```/K````!````_(```/I````%B`O``113TCG`P`N`$ZZ
+M```@!TZZ``!*@&<H(D`@:0`<<D#EB<*1+T@`#"`!(&D`!")O``Q.D2P`(`=.
+MN@``(`9@`G#_3-\`P%!/3G4@+P`$+P<N'V"N``````/O@P```T!C:&MA8F]R
+M=`````````$````.@P```T!?9FEN9%]F9`````````$````4@P```T!?9G)E
+M95]F9`````````$````\`````````_$````#`````$]05%,`!``````#\@``
+M`^D```!B(&\`!"`O``@B;P`,+V\`$``$+V\`%``(+V\`&``,+V\`'``0+V\`
+M(``4+V\`)``844](YP<4+@!([P,``!1\`"IL``!@%DJM``1F"C!\``$K2``$
+M8`Q2AMK\`"2\K``$;>0@+``$O(!F>'(*TZP`!"`L``0B`.>!TH#E@2`!3KH`
+M`"I`2H!F#'`,*4```'#_8```CG#VT*P`!"(`YX'2@.6!(&P``")-8`(2V%.!
+M9/H@+```9P8@0$ZZ```I30``>O;:K``$(`7G@-"%Y8#;P)?+*TL`!%*%VOP`
+M)+JL``1M\"`&YX#0AN6`(&P``"&O`!0(!"&'"``AKP`8"`A+[P`@(9T(#"&=
+M"!`AG0@42^\`+"&="!@AG0@<(9T(("`&3-\HX%!/3G4@+P`$(@!K%K*L``1L
+M$"`!YX#0@>6`(&P``$*P"`1.=2`O``1(YP$$+@!K'KZL``1L&"`'YX#0A^6`
+M*FP``-O`2JT`!&<$(`U@"'`)*4```'``3-\@@$YU("P`!$YU``````/X````
+M$0````$```&"```!9````58```%````!,@```.P```#>````Q````+X```"R
+M````I````)@```!R````;@```&0```!>````0@````````/O@P```D!M86QL
+M;V,``````0```("&```"7V5R<FYO```````"```!=@```(R#```"0&9R964`
+M```````!````N@````````/Q`````P````!/4%13``0`0````_(```/K````
+M`@```_(```/I````&B!O``0B;P`(GOP`#$CG(18F22I(3KH``"`+9P8N*P`$
+M8`B1R$ZZ```N`'#_OH!F!'``8"@@!T'O`!1.N@``(@U![P`4)`@L;```3J[^
+M=$J`9P1P`&`&3KH``'#_3-]HA-[\``Q.=0`````#[X,```-`8VAK86)O<G0`
+M```````!````%H,```)`=&EM90````````$````F@P```T!?9VUT,F%M:6=A
+M``````$````\A@```E]$3U-"87-E`````0```$B#```"0%]S971E<G(````!
+M````6`````````/Q`````P````!/4%13``0`0````_(```/I````!R!O``0B
+M;P`(("\`#"\+)DDB2"!+)E].^@````````/O@P```D!M96UM;W9E`````0``
+M`!@````````#\0````,`````3U!44P`$``````/R```#Z0```%(@;P`$(F\`
+M"%%/2.<!%"9)*DA.N@``0>\`#$ZZ```@#6<(0>\`#"K8*M@@"V<``-)![P`,
+M3KH``"!`("@`)$2`<CQ.N@``)H!^`"!L``1#[```$!BP&68,2@!F]F8&?@1@
+M``":(&P`!$/L``@0&+`99@Q*`&;V9@9^`V```(`@;``$0^P`$!`8L!EF"DH`
+M9O9F!'X%8&8@;``$0^P`&!`8L!EF!DH`9O9G4"!L``1#[``<$!BP&68&2@!F
+M]F<\(&P`!$/L`"`0&+`99@9*`&;V9R@@;``$0^P`)!`8L!EF!DH`9O9G%"!L
+M``1#[``H$!BP&68(2@!F]F8"?@$G1P`$<`!,WRB`4$].=2!O``2>_``0+PTJ
+M2$'O``Q#[P`$80#^Z"JO``P@+P`00^T`!#+`("\`!#+`("P``#+`<``J7][\
+M`!!.=0`````#^`````@````!````[````-@```#$````L````)P```"$````
+M:@```%`````````#[X,```-`8VAK86)O<G0````````!````%(,```-`7V=E
+M='1I;64````````!````'(,```-`;&]C86QT:6UE```````!````-H,```)?
+M7T-81#,S``````$```!$A@```E]T>FYA;64`````"````.@```#4````P```
+M`*P```"8````@````&8```!,A@```U]D87EL:6=H=`````````$```$X````
+M`````_$````#`````$]05%,`!`!````#\@```^H````,3454($135`!7150@
+M1%-4`$5%5"!$4U0`1414`$-$5`!-1%0`4$14`$%+1%0````````#\@```^D`
+M```P(&\`!$CG``8J2"QL``!.KO^^!I4/##\`<`!,WV``3G4@+P`$(&\`"%E/
+M!(`/##\`(CP``5&`+H!.N@``((`@%R(\``%1@$ZZ```@`2Z!<CQ.N@``(4``
+M!"`7<CQ.N@``(`'E@)"!YX#0@="`(4``"%A/3G4@;P`$64](YR`$2]`@'2(`
+MZ8&2@"`!YX#0@2(`Y8'2@.^!(!TD`.F"E(#E@B`=+T$`"'(R3KH``-""T*\`
+M"`:`#PP_`$S?(`183TYU```#[X8```-?5&EM97)"87-E```````!````#(,`
+M``)?7T-81#,S``````4```"J````7@```%(```!(````.@````````/Q````
+M`P````!/4%13``0`0````_(```/I````"R`O``193RZ`0>P`!"`(6$].=2!O
+M``193RZ(0>P`!"`(6$].=2`L``1.=0`````#^`````,````!````)@```!P`
+M```*`````````_$````#`````$]05%,`!`!````#\@```^H````)````````
+M``````````$````````````"```````````````````#[`````(````!````
+M%`````@````````#\@```^D````J(&\`!")O``@@+P`,64](YS\V+@`J2"])
+M`"B7RTZZ```B#20++&P``$ZN_7XF0"("3J[]>"`+9@9.N@``8%XD;P`H0A(J
+M!U*%(A,D*P`$)@TH"BQL``!.KOY*2H!G&"(+3J[]>$H29@1P`F`L+P1.N@``
+M6$]@*$ZN_WPL`'(R1@&P@68(""L``0`+9I0B"TZN_7@@!DZZ```I0```</],
+MWVS\6$].=0`````#[X,```-`8VAK86)O<G0````````!````'H8```)?1$]3
+M0F%S90````(```!4````)H,```)`7W-E=&5R<@````$````Z@P```E]S=')L
+M96X``````0```'"#```$0&-O;G9E<G1?;W-E<G(```````$```"6A@```E]E
+M<G)N;P```````0```)H````````#\0````,`````3U!44P`$`$````/R```#
+MZ0```"Q93TJL`!)F#$'O``,I2``28>Y@%D'O``,B;``2L\AD!'`!8`)P_RE`
+M``!83TYU64](YP$4+B\`%$JL``!F`F'`*FP`%F`N("P``&\,0>\`#R)M``2S
+MR&(02H!J'$'O``\B;0`$L\AD$"95+PU.N@``6$\J2R`-9LXI30`62H=F!'``
+M8")0AR\'3KH``"!`(*P`%D/O`!,A20`$0^@`"%A/*4``%B`)3-\H@%A/3G4`
+M`````_@````'`````0```*(```"0````>@```$(````:````#@````0````#
+M`````@```$@````Z````*`````````/O@P```E]F<F5E`````````0```&Z#
+M```"7VUA;&QO8P`````!````B@````````/Q`````P````!/4%13``0`0```
+M`_(```/J````!T`H(REA;&QO8V$N8PDQ+C$```````````````````/R```#
+MZP````$```/R```#Z0```#8@;P`$64](YR,"(@@L;```=/Y.KO^L+T``$&<Z
+M+BP``$ZZ```L`&`>2&\`$$AX"`4O!DZZ``!/[P`,2H!F""E'``!P`&`24X9L
+MWB(O`!`L;```3J[_IG#_3-]`Q%A/3G4@;P`$2.<A!BI(3KH``"(-+&P``$ZN
+M_[A*@&<$<`!@4$ZN_WPN`')OTH&P@68@(@UT`$ZN_T9*@&<.(@U.KO^X2H!G
+M!"`"8"A.KO]\+@!P9="`OH!F#B!-80#_2DJ`9@1P`&`,(`=.N@``*4```'#_
+M3-]@A$YU``````/OA@```E]$3U-"87-E`````P```'(```!0````#H8```)?
+M97)R;F\```````,```#,````0````!Z#```#0%]L87-T7V9D`````````0``
+M`"*#```"7VEO8W1L```````!````-(,```-`8VAK86)O<G0````````!````
+M;(,```1`8V]N=F5R=%]O<V5R<@```````0```,@````````#\0````,`````
+M3U!44P`$`$````/R```#Z0```AI(YP`&<"(B/``!``$L>``$3J[_.BI`2H!F
+M!'``8"`;?``$``A-[0`.0AX@+```',`L[```0>T`%$ZZ```@#4S?8`!.=2!O
+M``0O#B)(<"(L>``$3J[_+BQ?3G4@;P`$2.<`!BI(("T`(&<*+&P``'(`3J[_
+MW"`M`"1G#"QL``!R0.&)3J[_W"`M`#1G!B!`3KH``"`M`#AG!B!`3KH``"!M
+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
+MN$_O``PJ@<<``O`$'O``AR`6$`_:)83RM```1K!'``8!P@%4ZZ``!*@&<*
+M($`@:``$80#XKB`53KH``'#_*E_>_``@3G4@+P`$(B\`""]O``P`!"!O`!">
+M_``H+PTJ2$CO``,`!$ZZ``!*K```9@AP!BE```!@:"`L``!2K```(BP``-*`
+M+P%(;`!(2&\`%$ZZ``!P`2Z`(@!![P`8P4%A`/T43^\`#"J`:S1"IT'O`!!P
+M`2(`80#\_EA/*T``!&L$<`!@'"`53KH``$J`9PH@0"!H``1A`/@*(!5.N@``
+M</\J7][\`"A.=0`````#^`````L````!```(!@``!V(```8\```&)@``!,P`
+M``2\```$H```!)@```22```"Y@```M`````````#[X8```-?7V9I9F]?<VEG
+M```````&```#K@```C````&H```!:@```.H````LA@```5]?=7,````!````
+M,H,```)`3F5W3&ES=`````$````ZA@```U]?1FEF;T)A<V4``````!$```;H
+M```&V```!K8```:(```&7````^8```-X```#(````K8```)B```!^@```5H`
+M``$\````W````,0```!\````;(,```)`9G)E90````````8```<D```'#```
+M!P(```"L````G````)"&```"7V5R<FYO```````&```'\```!TP```42```$
+M+```!!(```'>A@```E]$3U-"87-E`````P``!00```3B```!Z(,```1`7W=A
+M:71?<VEG;F%L<P```````@```Y0```(6@P``!$!?:&%N9&QE7W-I9VYA;',`
+M```"```#S@```E"#```"0'-T<F-A=``````$```&0```!BH```+J```"U(,`
+M``1`7W-I9U]D:7-P871C:````````0``!`R#```#7U]S<')I;G1F````````
+M!0``"`X```=J```$U```!,0```2H@P```D!?<V5T97)R`````0``!/B#```"
+M0&UA;&QO8P`````#```%>@``!6P```52@P```T!?86QL;V-?9F0```````$`
+M``7V@P```T!?9G)E95]F9`````````,```A:```'M@``!OB#```#0&-H:V%B
+M;W)T`````````@``!^0```=`A@```U]?9FEF;U]O:P````````(```?H```'
+M1(8```1?7V9I9F]?;V9F<V5T````````!```!_H```?V```'5@``!U*&```#
+M7U]F:69O7V)A<V4``````@``!_X```=:@P```T!?9FEN9%]F9`````````(`
+M``A&```'H@````````/Q`````P````!/4%13``0`0````_(```/J````%5]M
+M``!?<P``9FEF;SHE<R]R=V5S2R5S`&T```!F:69O.B5S+W(`9FEF;SHE<R]M
+M=V5+``!?;0``7W,``'5X9FEF;RXE;'@``'5X9FEF;RXE;'@``````_(```/I
+M````"2`O``193RZ`0>P`%B`(6$].=2!O``193RZ(0>P`%B`(6$].=0```_@`
+M```"`````0```!P````*`````````_$````#`````$]05%,`!`!````#\@``
+M`^H````)=7-E<@````````````!W:&5E;`````````X````4```````&```#
+M[`````0````!````(````!H````6````!@````````/R```#Z0```*D@+P`$
+M64\N@"`L`0QG#B!`3KH``$J`9P1R`6`"<@`@`5A/3G4@+P`$(&P!#'(`3OH`
+M`$ZZ```I0`$,9@I(;```3KH``%A/(&P!#$ZZ``"!K```3G4@;`$,3OH```CL
+M``P``DYU("\`!`@```Q6P$0`2(!(P$YU".P`#0`"3G4@+P`$"```#5;`1`!(
+M@$C`3G5.N@``<``@;```$"@`#W(!X:K```3G5.^@``("\`!%E/2.<!%B]`
+M`!!^`&`N("T`%$ZZ```F0$J`9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL
+M>``$3J[_+B!L```L>``$3J[^C"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`
+M<`'OH"P`<`F^@&8&<`!.N@``("P!!,"&9P:-K`$(8'HJ!D:%RZP!"$J':V9P
+M(+Z`;&`@!^>`0>P`!"IP"``P?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X
+M48!G-&`*2&P`&$ZZ``!83W``3KH``&`@(`UG'"`'YX`H!D'L``2(L`@$B:P!
+M!"`'3I5&A,FL`00@+`$(P(9FBDS?(/!.=2`O``0O#B(L``""@'``+'@`!$ZN
+M_LXL7TYU("\`!"\.(@`@+```@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A
+M`/X02H!G"'P!<`YA`/\,(`=A`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!
+M<`-A`/[H(`=A`/Z&2H!G"'P!<!1A`/[6(`9,WP#`3G4@+P`$+P<I0```<`@N
+M'V``_KQP`&$`_V!@DV2.<!%'X`2^P`!#9\``$JBT*M``12AU"-<""^@&WP
+M0JP!"$*L`01"K```80#]U&$`_>IA`/VB3-\H@&``_?AA`/VX8`#^"``````#
+M^`````(````!```!=````#X````7`````@```H0```*````"?````F0```'6
+M```!N@```:8```&B```!F````9````%*```!.````2X```$F````I````'H`
+M``!@````5@```%````!(````.````"H````*`````````^^#```$0%]T:6UE
+M<E]E>'!I<F5D``````$````2@P``!$!?=&EM97)?<W1A<G0````````!````
+M,(,```1`7V%L;&]C7W1I;65R`````````0```#2#```"7U]F86EL```````!
+M````0H,```-`7W1I;65R7W-I9P`````!````3(,```-`7V9R965?=&EM97(`
+M```!````6H,```1`7VEN:71?<')O8V5S<V5S`````0```)*&```$7U]C:&EL
+M9')E;E]E>&ET``````(```#N````F(,```5`7V-L96%N=7!?<')O8V5S<V5S
+M``````$```"J@P```T!?9FEN9%]P:60```````$```#$@P```D!?7V5X:70`
+M`````@```8````$B@P```U]?;65S<V%G90````````$```%XA@```E]?1E!%
+M4E(``````0```D@````````#\0````,`````3U!44P`$`$````/R```#Z@``
+M``I&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=``````#
+M\@```^L```!$```#\@```^D```(=2&P`!$ZZ``!83TYU("\`!"\-3KH``"I`
+M2H!F`F'B(`TJ7TYU(&\`!"`O``@O"TZZ```F0$J`9@)AQB`+)E].=2!O``0O
+M#2I((`UF!$OL``X@34H89OQ3B)'-(`A2@$ZZ```@0$J`9@1P`&`((D@2W6;\
+M(`@J7TYU64](YP,T?@!\`"!L```F:`#08"Q**P`(9B0P/`4`P&L`#F8:4H<@
+M:P`*(`A*&&;\4XB1P"`(W(#<JP`45(8F4TJ39M`@!U*`Y8#0AF$`_THI0``8
+MY8<@0")`T\=%Z0`$+T``%&8*0>P``"E(`!A@5B!L```J:`#08$)*+0`(9CHP
+M/`4`P&T`#F8P)FT`"BXM`!0@;P`4(,HO2``48`(4VTH39OH4_``])FT`$&`"
+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
+M```I0``<9@A![`"8*4@`'$'L`*!.N@``*4``'&8(0>P`JBE(`!P@+P%,(&\!
+M4")L`!A.N@``<`!.N@``3-]L_-[\`2Q.=0```_@````5`````0``"$X```A`
+M```(.```""H```@B```(%```"`````?X```'Z@``!X0```;0```%3@``!3H`
+M``18```$3```!#8```/6```"J````.````!.`````@```!(````"```(7@``
+M"%(```A(```%+@``!"P```0D```$$```!`0```/V```#[````^@```/@```#
+MT````\@```#J````Y````,H```"$`````````^^#```"7U]F86EL```````$
+M```'B```!M0```/:````!H,```)`;6%L;&]C``````(```!@````%(,```)`
+M<F5A;&QO8P````(```&R````,(,```)`9G)E90````````4```?B```'V@``
+M!\X```:4```"1H8```)?4WES0F%S90````$```.(@P```E]?6$-%6$E4````
+M`0```YB&```"7U]?:6]B```````&```#N@```[(```.N```#J````Z0```.>
+M@P``!$!?86QL;V-?=&EM97(````````!```#S(,```-`7W1I;65R7W-I9P``
+M```!```#Y(,```-`7VEN:71?9FEF;P`````!```$"(,```1`7VEN:71?<VEG
+M;F%L<P```````0``!`R&```"7T1/4T)A<V4````'```'=```!V(```<T```&
+MO@``!1P```34```$/(,```1`7VEN:71?=6YI>&EO`````````@``!6X```2@
+MA@```U]?5T)E;F-H37-G``````0```4.```$Y```!+X```2DA@```E]?7V-T
+M>7!E`````0``!;"#```"0'-T<FYC<'D````!```&;H,```)`='%S;W)T````
+M``$```>\@P```T!?7V=E=&5N=@````````4```A$```(+@``"!@```@$```'
+M[H8```-?7V%M:6=A7W5S97(````)```(/```"#(```@F```('```"!````@.
+M```("```!_P```?R@P```D!M86EN`````````0``"&*#```"0&5X:70`````
+M```!```(:`````````/Q`````P````!/4%13``0`0````_(```/J````+```
+M``!.;R!M96UO<GD```!A`$9A:6QE9"!T;R!C<F5A=&4@=&EM97(``$Y)3#H`
+M`$Y)3#H``$Y)3#H``"H`3DE,.@``26YV86QI9"!W:6QD8V%R9"`E<P!%<G)O
+M<B!E>'!A;F1I;F<@87)G=6UE;G1S`%5315(``'5S97(``%5315).04U%``!(
+M3TU%``!S.@``4TA%3$P`8FEN.G-H``!(3U-43D%-10``86UI9V$````#\@``
+M`^L````(```#\@```^D````$("\`!%E/+H!P`%A/3G4``````_$````#````
+M`$]05%,`!``````#\@```^D````^("\`!$CG`P`N`$JL``!G!"`'8&!\`"`'
+M`H````$D9P)\"`@'``=G!`!&``4(!P`$9P0(Q@`""`<``6<$",8```@'``-G
+M!`C&``$(!P``9P0(Q@`&(`=R2<"!<D"P@68$`$8`0@@'``EG!`C&``4@!@I`
+M``],WP#`3G4@+P`$2.<&`"P`2JP``&<((`8"0`__8%YZ``I&``\(!@`#9P1Z
+M2>6-(`9R!<"!6X!F!`C%``<(!@`"9P0(Q0`$"`8``&<$",4``2`&<D+`@6<$
+M",4`!@@&``%G!`C%``,(!@`&9P0(Q0``"`8`!6<$",4`"2`%3-\`8$YU````
+M``/X`````@````$```"&````#`````````/Q`````P````!/4%13``0`0```
+M`_(```/K`````0```_(```/I`````G``3G5P`$YU```#\0````,`````3U!4
+M4P`$``````/R```#Z0```!5(YP,`3KH``"X`?`!@"B\&3KH``%A/4H:\AVWR
+M3-\`P$YU("\`!"\'+@!AU$ZZ``!.N@``(&P``$ZZ```O!TZZ``!83RX?3G4@
+M+P`$+P<N'V#4``````/O@P```T!?;&%S=%]F9`````````$````&@P```E]C
+M;&]S90```````0```!*#```$0%]C;&5A;G5P7V9I9F\```````$````N@P``
+M!4!?8VQE86YU<%]S:6=N86QS`````````0```#*&```#7U]O9&1?=&EM97(`
+M`````0```#:#```#0%]F<F5E7W1I;65R`````0```#J#```"7U]80T58250`
+M```!````0`````````/Q`````P````!/4%13``0`0````_(```/I````$R`O
+M``0B+P`((&\`#%%/2.<#)"P!+@`J2$ZZ```@!TZZ``!*@&<:(D`@:0`@+T@`
+M%"`&(&D`!")-)&\`%$Z28`)P_TS?),!03TYU``````/O@P```T!C:&MA8F]R
+M=`````````$````:@P```T!?9FEN9%]F9`````````$````@`````````_$`
+M```#`````$]05%,`!``````#\@```^D```"8GOP`#$CG+S8J;P`T?@/.KP`X
+M?`$@;```)F@`N"H\```#[$ZZ``!*AV<*<`*^@&<$<@!@`G(!+T$`*'`!OH!G
+M"%6'9P1P`&`"<`$O0``L($U#[```3KH``$J`9@9X_V```51P_R!L```A0`"X
+M(@TL;```=/Y.KO^L+@`@;```(4L`N$J`9G@L;```3J[_?$ZZ```L`"`L``!R
+M+D8!L(%G!$J`9@I^`2H\```#[F`6(`95@&8,""\`"``Z9P1P`6`"<``N`$J'
+M9RQ\``@O``@`.F<<""\`#P`Z9P9X`F```-8@+P`\3KH``"@`8```R'C_8```
+MPBE&``!P_V```4)"IRQL``!R`B0/3J[_'$_O``0D0$J`9PPB!R0*3J[_FDJ`
+M9A8@"F<()`IR`DZN_Q9.N@``</]@``$(*"H`="0*<@).KO\6(@=.KO^F<%#I
+MB,"O`#@,@```!0!F#'`1*4```'#_8```VDJO`"AG!@@$``-F#$JO`"QG$@@$
+M``)G#'`-*4```'#_8```M@@O``D`.F<B(@TD/````^Y.KO_B2H!G""(`3J[_
+MW&`*3KH``'#_8```C`@O``@`.F<$(`5@!B`\```#[20`(@TL;```3J[_XBH`
+M9@A.N@``</]@8`@O``D`.F8$2H9F!"P$8`)\_WX`2J\`*&<"?@%*KP`L9P0(
+MQP`!""\``P`[9P0(QP`#+P<@!2(&3KH``%A/+@!L''#_(&P``"%``+@B!2QL
+M``!.KO_<(&P``"%+`+@@!TS?;/3>_``,3G4@;P`$+R\`#"\O``PO"&$`_:A/
+M[P`,3G4```/X`````0````$```!2`````````^^&```!7U]U<P````4```(V
+M```")````'P```!F````%H,```-`8VAK86)O<G0````````!````)(,```)`
+M<W1R:6-M<`````$```!6A@```E]$3U-"87-E````!0```BX```',```!`@``
+M`(@```!P@P``!$!C;VYV97)T7V]S97)R```````!````D(8```)?7T]315)2
+M``````$```"6@P``!4!?;6%K95]P<F]T96-T:6]N`````````0```.:&```"
+M7V5R<FYO```````#```!@@```5X```#V@P```D!?<V5T97)R`````P```=@`
+M``&L```!,(,```1`7V%L;&]C7V%M:6=A9F0``````0```A@````````#\0``
+M``,`````3U!44P`$`$````/R```#Z@````).24PZ`````````_(```/I```%
+M:"!O``1(YS@`</_`*``#<@`2`'#_P"@``G0`%`!P_\`H``%V`!8`</_`$'@`
+M&`#AA(B#X82(@N&$B($@!$S?`!Q.=4CG(S1+[`!R0>P`'$7L``PDR$'L`"`D
+MR$*L`!A"FGX`+"P`>D?L![Q@/"`K``0B`.6!($W1ZP`(0^@'ZD7L``PEB1@`
+M2H!G!G`!*4``&$J'9P9*JP`$9@@@$T2`*4``%%*'UOP`$+Z&;<!^`"PL`'9@
+M.G``(@<&@0``!=@0-1@`2,#I@"!-(@`&@0``!U+1]1@`!H````=.)#4(`.6"
+M0^@'ZD7L``PEB2@`4H>^AFW"3-\LQ$YU(&\`!")O``B>_`HH2.<[-B](`"@O
+M20`L(`AF"$WL`"0O3@`H<#H@;P`HL!!F!%*O`"@@;P`H<#I.N@``2H!F3G`*
+M(@`@;P`H(`A*&&;\4XB1P-*(4H%P0;*`909P_V```DQ![``P0^\`,1+89OQ!
+M[P`Q0^P`/$ZZ``!![P`Q(F\`*$ZZ``!![P`Q+T@`*$*G+R\`+$ZZ``!03RX`
+M4H!F!G#_8``"""`'0>\`<B(\```)VDZZ```L`"`'3KH``$J`9@9P++R`9`9P
+M_V```>!![P"*80#^."X`0>\`CF$`_BXJ;P`L*H!![P"280#^("M```1![P"6
+M80#^%"M```A![P":80#^""M```PB%6LP=#*R@FXJ)BT`"&\D>`JVA&X>*"T`
+M!&L8#(0```%R;A!*@&L,L()N"+:'9PI*AV<&</]@``%JTH'E@2`M``@D`-2"
+MU(#4@B`M``0F`.6#UH#6@M:M``S6@=:'<"S6@+R#9`9P_V```3A'[P">?``D
+M36`0($MA`/V()4``$%B+4H98BKRM``1MZGP`8"`0&R(&!H$```78&X`8`'(`
+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
+M("\`)-&O`(@O+P`H+P=(;P"0(&\`.$Z0<`$J@$_O``P@+P"(3-\L_-[\`'!.
+M=2!O``0B;P`(("\`#)[\``Q(YP<T+@`J2"])`!@,K0````$`(&\&<`$K0``@
+M2&\`'"`'($UA`/T>6$\L`$JO`!QF!B`M`"!J!B`&8```QD'Z^*XB;P`8L\AF
+M!D'L`')@!$'L"B!\`"9(+T@`(&```)8@*P=.L*T`(&8``(1Z`"1O`"!@<"`M
+M`"`B*@=.LH!G7B`%Z8`B%2!O`"`&@```!TK2L`@`DJL'2BJ!2JT`(%?`1`!(
+M@$C`*T``($AO`!P@!R!-(F\`'&$`_(Q83TJO`!QF0"`5D*H'2M"K!THJ@$JM
+M`"!7P$0`2(!(P"M``"!2A=3\`!`@;P`@NJ@`"&V&4H;6_``0(&\`(+RH``AM
+M`/]B</],WRS@WOP`#$YU(&\`!"\-0_KWVG``*E]@`/[@2JP3SF8$80#W+$YU
+M``````/X````'0````$``!*X```29@``$-@``!"T```0I```$%0``!`R```/
+M\@``#H(```X6```,^```#,H```RX```,J@``"O@```E*```(>```!Z0```%L
+M```!7````18```#F````H````(X```"`````7````%8```!0````3````"L`
+M```"```5E```%,8``!3````3D@``$XP``!#H```0W```#J(```Z:```.B```
+M#G0```YF```.8@``#EH```X\```.,@``#@H```WT```-X@``#=0```V\```-
+MN```#:0```V8```-D```#88```U\```-3```#3X```TZ```-*@``#1P```T(
+M```,_```#/0```SP```,[```#.@```S@````L````&@```!D````2```````
+M``/O@P```D!S=')C:'(``````0```3*#```"0'-T<F-A=``````"```!?```
+M`7"#```"7V]P96X````````!```!CH,```)`<F5A9`````````$```&L@P``
+M`D!C;&]S90```````0```;2&```"7U]?8W1Y<&4````%```&6@``!3X```1>
+M```$'````\J#```"7U]#6$0S,P`````<```2G```$HX``!)4```2/@``$4X`
+M`!$\```1)```$1H``!`@```0$@``#]X```_0```/K```#YH```^,```/@```
+M#W````\^```/,```"N8```K8```(4@``"#P```@F```("```!^P```<.```'
+M`(,```)`<W1R;F-P>0````(```R.```,=(,```-`7U]G971E;G8````````!
+M```,SH,```)?<W!R:6YT9@````$``!#@`````````_$````#`````$]05%,`
+M!`!````#\@```^H```!(1TU4`"`@(``@("``````!`````@``````````"`@
+M(``@("``<SIL;V-A;'1I;64`<SIZ;VYE:6YF;P``+P`````?````'````!\`
+M```>````'P```!X````?````'P```!X````?````'@```!\````?````'0``
+M`!\````>````'P```!X````?````'P```!X````?````'@```!\```%M```!
+M;G!O<VEX<G5L97,``%5.25A46@``("`@`%-U;DUO;E1U95=E9%1H=49R:5-A
+M=$IA;D9E8DUA<D%P<DUA>4IU;DIU;$%U9U-E<$]C=$YO=D1E8P`E+C-S("4N
+M,W,E,V0@)3`R+C)D.B4P,BXR9#HE,#(N,F0@)60*```````#[`````(````!
+M````$`````P````````#\@```^L```3V```#\@```^D```&<GOP`#$C7`0-P
+M_][\``Q.=5%/2-<#`%!/3G5(YS`"(A!**``-9P1P`&`<)`DF`"QL``!.KO_6
+M(@!2@&8(3KH``'#_8`(@`4S?0`Q.=5%/2.<_-BX`*DDF2"P3+T8`*"](`"Q*
+M*P`-9P9P`&```(Q**P`,9V8F3=?'>@!@6"1-8`)2BK7+9`9P"K`29O2WRF8$
+M*`I@!D'J``$H")B-(B\`*"0-)@0L;```3J[_T"P`4H!F"$ZZ``!P_V`^VH:V
+MAF8V2^H``9Z&<`!.N@``3KH``$J`9B)*AV:D8!PB!B0-)@<L;```3J[_T"H`
+M4H!F"$ZZ``!P_V`"(`5,WVS\4$].=5E/2.<_`BX`+!`O00`<2B@`#6<$<`!@
+M4E.!)@$B!B0'+&P``$ZN_[XJ`$ZN_WPH`%*%9P1*A&<.(`1.N@``*4```'#_
+M8"0B!G0`)@).KO^^+`!2@&<$2H1G#B`$3KH``"E```!P_V`"(`9,WT#\6$].
+M=9[\`0!(YS\&+@`J2"P5*BT`""`M``1G"B(`+&P``$ZN_Z88+0`-2(1(Q"!-
+M3KH``$J$9P1P`&!$(@9![P`@)`@L;```=D#EBTZN_F@H`$J'9@HB!DZN_]Q*
+M@&<:2H1G$G#_NH!G#"(")`5.KO]&2H!G!'``8`9.N@``</],WV#\WOP!`$YU
+M("\`!$CG(`(B`"QL``!T`$ZN_S1.KO]\="Y&`K""5\%$`4B!2,$@`4S?0`1.
+M=2`O``0@;P`((F\`#)[\`!!(YS<6+@`F22I(?`!AN$J`9GPB!RQL``!T`4ZN
+M_E9*@&=L(@=![```)`AV!$ZN_]!9@&92(@<D/```)Q!.KO\T2H!G0B('0>\`
+M("0(=A!.KO_6<@FP@6\N<)NP+P`@9B9![P`E(@@D"TZN_-`J`$'O`";1P"((
+M)`U.KOS04H!G!E*%9P)\`2('=`!.KOY6(`9,WVCLWOP`$$YU("\`!"(O``B>
+M_`(02.<_!BX`</\O0`(H+T$`)"('+&P``'0`=@%.KO^^+T``("('3J[_OBP`
+M3J[_?"H`+T`"+&8``,(H+P`D(@<D!';_3J[^.+""9@``KKR";```GBH$FH8H
+M!2`$<@%(02QX``1.KO\Z*D!*@&9J<@)(04ZN_RCBB"H`#(4```(`;1`@!7(!
+M2$%.KO\Z*D!*@&9&>D#GC4OO`"@P/`'_<@!![P`H$,%1R/_\8"RXA6\$(`5@
+M`B`$)@!.N@``(@<D#2QL``!.KO_0L(-G"DZN_WPO0`(L8`:8@TJ$;M!![P`H
+ML<UG#")-(`4L>``$3J[_+BHO`BQF!$*O`B@L+P`@O*\`)&P.(@<D!BQL``!V
+M_TZN_[XL+P(H9PH@!4ZZ```I0```(`9,WV#\WOP"$$YUGOP!"$CG-Q8N`"9)
+M*D@L%4HM``UF``$8(`<$@```!`!G(`2````$`&=*4X!G6%.`9UQ3@&=>4X!G
+M9E.`9VQ@``#N2BT`#&<F(`9![P$D0^\!(&$`_=9*@&<4("\!)#=```(@+P$@
+M-H!P`&```,IP&6```+XB!BQL``!.KO\H)H!P`&```+(FAG``8```JG``8```
+MI"`&(A-A`/XV8```F"M3``AP`&```(XJ$TJM``1F#B(5+&P``$ZN_HPK0``$
+M("T`!&=B)``B!2QL``!.KOY<2H!F4B(&0>\`("0(=D#EBTZN_FA*@&<^(@5.
+MKO^F(BT`!$ZN_Z8B!DZN_]PB`G0`3J[_1AM\``$`#2J"*T(`!$'O`"`B""QL
+M``!.KO^X2H!G!"`"8`Y.N@``8`9P%BE```!P_TS?:.S>_`$(3G4@+P`$(B\`
+M""]O``P`!$CG#P8J+P`<+`$N`'`.3KH``"I`2H!F"G`,*4```'#_8$Y#U2+'
+M0IDBQD(M``TB!RQL``!.KO\H&T``#$AZ_G1(>OO:2'K[9$AZ^JQ(>OIV2'KZ
+M:"`%($U#^OI03KH``$_O`!@H`&P&($U.N@``(`1,WV#P3G4@+P`$(B\`""]O
+M``P`!"]O`!``""]O`!0`#"]O`!@`$$CG#0`H+P`4*B\`$"X`<`!*@68$<$#E
+MB`!```$O`"`'<O]A`/]&6$]*@&9`<`!*A&8$<$#EB`!```(O`"`%<O]A`/\H
+M6$]3@&8B<`!*KP`<9@1P0.6(`$```B\`("\`''+_80#_!EA/58!G$$'L``8O
+M2``03-\`L$[Z``!,WP"P3G4``````_@````"`````0``!EH```)<````````
+M`^^&```"7T1/4T)A<V4````0```%B```!2(```34```$O@``!(````/D```#
+MG````O````),```"!````;0```&.```!(@```.(```"F````,(,```)`7W-E
+M=&5R<@````4```4R```!Z@```/````"T````/H,```1`7V-H96-K7W-I9VYA
+M;',``````0```,J#```$0%]H86YD;&5?<VEG;F%L<P````$```#.@P``!$!C
+M;VYV97)T7V]S97)R```````#```#]@```5X```$\A@```E]E<G)N;P``````
+M!0``!7(```4Z```#^@```6(```%`@P```D!F<F5E`````````@``!<(```&@
+M@P```T!C:&MA8F]R=`````````$```.4@P```D!M86QL;V,``````0``!6:#
+M```#0%]A;&QO8U]F9````````0``!;2#```"7U]F86EL```````!```&9@``
+M``````/Q`````P````!/4%13``0`0````_(```/J````")LP('$``$9A:6QE
+M9"!T;R!I;FET:6%L:7-E($DO3P`````#\@```^D````G(&\`!")O``A(YR$6
+M)DDJ2$ZZ```B#20++&P``$ZN_[)*@&<$<`!@;$ZN_WPN`'(T1@&P@692(@).
+MKO^X2H!G#B(-3J[_LDJ`9P1P`&!&3J[_?"X`<F_2@;"!9BPB`G0`3J[_1DJ`
+M9QHB"TZN_[A*@&<0(@TD"TZN_[)*@&<$<`!@$DZN_WPN`"`'3KH``"E```!P
+M_TS?:(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H8```)?1$]3
+M0F%S90````$````:@P``!$!C;VYV97)T7V]S97)R```````!````C(8```)?
+M97)R;F\```````$```"0`````````_$````#`````$]05%,`!`!````#\@``
+M`^D````.(&\`!"`O``@B+P`,GOP`#$C7`0-P`-[\``Q.=2`O``0B+P`(+V\`
+M#``$44](UP`#<`!03TYU``````/Q`````P````!/4%13``0``````_(```/I
+M````$"!O``0B;P`(("\`#$CG`10N`"9)*DAF!'``8!P@!R!+(DUR`$J`9PX2
+M&)(99@13@&;V2(%(P2`!3-\H@$YU``````/Q`````P````!/4%13``0`````
+M`_(```/I````!2!O``0@+P`(<@!@`A#!4X!D^DYU```#\0````,`````3U!4
+M4P`$``````/R```#Z0````P@+P`$(B\`"%E/+P<N`"]!``1.N@``2&\`!$AX
+M"`,O!TZZ``!/[P`,+A]83TYU``````/O@P```T!C:&MA8F]R=`````````$`
+M```4@P```E]I;V-T;````````0```"(````````#\0````,`````3U!44P`$
+M``````/R```#Z0````T@+P`$(B\`"%E/+P<N`"`!3KH``"]```1.N@``2&\`
+M!$AX"`0O!TZZ``!/[P`,+A]83TYU```#[X,```5`7VUA:V5?<')O=&5C=&EO
+M;@````````$````2@P```T!C:&MA8F]R=`````````$````:@P```E]I;V-T
+M;````````0```"@````````#\0````,`````3U!44P`$``````/R```#Z0``
+M`!`@;P`$("\`""(O``R>_``,2-<!`W#_*4```-[\``Q.=2!O``0@+P`((B\`
+M#)[\``Q(UP$#</\I0```WOP`#$YU```#[X8```)?97)R;F\```````(````X
+M````&`````````/Q`````P````!/4%13``0`0````_(```/I````#2`O``19
+M3R\'+@!.N@``2&\`!$AX"``O!TZZ``!/[P`,2H!G!'``8`0@+P`$+A]83TYU
+M``````/O@P```T!C:&MA8F]R=`````````$````,@P```E]I;V-T;```````
+M`0```!H````````#\0````,`````3U!44P`$``````/R```#Z0````\@+P`$
+M2.<&`$ZZ```L`'``3KH``&`&<`!.N@``*@`@!4ZZ``!*@&?N(`9.N@``<`0I
+M0```</],WP!@3G4```/O@P```T!S:6=S971M87-K``````(````L````"H,`
+M``1`7V-H96-K7W-I9VYA;',``````0```!*#```$0%]W86ET7W-I9VYA;',`
+M``````$````:@P``!$!?:&%N9&QE7W-I9VYA;',````!````(H8```)?97)R
+M;F\```````$````R`````````_$````#`````$]05%,`!`!````#\@```^D`
+M```H(&\`!$CG(Q8J2'X`0J<L;```<@(D#TZN_QQ/[P`$)D!*@&=2(@UT_DZN
+M_ZPN`&=&(@<D"TZN_YI*@&<Z(BL`!%[`1`!(@$C`+``B!TZN_Z9R`DZN_Q9*
+MAF<4(@U.KO^X2H!G!'``8#).N@``8"IP%"E```!@(DZN_WQ.N@``*4```$J'
+M9P8B!TZN_Z8@"V<()`MR`DZN_Q9P_TS?:,1.=0```^^&```"7T1/4T)A<V4`
+M```!````$(,```)`7W-E=&5R<@````$```!JA@```E]E<G)N;P```````@``
+M`(````!R@P``!$!C;VYV97)T7V]S97)R```````!````?`````````/Q````
+M`P````!/4%13``0`0````_(```/I```!ER!O``0@+P`((F\`#"]O`!``!"\'
+M+@`I2``>*4``&G(!L(%E'B\O``@O"6$``"103TJ`9PX@;``>0A`@!Y"L`!I@
+M`G``+A].=2!O``0B;P`(2.<`%"9)*DA@``3X$!5R);`!9@`$RE*-$!5(@$C`
+M2H!G``#6<B60@6<`!+1R')"!9P``S%.`9P`!)E.`9P`!@%.`9P`!HEF`9P`!
+M[%.`9P`"!%F`9P`"FEN`9P`##E.`9P`#,%.`9P`#6%.`9P`#>E6`9P`#H%.`
+M9P`#1E.`9P`$)E.`9P`$0E^`9P``HE.`9P``_%.`9P`!.E.`9P`!7%.`9P`!
+M=%>`9P``Y%6`9P`!TE.`9P`![E.`9P`"!E.`9P`"3%.`9P`":%6`9P`"=E6`
+M9P`"JE.`9P`"U%.`9P`"]%>`9P`#9E.`9P`#?E.`9P`#C&```^A3C6```^(@
+M*P`8:P9R!K"!;P9P`&```_XB*P`8Y8%![`!V+S`8`&$`!,983TJ`9@`#V&``
+M`^`@*P`8:P9R!K"!;P9P`&```\XB*P`8Y8%![``<+S`8`&$`!)983TJ`9@`#
+MJ&```[`@*P`0:P9R"["!;P9P`&```YXB*P`0Y8%![`%.+S`8`&$`!&983TJ`
+M9@`#>&```X`@*P`0:P9R"["!;P9P`&```VXB*P`0Y8%![`#"+S`8`&$`!#98
+M3TJ`9@`#2&```U!![`%^(DMA`/XZ2H!F``,T8``#/$'L`90B2V$`_B9*@&8`
+M`R!@``,H0>P!IB)+80#^$DJ`9@`##&```Q1(>``P2'@``B\K``QA``-Z3^\`
+M#$J`9@`"[F```O9(>``@2'@``B\K``QA``-<3^\`#$J`9@`"T&```MA(>``P
+M2'@``B\K``AA``,^3^\`#$J`9@`"LF```KH@*P`(<@Q.N@``<`Q*@6<"(`%(
+M>``P2'@``B\`80`#$$_O``Q*@&8``H1@``*,("L`'%*`2'@`,$AX``,O`&$`
+M`NY/[P`,2H!F``)B8``":DAX`"!(>``"+RL`"&$``M!/[P`,2H!F``)$8``"
+M3"`K``AR#$ZZ``!P#$J!9P(@`4AX`"!(>``"+P!A``*B3^\`#$J`9@`"%F``
+M`AY(>``P2'@``B\K``1A``*$3^\`#$J`9@`!^&```@`@*P`04H!(>``P2'@`
+M`B\`80`"8D_O``Q*@&8``=9@``'>2&P!L&$``K!83TJ`9@`!PF```<H,JP``
+M``P`"&T&0>P!LF`$0>P!MB\(80`"BEA/2H!F``&<8``!I$'L`;HB2V$`_(Y*
+M@&8``8A@``&00>P!P")+80#\>DJ`9@`!=&```7Q(>``P2'@``B\380`!Y$_O
+M``Q*@&8``5A@``%@+PMA``%D6$]*@&8``49@``%.0>P!S")+80#\.$J`9@`!
+M,F```3I(;`'680`"#%A/2H!F``$>8``!)B`K`!Q>@)"K`!AR!TZZ``!(>``P
+M2'@``B\`80`!?D_O``Q*@&8``/)@``#Z("L`&&<$4X!@`G`&(BL`'%Z!DH`@
+M`7('3KH``$AX`#!(>``"+P!A``%&3^\`#$J`9@``NF```,)(>``P2'@``2\K
+M`!AA``$H3^\`#$J`9@``G&```*1![`'8(DMA`/N.2H!F``"(8```D"`\```'
+M;-"K`!1R9$ZZ``!(>``P2'@``B\!80``Z$_O``Q*@&9<8&8@/```!VS0JP`4
+M2'@`,$AX``0O`&$``,9/[P`,2H!F.F!$("L`*&<,+P!A``$46$]*@&8F<`!@
+M+DJL`!I7P$0`2(!(P%.L`!I*@&<$<`!@%B!L`!X0U2E(`!Y2C4H59@#[!B`L
+M`!I,WR@`3G4@;P`$GOP`+$CG`1!#[P`(<`HBV%'(__Q![P`(3KH``"X`1^P`
+M#6`:(`=R"DZZ``!P,-*`%H%3BR`'<@I.N@``+@!*AV\(0>P``+?(8MI(:P`!
+M80``@%A/3-\(@-[\`"Q.=2`O``0B+P`(+V\`#``$2.<'!!HO`!<L`2X`2^P`
+M%V`<(`=R"DZZ``!P,-*`&H%3C2`'<@I.N@``+@!3ADJ';PY![``/N\ABV&`$
+M&H53C4'L``^[R&,((`93ADJ`;NQ(;0`!80``#EA/3-\@X$YU(&\`!"\-*D@@
+M+``:9Q@2'2!L`!X0@68$<`%@"E*L`!Y3K``:8.(J7TYU```#^`````\````!
+M```$O```!"8```02```#T````[P```.F```#H````X(```(X```")````A``
+M``'X```!R````9@```%H````$@````(```94```&4```!D0```8\```&%```
+M!@8```7@```%J@``!88```5:```%3@``!4@```4\```%,````#X````V````
+M'````!@````````#[X,```)?7T-81#,S``````D```7Z```%Z@``!:````60
+M```$W```!'X```1&```#&@```JR#```"0&UK=&EM90`````!```%@```````
+M``/Q`````P````!/4%13``0`0````_(```/J````>5-U;@!-;VX`5'5E`%=E
+M9`!4:'4`1G)I`%-A=```````````!`````@````,````$````!0````84W5N
+M9&%Y``!-;VYD87D``%1U97-D87D`5V5D;F5S9&%Y`%1H=7)S9&%Y``!&<FED
+M87D``%-A='5R9&%Y```````X````0````$@```!0````6@```&0```!L2F%N
+M`$9E8@!-87(`07!R`$UA>0!*=6X`2G5L`$%U9P!397``3V-T`$YO=@!$96,`
+M````D@```)8```":````G@```*(```"F````J@```*X```"R````M@```+H`
+M``"^2F%N=6%R>0!&96)R=6%R>0``36%R8V@`07!R:6P`36%Y`$IU;F4``$IU
+M;'D``$%U9W5S=```4V5P=&5M8F5R`$]C=&]B97(`3F]V96UB97(``$1E8V5M
+M8F5R``````#R````^@```00```$*```!$````10```$:```!(````2@```$R
+M```!.@```40E82`E8B`E92`E2#HE33HE4R`E60``)6TO)60O)7D@)4@Z)4TZ
+M)5,`)6TO)60O)7D```H`4$T``$%-```E2#HE30`E23HE33HE4R`E<``E2#HE
+M33HE4P``"0`E;2\E9"\E>0````````/L````)@````$```%Z```!=@```7(`
+M``%N```!:@```68```%B```!7@```5H```%6```!4@```4X```#N````Z@``
+M`.8```#B````W@```-H```#6````T@```,X```#*````Q@```,(```".````
+MB@```(8```""````?@```'H```!V````-````#`````L````*````"0````@
+M````'`````````/R```#ZP````D```/R```#Z0```!8@;P`$("\`"$CG)P(N
+M`"((+&P``"0\```#[4ZN_^(L`$ZZ``!*AF<<(`8B!TZZ```J`"(&3J[_W$J`
+M9@1*A6<$(`5@#DZN_WQ.N@``*4```'#_3-]`Y$YU```#[X8```)?1$]30F%S
+M90````$````2@P```T!C:&MA8F]R=`````````$````B@P``!$!?9&]?=')U
+M;F-A=&4````````!````+H,```1`8V]N=F5R=%]O<V5R<@```````0```$J&
+M```"7V5R<FYO```````!````3@````````/Q`````P````!/4%13``0`0```
+M`_(```/I````U2!O``0B;P`(("\`#"(O`!`O;P`4``0O;P`8``@O;P`<``R>
+M_``P2.<O-BXO`%@O2``L*@`H`7Q`Y8XO0``D+T$`*"])`#!P0.6(3KH``"I`
+M+T``1"`%4H!F$BQL``!.KO_*+T``0$*O`%!@)DAO`$!(>`@!+P5.N@``3^\`
+M#%*`9@1"KP!`<`$O0`!0(`5.N@``(`12@&82+&P``$ZN_\0O0``\0J\`3&!&
+MNH1F#"]O`$``/$*O`$Q@-DAO`#Q(>`@!+P1.N@``3^\`#%*`9@9P`"]``#PB
+M+P`\LJ\`0%;`1`!(@$C`+T``3"`$3KH``'#_OH!F$"!L```O:`#@`#A"KP!(
+M8%!P_KZ`9@PO;P`\`#A"KP!(8#Y(;P`X2'@(`2\'3KH``$_O``Q2@&8&<``O
+M0``X("\`."(O`#RR@&<*L*\`0&<$<`%@`G``+T``2"`'3KH``$JO`$!G``%D
+M2J\`/&<``5Q*KP`X9@92AV8``5`@#6<``40F37@`+V\`,``T8```K$J$9@8@
+M;P`L8`(@521(>@,J2&`:4H40%7(JL`%G#'(BL`%G!G(*L`%F`E*%4HU*%6;B
+M*F\`1"!-T<8B2]/%3>D``;W(920@!M"&T(4L`"!-3KH``"I`2H!G``#:(`N0
+MKP!$)DW7P"]-`$0@2Q"\`"!4BQ%\`"(``2I*8"`0%7(BL`%G!G(JL`%F!A;\
+M`"I@"G(*L`%F!!;\`"L6W4H59MP6_``B4H18KP`T*F\`-$J59@#_3D(3*F\`
+M7"`-9Q`B#2QL``!T_DZN_ZPH`&`">`!*A&8$(`UF/"IO`$0O+P!@+P0O+P!0
+M+R\`1"\O`%PO+P!0("\`6"(O`&@@34ZZ``!/[P`8*@!2@&<:($U.N@``(`5@
+M>"QL``!.KO]\3KH``"E```!*A&<2(@0L;```3J[_IF`&<`PI0```("\`0&<0
+M2J\`4&<*(@`L;```3J[_W"`O`#QG$$JO`$QG"B(`+&P``$ZN_]P@+P`X9Q!*
+MKP!(9PHB`"QL``!.KO_<*F\`1"`-9P8@34ZZ``!P_TS?;/3>_``P3G4@;P`$
+M(F\`""`O``PB+P`0+V\`%``$+V\`&``(+P4J+P`,+P4O+P`,2'C__V$`_-A/
+M[P`,*A].=0```^^#```"0&UA;&QO8P`````!````3(8```)?1$]30F%S90``
+M``@```+\```"Y@```M````*R```"G````D@```":````7(,```)?:6]C=&P`
+M``````,```$D````Q@```'B#```$0%]P<V5U9&]?8VQO<V4```````,```%4
+M````[@```)"&```!7U]U<P````$```#X@P```D!R96%L;&]C`````0```=B#
+M```$0%]S=&%R=%]P<F]C97-S``````$```*$@P```D!F<F5E`````````@``
+M`PX```*4@P``!$!C;VYV97)T7V]S97)R```````!```"I(8```)?97)R;F\`
+M``````(```*^```"J`````````/Q`````P````!/4%13``0`0````_(```/I
+M`````G`!3G5P`4YU```#\0````,`````3U!44P`$``````/R```#Z0````X@
+M+P`$+P<N`$ZZ```@!R!L``!R`$ZZ``!@#"`L``!.N@``3KH``"!L``!.N@``
+M2H!GZ'``+A].=0```^^#```#0&-H:V%B;W)T`````````0````J&```#7U]O
+M9&1?=&EM97(``````@```"@````0@P``!$!?=&EM97)?<W1A<G0````````!
+M````%H8```-?7V]D9%]S:6<````````!````'(,```1`7W=A:71?<VEG;F%L
+M<P```````0```""#```$0%]H86YD;&5?<VEG;F%L<P````$````D@P``!$!?
+M=&EM97)?97AP:7)E9``````!````+`````````/Q`````P````!/4%13``0`
+M0````_(```/I````#R!O``0@+P`(2.<!!"X`*DA.N@``+P=(>`,!+PU.N@``
+M3^\`#$S?((!.=2!O``0@+P`(2.<!!$S?((!@S````^^#```#0&-H:V%B;W)T
+M`````````0```!*#```"7V]P96X````````!````'@````````/Q`````P``
+M``!/4%13``0``````_(```/I````(R`O``0@;P`((B\`#%E/2.<#-"P!+@`J
+M2$ZZ```@!TZZ```F0$J`9T0(*P`!``-G-@@K``,``V<6(&L`&"](`!0@:P`$
+M<`!R`B)O`!1.D2!K`!0O2``4(`8@:P`$(DTD;P`43I)@"'`-*4```'#_3-\L
+MP%A/3G4@+P`$(&\`""(O``Q(YP,$3-\@P&"````#[X,```-`8VAK86)O<G0`
+M```````!````&H,```-`7V9I;F1?9F0````````!````((8```)?97)R;F\`
+M``````$```!J`````````_$````#`````$]05%,`!`!````#\@```^D````,
+M(&\`!%%/+PTJ2$'O``1.N@``2H!J!'#_8`X@#6<&("\`!"J`("\`!"I?4$].
+M=0`````#[X,```-`7V=E='1I;64````````!````$`````````/Q`````P``
+M``!/4%13``0``````_(```/I````'2!O``2>_`!`2.<[%BI(3KH``"`-9U)*
+M%6=.(@U![P`@)`@L;```=D!X`$ZN_'8N`&TV3J[_?"P`4H!.N@``)D!*@&<D
+MOH9G%"8&4H,B#20+3J[\=DJ`;Q`@`F`.($(B2Q+89OP@"V`"<`!,WVC<WOP`
+M0$YU```#[X,```-`8VAK86)O<G0````````!````$(8```)?1$]30F%S90``
+M``$````D@P```D!M86QL;V,``````0```#P````````#\0````,`````3U!4
+M4P`$`$````/R```#Z0```!,@;P`$(F\`"$CG,Q(F22((+&P``'3^3J[_K"X`
+M3KH``$J'9QHB"R0'=@!.KOY$+``B`DZN_Z9*AF<$(`-@!DZZ``!P_TS?2,Q.
+M=0`````#[X8```)?1$]30F%S90````$````2@P```T!C:&MA8F]R=```````
+M``$````>@P```D!?<V5T97)R`````0```$`````````#\0````,`````3U!4
+M4P`$`$````/R```#Z0```"0@;P`$GOP`#$CG`10J2$H89OQ3B)'-(`@F3=?`
+M78M^84ZZ```O+```2&P``$AO`!=.N@``3^\`#$'O``\B2$H99OQ3B9/((`ER
+M!;"!;PA![P`*T<!@!$'O``\O"$AL``0O"TZZ``!/[P`,%H<@37``3KH``$J`
+M9@I2!W!ZO@!OZD(5(`U,WRB`WOP`#$YU``````/X`````@````$```!>````
+M*@````````/O@P```T!C:&MA8F]R=`````````$````BA@```5]?=7,````!
+M````)H,```-?7W-P<FEN=&8````````"````9````#*#```#0%]?86-C97-S
+M`````````0```'(````````#\0````,`````3U!44P`$`$````/R```#Z@``
+M``(E;'@`825S`````_(```/I````!B!O``0O#2I(3KH``"!-<$#IB"I?3OH`
+M`````^^#```#0&-H:V%B;W)T`````````0````J#```"0&=E=&-W9``````!
+M````%@````````/Q`````P````!/4%13``0``````_(```/I````#R!O``0@
+M+P`(2.<A!BX`*DA.N@``(`=.N@``)``B#2QL``!.KO]&2H!G!'``8`9.N@``
+M</],WV"$3G4``````^^#```#0&-H:V%B;W)T`````````0```!*#```%0%]M
+M86ME7W!R;W1E8W1I;VX````````!````&(8```)?1$]30F%S90````$````@
+M@P```D!?<V5T97)R`````0```#`````````#\0````,`````3U!44P`$`$``
+M``/R```#Z0```!P@+P`$(B\`""]O``P`!%%/2.<'`"HO`!@L`2X`3KH``"`'
+M3KH``$J`9QHB0"!I`!@O2``0(`8B!2!I``0B;P`03I%@`G#_3-\`X%!/3G4@
+M+P`$(B\`""]O``P`!$CG!P`J+P`0+T4`$$S?`.!@H``````#[X,```-`8VAK
+M86)O<G0````````!````'H,```-`7V9I;F1?9F0````````!````)```````
+M``/Q`````P````!/4%13``0``````_(```/I````'"`O``0@;P`((B\`#%E/
+M2.<#-"P!+@`J2$ZZ```@!TZZ```F0$J`9R8(*P````-G&"!K`!`O2``4(`8@
+M:P`$(DTD;P`43I)@"'`-*4```'#_3-\LP%A/3G4@+P`$(&\`""(O``Q(YP,$
+M3-\@P&">``````/O@P```T!C:&MA8F]R=`````````$````:@P```T!?9FEN
+M9%]F9`````````$````@A@```E]E<G)N;P```````0```$P````````#\0``
+M``,`````3U!44P`$`$````/R```#Z0```($@+P`$(&\`"")O``PO;P`0``0O
+M;P`4``B>_``L2.<_-B9)*D@O0`!`)&\`7"`*9PY*DF8*2JH`!&8$<`%@`G``
+M<@`O0``T)`UG`B(5=``O00`L)@MG`B03>@!^`2]"`#!@4B@O`"S(ARPO`##,
+MATZZ``!*A&8$2H9G-B`%3KH``"1`2H!F!G#_8``!;DJ$9P@(*@````-G#$J&
+M9Q0(*@`!``-F#'`-*4```'#_8``!2E*%WH>ZKP!`;:@D;P!<(`IG$"`2(BH`
+M!"!L``!.N@``8`@@;```3KH``'H`(`5"KP!0>@!^`2]``"A@.B@O`"S(ARPO
+M`##,ATJ$9@1*AF<B(`5.N@``(D`@:0`(+T@`/"`$(@8@:0`$(F\`/$Z1@:\`
+M4%*%WH>ZKP!`;<`H+P!0(`12@&<&2J\`-&<(<`!.N@``8`H@+```@(1.N@``
+M+T``3'P`>`$N+P`P*B\`*&!P("\`+,"$+T``2"('PH0O00!$2H!F!$J!9U(@
+M!DZZ```B0"!I``Q(;P!$+T@`/"!I``1#[P!,+&\`/$Z66$\@+P!(9@HB#6<&
+M(@1&@<.5("\`1&8*(@MG!B($1H'#DTJO`$AF!DJO`$1G`E*%4H;8A+RO`$!M
+MBB`O`$Q.N@``2H5F%"!L``!.N@``2H!F"$JO`#1G`/[H(`5,WVS\WOP`+$YU
+M``````/O@P```T!C:&MA8F]R=`````````$```!P@P```T!?9FEN9%]F9```
+M``````,```%^```!!````'Z&```"7V5R<FYO```````!````J(8```-?7V]D
+M9%]T:6UE<@`````#```!Y````-0```#*@P``!$!?=&EM97)?<W1A<G0`````
+M```!````SH,```1`7W1I;65R7V%B;W)T`````````0```-B#```$0%]C:&5C
+M:U]S:6=N86QS``````$```%`A@```U]?;V1D7W-I9P````````$```%&@P``
+M!$!?=V%I=%]S:6=N86QS```````!```!3(,```1`7VAA;F1L95]S:6=N86QS
+M`````0```=R#```$0%]T:6UE<E]E>'!I<F5D``````$```'H`````````_$`
+M```#`````$]05%,`!`!````#\@```^D````@44](YR,D+B\`($ZZ```L+P`H
+M(`=.N@``*D!*@&=8("\`)%>`9PQ3@&<.<!8I0```8$1P#,"58$`@%70,S((D
+M``)"__.$ABJ"<@3"@G0$P(*P@6<>+T$`&"!M`"`O2``4(&T`!$/O`!AP`"1O
+M`!1.DF`&<`!@`G#_3-\DQ%!/3G4```/O@P```T!C:&MA8F]R=`````````$`
+M```,@P```T!?9FEN9%]F9`````````$````6A@```E]E<G)N;P```````0``
+M`"X````````#\0````,`````3U!44P`$`$````/R```#Z0````````/Q````
+M`P````!/4%13``0``````_(```/J````WF%M:6=A('-P96-I9FEC(&5R<F]R
+M````````56YK;F]W;B!E<G)O<@!N;W0@;W=N97(`;F\@<W5C:"!F:6QE(&]R
+M(&1I<F5C=&]R>0!N;R!S=6-H('!R;V-E<W,`:6YT97)R=7!T960@<WES=&5M
+M(&-A;&P`:2]O(&5R<F]R`&YO('-U8V@@9&5V:6-E(&]R(&%D9')E<W,`87)G
+M=6UE;G0@;&ES="!T;V\@;&]N9P``97AE8R!F;W)M870@97)R;W(`8F%D(&9I
+M;&4@;G5M8F5R`&YO(&-H:6QD('!R;V-E<W,``&YO(&UO<F4@<')O8V5S<V5S
+M`&YO="!E;F]U9V@@;65M;W)Y`'!E<FUI<W-I;VX@9&5N:65D`&)A9"!A9&1R
+M97-S`&)L;V-K(&1E=FEC92!R97%U:7)E9`!M;W5N="!D979I8V5S(&)U<WD`
+M`&9I;&4@97AI<W1S`&-R;W-S+61E=FEC92!L:6YK`&YO('-U8V@@9&5V:6-E
+M``!N;W0@82!D:7)E8W1O<GD`:7,@82!D:7)E8W1O<GD``&EN=F%L:60@87)G
+M=6UE;G0``&9I;&4@=&%B;&4@;W9E<F9L;W<`=&]O(&UA;GD@;W!E;B!F:6QE
+M<P!N;W0@82!T>7!E=W)I=&5R``!T97AT(&9I;&4@8G5S>0``9FEL92!T;V\@
+M8FEG``!N;R!S<&%C92!L969T(&]N(&1E=FEC90!I;&QE9V%L('-E96L``')E
+M860M;VYL>2!F:6QE('-Y<W1E;0!T;V\@;6%N>2!L:6YK<P``8G)O:V5N('!I
+M<&4`;6%T:"!A<F=U;65N=`!R97-U;'0@=&]O(&QA<F=E``!)+T\@<W1R96%M
+M(&5M<'1Y``!F:6QE(&YA;64@=&]O(&QO;F<``&1I<F5C=&]R>2!N;W0@96UP
+M='D`=&]O(&UA;GD@<V]F="!L:6YK<R`H;&]O<#\I`````!H````H````,@``
+M`$P```!<````=````'X```"8````L````,(```#2````Y````/8```$(```!
+M&@```28```$\```!4````5P```%N```!?@```8X```&>```!L````<0```'8
+M```!Z@```?H```((```"(````BX```)$```"5````F````)N```"@````I(`
+M``*F```"N@```"8``````^P````H`````0```VX```-J```#9@```V(```->
+M```#6@```U8```-2```#3@```TH```-&```#0@```SX```,Z```#-@```S(`
+M``,N```#*@```R8```,B```#'@```QH```,6```#$@```PX```,*```#!@``
+M`P(```+^```"^@```O8```+R```"[@```NH```+F```"X@```MX```+:```"
+MU@```!8````````#\@```^D```!%("\`!"E```!*@&<``(9R9Y"!9P``@E6`
+M9P``@'()D(%G?%.`9WA3@&=T4X!G<%.`9VQ3@&=H4X!G:%.`9VAR49"!9V93
+M@&=F4X!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V95@&=F4X!G9E.`
+M9V93@&=F4X!G9E.`9V95@&=F4X!G9E.`9V93@&=F8&AP`&!F<`Q@8G`+8%YP
+M%F!:<`=@5G`(8%)P$&!.<!%@2G`"8$9P`F!"<!9@/G`'8#IP%F`V<"1@,G`6
+M8"YP%F`J<!Y@)G`28")P)6`><"9@&G`38!9P%F`2<!Q@#G`-8`IP#6`&<`U@
+M`G#_3G4O#BQL``!.KO]\80#^^BE````L7TYU```#^`````$````!```!#@``
+M``````/OA@```E]?3U-%4E(``````0````:&```"7T1/4T)A<V4````!```!
+M`@````````/Q`````P````!/4%13``0`0````_(```/K`````0```_(```/I
+M````!4ZZ``!.N@``3KH``'(&3OH````````#[X,```-`8VAK86)O<G0`````
+M```!`````H,```-`7V-L;W-E7V%L;``````!````!H,```)`9V5T<&ED````
+M``$````*@P```D!K:6QL`````````0```!`````````#\0````,`````3U!4
+M4P`$``````/R```#Z0```%D@;P`$("\`"%E/2.<!%BX`+T@`$"!O`!`J4&!D
+M<`VP+0`(9EH@+0"L9P;E@"!`8`*1R"9(("T`G+"'9S0@+0"@L(=G+"`M`."P
+MAV<D(`MG+B`K`!RPAV<8("L`(+"'9Q`@*P`XL(=G""`K`#"PAV8.(DUP8.^(
+M+'@`!$ZN_KPJ54J59IA,WVB`6$].=2`O``0B+P`(2.<!`BX`(`%3@&<,4X!G
+M"%.`9P1=@&8L+'@`!$ZN_WP@;```T/P!EB`'80#_2"!L``#0_`&D(`=A`/\Z
+M3J[_=G``8`AP%BE```!P_TS?0(!.=2`O``0B+P`(2.<&!"P!*@!.N@``2H5J
+M`D2%NJP``&8.2H9G!B`&3KH``'``8$@@!4ZZ```J0$J`9P9*K0`49PIP`RE`
+M``!P_V`L(`9G*"(M`!#!06$`_U@B`'`)O(!F%'(!*T$`%"M``!AP%$ZZ``!P
+M`&`"(`%,WR!@3G4``````^^&```"7U-Y<T)A<V4````"````Q````+:&```"
+M7V5R<FYO```````"```!*@```-R#```#0&-H:V%B;W)T`````````0```/B&
+M```#7U]O=7)?<&ED`````````0```0*#```$0%]S:6=?9&ES<&%T8V@`````
+M``(```%4```!#H,```-`7V9I;F1?<&ED```````!```!&`````````/Q````
+M`P````!/4%13``0`0````_(```/I````0R!O``1(YP`&*D@B32QX``1.KO\$
+M($U,WV``3OH``"`O``1(YP$$+@`J;``(8`X@+0`,L(=F!"`-8`@J54J59NYP
+M`$S?((!.=4CG(`)![``(3KH``"`L```B+```)`"S@@*"`'___RE"``12@BE"
+M```O`2\`2&P``$AL`!1.N@``3^\`$"QX``1.KOUF*4``.&<00>P`%'``3KH`
+M`"E``#1F"DAL``Y.N@``6$],WT`$3G5(YP`&("P`.&<*($`L>``$3J[]8$JL
+M`#1G."QX``1.KO]\8`PB37`<+'@`!$ZN_RX@;``T+'@`!$ZN_HPJ0$J`9N(@
+M;``T3KH``"QX``1.KO]V3-]@`$YU``````/X`````@````$```"D````=@``
+M``P````"````]@```.0```#(````N````)X```"4````C@```'H```!N````
+M:````$X````J`````````^^#```"0&9R964````````!````'(,```)`3F5W
+M3&ES=`````$```!2A@```5]?=7,````!````5H8```1?7W-T87)T=7!?=&EM
+M90```````0```%J#```#7U]S<')I;G1F`````````0```'Z#```#0$-R96%T
+M95!O<G0``````0```)J#```"7U]F86EL```````!````J(,```-`1&5L971E
+M4&]R=``````!````^@````````/Q`````P````!/4%13``0`0````_(```/J
+M````!F1O;W(N)6QX+B5L>```3F\@;65M;W)Y`````_(```/K````#P```_(`
+M``/I````+R!O``0@+P`((B\`#")O`!`O;P`4``0O;P`8``A93TCG#S8H+P`L
+M*B\`*"P!+@`J22](`"`L>``$3J[]9B9`2H!G,"!+(`1.KOUR)$!*@&<B(`UG
+M""5-`"@E10`D(&\`("`'(DHB!DZN_D1*`&8$(`I@%B`*9P8@2DZN_6P@"V<&
+M($M.N@``<`!,WVSP6$].=2!O``1(YP`&*D@@#6<8(DTL>``$3J[^/B!M``Y.
+MN@``($U.KOUL3-]@`$YU```#[X,```-`1&5L971E4&]R=``````"````K@``
+M`(0````````#\0````,`````3U!44P`$``````/R```#Z0```!0@;P`$("\`
+M"$CG(08N`"I(3KH``"(-+&P``$ZN_XA*@&<B(@!.KO^F(`=.N@``(`=.N@``
+M)``B#4ZN_T9*@&<$<`!@!DZZ``!P_TS?8(1.=0```^^#```#0&-H:V%B;W)T
+M`````````0```!*&```"7T1/4T)A<V4````!````&(,```5`7VUA:V5?<')O
+M=&5C=&EO;@````````(````R````+(,```)`7W-E=&5R<@````$```!&````
+M`````_$````#`````$]05%,`!`!````#\@```^D```!U(&\`!")O``@O;P`,
+M``0@+P`0+V\`%``(2.<'-"X`)&\`("9)*D@L*P!T)*\`'$*J`!(U?``!``Y"
+M:@`0)7P```(``#(U?``"``PE:P"``#8@*P!\9A`B*P`$;PHE?```"```%F`$
+M)4``%B53``1!ZP"$3KH``"5``"(E0``:)4``*B`K``1:@&<^58!G4%F`9T!5
+M@&9F(`UG'$AX`/](;```+PU.N@``3^\`#"H`;P8E10`68`@E?````0``%B5\
+M``"@```(8$HE?```$```"&!`)7P``$````A\`&`T2I-F$$HK``AF"B5\```@
+M```(8"`E?```@```"&`6("L`!&\&<$#AB&`&(#P``(``)4``"$J'9P)\`"`&
+M3KH``(&J``A,WRS@3G4@;P`$(F\`"%E/2.<C%BI(?@`O20`80J<L;```<@(D
+M#TZN_QQ/[P`$)D!*@&=0(@UT_DZN_ZPN`&=$(@<D"TZN_YI*@&<X(@=.KO\N
+M2H!7QD0&2(9(QDJ`9P8B`$ZN_Z8@!^6`+R\`&"!`+R@`#")"(`8@36$`_GI0
+M3WP`8`Y\_TZN_WQ.N@``*4```$J'9P8B!TZN_Z8@"V<()`MR`DZN_Q8@!DS?
+M:,183TYU```#^`````$````!````H`````````/O@P```T!?86UI9V$R9VUT
+M``````$```!T@P```U]R96%D;&EN:P````````$```"F@P```T!?;6%K95]M
+M;V1E``````$```$<A@```E]$3U-"87-E`````0```4*#```$0&-O;G9E<G1?
+M;W-E<G(```````$```&NA@```E]E<G)N;P```````0```;(````````#\0``
+M``,`````3U!44P`$`$````/R```#ZP```$````/R```#^P``")L11`!?<V5T
+M:FUP`'1E>'0`0%]L;VYG:FUP`$!?<V5T:FUP`%]?;&]N9VIM<`!?7W-E=&IM
+M<`!S<')I;G1F`%],5D]287=$;T9M=`!?06)S17AE8T)A<V4`7U]S<')I;G1F
+M`'1M<&YA;2YC`%]M:W1E;7``0'1M<&YA;0!?=&UP;F%M`%]?34521T5$`'!O
+M<&5N+F,`7W=A:71P:60`0&9C;&]S90!`9G)E90!`7W-T87)T7W!R;V-E<W,`
+M0%]S971E<G(`7V5R<FYO`%]$3U-"87-E`$!F;W!E;@!?7V9I9F]?8F%S90!?
+M7V9I9F]?;V9F<V5T`$!M86QL;V,`0'!C;&]S90!?<&-L;W-E`$!P;W!E;@!?
+M<&]P96X`<W1A<G0N8P!`8V]N=F5R=%]O<V5R<@!?7W!R;V-E<W-E<P!?7W-T
+M86-K7W-I>F4`7U]N97AT7W!I9`!?7V1O;W)?;F%M90!?7W-T87)T=7!?<&]R
+M=`!?3&EN:V5R1$(`7U]S=&%R=%]P<F]C97-S`%]?8VAI;&1?9&]O<E]N86UE
+M`%]?8VAI;&1?8V]M;6%N9%]L96X`7U]C:&EL9%]C;VUM86YD`%]?8VAI;&1?
+M97AI=`!?7V-H:6QD7V5N=')Y`&=E='!I9"YC`%]?;W5R7W!I9`!`8VAK86)O
+M<G0`0&=E='!I9`!?9V5T<&ED`'-I9VYA;"YC`%]?<VEG7VAA;F1L97)S`$!S
+M:6=N86P`7W-I9VYA;`!`<VEG=F5C`%]S:6=V96,`<VEG<V5T;6%S:RYC`$!?
+M<VEG7V1I<W!A=&-H`%]?<VEG7W!E;F1I;F<`7U]S:6=?;6%S:P!`<VEG8FQO
+M8VL`7W-I9V)L;V-K`$!S:6=S971M87-K`%]S:6=S971M87-K`'-T870N8P!?
+M<F5A9&QI;FL`0%]F:6)S=&%T`$!?;&9I8G-T870`7U]T96UP7V9N86UE`%]L
+M87-T7V5N=')Y`$!?9V5T7V-D`%]L87-T7V1I<@!`;'-T870`7VQS=&%T`$!S
+M=&%T`%]S=&%T`&1I<BYC`$!S965K9&ER`%]S965K9&ER`$!T96QL9&ER`%]T
+M96QL9&ER`$!R96%D9&ER`%]R96%D9&ER`$!C;&]S961I<@!?8VQO<V5D:7(`
+M0&]P96YD:7(`7V]P96YD:7(`9&ER7V1A=&$N8P!?7V=E=%]C9`!A8V-E<W,N
+M8P!`86-C97-S`%]A8V-E<W,`0%]?86-C97-S`%]?7V%C8V5S<P!F<W1A="YC
+M`%]I;V-T;`!`9G-T870`7V9S=&%T`'-Y;6QI;FLN8P!`<WEM;&EN:P!?<WEM
+M;&EN:P!M97-S86=E+F,`0&5X:70`7U]0<F]G<F%M3F%M90!?7U="96YC:$US
+M9P!?7W5S`%]?9F%I;`!?7VUE<W-A9V4`86QL;V-D;W,N8P!?06QL;V-$;W-/
+M8FIE8W1486=S`'-E=&IM<"YC`$!L;VYG:FUP`%]L;VYG:FUP`$!S971J;7``
+M9V5T:&]S=&YA;64N8P!?<W1R;F-P>0!?7W-Y<W1E;5]N86UE`$!G971H;W-T
+M;F%M90!?9V5T:&]S=&YA;64`<&5R<F]R+F,`7U]/4T524@!?<WES7V5R<FQI
+M<W0`7W-Y<U]N97)R`$!W<FET90!`<&5R<F]R`%]P97)R;W(`<VEG;&ES="YC
+M`%]S>7-?<VEG;&ES=`!W86ET-"YC`$!?:&%N9&QE7W-I9VYA;',`0%]W86ET
+M7W-I9VYA;',`0%]F<F5E7V5N=')Y`$!W86ET<&ED`$!W86ET`%]W86ET`$!W
+M86ET,P!?=V%I=#,`0'=A:70T`%]W86ET-`!P<V5U9&]?8RYC`$!?9G)E95]F
+M9`!`7V9I;F1?9F0`0%]P<V5U9&]?8VQO<V4`7U]P<V5U9&]?8VQO<V4`<FEN
+M9&5X+F,`0'-T<G)C:'(`0')I;F1E>`!?<FEN9&5X`&EN9&5X+F,`0'-T<F-H
+M<@!`:6YD97@`7VEN9&5X`'1I;65R<RYC`$!?9&5V:6-E7V-L;W-E`$!?9&5V
+M:6-E7V]P96X`0%]T:6UE<E]E>'!I<F5D`%]?=&EM97)?97AP:7)E9`!`7W1I
+M;65R7W-T87)T`%]?=&EM97)?<W1A<G0`0%]T:6UE<E]S:6<`7U]T:6UE<E]S
+M:6<`0%]T:6UE<E]A8F]R=`!?7W1I;65R7V%B;W)T`$!?9G)E95]T:6UE<@!?
+M7V9R965?=&EM97(`0%]A;&QO8U]T:6UE<@!?7V%L;&]C7W1I;65R`&9I9F]F
+M9"YC`%]?<W1A<G1U<%]T:6UE`$!?8VQE86YU<%]F:69O`%]?8VQE86YU<%]F
+M:69O`$!?:6YI=%]F:69O`%]?:6YI=%]F:69O`%]?9FEF;U]S:6<`7U]F:69O
+M7V]K`%]?1FEF;T)A<V4`8VQO<V4N8P!`8VQO<V4`7V-L;W-E`$!?7V-L;W-E
+M`%]?7V-L;W-E`&9I;&5S+F,`0%]L87-T7V9D`%]?;&%S=%]F9`!?7V9I;F1?
+M9F0`7U]F<F5E7V9D`$!?86QL;V-?9F0`7U]A;&QO8U]F9`!U=&EM92YC`$!?
+M9VUT,F%M:6=A`$!T:6UE`$!U=&EM90!?=71I;64`8F-O<'DN8P!`;65M;6]V
+M90!`8F-O<'D`7V)C;W!Y`&%M:6=A=&EM92YC`%]D87EL:6=H=`!?='IN86UE
+M`%]?0UA$,S,`0&QO8V%L=&EM90!`7V=E='1I;64`0&9T:6UE`%]F=&EM90!`
+M9V5T=&EM96]F9&%Y`%]G971T:6UE;V9D87D`=&EM96-O;G9E<G0N8P!?5&EM
+M97)"87-E`$!?86UI9V$R9VUT`%]?86UI9V$R9VUT`%]?9VUT,F%M:6=A`%]?
+M9V5T=&EM90!P=V0N8P!`9V5T;&]G:6X`7V=E=&QO9VEN`$!G971P=VYA;0!?
+M9V5T<'=N86T`0&=E='!W=6ED`%]G971P=W5I9`!?7V%M:6=A7W5S97(`<F5A
+M9&QI;FLN8P!?<W1R;&5N`$!R96%D;&EN:P!A;&QO8V$N8P!?;6%L;&]C`%]F
+M<F5E`%]A;&QO8V$`=6YL:6YK+F,`0'5N;&EN:P!?=6YL:6YK`'!I<&4N8P!`
+M<W1R8V%T`$!.97=,:7-T`$!S;V-K971P86ER`%]S;V-K971P86ER`$!P:7!E
+M`%]P:7!E`&=R<"YC`$!G971G<FYA;0!?9V5T9W)N86T`0&=E=&=R9VED`%]G
+M971G<F=I9`!S:6=N86QS+F,`7U]&4$524@!`7U]E>&ET`$!?9FEN9%]P:60`
+M0%]C;&5A;G5P7W!R;V-E<W-E<P!?7V-H:6QD<F5N7V5X:70`0%]I;FET7W!R
+M;V-E<W-E<P!`7V-L96%N=7!?<VEG;F%L<P!?7V-L96%N=7!?<VEG;F%L<P!`
+M7VEN:71?<VEG;F%L<P!?7VEN:71?<VEG;F%L<P!`0VAK7T%B;W)T`%]#:&M?
+M06)O<G0`7V-H:V%B;W)T`$!#6$9%4E(`7T-81D524@!?7VAA;F1L95]S:6=N
+M86QS`%]?=V%I=%]S:6=N86QS`$!?8VAE8VM?<VEG;F%L<P!?7V-H96-K7W-I
+M9VYA;',`7U]S:6=?9&ES<&%T8V@`0&%L87)M`%]A;&%R;0!?;6%I;BYC`$!M
+M86EN`$!?7V=E=&5N=@!`='%S;W)T`$!S=')N8W!Y`%]?7V-T>7!E`$!?:6YI
+M=%]U;FEX:6\`7U]?:6]B`%]?6$-%6$E4`%]3>7-"87-E`$!R96%L;&]C`%]?
+M7VUA:6X`0&UA:V5?96YV:7)O;@!?;6%K95]E;G9I<F]N`%]E;G9I<F]N`%]?
+M;V1D7W-I9P!?7V]D9%]T:6UE<@!U;6%S:RYC`$!U;6%S:P!?=6UA<VL`<')O
+M=&5C=&EO;BYC`$!?;6%K95]M;V1E`%]?;6%K95]M;V1E`$!?;6%K95]P<F]T
+M96-T:6]N`%]?;6%K95]P<F]T96-T:6]N`%]U<V5?86UI9V%?9FQA9W,`9VED
+M+F,`0&=E=&5G:60`7V=E=&5G:60`0&=E=&=I9`!?9V5T9VED`%]E>&ET+F,`
+M0%]E>&ET`%]?97AI=`!?7U]E>&ET`$!?8VQO<V5?86QL`%]?8VQO<V5?86QL
+M`&EO8W1L+F,`0&EO8W1L`&]P96XN8P!`7V%L;&]C7V%M:6=A9F0`0'-T<FEC
+M;7``7V]P96X`7U]?;W!E;@!C=&EM92YC`%]S<')I;G1F`$!R96%D`$!?='IS
+M970`7U]T>G-E=`!`;6MT:6UE`%]M:W1I;64`0&-T:6UE`%]C=&EM90!`87-C
+M=&EM90!?87-C=&EM90!`9VUT:6UE`%]G;71I;64`7VQO8V%L=&EM90!`='IS
+M971W86QL`%]T>G-E='=A;&P`0'1Z<V5T`%]T>G-E=`!?=&EM97IO;F4`86UI
+M9V%D;W,N8P!?7VEN:71?=6YI>&EO`%]?86QL;V-?86UI9V%F9`!`7V1O7W1R
+M=6YC871E`%]?9&]?=')U;F-A=&4`<F5N86UE+F,`0')E;F%M90!?<F5N86UE
+M`&-H;W=N+F,`0&9C:&]W;@!?9F-H;W=N`$!C:&]W;@!?8VAO=VX`8F-M<"YC
+M`$!B8VUP`%]B8VUP`&)Z97)O+F,`0&)Z97)O`%]B>F5R;P!F=')U;F-A=&4N
+M8P!`9G1R=6YC871E`%]F=')U;F-A=&4`9F-H;6]D+F,`0&9C:&UO9`!?9F-H
+M;6]D`&UK9FEF;RYC`$!M:VYO9`!?;6MN;V0`0&UK9FEF;P!?;6MF:69O`&ES
+M871T>2YC`$!I<V%T='D`7VES871T>0!S:6=P875S92YC`$!S:6=P875S90!?
+M<VEG<&%U<V4`<FUD:7(N8P!`<FUD:7(`7W)M9&ER`'-T<F9T:6UE+F,`0'-T
+M<F9T:6UE`%]S=')F=&EM90!T<G5N8V%T92YC`$!T<G5N8V%T90!?=')U;F-A
+M=&4`97AE8RYC`$!E>&5C`%]E>&5C`$!E97AE8P!?965X96,`=6ED+F,`0&=E
+M=&5U:60`7V=E=&5U:60`0&=E='5I9`!?9V5T=6ED`'-L965P+F,`0'-L965P
+M`%]S;&5E<`!C<F5A="YC`$!C<F5A=`!?8W)E870`0%]?8W)E870`7U]?8W)E
+M870`=W)I=&4N8P!?=W)I=&4`0%]?=W)I=&4`7U]?=W)I=&4`=&EM92YC`%]T
+M:6UE`&=E=&5N=BYC`%]?7V=E=&5N=@!L:6YK+F,`0&QI;FL`7VQI;FL`;6MT
+M96UP+F,`0&UK=&5M<`!G971W9"YC`$!G971C=V0`0&=E='=D`%]G971W9`!C
+M:&UO9"YC`$!C:&UO9`!?8VAM;V0`;'-E96LN8P!`;'-E96L`7VQS965K`$!?
+M7VQS965K`%]?7VQS965K`')E860N8P!?<F5A9`!`7U]R96%D`%]?7W)E860`
+M<V5L96-T+F,`0'-E;&5C=`!?<V5L96-T`&9C;G1L+F,`7V9C;G1L`&5R<F]R
+M7VUS9RYC`&5R<F]R+F,`7U]S971E<G(`7V-O;G9E<G1?;W-E<G(`86)O<G0N
+M8P!`:VEL;`!`86)O<G0`7V%B;W)T`&MI;&PN8P!?:VEL;`!P<F]C97-S97,N
+M8P!`1&5L971E4&]R=`!`0W)E871E4&]R=`!?7V-L96%N=7!?<')O8V5S<V5S
+M`%]?:6YI=%]P<F]C97-S97,`7U]F:6YD7W!I9`!?7V9R965?96YT<GD`9&5V
+M:6-E<RYC`%]?9&5V:6-E7V-L;W-E`%]?9&5V:6-E7V]P96X`;6MD:7(N8P!`
+M;6MD:7(`7VUK9&ER`&9I8G-T870M:&%R9"YC`%]?9FEB<W1A=`!?7VQF:6)S
+M=&%T`````0````$`"0`)`^D````$``X`%@`!`!@`!``!`"$`#@`!`"L````!
+M`#0`#``!``D`#`/I``(`/`!)``$`5@````$`8``I``,`"0`*`^D``0!H``(`
+M<0`$``$`>0````$`@0`$`^H``````($`"0/K``````"*`%0``P`)`&\#Z0`,
+M`)$`F@"B`*@`N`#"`,D`T0!5`-D`Y0#R``0`^P%>``$!`P%:``$!"P`(``$!
+M$@````$`@0`%`^H``````($``0/K``````$9`2T``P`)`,4#Z0`+`*(`P@$@
+M`3`!/`%)`50`\@%@`,D!;P`"`*D`Y@`!`7D`M@`!`($`!@/J``````"!``H#
+MZP````4!B0`D``$!FP`@``$!KP`<``$!OP`8``$!S`````$!V@)M``$`"0`#
+M`^D``@'C`>P``@'W`````0'_`````0('`H8``0`)`",#Z0`#`,("$`'L``0"
+M'P!B``$")P!:``$"+P`,``$"-P````$"/P+&``$`"0`5`^D`!`)+`EL![`)I
+M``0"=`!&``$"?@!"``$"B``$``$"E`````$"H`,"``(`"0":`^D`"0*F`K`!
+M[`*Z`,D"Q@+3`MX"Z``$`O(!U@`!`OD!S@`!`P`!G@`!`P8!E@`!`($`00/K
+M``````,,`_4``0`)`-`#Z0`)`M,"W@'L`,(!(`#)`/("Z`"B``H#$@,@``$#
+M&P,8``$#)`,(``$#+0,$``$#-@*0``$#/P*,``$#2`).``$#4@)*``$#7`%>
+M``$#90%:``$#;@48``(`"0`(`^D``0#)``("WP````$#>0````$`@0`"`^L`
+M```"`M,`!``!`N@````!`X(%,@`!``D`&P/I``,`P@*P`>P`!`.+`&```0.3
+M`%@``0.;``@``0.E`````0.O!6@``0`)`$$#Z0`&`,(!(`*Z`,D#M@'L``(#
+MO@`(``$#Q0````$#S`77``$`"0`.`^D``P"X`,D![``"`]8`"``!`]\````!
+M`^@%_P`"``D`/@/I``4#\0/X`,D$!@02``($%P#B``$$'@#4``$`@0`/`^H`
+M````!"@&A@`!``D`!P/I``$`R0`!!#,````!!$<&G``!``D`#P/I``0`#0*'
+M`!<":0`$!%``'@`!!%D`%@`!!&(`!``!``$````!!&H&S``!``D`!P/I``($
+M=P2!``($CP`(``$$G`````$$J0;I``(`"0`I`^D`!@#)!+($N@3'`,($T``"
+M!-@`!``!!.`````!`($`"`/J``````3H!U(``@`)```#Z0``````@0#&`^H`
+M```!!/("F``!!/\(1P`!``D`.@/I``4%!@47`,(%)@$P``@%-`#```$`D@"T
+M``$%/0"F``$%0P"B``$%20"2``$%4`"&``$%5P`0``$%7@````$%90BJ``$`
+M"0`2`^D``P5O!7D![``"!80`!``!!9,````!!:((V``!``D``P/I``$%J@`"
+M!;0`"``!!;P````!!<0(Z@`!``D``P/I``$%RP`"!=0`"``!!=L````!!>((
+M_``"``D`30/I``(%Z@7Y``P&"`$$``$&&`$```$&*`#(``$&-@"\``$&1`"H
+M``$&4`"D``$&7`!^``$&:@!Z``$&>`!2``$&A0!.``$&D@````$&H`````$`
+M@0`$`^H`````!JX);0`#``D`'@/I``($$@:W``0&Q@!4``$&U0!4``$&Y```
+M``$&\`````$`@0`%`^H````!!OP````!`($`!`/K````!`<'``P``0#E``@`
+M`0#9``0``0<1`````0<<";H``0`)`!8#Z0`#!6\%>0'L``0')`!0``$'*P!,
+M``$',@`$``$'.P````$'1`GL``(`"0!B`^D``P"B`,(`\@`(!TP!@``!!U8!
+M@``!!7H!3``!!V`!2``!!7`!+``!!VH!*``!!W0`,``!!W\````!`($``@/K
+M``````>*"H```0`)`!H#Z0`%`+@`R0>1!YT![``"!Z0`"``!!ZL````!![(*
+MOP`!``D`!P/I``$'N0`"!\,`#``!!\H````!!]$*U0`"``D`4@/I``8'W0?G
+M!^X']@@!`>P`!`@,`0X``0@3`0H``0@:``@``0@H`````0"!``P#Z@`````(
+M-@MU``$`"0`P`^D``@?N"$0`!@A/`'@``0A;`'0``0>2`"@``0AG`"```0@"
+M``0``0AS`````0A]"[X``@`)``L#Z0````8(@P`D``$(C0`D``$(EP`6``$(
+MH0`2``$(JP`$``$(M0````$`@0`)`^H````!"+\`!``!",P+Z@`!``D`*@/I
+M``8`P@$@"-8`N`#)`>P``@C?``P``0*G`````0CI#$```P`)`"P#Z0`""/$(
+M^0`!"0``+@`!`($`!P/J``````"!``$#ZP`````)"`R=``$`"0`V`^D`!@$@
+M`>P#M@=+`,(`R0`""1$`9``!"1D`8``!"2$-`P`"``D"&@/I`!4%>0#9`.4'
+M!P'L!6\'<P#R`+@`50)+"2<%!@47`,D`P@"B!Q$)+P02!OP`!`DY!]0``0E%
+M!\(``0E1!S8``0E7!S(``0"!`!4#Z@`````)70_\``(`"0`)`^D````$"6,`
+M%@`!"6T`$@`!"7<`!``!"8$````!`($`"0/J``````F+$"<``P`)`*D#Z0`-
+M"94$'0F<":0)KPG$"=,&=P9#!!8&D08G!@<`%`GE`IH``0GW`IH``0H)`EP`
+M`0H8`EP``0HG`EH``0HR`EH``0'M`E(``0H]`E(``0I'`D0``0I/`D```04'
+M`>H``0I7`>8``048`=```0IH`<P``0IW`;8``0J'`;(``0),`0P``0J7`0@`
+M`0JF`"@``0JM`"0``0"!``H#Z@``````@0!$`^L````#`EL!"``!`FD!!``!
+M`A``!``!"K0170`#``D"'0/I`!4#\0J["+\*P0K+"M,*W00&"N4`R0H(!N,&
+M0P:1"O0*^@L$`*(+#`#R!!8``PL6`WH``0L>`'@``0LL`'@``0"!`"P#Z@``
+M````@0`(`^L````(!($`'``!"SH`&``!"$0`%``!`3P`$``!!K<`#``!"T,`
+M"``!"TT`!``!!!(````!"UD4>P`!``D`!`/I`````@MA``0``0MH`````0MO
+M%(<``@`)`#X#Z0````0+?`!^``$+B`!Z``$+E``$``$+I@````$`@0`!`^L`
+M```!"[@````!"\D4U@`!``D``@/I````!`O/``0``0O8``0``0OA`````0OI
+M`````0OQ%.```0`)`!4#Z0`'"OH&=PM-">0&Q0<J!TL`!@OY`$P``0P``$@`
+M`0F=`"8``0P'`"(``0P/`````0P;`````0PG%2H``0`)`!,#Z0`"!7D![``"
+M#"\`#``!`[<````!##854P`"``D`F`/I``H,/`"X`,(+DP2R`2``R0Q,`>P$
+M$@`"#%8"2``!#%P````!`($``@/J``````QD%D0``P`)!6@#Z0`*#&L*P0K3
+M!^X*W0<C#'0,50DG!<L`$`Q[%9(``0R#%9(``0R+%80``0R3%8```0R;$/0`
+M`0RB$/```0RI$)0``0RR$)```0R[#I@``0S##I0``0?W#C```0S+#BP``0S6
+M#38``0SA#38``0SL#,8``0SS#,8``0"!`$@#Z@````,'W0`8``$,^@`4``$'
+MYP`,``$`@03V`^L`````#00<K``"``D!G`/I``L$%@=S`/(![`"B`,(!(`4&
+M"G8`N`#)``8*Y@7L``$-#P7,``$,/056``$-'05(``$-+0+8``$-.P+0``$`
+M@0`(`^H`````#4D>O``!``D`)P/I``0`P@$@`,D![``"#5(`"``!#5H````!
+M#6(?!``!``D`#@/I````!`UJ`"H``0UR`!P``0UZ``P``0V!`````0V('QH`
+M`0`)`!`#Z0````(-CP`,``$-E0````$-FQ\R``$`"0`%`^D````"#:,`"``!
+M#:H````!#;$?/P`!``D`#`/I``(#M@'L``(-O0`(``$-R`````$-TQ]@``$`
+M"0`-`^D``P.V`>P+DP`"#=P`"``!#>0````!#>P?B@`!``D`$`/I``$`P@`$
+M#?4`+``!#?P`(``!#@,`#``!#@L````!#A,?J@`!``D`#0/I``(#M@'L``(.
+M'``$``$.)`````$.+!_,``$`"0`/`^D`!0#"!08%%PIV`H<``@XW``0``0Y!
+M`````0Y+(`8``0`)`"@#Z0`$`2``P@"X`,D``@Y3``0``0Y:`````0YA($\`
+M`P`)`9<#Z0`"#(H'[@`"#FP`$@`!#G8````!`($`>0/J``````"!``D#ZP``
+M```.@"+2``$`"0`6`^D`!0#"`2`-+`'L`,D``@Z+``@``0Z5`````0Z?(Q``
+M`0`)`-4#Z0`*`,(!(`"B`*@+#`02!8,#M@#)`/(`!`ZF`S@``0ZL`QP``0ZR
+M`"(``0ZY`````0[`)#,``0`)``(#Z0````0.Q@`$``$.SP`$``$.V`````$.
+MX`````$.Z"0]``$`"0`.`^D`!P8'!08%%PM#!B<+30'L``(.\``$``$.]P``
+M``$._B2$``$`"0`/`^D``@Q5`>P`!`\&`#(``0\-`"H``0\4``@``0\=````
+M`0\F)*@``0`)`",#Z0`#`,(%>0'L``0$T0""``$/+@!V``$/-0`,``$//@``
+M``$/1R3F``$`"0`,`^D``0@!``('G@`$``$/3@````$/5"4"``$`"0`=`^D`
+M`P#R`,D![``""L(`!``!#UT````!#V<E.0`!``D`$P/I``,`N`'L`,D``@]N
+M``@``0]T`````0]Z)68``@`)`"0#Z0`$`YH`5002`>P``@^#``0``0!I````
+M`0"!``(#Z@`````/BR6V``$`"0`&`^D``@^2`>P``@^;``0``0^B`````0^I
+M)=$``0`)``\#Z0`$`+@`R0N3`>P``@^Q``@``0^X`````0^_)@(``0`)`!P#
+MZ0`"!7D![``$#\<`7``!#\X`3@`!#]4`#@`!#]X````!#^<F-``!``D`'`/I
+M``,`P@5Y`>P`!`QU`&0``0_N`%@``0_T``P``0_\`````1`$)FL``0`)`($#
+MZ0`+!@<%!@47"T,*=@9;!B<+30#"!7D![``"$`T`&``!$!4````!$!TG00`!
+M``D`(`/I``,`P@5Y`>P``1`E`````1`L)WP``@`)```#Z0``````@0#>`^H`
+M```"!,<#<@`!!+H"U@`!$#@HD0`"``D`10/I``(`R02R``0`N0#^``$00`#^
+M``$!(0`$``$020````$`@0`!`^L````!`,(````!$%@H\@`!``D`!0/I``00
+M7P'V#`X![``"$&8````!$&T````!$'0I%P`!``D`60/I``8)I`)+`>,![`#"
+M"P0``A!@`.X``1![`.8``1"!*:```P`)`$,#Z0`($(P$%A"8`%4&MP02"2\`
+MH@`(";``L@`!$*4`L@`!"=0`2``!$+D`2``!":4`(@`!$,H`'@`!!2<`!``!
+M$-4````!`($`!@/J``````"!``\#ZP````8!8``X``$)Q``T``$!5``4``$!
+M,``(``$!XP`$``$!20````$0XBHY``$`"0`O`^D``1",``0%ZP"4``$0[`"0
+M``$%^@`<``$0^P````$1"2IY``$`"0`4`^D`!`"X"Y,`R0'L``(1$0`(``$1
+M&`````$1'RJP``(`"0!U`^D`!@#"`2``R0M[`J8(3@`$`K$!,``!$2X!*``!
+>`KL`&``!$3@````!`($`0`/K`````0+&`````0``
+`
+end
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/unix.lib.uue amiga/fsf/emacs18/amiga/unix/src/unix.lib.uue
--- baseline/fsf/emacs18/amiga/unix/src/unix.lib.uue Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/unix.lib.uue Sat Sep 28 00:00:00 1996
@@ -0,0 +1,1186 @@
+begin 666 unix.lib
+M```#^@``*UH```/I````"2!O``0@UTC0_/QP`$YU(&\`!"`O``AF`G`!(EA,
+MT/S\6(].T0```_(```/I````#$CG(#(@;P`80^\`'$7Z`!PF;P`4)`LL>0``
+M``!.K@``(`N0@DS?3`1.=1;`3G4``````^^!```#7T%B<T5X96-"87-E````
+M`0```!B&```#7TQ63U)A=T1O1FUT`````0```!X````````#\@```^D````*
+M(&\`!"\-*D@@#68$2^P``$'L```B31+89OPO#4ZZ``!83RI?3G4``````_@`
+M```!`````0```!(````!`````@````X````````#[X,```)?;6MT96UP````
+M``$````>`````````_$````#`````$]05%,`!`!````#\@```^H````$=#IT
+M;7!?6%A86%A8`````````_(```/K````"0```_(```/I````;R!O``0B;P`(
+MGOP`($CG+Q8F22](`"`O20`D<`Q.N@``*D`@+```4JP``"(L``#2@"\!2&P`
+M`$AO`#!.N@``3^\`#'!WL!-F-DHK``%F,$'O`"A#[``03KH``"9`+&P``$ZN
+M_\0N`'P`0>\`*"(()#P```/M3J[_XBH`>`%@1G!RL!-F-DHK``%F,$'O`"A#
+M[``23KH``"9`+&P``$ZN_\HJ`'@`0>\`*"(()#P```/N3J[_XBX`?`%@"G`6
+M*4```&```(Q*A6<$2H=F!$ZZ```@"V="2H5G/DJ'9SH@#6<V<``O`"\`+P!(
+M>/__+P8O!R`%(@0@;P`X3KH``$_O`!@K0``(9Q`JK```*4T``"M+``0@"V`Z
+M(`UG!B!-3KH``$J%9PY*A&<*(@4L;```3J[_W$J'9PY*AF<*(@<L;```3J[_
+MW"`+9P8@2TZZ``!P`$S?:/3>_``@3G4@;P`$44](YP$T)DA+[```+T@`$&`Z
+M(&H`!+'+9C`F52XK``@JDR!K``1.N@``($M.N@``0J=(;P`8+P=.N@``3^\`
+M#$J`:PX@+P`48`HJ2B15(`IFP'#_3-\L@%!/3G4``````_@````#`````0``
+M`)````!4````-`````,````"```!:````0P```$(`````````^^#```"0&UA
+M;&QO8P`````!````'H8```1?7V9I9F]?;V9F<V5T`````````@```"@````D
+MA@```U]?9FEF;U]B87-E``````$````L@P```U]?<W!R:6YT9@````````$`
+M```\@P```D!F;W!E;@```````@```)0```!8A@```E]$3U-"87-E````!```
+M`3X```$L````F@```%Z&```"7V5R<FYO```````!````OH,```)`7W-E=&5R
+M<@````$```#.@P``!$!?<W1A<G1?<')O8V5S<P`````!````^H,```)`9G)E
+M90````````(```&,```!'H,```)`9F-L;W-E``````(```&&```!3(,```)?
+M=V%I='!I9`````$```&8`````````_$````#`````$]05%,`!`!````#\@``
+M`^H````%<&EP93IU>&]P96XN)6QX`'<`<@````/R```#ZP````$```/R```#
+MZ0```,6>_``82.<A/DGY`````$7L`!@J6B!:+AHF;``D+T@`()/)+'@`!$ZN
+M_MHD;```($!#Z`!*($DB;```3J[_"B!L``!#[``$3J[^DD/O`"0B_(```"1P
+M`2+`0IDB+P`@0>\`)"0(+$I.KOVBX8`K0``8+'@`!$ZN_WPB2TZN_GI*@&<*
+M($`B34ZN_I)@"")-<!Q.KO\N3J[_=B)+<"!.KO\N(F\`("`'3J[_+DS??(3>
+M_``82H!.=2!O``0@+P`((B\`#"]O`!``!"]O`!0`""]O`!@`#"]O`!P`$"]O
+M`"``%"]O`"0`&%E/2.</%BHO`#@L+P`T+@`J2"]!`!QP'$ZZ```F0"!-2AAF
+M_%.(D<T@"%*`*4``('(!+'@`!$ZN_SHI0``<(D`2W6;\<!QR`4ZN_SHI0``8
+M<"!R`4ZN_SHI0``D<`$I0``00?K_G"`(0_K^L)")*4``%$'L``!.KO\B*4``
+M`"(+9P`!2DJL`!QG``%"2JP`&&<``3I*K``D9P`!,DJ`;P`!+"!L```@*``4
+M0?K^;B)L```B:0`08`(2V%.`9/I![```(FP`)!+89OP@+```4JP``"=```PG
+M1P`03>P`%CS\`!1P!1E```P@5C%\`!P`$A%```@@7B%K``P`%"`\@``#\DJ&
+M9@)P`2@`2H5O!"`%8`0@+```0J=(>``!+SR```/Z+P`O/(```_,O!B\$+R\`
+M3"\\@``#\2\O`%`O/(```_`O+P!4+SR```/O+R\`6"\\@``#[2\O`%@O/(``
+M`^XO!R\\@``#["!L```O*``0+SR```/K+&P``"(/3J[^#D_O`%0G0``(9S0@
+M;```+'@`!$ZN_H`@;```+'@`!$ZN_HQ*@&?D0JL`%$'L```B2RQX``1.KO\0
+M("L`#&!H+&P``$ZN_WQ.N@``8`)P#"E````@"V<&($M.N@``("P`'&<.(D`@
+M+``@+'@`!$ZN_RX@+``89PPB0'`<+'@`!$ZN_RX@+``D9PPB0'`@+'@`!$ZN
+M_RX@+```;PH@0"QX``1.KO\<</],WVCP6$].=0```_@````#`````0```5H`
+M``%6```!1@```!<````"```"_````NH```+8```"S````L0```)0```!S```
+M`<(```&J```!E@```8H```%\```!=````6P```%B```!0````30```$B```!
+M%````$0````X````&@```!`````````#[X$```-?3&EN:V5R1$(````````!
+M````"H8```)?1$]30F%S90````,```*F```"7@```"R&```$7U]S=&%R='5P
+M7W!O<G0```````,```)^```"<@```$"#```"0&UA;&QO8P`````!```!`(8`
+M``-?7V1O;W)?;F%M90`````!```!IH8```-?7VYE>'1?<&ED```````"```!
+MM@```;*&```#7U]S=&%C:U]S:7IE`````0```?J&```#7U]P<F]C97-S97,`
+M`````0```I*#```$0&-O;G9E<G1?;W-E<G(```````$```*NA@```E]E<G)N
+M;P```````0```K:#```"0&9R964````````!```"P`````````/Q`````P``
+M``!/4%13``0`0````_(```/J````!@````````````````````$`````````
+M`````_(```/K````"@```_(```/I`````TZZ```@+```3G4``````^^#```#
+M0&-H:V%B;W)T`````````0````*&```#7U]O=7)?<&ED`````````0````8`
+M```````#\0````,`````3U!44P`$`$````/R```#Z0```",@+P`$(&\`"")O
+M``Q(YP$4+@`F22I(3KH``'`!OH!M+'`@OH!L)B`+9PX@!^>`0^P``-/`)MDF
+MV2`-9PSGAT'L``#1QR#=(-UP`&`(<!8I0```</],WRB`3G4@+P`$(&\`")[\
+M`!`O2``(0J\`#$'O``A#UV&62H!G"#!\__\@"&`"(!?>_``03G4``````^^#
+M```#0&-H:V%B;W)T`````````0```!B&```$7U]S:6=?:&%N9&QE<G,`````
+M``(```!`````,(8```)?97)R;F\```````$```!0`````````_$````#````
+M`$]05%,`!`!````#\@```^D````5("\`!$CG#P`N`"PL``!.N@``*4<``'H`
+M>`$@+```P(1G#B`L``#`A&8&(`5.N@``4H78A'`@NH!MX"`&3-\`\$YU("\`
+M!"\'(@`@+```@($N'V"P```#[X8```-?7W-I9U]M87-K```````$````3```
+M`"0````4````#(,```-`8VAK86)O<G0````````!````$(8```1?7W-I9U]P
+M96YD:6YG`````````0```!R#```$0%]S:6=?9&ES<&%T8V@```````$````N
+M`````````_$````#`````$]05%,`!`!````#\@```^D```":(&\`!"`O``@B
+M;P`,+V\`$``$64](YR$T+@`F;P`<*D@D22])`!1@`AK:2A)G!%.';O:U[P`4
+M8QH0*O__<B^P`6<0=#JP`F<*4X=O!AK!8`(:VTH39P13AV[V0A5*AU[`1`!(
+M@$C`3-\LA%A/3G4@+P`$(&\`"")O``Q93TCG)S8N`"I(+TD`($JL``!G``#^
+M(&P``"9H``Q.N@``(BL`!+*`9@``Z"!L``!(:``L0>P``")3<`!&`&$`_UA8
+M3TJ`9P``RD'L```B31`8L!EF``"\2@!F]&8``+1*AV80(&P``"`H`!AR`["!
+M9P``H"!L```@*``8<ORP@6<$68!F/B)L```B$2QL``!.KO^"+``@;```T/P`
+M+"((=/Y.KO^L*@!G$B(%0>P``"0(3J[_FB(%3J[_IB(&3J[_@F`&*6@`(```
+M(&P``"EH``0`@"EH``@`?$/H``Q%[`"$)-DDV239(&P``"EH`!@`!"EH`!P`
+M="\O`"`O*P$8($U#[```<`!.N@``4$]P`6`"<`!,WVSD6$].=2!O``0B;P`(
+M2.<`%"9)*DA.N@``($TB2W``80#^R$J`9P1P`&`,($TB2TS?*`!.^@``3-\H
+M`$YU(&\`!")O``A(YP`4)DDJ2$ZZ```@32)+<`%A`/Z02H!F<$AX`/](;```
+M+PU.N@``3^\`#$J`:@P@32)+3-\H`$[Z``!+TT*=0JL`$G`!-T``#D)K`!`G
+M?````@``,C=```Q"JP`V0>P``")(2AEF_%.)D\@G20`60IT@/`\,/P`G0``B
+M)T``&B=``"HJ_```H?]P`$S?*`!.=0```_@````(`````0```7X```%P```!
+M:@```5H```%2```!3````4(```$H`````````^^&```#7VQA<W1?9&ER````
+M`````P```0(```"2````BH,```)`7V=E=%]C9`````$```":A@```U]L87-T
+M7V5N=')Y``````8```%D```!1@```1(```#P````X````*B&```#7U]T96UP
+M7V9N86UE````!````C8```'V````Q@```+"&```"7T1/4T)A<V4````!```!
+M"(,```-`7VQF:6)S=&%T```````!```!A(,```-`8VAK86)O<G0````````"
+M```!X````:B#```#0%]F:6)S=&%T`````````@```A````'&@P```U]R96%D
+M;&EN:P````````$```'\`````````_$````#`````$]05%,`!`!````#\@``
+M`^L```!!```#\@```^D```#0(&\`!%E/2.<`%"](``@@;P`(*F@!#&`*)E4@
+M34ZZ```J2R`-9O),WR@`6$].=2!O``2>_``02.<@-BI()FT`#$/K`0PO2``<
+M+TD`("!+8;1"K```0JL!#$*M``0@%>6`($`G:``,`1A!ZP`(+T@`&&```)Y!
+MZP`0(DA*&6;\4XF3R"`)D<C0_``L<@`R`-*(4H%T`#0!/T``%C]!`!0@`DZZ
+M```D0$J`9@9P#&```)Q-TD*>(&\`(""*+U``("SK`(@LZP"$0>L`C$/J``PB
+MV"+8(M@E:P`,`!@E:P!\`!Q+Z@`@.V\`%``$.V\`%@`&(&\`'"`H``12J``$
+M*T``"$'J`"Q#ZP`0$-EF_"JK``@J;P`<(A4D+P`8+&P``$ZN_Y1*@&8`_TXG
+M:P$,`1!"K0`$+&P``$ZN_WQR=-*!L(%F!'`!8`I.N@``*4```'``3-]L!-[\
+M`!!.=2!O``193TCG(#8O2``4<!!.N@``*D!P1^6(3KH``"9`(&\`%"`(2AAF
+M_%.(D<`@"%*`3KH``"1`3KH``"`-9P``@B`*9WP@"V=X*TL`#"M\```!'``(
+MD<@G2`$0)T@!#"=(`10FBB!O`!04V&;\3KH``"=```0B+P`4+&P``'3^3J[_
+MK"J`9R)!ZP`((@`D""QL``!.KO^:2H!G#B!-80#^.$J`9Q0@#6`^+&P``$ZN
+M_WQ.N@``*4```"!-80``-F`D<`PI0```(`UG!B!-3KH``"`*9P8@2DZZ```@
+M"V<&($M.N@``<`!,WVP$6$].=2!O``1(YP`6*D@F;0`,3KH``$*L```@2V$`
+M_:`@4TZZ```@%6<*(@`L;```3J[_IB!M``Q.N@``($U,WV@`3OH``"!O``19
+M3TCG`S0O2``4(&\`%"IH``R7RTZZ``!*K0$49R1^`"1M`0P@;P`4+"@`!&`$
+M4H<D4KZ&;`0@"F;T*TH!$$*M`10@+0$09R(F0-;\`"`I;P`4``!%[0$0(%(I
+M2```(%(DT"!O`!12J``$(`M,WRS`6$].=2!O``0O#2I(3KH``"`M``0J7TYU
+M(&\`!"`O``A(YP$4+@`J2"9M``Q.N@``<`$G0`$4*T<`!$S?*(!.=0```^^#
+M```"0&9R964````````'```"B@```H````)J```"/@```C0```(J````'H8`
+M``-?;&%S=%]D:7(````````#```"X@```EX```!2@P```D!M86QL;V,`````
+M!````8X```%V```!;````**&```"7T1/4T)A<V4````&```"=````@8```'L
+M```!U@```30```$<@P``!$!C;VYV97)T7V]S97)R```````"```"#@```4B&
+M```"7V5R<FYO```````#```"(````A(```%,@P```T!C:&MA8F]R=```````
+M``4```,N```##@```J8```):```!E(,```)`7V=E=%]C9`````$```'*A@``
+M`U]L87-T7V5N=')Y``````$```+L`````````_$````#`````$]05%,`!`!`
+M```#\@```^D````(2.<!`BQL``!R`$ZN_X(N`"(`3J[_@B`'3-]`@$YU````
+M``/OA@```E]$3U-"87-E`````0````8````````#\0````,`````3U!44P`$
+M`$````/R```#ZP````(```/R```#Z0```!L@;P`$("\`")[\`$1(YP,$+@`J
+M2'S_3KH``"!-0^\`#DZZ``!*@&8D<!#`KP`6YH!R4.6)PJ\`%NR!@H#"A[*'
+M9@1\`&`&<`TI0```(`9,WR#`WOP`1$YU(&\`!"`O``A(YP$$3-\@@&">````
+M``/O@P```T!C:&MA8F]R=`````````$````8@P```T!?9FEB<W1A=```````
+M``$````BA@```E]E<G)N;P```````0```$H````````#\0````,`````3U!4
+M4P`$`$````/R```#Z0```$$@+P`$(&\`"%E/2.<G%BX`*DA.N@``2&\`'$AX
+M"`$O!TZZ``!/[P`,4H!F!G#_8```RD*G+&P``'(")`].KO\<3^\`!"9`2H!G
+M+"(O`!PD"TZN_GI*0&<>("\`'.6`+PT@0"\H``@B0G``D<A.N@``4$]\`&!@
+M3J[_?"H`<BY&`;"!9D9\`"`O`!SE@"!`*J@`"$WM``1"GBS\```A_W`!/,`\
+MP$)>*WP```(``#)"K0`V0JT`%B`\#PP_`"M``"(K0``:*T``*F`,?/\@!4ZZ
+M```I0```(`MG#"0++&P``'("3J[_%DAO`!Q(>`@"+P=.N@``3^\`#"`&3-]H
+MY%A/3G4``````^^#```#0&-H:V%B;W)T`````````0```!2#```"7VEO8W1L
+M```````"````\@```"*&```"7T1/4T)A<V4````"````W@```#:#```#0%]L
+M9FEB<W1A=````````0```&Z#```$0&-O;G9E<G1?;W-E<G(```````$```#0
+MA@```E]E<G)N;P```````0```-0````````#\0````,`````3U!44P`$`$``
+M``/R```#Z0````X@;P`$(F\`"$CG,!8F22I(3KH``"(+)`TL;```=@%.KOY$
+M2H!G!'``8`9.N@``</],WV@,3G4``````^^#```#0&-H:V%B;W)T````````
+M`0```!*&```"7T1/4T)A<V4````!````&H,```)`7W-E=&5R<@````$````L
+M`````````_$````#`````$]05%,`!`!````#\@```^D````^(&\`!")O``A9
+M3TCG,S8J2'X`(&P``"PH`.`O20`@2H9F($JL``!F&D'L`!@B""QL```D/```
+M`^U.KO_B+`!G`GX!2H9G-B(&0>P`(B0(0>P``"8(+&P``$ZN_IXB!B0-)B\`
+M($ZN_IXB!G0*3J[^R$J'9U@B!DZN_]Q@4"!L```F:`"X,'S__[?(9T!#[``H
+M<"4L>``$3J[]V"1`2H!G+"EL````#"E-`!`O"B!++$I#[``$E<HF;P`D3J[]
+MM$S?!``B2BQX``1.KOYB3-]LS%A/3G4@;P`$0^\`"&$`_RI.=2!O``1#[P`(
+M80#_''`43KH``$YU``````/X````!@````$```"R````J````*0```".````
+M2@```"H````````#[X8```%?7W5S`````@```'X````4A@```U]?5T)E;F-H
+M37-G``````$````DA@```E]$3U-"87-E`````@```%8````PA@``!%]?4')O
+M9W)A;4YA;64````````"````H@```%"#```"0&5X:70````````!````\@``
+M``````/Q`````P````!/4%13``0`0````_(```/J````#T]K```````4````
+M`````````````````&-O;G-O;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R
+M>0```````^P````!`````0```!0````````#\@```^D````'2.<@`B(O``Q!
+M[P`0)`@L;```3J[_'$S?0`1.=0```^^&```"7T1/4T)A<V4````!````$```
+M``````/Q`````P````!/4%13``0`0````_(```/I````#R!O``0O#2I(*JP`
+M`$'M``0J7T[Z```@;P`$("\`"$CG`00N`"I((!5.N@``0>T`!"`'3-\@@$[Z
+M`````````^^&```#7U]S:6=?;6%S:P```````0````J#```"0%]S971J;7``
+M```!````%(,```-`<VEG<V5T;6%S:P`````!````*H,```-`7VQO;F=J;7``
+M```````!````.`````````/Q`````P````!/4%13``0`0````_(```/I````
+M!R!O``0@+P`(+P`O+```+PA.N@``3^\`#'``3G4```/OA@``!%]?<WES=&5M
+M7VYA;64````````!````#(,```)?<W1R;F-P>0````$````2`````````_$`
+M```#`````$]05%,`!`!````#\@```^D````I(&\`!)[\`%1(YS@6*D@@#6<D
+M2A5G("!-2AAF_%.(D<TB""!-<`).N@``0>P``'`"(@!.N@``("P``&\2L*P`
+M`&X,Y8!![```)G`(`&`L4H!F)"(L``!![P`;)@@L;```=`!X44ZN_BQ*0&<$
+M)D-@"D?L``1@!$?L``@@2TH89OQ3B)'+(@@@2W`"3KH``$'L`!QP`G(!3KH`
+M`$S?:!S>_`!43G4```/X````!`````$```"0````>````'(````L````````
+M`^^#```"0'=R:71E```````$````F````(P````T````*(8```)?97)R;F\`
+M``````$````XA@```U]S>7-?;F5R<@````````$````^A@```U]S>7-?97)R
+M;&ES=`````$```!&A@```E]?3U-%4E(``````0```%2&```"7T1/4T)A<V4`
+M```!````7@````````/Q`````P````!/4%13``0`0````_(```/J````"#H@
+M```T,@``56YK;F]W;B!E<G)O<B!C;V1E```*```````#\@```^D````````#
+M\0````,`````3U!44P`$``````/R```#Z@```,9N;R!S:6=N86P`:&%N9W5P
+M``!I;G1E<G)U<'0`<75I=```:6QL96=A;"!I;G-T<G5C=&EO;@!T<F%C92!T
+M<F%P``!A8F]R=`!E;70@:6YS=')U8W1I;VX`9FQO871I;F<@<&]I;G0@97AC
+M97!T:6]N``!K:6QL``!B=7,@97)R;W(`<V5G;65N=&%T:6]N('9I;VQA=&EO
+M;@``8F%D(&%R9W5M96YT('1O('-Y<W1E;2!C86QL`'=R:71E(&]N(&$@<&EP
+M92!W:71H(&YO(&]N92!T;R!R96%D(&ET``!A;&%R;2!C;&]C:P!S;V9T=V%R
+M92!T97)M:6YA=&EO;B!S:6=N86P@9G)O;2!K:6QL`'-T871U<R!S:6=N86P`
+M<V5N9&%B;&4@<W1O<"!S:6=N86P@;F]T(&9R;VT@='1Y`'-T;W`@<VEG;F%L
+M(&9R;VT@='1Y``!C;VYT:6YU92!A('-T;W!P960@<')O8V5S<P``8VAI;&0@
+M<W1A='5S(&AA<R!C:&%N9V5D``!B86-K9W)O=6YD(')E860@871T96UP=&5D
+M(&9R;VT@8V]N=')O;"!T='D``&)A8VMG<F]U;F0@=W)I=&4@871T96UP=&5D
+M(&9R;VT@8V]N=')O;"!T='D`:6YP=70@<F5C;W)D(&%V86EL86)L92!A="!C
+M;VYT<F]L('1T>0!E>&-E961E9"!#4%4@=&EM92!L:6UI=`!E>&-E961E9"!F
+M:6QE('-I>F4@;&EM:70``'5N:VYO=VX@<VEG;F%L``!U;FMN;W=N('-I9VYA
+M;```=VEN9&]W(&-H86YG960``'5N:VYO=VX@<VEG;F%L``!U<V5R('-I9VYA
+M;"`Q`'5S97(@<VEG;F%L(#(```````````H````2````'````"(````V````
+M0@```$@```!8````<@```'@```""````F@```+8```#>````Z@```1````$>
+M```!0````58```%R```!C````;@```'D```""@```B(```(\```"3````EP`
+M``)L```"?````HH```/L````(`````$```,4```#$````PP```,(```#!```
+M`P````+\```"^````O0```+P```"[````N@```+D```"X````MP```+8```"
+MU````M````+,```"R````L0```+````"O````K@```*T```"L````JP```*H
+M```"I````J````*<```"F`````````/R```#Z0```#H@+P`$(&\`""(O``PB
+M;P`064](YP<4+`$N`"I(+TD`%'H`)FP``&`N2H=G""`K``R^@&8@>@%P`;"K
+M`!1F%BHK``P@#6<$*JL`&"!+3KH``"`%8"HF4TJ39LX(!@``9P1P`&`:2H5F
+M"G`**4```'#_8`QP`$ZZ``!.N@``8*),WRC@6$].=2!O``0@+P`((F\`#$CG
+M`10B`'``3-\H@&``_W`@;P`$+PUP`"(`D\DJ7V``_UX@+P`$(&\`""(O``Q(
+MYP,$+`$N`"I(4H!F`GX`2H=J`D2'(`<B!B!-D\E,WR#`8`#_+``````#[X8`
+M``-?7W!R;V-E<W-E<P`````!````)(,```-`7V9R965?96YT<GD````!````
+M3H8```)?97)R;F\```````$```!L@P``!$!?=V%I=%]S:6=N86QS```````!
+M````=H,```1`7VAA;F1L95]S:6=N86QS`````0```'H````````#\0````,`
+M````3U!44P`$`$````/R```#Z0```!(@+P`$44](YP,`+@!.N@``(`=.N@``
+M2H!G(B)`(&D`'"](``P@:0`$<`$B;P`,3I$L`"`'3KH``"`&8`)P_TS?`,!0
+M3TYU``````/O@P```T!C:&MA8F]R=`````````$````.@P```T!?9FEN9%]F
+M9`````````$````4@P```T!?9G)E95]F9`````````$````V`````````_$`
+M```#`````$]05%,`!``````#\@```^D````#(&\`!"`O``A.^@`````#[X,`
+M``)`<W1R<F-H<@````$````*`````````_$````#`````$]05%,`!``````#
+M\@```^D````#(&\`!"`O``A.^@`````#[X,```)`<W1R8VAR``````$````*
+M`````````_$````#`````$]05%,`!``````#\@```^D```!-2.<`!G`(<@`L
+M>``$3J[_.BI`2H!F!'``8"Y"K0`$2'@`*'``+P!![```<@&3R<%!3KH``%!/
+M*H!F#")-<`A.KO\N<`!@`B`-3-]@`$YU(&\`!$CG``8J2"`-9Q@@36$``!X@
+M54ZZ```B37`(+'@`!$ZN_RY,WV``3G4@;P`$2.<`!BI(2JT`!&<4(E4L>``$
+M3J[^(")53J[^)D*M``1,WV``3G4@;P`$(%`B:``.<``0*0`/<@'AH2`!3G4@
+M;P`$("\`""(O``Q(YP,&+`$N`"I(8:I*AV8$2H9G'B)5(T<`("-&`"0S?``)
+M`!PL>``$3J[^,G`!*T``!$S?8,!.=2!O``1(YP`&*DA*K0`$9QPB52QX``1.
+MKOXL2D!G#B)53J[^)D*M``1P`6`"<`!,WV``3G4```/X`````0````$````H
+M`````````^^#```$0%]D979I8V5?;W!E;@````````$````R@P``!$!?9&5V
+M:6-E7V-L;W-E```````!````9@````````/Q`````P````!/4%13``0`0```
+M`_(```/J````!'1I;65R+F1E=FEC90````````/R```#Z0```!XO#B`L```B
+M`$A!0D'2@"`L``"S@"E```1"K``(0^P`!'``+'@`!$ZN_=@I0```</].KOZV
+M2(!(P"E```!*K```9PA*@&L$<`%@`G``*4``#"Q?3G4O#B`L``!K""QX``1.
+MKOZP("P``&<*(D`L>``$3J[^8BQ?3G4```/X`````P````$```!8````.@``
+M`!X````&`````@```&8```!.````/@```"P````:````%@````````/OA@``
+M!%]?<W1A<G1U<%]T:6UE```````!````!(8```%?7W5S`````0```!``````
+M```#\0````,`````3U!44P`$`$````/R```#Z@````7_____9FEF;RYL:6)R
+M87)Y`````````_(```/K````!````_(```/I````%B`O``113TCG`P`N`$ZZ
+M```@!TZZ``!*@&<H(D`@:0`<<D#EB<*1+T@`#"`!(&D`!")O``Q.D2P`(`=.
+MN@``(`9@`G#_3-\`P%!/3G4@+P`$+P<N'V"N``````/O@P```T!C:&MA8F]R
+M=`````````$````.@P```T!?9FEN9%]F9`````````$````4@P```T!?9G)E
+M95]F9`````````$````\`````````_$````#`````$]05%,`!``````#\@``
+M`^D```!B(&\`!"`O``@B;P`,+V\`$``$+V\`%``(+V\`&``,+V\`'``0+V\`
+M(``4+V\`)``844](YP<4+@!([P,``!1\`"IL``!@%DJM``1F"C!\``$K2``$
+M8`Q2AMK\`"2\K``$;>0@+``$O(!F>'(*TZP`!"`L``0B`.>!TH#E@2`!3KH`
+M`"I`2H!F#'`,*4```'#_8```CG#VT*P`!"(`YX'2@.6!(&P``")-8`(2V%.!
+M9/H@+```9P8@0$ZZ```I30``>O;:K``$(`7G@-"%Y8#;P)?+*TL`!%*%VOP`
+M)+JL``1M\"`&YX#0AN6`(&P``"&O`!0(!"&'"``AKP`8"`A+[P`@(9T(#"&=
+M"!`AG0@42^\`+"&="!@AG0@<(9T(("`&3-\HX%!/3G4@+P`$(@!K%K*L``1L
+M$"`!YX#0@>6`(&P``$*P"`1.=2`O``1(YP$$+@!K'KZL``1L&"`'YX#0A^6`
+M*FP``-O`2JT`!&<$(`U@"'`)*4```'``3-\@@$YU("P`!$YU``````/X````
+M$0````$```&"```!9````58```%````!,@```.P```#>````Q````+X```"R
+M````I````)@```!R````;@```&0```!>````0@````````/O@P```D!M86QL
+M;V,``````0```("&```"7V5R<FYO```````"```!=@```(R#```"0&9R964`
+M```````!````N@````````/Q`````P````!/4%13``0`0````_(```/K````
+M`@```_(```/I````&B!O``0B;P`(GOP`#$CG(18F22I(3KH``"`+9P8N*P`$
+M8`B1R$ZZ```N`'#_OH!F!'``8"@@!T'O`!1.N@``(@U![P`4)`@L;```3J[^
+M=$J`9P1P`&`&3KH``'#_3-]HA-[\``Q.=0`````#[X,```-`8VAK86)O<G0`
+M```````!````%H,```)`=&EM90````````$````F@P```T!?9VUT,F%M:6=A
+M``````$````\A@```E]$3U-"87-E`````0```$B#```"0%]S971E<G(````!
+M````6`````````/Q`````P````!/4%13``0`0````_(```/I````!R!O``0B
+M;P`(("\`#"\+)DDB2"!+)E].^@````````/O@P```D!M96UM;W9E`````0``
+M`!@````````#\0````,`````3U!44P`$``````/R```#Z0```%(@;P`$(F\`
+M"%%/2.<!%"9)*DA.N@``0>\`#$ZZ```@#6<(0>\`#"K8*M@@"V<``-)![P`,
+M3KH``"!`("@`)$2`<CQ.N@``)H!^`"!L``1#[```$!BP&68,2@!F]F8&?@1@
+M``":(&P`!$/L``@0&+`99@Q*`&;V9@9^`V```(`@;``$0^P`$!`8L!EF"DH`
+M9O9F!'X%8&8@;``$0^P`&!`8L!EF!DH`9O9G4"!L``1#[``<$!BP&68&2@!F
+M]F<\(&P`!$/L`"`0&+`99@9*`&;V9R@@;``$0^P`)!`8L!EF!DH`9O9G%"!L
+M``1#[``H$!BP&68(2@!F]F8"?@$G1P`$<`!,WRB`4$].=2!O``2>_``0+PTJ
+M2$'O``Q#[P`$80#^Z"JO``P@+P`00^T`!#+`("\`!#+`("P``#+`<``J7][\
+M`!!.=0`````#^`````@````!````[````-@```#$````L````)P```"$````
+M:@```%`````````#[X,```-`8VAK86)O<G0````````!````%(,```-`7V=E
+M='1I;64````````!````'(,```-`;&]C86QT:6UE```````!````-H,```)?
+M7T-81#,S``````$```!$A@```E]T>FYA;64`````"````.@```#4````P```
+M`*P```"8````@````&8```!,A@```U]D87EL:6=H=`````````$```$X````
+M`````_$````#`````$]05%,`!`!````#\@```^H````,3454($135`!7150@
+M1%-4`$5%5"!$4U0`1414`$-$5`!-1%0`4$14`$%+1%0````````#\@```^D`
+M```P(&\`!$CG``8J2"QL``!.KO^^!I4/##\`<`!,WV``3G4@+P`$(&\`"%E/
+M!(`/##\`(CP``5&`+H!.N@``((`@%R(\``%1@$ZZ```@`2Z!<CQ.N@``(4``
+M!"`7<CQ.N@``(`'E@)"!YX#0@="`(4``"%A/3G4@;P`$64](YR`$2]`@'2(`
+MZ8&2@"`!YX#0@2(`Y8'2@.^!(!TD`.F"E(#E@B`=+T$`"'(R3KH``-""T*\`
+M"`:`#PP_`$S?(`183TYU```#[X8```-?5&EM97)"87-E```````!````#(,`
+M``)?7T-81#,S``````4```"J````7@```%(```!(````.@````````/Q````
+M`P````!/4%13``0`0````_(```/I````"R`O``193RZ`0>P`!"`(6$].=2!O
+M``193RZ(0>P`!"`(6$].=2`L``1.=0`````#^`````,````!````)@```!P`
+M```*`````````_$````#`````$]05%,`!`!````#\@```^H````)````````
+M``````````$````````````"```````````````````#[`````(````!````
+M%`````@````````#\@```^D````J(&\`!")O``@@+P`,64](YS\V+@`J2"])
+M`"B7RTZZ```B#20++&P``$ZN_7XF0"("3J[]>"`+9@9.N@``8%XD;P`H0A(J
+M!U*%(A,D*P`$)@TH"BQL``!.KOY*2H!G&"(+3J[]>$H29@1P`F`L+P1.N@``
+M6$]@*$ZN_WPL`'(R1@&P@68(""L``0`+9I0B"TZN_7@@!DZZ```I0```</],
+MWVS\6$].=0`````#[X,```-`8VAK86)O<G0````````!````'H8```)?1$]3
+M0F%S90````(```!4````)H,```)`7W-E=&5R<@````$````Z@P```E]S=')L
+M96X``````0```'"#```$0&-O;G9E<G1?;W-E<G(```````$```"6A@```E]E
+M<G)N;P```````0```)H````````#\0````,`````3U!44P`$`$````/R```#
+MZ0```"Q93TJL`!)F#$'O``,I2``28>Y@%D'O``,B;``2L\AD!'`!8`)P_RE`
+M``!83TYU64](YP$4+B\`%$JL``!F`F'`*FP`%F`N("P``&\,0>\`#R)M``2S
+MR&(02H!J'$'O``\B;0`$L\AD$"95+PU.N@``6$\J2R`-9LXI30`62H=F!'``
+M8")0AR\'3KH``"!`(*P`%D/O`!,A20`$0^@`"%A/*4``%B`)3-\H@%A/3G4`
+M`````_@````'`````0```*(```"0````>@```$(````:````#@````0````#
+M`````@```$@````Z````*`````````/O@P```E]F<F5E`````````0```&Z#
+M```"7VUA;&QO8P`````!````B@````````/Q`````P````!/4%13``0`0```
+M`_(```/J````!T`H(REA;&QO8V$N8PDQ+C$```````````````````/R```#
+MZP````$```/R```#Z0```#8@;P`$64](YR,"(@@L;```=/Y.KO^L+T``$&<Z
+M+BP``$ZZ```L`&`>2&\`$$AX"`4O!DZZ``!/[P`,2H!F""E'``!P`&`24X9L
+MWB(O`!`L;```3J[_IG#_3-]`Q%A/3G4@;P`$2.<A!BI(3KH``"(-+&P``$ZN
+M_[A*@&<$<`!@4$ZN_WPN`')OTH&P@68@(@UT`$ZN_T9*@&<.(@U.KO^X2H!G
+M!"`"8"A.KO]\+@!P9="`OH!F#B!-80#_2DJ`9@1P`&`,(`=.N@``*4```'#_
+M3-]@A$YU``````/OA@```E]$3U-"87-E`````P```'(```!0````#H8```)?
+M97)R;F\```````,```#,````0````!Z#```#0%]L87-T7V9D`````````0``
+M`"*#```"7VEO8W1L```````!````-(,```-`8VAK86)O<G0````````!````
+M;(,```1`8V]N=F5R=%]O<V5R<@```````0```,@````````#\0````,`````
+M3U!44P`$`$````/R```#Z0```AI(YP`&<"(B/``!``$L>``$3J[_.BI`2H!F
+M!'``8"`;?``$``A-[0`.0AX@+```',`L[```0>T`%$ZZ```@#4S?8`!.=2!O
+M``0O#B)(<"(L>``$3J[_+BQ?3G4@;P`$2.<`!BI(("T`(&<*+&P``'(`3J[_
+MW"`M`"1G#"QL``!R0.&)3J[_W"`M`#1G!B!`3KH``"`M`#AG!B!`3KH``"!M
+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
+MN$_O``PJ@<<``O`$'O``AR`6$`_:)83RM```1K!'``8!P@%4ZZ``!*@&<*
+M($`@:``$80#XKB`53KH``'#_*E_>_``@3G4@+P`$(B\`""]O``P`!"!O`!">
+M_``H+PTJ2$CO``,`!$ZZ``!*K```9@AP!BE```!@:"`L``!2K```(BP``-*`
+M+P%(;`!(2&\`%$ZZ``!P`2Z`(@!![P`8P4%A`/T43^\`#"J`:S1"IT'O`!!P
+M`2(`80#\_EA/*T``!&L$<`!@'"`53KH``$J`9PH@0"!H``1A`/@*(!5.N@``
+M</\J7][\`"A.=0`````#^`````L````!```(!@``!V(```8\```&)@``!,P`
+M``2\```$H```!)@```22```"Y@```M`````````#[X8```-?7V9I9F]?<VEG
+M```````&```#K@```C````&H```!:@```.H````LA@```5]?=7,````!````
+M,H,```)`3F5W3&ES=`````$````ZA@```U]?1FEF;T)A<V4``````!$```;H
+M```&V```!K8```:(```&7````^8```-X```#(````K8```)B```!^@```5H`
+M``$\````W````,0```!\````;(,```)`9G)E90````````8```<D```'#```
+M!P(```"L````G````)"&```"7V5R<FYO```````&```'\```!TP```42```$
+M+```!!(```'>A@```E]$3U-"87-E`````P``!00```3B```!Z(,```1`7W=A
+M:71?<VEG;F%L<P```````@```Y0```(6@P``!$!?:&%N9&QE7W-I9VYA;',`
+M```"```#S@```E"#```"0'-T<F-A=``````$```&0```!BH```+J```"U(,`
+M``1`7W-I9U]D:7-P871C:````````0``!`R#```#7U]S<')I;G1F````````
+M!0``"`X```=J```$U```!,0```2H@P```D!?<V5T97)R`````0``!/B#```"
+M0&UA;&QO8P`````#```%>@``!6P```52@P```T!?86QL;V-?9F0```````$`
+M``7V@P```T!?9G)E95]F9`````````,```A:```'M@``!OB#```#0&-H:V%B
+M;W)T`````````@``!^0```=`A@```U]?9FEF;U]O:P````````(```?H```'
+M1(8```1?7V9I9F]?;V9F<V5T````````!```!_H```?V```'5@``!U*&```#
+M7U]F:69O7V)A<V4``````@``!_X```=:@P```T!?9FEN9%]F9`````````(`
+M``A&```'H@````````/Q`````P````!/4%13``0`0````_(```/J````%5]M
+M``!?<P``9FEF;SHE<R]R=V5S2R5S`&T```!F:69O.B5S+W(`9FEF;SHE<R]M
+M=V5+``!?;0``7W,``'5X9FEF;RXE;'@``'5X9FEF;RXE;'@``````_(```/I
+M````"2`O``193RZ`0>P`%B`(6$].=2!O``193RZ(0>P`%B`(6$].=0```_@`
+M```"`````0```!P````*`````````_$````#`````$]05%,`!`!````#\@``
+M`^H````)=7-E<@````````````!W:&5E;`````````X````4```````&```#
+M[`````0````!````(````!H````6````!@````````/R```#Z0```*D@+P`$
+M64\N@"`L`0QG#B!`3KH``$J`9P1R`6`"<@`@`5A/3G4@+P`$(&P!#'(`3OH`
+M`$ZZ```I0`$,9@I(;```3KH``%A/(&P!#$ZZ``"!K```3G4@;`$,3OH```CL
+M``P``DYU("\`!`@```Q6P$0`2(!(P$YU".P`#0`"3G4@+P`$"```#5;`1`!(
+M@$C`3G5.N@``<``@;```$"@`#W(!X:K```3G5.^@``("\`!%E/2.<!%B]`
+M`!!^`&`N("T`%$ZZ```F0$J`9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL
+M>``$3J[_+B!L```L>``$3J[^C"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`
+M<`'OH"P`<`F^@&8&<`!.N@``("P!!,"&9P:-K`$(8'HJ!D:%RZP!"$J':V9P
+M(+Z`;&`@!^>`0>P`!"IP"``P?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X
+M48!G-&`*2&P`&$ZZ``!83W``3KH``&`@(`UG'"`'YX`H!D'L``2(L`@$B:P!
+M!"`'3I5&A,FL`00@+`$(P(9FBDS?(/!.=2`O``0O#B(L``""@'``+'@`!$ZN
+M_LXL7TYU("\`!"\.(@`@+```@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A
+M`/X02H!G"'P!<`YA`/\,(`=A`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!
+M<`-A`/[H(`=A`/Z&2H!G"'P!<!1A`/[6(`9,WP#`3G4@+P`$+P<I0```<`@N
+M'V``_KQP`&$`_V!@DV2.<!%'X`2^P`!#9\``$JBT*M``12AU"-<""^@&WP
+M0JP!"$*L`01"K```80#]U&$`_>IA`/VB3-\H@&``_?AA`/VX8`#^"``````#
+M^`````(````!```!=````#X````7`````@```H0```*````"?````F0```'6
+M```!N@```:8```&B```!F````9````%*```!.````2X```$F````I````'H`
+M``!@````5@```%````!(````.````"H````*`````````^^#```$0%]T:6UE
+M<E]E>'!I<F5D``````$````2@P``!$!?=&EM97)?<W1A<G0````````!````
+M,(,```1`7V%L;&]C7W1I;65R`````````0```#2#```"7U]F86EL```````!
+M````0H,```-`7W1I;65R7W-I9P`````!````3(,```-`7V9R965?=&EM97(`
+M```!````6H,```1`7VEN:71?<')O8V5S<V5S`````0```)*&```$7U]C:&EL
+M9')E;E]E>&ET``````(```#N````F(,```5`7V-L96%N=7!?<')O8V5S<V5S
+M``````$```"J@P```T!?9FEN9%]P:60```````$```#$@P```D!?7V5X:70`
+M`````@```8````$B@P```U]?;65S<V%G90````````$```%XA@```E]?1E!%
+M4E(``````0```D@````````#\0````,`````3U!44P`$`$````/R```#Z@``
+M``I&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=``````#
+M\@```^L```!$```#\@```^D```(=2&P`!$ZZ``!83TYU("\`!"\-3KH``"I`
+M2H!F`F'B(`TJ7TYU(&\`!"`O``@O"TZZ```F0$J`9@)AQB`+)E].=2!O``0O
+M#2I((`UF!$OL``X@34H89OQ3B)'-(`A2@$ZZ```@0$J`9@1P`&`((D@2W6;\
+M(`@J7TYU64](YP,T?@!\`"!L```F:`#08"Q**P`(9B0P/`4`P&L`#F8:4H<@
+M:P`*(`A*&&;\4XB1P"`(W(#<JP`45(8F4TJ39M`@!U*`Y8#0AF$`_THI0``8
+MY8<@0")`T\=%Z0`$+T``%&8*0>P``"E(`!A@5B!L```J:`#08$)*+0`(9CHP
+M/`4`P&T`#F8P)FT`"BXM`!0@;P`4(,HO2``48`(4VTH39OH4_``])FT`$&`"
+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
+M```I0``<9@A![`"8*4@`'$'L`*!.N@``*4``'&8(0>P`JBE(`!P@+P%,(&\!
+M4")L`!A.N@``<`!.N@``3-]L_-[\`2Q.=0```_@````5`````0``"$X```A`
+M```(.```""H```@B```(%```"`````?X```'Z@``!X0```;0```%3@``!3H`
+M``18```$3```!#8```/6```"J````.````!.`````@```!(````"```(7@``
+M"%(```A(```%+@``!"P```0D```$$```!`0```/V```#[````^@```/@```#
+MT````\@```#J````Y````,H```"$`````````^^#```"7U]F86EL```````$
+M```'B```!M0```/:````!H,```)`;6%L;&]C``````(```!@````%(,```)`
+M<F5A;&QO8P````(```&R````,(,```)`9G)E90````````4```?B```'V@``
+M!\X```:4```"1H8```)?4WES0F%S90````$```.(@P```E]?6$-%6$E4````
+M`0```YB&```"7U]?:6]B```````&```#N@```[(```.N```#J````Z0```.>
+M@P``!$!?86QL;V-?=&EM97(````````!```#S(,```-`7W1I;65R7W-I9P``
+M```!```#Y(,```-`7VEN:71?9FEF;P`````!```$"(,```1`7VEN:71?<VEG
+M;F%L<P```````0``!`R&```"7T1/4T)A<V4````'```'=```!V(```<T```&
+MO@``!1P```34```$/(,```1`7VEN:71?=6YI>&EO`````````@``!6X```2@
+MA@```U]?5T)E;F-H37-G``````0```4.```$Y```!+X```2DA@```E]?7V-T
+M>7!E`````0``!;"#```"0'-T<FYC<'D````!```&;H,```)`='%S;W)T````
+M``$```>\@P```T!?7V=E=&5N=@````````4```A$```(+@``"!@```@$```'
+M[H8```-?7V%M:6=A7W5S97(````)```(/```"#(```@F```('```"!````@.
+M```("```!_P```?R@P```D!M86EN`````````0``"&*#```"0&5X:70`````
+M```!```(:`````````/Q`````P````!/4%13``0`0````_(```/J````+```
+M``!.;R!M96UO<GD```!A`$9A:6QE9"!T;R!C<F5A=&4@=&EM97(``$Y)3#H`
+M`$Y)3#H``$Y)3#H``"H`3DE,.@``26YV86QI9"!W:6QD8V%R9"`E<P!%<G)O
+M<B!E>'!A;F1I;F<@87)G=6UE;G1S`%5315(``'5S97(``%5315).04U%``!(
+M3TU%``!S.@``4TA%3$P`8FEN.G-H``!(3U-43D%-10``86UI9V$````#\@``
+M`^L````(```#\@```^D````$("\`!%E/+H!P`%A/3G4``````_$````#````
+M`$]05%,`!``````#\@```^D````^("\`!$CG`P`N`$JL``!G!"`'8&!\`"`'
+M`H````$D9P)\"`@'``=G!`!&``4(!P`$9P0(Q@`""`<``6<$",8```@'``-G
+M!`C&``$(!P``9P0(Q@`&(`=R2<"!<D"P@68$`$8`0@@'``EG!`C&``4@!@I`
+M``],WP#`3G4@+P`$2.<&`"P`2JP``&<((`8"0`__8%YZ``I&``\(!@`#9P1Z
+M2>6-(`9R!<"!6X!F!`C%``<(!@`"9P0(Q0`$"`8``&<$",4``2`&<D+`@6<$
+M",4`!@@&``%G!`C%``,(!@`&9P0(Q0``"`8`!6<$",4`"2`%3-\`8$YU````
+M``/X`````@````$```"&````#`````````/Q`````P````!/4%13``0`0```
+M`_(```/K`````0```_(```/I`````G``3G5P`$YU```#\0````,`````3U!4
+M4P`$``````/R```#Z0```!5(YP,`3KH``"X`?`!@"B\&3KH``%A/4H:\AVWR
+M3-\`P$YU("\`!"\'+@!AU$ZZ``!.N@``(&P``$ZZ```O!TZZ``!83RX?3G4@
+M+P`$+P<N'V#4``````/O@P```T!?;&%S=%]F9`````````$````&@P```E]C
+M;&]S90```````0```!*#```$0%]C;&5A;G5P7V9I9F\```````$````N@P``
+M!4!?8VQE86YU<%]S:6=N86QS`````````0```#*&```#7U]O9&1?=&EM97(`
+M`````0```#:#```#0%]F<F5E7W1I;65R`````0```#J#```"7U]80T58250`
+M```!````0`````````/Q`````P````!/4%13``0`0````_(```/I````$R`O
+M``0B+P`((&\`#%%/2.<#)"P!+@`J2$ZZ```@!TZZ``!*@&<:(D`@:0`@+T@`
+M%"`&(&D`!")-)&\`%$Z28`)P_TS?),!03TYU``````/O@P```T!C:&MA8F]R
+M=`````````$````:@P```T!?9FEN9%]F9`````````$````@`````````_$`
+M```#`````$]05%,`!``````#\@```^D```"8GOP`#$CG+S8J;P`T?@/.KP`X
+M?`$@;```)F@`N"H\```#[$ZZ``!*AV<*<`*^@&<$<@!@`G(!+T$`*'`!OH!G
+M"%6'9P1P`&`"<`$O0``L($U#[```3KH``$J`9@9X_V```51P_R!L```A0`"X
+M(@TL;```=/Y.KO^L+@`@;```(4L`N$J`9G@L;```3J[_?$ZZ```L`"`L``!R
+M+D8!L(%G!$J`9@I^`2H\```#[F`6(`95@&8,""\`"``Z9P1P`6`"<``N`$J'
+M9RQ\``@O``@`.F<<""\`#P`Z9P9X`F```-8@+P`\3KH``"@`8```R'C_8```
+MPBE&``!P_V```4)"IRQL``!R`B0/3J[_'$_O``0D0$J`9PPB!R0*3J[_FDJ`
+M9A8@"F<()`IR`DZN_Q9.N@``</]@``$(*"H`="0*<@).KO\6(@=.KO^F<%#I
+MB,"O`#@,@```!0!F#'`1*4```'#_8```VDJO`"AG!@@$``-F#$JO`"QG$@@$
+M``)G#'`-*4```'#_8```M@@O``D`.F<B(@TD/````^Y.KO_B2H!G""(`3J[_
+MW&`*3KH``'#_8```C`@O``@`.F<$(`5@!B`\```#[20`(@TL;```3J[_XBH`
+M9@A.N@``</]@8`@O``D`.F8$2H9F!"P$8`)\_WX`2J\`*&<"?@%*KP`L9P0(
+MQP`!""\``P`[9P0(QP`#+P<@!2(&3KH``%A/+@!L''#_(&P``"%``+@B!2QL
+M``!.KO_<(&P``"%+`+@@!TS?;/3>_``,3G4@;P`$+R\`#"\O``PO"&$`_:A/
+M[P`,3G4```/X`````0````$```!2`````````^^&```!7U]U<P````4```(V
+M```")````'P```!F````%H,```-`8VAK86)O<G0````````!````)(,```)`
+M<W1R:6-M<`````$```!6A@```E]$3U-"87-E````!0```BX```',```!`@``
+M`(@```!P@P``!$!C;VYV97)T7V]S97)R```````!````D(8```)?7T]315)2
+M``````$```"6@P``!4!?;6%K95]P<F]T96-T:6]N`````````0```.:&```"
+M7V5R<FYO```````#```!@@```5X```#V@P```D!?<V5T97)R`````P```=@`
+M``&L```!,(,```1`7V%L;&]C7V%M:6=A9F0``````0```A@````````#\0``
+M``,`````3U!44P`$`$````/R```#Z@````).24PZ`````````_(```/I```%
+M:"!O``1(YS@`</_`*``#<@`2`'#_P"@``G0`%`!P_\`H``%V`!8`</_`$'@`
+M&`#AA(B#X82(@N&$B($@!$S?`!Q.=4CG(S1+[`!R0>P`'$7L``PDR$'L`"`D
+MR$*L`!A"FGX`+"P`>D?L![Q@/"`K``0B`.6!($W1ZP`(0^@'ZD7L``PEB1@`
+M2H!G!G`!*4``&$J'9P9*JP`$9@@@$T2`*4``%%*'UOP`$+Z&;<!^`"PL`'9@
+M.G``(@<&@0``!=@0-1@`2,#I@"!-(@`&@0``!U+1]1@`!H````=.)#4(`.6"
+M0^@'ZD7L``PEB2@`4H>^AFW"3-\LQ$YU(&\`!")O``B>_`HH2.<[-B](`"@O
+M20`L(`AF"$WL`"0O3@`H<#H@;P`HL!!F!%*O`"@@;P`H<#I.N@``2H!F3G`*
+M(@`@;P`H(`A*&&;\4XB1P-*(4H%P0;*`909P_V```DQ![``P0^\`,1+89OQ!
+M[P`Q0^P`/$ZZ``!![P`Q(F\`*$ZZ``!![P`Q+T@`*$*G+R\`+$ZZ``!03RX`
+M4H!F!G#_8``"""`'0>\`<B(\```)VDZZ```L`"`'3KH``$J`9@9P++R`9`9P
+M_V```>!![P"*80#^."X`0>\`CF$`_BXJ;P`L*H!![P"280#^("M```1![P"6
+M80#^%"M```A![P":80#^""M```PB%6LP=#*R@FXJ)BT`"&\D>`JVA&X>*"T`
+M!&L8#(0```%R;A!*@&L,L()N"+:'9PI*AV<&</]@``%JTH'E@2`M``@D`-2"
+MU(#4@B`M``0F`.6#UH#6@M:M``S6@=:'<"S6@+R#9`9P_V```3A'[P">?``D
+M36`0($MA`/V()4``$%B+4H98BKRM``1MZGP`8"`0&R(&!H$```78&X`8`'(`
+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
+M("\`)-&O`(@O+P`H+P=(;P"0(&\`.$Z0<`$J@$_O``P@+P"(3-\L_-[\`'!.
+M=2!O``0B;P`(("\`#)[\``Q(YP<T+@`J2"])`!@,K0````$`(&\&<`$K0``@
+M2&\`'"`'($UA`/T>6$\L`$JO`!QF!B`M`"!J!B`&8```QD'Z^*XB;P`8L\AF
+M!D'L`')@!$'L"B!\`"9(+T@`(&```)8@*P=.L*T`(&8``(1Z`"1O`"!@<"`M
+M`"`B*@=.LH!G7B`%Z8`B%2!O`"`&@```!TK2L`@`DJL'2BJ!2JT`(%?`1`!(
+M@$C`*T``($AO`!P@!R!-(F\`'&$`_(Q83TJO`!QF0"`5D*H'2M"K!THJ@$JM
+M`"!7P$0`2(!(P"M``"!2A=3\`!`@;P`@NJ@`"&V&4H;6_``0(&\`(+RH``AM
+M`/]B</],WRS@WOP`#$YU(&\`!"\-0_KWVG``*E]@`/[@2JP3SF8$80#W+$YU
+M``````/X````'0````$``!*X```29@``$-@``!"T```0I```$%0``!`R```/
+M\@``#H(```X6```,^```#,H```RX```,J@``"O@```E*```(>```!Z0```%L
+M```!7````18```#F````H````(X```"`````7````%8```!0````3````"L`
+M```"```5E```%,8``!3````3D@``$XP``!#H```0W```#J(```Z:```.B```
+M#G0```YF```.8@``#EH```X\```.,@``#@H```WT```-X@``#=0```V\```-
+MN```#:0```V8```-D```#88```U\```-3```#3X```TZ```-*@``#1P```T(
+M```,_```#/0```SP```,[```#.@```S@````L````&@```!D````2```````
+M``/O@P```D!S=')C:'(``````0```3*#```"0'-T<F-A=``````"```!?```
+M`7"#```"7V]P96X````````!```!CH,```)`<F5A9`````````$```&L@P``
+M`D!C;&]S90```````0```;2&```"7U]?8W1Y<&4````%```&6@``!3X```1>
+M```$'````\J#```"7U]#6$0S,P`````<```2G```$HX``!)4```2/@``$4X`
+M`!$\```1)```$1H``!`@```0$@``#]X```_0```/K```#YH```^,```/@```
+M#W````\^```/,```"N8```K8```(4@``"#P```@F```("```!^P```<.```'
+M`(,```)`<W1R;F-P>0````(```R.```,=(,```-`7U]G971E;G8````````!
+M```,SH,```)?<W!R:6YT9@````$``!#@`````````_$````#`````$]05%,`
+M!`!````#\@```^H```!(1TU4`"`@(``@("``````!`````@``````````"`@
+M(``@("``<SIL;V-A;'1I;64`<SIZ;VYE:6YF;P``+P`````?````'````!\`
+M```>````'P```!X````?````'P```!X````?````'@```!\````?````'0``
+M`!\````>````'P```!X````?````'P```!X````?````'@```!\```%M```!
+M;G!O<VEX<G5L97,``%5.25A46@``("`@`%-U;DUO;E1U95=E9%1H=49R:5-A
+M=$IA;D9E8DUA<D%P<DUA>4IU;DIU;$%U9U-E<$]C=$YO=D1E8P`E+C-S("4N
+M,W,E,V0@)3`R+C)D.B4P,BXR9#HE,#(N,F0@)60*```````#[`````(````!
+M````$`````P````````#\@```^L```3V```#\@```^D```&<GOP`#$C7`0-P
+M_][\``Q.=5%/2-<#`%!/3G5(YS`"(A!**``-9P1P`&`<)`DF`"QL``!.KO_6
+M(@!2@&8(3KH``'#_8`(@`4S?0`Q.=5%/2.<_-BX`*DDF2"P3+T8`*"](`"Q*
+M*P`-9P9P`&```(Q**P`,9V8F3=?'>@!@6"1-8`)2BK7+9`9P"K`29O2WRF8$
+M*`I@!D'J``$H")B-(B\`*"0-)@0L;```3J[_T"P`4H!F"$ZZ``!P_V`^VH:V
+MAF8V2^H``9Z&<`!.N@``3KH``$J`9B)*AV:D8!PB!B0-)@<L;```3J[_T"H`
+M4H!F"$ZZ``!P_V`"(`5,WVS\4$].=5E/2.<_`BX`+!`O00`<2B@`#6<$<`!@
+M4E.!)@$B!B0'+&P``$ZN_[XJ`$ZN_WPH`%*%9P1*A&<.(`1.N@``*4```'#_
+M8"0B!G0`)@).KO^^+`!2@&<$2H1G#B`$3KH``"E```!P_V`"(`9,WT#\6$].
+M=9[\`0!(YS\&+@`J2"P5*BT`""`M``1G"B(`+&P``$ZN_Z88+0`-2(1(Q"!-
+M3KH``$J$9P1P`&!$(@9![P`@)`@L;```=D#EBTZN_F@H`$J'9@HB!DZN_]Q*
+M@&<:2H1G$G#_NH!G#"(")`5.KO]&2H!G!'``8`9.N@``</],WV#\WOP!`$YU
+M("\`!$CG(`(B`"QL``!T`$ZN_S1.KO]\="Y&`K""5\%$`4B!2,$@`4S?0`1.
+M=2`O``0@;P`((F\`#)[\`!!(YS<6+@`F22I(?`!AN$J`9GPB!RQL``!T`4ZN
+M_E9*@&=L(@=![```)`AV!$ZN_]!9@&92(@<D/```)Q!.KO\T2H!G0B('0>\`
+M("0(=A!.KO_6<@FP@6\N<)NP+P`@9B9![P`E(@@D"TZN_-`J`$'O`";1P"((
+M)`U.KOS04H!G!E*%9P)\`2('=`!.KOY6(`9,WVCLWOP`$$YU("\`!"(O``B>
+M_`(02.<_!BX`</\O0`(H+T$`)"('+&P``'0`=@%.KO^^+T``("('3J[_OBP`
+M3J[_?"H`+T`"+&8``,(H+P`D(@<D!';_3J[^.+""9@``KKR";```GBH$FH8H
+M!2`$<@%(02QX``1.KO\Z*D!*@&9J<@)(04ZN_RCBB"H`#(4```(`;1`@!7(!
+M2$%.KO\Z*D!*@&9&>D#GC4OO`"@P/`'_<@!![P`H$,%1R/_\8"RXA6\$(`5@
+M`B`$)@!.N@``(@<D#2QL``!.KO_0L(-G"DZN_WPO0`(L8`:8@TJ$;M!![P`H
+ML<UG#")-(`4L>``$3J[_+BHO`BQF!$*O`B@L+P`@O*\`)&P.(@<D!BQL``!V
+M_TZN_[XL+P(H9PH@!4ZZ```I0```(`9,WV#\WOP"$$YUGOP!"$CG-Q8N`"9)
+M*D@L%4HM``UF``$8(`<$@```!`!G(`2````$`&=*4X!G6%.`9UQ3@&=>4X!G
+M9E.`9VQ@``#N2BT`#&<F(`9![P$D0^\!(&$`_=9*@&<4("\!)#=```(@+P$@
+M-H!P`&```,IP&6```+XB!BQL``!.KO\H)H!P`&```+(FAG``8```JG``8```
+MI"`&(A-A`/XV8```F"M3``AP`&```(XJ$TJM``1F#B(5+&P``$ZN_HPK0``$
+M("T`!&=B)``B!2QL``!.KOY<2H!F4B(&0>\`("0(=D#EBTZN_FA*@&<^(@5.
+MKO^F(BT`!$ZN_Z8B!DZN_]PB`G0`3J[_1AM\``$`#2J"*T(`!$'O`"`B""QL
+M``!.KO^X2H!G!"`"8`Y.N@``8`9P%BE```!P_TS?:.S>_`$(3G4@+P`$(B\`
+M""]O``P`!$CG#P8J+P`<+`$N`'`.3KH``"I`2H!F"G`,*4```'#_8$Y#U2+'
+M0IDBQD(M``TB!RQL``!.KO\H&T``#$AZ_G1(>OO:2'K[9$AZ^JQ(>OIV2'KZ
+M:"`%($U#^OI03KH``$_O`!@H`&P&($U.N@``(`1,WV#P3G4@+P`$(B\`""]O
+M``P`!"]O`!``""]O`!0`#"]O`!@`$$CG#0`H+P`4*B\`$"X`<`!*@68$<$#E
+MB`!```$O`"`'<O]A`/]&6$]*@&9`<`!*A&8$<$#EB`!```(O`"`%<O]A`/\H
+M6$]3@&8B<`!*KP`<9@1P0.6(`$```B\`("\`''+_80#_!EA/58!G$$'L``8O
+M2``03-\`L$[Z``!,WP"P3G4``````_@````"`````0``!EH```)<````````
+M`^^&```"7T1/4T)A<V4````0```%B```!2(```34```$O@``!(````/D```#
+MG````O````),```"!````;0```&.```!(@```.(```"F````,(,```)`7W-E
+M=&5R<@````4```4R```!Z@```/````"T````/H,```1`7V-H96-K7W-I9VYA
+M;',``````0```,J#```$0%]H86YD;&5?<VEG;F%L<P````$```#.@P``!$!C
+M;VYV97)T7V]S97)R```````#```#]@```5X```$\A@```E]E<G)N;P``````
+M!0``!7(```4Z```#^@```6(```%`@P```D!F<F5E`````````@``!<(```&@
+M@P```T!C:&MA8F]R=`````````$```.4@P```D!M86QL;V,``````0``!6:#
+M```#0%]A;&QO8U]F9````````0``!;2#```"7U]F86EL```````!```&9@``
+M``````/Q`````P````!/4%13``0`0````_(```/J````")LP('$``$9A:6QE
+M9"!T;R!I;FET:6%L:7-E($DO3P`````#\@```^D````G(&\`!")O``A(YR$6
+M)DDJ2$ZZ```B#20++&P``$ZN_[)*@&<$<`!@;$ZN_WPN`'(T1@&P@692(@).
+MKO^X2H!G#B(-3J[_LDJ`9P1P`&!&3J[_?"X`<F_2@;"!9BPB`G0`3J[_1DJ`
+M9QHB"TZN_[A*@&<0(@TD"TZN_[)*@&<$<`!@$DZN_WPN`"`'3KH``"E```!P
+M_TS?:(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H8```)?1$]3
+M0F%S90````$````:@P``!$!C;VYV97)T7V]S97)R```````!````C(8```)?
+M97)R;F\```````$```"0`````````_$````#`````$]05%,`!`!````#\@``
+M`^D````.(&\`!"`O``@B+P`,GOP`#$C7`0-P`-[\``Q.=2`O``0B+P`(+V\`
+M#``$44](UP`#<`!03TYU``````/Q`````P````!/4%13``0``````_(```/I
+M````$"!O``0B;P`(("\`#$CG`10N`"9)*DAF!'``8!P@!R!+(DUR`$J`9PX2
+M&)(99@13@&;V2(%(P2`!3-\H@$YU``````/Q`````P````!/4%13``0`````
+M`_(```/I````=2!O``0B;P`(+V\`#``$("\`$"]O`!0`"$CG!S0N`"1O`"`F
+M22I(+"L`="2O`!Q"J@`2<`$U0``.0FH`$"5\```"```R-4``#"5K`(``-B`K
+M`'QF$"(K``1O"B5\```(```68`0E0``6)5,`!$'K`(1.N@``)4``(B5``!HE
+M0``J("L`!%J`9SY5@&=068!G0%6`9F8@#6<<2'@`_TAL```O#4ZZ``!/[P`,
+M*@!O!B5%`!9@""5\```!```6)7P``*````A@2B5\```0```(8$`E?```0```
+M"'P`8#1*DV802BL`"&8*)7P``"````A@("5\``"````(8!8@*P`$;P9P0.&(
+M8`8@/```@``E0``(2H=G`GP`(`9.N@``@:H`"$S?+.!.=2!O``0B;P`(64](
+MYR,6*DA^`"])`!A"IRQL``!R`B0/3J[_'$_O``0F0$J`9U`B#73^3J[_K"X`
+M9T0B!R0+3J[_FDJ`9S@B!TZN_RY*@%?&1`9(ADC&2H!G!B(`3J[_IB`'Y8`O
+M+P`8($`O*``,(D(@!B!-80#^?%!/?`!@#GS_3J[_?$ZZ```I0```2H=G!B('
+M3J[_IB`+9P@D"W("3J[_%B`&3-]HQ%A/3G4``````_@````!`````0```)X`
+M```````#[X,```-`7V%M:6=A,F=M=``````!````<H,```-?<F5A9&QI;FL`
+M```````!````I(,```-`7VUA:V5?;6]D90`````!```!&H8```)?1$]30F%S
+M90````$```%`@P``!$!C;VYV97)T7V]S97)R```````!```!K(8```)?97)R
+M;F\```````$```&P`````````_$````#`````$]05%,`!`!````#\@```^L`
+M``!````#\@```^D````%(&\`!"`O``AR`&`"$,%3@&3Z3G4```/Q`````P``
+M``!/4%13``0``````_(```/I````#"`O``0B+P`(64\O!RX`+T$`!$ZZ``!(
+M;P`$2'@(`R\'3KH``$_O``PN'UA/3G4``````^^#```#0&-H:V%B;W)T````
+M`````0```!2#```"7VEO8W1L```````!````(@````````/Q`````P````!/
+M4%13``0``````_(```/I````#2`O``0B+P`(64\O!RX`(`%.N@``+T``!$ZZ
+M``!(;P`$2'@(!"\'3KH``$_O``PN'UA/3G4```/O@P``!4!?;6%K95]P<F]T
+M96-T:6]N`````````0```!*#```#0&-H:V%B;W)T`````````0```!J#```"
+M7VEO8W1L```````!````*`````````/Q`````P````!/4%13``0``````_(`
+M``/I````$"!O``0@+P`((B\`#)[\``Q(UP$#</\I0```WOP`#$YU(&\`!"`O
+M``@B+P`,GOP`#$C7`0-P_RE```#>_``,3G4```/OA@```E]E<G)N;P``````
+M`@```#@````8`````````_$````#`````$]05%,`!`!````#\@```^D````-
+M("\`!%E/+P<N`$ZZ``!(;P`$2'@(`"\'3KH``$_O``Q*@&<$<`!@!"`O``0N
+M'UA/3G4``````^^#```#0&-H:V%B;W)T`````````0````R#```"7VEO8W1L
+M```````!````&@````````/Q`````P````!/4%13``0``````_(```/I````
+M#R`O``1(YP8`3KH``"P`<`!.N@``8`9P`$ZZ```J`"`%3KH``$J`9^X@!DZZ
+M``!P!"E```!P_TS?`&!.=0```^^#```#0'-I9W-E=&UA<VL``````@```"P`
+M```*@P``!$!?8VAE8VM?<VEG;F%L<P`````!````$H,```1`7W=A:71?<VEG
+M;F%L<P```````0```!J#```$0%]H86YD;&5?<VEG;F%L<P````$````BA@``
+M`E]E<G)N;P```````0```#(````````#\0````,`````3U!44P`$`$````/R
+M```#Z0```"@@;P`$2.<C%BI(?@!"IRQL``!R`B0/3J[_'$_O``0F0$J`9U(B
+M#73^3J[_K"X`9T8B!R0+3J[_FDJ`9SHB*P`$7L!$`$B`2,`L`"('3J[_IG("
+M3J[_%DJ&9Q0B#4ZN_[A*@&<$<`!@,DZZ``!@*G`4*4```&`B3J[_?$ZZ```I
+M0```2H=G!B('3J[_IB`+9P@D"W("3J[_%G#_3-]HQ$YU```#[X8```)?1$]3
+M0F%S90````$````0@P```D!?<V5T97)R`````0```&J&```"7V5R<FYO````
+M```"````@````'*#```$0&-O;G9E<G1?;W-E<G(```````$```!\````````
+M`_$````#`````$]05%,`!`!````#\@```^D```&7(&\`!"`O``@B;P`,+V\`
+M$``$+P<N`"E(`!XI0``:<@&P@64>+R\`""\)80``)%!/2H!G#B!L`!Y"$"`'
+MD*P`&F`"<``N'TYU(&\`!")O``A(YP`4)DDJ2&``!/@0%7(EL`%F``3*4HT0
+M%4B`2,!*@&<``-9R)9"!9P`$M'(<D(%G``#,4X!G``$F4X!G``&`4X!G``&B
+M68!G``'L4X!G``($68!G``*:6X!G``,.4X!G``,P4X!G``-84X!G``-Z58!G
+M``.@4X!G``-&4X!G``0F4X!G``1"7X!G``"B4X!G``#\4X!G``$Z4X!G``%<
+M4X!G``%T5X!G``#D58!G``'24X!G``'N4X!G``(&4X!G``),4X!G``)H58!G
+M``)V58!G``*J4X!G``+44X!G``+T5X!G``-F4X!G``-^4X!G``.,8``#Z%.-
+M8``#XB`K`!AK!G(&L(%O!G``8``#_B(K`!CE@4'L`'8O,!@`80`$QEA/2H!F
+M``/88``#X"`K`!AK!G(&L(%O!G``8``#SB(K`!CE@4'L`!PO,!@`80`$EEA/
+M2H!F``.H8``#L"`K`!!K!G(+L(%O!G``8``#GB(K`!#E@4'L`4XO,!@`80`$
+M9EA/2H!F``-X8``#@"`K`!!K!G(+L(%O!G``8``#;B(K`!#E@4'L`,(O,!@`
+M80`$-EA/2H!F``-(8``#4$'L`7XB2V$`_CI*@&8``S1@``,\0>P!E")+80#^
+M)DJ`9@`#(&```RA![`&F(DMA`/X22H!F``,,8``#%$AX`#!(>``"+RL`#&$`
+M`WI/[P`,2H!F``+N8``"]DAX`"!(>``"+RL`#&$``UQ/[P`,2H!F``+08``"
+MV$AX`#!(>``"+RL`"&$``SY/[P`,2H!F``*R8``"NB`K``AR#$ZZ``!P#$J!
+M9P(@`4AX`#!(>``"+P!A``,03^\`#$J`9@`"A&```HP@*P`<4H!(>``P2'@`
+M`R\`80`"[D_O``Q*@&8``F)@``)J2'@`($AX``(O*P`(80`"T$_O``Q*@&8`
+M`D1@``),("L`"'(,3KH``'`,2H%G`B`!2'@`($AX``(O`&$``J)/[P`,2H!F
+M``(68``"'DAX`#!(>``"+RL`!&$``H1/[P`,2H!F``'X8``"`"`K`!!2@$AX
+M`#!(>``"+P!A``)B3^\`#$J`9@`!UF```=Y(;`&P80`"L%A/2H!F``'"8``!
+MR@RK````#``(;09![`&R8`1![`&V+PAA``**6$]*@&8``9Q@``&D0>P!NB)+
+M80#\CDJ`9@`!B&```9!![`'`(DMA`/QZ2H!F``%T8``!?$AX`#!(>``"+Q-A
+M``'D3^\`#$J`9@`!6&```6`O"V$``6183TJ`9@`!1F```4Y![`',(DMA`/PX
+M2H!F``$R8``!.DAL`=9A``(,6$]*@&8``1Y@``$F("L`'%Z`D*L`&'('3KH`
+M`$AX`#!(>``"+P!A``%^3^\`#$J`9@``\F```/H@*P`89P13@&`"<`8B*P`<
+M7H&2@"`!<@=.N@``2'@`,$AX``(O`&$``49/[P`,2H!F``"Z8```PDAX`#!(
+M>``!+RL`&&$``2A/[P`,2H!F``"<8```I$'L`=@B2V$`^XY*@&8``(A@``"0
+M(#P```=LT*L`%')D3KH``$AX`#!(>``"+P%A``#H3^\`#$J`9EQ@9B`\```'
+M;-"K`!1(>``P2'@`!"\`80``QD_O``Q*@&8Z8$0@*P`H9PPO`&$``1183TJ`
+M9B9P`&`N2JP`&E?`1`!(@$C`4ZP`&DJ`9P1P`&`6(&P`'A#5*4@`'E*-2A5F
+M`/L&("P`&DS?*`!.=2!O``2>_``L2.<!$$/O``AP"B+84<C__$'O``A.N@``
+M+@!'[``-8!H@!W(*3KH``'`PTH`6@5.+(`=R"DZZ```N`$J';PA![```M\AB
+MVDAK``%A``"`6$],WPB`WOP`+$YU("\`!"(O``@O;P`,``1(YP<$&B\`%RP!
+M+@!+[``78!P@!W(*3KH``'`PTH`:@5.-(`=R"DZZ```N`%.&2H=O#D'L``^[
+MR&+88`0:A5.-0>P`#[O(8P@@!E.&2H!N[$AM``%A```.6$],WR#@3G4@;P`$
+M+PTJ2"`L`!IG&!(=(&P`'A"!9@1P`6`*4JP`'E.L`!I@XBI?3G4```/X````
+M#P````$```2\```$)@``!!(```/0```#O````Z8```.@```#@@```C@```(D
+M```"$````?@```'(```!F````6@````2`````@``!E0```90```&1```!CP`
+M``84```&!@``!>````6J```%A@``!5H```5.```%2```!3P```4P````/@``
+M`#8````<````&`````````/O@P```E]?0UA$,S,`````"0``!?H```7J```%
+MH```!9````3<```$?@``!$8```,:```"K(,```)`;6MT:6UE``````$```6`
+M`````````_$````#`````$]05%,`!`!````#\@```^H```!Y4W5N`$UO;@!4
+M=64`5V5D`%1H=0!&<FD`4V%T```````````$````"`````P````0````%```
+M`!A3=6YD87D``$UO;F1A>0``5'5E<V1A>0!7961N97-D87D`5&AU<G-D87D`
+M`$9R:61A>0``4V%T=7)D87D``````#@```!`````2````%````!:````9```
+M`&Q*86X`1F5B`$UA<@!!<'(`36%Y`$IU;@!*=6P`075G`%-E<`!/8W0`3F]V
+M`$1E8P````"2````E@```)H```">````H@```*8```"J````K@```+(```"V
+M````N@```+Y*86YU87)Y`$9E8G)U87)Y``!-87)C:`!!<')I;`!-87D`2G5N
+M90``2G5L>0``075G=7-T``!397!T96UB97(`3V-T;V)E<@!.;W9E;6)E<@``
+M1&5C96UB97(``````/(```#Z```!!````0H```$0```!%````1H```$@```!
+M*````3(```$Z```!1"5A("5B("5E("5(.B5-.B53("59```E;2\E9"\E>2`E
+M2#HE33HE4P`E;2\E9"\E>0``"@!030``04T``"5(.B5-`"5).B5-.B53("5P
+M`"5(.B5-.B53```)`"5M+R5D+R5Y`````````^P````F`````0```7H```%V
+M```!<@```6X```%J```!9@```6(```%>```!6@```58```%2```!3@```.X`
+M``#J````Y@```.(```#>````V@```-8```#2````S@```,H```#&````P@``
+M`(X```"*````A@```((```!^````>@```'8````T````,````"P````H````
+M)````"`````<`````````_(```/K````"0```_(```/I````%B!O``0@+P`(
+M2.<G`BX`(@@L;```)#P```/M3J[_XBP`3KH``$J&9QP@!B('3KH``"H`(@9.
+MKO_<2H!F!$J%9P0@!6`.3J[_?$ZZ```I0```</],WT#D3G4```/OA@```E]$
+M3U-"87-E`````0```!*#```#0&-H:V%B;W)T`````````0```"*#```$0%]D
+M;U]T<G5N8V%T90````````$````N@P``!$!C;VYV97)T7V]S97)R```````!
+M````2H8```)?97)R;F\```````$```!.`````````_$````#`````$]05%,`
+M!`!````#\@```^D```#5(&\`!")O``@@+P`,(B\`$"]O`!0`!"]O`!@`""]O
+M`!P`#)[\`#!(YR\V+B\`6"](`"PJ`"@!?$#ECB]``"0O00`H+TD`,'!`Y8A.
+MN@``*D`O0`!$(`52@&82+&P``$ZN_\HO0`!`0J\`4&`F2&\`0$AX"`$O!4ZZ
+M``!/[P`,4H!F!$*O`$!P`2]``%`@!4ZZ```@!%*`9A(L;```3J[_Q"]``#Q"
+MKP!,8$:ZA&8,+V\`0``\0J\`3&`V2&\`/$AX"`$O!$ZZ``!/[P`,4H!F!G``
+M+T``/"(O`#RRKP!`5L!$`$B`2,`O0`!,(`1.N@``</^^@&80(&P``"]H`.``
+M.$*O`$A@4'#^OH!F#"]O`#P`.$*O`$A@/DAO`#A(>`@!+P=.N@``3^\`#%*`
+M9@9P`"]``#@@+P`X(B\`/+*`9PJPKP!`9P1P`6`"<``O0`!((`=.N@``2J\`
+M0&<``61*KP`\9P`!7$JO`#AF!E*'9@`!4"`-9P`!1"9->``O;P`P`#1@``"L
+M2H1F!B!O`"Q@`B!5)$AZ`RI(8!I2A1`5<BJP`6<,<B*P`6<&<@JP`68"4H52
+MC4H59N(J;P!$($W1QB)+T\5-Z0`!O<AE)"`&T(;0A2P`($U.N@``*D!*@&<`
+M`-H@"Y"O`$0F3=?`+TT`1"!+$+P`(%2+$7P`(@`!*DI@(!`5<B*P`6<&<BJP
+M`68&%OP`*F`*<@JP`68$%OP`*Q;=2A5FW!;\`")2A%BO`#0J;P`T2I5F`/].
+M0A,J;P!<(`UG$"(-+&P``'3^3J[_K"@`8`)X`$J$9@0@#68\*F\`1"\O`&`O
+M!"\O`%`O+P!$+R\`7"\O`%`@+P!8(B\`:"!-3KH``$_O`!@J`%*`9QH@34ZZ
+M```@!6!X+&P``$ZN_WQ.N@``*4```$J$9Q(B!"QL``!.KO^F8`9P#"E````@
+M+P!`9Q!*KP!09PHB`"QL``!.KO_<("\`/&<02J\`3&<*(@`L;```3J[_W"`O
+M`#AG$$JO`$AG"B(`+&P``$ZN_]PJ;P!$(`UG!B!-3KH``'#_3-]L]-[\`#!.
+M=2!O``0B;P`(("\`#"(O`!`O;P`4``0O;P`8``@O!2HO``PO!2\O``Q(>/__
+M80#\V$_O``PJ'TYU```#[X,```)`;6%L;&]C``````$```!,A@```E]$3U-"
+M87-E````"````OP```+F```"T````K(```*<```"2````)H```!<@P```E]I
+M;V-T;````````P```20```#&````>(,```1`7W!S975D;U]C;&]S90``````
+M`P```50```#N````D(8```%?7W5S`````0```/B#```"0')E86QL;V,````!
+M```!V(,```1`7W-T87)T7W!R;V-E<W,``````0```H2#```"0&9R964`````
+M```"```##@```I2#```$0&-O;G9E<G1?;W-E<G(```````$```*DA@```E]E
+M<G)N;P```````@```KX```*H`````````_$````#`````$]05%,`!`!````#
+M\@```^D````"<`%.=7`!3G4```/Q`````P````!/4%13``0``````_(```/I
+M````#B`O``0O!RX`3KH``"`'(&P``'(`3KH``&`,("P``$ZZ``!.N@``(&P`
+M`$ZZ``!*@&?H<``N'TYU```#[X,```-`8VAK86)O<G0````````!````"H8`
+M``-?7V]D9%]T:6UE<@`````"````*````!"#```$0%]T:6UE<E]S=&%R=```
+M``````$````6A@```U]?;V1D7W-I9P````````$````<@P``!$!?=V%I=%]S
+M:6=N86QS```````!````((,```1`7VAA;F1L95]S:6=N86QS`````0```"2#
+M```$0%]T:6UE<E]E>'!I<F5D``````$````L`````````_$````#`````$]0
+M5%,`!`!````#\@```^D````/(&\`!"`O``A(YP$$+@`J2$ZZ```O!TAX`P$O
+M#4ZZ``!/[P`,3-\@@$YU(&\`!"`O``A(YP$$3-\@@,```#[X,```-`8VAK
+M86)O<G0````````!````$H,```)?;W!E;@````````$````>`````````_$`
+M```#`````$]05%,`!``````#\@```^D````C("\`!"!O``@B+P`,64](YP,T
+M+`$N`"I(3KH``"`'3KH``"9`2H!G1`@K``$``V<V""L``P`#9Q8@:P`8+T@`
+M%"!K``1P`'("(F\`%$Z1(&L`%"](`!0@!B!K``0B321O`!1.DF`(<`TI0```
+M</],WRS`6$].=2`O``0@;P`((B\`#$CG`P1,WR#`8(````/O@P```T!C:&MA
+M8F]R=`````````$````:@P```T!?9FEN9%]F9`````````$````@A@```E]E
+M<G)N;P```````0```&H````````#\0````,`````3U!44P`$`$````/R```#
+MZ0````P@;P`$44\O#2I(0>\`!$ZZ``!*@&H$</]@#B`-9P8@+P`$*H`@+P`$
+M*E]03TYU``````/O@P```T!?9V5T=&EM90````````$````0`````````_$`
+M```#`````$]05%,`!``````#\@```^D````=(&\`!)[\`$!(YSL6*DA.N@``
+M(`UG4DH59TXB#4'O`"`D""QL``!V0'@`3J[\=BX`;39.KO]\+`!2@$ZZ```F
+M0$J`9R2^AF<4)@92@R(-)`M.KOQV2H!O$"`"8`X@0B)+$MAF_"`+8`)P`$S?
+M:-S>_`!`3G4```/O@P```T!C:&MA8F]R=`````````$````0A@```E]$3U-"
+M87-E`````0```"2#```"0&UA;&QO8P`````!````/`````````/Q`````P``
+M``!/4%13``0`0````_(```/I````$R!O``0B;P`(2.<S$B9)(@@L;```=/Y.
+MKO^L+@!.N@``2H=G&B(+)`=V`$ZN_D0L`"("3J[_IDJ&9P0@`V`&3KH``'#_
+M3-](S$YU``````/OA@```E]$3U-"87-E`````0```!*#```#0&-H:V%B;W)T
+M`````````0```!Z#```"0%]S971E<G(````!````0`````````/Q`````P``
+M``!/4%13``0`0````_(```/I````)"!O``2>_``,2.<!%"I(2AAF_%.(D<T@
+M""9-U\!=BWYA3KH``"\L``!(;```2&\`%TZZ``!/[P`,0>\`#R)(2AEF_%.)
+MD\@@"7(%L(%O"$'O``K1P&`$0>\`#R\(2&P`!"\+3KH``$_O``P6AR!-<`!.
+MN@``2H!F"E('<'J^`&_J0A4@#4S?*(#>_``,3G4``````_@````"`````0``
+M`%X````J`````````^^#```#0&-H:V%B;W)T`````````0```"*&```!7U]U
+M<P````$````F@P```U]?<W!R:6YT9@````````(```!D````,H,```-`7U]A
+M8V-E<W,````````!````<@````````/Q`````P````!/4%13``0`0````_(`
+M``/J`````B5L>`!A)7,````#\@```^D````&(&\`!"\-*DA.N@``($UP0.F(
+M*E].^@`````#[X,```-`8VAK86)O<G0````````!````"H,```)`9V5T8W=D
+M``````$````6`````````_$````#`````$]05%,`!``````#\@```^D````/
+M(&\`!"`O``A(YR$&+@`J2$ZZ```@!TZZ```D`"(-+&P``$ZN_T9*@&<$<`!@
+M!DZZ``!P_TS?8(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H,`
+M``5`7VUA:V5?<')O=&5C=&EO;@````````$````8A@```E]$3U-"87-E````
+M`0```""#```"0%]S971E<G(````!````,`````````/Q`````P````!/4%13
+M``0`0````_(```/I````'"`O``0B+P`(+V\`#``$44](YP<`*B\`&"P!+@!.
+MN@``(`=.N@``2H!G&B)`(&D`&"](`!`@!B(%(&D`!")O`!!.D6`"</],WP#@
+M4$].=2`O``0B+P`(+V\`#``$2.<'`"HO`!`O10`03-\`X&"@``````/O@P``
+M`T!C:&MA8F]R=`````````$````>@P```T!?9FEN9%]F9`````````$````D
+M`````````_$````#`````$]05%,`!``````#\@```^D````<("\`!"!O``@B
+M+P`,64](YP,T+`$N`"I(3KH``"`'3KH``"9`2H!G)@@K`````V<8(&L`$"](
+M`!0@!B!K``0B321O`!1.DF`(<`TI0```</],WRS`6$].=2`O``0@;P`((B\`
+M#$CG`P1,WR#`8)X``````^^#```#0&-H:V%B;W)T`````````0```!J#```#
+M0%]F:6YD7V9D`````````0```""&```"7V5R<FYO```````!````3```````
+M``/Q`````P````!/4%13``0`0````_(```/I````@2`O``0@;P`((F\`#"]O
+M`!``!"]O`!0`")[\`"Q(YS\V)DDJ2"]``$`D;P!<(`IG#DJ29@I*J@`$9@1P
+M`6`"<`!R`"]``#0D#6<"(A5T`"]!`"PF"V<")!-Z`'X!+T(`,&!2*"\`+,B'
+M+"\`,,R'3KH``$J$9@1*AF<V(`5.N@``)$!*@&8&</]@``%N2H1G"`@J````
+M`V<,2H9G%`@J``$``V8,<`TI0```</]@``%*4H7>A[JO`$!MJ"1O`%P@"F<0
+M(!(B*@`$(&P``$ZZ``!@""!L``!.N@``>@`@!4*O`%!Z`'X!+T``*&`Z*"\`
+M+,B'+"\`,,R'2H1F!$J&9R(@!4ZZ```B0"!I``@O2``\(`0B!B!I``0B;P`\
+M3I&!KP!04H7>A[JO`$!MP"@O`%`@!%*`9P9*KP`T9PAP`$ZZ``!@"B`L``"`
+MA$ZZ```O0`!,?`!X`2XO`#`J+P`H8'`@+P`LP(0O0`!((@?"A"]!`$1*@&8$
+M2H%G4B`&3KH``")`(&D`#$AO`$0O2``\(&D`!$/O`$PL;P`\3I983R`O`$AF
+M"B(-9P8B!$:!PY4@+P!$9@HB"V<&(@1&@<.32J\`2&8&2J\`1&<"4H52AMB$
+MO*\`0&V*("\`3$ZZ``!*A684(&P``$ZZ``!*@&8(2J\`-&<`_N@@!4S?;/S>
+M_``L3G4``````^^#```#0&-H:V%B;W)T`````````0```'"#```#0%]F:6YD
+M7V9D`````````P```7X```$$````?H8```)?97)R;F\```````$```"HA@``
+M`U]?;V1D7W1I;65R``````,```'D````U````,J#```$0%]T:6UE<E]S=&%R
+M=`````````$```#.@P``!$!?=&EM97)?86)O<G0````````!````V(,```1`
+M7V-H96-K7W-I9VYA;',``````0```4"&```#7U]O9&1?<VEG`````````0``
+M`4:#```$0%]W86ET7W-I9VYA;',```````$```%,@P``!$!?:&%N9&QE7W-I
+M9VYA;',````!```!W(,```1`7W1I;65R7V5X<&ER960``````0```>@`````
+M```#\0````,`````3U!44P`$`$````/R```#Z0```"!13TCG(R0N+P`@3KH`
+M`"PO`"@@!TZZ```J0$J`9U@@+P`D5X!G#%.`9PYP%BE```!@1'`,P)5@0"`5
+M=`S,@B0``D+_\X2&*H)R!,*"=`3`@K"!9QXO00`8(&T`("](`!0@;0`$0^\`
+M&'``)&\`%$Z28`9P`&`"</],WR3$4$].=0```^^#```#0&-H:V%B;W)T````
+M`````0````R#```#0%]F:6YD7V9D`````````0```!:&```"7V5R<FYO````
+M```!````+@````````/Q`````P````!/4%13``0`0````_(```/I````````
+M`_$````#`````$]05%,`!``````#\@```^H```#>86UI9V$@<W!E8VEF:6,@
+M97)R;W(```````!5;FMN;W=N(&5R<F]R`&YO="!O=VYE<@!N;R!S=6-H(&9I
+M;&4@;W(@9&ER96-T;W)Y`&YO('-U8V@@<')O8V5S<P!I;G1E<G)U<'1E9"!S
+M>7-T96T@8V%L;`!I+V\@97)R;W(`;F\@<W5C:"!D979I8V4@;W(@861D<F5S
+M<P!A<F=U;65N="!L:7-T('1O;R!L;VYG``!E>&5C(&9O<FUA="!E<G)O<@!B
+M860@9FEL92!N=6UB97(`;F\@8VAI;&0@<')O8V5S<P``;F\@;6]R92!P<F]C
+M97-S97,`;F]T(&5N;W5G:"!M96UO<GD`<&5R;6ES<VEO;B!D96YI960`8F%D
+M(&%D9')E<W,`8FQO8VL@9&5V:6-E(')E<75I<F5D`&UO=6YT(&1E=FEC97,@
+M8G5S>0``9FEL92!E>&ES=',`8W)O<W,M9&5V:6-E(&QI;FL`;F\@<W5C:"!D
+M979I8V4``&YO="!A(&1I<F5C=&]R>0!I<R!A(&1I<F5C=&]R>0``:6YV86QI
+M9"!A<F=U;65N=```9FEL92!T86)L92!O=F5R9FQO=P!T;V\@;6%N>2!O<&5N
+M(&9I;&5S`&YO="!A('1Y<&5W<FET97(``'1E>'0@9FEL92!B=7-Y``!F:6QE
+M('1O;R!B:6<``&YO('-P86-E(&QE9G0@;VX@9&5V:6-E`&EL;&5G86P@<V5E
+M:P``<F5A9"UO;FQY(&9I;&4@<WES=&5M`'1O;R!M86YY(&QI;FMS``!B<F]K
+M96X@<&EP90!M871H(&%R9W5M96YT`')E<W5L="!T;V\@;&%R9V4``$DO3R!S
+M=')E86T@96UP='D``&9I;&4@;F%M92!T;V\@;&]N9P``9&ER96-T;W)Y(&YO
+M="!E;7!T>0!T;V\@;6%N>2!S;V9T(&QI;FMS("AL;V]P/RD`````&@```"@`
+M```R````3````%P```!T````?@```)@```"P````P@```-(```#D````]@``
+M`0@```$:```!)@```3P```%0```!7````6X```%^```!C@```9X```&P```!
+MQ````=@```'J```!^@```@@```(@```"+@```D0```)4```"8````FX```*`
+M```"D@```J8```*Z````)@`````#[````"@````!```#;@```VH```-F```#
+M8@```UX```-:```#5@```U(```-.```#2@```T8```-"```#/@```SH```,V
+M```#,@```RX```,J```#)@```R(```,>```#&@```Q8```,2```##@```PH`
+M``,&```#`@```OX```+Z```"]@```O(```+N```"Z@```N8```+B```"W@``
+M`MH```+6````%@````````/R```#Z0```$4@+P`$*4```$J`9P``AG)GD(%G
+M``""58!G``"`<@F0@6=\4X!G>%.`9W13@&=P4X!G;%.`9VA3@&=H4X!G:')1
+MD(%G9E.`9V93@&=F4X!G9E.`9V93@&=F58!G9E.`9V93@&=F4X!G9E6`9V93
+M@&=F4X!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V9@:'``8&9P#&!B
+M<`M@7G`68%IP!V!6<`A@4G`08$YP$6!*<`)@1G`"8$)P%F`^<`=@.G`68#9P
+M)&`R<!9@+G`68"IP'F`F<!)@(G`E8!YP)F`:<!-@%G`68!)P'&`.<`U@"G`-
+M8`9P#6`"</].=2\.+&P``$ZN_WQA`/[Z*4```"Q?3G4```/X`````0````$`
+M``$.`````````^^&```"7U]/4T524@`````!````!H8```)?1$]30F%S90``
+M``$```$"`````````_$````#`````$]05%,`!`!````#\@```^L````!```#
+M\@```^D````%3KH``$ZZ``!.N@``<@9.^@````````/O@P```T!C:&MA8F]R
+M=`````````$````"@P```T!?8VQO<V5?86QL``````$````&@P```D!G971P
+M:60``````0````J#```"0&MI;&P````````!````$`````````/Q`````P``
+M``!/4%13``0``````_(```/I````62!O``0@+P`(64](YP$6+@`O2``0(&\`
+M$"I08&1P#;`M``AF6B`M`*QG!N6`($!@`I'()D@@+0"<L(=G-"`M`*"PAV<L
+M("T`X+"'9R0@"V<N("L`'+"'9Q@@*P`@L(=G$"`K`#BPAV<(("L`,+"'9@XB
+M37!@[X@L>``$3J[^O"I52I5FF$S?:(!83TYU("\`!"(O``A(YP$"+@`@`5.`
+M9PQ3@&<(4X!G!%V`9BPL>``$3J[_?"!L``#0_`&6(`=A`/]((&P``-#\`:0@
+M!V$`_SI.KO]V<`!@"'`6*4```'#_3-]`@$YU("\`!"(O``A(YP8$+`$J`$ZZ
+M``!*A6H"1(6ZK```9@Y*AF<&(`9.N@``<`!@2"`%3KH``"I`2H!G!DJM`!1G
+M"G`#*4```'#_8"P@!F<H(BT`$,%!80#_6"(`<`F\@&84<@$K00`4*T``&'`4
+M3KH``'``8`(@`4S?(&!.=0`````#[X8```)?4WES0F%S90````(```#$````
+MMH8```)?97)R;F\```````(```$J````W(,```-`8VAK86)O<G0````````!
+M````^(8```-?7V]U<E]P:60````````!```!`H,```1`7W-I9U]D:7-P871C
+M:````````@```50```$.@P```T!?9FEN9%]P:60```````$```$8````````
+M`_$````#`````$]05%,`!`!````#\@```^D```!#(&\`!$CG``8J2")-+'@`
+M!$ZN_P0@34S?8`!.^@``("\`!$CG`00N`"IL``A@#B`M``RPAV8$(`U@""I5
+M2I5F[G``3-\@@$YU2.<@`D'L``A.N@``("P``"(L```D`+."`H(`?___*4(`
+M!%*"*4(``"\!+P!(;```2&P`%$ZZ``!/[P`0+'@`!$ZN_68I0``X9Q!![``4
+M<`!.N@``*4``-&8*2&P`#DZZ``!83TS?0`1.=4CG``8@+``X9PH@0"QX``1.
+MKOU@2JP`-&<X+'@`!$ZN_WQ@#")-<!PL>``$3J[_+B!L`#0L>``$3J[^C"I`
+M2H!FXB!L`#1.N@``+'@`!$ZN_W9,WV``3G4``````_@````"`````0```*0`
+M``!V````#`````(```#V````Y````,@```"X````G@```)0```".````>@``
+M`&X```!H````3@```"H````````#[X,```)`9G)E90````````$````<@P``
+M`D!.97=,:7-T`````0```%*&```!7U]U<P````$```!6A@``!%]?<W1A<G1U
+M<%]T:6UE```````!````6H,```-?7W-P<FEN=&8````````!````?H,```-`
+M0W)E871E4&]R=``````!````FH,```)?7V9A:6P```````$```"H@P```T!$
+M96QE=&50;W)T``````$```#Z`````````_$````#`````$]05%,`!`!````#
+M\@```^H````&9&]O<BXE;'@N)6QX``!.;R!M96UO<GD````#\@```^L````/
+M```#\@```^D````O(&\`!"`O``@B+P`,(F\`$"]O`!0`!"]O`!@`"%E/2.</
+M-B@O`"PJ+P`H+`$N`"I)+T@`("QX``1.KOUF)D!*@&<P($L@!$ZN_7(D0$J`
+M9R(@#6<()4T`*"5%`"0@;P`@(`<B2B(&3J[^1$H`9@0@"F`6(`IG!B!*3J[]
+M;"`+9P8@2TZZ``!P`$S?;/!83TYU(&\`!$CG``8J2"`-9Q@B32QX``1.KOX^
+M(&T`#DZZ```@34ZN_6Q,WV``3G4```/O@P```T!$96QE=&50;W)T``````(`
+M``"N````A`````````/Q`````P````!/4%13``0``````_(```/I````%"!O
+M``0@+P`(2.<A!BX`*DA.N@``(@TL;```3J[_B$J`9R(B`$ZN_Z8@!TZZ```@
+M!TZZ```D`"(-3J[_1DJ`9P1P`&`&3KH``'#_3-]@A$YU```#[X,```-`8VAK
+M86)O<G0````````!````$H8```)?1$]30F%S90````$````8@P``!4!?;6%K
+M95]P<F]T96-T:6]N`````````@```#(````L@P```D!?<V5T97)R`````0``
+M`$8````````#\0````,`````3U!44P`$`$````/R```#^P``")D1/@!?<V5T
+M:FUP`'1E>'0`0%]L;VYG:FUP`$!?<V5T:FUP`%]?;&]N9VIM<`!?7W-E=&IM
+M<`!S<')I;G1F`%],5D]287=$;T9M=`!?06)S17AE8T)A<V4`7U]S<')I;G1F
+M`'1M<&YA;2YC`%]M:W1E;7``0'1M<&YA;0!?=&UP;F%M`%]?34521T5$`'!O
+M<&5N+F,`7W=A:71P:60`0&9C;&]S90!`9G)E90!`7W-T87)T7W!R;V-E<W,`
+M0%]S971E<G(`7V5R<FYO`%]$3U-"87-E`$!F;W!E;@!?7V9I9F]?8F%S90!?
+M7V9I9F]?;V9F<V5T`$!M86QL;V,`0'!C;&]S90!?<&-L;W-E`$!P;W!E;@!?
+M<&]P96X`<W1A<G0N8P!`8V]N=F5R=%]O<V5R<@!?7W!R;V-E<W-E<P!?7W-T
+M86-K7W-I>F4`7U]N97AT7W!I9`!?7V1O;W)?;F%M90!?7W-T87)T=7!?<&]R
+M=`!?3&EN:V5R1$(`7U]S=&%R=%]P<F]C97-S`%]?8VAI;&1?9&]O<E]N86UE
+M`%]?8VAI;&1?8V]M;6%N9%]L96X`7U]C:&EL9%]C;VUM86YD`%]?8VAI;&1?
+M97AI=`!?7V-H:6QD7V5N=')Y`&=E='!I9"YC`%]?;W5R7W!I9`!`8VAK86)O
+M<G0`0&=E='!I9`!?9V5T<&ED`'-I9VYA;"YC`%]?<VEG7VAA;F1L97)S`$!S
+M:6=N86P`7W-I9VYA;`!`<VEG=F5C`%]S:6=V96,`<VEG<V5T;6%S:RYC`$!?
+M<VEG7V1I<W!A=&-H`%]?<VEG7W!E;F1I;F<`7U]S:6=?;6%S:P!`<VEG8FQO
+M8VL`7W-I9V)L;V-K`$!S:6=S971M87-K`%]S:6=S971M87-K`'-T870N8P!?
+M<F5A9&QI;FL`0%]F:6)S=&%T`$!?;&9I8G-T870`7U]T96UP7V9N86UE`%]L
+M87-T7V5N=')Y`$!?9V5T7V-D`%]L87-T7V1I<@!`;'-T870`7VQS=&%T`$!S
+M=&%T`%]S=&%T`&1I<BYC`$!S965K9&ER`%]S965K9&ER`$!T96QL9&ER`%]T
+M96QL9&ER`$!R96%D9&ER`%]R96%D9&ER`$!C;&]S961I<@!?8VQO<V5D:7(`
+M0&]P96YD:7(`7V]P96YD:7(`9&ER7V1A=&$N8P!?7V=E=%]C9`!A8V-E<W,N
+M8P!`86-C97-S`%]A8V-E<W,`0%]?86-C97-S`%]?7V%C8V5S<P!F<W1A="YC
+M`%]I;V-T;`!`9G-T870`7V9S=&%T`'-Y;6QI;FLN8P!`<WEM;&EN:P!?<WEM
+M;&EN:P!M97-S86=E+F,`0&5X:70`7U]0<F]G<F%M3F%M90!?7U="96YC:$US
+M9P!?7W5S`%]?9F%I;`!?7VUE<W-A9V4`86QL;V-D;W,N8P!?06QL;V-$;W-/
+M8FIE8W1486=S`'-E=&IM<"YC`$!L;VYG:FUP`%]L;VYG:FUP`$!S971J;7``
+M9V5T:&]S=&YA;64N8P!?<W1R;F-P>0!?7W-Y<W1E;5]N86UE`$!G971H;W-T
+M;F%M90!?9V5T:&]S=&YA;64`<&5R<F]R+F,`7U]/4T524@!?<WES7V5R<FQI
+M<W0`7W-Y<U]N97)R`$!W<FET90!`<&5R<F]R`%]P97)R;W(`<VEG;&ES="YC
+M`%]S>7-?<VEG;&ES=`!W86ET-"YC`$!?:&%N9&QE7W-I9VYA;',`0%]W86ET
+M7W-I9VYA;',`0%]F<F5E7V5N=')Y`$!W86ET<&ED`$!W86ET`%]W86ET`$!W
+M86ET,P!?=V%I=#,`0'=A:70T`%]W86ET-`!P<V5U9&]?8RYC`$!?9G)E95]F
+M9`!`7V9I;F1?9F0`0%]P<V5U9&]?8VQO<V4`7U]P<V5U9&]?8VQO<V4`<FEN
+M9&5X+F,`0'-T<G)C:'(`0')I;F1E>`!?<FEN9&5X`&EN9&5X+F,`0'-T<F-H
+M<@!`:6YD97@`7VEN9&5X`'1I;65R<RYC`$!?9&5V:6-E7V-L;W-E`$!?9&5V
+M:6-E7V]P96X`0%]T:6UE<E]E>'!I<F5D`%]?=&EM97)?97AP:7)E9`!`7W1I
+M;65R7W-T87)T`%]?=&EM97)?<W1A<G0`0%]T:6UE<E]S:6<`7U]T:6UE<E]S
+M:6<`0%]T:6UE<E]A8F]R=`!?7W1I;65R7V%B;W)T`$!?9G)E95]T:6UE<@!?
+M7V9R965?=&EM97(`0%]A;&QO8U]T:6UE<@!?7V%L;&]C7W1I;65R`&9I9F]F
+M9"YC`%]?<W1A<G1U<%]T:6UE`$!?8VQE86YU<%]F:69O`%]?8VQE86YU<%]F
+M:69O`$!?:6YI=%]F:69O`%]?:6YI=%]F:69O`%]?9FEF;U]S:6<`7U]F:69O
+M7V]K`%]?1FEF;T)A<V4`8VQO<V4N8P!`8VQO<V4`7V-L;W-E`$!?7V-L;W-E
+M`%]?7V-L;W-E`&9I;&5S+F,`0%]L87-T7V9D`%]?;&%S=%]F9`!?7V9I;F1?
+M9F0`7U]F<F5E7V9D`$!?86QL;V-?9F0`7U]A;&QO8U]F9`!U=&EM92YC`$!?
+M9VUT,F%M:6=A`$!T:6UE`$!U=&EM90!?=71I;64`8F-O<'DN8P!`;65M;6]V
+M90!`8F-O<'D`7V)C;W!Y`&%M:6=A=&EM92YC`%]D87EL:6=H=`!?='IN86UE
+M`%]?0UA$,S,`0&QO8V%L=&EM90!`7V=E='1I;64`0&9T:6UE`%]F=&EM90!`
+M9V5T=&EM96]F9&%Y`%]G971T:6UE;V9D87D`=&EM96-O;G9E<G0N8P!?5&EM
+M97)"87-E`$!?86UI9V$R9VUT`%]?86UI9V$R9VUT`%]?9VUT,F%M:6=A`%]?
+M9V5T=&EM90!P=V0N8P!`9V5T;&]G:6X`7V=E=&QO9VEN`$!G971P=VYA;0!?
+M9V5T<'=N86T`0&=E='!W=6ED`%]G971P=W5I9`!?7V%M:6=A7W5S97(`<F5A
+M9&QI;FLN8P!?<W1R;&5N`$!R96%D;&EN:P!A;&QO8V$N8P!?;6%L;&]C`%]F
+M<F5E`%]A;&QO8V$`=6YL:6YK+F,`0'5N;&EN:P!?=6YL:6YK`'!I<&4N8P!`
+M<W1R8V%T`$!.97=,:7-T`$!S;V-K971P86ER`%]S;V-K971P86ER`$!P:7!E
+M`%]P:7!E`&=R<"YC`$!G971G<FYA;0!?9V5T9W)N86T`0&=E=&=R9VED`%]G
+M971G<F=I9`!S:6=N86QS+F,`7U]&4$524@!`7U]E>&ET`$!?9FEN9%]P:60`
+M0%]C;&5A;G5P7W!R;V-E<W-E<P!?7V-H:6QD<F5N7V5X:70`0%]I;FET7W!R
+M;V-E<W-E<P!`7V-L96%N=7!?<VEG;F%L<P!?7V-L96%N=7!?<VEG;F%L<P!`
+M7VEN:71?<VEG;F%L<P!?7VEN:71?<VEG;F%L<P!`0VAK7T%B;W)T`%]#:&M?
+M06)O<G0`7V-H:V%B;W)T`$!#6$9%4E(`7T-81D524@!?7VAA;F1L95]S:6=N
+M86QS`%]?=V%I=%]S:6=N86QS`$!?8VAE8VM?<VEG;F%L<P!?7V-H96-K7W-I
+M9VYA;',`7U]S:6=?9&ES<&%T8V@`0&%L87)M`%]A;&%R;0!?;6%I;BYC`$!M
+M86EN`$!?7V=E=&5N=@!`='%S;W)T`$!S=')N8W!Y`%]?7V-T>7!E`$!?:6YI
+M=%]U;FEX:6\`7U]?:6]B`%]?6$-%6$E4`%]3>7-"87-E`$!R96%L;&]C`%]?
+M7VUA:6X`0&UA:V5?96YV:7)O;@!?;6%K95]E;G9I<F]N`%]E;G9I<F]N`%]?
+M;V1D7W-I9P!?7V]D9%]T:6UE<@!U;6%S:RYC`$!U;6%S:P!?=6UA<VL`<')O
+M=&5C=&EO;BYC`$!?;6%K95]M;V1E`%]?;6%K95]M;V1E`$!?;6%K95]P<F]T
+M96-T:6]N`%]?;6%K95]P<F]T96-T:6]N`%]U<V5?86UI9V%?9FQA9W,`9VED
+M+F,`0&=E=&5G:60`7V=E=&5G:60`0&=E=&=I9`!?9V5T9VED`%]E>&ET+F,`
+M0%]E>&ET`%]?97AI=`!?7U]E>&ET`$!?8VQO<V5?86QL`%]?8VQO<V5?86QL
+M`&EO8W1L+F,`0&EO8W1L`&]P96XN8P!`7V%L;&]C7V%M:6=A9F0`0'-T<FEC
+M;7``7V]P96X`7U]?;W!E;@!C=&EM92YC`%]S<')I;G1F`$!R96%D`$!?='IS
+M970`7U]T>G-E=`!`;6MT:6UE`%]M:W1I;64`0&-T:6UE`%]C=&EM90!`87-C
+M=&EM90!?87-C=&EM90!`9VUT:6UE`%]G;71I;64`7VQO8V%L=&EM90!`='IS
+M971W86QL`%]T>G-E='=A;&P`0'1Z<V5T`%]T>G-E=`!?=&EM97IO;F4`86UI
+M9V%D;W,N8P!?7VEN:71?=6YI>&EO`%]?86QL;V-?86UI9V%F9`!`7V1O7W1R
+M=6YC871E`%]?9&]?=')U;F-A=&4`<F5N86UE+F,`0')E;F%M90!?<F5N86UE
+M`&-H;W=N+F,`0&9C:&]W;@!?9F-H;W=N`$!C:&]W;@!?8VAO=VX`8F-M<"YC
+M`$!B8VUP`%]B8VUP`&9I8G-T870N8P!?7V9I8G-T870`7U]L9FEB<W1A=`!B
+M>F5R;RYC`$!B>F5R;P!?8GIE<F\`9G1R=6YC871E+F,`0&9T<G5N8V%T90!?
+M9G1R=6YC871E`&9C:&UO9"YC`$!F8VAM;V0`7V9C:&UO9`!M:V9I9F\N8P!`
+M;6MN;V0`7VUK;F]D`$!M:V9I9F\`7VUK9FEF;P!I<V%T='DN8P!`:7-A='1Y
+M`%]I<V%T='D`<VEG<&%U<V4N8P!`<VEG<&%U<V4`7W-I9W!A=7-E`')M9&ER
+M+F,`0')M9&ER`%]R;61I<@!S=')F=&EM92YC`$!S=')F=&EM90!?<W1R9G1I
+M;64`=')U;F-A=&4N8P!`=')U;F-A=&4`7W1R=6YC871E`&5X96,N8P!`97AE
+M8P!?97AE8P!`965X96,`7V5E>&5C`'5I9"YC`$!G971E=6ED`%]G971E=6ED
+M`$!G971U:60`7V=E='5I9`!S;&5E<"YC`$!S;&5E<`!?<VQE97``8W)E870N
+M8P!`8W)E870`7V-R96%T`$!?7V-R96%T`%]?7V-R96%T`'=R:71E+F,`7W=R
+M:71E`$!?7W=R:71E`%]?7W=R:71E`'1I;64N8P!?=&EM90!G971E;G8N8P!?
+M7U]G971E;G8`;&EN:RYC`$!L:6YK`%]L:6YK`&UK=&5M<"YC`$!M:W1E;7``
+M9V5T=V0N8P!`9V5T8W=D`$!G971W9`!?9V5T=V0`8VAM;V0N8P!`8VAM;V0`
+M7V-H;6]D`&QS965K+F,`0&QS965K`%]L<V5E:P!`7U]L<V5E:P!?7U]L<V5E
+M:P!R96%D+F,`7W)E860`0%]?<F5A9`!?7U]R96%D`'-E;&5C="YC`$!S96QE
+M8W0`7W-E;&5C=`!F8VYT;"YC`%]F8VYT;`!E<G)O<E]M<V<N8P!E<G)O<BYC
+M`%]?<V5T97)R`%]C;VYV97)T7V]S97)R`&%B;W)T+F,`0&MI;&P`0&%B;W)T
+M`%]A8F]R=`!K:6QL+F,`7VMI;&P`<')O8V5S<V5S+F,`0$1E;&5T95!O<G0`
+M0$-R96%T95!O<G0`7U]C;&5A;G5P7W!R;V-E<W-E<P!?7VEN:71?<')O8V5S
+M<V5S`%]?9FEN9%]P:60`7U]F<F5E7V5N=')Y`&1E=FEC97,N8P!?7V1E=FEC
+M95]C;&]S90!?7V1E=FEC95]O<&5N`&UK9&ER+F,`0&UK9&ER`%]M:V1I<@``
+M`0````$`"0`)`^D````$``X`%@`!`!@`!``!`"$`#@`!`"L````!`#0`#``!
+M``D`#`/I``(`/`!)``$`5@````$`8``I``,`"0`*`^D``0!H``(`<0`$``$`
+M>0````$`@0`$`^H``````($`"0/K``````"*`%0``P`)`&\#Z0`,`)$`F@"B
+M`*@`N`#"`,D`T0!5`-D`Y0#R``0`^P%>``$!`P%:``$!"P`(``$!$@````$`
+M@0`%`^H``````($``0/K``````$9`2T``P`)`,4#Z0`+`*(`P@$@`3`!/`%)
+M`50`\@%@`,D!;P`"`*D`Y@`!`7D`M@`!`($`!@/J``````"!``H#ZP````4!
+MB0`D``$!FP`@``$!KP`<``$!OP`8``$!S`````$!V@)M``$`"0`#`^D``@'C
+M`>P``@'W`````0'_`````0('`H8``0`)`",#Z0`#`,("$`'L``0"'P!B``$"
+M)P!:``$"+P`,``$"-P````$"/P+&``$`"0`5`^D`!`)+`EL![`)I``0"=`!&
+M``$"?@!"``$"B``$``$"E`````$"H`,"``(`"0":`^D`"0*F`K`![`*Z`,D"
+MQ@+3`MX"Z``$`O(!U@`!`OD!S@`!`P`!G@`!`P8!E@`!`($`00/K``````,,
+M`_4``0`)`-`#Z0`)`M,"W@'L`,(!(`#)`/("Z`"B``H#$@,@``$#&P,8``$#
+M)`,(``$#+0,$``$#-@*0``$#/P*,``$#2`).``$#4@)*``$#7`%>``$#90%:
+M``$#;@48``(`"0`(`^D``0#)``("WP````$#>0````$`@0`"`^L````"`M,`
+M!``!`N@````!`X(%,@`!``D`&P/I``,`P@*P`>P`!`.+`&```0.3`%@``0.;
+M``@``0.E`````0.O!6@``0`)`$$#Z0`&`,(!(`*Z`,D#M@'L``(#O@`(``$#
+MQ0````$#S`77``$`"0`.`^D``P"X`,D![``"`]8`"``!`]\````!`^@%_P`"
+M``D`/@/I``4#\0/X`,D$!@02``($%P#B``$$'@#4``$`@0`/`^H`````!"@&
+MA@`!``D`!P/I``$`R0`!!#,````!!$<&G``!``D`#P/I``0`#0*'`!<":0`$
+M!%``'@`!!%D`%@`!!&(`!``!``$````!!&H&S``!``D`!P/I``($=P2!``($
+MCP`(``$$G`````$$J0;I``(`"0`I`^D`!@#)!+($N@3'`,($T``"!-@`!``!
+M!.`````!`($`"`/J``````3H!U(``@`)```#Z0``````@0#&`^H````!!/("
+MF``!!/\(1P`!``D`.@/I``4%!@47`,(%)@$P``@%-`#```$`D@"T``$%/0"F
+M``$%0P"B``$%20"2``$%4`"&``$%5P`0``$%7@````$%90BJ``$`"0`2`^D`
+M`P5O!7D![``"!80`!``!!9,````!!:((V``!``D``P/I``$%J@`"!;0`"``!
+M!;P````!!<0(Z@`!``D``P/I``$%RP`"!=0`"``!!=L````!!>((_``"``D`
+M30/I``(%Z@7Y``P&"`$$``$&&`$```$&*`#(``$&-@"\``$&1`"H``$&4`"D
+M``$&7`!^``$&:@!Z``$&>`!2``$&A0!.``$&D@````$&H`````$`@0`$`^H`
+M````!JX);0`#``D`'@/I``($$@:W``0&Q@!4``$&U0!4``$&Y`````$&\```
+M``$`@0`%`^H````!!OP````!`($`!`/K````!`<'``P``0#E``@``0#9``0`
+M`0<1`````0<<";H``0`)`!8#Z0`#!6\%>0'L``0')`!0``$'*P!,``$',@`$
+M``$'.P````$'1`GL``(`"0!B`^D``P"B`,(`\@`(!TP!@``!!U8!@``!!7H!
+M3``!!V`!2``!!7`!+``!!VH!*``!!W0`,``!!W\````!`($``@/K``````>*
+M"H```0`)`!H#Z0`%`+@`R0>1!YT![``"!Z0`"``!!ZL````!![(*OP`!``D`
+M!P/I``$'N0`"!\,`#``!!\H````!!]$*U0`"``D`4@/I``8'W0?G!^X']@@!
+M`>P`!`@,`0X``0@3`0H``0@:``@``0@H`````0"!``P#Z@`````(-@MU``$`
+M"0`P`^D``@?N"$0`!@A/`'@``0A;`'0``0>2`"@``0AG`"```0@"``0``0AS
+M`````0A]"[X``@`)``L#Z0````8(@P`D``$(C0`D``$(EP`6``$(H0`2``$(
+MJP`$``$(M0````$`@0`)`^H````!"+\`!``!",P+Z@`!``D`*@/I``8`P@$@
+M"-8`N`#)`>P``@C?``P``0*G`````0CI#$```P`)`"P#Z0`""/$(^0`!"0``
+M+@`!`($`!P/J``````"!``$#ZP`````)"`R=``$`"0`V`^D`!@$@`>P#M@=+
+M`,(`R0`""1$`9``!"1D`8``!"2$-`P`"``D"&@/I`!4%>0#9`.4'!P'L!6\'
+M<P#R`+@`50)+"2<%!@47`,D`P@"B!Q$)+P02!OP`!`DY!]0``0E%!\(``0E1
+M!S8``0E7!S(``0"!`!4#Z@`````)70_\``(`"0`)`^D````$"6,`%@`!"6T`
+M$@`!"7<`!``!"8$````!`($`"0/J``````F+$"<``P`)`*D#Z0`-"94$'0F<
+M":0)KPG$"=,&=P9#!!8&D08G!@<`%`GE`IH``0GW`IH``0H)`EP``0H8`EP`
+M`0HG`EH``0HR`EH``0'M`E(``0H]`E(``0I'`D0``0I/`D```04'`>H``0I7
+M`>8``048`=```0IH`<P``0IW`;8``0J'`;(``0),`0P``0J7`0@``0JF`"@`
+M`0JM`"0``0"!``H#Z@``````@0!$`^L````#`EL!"``!`FD!!``!`A``!``!
+M"K0170`#``D"'0/I`!4#\0J["+\*P0K+"M,*W00&"N4`R0H(!N,&0P:1"O0*
+M^@L$`*(+#`#R!!8``PL6`WH``0L>`'@``0LL`'@``0"!`"P#Z@``````@0`(
+M`^L````(!($`'``!"SH`&``!"$0`%``!`3P`$``!!K<`#``!"T,`"``!"TT`
+M!``!!!(````!"UD4>P`!``D`!`/I`````@MA``0``0MH`````0MO%(<``@`)
+M`#X#Z0````0+?`!^``$+B`!Z``$+E``$``$+I@````$`@0`!`^L````!"[@`
+M```!"\D4U@`!``D``@/I````!`O/``0``0O8``0``0OA`````0OI`````0OQ
+M%.```0`)`!4#Z0`'"OH&=PM-">0&Q0<J!TL`!@OY`$P``0P``$@``0F=`"8`
+M`0P'`"(``0P/`````0P;`````0PG%2H``0`)`!,#Z0`"!7D![``"#"\`#``!
+M`[<````!##854P`"``D`F`/I``H,/`"X`,(+DP2R`2``R0Q,`>P$$@`"#%8"
+M2``!#%P````!`($``@/J``````QD%D0``P`)!6@#Z0`*#&L*P0K3!^X*W0<C
+M#'0,50DG!<L`$`Q[%9(``0R#%9(``0R+%80``0R3%8```0R;$/0``0RB$/``
+M`0RI$)0``0RR$)```0R[#I@``0S##I0``0?W#C```0S+#BP``0S6#38``0SA
+M#38``0SL#,8``0SS#,8``0"!`$@#Z@````,'W0`8``$,^@`4``$'YP`,``$`
+M@03V`^L`````#00<K``"``D!G`/I``L$%@=S`/(![`"B`,(!(`4&"G8`N`#)
+M``8*Y@7L``$-#P7,``$,/056``$-'05(``$-+0+8``$-.P+0``$`@0`(`^H`
+M````#4D>O``!``D`)P/I``0`P@$@`,D![``"#5(`"``!#5H````!#6(?!``!
+M``D`#@/I````!`UJ`"H``0UR`!P``0UZ``P``0V!`````0V('QH``0`)`!`#
+MZ0````(-CP`,``$-E0````$-FQ\R``(`"0!U`^D`!@#"`2``R0M[`J8(3@`$
+M`K$!+@`!#:4!)@`!`KL`&``!#:\````!`($`0`/K`````0+&`````0VZ']P`
+M`0`)``4#Z0````(-P@`(``$-R0````$-T!_I``$`"0`,`^D``@.V`>P``@W<
+M``@``0WG`````0WR(`H``0`)``T#Z0`#`[8![`N3``(-^P`(``$.`P````$.
+M"R`T``$`"0`0`^D``0#"``0.%``L``$.&P`@``$.(@`,``$.*@````$.,B!4
+M``$`"0`-`^D``@.V`>P``@X[``0``0Y#`````0Y+('8``0`)``\#Z0`%`,(%
+M!@47"G8"AP`"#E8`!``!#F`````!#FH@L``!``D`*`/I``0!(`#"`+@`R0`"
+M#G(`!``!#GD````!#H`@^0`#``D!EP/I``(,B@?N``(.BP`2``$.E0````$`
+M@0!Y`^H``````($`"0/K``````Z?(WP``0`)`!8#Z0`%`,(!(`TL`>P`R0`"
+M#JH`"``!#K0````!#KXCN@`!``D`U0/I``H`P@$@`*(`J`L,!!(%@P.V`,D`
+M\@`$#L4#.``!#LL#'``!#M$`(@`!#M@````!#M\DW0`!``D``@/I````!`[E
+M``0``0[N``0``0[W`````0[_`````0\').<``0`)``X#Z0`'!@<%!@47"T,&
+M)PM-`>P``@\/``0``0\6`````0\=)2X``0`)``\#Z0`"#%4![``$#R4`,@`!
+M#RP`*@`!#S,`"``!#SP````!#T4E4@`!``D`(P/I``,`P@5Y`>P`!`31`((`
+M`0]-`'8``0]4``P``0]=`````0]F)9```0`)``P#Z0`!"`$``@>>``0``0]M
+M`````0]S):P``0`)`!T#Z0`#`/(`R0'L``(*P@`$``$/?`````$/AB7C``$`
+M"0`3`^D``P"X`>P`R0`"#XT`"``!#Y,````!#YDF$``"``D`)`/I``0#F@!5
+M!!(![``"#Z(`!``!`&D````!`($``@/J``````^J)F```0`)``8#Z0`"#[$!
+M[``"#[H`!``!#\$````!#\@F>P`!``D`#P/I``0`N`#)"Y,![``"#]``"``!
+M#]<````!#]XFK``!``D`'`/I``(%>0'L``0/Y@!<``$/[0!.``$/]``.``$/
+M_0````$0!B;>``$`"0`<`^D``P#"!7D![``$#'4`9``!$`T`6``!$!,`#``!
+M$!L````!$",G%0`!``D`@0/I``L&!P4&!1<+0PIV!EL&)PM-`,(%>0'L``(0
+M+``8``$0-`````$0/"?K``$`"0`@`^D``P#"!7D![``!$$0````!$$LH)@`"
+M``D```/I``````"!`-X#Z@````($QP-R``$$N@+6``$05RD[``(`"0!%`^D`
+M`@#)!+(`!`"Y`/X``1!?`/X``0$A``0``1!H`````0"!``$#ZP````$`P@``
+M``$0=RF<``$`"0`%`^D`!!!^`?8,#@'L``(0A0````$0C`````$0DRG!``$`
+M"0!9`^D`!@FD`DL!XP'L`,(+!``"$'\`[@`!$)H`Y@`!$*`J2@`#``D`0P/I
+M``@0JP06$+<`50:W!!()+P"B``@)L`"R``$0Q`"R``$)U`!(``$0V`!(``$)
+MI0`B``$0Z0`>``$%)P`$``$0]`````$`@0`&`^H``````($`#P/K````!@%@
+M`#@``0G$`#0``0%4`!0``0$P``@``0'C``0``0%)`````1$!*N,``0`)`"\#
+MZ0`!$*L`!`7K`)0``1$+`)```07Z`!P``1$:`````1$H*R,``0`)`!0#Z0`$
+6`+@+DP#)`>P``A$P``@``1$W`````1P`
+`
+end
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/unlink.c amiga/fsf/emacs18/amiga/unix/src/unlink.c
--- baseline/fsf/emacs18/amiga/unix/src/unlink.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/unlink.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,40 @@
+#include "amiga.h"
+#include "files.h"
+#include <amiga/ioctl.h>
+
+static int delete_open_file(char *name)
+{
+ BPTR nlock = Lock(name, SHARED_LOCK);
+
+ if (nlock)
+ {
+ int err = errno, i;
+
+ i = _last_fd();
+ while (--i >= 0)
+ if (ioctl(i, _AMIGA_DELETE_IF_ME, &nlock) == 0)
+ {
+ errno = err;
+ return 0;
+ }
+ UnLock(nlock);
+ }
+ return -1;
+}
+
+int unlink(const char *file)
+{
+ long err;
+
+ chkabort();
+ if (DeleteFile(file)) return 0;
+ err = IoErr();
+ if (err == ERROR_DELETE_PROTECTED)
+ {
+ if (SetProtection(file, 0) && DeleteFile(file)) return 0;
+ err = IoErr();
+ }
+ if (err == ERROR_OBJECT_IN_USE && delete_open_file(file) == 0) return 0;
+ errno = convert_oserr(err);
+ return -1;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/utime.c amiga/fsf/emacs18/amiga/unix/src/utime.c
--- baseline/fsf/emacs18/amiga/unix/src/utime.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/utime.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,22 @@
+#include "amiga.h"
+#include "timeconvert.h"
+#include <stdlib.h>
+#include <time.h>
+#include <utime.h>
+
+int utime(char *file, struct utimbuf *times)
+{
+ struct DateStamp date;
+ time_t mtime;
+
+ chkabort();
+ if (times) mtime = times->modtime;
+ else mtime = time(0);
+
+ if (mtime == -1) return 0;
+
+ _gmt2amiga(mtime, &date);
+
+ if (SetFileDate(file, &date)) return 0;
+ ERROR;
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/wait4.c amiga/fsf/emacs18/amiga/unix/src/wait4.c
--- baseline/fsf/emacs18/amiga/unix/src/wait4.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/wait4.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,57 @@
+#include "amiga.h"
+#include "signals.h"
+#include "processes.h"
+#include <sys/wait.h>
+
+int wait4(int pid, int *statusp, int options, struct rusage *rusage)
+{
+ struct process *p;
+
+ do {
+ int seen = FALSE;
+
+ scan_processes(p)
+ if (pid == 0 || p->pid == pid)
+ {
+ seen = TRUE;
+
+ if (p->status == exited)
+ {
+ int pid = p->pid;
+
+ if (statusp) *statusp = p->rc;
+ _free_entry(p);
+
+ return pid;
+ }
+ }
+ if (options & WNOHANG) return 0;
+ if (!seen)
+ {
+ errno = ECHILD;
+ return -1;
+ }
+ _handle_signals(_wait_signals(0));
+ } while (1);
+}
+
+int wait3(int *statusp, int options, struct rusage *rusage)
+{
+ return wait4(0, statusp, options, rusage);
+}
+
+int wait(int *statusp)
+{
+ return wait4(0, statusp, 0, NULL);
+}
+
+int waitpid(int pid, int *statusp, int options)
+{
+ /* We have no process groups, so :
+ Our process group encompasses all our children
+ Each child is a process group unto itself
+ This is somewhat contradictory ... Should this be changed ? */
+ if (pid == -1) pid = 0;
+ if (pid < 0) pid = -pid;
+ return wait4(pid, statusp, options, NULL);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/write.c amiga/fsf/emacs18/amiga/unix/src/write.c
--- baseline/fsf/emacs18/amiga/unix/src/write.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/write.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,29 @@
+#include "amiga.h"
+#include "files.h"
+#include <fcntl.h>
+#include <unistd.h>
+
+#undef write
+
+int __write(int fd, const void *buffer, unsigned int length)
+{
+ struct fileinfo *fi;
+
+ chkabort();
+ if (fi = _find_fd(fd))
+ {
+ if (fi->flags & FI_WRITE)
+ {
+ if (fi->flags & O_APPEND) fi->lseek(fi->userinfo, 0, SEEK_END);
+ return fi->write(fi->userinfo, buffer, length);
+ }
+ errno = EACCES;
+ }
+ return -1;
+}
+
+int write(int fd, const void *buffer, unsigned int length)
+{
+ return __write(fd, buffer, length);
+}
+
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/africa amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/africa
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/africa Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/africa Sat Sep 28 00:00:00 1996
@@ -0,0 +1,43 @@
+# @(#)africa 4.3
+
+###############################################################################
+
+# Egypt
+
+# From Bob Devine (January 28, 1988):
+# Egypt: DST from first day of May to first of October (ending may
+# also be on Sept 30th not 31st -- you might want to ask one of the
+# soc.* groups, you might hit someone who could ask an embassy).
+# DST since 1960 except for 1981-82.
+
+# From U. S. Naval Observatory (January 19, 1989):
+# EGYPT 2 H AHEAD OF UTC
+# EGYPT 3 H AHEAD OF UTC MAY 17 - SEP 30 (AFTER
+# EGYPT RAMADAN)
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Egypt 1960 max - May 1 2:00 1:00 " DST"
+Rule Egypt 1960 max - Oct 1 2:00 0 -
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Egypt 2:00 Egypt EET%s 1981
+ 2:00 - EET 1983
+ 2:00 Egypt EET%s
+
+###############################################################################
+
+# Libya
+
+# From Bob Devine (January 28 1988):
+# Libya: Since 1982 April 1st to September 30th (?)
+
+# From U. S. Naval Observatory (January 19, 1989):
+# LIBYAN ARAB 1 H AHEAD OF UTC JAMAHIRIYA/LIBYA
+# LIBYAN ARAB 2 H AHEAD OF UTC APR 1 - SEP 30 JAMAHIRIYA/LIBYA
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Libya 1982 max - Apr 1 2:00 1:00 " DST"
+Rule Libya 1982 max - Sep 30 2:00 0 -
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Libya 2:00 Libya EET%s
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/antarctica amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/antarctica
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/antarctica Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/antarctica Sat Sep 28 00:00:00 1996
@@ -0,0 +1,4 @@
+# @(#)antarctica 4.1
+
+# From Arthur David Olson (February 13, 1988):
+# No data available.
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/asia amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/asia
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/asia Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/asia Sat Sep 28 00:00:00 1996
@@ -0,0 +1,262 @@
+# @(#)asia 7.1
+
+# From Guy Harris:
+# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
+# additional information from Tom Yap, Sun Microsystems Intercontinental
+# Technical Support (including a page from the Official Airline Guide -
+# Worldwide Edition). The names for time zones are guesses.
+
+###############################################################################
+
+# People's Republic of China
+
+# From Guy Harris:
+# People's Republic of China. Yes, they really have only one time zone.
+
+# From Bob Devine (January 28, 1988):
+# No they don't. See TIME mag, February 17, 1986 p.52. Even though
+# China is across 4 physical time zones, before Feb 1, 1986 only the
+# Peking (Bejing) time zone was recognized. Since that date, China
+# has two of 'em -- Peking's and Urumqi (named after the capital of
+# the Xinjiang Uighur Autonomous Region). I don't know about DST for it.
+#
+# . . .I just deleted the DST table and this editor makes it too
+# painful to suck in another copy.. So, here is what I have for
+# DST start/end dates for Peking's time zone (info from AP):
+#
+# 1986 May 4 - Sept 14
+# 1987 mid-April - ??
+
+# From U. S. Naval Observatory (January 19, 1989):
+# CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN
+# CHINA 9 H AHEAD OF UTC APR 17 - SEP 10
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule PRC 1970 max - Apr Sun<=14 2:00 1:00 D
+Rule PRC 1970 max - Sep Sun<=14 3:00 0 S
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone PRC 8:00 PRC C%sT
+
+###############################################################################
+
+# Republic of China
+
+# From Guy Harris
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone ROC 8:00 - CST
+
+###############################################################################
+
+# Hongkong
+
+# From Guy Harris
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Hongkong 8:00 - HKT
+
+###############################################################################
+
+# Iran
+
+# From Bob Devine (January 28, 1988):
+# Iran: Last Sunday in March to third (?) Sunday in
+# September. Since the revolution, the official calendar is Monarchic
+# calendar; I have no idea what the correspondence between dates are.
+
+# From U. S. Naval Observatory (January 19, 1989):
+# IRAN 3.5H AHEAD OF UTC
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Iran 1988 max - Mar lastSun 2:00 1:00 D
+Rule Iran 1988 max - Sep Sun>=15 2:00 0 S
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Iran 3:30 Iran I%sT
+
+###############################################################################
+
+# Israel
+
+# From U. S. Naval Observatory (January 19, 1989):
+# ISRAEL 2 H AHEAD OF UTC
+# ISRAEL 3 H AHEAD OF UTC APR 10 - SEP 3
+
+# From Ephraim Silverberg (April 18, 1989):
+
+# Prior to 1989, the rules concerning Daylight Savings Time changed every
+# year; as information, regarding exact times and dates during this period,
+# is not readily available at the present time, the rules commence starting
+# with the year 1989.
+
+# From 1989 onwards the rules are as follows:
+#
+# 1. Daylight Savings Time commences midnight of the first Saturday night
+# following the seven-day festival of Pesach (Passover). The transition
+# is from midnight Israel Standard Time to 1 a.m. Israel Daylight Savings
+# time. As the Pesach festival is dependent on the Lunar calendar (the
+# first day is always on the 15th day of the month of Nisan), the rule
+# changes every year on the Gregorian calendar.
+#
+# 2. Standard Time is reinstated on the Saturday night whereupon Jews
+# following the Ashkenazi (European) rite begin to recite the Selichot
+# (forgiveness) prayers prior to the Jewish Lunar New Year. The transition
+# is from midnight Israel Daylight Savings time to 11 p.m. Israel Standard
+# Time. The law (according to the Ashkenazi custom) concerning the
+# commencement of the Selichot prayers is described in chapter 128, section
+# 5 of the "Code of Jewish Law," by Rabbi Shlomo Ganzfried (translated by
+# Hyman E. Goldin):
+#
+# Beginning with the Sunday [**] before Rosh Hashanah [***],
+# we rise early for the service of Selichot (supplications for
+# forgiveness). If Rosh Hashanah occurs on Monday or Tuesday, we
+# begin saying the Selichot from the Sunday of the preceding week.
+#
+# This, too, varies from year to year on the Gregorian calendar and, thus,
+# two explicit timezone rules are required for each Gregorian year.
+#
+# [**] actually Saturday night as the Jewish day commences at nightfall.
+# [***] the Jewish Lunar New Year.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Zion 1989 only - Apr 30 0:00 1:00 D
+Rule Zion 1989 only - Sep 24 0:00 0:00 S
+Rule Zion 1990 only - Apr 22 0:00 1:00 D
+Rule Zion 1990 only - Sep 16 0:00 0:00 S
+Rule Zion 1991 only - Apr 7 0:00 1:00 D
+Rule Zion 1991 only - Sep 1 0:00 0:00 S
+Rule Zion 1992 only - Apr 26 0:00 1:00 D
+Rule Zion 1992 only - Sep 20 0:00 0:00 S
+Rule Zion 1993 only - Apr 18 0:00 1:00 D
+Rule Zion 1993 only - Sep 12 0:00 0:00 S
+Rule Zion 1994 only - Apr 3 0:00 1:00 D
+Rule Zion 1994 only - Aug 28 0:00 0:00 S
+Rule Zion 1995 only - Apr 23 0:00 1:00 D
+Rule Zion 1995 only - Sep 17 0:00 0:00 S
+Rule Zion 1996 only - Apr 14 0:00 1:00 D
+Rule Zion 1996 only - Sep 8 0:00 0:00 S
+Rule Zion 1997 only - May 4 0:00 1:00 D
+Rule Zion 1997 only - Sep 28 0:00 0:00 S
+Rule Zion 1998 only - Apr 19 0:00 1:00 D
+Rule Zion 1998 only - Sep 13 0:00 0:00 S
+Rule Zion 1999 only - Apr 11 0:00 1:00 D
+Rule Zion 1999 only - Sep 5 0:00 0:00 S
+Rule Zion 2000 only - Apr 30 0:00 1:00 D
+Rule Zion 2000 only - Sep 24 0:00 0:00 S
+Rule Zion 2001 only - Apr 15 0:00 1:00 D
+Rule Zion 2001 only - Sep 9 0:00 0:00 S
+Rule Zion 2002 only - Apr 7 0:00 1:00 D
+Rule Zion 2002 only - Sep 1 0:00 0:00 S
+Rule Zion 2003 only - Apr 27 0:00 1:00 D
+Rule Zion 2003 only - Sep 21 0:00 0:00 S
+Rule Zion 2004 only - Apr 18 0:00 1:00 D
+Rule Zion 2004 only - Sep 12 0:00 0:00 S
+Rule Zion 2005 only - May 1 0:00 1:00 D
+Rule Zion 2005 only - Sep 25 0:00 0:00 S
+Rule Zion 2006 only - Apr 23 0:00 1:00 D
+Rule Zion 2006 only - Sep 17 0:00 0:00 S
+Rule Zion 2007 only - Apr 15 0:00 1:00 D
+Rule Zion 2007 only - Sep 9 0:00 0:00 S
+Rule Zion 2008 only - Apr 27 0:00 1:00 D
+Rule Zion 2008 only - Sep 21 0:00 0:00 S
+Rule Zion 2009 only - Apr 19 0:00 1:00 D
+Rule Zion 2009 only - Sep 13 0:00 0:00 S
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Israel 2:00 Zion I%sT
+
+# The following is a chart of the day of the week and Gregorian date of
+# the first day of Pesach and the first day of Rosh Hashanah for the years
+# 1989 through 2009 inclusive.
+#
+# First Day of Passover
+# ---------------------
+# Gregorian Year Day of Week Month Day
+# -------------- ----------- ----- ---
+# 1989 Thursday April 20
+# 1990 Tuesday April 10
+# 1991 Saturday March 30
+# 1992 Saturday April 18
+# 1993 Tuesday April 6
+# 1994 Sunday March 27
+# 1995 Saturday April 15
+# 1996 Thursday April 4
+# 1997 Tuesday April 22
+# 1998 Saturday April 11
+# 1999 Thursday April 1
+# 2000 Thursday April 20
+# 2001 Sunday April 8
+# 2002 Thursday March 28
+# 2003 Thursday April 17
+# 2004 Tuesday April 6
+# 2005 Sunday April 24
+# 2006 Thursday April 13
+# 2007 Tuesday April 3
+# 2008 Sunday April 20
+# 2009 Thursday April 9
+#
+# First Day of Rosh Hashanah
+# --------------------------
+# Gregorian Year Day of Week Month Day
+# -------------- ----------- ----- ---
+# 1989 Saturday September 30
+# 1990 Thursday September 20
+# 1991 Monday September 9
+# 1992 Monday September 28
+# 1993 Thursday September 16
+# 1994 Tuesday September 6
+# 1995 Monday September 25
+# 1996 Saturday September 14
+# 1997 Thursday October 2
+# 1998 Monday September 21
+# 1999 Saturday September 11
+# 2000 Saturday September 30
+# 2001 Tuesday September 18
+# 2002 Saturday September 7
+# 2003 Saturday September 27
+# 2004 Thursday September 16
+# 2005 Tuesday October 4
+# 2006 Saturday September 23
+# 2007 Thursday September 13
+# 2008 Tuesday September 30
+# 2009 Saturday September 19
+
+###############################################################################
+
+# Japan
+
+# From Guy Harris
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Japan 9:00 - JST
+
+###############################################################################
+
+# Republic of Korea
+
+# From Guy Harris:
+# According to someone at the Korean Times in San Francisco,
+# Daylight Savings Time was not observed until 1987. He did not know
+# at what time of day DST starts or ends.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule ROK 1987 max - May Sun<=14 2:00 1:00 D
+Rule ROK 1987 max - Oct Sun<=14 3:00 0 S
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone ROK 9:00 ROK K%sT
+
+###############################################################################
+
+# Lebanon
+
+# From Bob Devine (January 28, 1988):
+# Lebanon: They do have DST but I don't know the dates.
+
+###############################################################################
+
+# Singapore
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Singapore 8:00 - SST
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/australasia amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/australasia
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/australasia Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/australasia Sat Sep 28 00:00:00 1996
@@ -0,0 +1,113 @@
+# @(#)australasia 4.4
+
+# Incorporates updates for Australia from Robert Elz' australia 1.1
+# and further updates from the Australian consulate.
+
+###############################################################################
+
+# Australia
+
+# Australian Data (for states with DST), standard rules
+# Includes shift in 1987 to follow Vic/NSW rules for ending DST,
+# and shift in 1986 to start DST earlier.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Oz 1971 1985 - Oct lastSun 2:00 1:00 -
+Rule Oz 1986 max - Oct Sun<=24 2:00 1:00 -
+Rule Oz 1972 only - Feb 27 3:00 0 -
+Rule Oz 1973 1986 - Mar Sun>=1 3:00 0 -
+Rule Oz 1987 max - Mar Sun<=21 3:00 0 -
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Australia/Tasmania 10:00 Oz EST
+Zone Australia/Queensland 10:00 - EST # No DST here
+Zone Australia/North 9:30 - CST # No DST here
+Zone Australia/West 8:00 - WST # No DST here
+Zone Australia/South 9:30 Oz CST
+
+# Victoria jumped to a later ending date for DST in 1986 rather than 1987.
+
+Zone Australia/Victoria 10:00 Oz EST 1985 Oct lastSun 2:00
+ 10:00 1:00 EST 1986 Mar Sun<=21 3:00
+ 10:00 Oz EST
+
+# New South Wales and subjurisdictions have their own ideas of a fun time.
+# Based on law library research by John Mackin (john@basser.cs.su.oz),
+# who notes:
+# In Australia, time is not legislated federally, but rather by the
+# individual states. Thus, while such terms as ``Eastern Standard Time''
+# [I mean, of course, Australian EST, not any other kind] are in common
+# use, _they have NO REAL MEANING_, as they are not defined in the
+# legislation. This is very important to understand.
+# I have researched New South Wales time only; . . .I hope that perhaps a
+# resident of each state could be found to do it for their own state.
+# (And I can guarantee that Victoria and NSW are different, so the link
+# between them in the current australasia file must be broken.)
+
+# From Robert Elz (May 5, 1989):
+#
+# From next year (1990) NSW will revert to ending DST on the 1st
+# Sunday in March (rather than the third, which it appears will
+# continue to be what everyone else uses).
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule NSW 1971 1985 - Oct lastSun 2:00 1:00 -
+Rule NSW 1972 only - Feb lastSun 3:00 0 -
+Rule NSW 1973 1981 - Mar Sun>=1 3:00 0 -
+Rule NSW 1982 only - Apr 4 3:00 0 -
+Rule NSW 1983 1985 - Mar Sun>=1 3:00 0 -
+Rule NSW 1986 only - Mar 16 3:00 0 -
+Rule NSW 1986 only - Oct 19 2:00 1:00 -
+Rule NSW 1987 only - Mar 15 3:00 0 -
+Rule NSW 1987 max - Oct lastSun 2:00 1:00 -
+Rule NSW 1988 1989 - Mar Sun<=21 3:00 0 -
+Rule NSW 1990 max - Mar Sun>=1 3:00 0 -
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Australia/NSW 10:00 NSW EST
+# `Broken Hill' means the County of Yancowinna. [john@basser.cs.su.oz.au,1/4/89]
+Zone Australia/Yancowinna 9:30 NSW ???
+Zone Australia/LHI 10:30 NSW ???
+
+# A footnote here:
+#
+# . . .
+# Date: Thu, j19 Feb 87 12:02:17 EST
+# From: Bradley White <seismo!k.cs.cmu.edu!bww>
+# . . .
+# I am including a description of Australian time zones. . .
+# this stuff is definitely accurate.
+# . . .
+# a) Australian Eastern Time: (EST = GMT+10:00, EDT = GMT+11:00)
+# . . .
+# Summer of 86/87 - present (current legislation):
+# third Sun Oct 02:00 EST -> third [S]un Mar 02:00 EST
+#
+# If this turns out to be true, substitute Sun<=21 (third Sunday in October)
+# for Sun<=24 (next-to-last Sunday in October) above. . .some time before
+# October 1988, the first time it makes a difference.
+
+###############################################################################
+
+# New Zealand
+
+# New Zealand, from Elz' asia 1.1
+# Elz says "no guarantees"
+# The 1989/90 rule may only last a year. It is a trial that is
+# subject to Ministerial approval to be made permanent.
+# The termination of "daylight saving" may actually be second
+# to last Sunday in March. Noone spoken to was very sure.
+
+# From U. S. Naval Observatory (January 19, 1989):
+# NEW ZEALAND 12 H AHEAD OF UTC (EXCLUDING CHATHAM ISLAND)
+# NEW ZEALAND 13 H AHEAD OF UTC OCT 30, '88-MAR 4, '89
+# NEW ZEALAND 12H45M AHEAD OF UTC CHATHAM ISLAND
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule NZ 1974 1988 - Oct lastSun 2:00 1:00 D
+Rule NZ 1989 max - Oct Sun>=8 2:00 1:00 D
+Rule NZ 1975 1989 - Mar Sun>=1 3:00 0 S
+Rule NZ 1990 max - Mar Sun>=15 3:00 0 S
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone NZ 12:00 NZ NZ%sT # New Zealand
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/etcetera amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/etcetera
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/etcetera Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/etcetera Sat Sep 28 00:00:00 1996
@@ -0,0 +1,55 @@
+# @(#)etcetera 4.4
+
+# All of these are set up just so people can "zic -l" to a timezone
+# that's right for their area, even if it doesn't have a name or dst rules
+# (half hour zones are too much to bother with -- when someone asks!)
+
+Zone GMT 0 - GMT
+
+Zone GMT-12 -12 - GMT-1200
+Zone GMT-11 -11 - GMT-1100
+Zone GMT-10 -10 - GMT-1000
+Zone GMT-9 -9 - GMT-0900
+Zone GMT-8 -8 - GMT-0800
+Zone GMT-7 -7 - GMT-0700
+Zone GMT-6 -6 - GMT-0600
+Zone GMT-5 -5 - GMT-0500
+Zone GMT-4 -4 - GMT-0400
+Zone GMT-3 -3 - GMT-0300
+Zone GMT-2 -2 - GMT-0200
+Zone GMT-1 -1 - GMT-0100
+Zone GMT+1 1 - GMT+0100
+Zone GMT+2 2 - GMT+0200
+Zone GMT+3 3 - GMT+0300
+Zone GMT+4 4 - GMT+0400
+Zone GMT+5 5 - GMT+0500
+Zone GMT+6 6 - GMT+0600
+Zone GMT+7 7 - GMT+0700
+Zone GMT+8 8 - GMT+0800
+Zone GMT+9 9 - GMT+0900
+Zone GMT+10 10 - GMT+1000
+Zone GMT+11 11 - GMT+1100
+Zone GMT+12 12 - GMT+1200
+Zone GMT+13 13 - GMT+1300 # GMT+12 with DST
+
+Link GMT UTC
+Link GMT UCT
+Link GMT Universal
+Link GMT Greenwich
+Link GMT Zulu
+Link GMT GMT-0
+Link GMT GMT+0
+Link GMT GMT0
+Link GMT+1 GMT1
+Link GMT+2 GMT2
+Link GMT+3 GMT3
+Link GMT+4 GMT4
+Link GMT+5 GMT5
+Link GMT+6 GMT6
+Link GMT+7 GMT7
+Link GMT+8 GMT8
+Link GMT+9 GMT9
+Link GMT+10 GMT10
+Link GMT+11 GMT11
+Link GMT+12 GMT12
+Link GMT+13 GMT13
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/europe amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/europe
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/europe Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/europe Sat Sep 28 00:00:00 1996
@@ -0,0 +1,224 @@
+# @(#)europe 4.10
+
+# International country codes are used to identify countries' rules and
+# zones
+#
+# This data is by no means authoritative; if you think you know better, go
+# ahead and edit the file (and please send any changes to
+# ado@ncifcrf.gov for general use in the future).
+
+###############################################################################
+
+# United Kingdom
+
+# From Arthur David Olson (January 19, 1989):
+#
+# The starting and ending dates below (from which the rules are derived)
+# are from Whitaker's Almanack for 1987, page 146.
+# 1960 is the earliest year for which dates are given;
+# Whitaker's notes that British Summer Time (and, in some years, Double Summer
+# Time) was observed in earlier years but does not give start and end dates.
+#
+# A source at the British Information Office in New York avers that it's
+# known as "British" Summer Time in all parts of the United Kingdom.
+# 1960 April 10 October 2 (yes, 2, according to the almanac)
+# 1961 March 26 October 29
+# 1962 March 25 October 28
+# 1963 March 31 October 27
+# 1964 March 22 October 25
+# 1965 March 21 October 24
+# 1966 March 20 October 23
+# 1967 March 19 October 29
+# 1968 February 18 October 27
+# "British Standard Time, also one hour ahead of G. M. T., was kept between
+# 1968 Oct. 27-1971 Oct. 31."
+# 1972 March 19 October 29
+# 1973 March 18 October 28
+# 1974 March 17 October 27
+# 1975 March 16 October 26
+# 1976 March 21 October 24
+# 1977 March 20 October 23
+# 1978 March 19 October 29
+# 1979 March 18 October 28
+# 1980 March 16 October 26
+# 1981 March 29 October 25
+# 1982 March 28 October 24
+# 1983 March 27 October 23
+# 1984 March 25 October 28
+# 1985 March 31 October 27
+# 1986 March 30 October 26
+# 1987 March 29 October 25
+
+# From an Anonymous U. K. Donor (January 4, 1989):
+#
+# It is NOT possible to predict when [British Summer Time] will change
+# in a future year.
+#
+# (The admiralty calculate when they think it should be (no more that a couple
+# of years in advance) and advise the government who then decide whether or
+# not they will take the admiralty's advice)
+#
+# ...the Gre[e]nwich...observatory...[was] very helpful.
+#
+# I was not able to track down the Admiralty formula (I tried hard but failed)
+
+# ...
+# Date: 4 Jan 89 08:57:25 GMT (Wed)
+# From: Jonathan Leffler <nih-csl!uunet!mcvax!sphinx.co.uk!john>
+# ...
+# [British Summer Time] is fixed annually by Act of Parliament.
+# If you can predict what Parliament will do, you should be in
+# politics making a fortune, not computing.
+#
+# Summer time ends on Sunday 29 October 1989.
+
+# ...
+# Date: 5 Jan 89 09:50:38 GMT (Thu)
+# From: Peter Kendell <nih-csl!uunet!mcvax!tcom.stc.co.uk!pete>
+# ...
+#
+# From my Collins Diary for 1989 -
+#
+# "At the time of going to press the Home Office was unable to confirm
+# the 1989 starting and finishing dates for BST*, but expressed the
+# view that 26 March and 29 October were the likeliest dates to be
+# adopted"
+#
+# *British Summer Time.
+
+# From an Anonymous U. K. Donor (January 5, 1989):
+#
+# . . .our government is seriously considering applying Double Summer Time -
+# putting the clocks forwards and back TWO hours for daylight saving time.
+# This is advocated to standardise time in the EEC - we're all supposed to
+# keep the same time and to change the clocks on the same dates in the future.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+# Historic starting rules
+Rule GB-Eire 1960 only - Apr 10 1:00s 1:00 BST
+Rule GB-Eire 1961 1963 - Mar lastSun 1:00s 1:00 BST
+Rule GB-Eire 1964 1967 - Mar Sun>=19 1:00s 1:00 BST
+Rule GB-Eire 1968 only - Feb 18 1:00s 1:00 BST
+Rule GB-Eire 1972 1980 - Mar Sun>=16 1:00s 1:00 BST
+# Historic ending rules
+Rule GB-Eire 1960 only - Oct 2 1:00s 0 GMT
+Rule GB-Eire 1961 1967 - Oct Sun>=23 1:00s 0 GMT
+Rule GB-Eire 1971 only - Oct 31 1:00s 0 GMT
+# Current rules
+Rule GB-Eire 1981 max - Mar lastSun 1:00s 1:00 BST
+Rule GB-Eire 1972 max - Oct Sun>=23 1:00s 0 GMT
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone GB-Eire 0:00 GB-Eire %s 1968 Oct 27 1:00s
+ 1:00 - BST 1971 Oct 31 1:00s
+ 0:00 GB-Eire %s
+
+###############################################################################
+
+# Continental Europe
+
+# The use of 1986 as starting years below is conservative.
+
+Rule W-Eur 1986 max - Mar lastSun 1:00s 1:00 " DST"
+Rule W-Eur 1986 max - Sep lastSun 1:00s 0 -
+
+Rule M-Eur 1986 max - Mar lastSun 2:00s 1:00 " DST"
+Rule M-Eur 1986 max - Sep lastSun 2:00s 0 -
+
+Rule E-Eur 1986 max - Mar lastSun 3:00s 1:00 " DST"
+Rule E-Eur 1986 max - Sep lastSun 3:00s 0 -
+
+Rule Turkey 1986 max - Mar lastSun 1:00 1:00 " DST"
+Rule Turkey 1986 max - Sep lastSun 1:00 0 -
+
+Rule W-SU 1986 max - Mar lastSun 2:00s 1:00 " DST"
+Rule W-SU 1986 max - Sep lastSun 2:00s 0 -
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone WET 0:00 W-Eur WET%s
+Zone Iceland 0:00 - WET
+Zone MET 1:00 M-Eur MET%s
+Zone Poland 1:00 W-Eur MET%s
+Zone EET 2:00 E-Eur EET%s
+Zone Turkey 3:00 Turkey EET%s
+Zone W-SU 3:00 M-Eur ????
+
+# Tom Hoffman says that MET is also known as Central European Time
+
+Link MET CET
+
+###############################################################################
+
+# One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from
+# the last Sunday in March to the last Sunday in September in 1986.
+# The source shows Romania changing a day later than everybody else.
+#
+# According to Bernard Sieloff's source, Poland is in the MET time zone but
+# uses the WE DST rules. The Western USSR uses EET+1 and ME DST rules.
+# Bernard Sieloff's source claims Romania switches on the same day, but at
+# 00:00 standard time (i.e., 01:00 DST). It also claims that Turkey
+# switches on the same day, but switches on at 01:00 standard time
+# and off at 00:00 standard time (i.e., 01:00 DST)
+
+# ...
+# Date: Wed, 28 Jan 87 16:56:27 -0100
+# From: seismo!mcvax!cgcha!wtho (Tom Hofmann)
+# Message-Id: <8701281556.AA22174@cgcha.uucp>
+# ...
+#
+# ...the European time rules are...standardized since 1981, when
+# most European coun[tr]ies started DST. Before that year, only
+# a few countries (UK, France, Italy) had DST, each according
+# to own national rules. In 1981, however, DST started on
+# 'Apr firstSun', and not on 'Mar lastSun' as in the following
+# years...
+# But also since 1981 there are some more national exceptions
+# than listed in 'europe': Switzerland, for example, joined DST
+# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep
+# lastSun' in 1981---I don't know how they handle now.
+#
+# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
+# Soviet Union (as far as I know).
+#
+# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG,
+# 4002 Basle, Switzerland
+# UUCP: ...!mcvax!cernvax!cgcha!wtho
+
+# ...
+# Date: Wed, 4 Feb 87 22:35:22 +0100
+# From: seismo!mcvax!cwi.nl!dik (Dik T. Winter)
+# ...
+#
+# The information from Tom Hofmann is (as far as I know) not entirely correct.
+# After a request from chongo at amdahl I tried to retrieve all information
+# about DST in Europe. I was able to find all from about 1969.
+#
+# ...standardization on DST in Europe started in about 1977 with switches on
+# first Sunday in April and last Sunday in September...
+# In 1981 UK joined Europe insofar that
+# the starting day for both shifted to last Sunday in March. And from 1982
+# the whole of Europe used DST, with switch dates April 1 and October 1 in
+# the Sov[i]et Union. In 1985 the SU reverted to standard Europe[a]n switch
+# dates...
+#
+# It should also be remembered that time-zones are not constants; e.g.
+# Portugal switched in 1976 from MET (or CET) to WET with DST...
+# Note also that though there were rules for switch dates not
+# all countries abided to these dates, and many individual deviations
+# occurred, though not since 1982 I believe. Another note: it is always
+# assumed that DST is 1 hour ahead of normal time, this need not be the
+# case; at least in the Netherlands there have been times when DST was 2 hours
+# in advance of normal time.
+#
+# ...
+# dik t. winter, cwi, amsterdam, nederland
+# INTERNET : dik@cwi.nl
+# BITNET/EARN: dik@mcvax
+
+# From Bob Devine (January 28, 1988):
+# ...
+# Greece: Last Sunday in April to last Sunday in September (iffy on dates).
+# Since 1978. Change at midnight.
+# ...
+# Monaco: has same DST as France.
+# ...
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/factory amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/factory
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/factory Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/factory Sat Sep 28 00:00:00 1996
@@ -0,0 +1,8 @@
+# @(#)factory 1.1
+
+# For companies who don't want to put time zone specification in
+# their installation procedures. When users run date, they'll get the message.
+# Also useful for the "comp.sources" version.
+
+# Zone NAME GMTOFF RULES FORMAT
+Zone Factory 0 - "Local time zone must be set--see zic manual page"
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/leapseconds amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/leapseconds
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/leapseconds Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/leapseconds Sat Sep 28 00:00:00 1996
@@ -0,0 +1,28 @@
+# @(#)leapseconds 4.1
+
+# Allowance for leapseconds added to each timezone file.
+
+# The correction (+ or -) is made at the given time, so lines
+# will typically look like:
+# Leap YEAR MON DAY 23:59:60 + R/S
+# or
+# Leap YEAR MON DAY 23:59:59 - R/S
+
+# If the leapsecond is Rolling (R) the given time is local time
+# If the leapsecond is Stationary (S) the given time is GMT
+
+# Leap YEAR MONTH DAY HH:MM:SS CORR R/S
+Leap 1972 Jun 30 23:59:60 + S
+Leap 1972 Dec 31 23:59:60 + S
+Leap 1973 Dec 31 23:59:60 + S
+Leap 1974 Dec 31 23:59:60 + S
+Leap 1975 Dec 31 23:59:60 + S
+Leap 1976 Dec 31 23:59:60 + S
+Leap 1977 Dec 31 23:59:60 + S
+Leap 1978 Dec 31 23:59:60 + S
+Leap 1979 Dec 31 23:59:60 + S
+Leap 1981 Jun 30 23:59:60 + S
+Leap 1982 Jun 30 23:59:60 + S
+Leap 1983 Jun 30 23:59:60 + S
+Leap 1985 Jun 30 23:59:60 + S
+Leap 1987 Dec 31 23:59:60 + S
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/northamerica amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/northamerica
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/northamerica Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/northamerica Sat Sep 28 00:00:00 1996
@@ -0,0 +1,321 @@
+# @(#)northamerica 4.8
+
+###############################################################################
+
+# United States
+
+# From Arthur David Olson:
+# US Daylight Saving Time ended on the last Sunday of *October* in 1974.
+# See, for example, the front page of the Saturday, October 26, 1974
+# and Sunday, October 27, 1974 editions of the Washington Post.
+
+# From seismo!munnari!kre:
+# I recall also being told by someone once that Canada didn't have
+# the DST variations in 74/75 that the US did, but I am not nearly
+# sure enough of this to add anything.
+
+# From Arthur David Olson:
+# The above has been confirmed by Bob Devine; we'll go with it here.
+
+# From Arthur David Olson:
+# Before the Uniform Time Act of 1966 took effect in 1967, observance of
+# Daylight Saving Time in the US was by local option, except during wartime.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule US 1918 1919 - Mar lastSun 2:00 1:00 D
+Rule US 1918 1919 - Oct lastSun 2:00 0 S
+Rule US 1942 only - Feb 9 2:00 1:00 W # War
+Rule US 1945 only - Sep 30 2:00 0 S
+Rule US 1967 max - Oct lastSun 2:00 0 S
+Rule US 1967 1973 - Apr lastSun 2:00 1:00 D
+Rule US 1974 only - Jan 6 2:00 1:00 D
+Rule US 1975 only - Feb 23 2:00 1:00 D
+Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
+Rule US 1987 max - Apr Sun>=1 2:00 1:00 D
+
+# From Bob Devine (January 28, 1988):
+# ...Alaska (and Hawaii) had the timezone names changed in 1967.
+# old new
+# Pacific Standard Time(PST) -same-
+# Yukon Standard Time(YST) -same-
+# Central Alaska S.T. (CAT) Alaska-Hawaii St[an]dard Time (AHST)
+# Nome Standard Time (NT) Bering Standard Time (BST)
+#
+# ...Alaska's timezone lines were redrawn in 1983 to give only 2 tz.
+# The YST zone now covers nearly all of the state, AHST just part
+# of the Aleutian islands. No DST.
+
+# From U. S. Naval Observatory (January 19, 1989):
+# USA EASTERN 5 H BEHIND UTC NEW YORK, WASHINGTON
+# USA EASTERN 4 H BEHIND UTC APR 3 - OCT 30
+# USA CENTRAL 6 H BEHIND UTC CHICAGO, HOUSTON
+# USA CENTRAL 5 H BEHIND UTC APR 3 - OCT 30
+# USA MOUNTAIN 7 H BEHIND UTC DENVER
+# USA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 30
+# USA PACIFIC 8 H BEHIND UTC L.A., SAN FRANCISCO
+# USA PACIFIC 7 H BEHIND UTC APR 3 - OCT 30
+# USA ALASKA STD 9 H BEHIND UTC MOST OF ALASKA (AKST)
+# USA ALASKA STD 8 H BEHIND UTC APR 3 - OCT 30 (AKDT)
+# USA ALEUTIAN 10 H BEHIND UTC ISLANDS WEST OF 170W
+# USA - " - 9 H BEHIND UTC APR 3 - OCT 30
+# USA HAWAII 10 H BEHIND UTC
+# USA BERING 11 H BEHIND UTC SAMOA, MIDWAY
+
+# From Arthur David Olson (January 21, 1989):
+# The above dates are for 1988.
+# Note the "AKST" and "AKDT" abbreviations, the claim that there's
+# no DST in Samoa, and the claim that there is DST in Alaska and the
+# Aleutians.
+
+# From Arthur David Olson (February 13, 1988):
+# Legal standard time zone names, from United States Code (1982 Edition and
+# Supplement III), Title 15, Chapter 6, Section 260 and forward. First, names
+# up to April 1, 1967 (when most provisions of the Uniform Time Act of 1966
+# took effect), as explained in sections 263 and 261:
+# (none)
+# United States standard eastern time
+# United States standard mountain time
+# United States standard central time
+# United States standard Pacific time
+# (none)
+# United States standard Alaska time
+# (none)
+# Next, names from April 1, 1967 until November 30, 1983 (the date for
+# public law 98-181):
+# Atlantic standard time
+# eastern standard time
+# central standard time
+# mountain standard time
+# Pacific standard time
+# Yukon standard time
+# Alaska-Hawaii standard time
+# Bering standard time
+# And after November 30, 1983:
+# Atlantic standard time
+# eastern standard time
+# central standard time
+# mountain standard time
+# Pacific standard time
+# Alaska standard time
+# Hawaii-Aleutian standard time
+# Samoa standard time
+# The law doesn't give abbreviations.
+
+# Easy stuff first--including Alaska, where we ignore history (since we
+# can't tell if we should give Yukon time or Alaska-Hawaii time for "old"
+# times).
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone US/Eastern -5:00 US E%sT
+Zone US/Central -6:00 US C%sT
+Zone US/Mountain -7:00 US M%sT
+Zone US/Pacific -8:00 US P%sT
+Zone US/Alaska -9:00 US AK%sT # Abbreviation per USNO
+
+# Mainland US areas that are always Standard as of 1986.
+
+Zone US/East-Indiana -5:00 US E%sT 1946
+ -5:00 - EST # Always EST as of 1986
+Zone US/Arizona -7:00 US M%sT 1946
+ -7:00 - MST # Always MST as of 1986
+
+# From Arthur David Olson (February 13, 1988):
+# However. . .a writer from the Inter Tribal Council of Arizona, Inc.,
+# notes in private correspondence dated 12/28/87 that "Presently, only the
+# Navajo Nation participates in the Daylight Saving Time policy, due to its
+# large size and location in three states." (The "only" means that other
+# tribal nations don't use DST.)
+
+Link US/Mountain Navajo
+
+# From Bob Devine (January 28, 1988):
+# Michigan didn't observe DST from 1968 to 1973.
+
+Zone US/Michigan -5:00 US E%sT 1968
+ -5:00 - EST 1973
+ -5:00 US E%sT
+
+# Samoa just changes names. No DST, per Naval Observatory.
+
+Zone US/Samoa -11:00 - NST 1967 Apr 1 # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
+
+# Aleutian has a name change. DST, per Naval Observatory.
+
+Zone US/Aleutian -10:00 US AH%sT 1983 Nov 30
+ -10:00 US HA%sT
+
+# From Arthur David Olson:
+# And then there's Hawaii.
+# DST was observed for one day in 1933;
+# Standard time was change by half an hour in 1947;
+# it's always standard as of 1986.
+
+Zone US/Hawaii -10:30 US H%sT 1933 Apr 30 2:00
+ -10:30 1:00 HDT 1933 May 1 2:00
+ -10:30 US H%sT 1947 Jun 8 2:00
+ -10:00 - HST
+
+# Old names, for S5 users
+
+# Link LINK-FROM LINK-TO
+# Link US/Eastern EST5EDT
+# Link US/Central CST6CDT
+# Link US/Mountain MST7MDT
+# Link US/Pacific PST8PDT
+# Link US/East-Indiana EST
+# Link US/Arizona MST
+# Link US/Hawaii HST
+
+################################################################################
+
+# Canada
+
+# Canada is reportedly lots easier than the US--leastways since 1951.
+# I don't know what they did before then.
+# 4.3BSD claims that it's perfectly regular.
+# According to a posting in "comp.bugs.misc", "comp.unix.wizards", etc.
+# on February 8, 1987, by Dave Sherman of the Law Society of Upper Canada,
+# "...Canada (well, Ontario and at least some of the other provinces) are
+# adopting the new daylight savings time rules...". We assume all of
+# Canada is doing so.
+
+# From Bob Devine (January 28, 1988):
+# All of Canada did have DST from your first rule except Saskatchewan.
+# Which parts did not observe DST is hard to pinpoint but most of the
+# province follows the rules.
+# NOTE: those that didn't have DST for that rule, also
+# probably did not have it for several years previous.
+
+# From U. S. Naval Observatory (January 19, 1989):
+# CANADA NEW FDL 3.5H BEHIND UTC ST.JOHN'S
+# CANADA NEW FDL 1.5H BEHIND UTC APR 3 - OCT 29
+# CANADA ATLANTIC 4 H BEHIND UTC HALIFAX
+# CANADA ATLANTIC 3 H BEHIND UTC APR 3 - OCT 29
+# CANADA EASTERN 5 H BEHIND UTC TORONTO, MONTREAL, OTTAWA
+# CANADA EASTERN 4 H BEHIND UTC APR 3 - OCT 29
+# CANADA CENTRAL 6 H BEHIND UTC REGINA, WINNIPEG
+# CANADA CENTRAL 5 H BEHIND UTC APR 3 - OCT 29
+# CANADA MOUNTAIN 7 H BEHIND UTC CALGARY, EDMONTON
+# CANADA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 29
+# CANADA PACIFIC 8 H BEHIND UTC VANCOUVER
+# CANADA PACIFIC 7 H BEHIND UTC APR 3 - OCT 29
+# CANADA YUKON SAME AS PACIFIC DAWSON
+
+# From Arthur David Olson (January 21, 1989):
+# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989. Ahem.
+# Note claim that there's double DST in Newfoundland and that Yukon should
+# be same as Pacific. Stick with rules posted in 1988 until more authoritative
+# information is available.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Canada 1969 max - Oct lastSun 2:00 0 S
+Rule Canada 1969 1986 - Apr lastSun 2:00 1:00 D
+Rule Canada 1987 max - Apr Sun>=1 2:00 1:00 D
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+# Bob Devine says that DST *is* observed in Newfoundland
+Zone Canada/Newfoundland -3:30 Canada N%sT
+Zone Canada/Atlantic -4:00 Canada A%sT
+Zone Canada/Eastern -5:00 Canada E%sT
+Zone Canada/Central -6:00 Canada C%sT
+Zone Canada/East-Saskatchewan -6:00 - CST # No DST as of 1987
+Zone Canada/Mountain -7:00 Canada M%sT
+Zone Canada/Pacific -8:00 Canada P%sT
+Zone Canada/Yukon -9:00 Canada Y%sT
+
+###############################################################################
+
+# Mexico
+
+# From Guy Harris:
+# Rules are from the Official Airline Guide, Worldwide Edition, for 1987.
+# Rules prior to 1987 are unknown.
+# The comments in the OAG say "Only Ensenada, Mexicale, San Felipe and Tijuana
+# observe DST." This is presumably Baja California Norte, above 28th parallel,
+# as listed there; Mexico/BajaSur is for "Baja California Sur and N. Pacific
+# Coast (States of Sinaloa and Sonora)."
+
+# From Bob Devine (January 28, 1988):
+# The Federal District (where Mexico City is) has observed [DST] several
+# times but not recently.
+#
+# I don't where to drawn the line in the North Baja area. 28th latitude
+# sounds good -- but it may be higher (how far [d]o radio stations from
+# San Diego affect culture?).
+#
+# The dates of DST probably go back to 1981. The rules are the same as
+# US's. This is going to be a headache for US presidential electi[o]n years!
+
+# From Arthur David Olson (February 13, 1988)
+# Since the 1981 starting date is only "probable," we'll keep the 1987
+# starting date below.
+
+# From U. S. Naval Observatory (January 19, 1989):
+# MEXICO BAJA CAL N 7 H BEHIND UTC BAJA CALIFORNIA SUR AND
+# MEXICO BAJA CAL N N. PACIFIC COAST (STATES
+# MEXICO BAJA CAL N OF SINALOA AND SONORA)
+# MEXICO BAJA CAL N 8 H BEHIND UTC ABOVE 28TH PARALLAL APR 3
+# MEXICO BAJA CAL N - OCT 29
+# MEXICO BAJA CAL N 7 H BEHIND UTC ABOVE 28TH PARALLAL APR 3
+# MEXICO BAJA CAL N - 0CT 29
+# MEXICO 6 H BEHIND UTC STATES OF DURANGO,
+# MEXICO COAHUILA, NUEVO LEON,
+# MEXICO TAMAULIPAS
+# MEXICO 5 H BEHIND UTC STATES OF DURANGO,
+# MEXICO COAHUILA, NUEVO LEON,
+# MEXICO TAMAULIPAS APR 3 - OCT 29
+# MEXICO 6 H BEHIND UTC GENERAL MEXICO, STATES OF
+# MEXICO CAMPECHE, QUINTANA ROO AND
+# MEXICO YUCATAN
+
+# From Arthur David Olson (January 21, 1989):
+# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989. Ahem.
+# USNO claims there should be four Mexican zones rather than three:
+# a zone that's GMT-8 with DST; a zone that's always GMT-7;
+# a zone that's GMT-6 with DST; and a zone that's always GMT-6.
+# Wait for more authoritative information before changing.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Mexico 1987 max - Oct lastSun 2:00 0 S
+Rule Mexico 1987 max - Apr Sun>=1 2:00 1:00 D
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Mexico/BajaNorte -8:00 Mexico P%sT
+Zone Mexico/BajaSur -7:00 - MST
+Zone Mexico/General -6:00 - CST
+
+###############################################################################
+
+# Jamaica
+
+# From Bob Devine (January 28, 1988):
+# Follows US rules.
+
+# From U. S. Naval Observatory (January 19, 1989):
+# JAMAICA 5 H BEHIND UTC
+
+Link US/Eastern Jamaica
+
+###############################################################################
+
+# Cuba
+
+# From Bob Devine (January 28, 1988):
+# . . .DST is from 2nd Sunday in May to 2nd Sunday in October since 1981.
+# Change at midnight. In 1979 & 1980, started at 3rd Sunday in March
+# (I think).
+
+# From U. S. Naval Observatory (January 19, 1989):
+# CUBA 5 H BEHIND UTC
+# CUBA 4 H BEHIND UTC MAR 20 - OCT 8
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Cuba 1979 1980 - Mar Sun>=15 0:00 1:00 D
+Rule Cuba 1979 1980 - Oct Sun>=8 0:00 0 S
+Rule Cuba 1981 max - May Sun>=8 0:00 1:00 D
+Rule Cuba 1981 max - Oct Sun>=8 0:00 0 S
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT
+Zone Cuba -5:00 Cuba C%sT
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/pacificnew amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/pacificnew
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/pacificnew Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/pacificnew Sat Sep 28 00:00:00 1996
@@ -0,0 +1,21 @@
+# @(#)pacificnew 4.4
+
+# From Arthur David Olson (January 18, 1989):
+# On November 10, 1987, the U. S. House of Representatives passed a bill
+# (H.R. 435), the "Uniform Poll Closing Time Act", establishing
+# "Pacific Presidential Election Time"; it was not acted on by the Senate
+# before the end of the 100th Congress and so died.
+# The bill has been reintroduced in the 101st Congress as H. R. 18;
+# H. R. 96 also deals with poll closing time. Either bill would have to be
+# passed by both the House and Senate and signed by the President (or have
+# the President's veto overridden by the House and Senate) before becoming law.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Twilite 1989 max - Apr Sun>=1 2:00 1:00 D
+Rule Twilite 1989 max uspres Oct lastSun 2:00 1:00 PE
+Rule Twilite 1989 max uspres Nov Sun>=7 2:00 0 S
+Rule Twilite 1989 max nonpres Oct lastSun 2:00 0 S
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone US/Pacific-New -8:00 US P%sT 1989
+ -8:00 Twilite P%sT
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/smakefile amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/smakefile
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/smakefile Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/smakefile Sat Sep 28 00:00:00 1996
@@ -0,0 +1,67 @@
+# @(#)Makefile 5.9 (Berkeley) 2/28/91
+
+# Change the line below for your time zone (after finding the zone you want in
+# the time zone files, or adding it to a time zone file).
+# Alternately, if you discover you've got the wrong time zone, you can just
+# zic -l rightzone
+
+LOCALTIME= MET
+
+# If you want something other than Eastern United States time as a template
+# for handling POSIX-style time zone environment variables,
+# change the line below (after finding the zone you want in the
+# time zone files, or adding it to a time zone file).
+# Alternately, if you discover you've got the wrong time zone, you can just
+# zic -p rightzone
+
+POSIXRULES= MET
+
+# Use an absolute path name for TZDIR unless you're just testing the software.
+
+TZDIR= s:zoneinfo
+
+# If you always want time values interpreted as "seconds since the epoch
+# (not counting leap seconds)", use
+# REDO= posix_only
+# below. If you always want right time values interpreted as "seconds since
+# the epoch" (counting leap seconds)", use
+# REDO= right_only
+# below. If you want both sets of data available, with leap seconds not
+# counted normally, use
+# REDO= posix_right
+# below. If you want both sets of data available, with leap seconds counted
+# normally, use
+# REDO= right_posix
+# below.
+
+# This should be left as is for the Amiga
+
+REDO= posix_only
+
+YDATA= africa antarctica asia australasia europe northamerica \
+ southamerica pacificnew etcetera factory
+NDATA= systemv
+#SDATA= solar87 solar88 solar89
+TDATA= ${YDATA} ${NDATA} ${SDATA}
+DATA= ${YDATA} ${NDATA} ${SDATA} leapseconds
+USNO= usno1988 usno1989
+
+all: $(REDO)
+
+posix_only: ${TDATA}
+ /zic -d ${TZDIR} -L nil: ${TDATA}
+
+right_only: leapseconds ${TDATA}
+ /zic -d ${TZDIR} -L leapseconds ${TDATA}
+
+other_two: leapseconds ${TDATA}
+ /zic -d ${TZDIR} -L leapseconds ${TDATA}
+ /zic -d ${TZDIR} -L nil: ${TDATA}
+
+posix_right: posix_only other_two
+
+right_posix: right_only other_two
+
+install: ${TDATA} ${REDO}
+ /zic -d ${TZDIR} -p ${POSIXRULES}
+ /zic -d ${TZDIR} -l ${LOCALTIME}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar87 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar87
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar87 Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar87 Sat Sep 28 00:00:00 1996
@@ -0,0 +1,386 @@
+# @(#)solar87 4.1
+
+# So much for footnotes about Saudi Arabia.
+# Apparent noon times below are for Riyadh; your mileage will vary.
+# Times were computed using formulas in the U.S. Naval Observatory's
+# Almanac for Computers 1987; the formulas "will give EqT to an accuracy of
+# [plus or minus two] seconds during the current year."
+#
+# Rounding to the nearest five seconds results in fewer than
+# 256 different "time types"--a limit that's faced because time types are
+# stored on disk as unsigned chars.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule sol87 1987 only - Jan 1 12:03:20s -0:03:20 -
+Rule sol87 1987 only - Jan 2 12:03:50s -0:03:50 -
+Rule sol87 1987 only - Jan 3 12:04:15s -0:04:15 -
+Rule sol87 1987 only - Jan 4 12:04:45s -0:04:45 -
+Rule sol87 1987 only - Jan 5 12:05:10s -0:05:10 -
+Rule sol87 1987 only - Jan 6 12:05:40s -0:05:40 -
+Rule sol87 1987 only - Jan 7 12:06:05s -0:06:05 -
+Rule sol87 1987 only - Jan 8 12:06:30s -0:06:30 -
+Rule sol87 1987 only - Jan 9 12:06:55s -0:06:55 -
+Rule sol87 1987 only - Jan 10 12:07:20s -0:07:20 -
+Rule sol87 1987 only - Jan 11 12:07:45s -0:07:45 -
+Rule sol87 1987 only - Jan 12 12:08:10s -0:08:10 -
+Rule sol87 1987 only - Jan 13 12:08:30s -0:08:30 -
+Rule sol87 1987 only - Jan 14 12:08:55s -0:08:55 -
+Rule sol87 1987 only - Jan 15 12:09:15s -0:09:15 -
+Rule sol87 1987 only - Jan 16 12:09:35s -0:09:35 -
+Rule sol87 1987 only - Jan 17 12:09:55s -0:09:55 -
+Rule sol87 1987 only - Jan 18 12:10:15s -0:10:15 -
+Rule sol87 1987 only - Jan 19 12:10:35s -0:10:35 -
+Rule sol87 1987 only - Jan 20 12:10:55s -0:10:55 -
+Rule sol87 1987 only - Jan 21 12:11:10s -0:11:10 -
+Rule sol87 1987 only - Jan 22 12:11:30s -0:11:30 -
+Rule sol87 1987 only - Jan 23 12:11:45s -0:11:45 -
+Rule sol87 1987 only - Jan 24 12:12:00s -0:12:00 -
+Rule sol87 1987 only - Jan 25 12:12:15s -0:12:15 -
+Rule sol87 1987 only - Jan 26 12:12:30s -0:12:30 -
+Rule sol87 1987 only - Jan 27 12:12:40s -0:12:40 -
+Rule sol87 1987 only - Jan 28 12:12:55s -0:12:55 -
+Rule sol87 1987 only - Jan 29 12:13:05s -0:13:05 -
+Rule sol87 1987 only - Jan 30 12:13:15s -0:13:15 -
+Rule sol87 1987 only - Jan 31 12:13:25s -0:13:25 -
+Rule sol87 1987 only - Feb 1 12:13:35s -0:13:35 -
+Rule sol87 1987 only - Feb 2 12:13:40s -0:13:40 -
+Rule sol87 1987 only - Feb 3 12:13:50s -0:13:50 -
+Rule sol87 1987 only - Feb 4 12:13:55s -0:13:55 -
+Rule sol87 1987 only - Feb 5 12:14:00s -0:14:00 -
+Rule sol87 1987 only - Feb 6 12:14:05s -0:14:05 -
+Rule sol87 1987 only - Feb 7 12:14:10s -0:14:10 -
+Rule sol87 1987 only - Feb 8 12:14:10s -0:14:10 -
+Rule sol87 1987 only - Feb 9 12:14:15s -0:14:15 -
+Rule sol87 1987 only - Feb 10 12:14:15s -0:14:15 -
+Rule sol87 1987 only - Feb 11 12:14:15s -0:14:15 -
+Rule sol87 1987 only - Feb 12 12:14:15s -0:14:15 -
+Rule sol87 1987 only - Feb 13 12:14:15s -0:14:15 -
+Rule sol87 1987 only - Feb 14 12:14:15s -0:14:15 -
+Rule sol87 1987 only - Feb 15 12:14:10s -0:14:10 -
+Rule sol87 1987 only - Feb 16 12:14:10s -0:14:10 -
+Rule sol87 1987 only - Feb 17 12:14:05s -0:14:05 -
+Rule sol87 1987 only - Feb 18 12:14:00s -0:14:00 -
+Rule sol87 1987 only - Feb 19 12:13:55s -0:13:55 -
+Rule sol87 1987 only - Feb 20 12:13:50s -0:13:50 -
+Rule sol87 1987 only - Feb 21 12:13:45s -0:13:45 -
+Rule sol87 1987 only - Feb 22 12:13:35s -0:13:35 -
+Rule sol87 1987 only - Feb 23 12:13:30s -0:13:30 -
+Rule sol87 1987 only - Feb 24 12:13:20s -0:13:20 -
+Rule sol87 1987 only - Feb 25 12:13:10s -0:13:10 -
+Rule sol87 1987 only - Feb 26 12:13:00s -0:13:00 -
+Rule sol87 1987 only - Feb 27 12:12:50s -0:12:50 -
+Rule sol87 1987 only - Feb 28 12:12:40s -0:12:40 -
+Rule sol87 1987 only - Mar 1 12:12:30s -0:12:30 -
+Rule sol87 1987 only - Mar 2 12:12:20s -0:12:20 -
+Rule sol87 1987 only - Mar 3 12:12:05s -0:12:05 -
+Rule sol87 1987 only - Mar 4 12:11:55s -0:11:55 -
+Rule sol87 1987 only - Mar 5 12:11:40s -0:11:40 -
+Rule sol87 1987 only - Mar 6 12:11:25s -0:11:25 -
+Rule sol87 1987 only - Mar 7 12:11:15s -0:11:15 -
+Rule sol87 1987 only - Mar 8 12:11:00s -0:11:00 -
+Rule sol87 1987 only - Mar 9 12:10:45s -0:10:45 -
+Rule sol87 1987 only - Mar 10 12:10:30s -0:10:30 -
+Rule sol87 1987 only - Mar 11 12:10:15s -0:10:15 -
+Rule sol87 1987 only - Mar 12 12:09:55s -0:09:55 -
+Rule sol87 1987 only - Mar 13 12:09:40s -0:09:40 -
+Rule sol87 1987 only - Mar 14 12:09:25s -0:09:25 -
+Rule sol87 1987 only - Mar 15 12:09:10s -0:09:10 -
+Rule sol87 1987 only - Mar 16 12:08:50s -0:08:50 -
+Rule sol87 1987 only - Mar 17 12:08:35s -0:08:35 -
+Rule sol87 1987 only - Mar 18 12:08:15s -0:08:15 -
+Rule sol87 1987 only - Mar 19 12:08:00s -0:08:00 -
+Rule sol87 1987 only - Mar 20 12:07:40s -0:07:40 -
+Rule sol87 1987 only - Mar 21 12:07:25s -0:07:25 -
+Rule sol87 1987 only - Mar 22 12:07:05s -0:07:05 -
+Rule sol87 1987 only - Mar 23 12:06:50s -0:06:50 -
+Rule sol87 1987 only - Mar 24 12:06:30s -0:06:30 -
+Rule sol87 1987 only - Mar 25 12:06:10s -0:06:10 -
+Rule sol87 1987 only - Mar 26 12:05:55s -0:05:55 -
+Rule sol87 1987 only - Mar 27 12:05:35s -0:05:35 -
+Rule sol87 1987 only - Mar 28 12:05:15s -0:05:15 -
+Rule sol87 1987 only - Mar 29 12:05:00s -0:05:00 -
+Rule sol87 1987 only - Mar 30 12:04:40s -0:04:40 -
+Rule sol87 1987 only - Mar 31 12:04:25s -0:04:25 -
+Rule sol87 1987 only - Apr 1 12:04:05s -0:04:05 -
+Rule sol87 1987 only - Apr 2 12:03:45s -0:03:45 -
+Rule sol87 1987 only - Apr 3 12:03:30s -0:03:30 -
+Rule sol87 1987 only - Apr 4 12:03:10s -0:03:10 -
+Rule sol87 1987 only - Apr 5 12:02:55s -0:02:55 -
+Rule sol87 1987 only - Apr 6 12:02:35s -0:02:35 -
+Rule sol87 1987 only - Apr 7 12:02:20s -0:02:20 -
+Rule sol87 1987 only - Apr 8 12:02:05s -0:02:05 -
+Rule sol87 1987 only - Apr 9 12:01:45s -0:01:45 -
+Rule sol87 1987 only - Apr 10 12:01:30s -0:01:30 -
+Rule sol87 1987 only - Apr 11 12:01:15s -0:01:15 -
+Rule sol87 1987 only - Apr 12 12:00:55s -0:00:55 -
+Rule sol87 1987 only - Apr 13 12:00:40s -0:00:40 -
+Rule sol87 1987 only - Apr 14 12:00:25s -0:00:25 -
+Rule sol87 1987 only - Apr 15 12:00:10s -0:00:10 -
+Rule sol87 1987 only - Apr 16 11:59:55s 0:00:05 -
+Rule sol87 1987 only - Apr 17 11:59:45s 0:00:15 -
+Rule sol87 1987 only - Apr 18 11:59:30s 0:00:30 -
+Rule sol87 1987 only - Apr 19 11:59:15s 0:00:45 -
+Rule sol87 1987 only - Apr 20 11:59:05s 0:00:55 -
+Rule sol87 1987 only - Apr 21 11:58:50s 0:01:10 -
+Rule sol87 1987 only - Apr 22 11:58:40s 0:01:20 -
+Rule sol87 1987 only - Apr 23 11:58:25s 0:01:35 -
+Rule sol87 1987 only - Apr 24 11:58:15s 0:01:45 -
+Rule sol87 1987 only - Apr 25 11:58:05s 0:01:55 -
+Rule sol87 1987 only - Apr 26 11:57:55s 0:02:05 -
+Rule sol87 1987 only - Apr 27 11:57:45s 0:02:15 -
+Rule sol87 1987 only - Apr 28 11:57:35s 0:02:25 -
+Rule sol87 1987 only - Apr 29 11:57:25s 0:02:35 -
+Rule sol87 1987 only - Apr 30 11:57:15s 0:02:45 -
+Rule sol87 1987 only - May 1 11:57:10s 0:02:50 -
+Rule sol87 1987 only - May 2 11:57:00s 0:03:00 -
+Rule sol87 1987 only - May 3 11:56:55s 0:03:05 -
+Rule sol87 1987 only - May 4 11:56:50s 0:03:10 -
+Rule sol87 1987 only - May 5 11:56:45s 0:03:15 -
+Rule sol87 1987 only - May 6 11:56:40s 0:03:20 -
+Rule sol87 1987 only - May 7 11:56:35s 0:03:25 -
+Rule sol87 1987 only - May 8 11:56:30s 0:03:30 -
+Rule sol87 1987 only - May 9 11:56:25s 0:03:35 -
+Rule sol87 1987 only - May 10 11:56:25s 0:03:35 -
+Rule sol87 1987 only - May 11 11:56:20s 0:03:40 -
+Rule sol87 1987 only - May 12 11:56:20s 0:03:40 -
+Rule sol87 1987 only - May 13 11:56:20s 0:03:40 -
+Rule sol87 1987 only - May 14 11:56:20s 0:03:40 -
+Rule sol87 1987 only - May 15 11:56:20s 0:03:40 -
+Rule sol87 1987 only - May 16 11:56:20s 0:03:40 -
+Rule sol87 1987 only - May 17 11:56:20s 0:03:40 -
+Rule sol87 1987 only - May 18 11:56:20s 0:03:40 -
+Rule sol87 1987 only - May 19 11:56:25s 0:03:35 -
+Rule sol87 1987 only - May 20 11:56:25s 0:03:35 -
+Rule sol87 1987 only - May 21 11:56:30s 0:03:30 -
+Rule sol87 1987 only - May 22 11:56:35s 0:03:25 -
+Rule sol87 1987 only - May 23 11:56:40s 0:03:20 -
+Rule sol87 1987 only - May 24 11:56:45s 0:03:15 -
+Rule sol87 1987 only - May 25 11:56:50s 0:03:10 -
+Rule sol87 1987 only - May 26 11:56:55s 0:03:05 -
+Rule sol87 1987 only - May 27 11:57:00s 0:03:00 -
+Rule sol87 1987 only - May 28 11:57:10s 0:02:50 -
+Rule sol87 1987 only - May 29 11:57:15s 0:02:45 -
+Rule sol87 1987 only - May 30 11:57:25s 0:02:35 -
+Rule sol87 1987 only - May 31 11:57:30s 0:02:30 -
+Rule sol87 1987 only - Jun 1 11:57:40s 0:02:20 -
+Rule sol87 1987 only - Jun 2 11:57:50s 0:02:10 -
+Rule sol87 1987 only - Jun 3 11:58:00s 0:02:00 -
+Rule sol87 1987 only - Jun 4 11:58:10s 0:01:50 -
+Rule sol87 1987 only - Jun 5 11:58:20s 0:01:40 -
+Rule sol87 1987 only - Jun 6 11:58:30s 0:01:30 -
+Rule sol87 1987 only - Jun 7 11:58:40s 0:01:20 -
+Rule sol87 1987 only - Jun 8 11:58:50s 0:01:10 -
+Rule sol87 1987 only - Jun 9 11:59:05s 0:00:55 -
+Rule sol87 1987 only - Jun 10 11:59:15s 0:00:45 -
+Rule sol87 1987 only - Jun 11 11:59:30s 0:00:30 -
+Rule sol87 1987 only - Jun 12 11:59:40s 0:00:20 -
+Rule sol87 1987 only - Jun 13 11:59:50s 0:00:10 -
+Rule sol87 1987 only - Jun 14 12:00:05s -0:00:05 -
+Rule sol87 1987 only - Jun 15 12:00:15s -0:00:15 -
+Rule sol87 1987 only - Jun 16 12:00:30s -0:00:30 -
+Rule sol87 1987 only - Jun 17 12:00:45s -0:00:45 -
+Rule sol87 1987 only - Jun 18 12:00:55s -0:00:55 -
+Rule sol87 1987 only - Jun 19 12:01:10s -0:01:10 -
+Rule sol87 1987 only - Jun 20 12:01:20s -0:01:20 -
+Rule sol87 1987 only - Jun 21 12:01:35s -0:01:35 -
+Rule sol87 1987 only - Jun 22 12:01:50s -0:01:50 -
+Rule sol87 1987 only - Jun 23 12:02:00s -0:02:00 -
+Rule sol87 1987 only - Jun 24 12:02:15s -0:02:15 -
+Rule sol87 1987 only - Jun 25 12:02:25s -0:02:25 -
+Rule sol87 1987 only - Jun 26 12:02:40s -0:02:40 -
+Rule sol87 1987 only - Jun 27 12:02:50s -0:02:50 -
+Rule sol87 1987 only - Jun 28 12:03:05s -0:03:05 -
+Rule sol87 1987 only - Jun 29 12:03:15s -0:03:15 -
+Rule sol87 1987 only - Jun 30 12:03:30s -0:03:30 -
+Rule sol87 1987 only - Jul 1 12:03:40s -0:03:40 -
+Rule sol87 1987 only - Jul 2 12:03:50s -0:03:50 -
+Rule sol87 1987 only - Jul 3 12:04:05s -0:04:05 -
+Rule sol87 1987 only - Jul 4 12:04:15s -0:04:15 -
+Rule sol87 1987 only - Jul 5 12:04:25s -0:04:25 -
+Rule sol87 1987 only - Jul 6 12:04:35s -0:04:35 -
+Rule sol87 1987 only - Jul 7 12:04:45s -0:04:45 -
+Rule sol87 1987 only - Jul 8 12:04:55s -0:04:55 -
+Rule sol87 1987 only - Jul 9 12:05:05s -0:05:05 -
+Rule sol87 1987 only - Jul 10 12:05:15s -0:05:15 -
+Rule sol87 1987 only - Jul 11 12:05:20s -0:05:20 -
+Rule sol87 1987 only - Jul 12 12:05:30s -0:05:30 -
+Rule sol87 1987 only - Jul 13 12:05:40s -0:05:40 -
+Rule sol87 1987 only - Jul 14 12:05:45s -0:05:45 -
+Rule sol87 1987 only - Jul 15 12:05:50s -0:05:50 -
+Rule sol87 1987 only - Jul 16 12:06:00s -0:06:00 -
+Rule sol87 1987 only - Jul 17 12:06:05s -0:06:05 -
+Rule sol87 1987 only - Jul 18 12:06:10s -0:06:10 -
+Rule sol87 1987 only - Jul 19 12:06:15s -0:06:15 -
+Rule sol87 1987 only - Jul 20 12:06:15s -0:06:15 -
+Rule sol87 1987 only - Jul 21 12:06:20s -0:06:20 -
+Rule sol87 1987 only - Jul 22 12:06:25s -0:06:25 -
+Rule sol87 1987 only - Jul 23 12:06:25s -0:06:25 -
+Rule sol87 1987 only - Jul 24 12:06:25s -0:06:25 -
+Rule sol87 1987 only - Jul 25 12:06:30s -0:06:30 -
+Rule sol87 1987 only - Jul 26 12:06:30s -0:06:30 -
+Rule sol87 1987 only - Jul 27 12:06:30s -0:06:30 -
+Rule sol87 1987 only - Jul 28 12:06:30s -0:06:30 -
+Rule sol87 1987 only - Jul 29 12:06:25s -0:06:25 -
+Rule sol87 1987 only - Jul 30 12:06:25s -0:06:25 -
+Rule sol87 1987 only - Jul 31 12:06:25s -0:06:25 -
+Rule sol87 1987 only - Aug 1 12:06:20s -0:06:20 -
+Rule sol87 1987 only - Aug 2 12:06:15s -0:06:15 -
+Rule sol87 1987 only - Aug 3 12:06:10s -0:06:10 -
+Rule sol87 1987 only - Aug 4 12:06:05s -0:06:05 -
+Rule sol87 1987 only - Aug 5 12:06:00s -0:06:00 -
+Rule sol87 1987 only - Aug 6 12:05:55s -0:05:55 -
+Rule sol87 1987 only - Aug 7 12:05:50s -0:05:50 -
+Rule sol87 1987 only - Aug 8 12:05:40s -0:05:40 -
+Rule sol87 1987 only - Aug 9 12:05:35s -0:05:35 -
+Rule sol87 1987 only - Aug 10 12:05:25s -0:05:25 -
+Rule sol87 1987 only - Aug 11 12:05:15s -0:05:15 -
+Rule sol87 1987 only - Aug 12 12:05:05s -0:05:05 -
+Rule sol87 1987 only - Aug 13 12:04:55s -0:04:55 -
+Rule sol87 1987 only - Aug 14 12:04:45s -0:04:45 -
+Rule sol87 1987 only - Aug 15 12:04:35s -0:04:35 -
+Rule sol87 1987 only - Aug 16 12:04:25s -0:04:25 -
+Rule sol87 1987 only - Aug 17 12:04:10s -0:04:10 -
+Rule sol87 1987 only - Aug 18 12:04:00s -0:04:00 -
+Rule sol87 1987 only - Aug 19 12:03:45s -0:03:45 -
+Rule sol87 1987 only - Aug 20 12:03:30s -0:03:30 -
+Rule sol87 1987 only - Aug 21 12:03:15s -0:03:15 -
+Rule sol87 1987 only - Aug 22 12:03:00s -0:03:00 -
+Rule sol87 1987 only - Aug 23 12:02:45s -0:02:45 -
+Rule sol87 1987 only - Aug 24 12:02:30s -0:02:30 -
+Rule sol87 1987 only - Aug 25 12:02:15s -0:02:15 -
+Rule sol87 1987 only - Aug 26 12:02:00s -0:02:00 -
+Rule sol87 1987 only - Aug 27 12:01:40s -0:01:40 -
+Rule sol87 1987 only - Aug 28 12:01:25s -0:01:25 -
+Rule sol87 1987 only - Aug 29 12:01:05s -0:01:05 -
+Rule sol87 1987 only - Aug 30 12:00:50s -0:00:50 -
+Rule sol87 1987 only - Aug 31 12:00:30s -0:00:30 -
+Rule sol87 1987 only - Sep 1 12:00:10s -0:00:10 -
+Rule sol87 1987 only - Sep 2 11:59:50s 0:00:10 -
+Rule sol87 1987 only - Sep 3 11:59:35s 0:00:25 -
+Rule sol87 1987 only - Sep 4 11:59:15s 0:00:45 -
+Rule sol87 1987 only - Sep 5 11:58:55s 0:01:05 -
+Rule sol87 1987 only - Sep 6 11:58:35s 0:01:25 -
+Rule sol87 1987 only - Sep 7 11:58:15s 0:01:45 -
+Rule sol87 1987 only - Sep 8 11:57:55s 0:02:05 -
+Rule sol87 1987 only - Sep 9 11:57:30s 0:02:30 -
+Rule sol87 1987 only - Sep 10 11:57:10s 0:02:50 -
+Rule sol87 1987 only - Sep 11 11:56:50s 0:03:10 -
+Rule sol87 1987 only - Sep 12 11:56:30s 0:03:30 -
+Rule sol87 1987 only - Sep 13 11:56:10s 0:03:50 -
+Rule sol87 1987 only - Sep 14 11:55:45s 0:04:15 -
+Rule sol87 1987 only - Sep 15 11:55:25s 0:04:35 -
+Rule sol87 1987 only - Sep 16 11:55:05s 0:04:55 -
+Rule sol87 1987 only - Sep 17 11:54:45s 0:05:15 -
+Rule sol87 1987 only - Sep 18 11:54:20s 0:05:40 -
+Rule sol87 1987 only - Sep 19 11:54:00s 0:06:00 -
+Rule sol87 1987 only - Sep 20 11:53:40s 0:06:20 -
+Rule sol87 1987 only - Sep 21 11:53:15s 0:06:45 -
+Rule sol87 1987 only - Sep 22 11:52:55s 0:07:05 -
+Rule sol87 1987 only - Sep 23 11:52:35s 0:07:25 -
+Rule sol87 1987 only - Sep 24 11:52:15s 0:07:45 -
+Rule sol87 1987 only - Sep 25 11:51:55s 0:08:05 -
+Rule sol87 1987 only - Sep 26 11:51:35s 0:08:25 -
+Rule sol87 1987 only - Sep 27 11:51:10s 0:08:50 -
+Rule sol87 1987 only - Sep 28 11:50:50s 0:09:10 -
+Rule sol87 1987 only - Sep 29 11:50:30s 0:09:30 -
+Rule sol87 1987 only - Sep 30 11:50:10s 0:09:50 -
+Rule sol87 1987 only - Oct 1 11:49:50s 0:10:10 -
+Rule sol87 1987 only - Oct 2 11:49:35s 0:10:25 -
+Rule sol87 1987 only - Oct 3 11:49:15s 0:10:45 -
+Rule sol87 1987 only - Oct 4 11:48:55s 0:11:05 -
+Rule sol87 1987 only - Oct 5 11:48:35s 0:11:25 -
+Rule sol87 1987 only - Oct 6 11:48:20s 0:11:40 -
+Rule sol87 1987 only - Oct 7 11:48:00s 0:12:00 -
+Rule sol87 1987 only - Oct 8 11:47:45s 0:12:15 -
+Rule sol87 1987 only - Oct 9 11:47:25s 0:12:35 -
+Rule sol87 1987 only - Oct 10 11:47:10s 0:12:50 -
+Rule sol87 1987 only - Oct 11 11:46:55s 0:13:05 -
+Rule sol87 1987 only - Oct 12 11:46:40s 0:13:20 -
+Rule sol87 1987 only - Oct 13 11:46:25s 0:13:35 -
+Rule sol87 1987 only - Oct 14 11:46:10s 0:13:50 -
+Rule sol87 1987 only - Oct 15 11:45:55s 0:14:05 -
+Rule sol87 1987 only - Oct 16 11:45:45s 0:14:15 -
+Rule sol87 1987 only - Oct 17 11:45:30s 0:14:30 -
+Rule sol87 1987 only - Oct 18 11:45:20s 0:14:40 -
+Rule sol87 1987 only - Oct 19 11:45:05s 0:14:55 -
+Rule sol87 1987 only - Oct 20 11:44:55s 0:15:05 -
+Rule sol87 1987 only - Oct 21 11:44:45s 0:15:15 -
+Rule sol87 1987 only - Oct 22 11:44:35s 0:15:25 -
+Rule sol87 1987 only - Oct 23 11:44:25s 0:15:35 -
+Rule sol87 1987 only - Oct 24 11:44:20s 0:15:40 -
+Rule sol87 1987 only - Oct 25 11:44:10s 0:15:50 -
+Rule sol87 1987 only - Oct 26 11:44:05s 0:15:55 -
+Rule sol87 1987 only - Oct 27 11:43:55s 0:16:05 -
+Rule sol87 1987 only - Oct 28 11:43:50s 0:16:10 -
+Rule sol87 1987 only - Oct 29 11:43:45s 0:16:15 -
+Rule sol87 1987 only - Oct 30 11:43:45s 0:16:15 -
+Rule sol87 1987 only - Oct 31 11:43:40s 0:16:20 -
+Rule sol87 1987 only - Nov 1 11:43:40s 0:16:20 -
+Rule sol87 1987 only - Nov 2 11:43:35s 0:16:25 -
+Rule sol87 1987 only - Nov 3 11:43:35s 0:16:25 -
+Rule sol87 1987 only - Nov 4 11:43:35s 0:16:25 -
+Rule sol87 1987 only - Nov 5 11:43:35s 0:16:25 -
+Rule sol87 1987 only - Nov 6 11:43:40s 0:16:20 -
+Rule sol87 1987 only - Nov 7 11:43:40s 0:16:20 -
+Rule sol87 1987 only - Nov 8 11:43:45s 0:16:15 -
+Rule sol87 1987 only - Nov 9 11:43:50s 0:16:10 -
+Rule sol87 1987 only - Nov 10 11:43:55s 0:16:05 -
+Rule sol87 1987 only - Nov 11 11:44:00s 0:16:00 -
+Rule sol87 1987 only - Nov 12 11:44:05s 0:15:55 -
+Rule sol87 1987 only - Nov 13 11:44:15s 0:15:45 -
+Rule sol87 1987 only - Nov 14 11:44:20s 0:15:40 -
+Rule sol87 1987 only - Nov 15 11:44:30s 0:15:30 -
+Rule sol87 1987 only - Nov 16 11:44:40s 0:15:20 -
+Rule sol87 1987 only - Nov 17 11:44:50s 0:15:10 -
+Rule sol87 1987 only - Nov 18 11:45:05s 0:14:55 -
+Rule sol87 1987 only - Nov 19 11:45:15s 0:14:45 -
+Rule sol87 1987 only - Nov 20 11:45:30s 0:14:30 -
+Rule sol87 1987 only - Nov 21 11:45:45s 0:14:15 -
+Rule sol87 1987 only - Nov 22 11:46:00s 0:14:00 -
+Rule sol87 1987 only - Nov 23 11:46:15s 0:13:45 -
+Rule sol87 1987 only - Nov 24 11:46:30s 0:13:30 -
+Rule sol87 1987 only - Nov 25 11:46:50s 0:13:10 -
+Rule sol87 1987 only - Nov 26 11:47:10s 0:12:50 -
+Rule sol87 1987 only - Nov 27 11:47:25s 0:12:35 -
+Rule sol87 1987 only - Nov 28 11:47:45s 0:12:15 -
+Rule sol87 1987 only - Nov 29 11:48:05s 0:11:55 -
+Rule sol87 1987 only - Nov 30 11:48:30s 0:11:30 -
+Rule sol87 1987 only - Dec 1 11:48:50s 0:11:10 -
+Rule sol87 1987 only - Dec 2 11:49:10s 0:10:50 -
+Rule sol87 1987 only - Dec 3 11:49:35s 0:10:25 -
+Rule sol87 1987 only - Dec 4 11:50:00s 0:10:00 -
+Rule sol87 1987 only - Dec 5 11:50:25s 0:09:35 -
+Rule sol87 1987 only - Dec 6 11:50:50s 0:09:10 -
+Rule sol87 1987 only - Dec 7 11:51:15s 0:08:45 -
+Rule sol87 1987 only - Dec 8 11:51:40s 0:08:20 -
+Rule sol87 1987 only - Dec 9 11:52:05s 0:07:55 -
+Rule sol87 1987 only - Dec 10 11:52:30s 0:07:30 -
+Rule sol87 1987 only - Dec 11 11:53:00s 0:07:00 -
+Rule sol87 1987 only - Dec 12 11:53:25s 0:06:35 -
+Rule sol87 1987 only - Dec 13 11:53:55s 0:06:05 -
+Rule sol87 1987 only - Dec 14 11:54:25s 0:05:35 -
+Rule sol87 1987 only - Dec 15 11:54:50s 0:05:10 -
+Rule sol87 1987 only - Dec 16 11:55:20s 0:04:40 -
+Rule sol87 1987 only - Dec 17 11:55:50s 0:04:10 -
+Rule sol87 1987 only - Dec 18 11:56:20s 0:03:40 -
+Rule sol87 1987 only - Dec 19 11:56:50s 0:03:10 -
+Rule sol87 1987 only - Dec 20 11:57:20s 0:02:40 -
+Rule sol87 1987 only - Dec 21 11:57:50s 0:02:10 -
+Rule sol87 1987 only - Dec 22 11:58:20s 0:01:40 -
+Rule sol87 1987 only - Dec 23 11:58:50s 0:01:10 -
+Rule sol87 1987 only - Dec 24 11:59:20s 0:00:40 -
+Rule sol87 1987 only - Dec 25 11:59:50s 0:00:10 -
+Rule sol87 1987 only - Dec 26 12:00:20s -0:00:20 -
+Rule sol87 1987 only - Dec 27 12:00:45s -0:00:45 -
+Rule sol87 1987 only - Dec 28 12:01:15s -0:01:15 -
+Rule sol87 1987 only - Dec 29 12:01:45s -0:01:45 -
+Rule sol87 1987 only - Dec 30 12:02:15s -0:02:15 -
+Rule sol87 1987 only - Dec 31 12:02:45s -0:02:45 -
+
+# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs
+# Before and after 1987, we'll operate on local mean solar time.
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Mideast/Riyadh87 3:07:04 - ?? 1987
+ 3:07:04 sol87 ?? 1988
+ 3:07:04 - ??
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar88 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar88
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar88 Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar88 Sat Sep 28 00:00:00 1996
@@ -0,0 +1,386 @@
+# @(#)solar88 4.2
+
+# Apparent noon times below are for Riyadh; they're a bit off for other places.
+# Times were computed using formulas in the U.S. Naval Observatory's
+# Almanac for Computers 1988; the formulas "will give EqT to an accuracy of
+# [plus or minus two] seconds during the current year."
+#
+# Rounding to the nearest five seconds results in fewer than
+# 256 different "time types"--a limit that's faced because time types are
+# stored on disk as unsigned chars.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule sol88 1988 only - Jan 1 12:03:15s -0:03:15 -
+Rule sol88 1988 only - Jan 2 12:03:40s -0:03:40 -
+Rule sol88 1988 only - Jan 3 12:04:10s -0:04:10 -
+Rule sol88 1988 only - Jan 4 12:04:40s -0:04:40 -
+Rule sol88 1988 only - Jan 5 12:05:05s -0:05:05 -
+Rule sol88 1988 only - Jan 6 12:05:30s -0:05:30 -
+Rule sol88 1988 only - Jan 7 12:06:00s -0:06:00 -
+Rule sol88 1988 only - Jan 8 12:06:25s -0:06:25 -
+Rule sol88 1988 only - Jan 9 12:06:50s -0:06:50 -
+Rule sol88 1988 only - Jan 10 12:07:15s -0:07:15 -
+Rule sol88 1988 only - Jan 11 12:07:40s -0:07:40 -
+Rule sol88 1988 only - Jan 12 12:08:05s -0:08:05 -
+Rule sol88 1988 only - Jan 13 12:08:25s -0:08:25 -
+Rule sol88 1988 only - Jan 14 12:08:50s -0:08:50 -
+Rule sol88 1988 only - Jan 15 12:09:10s -0:09:10 -
+Rule sol88 1988 only - Jan 16 12:09:30s -0:09:30 -
+Rule sol88 1988 only - Jan 17 12:09:50s -0:09:50 -
+Rule sol88 1988 only - Jan 18 12:10:10s -0:10:10 -
+Rule sol88 1988 only - Jan 19 12:10:30s -0:10:30 -
+Rule sol88 1988 only - Jan 20 12:10:50s -0:10:50 -
+Rule sol88 1988 only - Jan 21 12:11:05s -0:11:05 -
+Rule sol88 1988 only - Jan 22 12:11:25s -0:11:25 -
+Rule sol88 1988 only - Jan 23 12:11:40s -0:11:40 -
+Rule sol88 1988 only - Jan 24 12:11:55s -0:11:55 -
+Rule sol88 1988 only - Jan 25 12:12:10s -0:12:10 -
+Rule sol88 1988 only - Jan 26 12:12:25s -0:12:25 -
+Rule sol88 1988 only - Jan 27 12:12:40s -0:12:40 -
+Rule sol88 1988 only - Jan 28 12:12:50s -0:12:50 -
+Rule sol88 1988 only - Jan 29 12:13:00s -0:13:00 -
+Rule sol88 1988 only - Jan 30 12:13:10s -0:13:10 -
+Rule sol88 1988 only - Jan 31 12:13:20s -0:13:20 -
+Rule sol88 1988 only - Feb 1 12:13:30s -0:13:30 -
+Rule sol88 1988 only - Feb 2 12:13:40s -0:13:40 -
+Rule sol88 1988 only - Feb 3 12:13:45s -0:13:45 -
+Rule sol88 1988 only - Feb 4 12:13:55s -0:13:55 -
+Rule sol88 1988 only - Feb 5 12:14:00s -0:14:00 -
+Rule sol88 1988 only - Feb 6 12:14:05s -0:14:05 -
+Rule sol88 1988 only - Feb 7 12:14:10s -0:14:10 -
+Rule sol88 1988 only - Feb 8 12:14:10s -0:14:10 -
+Rule sol88 1988 only - Feb 9 12:14:15s -0:14:15 -
+Rule sol88 1988 only - Feb 10 12:14:15s -0:14:15 -
+Rule sol88 1988 only - Feb 11 12:14:15s -0:14:15 -
+Rule sol88 1988 only - Feb 12 12:14:15s -0:14:15 -
+Rule sol88 1988 only - Feb 13 12:14:15s -0:14:15 -
+Rule sol88 1988 only - Feb 14 12:14:15s -0:14:15 -
+Rule sol88 1988 only - Feb 15 12:14:10s -0:14:10 -
+Rule sol88 1988 only - Feb 16 12:14:10s -0:14:10 -
+Rule sol88 1988 only - Feb 17 12:14:05s -0:14:05 -
+Rule sol88 1988 only - Feb 18 12:14:00s -0:14:00 -
+Rule sol88 1988 only - Feb 19 12:13:55s -0:13:55 -
+Rule sol88 1988 only - Feb 20 12:13:50s -0:13:50 -
+Rule sol88 1988 only - Feb 21 12:13:45s -0:13:45 -
+Rule sol88 1988 only - Feb 22 12:13:40s -0:13:40 -
+Rule sol88 1988 only - Feb 23 12:13:30s -0:13:30 -
+Rule sol88 1988 only - Feb 24 12:13:20s -0:13:20 -
+Rule sol88 1988 only - Feb 25 12:13:15s -0:13:15 -
+Rule sol88 1988 only - Feb 26 12:13:05s -0:13:05 -
+Rule sol88 1988 only - Feb 27 12:12:55s -0:12:55 -
+Rule sol88 1988 only - Feb 28 12:12:45s -0:12:45 -
+Rule sol88 1988 only - Feb 29 12:12:30s -0:12:30 -
+Rule sol88 1988 only - Mar 1 12:12:20s -0:12:20 -
+Rule sol88 1988 only - Mar 2 12:12:10s -0:12:10 -
+Rule sol88 1988 only - Mar 3 12:11:55s -0:11:55 -
+Rule sol88 1988 only - Mar 4 12:11:45s -0:11:45 -
+Rule sol88 1988 only - Mar 5 12:11:30s -0:11:30 -
+Rule sol88 1988 only - Mar 6 12:11:15s -0:11:15 -
+Rule sol88 1988 only - Mar 7 12:11:00s -0:11:00 -
+Rule sol88 1988 only - Mar 8 12:10:45s -0:10:45 -
+Rule sol88 1988 only - Mar 9 12:10:30s -0:10:30 -
+Rule sol88 1988 only - Mar 10 12:10:15s -0:10:15 -
+Rule sol88 1988 only - Mar 11 12:10:00s -0:10:00 -
+Rule sol88 1988 only - Mar 12 12:09:45s -0:09:45 -
+Rule sol88 1988 only - Mar 13 12:09:30s -0:09:30 -
+Rule sol88 1988 only - Mar 14 12:09:10s -0:09:10 -
+Rule sol88 1988 only - Mar 15 12:08:55s -0:08:55 -
+Rule sol88 1988 only - Mar 16 12:08:40s -0:08:40 -
+Rule sol88 1988 only - Mar 17 12:08:20s -0:08:20 -
+Rule sol88 1988 only - Mar 18 12:08:05s -0:08:05 -
+Rule sol88 1988 only - Mar 19 12:07:45s -0:07:45 -
+Rule sol88 1988 only - Mar 20 12:07:30s -0:07:30 -
+Rule sol88 1988 only - Mar 21 12:07:10s -0:07:10 -
+Rule sol88 1988 only - Mar 22 12:06:50s -0:06:50 -
+Rule sol88 1988 only - Mar 23 12:06:35s -0:06:35 -
+Rule sol88 1988 only - Mar 24 12:06:15s -0:06:15 -
+Rule sol88 1988 only - Mar 25 12:06:00s -0:06:00 -
+Rule sol88 1988 only - Mar 26 12:05:40s -0:05:40 -
+Rule sol88 1988 only - Mar 27 12:05:20s -0:05:20 -
+Rule sol88 1988 only - Mar 28 12:05:05s -0:05:05 -
+Rule sol88 1988 only - Mar 29 12:04:45s -0:04:45 -
+Rule sol88 1988 only - Mar 30 12:04:25s -0:04:25 -
+Rule sol88 1988 only - Mar 31 12:04:10s -0:04:10 -
+Rule sol88 1988 only - Apr 1 12:03:50s -0:03:50 -
+Rule sol88 1988 only - Apr 2 12:03:35s -0:03:35 -
+Rule sol88 1988 only - Apr 3 12:03:15s -0:03:15 -
+Rule sol88 1988 only - Apr 4 12:03:00s -0:03:00 -
+Rule sol88 1988 only - Apr 5 12:02:40s -0:02:40 -
+Rule sol88 1988 only - Apr 6 12:02:25s -0:02:25 -
+Rule sol88 1988 only - Apr 7 12:02:05s -0:02:05 -
+Rule sol88 1988 only - Apr 8 12:01:50s -0:01:50 -
+Rule sol88 1988 only - Apr 9 12:01:35s -0:01:35 -
+Rule sol88 1988 only - Apr 10 12:01:15s -0:01:15 -
+Rule sol88 1988 only - Apr 11 12:01:00s -0:01:00 -
+Rule sol88 1988 only - Apr 12 12:00:45s -0:00:45 -
+Rule sol88 1988 only - Apr 13 12:00:30s -0:00:30 -
+Rule sol88 1988 only - Apr 14 12:00:15s -0:00:15 -
+Rule sol88 1988 only - Apr 15 12:00:00s 0:00:00 -
+Rule sol88 1988 only - Apr 16 11:59:45s 0:00:15 -
+Rule sol88 1988 only - Apr 17 11:59:30s 0:00:30 -
+Rule sol88 1988 only - Apr 18 11:59:20s 0:00:40 -
+Rule sol88 1988 only - Apr 19 11:59:05s 0:00:55 -
+Rule sol88 1988 only - Apr 20 11:58:55s 0:01:05 -
+Rule sol88 1988 only - Apr 21 11:58:40s 0:01:20 -
+Rule sol88 1988 only - Apr 22 11:58:30s 0:01:30 -
+Rule sol88 1988 only - Apr 23 11:58:15s 0:01:45 -
+Rule sol88 1988 only - Apr 24 11:58:05s 0:01:55 -
+Rule sol88 1988 only - Apr 25 11:57:55s 0:02:05 -
+Rule sol88 1988 only - Apr 26 11:57:45s 0:02:15 -
+Rule sol88 1988 only - Apr 27 11:57:35s 0:02:25 -
+Rule sol88 1988 only - Apr 28 11:57:30s 0:02:30 -
+Rule sol88 1988 only - Apr 29 11:57:20s 0:02:40 -
+Rule sol88 1988 only - Apr 30 11:57:10s 0:02:50 -
+Rule sol88 1988 only - May 1 11:57:05s 0:02:55 -
+Rule sol88 1988 only - May 2 11:56:55s 0:03:05 -
+Rule sol88 1988 only - May 3 11:56:50s 0:03:10 -
+Rule sol88 1988 only - May 4 11:56:45s 0:03:15 -
+Rule sol88 1988 only - May 5 11:56:40s 0:03:20 -
+Rule sol88 1988 only - May 6 11:56:35s 0:03:25 -
+Rule sol88 1988 only - May 7 11:56:30s 0:03:30 -
+Rule sol88 1988 only - May 8 11:56:25s 0:03:35 -
+Rule sol88 1988 only - May 9 11:56:25s 0:03:35 -
+Rule sol88 1988 only - May 10 11:56:20s 0:03:40 -
+Rule sol88 1988 only - May 11 11:56:20s 0:03:40 -
+Rule sol88 1988 only - May 12 11:56:20s 0:03:40 -
+Rule sol88 1988 only - May 13 11:56:20s 0:03:40 -
+Rule sol88 1988 only - May 14 11:56:20s 0:03:40 -
+Rule sol88 1988 only - May 15 11:56:20s 0:03:40 -
+Rule sol88 1988 only - May 16 11:56:20s 0:03:40 -
+Rule sol88 1988 only - May 17 11:56:20s 0:03:40 -
+Rule sol88 1988 only - May 18 11:56:25s 0:03:35 -
+Rule sol88 1988 only - May 19 11:56:25s 0:03:35 -
+Rule sol88 1988 only - May 20 11:56:30s 0:03:30 -
+Rule sol88 1988 only - May 21 11:56:35s 0:03:25 -
+Rule sol88 1988 only - May 22 11:56:40s 0:03:20 -
+Rule sol88 1988 only - May 23 11:56:45s 0:03:15 -
+Rule sol88 1988 only - May 24 11:56:50s 0:03:10 -
+Rule sol88 1988 only - May 25 11:56:55s 0:03:05 -
+Rule sol88 1988 only - May 26 11:57:00s 0:03:00 -
+Rule sol88 1988 only - May 27 11:57:05s 0:02:55 -
+Rule sol88 1988 only - May 28 11:57:15s 0:02:45 -
+Rule sol88 1988 only - May 29 11:57:20s 0:02:40 -
+Rule sol88 1988 only - May 30 11:57:30s 0:02:30 -
+Rule sol88 1988 only - May 31 11:57:40s 0:02:20 -
+Rule sol88 1988 only - Jun 1 11:57:50s 0:02:10 -
+Rule sol88 1988 only - Jun 2 11:57:55s 0:02:05 -
+Rule sol88 1988 only - Jun 3 11:58:05s 0:01:55 -
+Rule sol88 1988 only - Jun 4 11:58:15s 0:01:45 -
+Rule sol88 1988 only - Jun 5 11:58:30s 0:01:30 -
+Rule sol88 1988 only - Jun 6 11:58:40s 0:01:20 -
+Rule sol88 1988 only - Jun 7 11:58:50s 0:01:10 -
+Rule sol88 1988 only - Jun 8 11:59:00s 0:01:00 -
+Rule sol88 1988 only - Jun 9 11:59:15s 0:00:45 -
+Rule sol88 1988 only - Jun 10 11:59:25s 0:00:35 -
+Rule sol88 1988 only - Jun 11 11:59:35s 0:00:25 -
+Rule sol88 1988 only - Jun 12 11:59:50s 0:00:10 -
+Rule sol88 1988 only - Jun 13 12:00:00s 0:00:00 -
+Rule sol88 1988 only - Jun 14 12:00:15s -0:00:15 -
+Rule sol88 1988 only - Jun 15 12:00:25s -0:00:25 -
+Rule sol88 1988 only - Jun 16 12:00:40s -0:00:40 -
+Rule sol88 1988 only - Jun 17 12:00:55s -0:00:55 -
+Rule sol88 1988 only - Jun 18 12:01:05s -0:01:05 -
+Rule sol88 1988 only - Jun 19 12:01:20s -0:01:20 -
+Rule sol88 1988 only - Jun 20 12:01:30s -0:01:30 -
+Rule sol88 1988 only - Jun 21 12:01:45s -0:01:45 -
+Rule sol88 1988 only - Jun 22 12:02:00s -0:02:00 -
+Rule sol88 1988 only - Jun 23 12:02:10s -0:02:10 -
+Rule sol88 1988 only - Jun 24 12:02:25s -0:02:25 -
+Rule sol88 1988 only - Jun 25 12:02:35s -0:02:35 -
+Rule sol88 1988 only - Jun 26 12:02:50s -0:02:50 -
+Rule sol88 1988 only - Jun 27 12:03:00s -0:03:00 -
+Rule sol88 1988 only - Jun 28 12:03:15s -0:03:15 -
+Rule sol88 1988 only - Jun 29 12:03:25s -0:03:25 -
+Rule sol88 1988 only - Jun 30 12:03:40s -0:03:40 -
+Rule sol88 1988 only - Jul 1 12:03:50s -0:03:50 -
+Rule sol88 1988 only - Jul 2 12:04:00s -0:04:00 -
+Rule sol88 1988 only - Jul 3 12:04:10s -0:04:10 -
+Rule sol88 1988 only - Jul 4 12:04:25s -0:04:25 -
+Rule sol88 1988 only - Jul 5 12:04:35s -0:04:35 -
+Rule sol88 1988 only - Jul 6 12:04:45s -0:04:45 -
+Rule sol88 1988 only - Jul 7 12:04:55s -0:04:55 -
+Rule sol88 1988 only - Jul 8 12:05:05s -0:05:05 -
+Rule sol88 1988 only - Jul 9 12:05:10s -0:05:10 -
+Rule sol88 1988 only - Jul 10 12:05:20s -0:05:20 -
+Rule sol88 1988 only - Jul 11 12:05:30s -0:05:30 -
+Rule sol88 1988 only - Jul 12 12:05:35s -0:05:35 -
+Rule sol88 1988 only - Jul 13 12:05:45s -0:05:45 -
+Rule sol88 1988 only - Jul 14 12:05:50s -0:05:50 -
+Rule sol88 1988 only - Jul 15 12:05:55s -0:05:55 -
+Rule sol88 1988 only - Jul 16 12:06:00s -0:06:00 -
+Rule sol88 1988 only - Jul 17 12:06:05s -0:06:05 -
+Rule sol88 1988 only - Jul 18 12:06:10s -0:06:10 -
+Rule sol88 1988 only - Jul 19 12:06:15s -0:06:15 -
+Rule sol88 1988 only - Jul 20 12:06:20s -0:06:20 -
+Rule sol88 1988 only - Jul 21 12:06:25s -0:06:25 -
+Rule sol88 1988 only - Jul 22 12:06:25s -0:06:25 -
+Rule sol88 1988 only - Jul 23 12:06:25s -0:06:25 -
+Rule sol88 1988 only - Jul 24 12:06:30s -0:06:30 -
+Rule sol88 1988 only - Jul 25 12:06:30s -0:06:30 -
+Rule sol88 1988 only - Jul 26 12:06:30s -0:06:30 -
+Rule sol88 1988 only - Jul 27 12:06:30s -0:06:30 -
+Rule sol88 1988 only - Jul 28 12:06:30s -0:06:30 -
+Rule sol88 1988 only - Jul 29 12:06:25s -0:06:25 -
+Rule sol88 1988 only - Jul 30 12:06:25s -0:06:25 -
+Rule sol88 1988 only - Jul 31 12:06:20s -0:06:20 -
+Rule sol88 1988 only - Aug 1 12:06:15s -0:06:15 -
+Rule sol88 1988 only - Aug 2 12:06:15s -0:06:15 -
+Rule sol88 1988 only - Aug 3 12:06:10s -0:06:10 -
+Rule sol88 1988 only - Aug 4 12:06:05s -0:06:05 -
+Rule sol88 1988 only - Aug 5 12:05:55s -0:05:55 -
+Rule sol88 1988 only - Aug 6 12:05:50s -0:05:50 -
+Rule sol88 1988 only - Aug 7 12:05:45s -0:05:45 -
+Rule sol88 1988 only - Aug 8 12:05:35s -0:05:35 -
+Rule sol88 1988 only - Aug 9 12:05:25s -0:05:25 -
+Rule sol88 1988 only - Aug 10 12:05:20s -0:05:20 -
+Rule sol88 1988 only - Aug 11 12:05:10s -0:05:10 -
+Rule sol88 1988 only - Aug 12 12:05:00s -0:05:00 -
+Rule sol88 1988 only - Aug 13 12:04:50s -0:04:50 -
+Rule sol88 1988 only - Aug 14 12:04:35s -0:04:35 -
+Rule sol88 1988 only - Aug 15 12:04:25s -0:04:25 -
+Rule sol88 1988 only - Aug 16 12:04:15s -0:04:15 -
+Rule sol88 1988 only - Aug 17 12:04:00s -0:04:00 -
+Rule sol88 1988 only - Aug 18 12:03:50s -0:03:50 -
+Rule sol88 1988 only - Aug 19 12:03:35s -0:03:35 -
+Rule sol88 1988 only - Aug 20 12:03:20s -0:03:20 -
+Rule sol88 1988 only - Aug 21 12:03:05s -0:03:05 -
+Rule sol88 1988 only - Aug 22 12:02:50s -0:02:50 -
+Rule sol88 1988 only - Aug 23 12:02:35s -0:02:35 -
+Rule sol88 1988 only - Aug 24 12:02:20s -0:02:20 -
+Rule sol88 1988 only - Aug 25 12:02:00s -0:02:00 -
+Rule sol88 1988 only - Aug 26 12:01:45s -0:01:45 -
+Rule sol88 1988 only - Aug 27 12:01:30s -0:01:30 -
+Rule sol88 1988 only - Aug 28 12:01:10s -0:01:10 -
+Rule sol88 1988 only - Aug 29 12:00:50s -0:00:50 -
+Rule sol88 1988 only - Aug 30 12:00:35s -0:00:35 -
+Rule sol88 1988 only - Aug 31 12:00:15s -0:00:15 -
+Rule sol88 1988 only - Sep 1 11:59:55s 0:00:05 -
+Rule sol88 1988 only - Sep 2 11:59:35s 0:00:25 -
+Rule sol88 1988 only - Sep 3 11:59:20s 0:00:40 -
+Rule sol88 1988 only - Sep 4 11:59:00s 0:01:00 -
+Rule sol88 1988 only - Sep 5 11:58:40s 0:01:20 -
+Rule sol88 1988 only - Sep 6 11:58:20s 0:01:40 -
+Rule sol88 1988 only - Sep 7 11:58:00s 0:02:00 -
+Rule sol88 1988 only - Sep 8 11:57:35s 0:02:25 -
+Rule sol88 1988 only - Sep 9 11:57:15s 0:02:45 -
+Rule sol88 1988 only - Sep 10 11:56:55s 0:03:05 -
+Rule sol88 1988 only - Sep 11 11:56:35s 0:03:25 -
+Rule sol88 1988 only - Sep 12 11:56:15s 0:03:45 -
+Rule sol88 1988 only - Sep 13 11:55:50s 0:04:10 -
+Rule sol88 1988 only - Sep 14 11:55:30s 0:04:30 -
+Rule sol88 1988 only - Sep 15 11:55:10s 0:04:50 -
+Rule sol88 1988 only - Sep 16 11:54:50s 0:05:10 -
+Rule sol88 1988 only - Sep 17 11:54:25s 0:05:35 -
+Rule sol88 1988 only - Sep 18 11:54:05s 0:05:55 -
+Rule sol88 1988 only - Sep 19 11:53:45s 0:06:15 -
+Rule sol88 1988 only - Sep 20 11:53:25s 0:06:35 -
+Rule sol88 1988 only - Sep 21 11:53:00s 0:07:00 -
+Rule sol88 1988 only - Sep 22 11:52:40s 0:07:20 -
+Rule sol88 1988 only - Sep 23 11:52:20s 0:07:40 -
+Rule sol88 1988 only - Sep 24 11:52:00s 0:08:00 -
+Rule sol88 1988 only - Sep 25 11:51:40s 0:08:20 -
+Rule sol88 1988 only - Sep 26 11:51:15s 0:08:45 -
+Rule sol88 1988 only - Sep 27 11:50:55s 0:09:05 -
+Rule sol88 1988 only - Sep 28 11:50:35s 0:09:25 -
+Rule sol88 1988 only - Sep 29 11:50:15s 0:09:45 -
+Rule sol88 1988 only - Sep 30 11:49:55s 0:10:05 -
+Rule sol88 1988 only - Oct 1 11:49:35s 0:10:25 -
+Rule sol88 1988 only - Oct 2 11:49:20s 0:10:40 -
+Rule sol88 1988 only - Oct 3 11:49:00s 0:11:00 -
+Rule sol88 1988 only - Oct 4 11:48:40s 0:11:20 -
+Rule sol88 1988 only - Oct 5 11:48:25s 0:11:35 -
+Rule sol88 1988 only - Oct 6 11:48:05s 0:11:55 -
+Rule sol88 1988 only - Oct 7 11:47:50s 0:12:10 -
+Rule sol88 1988 only - Oct 8 11:47:30s 0:12:30 -
+Rule sol88 1988 only - Oct 9 11:47:15s 0:12:45 -
+Rule sol88 1988 only - Oct 10 11:47:00s 0:13:00 -
+Rule sol88 1988 only - Oct 11 11:46:45s 0:13:15 -
+Rule sol88 1988 only - Oct 12 11:46:30s 0:13:30 -
+Rule sol88 1988 only - Oct 13 11:46:15s 0:13:45 -
+Rule sol88 1988 only - Oct 14 11:46:00s 0:14:00 -
+Rule sol88 1988 only - Oct 15 11:45:45s 0:14:15 -
+Rule sol88 1988 only - Oct 16 11:45:35s 0:14:25 -
+Rule sol88 1988 only - Oct 17 11:45:20s 0:14:40 -
+Rule sol88 1988 only - Oct 18 11:45:10s 0:14:50 -
+Rule sol88 1988 only - Oct 19 11:45:00s 0:15:00 -
+Rule sol88 1988 only - Oct 20 11:44:45s 0:15:15 -
+Rule sol88 1988 only - Oct 21 11:44:40s 0:15:20 -
+Rule sol88 1988 only - Oct 22 11:44:30s 0:15:30 -
+Rule sol88 1988 only - Oct 23 11:44:20s 0:15:40 -
+Rule sol88 1988 only - Oct 24 11:44:10s 0:15:50 -
+Rule sol88 1988 only - Oct 25 11:44:05s 0:15:55 -
+Rule sol88 1988 only - Oct 26 11:44:00s 0:16:00 -
+Rule sol88 1988 only - Oct 27 11:43:55s 0:16:05 -
+Rule sol88 1988 only - Oct 28 11:43:50s 0:16:10 -
+Rule sol88 1988 only - Oct 29 11:43:45s 0:16:15 -
+Rule sol88 1988 only - Oct 30 11:43:40s 0:16:20 -
+Rule sol88 1988 only - Oct 31 11:43:40s 0:16:20 -
+Rule sol88 1988 only - Nov 1 11:43:35s 0:16:25 -
+Rule sol88 1988 only - Nov 2 11:43:35s 0:16:25 -
+Rule sol88 1988 only - Nov 3 11:43:35s 0:16:25 -
+Rule sol88 1988 only - Nov 4 11:43:35s 0:16:25 -
+Rule sol88 1988 only - Nov 5 11:43:40s 0:16:20 -
+Rule sol88 1988 only - Nov 6 11:43:40s 0:16:20 -
+Rule sol88 1988 only - Nov 7 11:43:45s 0:16:15 -
+Rule sol88 1988 only - Nov 8 11:43:45s 0:16:15 -
+Rule sol88 1988 only - Nov 9 11:43:50s 0:16:10 -
+Rule sol88 1988 only - Nov 10 11:44:00s 0:16:00 -
+Rule sol88 1988 only - Nov 11 11:44:05s 0:15:55 -
+Rule sol88 1988 only - Nov 12 11:44:10s 0:15:50 -
+Rule sol88 1988 only - Nov 13 11:44:20s 0:15:40 -
+Rule sol88 1988 only - Nov 14 11:44:30s 0:15:30 -
+Rule sol88 1988 only - Nov 15 11:44:40s 0:15:20 -
+Rule sol88 1988 only - Nov 16 11:44:50s 0:15:10 -
+Rule sol88 1988 only - Nov 17 11:45:00s 0:15:00 -
+Rule sol88 1988 only - Nov 18 11:45:15s 0:14:45 -
+Rule sol88 1988 only - Nov 19 11:45:25s 0:14:35 -
+Rule sol88 1988 only - Nov 20 11:45:40s 0:14:20 -
+Rule sol88 1988 only - Nov 21 11:45:55s 0:14:05 -
+Rule sol88 1988 only - Nov 22 11:46:10s 0:13:50 -
+Rule sol88 1988 only - Nov 23 11:46:30s 0:13:30 -
+Rule sol88 1988 only - Nov 24 11:46:45s 0:13:15 -
+Rule sol88 1988 only - Nov 25 11:47:05s 0:12:55 -
+Rule sol88 1988 only - Nov 26 11:47:20s 0:12:40 -
+Rule sol88 1988 only - Nov 27 11:47:40s 0:12:20 -
+Rule sol88 1988 only - Nov 28 11:48:00s 0:12:00 -
+Rule sol88 1988 only - Nov 29 11:48:25s 0:11:35 -
+Rule sol88 1988 only - Nov 30 11:48:45s 0:11:15 -
+Rule sol88 1988 only - Dec 1 11:49:05s 0:10:55 -
+Rule sol88 1988 only - Dec 2 11:49:30s 0:10:30 -
+Rule sol88 1988 only - Dec 3 11:49:55s 0:10:05 -
+Rule sol88 1988 only - Dec 4 11:50:15s 0:09:45 -
+Rule sol88 1988 only - Dec 5 11:50:40s 0:09:20 -
+Rule sol88 1988 only - Dec 6 11:51:05s 0:08:55 -
+Rule sol88 1988 only - Dec 7 11:51:35s 0:08:25 -
+Rule sol88 1988 only - Dec 8 11:52:00s 0:08:00 -
+Rule sol88 1988 only - Dec 9 11:52:25s 0:07:35 -
+Rule sol88 1988 only - Dec 10 11:52:55s 0:07:05 -
+Rule sol88 1988 only - Dec 11 11:53:20s 0:06:40 -
+Rule sol88 1988 only - Dec 12 11:53:50s 0:06:10 -
+Rule sol88 1988 only - Dec 13 11:54:15s 0:05:45 -
+Rule sol88 1988 only - Dec 14 11:54:45s 0:05:15 -
+Rule sol88 1988 only - Dec 15 11:55:15s 0:04:45 -
+Rule sol88 1988 only - Dec 16 11:55:45s 0:04:15 -
+Rule sol88 1988 only - Dec 17 11:56:15s 0:03:45 -
+Rule sol88 1988 only - Dec 18 11:56:40s 0:03:20 -
+Rule sol88 1988 only - Dec 19 11:57:10s 0:02:50 -
+Rule sol88 1988 only - Dec 20 11:57:40s 0:02:20 -
+Rule sol88 1988 only - Dec 21 11:58:10s 0:01:50 -
+Rule sol88 1988 only - Dec 22 11:58:40s 0:01:20 -
+Rule sol88 1988 only - Dec 23 11:59:10s 0:00:50 -
+Rule sol88 1988 only - Dec 24 11:59:40s 0:00:20 -
+Rule sol88 1988 only - Dec 25 12:00:10s -0:00:10 -
+Rule sol88 1988 only - Dec 26 12:00:40s -0:00:40 -
+Rule sol88 1988 only - Dec 27 12:01:10s -0:01:10 -
+Rule sol88 1988 only - Dec 28 12:01:40s -0:01:40 -
+Rule sol88 1988 only - Dec 29 12:02:10s -0:02:10 -
+Rule sol88 1988 only - Dec 30 12:02:35s -0:02:35 -
+Rule sol88 1988 only - Dec 31 12:03:05s -0:03:05 -
+
+# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs
+# Before and after 1988, we'll operate on local mean solar time.
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Mideast/Riyadh88 3:07:04 - ?? 1988
+ 3:07:04 sol88 ?? 1989
+ 3:07:04 - ??
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar89 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar89
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar89 Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar89 Sat Sep 28 00:00:00 1996
@@ -0,0 +1,391 @@
+# @(#)solar89 1.3
+
+# Apparent noon times below are for Riyadh; they're a bit off for other places.
+# Times were computed using a formula provided by the U. S. Naval Observatory:
+# eqt = -105.8 * sin(l) + 596.2 * sin(2 * l) + 4.4 * sin(3 * l)
+# -12.7 * sin(4 * l) - 429.0 * cos(l) - 2.1 * cos (2 * l)
+# + 19.3 * cos(3 * l);
+# where l is the "mean longitude of the Sun" given by
+# l = 279.642 degrees + 0.985647 * d
+# and d is the interval in days from January 0, 0 hours Universal Time
+# (equaling the day of the year plus the fraction of a day from zero hours).
+# The accuracy of the formula is plus or minus three seconds.
+#
+# Rounding to the nearest five seconds results in fewer than
+# 256 different "time types"--a limit that's faced because time types are
+# stored on disk as unsigned chars.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule sol89 1989 only - Jan 1 12:03:35s -0:03:35 -
+Rule sol89 1989 only - Jan 2 12:04:05s -0:04:05 -
+Rule sol89 1989 only - Jan 3 12:04:30s -0:04:30 -
+Rule sol89 1989 only - Jan 4 12:05:00s -0:05:00 -
+Rule sol89 1989 only - Jan 5 12:05:25s -0:05:25 -
+Rule sol89 1989 only - Jan 6 12:05:50s -0:05:50 -
+Rule sol89 1989 only - Jan 7 12:06:15s -0:06:15 -
+Rule sol89 1989 only - Jan 8 12:06:45s -0:06:45 -
+Rule sol89 1989 only - Jan 9 12:07:10s -0:07:10 -
+Rule sol89 1989 only - Jan 10 12:07:35s -0:07:35 -
+Rule sol89 1989 only - Jan 11 12:07:55s -0:07:55 -
+Rule sol89 1989 only - Jan 12 12:08:20s -0:08:20 -
+Rule sol89 1989 only - Jan 13 12:08:45s -0:08:45 -
+Rule sol89 1989 only - Jan 14 12:09:05s -0:09:05 -
+Rule sol89 1989 only - Jan 15 12:09:25s -0:09:25 -
+Rule sol89 1989 only - Jan 16 12:09:45s -0:09:45 -
+Rule sol89 1989 only - Jan 17 12:10:05s -0:10:05 -
+Rule sol89 1989 only - Jan 18 12:10:25s -0:10:25 -
+Rule sol89 1989 only - Jan 19 12:10:45s -0:10:45 -
+Rule sol89 1989 only - Jan 20 12:11:05s -0:11:05 -
+Rule sol89 1989 only - Jan 21 12:11:20s -0:11:20 -
+Rule sol89 1989 only - Jan 22 12:11:35s -0:11:35 -
+Rule sol89 1989 only - Jan 23 12:11:55s -0:11:55 -
+Rule sol89 1989 only - Jan 24 12:12:10s -0:12:10 -
+Rule sol89 1989 only - Jan 25 12:12:20s -0:12:20 -
+Rule sol89 1989 only - Jan 26 12:12:35s -0:12:35 -
+Rule sol89 1989 only - Jan 27 12:12:50s -0:12:50 -
+Rule sol89 1989 only - Jan 28 12:13:00s -0:13:00 -
+Rule sol89 1989 only - Jan 29 12:13:10s -0:13:10 -
+Rule sol89 1989 only - Jan 30 12:13:20s -0:13:20 -
+Rule sol89 1989 only - Jan 31 12:13:30s -0:13:30 -
+Rule sol89 1989 only - Feb 1 12:13:40s -0:13:40 -
+Rule sol89 1989 only - Feb 2 12:13:45s -0:13:45 -
+Rule sol89 1989 only - Feb 3 12:13:55s -0:13:55 -
+Rule sol89 1989 only - Feb 4 12:14:00s -0:14:00 -
+Rule sol89 1989 only - Feb 5 12:14:05s -0:14:05 -
+Rule sol89 1989 only - Feb 6 12:14:10s -0:14:10 -
+Rule sol89 1989 only - Feb 7 12:14:10s -0:14:10 -
+Rule sol89 1989 only - Feb 8 12:14:15s -0:14:15 -
+Rule sol89 1989 only - Feb 9 12:14:15s -0:14:15 -
+Rule sol89 1989 only - Feb 10 12:14:20s -0:14:20 -
+Rule sol89 1989 only - Feb 11 12:14:20s -0:14:20 -
+Rule sol89 1989 only - Feb 12 12:14:20s -0:14:20 -
+Rule sol89 1989 only - Feb 13 12:14:15s -0:14:15 -
+Rule sol89 1989 only - Feb 14 12:14:15s -0:14:15 -
+Rule sol89 1989 only - Feb 15 12:14:10s -0:14:10 -
+Rule sol89 1989 only - Feb 16 12:14:10s -0:14:10 -
+Rule sol89 1989 only - Feb 17 12:14:05s -0:14:05 -
+Rule sol89 1989 only - Feb 18 12:14:00s -0:14:00 -
+Rule sol89 1989 only - Feb 19 12:13:55s -0:13:55 -
+Rule sol89 1989 only - Feb 20 12:13:50s -0:13:50 -
+Rule sol89 1989 only - Feb 21 12:13:40s -0:13:40 -
+Rule sol89 1989 only - Feb 22 12:13:35s -0:13:35 -
+Rule sol89 1989 only - Feb 23 12:13:25s -0:13:25 -
+Rule sol89 1989 only - Feb 24 12:13:15s -0:13:15 -
+Rule sol89 1989 only - Feb 25 12:13:05s -0:13:05 -
+Rule sol89 1989 only - Feb 26 12:12:55s -0:12:55 -
+Rule sol89 1989 only - Feb 27 12:12:45s -0:12:45 -
+Rule sol89 1989 only - Feb 28 12:12:35s -0:12:35 -
+Rule sol89 1989 only - Mar 1 12:12:25s -0:12:25 -
+Rule sol89 1989 only - Mar 2 12:12:10s -0:12:10 -
+Rule sol89 1989 only - Mar 3 12:12:00s -0:12:00 -
+Rule sol89 1989 only - Mar 4 12:11:45s -0:11:45 -
+Rule sol89 1989 only - Mar 5 12:11:35s -0:11:35 -
+Rule sol89 1989 only - Mar 6 12:11:20s -0:11:20 -
+Rule sol89 1989 only - Mar 7 12:11:05s -0:11:05 -
+Rule sol89 1989 only - Mar 8 12:10:50s -0:10:50 -
+Rule sol89 1989 only - Mar 9 12:10:35s -0:10:35 -
+Rule sol89 1989 only - Mar 10 12:10:20s -0:10:20 -
+Rule sol89 1989 only - Mar 11 12:10:05s -0:10:05 -
+Rule sol89 1989 only - Mar 12 12:09:50s -0:09:50 -
+Rule sol89 1989 only - Mar 13 12:09:30s -0:09:30 -
+Rule sol89 1989 only - Mar 14 12:09:15s -0:09:15 -
+Rule sol89 1989 only - Mar 15 12:09:00s -0:09:00 -
+Rule sol89 1989 only - Mar 16 12:08:40s -0:08:40 -
+Rule sol89 1989 only - Mar 17 12:08:25s -0:08:25 -
+Rule sol89 1989 only - Mar 18 12:08:05s -0:08:05 -
+Rule sol89 1989 only - Mar 19 12:07:50s -0:07:50 -
+Rule sol89 1989 only - Mar 20 12:07:30s -0:07:30 -
+Rule sol89 1989 only - Mar 21 12:07:15s -0:07:15 -
+Rule sol89 1989 only - Mar 22 12:06:55s -0:06:55 -
+Rule sol89 1989 only - Mar 23 12:06:35s -0:06:35 -
+Rule sol89 1989 only - Mar 24 12:06:20s -0:06:20 -
+Rule sol89 1989 only - Mar 25 12:06:00s -0:06:00 -
+Rule sol89 1989 only - Mar 26 12:05:40s -0:05:40 -
+Rule sol89 1989 only - Mar 27 12:05:25s -0:05:25 -
+Rule sol89 1989 only - Mar 28 12:05:05s -0:05:05 -
+Rule sol89 1989 only - Mar 29 12:04:50s -0:04:50 -
+Rule sol89 1989 only - Mar 30 12:04:30s -0:04:30 -
+Rule sol89 1989 only - Mar 31 12:04:10s -0:04:10 -
+Rule sol89 1989 only - Apr 1 12:03:55s -0:03:55 -
+Rule sol89 1989 only - Apr 2 12:03:35s -0:03:35 -
+Rule sol89 1989 only - Apr 3 12:03:20s -0:03:20 -
+Rule sol89 1989 only - Apr 4 12:03:00s -0:03:00 -
+Rule sol89 1989 only - Apr 5 12:02:45s -0:02:45 -
+Rule sol89 1989 only - Apr 6 12:02:25s -0:02:25 -
+Rule sol89 1989 only - Apr 7 12:02:10s -0:02:10 -
+Rule sol89 1989 only - Apr 8 12:01:50s -0:01:50 -
+Rule sol89 1989 only - Apr 9 12:01:35s -0:01:35 -
+Rule sol89 1989 only - Apr 10 12:01:20s -0:01:20 -
+Rule sol89 1989 only - Apr 11 12:01:05s -0:01:05 -
+Rule sol89 1989 only - Apr 12 12:00:50s -0:00:50 -
+Rule sol89 1989 only - Apr 13 12:00:35s -0:00:35 -
+Rule sol89 1989 only - Apr 14 12:00:20s -0:00:20 -
+Rule sol89 1989 only - Apr 15 12:00:05s -0:00:05 -
+Rule sol89 1989 only - Apr 16 11:59:50s 0:00:10 -
+Rule sol89 1989 only - Apr 17 11:59:35s 0:00:25 -
+Rule sol89 1989 only - Apr 18 11:59:20s 0:00:40 -
+Rule sol89 1989 only - Apr 19 11:59:10s 0:00:50 -
+Rule sol89 1989 only - Apr 20 11:58:55s 0:01:05 -
+Rule sol89 1989 only - Apr 21 11:58:45s 0:01:15 -
+Rule sol89 1989 only - Apr 22 11:58:30s 0:01:30 -
+Rule sol89 1989 only - Apr 23 11:58:20s 0:01:40 -
+Rule sol89 1989 only - Apr 24 11:58:10s 0:01:50 -
+Rule sol89 1989 only - Apr 25 11:58:00s 0:02:00 -
+Rule sol89 1989 only - Apr 26 11:57:50s 0:02:10 -
+Rule sol89 1989 only - Apr 27 11:57:40s 0:02:20 -
+Rule sol89 1989 only - Apr 28 11:57:30s 0:02:30 -
+Rule sol89 1989 only - Apr 29 11:57:20s 0:02:40 -
+Rule sol89 1989 only - Apr 30 11:57:15s 0:02:45 -
+Rule sol89 1989 only - May 1 11:57:05s 0:02:55 -
+Rule sol89 1989 only - May 2 11:57:00s 0:03:00 -
+Rule sol89 1989 only - May 3 11:56:50s 0:03:10 -
+Rule sol89 1989 only - May 4 11:56:45s 0:03:15 -
+Rule sol89 1989 only - May 5 11:56:40s 0:03:20 -
+Rule sol89 1989 only - May 6 11:56:35s 0:03:25 -
+Rule sol89 1989 only - May 7 11:56:30s 0:03:30 -
+Rule sol89 1989 only - May 8 11:56:30s 0:03:30 -
+Rule sol89 1989 only - May 9 11:56:25s 0:03:35 -
+Rule sol89 1989 only - May 10 11:56:25s 0:03:35 -
+Rule sol89 1989 only - May 11 11:56:20s 0:03:40 -
+Rule sol89 1989 only - May 12 11:56:20s 0:03:40 -
+Rule sol89 1989 only - May 13 11:56:20s 0:03:40 -
+Rule sol89 1989 only - May 14 11:56:20s 0:03:40 -
+Rule sol89 1989 only - May 15 11:56:20s 0:03:40 -
+Rule sol89 1989 only - May 16 11:56:20s 0:03:40 -
+Rule sol89 1989 only - May 17 11:56:20s 0:03:40 -
+Rule sol89 1989 only - May 18 11:56:25s 0:03:35 -
+Rule sol89 1989 only - May 19 11:56:25s 0:03:35 -
+Rule sol89 1989 only - May 20 11:56:30s 0:03:30 -
+Rule sol89 1989 only - May 21 11:56:35s 0:03:25 -
+Rule sol89 1989 only - May 22 11:56:35s 0:03:25 -
+Rule sol89 1989 only - May 23 11:56:40s 0:03:20 -
+Rule sol89 1989 only - May 24 11:56:45s 0:03:15 -
+Rule sol89 1989 only - May 25 11:56:55s 0:03:05 -
+Rule sol89 1989 only - May 26 11:57:00s 0:03:00 -
+Rule sol89 1989 only - May 27 11:57:05s 0:02:55 -
+Rule sol89 1989 only - May 28 11:57:15s 0:02:45 -
+Rule sol89 1989 only - May 29 11:57:20s 0:02:40 -
+Rule sol89 1989 only - May 30 11:57:30s 0:02:30 -
+Rule sol89 1989 only - May 31 11:57:35s 0:02:25 -
+Rule sol89 1989 only - Jun 1 11:57:45s 0:02:15 -
+Rule sol89 1989 only - Jun 2 11:57:55s 0:02:05 -
+Rule sol89 1989 only - Jun 3 11:58:05s 0:01:55 -
+Rule sol89 1989 only - Jun 4 11:58:15s 0:01:45 -
+Rule sol89 1989 only - Jun 5 11:58:25s 0:01:35 -
+Rule sol89 1989 only - Jun 6 11:58:35s 0:01:25 -
+Rule sol89 1989 only - Jun 7 11:58:45s 0:01:15 -
+Rule sol89 1989 only - Jun 8 11:59:00s 0:01:00 -
+Rule sol89 1989 only - Jun 9 11:59:10s 0:00:50 -
+Rule sol89 1989 only - Jun 10 11:59:20s 0:00:40 -
+Rule sol89 1989 only - Jun 11 11:59:35s 0:00:25 -
+Rule sol89 1989 only - Jun 12 11:59:45s 0:00:15 -
+Rule sol89 1989 only - Jun 13 12:00:00s 0:00:00 -
+Rule sol89 1989 only - Jun 14 12:00:10s -0:00:10 -
+Rule sol89 1989 only - Jun 15 12:00:25s -0:00:25 -
+Rule sol89 1989 only - Jun 16 12:00:35s -0:00:35 -
+Rule sol89 1989 only - Jun 17 12:00:50s -0:00:50 -
+Rule sol89 1989 only - Jun 18 12:01:05s -0:01:05 -
+Rule sol89 1989 only - Jun 19 12:01:15s -0:01:15 -
+Rule sol89 1989 only - Jun 20 12:01:30s -0:01:30 -
+Rule sol89 1989 only - Jun 21 12:01:40s -0:01:40 -
+Rule sol89 1989 only - Jun 22 12:01:55s -0:01:55 -
+Rule sol89 1989 only - Jun 23 12:02:10s -0:02:10 -
+Rule sol89 1989 only - Jun 24 12:02:20s -0:02:20 -
+Rule sol89 1989 only - Jun 25 12:02:35s -0:02:35 -
+Rule sol89 1989 only - Jun 26 12:02:45s -0:02:45 -
+Rule sol89 1989 only - Jun 27 12:03:00s -0:03:00 -
+Rule sol89 1989 only - Jun 28 12:03:10s -0:03:10 -
+Rule sol89 1989 only - Jun 29 12:03:25s -0:03:25 -
+Rule sol89 1989 only - Jun 30 12:03:35s -0:03:35 -
+Rule sol89 1989 only - Jul 1 12:03:45s -0:03:45 -
+Rule sol89 1989 only - Jul 2 12:04:00s -0:04:00 -
+Rule sol89 1989 only - Jul 3 12:04:10s -0:04:10 -
+Rule sol89 1989 only - Jul 4 12:04:20s -0:04:20 -
+Rule sol89 1989 only - Jul 5 12:04:30s -0:04:30 -
+Rule sol89 1989 only - Jul 6 12:04:40s -0:04:40 -
+Rule sol89 1989 only - Jul 7 12:04:50s -0:04:50 -
+Rule sol89 1989 only - Jul 8 12:05:00s -0:05:00 -
+Rule sol89 1989 only - Jul 9 12:05:10s -0:05:10 -
+Rule sol89 1989 only - Jul 10 12:05:20s -0:05:20 -
+Rule sol89 1989 only - Jul 11 12:05:25s -0:05:25 -
+Rule sol89 1989 only - Jul 12 12:05:35s -0:05:35 -
+Rule sol89 1989 only - Jul 13 12:05:40s -0:05:40 -
+Rule sol89 1989 only - Jul 14 12:05:50s -0:05:50 -
+Rule sol89 1989 only - Jul 15 12:05:55s -0:05:55 -
+Rule sol89 1989 only - Jul 16 12:06:00s -0:06:00 -
+Rule sol89 1989 only - Jul 17 12:06:05s -0:06:05 -
+Rule sol89 1989 only - Jul 18 12:06:10s -0:06:10 -
+Rule sol89 1989 only - Jul 19 12:06:15s -0:06:15 -
+Rule sol89 1989 only - Jul 20 12:06:20s -0:06:20 -
+Rule sol89 1989 only - Jul 21 12:06:20s -0:06:20 -
+Rule sol89 1989 only - Jul 22 12:06:25s -0:06:25 -
+Rule sol89 1989 only - Jul 23 12:06:25s -0:06:25 -
+Rule sol89 1989 only - Jul 24 12:06:30s -0:06:30 -
+Rule sol89 1989 only - Jul 25 12:06:30s -0:06:30 -
+Rule sol89 1989 only - Jul 26 12:06:30s -0:06:30 -
+Rule sol89 1989 only - Jul 27 12:06:30s -0:06:30 -
+Rule sol89 1989 only - Jul 28 12:06:30s -0:06:30 -
+Rule sol89 1989 only - Jul 29 12:06:25s -0:06:25 -
+Rule sol89 1989 only - Jul 30 12:06:25s -0:06:25 -
+Rule sol89 1989 only - Jul 31 12:06:20s -0:06:20 -
+Rule sol89 1989 only - Aug 1 12:06:20s -0:06:20 -
+Rule sol89 1989 only - Aug 2 12:06:15s -0:06:15 -
+Rule sol89 1989 only - Aug 3 12:06:10s -0:06:10 -
+Rule sol89 1989 only - Aug 4 12:06:05s -0:06:05 -
+Rule sol89 1989 only - Aug 5 12:06:00s -0:06:00 -
+Rule sol89 1989 only - Aug 6 12:05:50s -0:05:50 -
+Rule sol89 1989 only - Aug 7 12:05:45s -0:05:45 -
+Rule sol89 1989 only - Aug 8 12:05:35s -0:05:35 -
+Rule sol89 1989 only - Aug 9 12:05:30s -0:05:30 -
+Rule sol89 1989 only - Aug 10 12:05:20s -0:05:20 -
+Rule sol89 1989 only - Aug 11 12:05:10s -0:05:10 -
+Rule sol89 1989 only - Aug 12 12:05:00s -0:05:00 -
+Rule sol89 1989 only - Aug 13 12:04:50s -0:04:50 -
+Rule sol89 1989 only - Aug 14 12:04:40s -0:04:40 -
+Rule sol89 1989 only - Aug 15 12:04:30s -0:04:30 -
+Rule sol89 1989 only - Aug 16 12:04:15s -0:04:15 -
+Rule sol89 1989 only - Aug 17 12:04:05s -0:04:05 -
+Rule sol89 1989 only - Aug 18 12:03:50s -0:03:50 -
+Rule sol89 1989 only - Aug 19 12:03:35s -0:03:35 -
+Rule sol89 1989 only - Aug 20 12:03:25s -0:03:25 -
+Rule sol89 1989 only - Aug 21 12:03:10s -0:03:10 -
+Rule sol89 1989 only - Aug 22 12:02:55s -0:02:55 -
+Rule sol89 1989 only - Aug 23 12:02:40s -0:02:40 -
+Rule sol89 1989 only - Aug 24 12:02:20s -0:02:20 -
+Rule sol89 1989 only - Aug 25 12:02:05s -0:02:05 -
+Rule sol89 1989 only - Aug 26 12:01:50s -0:01:50 -
+Rule sol89 1989 only - Aug 27 12:01:30s -0:01:30 -
+Rule sol89 1989 only - Aug 28 12:01:15s -0:01:15 -
+Rule sol89 1989 only - Aug 29 12:00:55s -0:00:55 -
+Rule sol89 1989 only - Aug 30 12:00:40s -0:00:40 -
+Rule sol89 1989 only - Aug 31 12:00:20s -0:00:20 -
+Rule sol89 1989 only - Sep 1 12:00:00s 0:00:00 -
+Rule sol89 1989 only - Sep 2 11:59:45s 0:00:15 -
+Rule sol89 1989 only - Sep 3 11:59:25s 0:00:35 -
+Rule sol89 1989 only - Sep 4 11:59:05s 0:00:55 -
+Rule sol89 1989 only - Sep 5 11:58:45s 0:01:15 -
+Rule sol89 1989 only - Sep 6 11:58:25s 0:01:35 -
+Rule sol89 1989 only - Sep 7 11:58:05s 0:01:55 -
+Rule sol89 1989 only - Sep 8 11:57:45s 0:02:15 -
+Rule sol89 1989 only - Sep 9 11:57:20s 0:02:40 -
+Rule sol89 1989 only - Sep 10 11:57:00s 0:03:00 -
+Rule sol89 1989 only - Sep 11 11:56:40s 0:03:20 -
+Rule sol89 1989 only - Sep 12 11:56:20s 0:03:40 -
+Rule sol89 1989 only - Sep 13 11:56:00s 0:04:00 -
+Rule sol89 1989 only - Sep 14 11:55:35s 0:04:25 -
+Rule sol89 1989 only - Sep 15 11:55:15s 0:04:45 -
+Rule sol89 1989 only - Sep 16 11:54:55s 0:05:05 -
+Rule sol89 1989 only - Sep 17 11:54:35s 0:05:25 -
+Rule sol89 1989 only - Sep 18 11:54:10s 0:05:50 -
+Rule sol89 1989 only - Sep 19 11:53:50s 0:06:10 -
+Rule sol89 1989 only - Sep 20 11:53:30s 0:06:30 -
+Rule sol89 1989 only - Sep 21 11:53:10s 0:06:50 -
+Rule sol89 1989 only - Sep 22 11:52:45s 0:07:15 -
+Rule sol89 1989 only - Sep 23 11:52:25s 0:07:35 -
+Rule sol89 1989 only - Sep 24 11:52:05s 0:07:55 -
+Rule sol89 1989 only - Sep 25 11:51:45s 0:08:15 -
+Rule sol89 1989 only - Sep 26 11:51:25s 0:08:35 -
+Rule sol89 1989 only - Sep 27 11:51:05s 0:08:55 -
+Rule sol89 1989 only - Sep 28 11:50:40s 0:09:20 -
+Rule sol89 1989 only - Sep 29 11:50:20s 0:09:40 -
+Rule sol89 1989 only - Sep 30 11:50:00s 0:10:00 -
+Rule sol89 1989 only - Oct 1 11:49:45s 0:10:15 -
+Rule sol89 1989 only - Oct 2 11:49:25s 0:10:35 -
+Rule sol89 1989 only - Oct 3 11:49:05s 0:10:55 -
+Rule sol89 1989 only - Oct 4 11:48:45s 0:11:15 -
+Rule sol89 1989 only - Oct 5 11:48:30s 0:11:30 -
+Rule sol89 1989 only - Oct 6 11:48:10s 0:11:50 -
+Rule sol89 1989 only - Oct 7 11:47:50s 0:12:10 -
+Rule sol89 1989 only - Oct 8 11:47:35s 0:12:25 -
+Rule sol89 1989 only - Oct 9 11:47:20s 0:12:40 -
+Rule sol89 1989 only - Oct 10 11:47:00s 0:13:00 -
+Rule sol89 1989 only - Oct 11 11:46:45s 0:13:15 -
+Rule sol89 1989 only - Oct 12 11:46:30s 0:13:30 -
+Rule sol89 1989 only - Oct 13 11:46:15s 0:13:45 -
+Rule sol89 1989 only - Oct 14 11:46:00s 0:14:00 -
+Rule sol89 1989 only - Oct 15 11:45:50s 0:14:10 -
+Rule sol89 1989 only - Oct 16 11:45:35s 0:14:25 -
+Rule sol89 1989 only - Oct 17 11:45:20s 0:14:40 -
+Rule sol89 1989 only - Oct 18 11:45:10s 0:14:50 -
+Rule sol89 1989 only - Oct 19 11:45:00s 0:15:00 -
+Rule sol89 1989 only - Oct 20 11:44:50s 0:15:10 -
+Rule sol89 1989 only - Oct 21 11:44:40s 0:15:20 -
+Rule sol89 1989 only - Oct 22 11:44:30s 0:15:30 -
+Rule sol89 1989 only - Oct 23 11:44:20s 0:15:40 -
+Rule sol89 1989 only - Oct 24 11:44:10s 0:15:50 -
+Rule sol89 1989 only - Oct 25 11:44:05s 0:15:55 -
+Rule sol89 1989 only - Oct 26 11:44:00s 0:16:00 -
+Rule sol89 1989 only - Oct 27 11:43:50s 0:16:10 -
+Rule sol89 1989 only - Oct 28 11:43:45s 0:16:15 -
+Rule sol89 1989 only - Oct 29 11:43:40s 0:16:20 -
+Rule sol89 1989 only - Oct 30 11:43:40s 0:16:20 -
+Rule sol89 1989 only - Oct 31 11:43:35s 0:16:25 -
+Rule sol89 1989 only - Nov 1 11:43:35s 0:16:25 -
+Rule sol89 1989 only - Nov 2 11:43:35s 0:16:25 -
+Rule sol89 1989 only - Nov 3 11:43:30s 0:16:30 -
+Rule sol89 1989 only - Nov 4 11:43:35s 0:16:25 -
+Rule sol89 1989 only - Nov 5 11:43:35s 0:16:25 -
+Rule sol89 1989 only - Nov 6 11:43:35s 0:16:25 -
+Rule sol89 1989 only - Nov 7 11:43:40s 0:16:20 -
+Rule sol89 1989 only - Nov 8 11:43:45s 0:16:15 -
+Rule sol89 1989 only - Nov 9 11:43:50s 0:16:10 -
+Rule sol89 1989 only - Nov 10 11:43:55s 0:16:05 -
+Rule sol89 1989 only - Nov 11 11:44:00s 0:16:00 -
+Rule sol89 1989 only - Nov 12 11:44:05s 0:15:55 -
+Rule sol89 1989 only - Nov 13 11:44:15s 0:15:45 -
+Rule sol89 1989 only - Nov 14 11:44:25s 0:15:35 -
+Rule sol89 1989 only - Nov 15 11:44:35s 0:15:25 -
+Rule sol89 1989 only - Nov 16 11:44:45s 0:15:15 -
+Rule sol89 1989 only - Nov 17 11:44:55s 0:15:05 -
+Rule sol89 1989 only - Nov 18 11:45:10s 0:14:50 -
+Rule sol89 1989 only - Nov 19 11:45:20s 0:14:40 -
+Rule sol89 1989 only - Nov 20 11:45:35s 0:14:25 -
+Rule sol89 1989 only - Nov 21 11:45:50s 0:14:10 -
+Rule sol89 1989 only - Nov 22 11:46:05s 0:13:55 -
+Rule sol89 1989 only - Nov 23 11:46:25s 0:13:35 -
+Rule sol89 1989 only - Nov 24 11:46:40s 0:13:20 -
+Rule sol89 1989 only - Nov 25 11:47:00s 0:13:00 -
+Rule sol89 1989 only - Nov 26 11:47:20s 0:12:40 -
+Rule sol89 1989 only - Nov 27 11:47:35s 0:12:25 -
+Rule sol89 1989 only - Nov 28 11:47:55s 0:12:05 -
+Rule sol89 1989 only - Nov 29 11:48:20s 0:11:40 -
+Rule sol89 1989 only - Nov 30 11:48:40s 0:11:20 -
+Rule sol89 1989 only - Dec 1 11:49:00s 0:11:00 -
+Rule sol89 1989 only - Dec 2 11:49:25s 0:10:35 -
+Rule sol89 1989 only - Dec 3 11:49:50s 0:10:10 -
+Rule sol89 1989 only - Dec 4 11:50:15s 0:09:45 -
+Rule sol89 1989 only - Dec 5 11:50:35s 0:09:25 -
+Rule sol89 1989 only - Dec 6 11:51:00s 0:09:00 -
+Rule sol89 1989 only - Dec 7 11:51:30s 0:08:30 -
+Rule sol89 1989 only - Dec 8 11:51:55s 0:08:05 -
+Rule sol89 1989 only - Dec 9 11:52:20s 0:07:40 -
+Rule sol89 1989 only - Dec 10 11:52:50s 0:07:10 -
+Rule sol89 1989 only - Dec 11 11:53:15s 0:06:45 -
+Rule sol89 1989 only - Dec 12 11:53:45s 0:06:15 -
+Rule sol89 1989 only - Dec 13 11:54:10s 0:05:50 -
+Rule sol89 1989 only - Dec 14 11:54:40s 0:05:20 -
+Rule sol89 1989 only - Dec 15 11:55:10s 0:04:50 -
+Rule sol89 1989 only - Dec 16 11:55:40s 0:04:20 -
+Rule sol89 1989 only - Dec 17 11:56:05s 0:03:55 -
+Rule sol89 1989 only - Dec 18 11:56:35s 0:03:25 -
+Rule sol89 1989 only - Dec 19 11:57:05s 0:02:55 -
+Rule sol89 1989 only - Dec 20 11:57:35s 0:02:25 -
+Rule sol89 1989 only - Dec 21 11:58:05s 0:01:55 -
+Rule sol89 1989 only - Dec 22 11:58:35s 0:01:25 -
+Rule sol89 1989 only - Dec 23 11:59:05s 0:00:55 -
+Rule sol89 1989 only - Dec 24 11:59:35s 0:00:25 -
+Rule sol89 1989 only - Dec 25 12:00:05s -0:00:05 -
+Rule sol89 1989 only - Dec 26 12:00:35s -0:00:35 -
+Rule sol89 1989 only - Dec 27 12:01:05s -0:01:05 -
+Rule sol89 1989 only - Dec 28 12:01:35s -0:01:35 -
+Rule sol89 1989 only - Dec 29 12:02:00s -0:02:00 -
+Rule sol89 1989 only - Dec 30 12:02:30s -0:02:30 -
+Rule sol89 1989 only - Dec 31 12:03:00s -0:03:00 -
+
+# Riyadh is at about 46 degrees 46 minutes East: 3 hrs, 7 mins, 4 secs
+# Before and after 1989, we'll operate on local mean solar time.
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Mideast/Riyadh89 3:07:04 - ?? 1989
+ 3:07:04 sol89 ?? 1990
+ 3:07:04 - ??
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/southamerica amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/southamerica
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/southamerica Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/southamerica Sat Sep 28 00:00:00 1996
@@ -0,0 +1,103 @@
+# @(#)southamerica 4.3
+
+# From Guy Harris:
+# From Official Airline Guide - Worldwide Edition (1987). Countries not
+# listed here do not observe DST, according to the OAG. Time zone names
+# are pure inventions, and none are supplied for countries not observing
+# DST; updates from natives would be appreciated. The times that DST
+# starts and ends are based on the assumption that they switch a 2AM just
+# as everybody else does.
+
+###############################################################################
+
+# Brazil
+
+# From Guy Harris:
+# The OAG lists October 25, 1987 and February 12, 1988 as the starting and
+# ending dates, giving them as "estimated date(s) based on previous year". We
+# infer a rule here from one example, always a dangerous practice.... Yes,
+# they really do switch on Saturday, according to the OAG.
+# "Brazil/Acre" is for the Territory of Acre; "Brazil/DeNoronha" is for
+# Fernando De Noronha.
+
+# From Bob Devine (January 28, 1988):
+# The only information I found is that there was no DST up to 1985.
+# But there was some before 1952!
+
+# From U. S. Naval Observatory (January 16, 1989):
+# BRAZIL WEST 5 H BEHIND UTC TERRITORY OF ACRE
+# BRAZIL WEST 4 H BEHIND UTC ACRE OCT 23, '88-FEB 11,
+# BRAZIL '89 (ESTIMATED)
+# BRAZIL CENTRAL 4 H BEHIND UTC MANAUS
+# BRAZIL CENTRAL 3 H BEHIND UTC MANAUS OCT 23, '88-FEB 11,
+# BRAZIL CENTRAL '89 (ESTIMATED)
+# BRAZIL EAST 3 H BEHIND UTC COASTAL STATES, RIO, SAO
+# BRAZIL EAST PAULO, BRASILIA
+# BRAZIL EAST 2 H BEHIND UTC COASTAL STATES, RIO, SAO
+# BRAZIL PAULO, BRASILIA OCT 23,
+# BRAZIL '88-FEB 11, '89
+# BRAZIL (ESTIMATED)
+# BRAZIL 2 H BEHIND UTC ATLANTIC ISLANDS, FERNANDO
+# BRAZIL DE NORONHA
+# BRAZIL 1 H BEHIND UTC OCT 23, '88-FEB 11, '89
+# BRAZIL (ESTIMATED)
+# BRAZIL 3 H BEHIND UTC FOR MOST MAJOR AIRPORTS.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Brazil 1987 max - Feb Sat<=14 2:00 0 S
+Rule Brazil 1987 max - Oct Sat<=28 2:00 1:00 D
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Brazil/East -3:00 Brazil E%sT
+Zone Brazil/West -4:00 Brazil W%sT
+Zone Brazil/Acre -5:00 Brazil A%sT
+Zone Brazil/DeNoronha -2:00 Brazil F%sT
+
+###############################################################################
+
+# Chile
+
+# From Guy Harris:
+# The OAG lists October 11, 1987 and March 12, 1988 as the starting and
+# ending dates, giving them as "estimated date(s) based on previous year."
+
+# From Bob Devine (January 28, 1988):
+# Chile has had 2nd Sunday in October to 2nd Sunday in March DST since 1977.
+# Switch is at midnight. OAG is right.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Chile 1977 max - Oct Sun>=8 0:00 1:00 D
+Rule Chile 1978 max - Mar Sun>=8 0:00 0 S
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone Chile/Continental -4:00 Chile C%sT
+Zone Chile/EasterIsland -6:00 Chile E%sT
+
+###############################################################################
+
+# Paraguay
+
+# From Bob Devine (January 28, 1988):
+# Paraguay: First day in October to last in March. Midnight switch??
+# Since 1980.
+
+# From U. S. Naval Observatory (January 19, 1989):
+# PARAGUAY 4 H BEHIND UTC
+# PARAGUAY 3 H BEHIND UTC OCT 1, '88-MAR 31, '89
+
+# From Arthur David Olson (January 21, 1989):
+# Still don't know time of day when switch occurs. Punt.
+
+###############################################################################
+
+# Argentina
+
+# From Bob Devine (January 28, 1988):
+# Argentina: first Sunday in October to first Sunday in April since 1976.
+# Double Summer time from 1969 to 1974. Switches at midnight.
+
+# From U. S. Naval Observatory (January 19, 19889):
+# ARGENTINA 3 H BEHIND UTC
+
+# From Arthur David Olson (January 21, 1989):
+# OAG, USNO and Bob have different data. Punt.
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/systemv amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/systemv
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/systemv Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/systemv Sat Sep 28 00:00:00 1996
@@ -0,0 +1,35 @@
+# @(#)systemv 4.1
+
+# Old rules, should the need arise.
+# No attempt is made to handle Newfoundland, since it cannot be expressed
+# using the System V "TZ" scheme (half-hour offset), or anything outside
+# North America (no support for non-standard DST start/end dates), nor
+# the change in the DST rules in the US in 1987 (can't split between
+# Canada, with no changes, and the US)
+#
+# Be sure to compile this *without* leap second correction for true conformance.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D
+Rule SystemV min 1973 - Oct lastSun 2:00 0 S
+Rule SystemV 1974 only - Jan 6 2:00 1:00 D
+Rule SystemV 1974 only - Nov lastSun 2:00 0 S
+Rule SystemV 1975 only - Feb 23 2:00 1:00 D
+Rule SystemV 1975 only - Oct lastSun 2:00 0 S
+Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D
+Rule SystemV 1976 max - Oct lastSun 2:00 0 S
+
+# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+Zone SystemV/AST4ADT -4:00 SystemV A%sT
+Zone SystemV/EST5EDT -5:00 SystemV E%sT
+Zone SystemV/CST6CDT -6:00 SystemV C%sT
+Zone SystemV/MST7MDT -7:00 SystemV M%sT
+Zone SystemV/PST8PDT -8:00 SystemV P%sT
+Zone SystemV/YST9YDT -9:00 SystemV Y%sT
+Zone SystemV/AST4 -4:00 - AST
+Zone SystemV/EST5 -5:00 - EST
+Zone SystemV/CST6 -6:00 - CST
+Zone SystemV/MST7 -7:00 - MST
+Zone SystemV/PST8 -8:00 - PST
+Zone SystemV/YST9 -9:00 - YST
+Zone SystemV/HST10 -10:00 - HST
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1988 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1988
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1988 Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1988 Sat Sep 28 00:00:00 1996
@@ -0,0 +1,111 @@
+# @(#)usno1988 1.1
+#
+# From Arthur David Olson (January 19, 1989):
+#
+# Here's some United States Naval Observatory time zone data from
+# February 1988. It's here mostly to convince you that the USNO has indeed
+# been updating its files (see its 1989 data elsewhere).
+#
+ANDORRA 1 H AHEAD OF UTC
+ARGENTINA 3 H BEHIND UTC
+BRASIL WEST 5 H BEHIND UTC (CRUZEIRO DO SUL)
+BRASIL CENTRAL 4 H BEHIND UTC (MANAUS)
+BRASIL EAST 3 H BEHIND UTC COASTAL STATES, RIO, SP, BRASILIA
+BRASIL 2 H BEHIND UTC ATLANTIC ISLANDS
+BRAZIL 5 H BEHIND UTC WEST (CRUZEIRO DO SUL)
+BRAZIL 4 H BEHIND UTC CENTRAL (MANAUS)
+BRAZIL 3 H BEHIND UTC COASTAL STATES, RIO, SP, BRASILIA
+BRAZIL 3 H BEHIND UTC FOR MOST MAJOR AIRPORTS.
+BRAZIL 2 H BEHIND UTC ATLANTIC ISLANDS
+BULGARIA 2 H AHEAD OF UTC WINTER
+BULGARIA 3 H AHEAD OF UTC SUMMER MAR31 - SEP 85, 0100 LOCAL
+CHINA 8 H AHEAD OF UTC; ALL OF CHINA, INCL TAIWAN
+CUBA 5 H BEHIND UTC IN WINTER
+CUBA 4 H BEHIND UTC MAY 8 - OCT 8
+CYPRUS 2 H AHEAD UTC IN WINTER
+CYPRUS 3 H AHEAD UTC MAR 25 - SEP 30
+DENMARK 1 H AHEAD UTC IN WINTER
+DENMARK 2 H AHEAD UTC MAR 31 - SEP 30 , 0200 LOCAL
+DENMK. FAEROE IS 1 H AHEAD UTC MAR 31 - SEP 30 , 0200 LOCAL
+EGYPT 2 H AHEAD UTC
+EGYPT 3 H AHEAD UTC SUMMER (AFTER RAMADAN)
+ENGLAND ON UTC IN WINTER; WALES, SCOTLAND, N.I., CH.IS.
+ENGLAND 1 H AHEAD OF UTC; SUMMER TIL 28 OCT 0200 LOCAL
+FINLAND 2 H AHEAD OF UTC IN WINTER
+FINLAND 3 H AHEAD OF UTC MAR 25 - SEP 30
+FRANCE 1 H AHEAD OF UTC IN WINTER
+FRANCE 2 H AHEAD OF UTC MAR 31 - SEP 30 , 0100 LOCAL
+GREECE 2 H AHEAD OF UTC IN WINTER
+GREECE 3 H AHEAD OF UTC IN SUMMER EFF. 31MAR85 02/03 LOCAL
+GREECE 3 H AHEAD OF UTC MAR 25 - SEP 30
+GREENLAND 4 H BEHIND UTC IN THULE AIRBASE YEAR ROUND
+GREENLAND 3 H BEHIND UTC IN WINTER AT SONDRESTROM
+GREENLAND 2 H BEHIND UTC 30 MAR - 30 SEP 2200 LOCAL AT -"-
+GREENLAND 2 H BEHIND UTC AROUND SCORESBY SUND
+ICELAND ON UTC
+IRAN 3.5H AHEAD OF UTC
+IRELAND ON UTC IN WINTER
+IRELAND 1 H AHEAD OF UTC MAR 31 - OCT 23 0200 LOCAL
+ITALY 1 H AHEAD OF UTC IN WINTER
+ITALY 2 H AHEAD OF UTC MAR 31 - SEP 30, 0030 LOCAL
+JAMAICA 5 H BEHIND UTC IN WINTER
+JAMAICA 4 H BEHIND UTC APR 29 - OCT 29
+LIBYA 2 H AHEAD OF UTC
+MEXICO BAJA CAL N 8 H BEHIND UTC IN WINTER; NORTH BAJA CAL, TIJUANA
+MEXICO BAJA CAL N 7 H BEHIND UTC APR 29 - OCT 29
+MEXICO BAJA CAL S 7 H BEHIND UTC ALL YEAR; MAZATLAN
+MEXICO CENTRAL 6 H BEHIND UTC ALL YEAR; MEXICO CITY
+MONACO 1 H AHEAD UTC IN WINTER
+MONACO 2 H AHEAD UTC MAR 25 - SEP30
+PARAGUAY 4 H BEHIND UTC IN WINTER
+PARAGUAY 3 H BEHIND UTC SEP 30 - MAR 30
+POLAND 1 H AHEAD OF UTC IN WINTER
+POLAND 2 H AHEAD OF UTC MAR 24 - SEP 0200 LOCAL
+PORTUGAL ON UTC IN WINTER
+PORTUGAL 1 H AHEAD OF UTC IN SUMMER MAR 31 - SEP 29 0100 LOCAL
+PORTUGAL AZORES 1 H BEHIND UTC IN WINTER
+PORTUGAL AZORES ON UTC IN SUMMER MAR 31 - SEP 29
+PORTUGAL MADEIRA ON UTC ALL YEAR;
+ROMANIA 2 H AHEAD OF UTC IN WINTER
+ROMANIA 3 H AHEAD OF UTC APR 3 - SEP 24
+SCOTLAND SEE ENGLAND
+SWITZERLAND 1 H AHEAD OF UTC IN WINTER
+SWITZERLAND 2 H AHEAD OF UTC MAR 31 - SEP 30 0200 LOCAL
+TURKEY 3 H AHEAD OF UTC
+USA EASTERN 5 H BEHIND UTC IN WINTER; NEW YORK, WASHINGTON
+USA EASTERN 4 H BEHIND UTC APR 29 - OCT 29
+USA CENTRAL 6 H BEHIND UTC IN WINTER; CHICAGO, HOUSTON
+USA CENTRAL 5 H BEHIND UTC APR 29 - OCT 29
+USA MOUNTAIN 7 H BEHIND UTC IN WINTER; DENVER
+USA MOUNTAIN 6 H BEHIND UTC APR 29 - OCT 29
+USA PACIFIC 8 H BEHIND UTC IN WINTER; L.A., SAN FRANCISCO
+USA PACIFIC 7 H BEHIND UTC APR 29 - OCT 29
+USA ALASKA STD 9 H BEHIND UTC IN WINTER; MOST OF ALASKA (AKST)
+USA ALASKA STD 8 H BEHIND UTC APR 29 - OCT 29 (AKDT)
+USA ALEUTIAN 10 H BEHIND UTC IN WINTER; ISLANDS WEST OF 170W
+USA - " - 9 H BEHIND UTC APR 29 - OCT 29
+USA HAWAII 10 H BEHIND UTC ALL YEAR;
+USA BERING 11 H BEHIND UTC ALL YEAR; SAMOA, MIDWAY
+USSR WEST EUROP 3 H AHEAD OF UTC IN WINTER; LENINGRAD, MOSCOW
+USSR WEST EUROP 4 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL EUR 4 H AHEAD OF UTC IN WINTER; ROSTOV, BAKU
+USSR CENTRAL EUR 5 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST EUROP 5 H AHEAD OF UTC IN WINTER; SVERDLOVSK
+USSR EAST EUROP 6 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST SIBERIAN 6 H AHEAD OF UTC IN WINTER; TASHKENT, ALMA ATA
+USSR WEST SIBERIAN 7 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST-CENTRAL 7 H AHEAD OF UTC IN WINTER; NOVOSIBIRSK
+USSR WEST-CENTRAL 8 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST-CENTRAL 8 H AHEAD OF UTC IN WINTER; IRKUTSK
+USSR WEST-CENTRAL 9 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL SIB 9 H AHEAD OF UTC IN WINTER; YAKUTSK
+USSR CENTRAL SIB 10 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL SIB 10 H AHEAD OF UTC IN WINTER; VLADIVOSTOK
+USSR CENTRAL SIB 11 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 11 H AHEAD OF UTC IN WINTER; MAGADAN
+USSR EAST SIBERIA 12 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 12 H AHEAD OF UTC IN WINTER; PETROPAVLOVSK
+USSR EAST SIBERIA 13 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 13 H AHEAD OF UTC IN WINTER; UELEN
+USSR EAST SIBERIA 14 H AHEAD OF UTC APR 1 - SEP 30
+WALES SEE ENGLAND
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1989 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1989
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1989 Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1989 Sat Sep 28 00:00:00 1996
@@ -0,0 +1,452 @@
+# @(#)usno1989 1.3
+#
+# From Arthur David Olson (January 19, 1989):
+#
+# Here's time zone information from the United States Naval Observatory;
+# no corrections have been made, and there are some obvious challenges.
+# The USNO warns:
+# DUE TO FREQUENT CHANGES IN THE LOCAL LAWS GOVERNING DAYLIGHT
+# SAVING TIME, WE CANNOT GUARANTEE THE ACCURACY OF THIS
+# INFORMATION. PLEASE ALERT US TO ANY DISCREPANCY YOU MAY
+# DISCOVER.
+#
+AFGHANISTAN 4.5H AHEAD OF UTC
+ALBANIA 1 H AHEAD OF UTC
+ALBANIA 2 H AHEAD OF UTC MAR 27 - SEP 24
+ALBANIA (ESTIMATED)
+ALGERIA 1 H AHEAD OF UTC
+AMERICAN SAMOA 11 H BEHIND UTC
+ANDORRA 1 H AHEAD OF UTC
+ANDORRA 2 H AHEAD OF UTC MAR 27 - SEP 24
+ANDORRA (ESTIMATED)
+ANGOLA 1 H AHEAD OF UTC
+ARGENTINA 3 H BEHIND UTC
+ARUBA 4 H BEHIND UTC ALSO BONAIRE, CURACAO,
+ARUBA ST.MAARTEN
+AUSTRALIA WEST 8 H AHEAD OF UTC PERTH, EXMOUTH
+AUSTRALIA N.T. 9.5H AHEAD OF UTC DARWIN NO ADVANCED TIME
+AUSTRALIA N.T. IN SUMMER
+AUSTRALIA SOUTH 9.5H AHEAD OF UTC ADELAIDE
+AUSTRALIA INCLUDING BROKEN HILL, NSW
+AUSTRALIA SOUTH 10.5H AHEAD OF UTC ADELAIDE OCT 30, '88-MAR
+AUSTRALIA SOUTH 18, '89 INCLUDING BROKEN
+AUSTRIALIA SOUTH HILL, NSW
+AUSTRALIA QUEENL 10 H AHEAD OF UTC
+AUSTRALIA NSW 10 H AHEAD OF UTC SYDNEY
+AUSTRALIA NSW 11 H AHEAD OF UTC SYDNEY OCT 30, '88-MAR 18,
+AUSTRALIA NSW '89
+AUSTRALIA TASM. 10 H AHEAD OF UTC HOBART
+AUSTRALIA TASM. 11 H AHEAD OF UTC HOBART OCT 30, '88-MAR 18,
+AUSTRALIA TASM. '89
+AUSTRIA 1 H AHEAD OF UTC
+AUSTRIA 2 H AHEAD OF UTC MAR 27 - SEPT 24
+AZORES SEE PORTUGAL
+BAHAMAS 5 H BEHIND UTC EXCLUDING TURKS AND CAICOS
+BAHAMAS ISLANDS)
+BAHAMAS 4 H BEHIND UTC APR 3 - OCT 29 (SAME
+BAHAMAS EXCLUSION)
+BAHRAIN 3 H AHEAD OF UTC
+BANGLADESH 6 H AHEAD OF UTC
+BARBADOS 4 H BEHIND UTC
+BELGIUM 1 H AHEAD OF UTC
+BELGIUM 2 H AHEAD OF UTC MAR 27 - SEP 24
+BELIZE 6 H BEHIND UTC
+BENIN PEOPLES REP 1 H AHEAD OF UTC DAHOMEY
+BERMUDA 4 H BEHIND UTC
+BERMUDA 3 H BEHIND UTC APR 3 - OCT 29
+BHUTAN 6 H AHEAD OF UTC
+BOLIVIA 4 H BEHIND UTC
+BONAIRE 4 H BEHIND UTC ALSO ARUBA,CURACAO,
+BONAIRE ST.MAARTEN, SABA
+BOTSWANA 2 H AHEAD OF UTC
+BRAZIL WEST 5 H BEHIND UTC TERRITORY OF ACRE
+BRAZIL WEST 4 H BEHIND UTC ACRE OCT 23, '88-FEB 11,
+BRAZIL '89 (ESTIMATED)
+BRAZIL CENTRAL 4 H BEHIND UTC MANAUS
+BRAZIL CENTRAL 3 H BEHIND UTC MANAUS OCT 23, '88-FEB 11,
+BRAZIL CENTRAL '89 (ESTIMATED)
+BRAZIL EAST 3 H BEHIND UTC COASTAL STATES, RIO, SAO
+BRAZIL EAST PAULO, BRASILIA
+BRAZIL EAST 2 H BEHIND UTC COASTAL STATES, RIO, SAO
+BRAZIL PAULO, BRASILIA OCT 23,
+BRAZIL '88-FEB 11, '89
+BRAZIL (ESTIMATED)
+BRAZIL 2 H BEHIND UTC ATLANTIC ISLANDS, FERNANDO
+BRAZIL DE NORONHA
+BRAZIL 1 H BEHIND UTC OCT 23, '88-FEB 11, '89
+BRAZIL (ESTIMATED)
+BRAZIL 3 H BEHIND UTC FOR MOST MAJOR AIRPORTS.
+BRITISH VIRGIN I. 4 H BEHIND UTC
+BRUNEI 8 H AHEAD OF UTC
+BULGARIA 2 H AHEAD OF UTC
+BULGARIA 3 H AHEAD OF UTC MAR 27 - SEP 24
+BURKINA FASO ON UTC
+BURMA 6.5H AHEAD OF UTC
+BURUNDI 2 H AHEAD OF UTC
+CAMBODIA SEE KAMPUCHEA
+CAMEROON 1 H AHEAD OF UTC
+CANADA NEW FDL 3.5H BEHIND UTC ST.JOHN'S
+CANADA NEW FDL 1.5H BEHIND UTC APR 3 - OCT 29
+CANADA ATLANTIC 4 H BEHIND UTC HALIFAX
+CANADA ATLANTIC 3 H BEHIND UTC APR 3 - OCT 29
+CANADA EASTERN 5 H BEHIND UTC TORONTO, MONTREAL, OTTAWA
+CANADA EASTERN 4 H BEHIND UTC APR 3 - OCT 29
+CANADA CENTRAL 6 H BEHIND UTC REGINA, WINNIPEG
+CANADA CENTRAL 5 H BEHIND UTC APR 3 - OCT 29
+CANADA MOUNTAIN 7 H BEHIND UTC CALGARY, EDMONTON
+CANADA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 29
+CANADA PACIFIC 8 H BEHIND UTC VANCOUVER
+CANADA PACIFIC 7 H BEHIND UTC APR 3 - OCT 29
+CANADA YUKON SAME AS PACIFIC DAWSON
+CAPE VERDE 1 H BEHIND UTC
+CAYMAN ISLANDS 5 H BEHIND UTC
+CAROLINE ISLAND 10 H AHEAD OF UTC EXCLUDING PONAPE IS.,
+CAROLINE ISLAND KUSAIE, AND PINGELAP
+CENTRAL AFRICA 1 H AHEAD OF UTC
+CEYLON 5.5H AHEAD OF UTC, SEE SRI LANKA
+CHAD 1 H AHEAD OF UTC
+CHANNEL ISLANDS SEE ENGLAND
+CHILE 4 H BEHIND UTC CONTINENTAL
+CHILE 3 H BEHIND UTC OCT 9, '88-MAR 11, '89
+CHILE 6 H BEHIND UTC EASTER ISLAND
+CHILE 5 H BEHIND UTC OCT 9, '88-MAR 11, '89
+CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN
+CHINA 9 H AHEAD OF UTC APR 17 - SEP 10
+COCOS (Keeling) I. 6.5H AHEAD OF UTC
+COLOMBIA 5 H BEHIND UTC
+COMOROS 3 H AHEAD OF UTC
+CONGO 1 H AHEAD OF UTC
+COOK ISLANDS 10 H BEHIND UTC
+COOK ISLANDS 9.5H BEHIND UTC OCT 30, '88-MAR 24, '89
+COOK ISLANDS (ESTIMATED)
+COSTA RICA 6 H BEHIND UTC
+COTE D'IVOIRE ON UTC
+CUBA 5 H BEHIND UTC
+CUBA 4 H BEHIND UTC MAR 20 - OCT 8
+CURACAO 4 H BEHIND UTC ALSO BONAIRE, ARUBA,
+CURACAO ST.MAARTEN
+CYPRUS 2 H AHEAD OF UTC
+CYPRUS 3 H AHEAD OF UTC MAR 27 - SEP 24
+CZECHOSLOVAKIA 1 H AHEAD OF UTC
+CZECHOSLOVAKIA 2 H AHEAD OF UTC MAR 27 - SEP 24
+DENMARK 1 H AHEAD OF UTC
+DENMARK 2 H AHEAD OF UTC MAR 27 - SEP 24
+DENMK. FAEROE IS 1 H AHEAD OF UTC MAR 27 - SEP 24
+DJIBOUTI 3 H AHEAD OF UTC
+DOMINICA 4 H BEHIND UTC
+DOMINICAN REP 4 H BEHIND UTC
+ECUADOR 5 H BEHIND UTC CONTINENTAL
+ECUADOR 6 H BEHIND UTC GALAPAGOS ISLANDS
+EGYPT 2 H AHEAD OF UTC
+EGYPT 3 H AHEAD OF UTC MAY 17 - SEP 30 (AFTER
+EGYPT RAMADAN)
+EL SALVADOR 6 H BEHIND UTC
+ENGLAND ON UTC (WALES, SCOTLAND, N.I.,
+ENGLAND CH. IS.)
+ENGLAND 1 H AHEAD OF UTC MAR 27 - OCT 22
+ENEZUELA 4 H BEHIND UTC
+EQUITORIAL GUINEA 1 H AHEAD OF UTC
+ETHIOPIA 3 H AHEAD OF UTC
+FALKLAND ISLANDS 4 H BEHIND UTC
+FALKLAND ISLANDS 3 H BEHIND UTC SEP 11, '88-APR 15, '89
+FALKLAND ISLANDS (ESTIMATED)
+FAROE ISLAND ON UTC
+FAROE ISLAND 1 H AHEAD OF UTC MAR 27 - SEP 24
+FIJI 12 H AHEAD OF UTC
+FINLAND 2 H AHEAD OF UTC
+FINLAND 3 H AHEAD OF UTC MAR 27 - SEP 24
+FRANCE 1 H AHEAD OF UTC
+FRANCE 2 H AHEAD OF UTC MAR 27 - SEP 24
+FRENCH GUIANA 3 H BEHIND UTC
+FRENCH POLYNESIA 9 H BEHIND UTC GAMBIER ISLAND
+FRENCH POLYNESIA 9.5H BEHIND UTC MARQUESAS ISLANDS
+FRENCH POLYNESIA 10 H BEHIND UTC SOCIETY ISLANDS, TUBUAI
+FRENCH POLYNESIA ISLANDS, TUAMOTU ISLAND,
+FRENCH POLYNESIA TAHITI
+GABON 1 H AHEAD OF UTC
+GAMBIA ON UTC
+GERMANY ALL 1 H AHEAD OF UTC
+GERMANY ALL 2 H AHEAD OF UTC MAR 27 - SEP 24
+GHANA ON UTC
+GIBRALTAR 1 H AHEAD OF UTC
+GIBRALTAR 2 H AHEAD OF UTC MAR 27 - SEP 24
+GREECE 2 H AHEAD OF UTC
+GREECE 3 H AHEAD OF UTC MAR 27 - SEP 24
+GREENLAND 4 H BEHIND UTC THULE AIRBASE YEAR ROUND
+GREENLAND 3 H BEHIND UTC ANGMAGSSALIK AND W. COAST
+GREENLAND 2 H BEHIND UTC MAR 27 - SEP 24
+GREENLAND 1 H BEHIND UTC SCORESBYSUND
+GREENLAND ON UTC MAR 27 - SEP 24
+GRENADA 4 H BEHIND UTC
+GUADELOUPE 4 H BEHIND UTC ST. BARTHELEMY, NORTHERN
+GUADELOUPE ST. MARTIN MARTINIQUE
+GUAM 10 H AHEAD OF UTC
+GUATEMALA 6 H BEHIND UTC
+GUINEA ON UTC
+GUINEA BISSAU ON UTC
+GUINEA REPUBLIC ON UTC
+GUINEA EQUATORIAL 1 H AHEAD OF UTC
+GUYANA 3 H BEHIND UTC
+HAITI 5 H BEHIND UTC
+HAITI 4 H BEHIND UTC APR 3 - OCT 29
+HOLLAND SEE NETHERLANDS
+HONDURAS 6 H BEHIND UTC
+HONG KONG 8 H AHEAD OF UTC
+HUNGARY 1 H AHEAD OF UTC
+HUNGARY 2 H AHEAD OF UTC MAR 27 - SEP 24
+ICELAND ON UTC
+INDIA 5.5H AHEAD OF UTC INCLUDING ANDAMAN ISLANDS
+INDONESIA WEST 7 H AHEAD OF UTC SUMATRA, JAVA, BALI,
+INDONESIA WEST JAKARTA
+INDONESIA CENTRAL 8 H AHEAD OF UTC KALIMANTAN, SULAWESI
+INDONESIA EAST 9 H AHEAD OF UTC IRIAN, BARAT
+IRAN 3.5H AHEAD OF UTC
+IRAQ 3 H AHEAD OF UTC
+IRAQ 4 H AHEAD OF UTC APR 1 - SEP 30
+IRELAND ON UTC
+IRELAND 1 H AHEAD OF UTC MAR 27 - OCT 22
+ISRAEL 2 H AHEAD OF UTC
+ISRAEL 3 H AHEAD OF UTC APR 10 - SEP 3
+ITALY 1 H AHEAD OF UTC
+ITALY 2 H AHEAD OF UTC MAR 27 - SEP 24
+IVORY COAST ON UTC
+IWAN 8 H AHEAD OF UTC
+JAMAICA 5 H BEHIND UTC
+JAPAN 9 H AHEAD OF UTC
+JOHNSTON ISLAND 10 H BEHIND UTC
+JORDAN 2 H AHEAD OF UTC
+JORDAN 3 H AHEAD OF UTC APR 1 - OCT 6
+KAMPUCHEA 7 H AHEAD OF UTC
+KENYA 3 H AHEAD OF UTC
+KIRIBATI, REP OF 12 H AHEAD OF UTC CANTON, ENDERBURY ISLANDS
+KIRIBATI, REP OF 11 H AHEAD OF UTC CHRISTMAS ISLAND
+KOREA 9 H AHEAD OF UTC
+KOREA, REP OF 9 H AHEAD OF UTC
+KOREA, REP OF 10 H AHEAD OF UTC MAY 8 - OCT 8
+KUWAIT 3 H AHEAD OF UTC
+KUSAIE, PINGELAP 12 H AHEAD OF UTC INCLUDING MARSHALL IS.,
+KUSAIE, PINGELAP EXCLUDING KWAJALEIN)
+KWAJALEIN 12 H BEHIND UTC
+LAOS 7 H AHEAD OF UTC
+LEBANON 2 H AHEAD OF UTC
+LEBANON 3 H AHEAD OF UTC JUN 1 - OCT 31
+LEEWARD ISLANDS 4 H BEHIND UTC ANTIGUA, DOMINICA,
+LEEWARD ISLANDS MONTSERRAT, ST.
+LEEWARD ISLAANDS CHRISTOPHER, ST. KITTS,
+LEEWARD ISLANDS NEVIS, ANGUILLA
+LESOTHO 2 H AHEAD OF UTC
+LIBERIA ON UTC
+LIBYAN ARAB 1 H AHEAD OF UTC JAMAHIRIYA/LIBYA
+LIBYAN ARAB 2 H AHEAD OF UTC APR 1 - SEP 30 JAMAHIRIYA/LIBYA
+LIECHTENSTEIN 1 H AHEAD OF UTC
+LIECHTENSTEIN 2 H AHEAD OF UTC MAR 27 - SEP 24
+LUXEMBOURG 1 H AHEAD OF UTC
+LUXEMBOURG 2 H AHEAD OF UTC MAR 27 - SEP 24
+MACAO 8 H AHEAD OF UTC
+MADAGASCAR 3 H AHEAD OF UTC
+MADEIRA SEE PORTUGAL
+MALAWI 2 H AHEAD OF UTC
+MALAYSIA 8 H AHEAD OF UTC
+MALDIVES 5 H AHEAD OF UTC
+MALI ON UTC
+MALTA 1 H AHEAD OF UTC
+MALTA 2 H AHEAD OF UTC MAR 27 - SEP 24
+MARTINIQUE 4 H BEHIND UTC
+MAURITANIA ON UTC
+MAURITIUS 4 H AHEAD OF UTC
+MARIANA ISLAND 10 H AHEAD OF UTC EXCLUDING GUAM
+MEXICO BAJA CAL N 7 H BEHIND UTC BAJA CALIFORNIA SUR AND
+MEXICO BAJA CAL N N. PACIFIC COAST (STATES
+MEXICO BAJA CAL N OF SINALOA AND SONORA)
+MEXICO BAJA CAL N 8 H BEHIND UTC ABOVE 28TH PARALLAL APR 3
+MEXICO BAJA CAL N - OCT 29
+MEXICO BAJA CAL N 7 H BEHIND UTC ABOVE 28TH PARALLAL APR 3
+MEXICO BAJA CAL N - 0CT 29
+MEXICO 6 H BEHIND UTC STATES OF DURANGO,
+MEXICO COAHUILA, NUEVO LEON,
+MEXICO TAMAULIPAS
+MEXICO 5 H BEHIND UTC STATES OF DURANGO,
+MEXICO COAHUILA, NUEVO LEON,
+MEXICO TAMAULIPAS APR 3 - OCT 29
+MEXICO 6 H BEHIND UTC GENERAL MEXICO, STATES OF
+MEXICO CAMPECHE, QUINTANA ROO AND
+MEXICO YUCATAN
+MIDWAY ISLAND 11 H BEHIND UTC
+MONACO 1 H AHEAD OF UTC
+MONACO 2 H AHEAD OF UTC MAR 27 - SEP 24
+MONGOLIA 8 H AHEAD OF UTC
+MONGOLIA 9 H AHEAD OF UTC MAR 27 - SEP 24
+MONTSERRAT 4 H BEHIND UTC
+MOROCCO ON UTC
+MOZAMBIQUE 2 H AHEAD OF UTC
+NAMIBIA 2 H AHEAD OF UTC
+NAURU, REP OF 12 H AHEAD OF UTC
+NEPAL 5H45M AHEAD OF UTC
+NETHERLANDS 1 H AHEAD OF UTC
+NETHERLANDS 2 H AHEAD OF UTC MAR 27 - SEP 24
+NETHERLANDS 4 H BEHIND UTC ANTILLES AND SOUTHERN ST.
+NETHERLANDS MAARTEN
+NEW CALEDONIA 11 H AHEAD OF UTC
+NEW HEBRIDES SEE VANUATU
+NEW ZEALAND 12 H AHEAD OF UTC (EXCLUDING CHATHAM ISLAND)
+NEW ZEALAND 13 H AHEAD OF UTC OCT 30, '88-MAR 4, '89
+NEW ZEALAND 12H45M AHEAD OF UTC CHATHAM ISLAND
+NICARAGUA 6 H BEHIND UTC
+NIGER 1 H AHEAD OF UTC
+NIGERIA 1 H AHEAD OF UTC
+NIUE ISLAND 11 H BEHIND UTC
+NORFOLK ISLAND 11H30M AHEAD OF UTC
+NORTHERN IRELAND ON UTC WALES, SCOTLAND, N.I.,
+NORTHERN IRELAND CH.IS.
+NORTHERN IRELAND 1 H AHEAD OF UTC MAR 27 - OCT 22
+NORWAY 1 H AHEAD OF UTC
+NORWAY 2 H AHEAD OF UTC MAR 27 - SEP 24
+OGO ON UTC
+OMAN 4 H AHEAD OF UTC
+PACIFIC ISLAND T.T.
+PALAU ISLAND 9 H AHEAD OF UTC
+PAKISTAN 5 H AHEAD OF UTC
+PANAMA 5 H BEHIND UTC
+PAPUA NEW GUINEA 10 H AHEAD OF UTC INCLUDING BOUGAINVILLE
+PAPUA NEW GUINEA ISLAND
+PARAGUAY 4 H BEHIND UTC
+PARAGUAY 3 H BEHIND UTC OCT 1, '88-MAR 31, '89
+PERU 5 H BEHIND UTC
+PHILIPPINES 8 H AHEAD OF UTC
+PONAPE ISLAND 11 H AHEAD OF UTC
+POLAND 1 H AHEAD OF UTC
+POLAND 2 H AHEAD OF UTC MAR 27 - SEP 24
+PORTUGAL MAINLAND ON UTC
+PORTUGAL MAINLAND 1 H AHEAD OF UTC MAR 27 - SEP 24
+PORTUGAL AZORES 1 H BEHIND UTC
+PORTUGAL AZORES ON UTC MAR 27 - SEP 24
+PORTUGAL MADEIRA ON UTC
+PORTUGAL MADEIRA 1 H AHEAD OF UTC MAR 27 - SEP 24
+PUERTO RICO 4 H BEHIND UTC
+QATAR 3 H AHEAD OF UTC
+ROMANIA 2 H AHEAD OF UTC
+ROMANIA 3 H AHEAD OF UTC MAR 27 - SEP 24
+RUSSIA SEE USSR
+RWANDA 2 H AHEAD OF UTC
+SABA 4 H BEHIND UTC ALSO BONAIRE, CURACAO,
+SAMOA 11 H BEHIND UTC
+SAN MARINO 1 H AHEAD OF UTC
+SAN MARINO 2 H AHEAD OF UTC MAR 27 - SEP 24
+SAN SALVADOR 6 H BEHIND UTC
+SAO TOME ISLAND ON UTC AND PRINCIPE ISLAND
+SAUDI ARABIA 3 H AHEAD OF UTC
+SCOTLAND SEE ENGLAND
+SENEGAL ON UTC
+SEYCHELLES 4 H AHEAD OF UTC
+SIERRA LEONE ON UTC
+SINGAPORE 8 H AHEAD OF UTC
+SOLOMON ISLANDS 11 H AHEAD OF UTC EXCLUDING BOUGAINVILLE
+SOLOMON ISLANDS ISLAND
+SOMALI 3 H AHEAD OF UTC
+SOUTH AFRICA 2 H AHEAD OF UTC
+SPAIN CANARY IS ON UTC
+SPAIN CANARY IS 1 H AHEAD OF UTC MAR 27 - SEP 24
+SPAIN 1 H AHEAD OF UTC CONTINENTAL, BALEARIC AND
+SPAIN MALLORCA ISLANDS
+SPAIN 2 H AHEAD OF UTC CONTINENTAL, BALEARIC AND
+SPAIN MALLORCA ISLANDS MAR 27 -
+SPAIN SEP 24
+SPAIN MAINLAND 1 H AHEAD OF UTC MELILLA
+SPAIN MAINLAND 2 H AHEAD OF UTC MAR 27 - SEP 24
+SRI LANKA 5H30M AHEAD OF UTC
+ST.MAARTEN
+ST.KITTS-NEVIS 4 H BEHIND UTC
+ST.LUCIA 4 H BEHIND UTC
+ST.PIERRE 3 H BEHIND UTC INCLUDING MIQUELON
+ST.PIERRE 2 H BEHIND UTC INLCUDING MIQUELON APR 3
+ST.PIERRE - OCT 29
+ST.VINCENT 4 H BEHIND UTC INCLUDING THE GRENADINES
+ST. HELENA ON UTC
+SURINAME 3 H BEHIND UTC
+SWAZILAND 2 H AHEAD OF UTC
+SWEDEN 1 H AHEAD OF UTC
+SWEDEN 2 H AHEAD OF UTC MAR 27 - SEP 24
+SWITZERLAND 1 H AHEAD OF UTC
+SWITZERLAND 2 H AHEAD OF UTC MAR 27 - SEP 24
+SYRIA 2 H AHEAD OF UTC
+SYRIA 3 H AHEAD OF UTC MAR 15 - OCT 30
+TAHITI 10 H BEHIND UTC
+TANZANIA 3 H AHEAD OF UTC
+THAILAND 7 H AHEAD OF UTC
+TRINIDAD / TOBAGO 4 H BEHIND UTC
+TUNISIA 1 H AHEAD OF UTC
+TUNISIA 2 H AHEAD OF UTC APR 10 - SEP 24
+TURKEY 2 H AHEAD OF UTC
+TURKEY 3 H AHEAD OF UTC MAR 27 - SEP 24
+TURKS AND CAICOS 5 H BEHIND UTC
+TURKS AND CAICOS 4 H BEHIND UTC APR 3 - OCT 29
+TUVALU 12 H AHEAD OF UTC
+UDAN 2 H AHEAD OF UTC
+UGANDA 3 H AHEAD OF UTC
+UNITED ARAB EMIR. 4 H AHEAD OF UTC ABU DHABI, DUBAI, SHARJAH,
+UNITED ARAB EMIR RAS AL KHAIMAH
+UNITED KINGDOM ON UTC WALES, SCOTLAND, N.I., CH.
+UNITED KINGDOM IS.
+UNITED KINGDOM 1 H AHEAD OF UTC MAR 27 - OCT 22
+UNITED STATES SEE USA
+UPPER VOLTA ON UTC
+URUGUAY 3 H BEHIND UTC
+URUGUAY 2 H BEHIND UTC DEC 11, '88-FEB 25, '89
+URAGUAY (ESTIMATED)
+USA EASTERN 5 H BEHIND UTC NEW YORK, WASHINGTON
+USA EASTERN 4 H BEHIND UTC APR 3 - OCT 30
+USA CENTRAL 6 H BEHIND UTC CHICAGO, HOUSTON
+USA CENTRAL 5 H BEHIND UTC APR 3 - OCT 30
+USA MOUNTAIN 7 H BEHIND UTC DENVER
+USA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 30
+USA PACIFIC 8 H BEHIND UTC L.A., SAN FRANCISCO
+USA PACIFIC 7 H BEHIND UTC APR 3 - OCT 30
+USA ALASKA STD 9 H BEHIND UTC MOST OF ALASKA (AKST)
+USA ALASKA STD 8 H BEHIND UTC APR 3 - OCT 30 (AKDT)
+USA ALEUTIAN 10 H BEHIND UTC ISLANDS WEST OF 170W
+USA - " - 9 H BEHIND UTC APR 3 - OCT 30
+USA HAWAII 10 H BEHIND UTC
+USA BERING 11 H BEHIND UTC SAMOA, MIDWAY
+USA FOR SPECIFIC INFO ON USA ZONES/TIMES CALL DOT 202-426-4520
+USSR WEST EUROP 3 H AHEAD OF UTC LENINGRAD, MOSCOW
+USSR WEST EUROP 4 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL EUR 4 H AHEAD OF UTC ROSTOV, BAKU
+USSR CENTRAL EUR 5 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST EUROP 5 H AHEAD OF UTC SVERDLOVSK
+USSR EAST EUROP 6 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST SIBERIAN 6 H AHEAD OF UTC TASHKENT, ALMA ATA
+USSR WEST SIBERIAN 7 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST-CENTRAL 7 H AHEAD OF UTC NOVOSIBIRSK
+USSR WEST-CENTRAL 8 H AHEAD OF UTC APR 1 - SEP 30
+USSR WEST-CENTRAL 8 H AHEAD OF UTC IRKUTSK
+USSR WEST-CENTRAL 9 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL SIB 9 H AHEAD OF UTC YAKUTSK
+USSR CENTRAL SIB 10 H AHEAD OF UTC APR 1 - SEP 30
+USSR CENTRAL SIB 10 H AHEAD OF UTC VLADIVOSTOK
+USSR CENTRAL SIB 11 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 11 H AHEAD OF UTC MAGADAN
+USSR EAST SIBERIA 12 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 12 H AHEAD OF UTC PETROPAVLOVSK
+USSR EAST SIBERIA 13 H AHEAD OF UTC APR 1 - SEP 30
+USSR EAST SIBERIA 13 H AHEAD OF UTC UELEN
+USSR EAST SIBERIA 14 H AHEAD OF UTC APR 1 - SEP 30
+VANUATU 11 H AHEAD OF UTC (NEW HEBRIDES)
+VANUATU 12 H AHEAD OF UTC SEP 25, '88-MAR 25, '89
+VANUATU (ESTIMATED)
+VATICAN 1 H AHEAD OF UTC
+VATICAN 2 H AHEAD OF UTC MAR 27 - SEP 24
+VIETNAM 7 H AHEAD OF UTC
+VIRGIN ISLANDS 4 H BEHIND UTC ST.CROIX, ST.THOMAS,
+VIRGIN ISLANDS ST.JOHN
+WAKE ISLAND 12 H AHEAD OF UTC
+WALES SEE ENGLAND
+WALLIS/FUTUNA IS. 12 H AHEAD OF UTC
+WINDWARD ISLANDS 4 H BEHIND UTC GRENADA, ST. LUCIA
+YEMEN 3 H AHEAD OF UTC BOTH REPUBLICS
+YUGOSLAVIA 1 H AHEAD OF UTC
+YUGOSLAVIA 2 H AHEAD OF UTC MAR 27 - SEP 24
+ZAIRE EAST 1 H AHEAD OF UTC KINSHASA MBANDAKA
+ZAIRE WEST 2 H AHEAD OF UTC LUBUMBASHI, KASAI, KIVU,
+ZAIRE WEST HAUT-ZAIRE, SHABA
+ZAMBIA 2 H AHEAD OF UTC
+ZIMBABWE 2 H AHEAD OF UTC
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.c amiga/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.c
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,678 @@
+/* Getopt for GNU.
+ NOTE: getopt is now part of the C library, so if you don't know what
+ "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
+ before changing it!
+
+ Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+/* AIX requires this to be the first thing in the file. */
+#ifdef __GNUC__
+#define alloca __builtin_alloca
+#else /* not __GNUC__ */
+#if defined(sparc) && !defined(USG) && !defined(SVR4) && !defined(__svr4__)
+#include <alloca.h>
+#else
+#ifdef _AIX
+ #pragma alloca
+#else
+char *alloca ();
+#endif
+#endif /* sparc */
+#endif /* not __GNUC__ */
+
+#ifdef LIBC
+/* For when compiled as part of the GNU C library. */
+#include <ansidecl.h>
+#endif
+
+#include <stdio.h>
+
+/* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+#ifdef __GNU_LIBRARY__
+#undef alloca
+#include <stdlib.h>
+#include <string.h>
+#else /* Not GNU C library. */
+#define __alloca alloca
+#endif /* GNU C library. */
+
+
+#ifndef __STDC__
+#define const
+#endif
+
+/* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a
+ long-named option. Because this is not POSIX.2 compliant, it is
+ being phased out. */
+#define GETOPT_COMPAT
+
+/* This version of `getopt' appears to the caller like standard Unix `getopt'
+ but it behaves differently for the user, since it allows the user
+ to intersperse the options with the other arguments.
+
+ As `getopt' works, it permutes the elements of ARGV so that,
+ when it is done, all the options precede everything else. Thus
+ all application programs are extended to handle flexible argument order.
+
+ Setting the environment variable POSIXLY_CORRECT disables permutation.
+ Then the behavior is completely standard.
+
+ GNU application programs can use a third alternative mode in which
+ they can distinguish the relative order of options and other arguments. */
+
+#include "getopt.h"
+
+/* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when `ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+char *optarg = 0;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to `getopt'.
+
+ On entry to `getopt', zero means this is the first call; initialize.
+
+ When `getopt' returns EOF, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, `optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+int optind = 0;
+
+/* The next char to be scanned in the option-element
+ in which the last option character we returned was found.
+ This allows us to pick up the scan where we left off.
+
+ If this is zero, or a null string, it means resume the scan
+ by advancing to the next ARGV-element. */
+
+static char *nextchar;
+
+/* Callers store zero here to inhibit the error message
+ for unrecognized options. */
+
+int opterr = 1;
+
+/* Describe how to deal with options that follow non-option ARGV-elements.
+
+ If the caller did not specify anything,
+ the default is REQUIRE_ORDER if the environment variable
+ POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+ REQUIRE_ORDER means don't recognize them as options;
+ stop option processing when the first non-option is seen.
+ This is what Unix does.
+ This mode of operation is selected by either setting the environment
+ variable POSIXLY_CORRECT, or using `+' as the first character
+ of the list of option characters.
+
+ PERMUTE is the default. We permute the contents of ARGV as we scan,
+ so that eventually all the non-options are at the end. This allows options
+ to be given in any order, even with programs that were not written to
+ expect this.
+
+ RETURN_IN_ORDER is an option available to programs that were written
+ to expect options and other ARGV-elements in any order and that care about
+ the ordering of the two. We describe each non-option ARGV-element
+ as if it were the argument of an option with character code 1.
+ Using `-' as the first character of the list of option characters
+ selects this mode of operation.
+
+ The special argument `--' forces an end of option-scanning regardless
+ of the value of `ordering'. In the case of RETURN_IN_ORDER, only
+ `--' can cause `getopt' to return EOF with `optind' != ARGC. */
+
+static enum
+{
+ REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+} ordering;
+
+#ifdef __GNU_LIBRARY__
+#include <string.h>
+#define my_index strchr
+#define my_bcopy(src, dst, n) memcpy ((dst), (src), (n))
+#else
+
+/* Avoid depending on library functions or files
+ whose names are inconsistent. */
+
+char *getenv ();
+
+static char *
+my_index (string, chr)
+ char *string;
+ int chr;
+{
+ while (*string)
+ {
+ if (*string == chr)
+ return string;
+ string++;
+ }
+ return 0;
+}
+
+static void
+my_bcopy (from, to, size)
+ char *from, *to;
+ int size;
+{
+ int i;
+ for (i = 0; i < size; i++)
+ to[i] = from[i];
+}
+#endif /* GNU C library. */
+
+/* Handle permutation of arguments. */
+
+/* Describe the part of ARGV that contains non-options that have
+ been skipped. `first_nonopt' is the index in ARGV of the first of them;
+ `last_nonopt' is the index after the last of them. */
+
+static int first_nonopt;
+static int last_nonopt;
+
+/* Exchange two adjacent subsequences of ARGV.
+ One subsequence is elements [first_nonopt,last_nonopt)
+ which contains all the non-options that have been skipped so far.
+ The other is elements [last_nonopt,optind), which contains all
+ the options processed since those non-options were skipped.
+
+ `first_nonopt' and `last_nonopt' are relocated so that they describe
+ the new indices of the non-options in ARGV after they are moved. */
+
+static void
+exchange (argv)
+ char **argv;
+{
+ int nonopts_size = (last_nonopt - first_nonopt) * sizeof (char *);
+ char **temp = (char **) __alloca (nonopts_size);
+
+ /* Interchange the two blocks of data in ARGV. */
+
+ my_bcopy (&argv[first_nonopt], temp, nonopts_size);
+ my_bcopy (&argv[last_nonopt], &argv[first_nonopt],
+ (optind - last_nonopt) * sizeof (char *));
+ my_bcopy (temp, &argv[first_nonopt + optind - last_nonopt], nonopts_size);
+
+ /* Update records for the slots the non-options now occupy. */
+
+ first_nonopt += (optind - last_nonopt);
+ last_nonopt = optind;
+}
+
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+ given in OPTSTRING.
+
+ If an element of ARGV starts with '-', and is not exactly "-" or "--",
+ then it is an option element. The characters of this element
+ (aside from the initial '-') are option characters. If `getopt'
+ is called repeatedly, it returns successively each of the option characters
+ from each of the option elements.
+
+ If `getopt' finds another option character, it returns that character,
+ updating `optind' and `nextchar' so that the next call to `getopt' can
+ resume the scan with the following option character or ARGV-element.
+
+ If there are no more option characters, `getopt' returns `EOF'.
+ Then `optind' is the index in ARGV of the first ARGV-element
+ that is not an option. (The ARGV-elements have been permuted
+ so that those that are not options now come last.)
+
+ OPTSTRING is a string containing the legitimate option characters.
+ If an option character is seen that is not listed in OPTSTRING,
+ return '?' after printing an error message. If you set `opterr' to
+ zero, the error message is suppressed but we still return '?'.
+
+ If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+ so the following text in the same ARGV-element, or the text of the following
+ ARGV-element, is returned in `optarg'. Two colons mean an option that
+ wants an optional arg; if there is text in the current ARGV-element,
+ it is returned in `optarg', otherwise `optarg' is set to zero.
+
+ If OPTSTRING starts with `-' or `+', it requests different methods of
+ handling the non-option ARGV-elements.
+ See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+
+ Long-named options begin with `--' instead of `-'.
+ Their names may be abbreviated as long as the abbreviation is unique
+ or is an exact match for some defined option. If they have an
+ argument, it follows the option name in the same ARGV-element, separated
+ from the option name by a `=', or else the in next ARGV-element.
+ When `getopt' finds a long-named option, it returns 0 if that option's
+ `flag' field is nonzero, the value of the option's `val' field
+ if the `flag' field is zero.
+
+ The elements of ARGV aren't really const, because we permute them.
+ But we pretend they're const in the prototype to be compatible
+ with other systems.
+
+ LONGOPTS is a vector of `struct option' terminated by an
+ element containing a name which is zero.
+
+ LONGIND returns the index in LONGOPT of the long-named option found.
+ It is only valid when a long-named option has been found by the most
+ recent call.
+
+ If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+ long-named options. */
+
+int
+_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
+ int argc;
+ char *const *argv;
+ const char *optstring;
+ const struct option *longopts;
+ int *longind;
+ int long_only;
+{
+ int option_index;
+
+ optarg = 0;
+
+ /* Initialize the internal data when the first call is made.
+ Start processing options with ARGV-element 1 (since ARGV-element 0
+ is the program name); the sequence of previously skipped
+ non-option ARGV-elements is empty. */
+
+ if (optind == 0)
+ {
+ first_nonopt = last_nonopt = optind = 1;
+
+ nextchar = NULL;
+
+ /* Determine how to handle the ordering of options and nonoptions. */
+
+ if (optstring[0] == '-')
+ {
+ ordering = RETURN_IN_ORDER;
+ ++optstring;
+ }
+ else if (optstring[0] == '+')
+ {
+ ordering = REQUIRE_ORDER;
+ ++optstring;
+ }
+ else if (getenv ("POSIXLY_CORRECT") != NULL)
+ ordering = REQUIRE_ORDER;
+ else
+ ordering = PERMUTE;
+ }
+
+ if (nextchar == NULL || *nextchar == '\0')
+ {
+ if (ordering == PERMUTE)
+ {
+ /* If we have just processed some options following some non-options,
+ exchange them so that the options come first. */
+
+ if (first_nonopt != last_nonopt && last_nonopt != optind)
+ exchange ((char **) argv);
+ else if (last_nonopt != optind)
+ first_nonopt = optind;
+
+ /* Now skip any additional non-options
+ and extend the range of non-options previously skipped. */
+
+ while (optind < argc
+ && (argv[optind][0] != '-' || argv[optind][1] == '\0')
+#ifdef GETOPT_COMPAT
+ && (longopts == NULL
+ || argv[optind][0] != '+' || argv[optind][1] == '\0')
+#endif /* GETOPT_COMPAT */
+ )
+ optind++;
+ last_nonopt = optind;
+ }
+
+ /* Special ARGV-element `--' means premature end of options.
+ Skip it like a null option,
+ then exchange with previous non-options as if it were an option,
+ then skip everything else like a non-option. */
+
+ if (optind != argc && !strcmp (argv[optind], "--"))
+ {
+ optind++;
+
+ if (first_nonopt != last_nonopt && last_nonopt != optind)
+ exchange ((char **) argv);
+ else if (first_nonopt == last_nonopt)
+ first_nonopt = optind;
+ last_nonopt = argc;
+
+ optind = argc;
+ }
+
+ /* If we have done all the ARGV-elements, stop the scan
+ and back over any non-options that we skipped and permuted. */
+
+ if (optind == argc)
+ {
+ /* Set the next-arg-index to point at the non-options
+ that we previously skipped, so the caller will digest them. */
+ if (first_nonopt != last_nonopt)
+ optind = first_nonopt;
+ return EOF;
+ }
+
+ /* If we have come to a non-option and did not permute it,
+ either stop the scan or describe it to the caller and pass it by. */
+
+ if ((argv[optind][0] != '-' || argv[optind][1] == '\0')
+#ifdef GETOPT_COMPAT
+ && (longopts == NULL
+ || argv[optind][0] != '+' || argv[optind][1] == '\0')
+#endif /* GETOPT_COMPAT */
+ )
+ {
+ if (ordering == REQUIRE_ORDER)
+ return EOF;
+ optarg = argv[optind++];
+ return 1;
+ }
+
+ /* We have found another option-ARGV-element.
+ Start decoding its characters. */
+
+ nextchar = (argv[optind] + 1
+ + (longopts != NULL && argv[optind][1] == '-'));
+ }
+
+ if (longopts != NULL
+ && ((argv[optind][0] == '-'
+ && (argv[optind][1] == '-' || long_only))
+#ifdef GETOPT_COMPAT
+ || argv[optind][0] == '+'
+#endif /* GETOPT_COMPAT */
+ ))
+ {
+ const struct option *p;
+ char *s = nextchar;
+ int exact = 0;
+ int ambig = 0;
+ const struct option *pfound = NULL;
+ int indfound;
+
+ while (*s && *s != '=')
+ s++;
+
+ /* Test all options for either exact match or abbreviated matches. */
+ for (p = longopts, option_index = 0; p->name;
+ p++, option_index++)
+ if (!strncmp (p->name, nextchar, s - nextchar))
+ {
+ if (s - nextchar == strlen (p->name))
+ {
+ /* Exact match found. */
+ pfound = p;
+ indfound = option_index;
+ exact = 1;
+ break;
+ }
+ else if (pfound == NULL)
+ {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else
+ /* Second nonexact match found. */
+ ambig = 1;
+ }
+
+ if (ambig && !exact)
+ {
+ if (opterr)
+ fprintf (stderr, "%s: option `%s' is ambiguous\n",
+ argv[0], argv[optind]);
+ nextchar += strlen (nextchar);
+ optind++;
+ return '?';
+ }
+
+ if (pfound != NULL)
+ {
+ option_index = indfound;
+ optind++;
+ if (*s)
+ {
+ /* Don't test has_arg with >, because some C compilers don't
+ allow it to be used on enums. */
+ if (pfound->has_arg)
+ optarg = s + 1;
+ else
+ {
+ if (opterr)
+ {
+ if (argv[optind - 1][1] == '-')
+ /* --option */
+ fprintf (stderr,
+ "%s: option `--%s' doesn't allow an argument\n",
+ argv[0], pfound->name);
+ else
+ /* +option or -option */
+ fprintf (stderr,
+ "%s: option `%c%s' doesn't allow an argument\n",
+ argv[0], argv[optind - 1][0], pfound->name);
+ }
+ nextchar += strlen (nextchar);
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1)
+ {
+ if (optind < argc)
+ optarg = argv[optind++];
+ else
+ {
+ if (opterr)
+ fprintf (stderr, "%s: option `%s' requires an argument\n",
+ argv[0], argv[optind - 1]);
+ nextchar += strlen (nextchar);
+ return '?';
+ }
+ }
+ nextchar += strlen (nextchar);
+ if (longind != NULL)
+ *longind = option_index;
+ if (pfound->flag)
+ {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+ }
+ /* Can't find it as a long option. If this is not getopt_long_only,
+ or the option starts with '--' or is not a valid short
+ option, then it's an error.
+ Otherwise interpret it as a short option. */
+ if (!long_only || argv[optind][1] == '-'
+#ifdef GETOPT_COMPAT
+ || argv[optind][0] == '+'
+#endif /* GETOPT_COMPAT */
+ || my_index (optstring, *nextchar) == NULL)
+ {
+ if (opterr)
+ {
+ if (argv[optind][1] == '-')
+ /* --option */
+ fprintf (stderr, "%s: unrecognized option `--%s'\n",
+ argv[0], nextchar);
+ else
+ /* +option or -option */
+ fprintf (stderr, "%s: unrecognized option `%c%s'\n",
+ argv[0], argv[optind][0], nextchar);
+ }
+ nextchar += strlen (nextchar);
+ optind++;
+ return '?';
+ }
+ }
+
+ /* Look at and handle the next option-character. */
+
+ {
+ char c = *nextchar++;
+ char *temp = my_index (optstring, c);
+
+ /* Increment `optind' when we start to process its last character. */
+ if (*nextchar == '\0')
+ optind++;
+
+ if (temp == NULL || c == ':')
+ {
+ if (opterr)
+ {
+ if (c < 040 || c >= 0177)
+ fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
+ argv[0], c);
+ else
+ fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c);
+ }
+ return '?';
+ }
+ if (temp[1] == ':')
+ {
+ if (temp[2] == ':')
+ {
+ /* This is an option that accepts an argument optionally. */
+ if (*nextchar != '\0')
+ {
+ optarg = nextchar;
+ optind++;
+ }
+ else
+ optarg = 0;
+ nextchar = NULL;
+ }
+ else
+ {
+ /* This is an option that requires an argument. */
+ if (*nextchar != 0)
+ {
+ optarg = nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ optind++;
+ }
+ else if (optind == argc)
+ {
+ if (opterr)
+ fprintf (stderr, "%s: option `-%c' requires an argument\n",
+ argv[0], c);
+ c = '?';
+ }
+ else
+ /* We already incremented `optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ optarg = argv[optind++];
+ nextchar = NULL;
+ }
+ }
+ return c;
+ }
+}
+
+int
+getopt (argc, argv, optstring)
+ int argc;
+ char *const *argv;
+ const char *optstring;
+{
+ return _getopt_internal (argc, argv, optstring,
+ (const struct option *) 0,
+ (int *) 0,
+ 0);
+}
+
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+ the above definition of `getopt'. */
+
+int
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+
+ c = getopt (argc, argv, "abc:d:0123456789");
+ if (c == EOF)
+ break;
+
+ switch (c)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.h amiga/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.h
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,113 @@
+/* Declarations for getopt.
+ Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#ifndef _GETOPT_H_
+#define _GETOPT_H_
+
+/* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when `ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to `getopt'.
+
+ On entry to `getopt', zero means this is the first call; initialize.
+
+ When `getopt' returns EOF, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, `optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+ for unrecognized options. */
+
+extern int opterr;
+
+/* Describe the long-named options requested by the application.
+ The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+ of `struct option' terminated by an element containing a name which is
+ zero.
+
+ The field `has_arg' is:
+ no_argument (or 0) if the option does not take an argument,
+ required_argument (or 1) if the option requires an argument,
+ optional_argument (or 2) if the option takes an optional argument.
+
+ If the field `flag' is not NULL, it points to a variable that is set
+ to the value given in the field `val' when the option is found, but
+ left unchanged if the option is not found.
+
+ To have a long-named option do something other than set an `int' to
+ a compiled-in constant, such as set a value from `optarg', set the
+ option's `flag' field to zero and its `val' field to a nonzero
+ value (the equivalent single-letter option character, if there is
+ one). For long options that have a zero `flag' field, `getopt'
+ returns the contents of the `val' field. */
+
+struct option
+{
+#ifdef __STDC__
+ const char *name;
+#else
+ char *name;
+#endif
+ /* has_arg can't be an enum because some compilers complain about
+ type mismatches in all the code that assumes it is an int. */
+ int has_arg;
+ int *flag;
+ int val;
+};
+
+/* Names for the values of the `has_arg' field of `struct option'. */
+
+enum _argtype
+{
+ no_argument,
+ required_argument,
+ optional_argument
+};
+
+#ifdef __STDC__
+extern int getopt (int argc, char *const *argv, const char *shortopts);
+extern int getopt_long (int argc, char *const *argv, const char *shortopts,
+ const struct option *longopts, int *longind);
+extern int getopt_long_only (int argc, char *const *argv,
+ const char *shortopts,
+ const struct option *longopts, int *longind);
+
+/* Internal only. Users should not call this directly. */
+extern int _getopt_internal (int argc, char *const *argv,
+ const char *shortopts,
+ const struct option *longopts, int *longind,
+ int long_only);
+#else /* not __STDC__ */
+extern int getopt ();
+extern int getopt_long ();
+extern int getopt_long_only ();
+
+extern int _getopt_internal ();
+#endif /* not __STDC__ */
+
+#endif /* _GETOPT_H_ */
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/ialloc.c amiga/fsf/emacs18/amiga/unix/src/zoneinfo/ialloc.c
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/ialloc.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/ialloc.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,142 @@
+/*-
+ * Copyright (c) 1991 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Arthur David Olson of the National Cancer Institute.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)ialloc.c 5.3 (Berkeley) 4/20/91";
+#endif /* not lint */
+
+#ifdef notdef
+static char elsieid[] = "@(#)ialloc.c 8.18";
+#endif
+
+/*LINTLIBRARY*/
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef MAL
+#define NULLMAL(x) ((x) == NULL || (x) == MAL)
+#else /* !defined MAL */
+#define NULLMAL(x) ((x) == NULL)
+#endif /* !defined MAL */
+
+#define nonzero(n) (((n) == 0) ? 1 : (n))
+
+char * icalloc __P((int nelem, int elsize));
+char * icatalloc __P((char * old, const char * new));
+char * icpyalloc __P((const char * string));
+char * imalloc __P((int n));
+char * irealloc __P((char * pointer, int size));
+void ifree __P((char * pointer));
+
+char *
+imalloc(n)
+const int n;
+{
+#ifdef MAL
+ register char * result;
+
+ result = malloc((size_t) nonzero(n));
+ return NULLMAL(result) ? NULL : result;
+#else /* !defined MAL */
+ return malloc((size_t) nonzero(n));
+#endif /* !defined MAL */
+}
+
+char *
+icalloc(nelem, elsize)
+int nelem;
+int elsize;
+{
+ if (nelem == 0 || elsize == 0)
+ nelem = elsize = 1;
+ return calloc((size_t) nelem, (size_t) elsize);
+}
+
+char *
+irealloc(pointer, size)
+char * const pointer;
+const int size;
+{
+ if (NULLMAL(pointer))
+ return imalloc(size);
+ return realloc((void *) pointer, (size_t) nonzero(size));
+}
+
+char *
+icatalloc(old, new)
+char * const old;
+const char * const new;
+{
+ register char * result;
+ register oldsize, newsize;
+
+ newsize = NULLMAL(new) ? 0 : strlen(new);
+ if (NULLMAL(old))
+ oldsize = 0;
+ else if (newsize == 0)
+ return old;
+ else oldsize = strlen(old);
+ if ((result = irealloc(old, oldsize + newsize + 1)) != NULL)
+ if (!NULLMAL(new))
+ (void) strcpy(result + oldsize, new);
+ return result;
+}
+
+char *
+icpyalloc(string)
+const char * const string;
+{
+ return icatalloc((char *) NULL, string);
+}
+
+void
+ifree(p)
+char * const p;
+{
+ if (!NULLMAL(p))
+ (void) free(p);
+}
+
+void
+icfree(p)
+char * const p;
+{
+ if (!NULLMAL(p))
+ (void) free(p);
+}
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/smakefile amiga/fsf/emacs18/amiga/unix/src/zoneinfo/smakefile
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/smakefile Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/smakefile Sat Sep 28 00:00:00 1996
@@ -0,0 +1,11 @@
+CFLAGS= DEFINE=TM_GMTOFF=tm_gmtoff DEFINE=TM_ZONE=tm_zone DEFINE=emkdir=mkdir DEFINE=NOSOLAR IDIR=src:unix/include/ IGNORE=104
+
+all: zic
+
+zic: zic.o ialloc.o getopt.o
+ sc link to zic zic.o ialloc.o getopt.o lib src:unix/src/unix.lib
+
+zic.o: zic.c
+ialloc.o: ialloc.c
+getopt.o: getopt.c getopt.h
+
Binary files baseline/fsf/emacs18/amiga/unix/src/zoneinfo/zic and amiga/fsf/emacs18/amiga/unix/src/zoneinfo/zic differ
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/zic.8 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/zic.8
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/zic.8 Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/zic.8 Sat Sep 28 00:00:00 1996
@@ -0,0 +1,424 @@
+.\" Copyright (c) 1991 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" Arthur David Olson of the National Cancer Institute.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by the University of
+.\" California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" @(#)zic.8 5.2 (Berkeley) 4/20/91
+.\"
+.TH ZIC 8
+.SH NAME
+zic \- time zone compiler
+.SH SYNOPSIS
+.B zic
+[
+.B \-v
+] [
+.B \-d
+.I directory
+] [
+.B \-l
+.I localtime
+] [
+.B \-p
+.I posixrules
+] [
+.B \-L
+.I leapsecondfilename
+] [
+.B \-s
+] [
+.I filename
+\&... ]
+.SH DESCRIPTION
+.if t .ds lq ``
+.if t .ds rq ''
+.if n .ds lq \&"\"
+.if n .ds rq \&"\"
+.de q
+\\$3\*(lq\\$1\*(rq\\$2
+..
+.I Zic
+reads text from the file(s) named on the command line
+and creates the time conversion information files specified in this input.
+If a
+.I filename
+is
+.BR \- ,
+the standard input is read.
+.PP
+These options are available:
+.TP
+.BI "\-d " directory
+Create time conversion information files in the named directory rather than
+in the standard directory named below.
+.TP
+.BI "\-l " timezone
+Use the given time zone as local time.
+.I Zic
+will act as if the input contained a link line of the form
+.sp
+.ti +.5i
+Link \fItimezone\fP localtime
+.TP
+.BI "\-p " timezone
+Use the given time zone's rules when handling POSIX-format
+time zone environment variables.
+.I Zic
+will act as if the input contained a link line of the form
+.sp
+.ti +.5i
+Link \fItimezone\fP posixrules
+.TP
+.BI "\-L " leapsecondfilename
+Read leap second information from the file with the given name.
+If this option is not used,
+no leap second information appears in output files.
+.TP
+.B \-v
+Complain if a year that appears in a data file is outside the range
+of years representable by
+.IR time (2)
+values.
+.TP
+.B \-s
+Limit time values stored in output files to values that are the same
+whether they're taken to be signed or unsigned.
+You can use this option to generate SVVS-compatible files.
+.sp
+Input lines are made up of fields.
+Fields are separated from one another by any number of white space characters.
+Leading and trailing white space on input lines is ignored.
+An unquoted sharp character (#) in the input introduces a comment which extends
+to the end of the line the sharp character appears on.
+White space characters and sharp characters may be enclosed in double quotes
+(") if they're to be used as part of a field.
+Any line that is blank (after comment stripping) is ignored.
+Non-blank lines are expected to be of one of three types:
+rule lines, zone lines, and link lines.
+.PP
+A rule line has the form
+.nf
+.B
+.ti +.5i
+.ta \w'Rule\0\0'u +\w'NAME\0\0'u +\w'FROM\0\0'u +\w'1973\0\0'u +\w'TYPE\0\0'u +\w'Apr\0\0'u +\w'lastSun\0\0'u +\w'2:00\0\0'u +\w'SAVE\0\0'u
+.sp
+Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+.sp
+For example:
+.ti +.5i
+.sp
+Rule USA 1969 1973 \- Apr lastSun 2:00 1:00 D
+.sp
+.fi
+The fields that make up a rule line are:
+.TP "\w'LETTER/S'u"
+.B NAME
+Gives the (arbitrary) name of the set of rules this rule is part of.
+.TP
+.B FROM
+Gives the first year in which the rule applies.
+The word
+.B minimum
+(or an abbreviation) means the minimum year with a representable time value.
+The word
+.B maximum
+(or an abbreviation) means the maximum year with a representable time value.
+.TP
+.B TO
+Gives the final year in which the rule applies.
+In addition to
+.B minimum
+and
+.B maximum
+(as above),
+the word
+.B only
+(or an abbreviation)
+may be used to repeat the value of the
+.B FROM
+field.
+.TP
+.B TYPE
+Gives the type of year in which the rule applies.
+If
+.B TYPE
+is
+.B \-
+then the rule applies in all years between
+.B FROM
+and
+.B TO
+inclusive;
+if
+.B TYPE
+is
+.BR uspres ,
+the rule applies in U.S. Presidential election years;
+if
+.B TYPE
+is
+.BR nonpres ,
+the rule applies in years other than U.S. Presidential election years.
+If
+.B TYPE
+is something else, then
+.I zic
+executes the command
+.ti +.5i
+\fByearistype\fP \fIyear\fP \fItype\fP
+.br
+to check the type of a year:
+an exit status of zero is taken to mean that the year is of the given type;
+an exit status of one is taken to mean that the year is not of the given type.
+.TP
+.B IN
+Names the month in which the rule takes effect.
+Month names may be abbreviated.
+.TP
+.B ON
+Gives the day on which the rule takes effect.
+Recognized forms include:
+.nf
+.in +.5i
+.sp
+.ta \w'Sun<=25\0\0'u
+5 the fifth of the month
+lastSun the last Sunday in the month
+lastMon the last Monday in the month
+Sun>=8 first Sunday on or after the eighth
+Sun<=25 last Sunday on or before the 25th
+.fi
+.in -.5i
+.sp
+Names of days of the week may be abbreviated or spelled out in full.
+Note that there must be no spaces within the
+.B ON
+field.
+.TP
+.B AT
+Gives the time of day at which the rule takes effect.
+Recognized forms include:
+.nf
+.in +.5i
+.sp
+.ta \w'1:28:13\0\0'u
+2 time in hours
+2:00 time in hours and minutes
+15:00 24-hour format time (for times after noon)
+1:28:14 time in hours, minutes, and seconds
+.fi
+.in -.5i
+.sp
+Any of these forms may be followed by the letter
+.B w
+if the given time is local
+.q "wall clock"
+time or
+.B s
+if the given time is local
+.q standard
+time; in the absence of
+.B w
+or
+.BR s ,
+wall clock time is assumed.
+.TP
+.B SAVE
+Gives the amount of time to be added to local standard time when the rule is in
+effect.
+This field has the same format as the
+.B AT
+field
+(although, of course, the
+.B w
+and
+.B s
+suffixes are not used).
+.TP
+.B LETTER/S
+Gives the
+.q "variable part"
+(for example, the
+.q S
+or
+.q D
+in
+.q EST
+or
+.q EDT )
+of time zone abbreviations to be used when this rule is in effect.
+If this field is
+.BR \- ,
+the variable part is null.
+.PP
+A zone line has the form
+.sp
+.nf
+.ti +.5i
+.ta \w'Zone\0\0'u +\w'Australia/South\-west\0\0'u +\w'GMTOFF\0\0'u +\w'RULES/SAVE\0\0'u +\w'FORMAT\0\0'u
+Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+.sp
+For example:
+.sp
+.ti +.5i
+Zone Australia/South\-west 9:30 Aus CST 1987 Mar 15 2:00
+.sp
+.fi
+The fields that make up a zone line are:
+.TP "\w'GMTOFF'u"
+.B NAME
+The name of the time zone.
+This is the name used in creating the time conversion information file for the
+zone.
+.TP
+.B GMTOFF
+The amount of time to add to GMT to get standard time in this zone.
+This field has the same format as the
+.B AT
+and
+.B SAVE
+fields of rule lines;
+begin the field with a minus sign if time must be subtracted from GMT.
+.TP
+.B RULES/SAVE
+The name of the rule(s) that apply in the time zone or,
+alternately, an amount of time to add to local standard time.
+If this field is
+.B \-
+then standard time always applies in the time zone.
+.TP
+.B FORMAT
+The format for time zone abbreviations in this time zone.
+The pair of characters
+.B %s
+is used to show where the
+.q "variable part"
+of the time zone abbreviation goes.
+.TP
+.B UNTIL
+The time at which the GMT offset or the rule(s) change for a location.
+It is specified as a year, a month, a day, and a time of day.
+If this is specified,
+the time zone information is generated from the given GMT offset
+and rule change until the time specified.
+.IP
+The next line must be a
+.q continuation
+line; this has the same form as a zone line except that the
+string
+.q Zone
+and the name are omitted, as the continuation line will
+place information starting at the time specified as the
+.B UNTIL
+field in the previous line in the file used by the previous line.
+Continuation lines may contain an
+.B UNTIL
+field, just as zone lines do, indicating that the next line is a further
+continuation.
+.PP
+A link line has the form
+.sp
+.nf
+.ti +.5i
+.if t .ta \w'Link\0\0'u +\w'LINK-FROM\0\0'u
+.if n .ta \w'Link\0\0'u +\w'US/Eastern\0\0'u
+Link LINK-FROM LINK-TO
+.sp
+For example:
+.sp
+.ti +.5i
+Link US/Eastern EST5EDT
+.sp
+.fi
+The
+.B LINK-FROM
+field should appear as the
+.B NAME
+field in some zone line;
+the
+.B LINK-TO
+field is used as an alternate name for that zone.
+.PP
+Except for continuation lines,
+lines may appear in any order in the input.
+.PP
+Lines in the file that describes leap seconds have the following form:
+.nf
+.B
+.ti +.5i
+.ta \w'Leap\0\0'u +\w'YEAR\0\0'u +\w'MONTH\0\0'u +\w'DAY\0\0'u +\w'HH:MM:SS\0\0'u +\w'CORR\0\0'u
+Leap YEAR MONTH DAY HH:MM:SS CORR R/S
+.sp
+For example:
+.ti +.5i
+.sp
+Leap 1974 Dec 31 23:59:60 + S
+.sp
+.fi
+The
+.BR YEAR ,
+.BR MONTH ,
+.BR DAY ,
+and
+.B HH:MM:SS
+fields tell when the leap second happened.
+The
+.B CORR
+field
+should be
+.q +
+if a second was added
+or
+.q -
+if a second was skipped.
+The
+.B R/S
+field
+should be (an abbreviation of)
+.q Stationary
+if the leap second time given by the other fields should be interpreted as GMT
+or
+(an abbreviation of)
+.q Rolling
+if the leap second time given by the other fields should be interpreted as
+local wall clock time.
+.SH NOTE
+For areas with more than two types of local time,
+you may need to use local standard time in the
+.B AT
+field of the earliest transition time's rule to ensure that
+the earliest transition time recorded in the compiled file is correct.
+.SH FILE
+/etc/zoneinfo standard directory used for created files
+.SH "SEE ALSO"
+newctime(3), tzfile(5), zdump(8)
+.. @(#)zic.8 4.4
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/zic.c amiga/fsf/emacs18/amiga/unix/src/zoneinfo/zic.c
--- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/zic.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/zic.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,1903 @@
+/*-
+ * Copyright (c) 1991 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Arthur David Olson of the National Cancer Institute.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)zic.c 5.3 (Berkeley) 4/20/91";
+#endif /* not lint */
+
+#ifdef notdef
+static char elsieid[] = "@(#)zic.c 4.12";
+#endif
+
+#include <sys/types.h>
+#include <sys/cdefs.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <tzfile.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+
+#ifndef TRUE
+#define TRUE 1
+#define FALSE 0
+#endif /* !defined TRUE */
+
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif
+
+#ifndef EXIT_SUCCESS
+#define EXIT_SUCCESS 0
+#endif
+
+struct rule {
+ const char * r_filename;
+ int r_linenum;
+ const char * r_name;
+
+ int r_loyear; /* for example, 1986 */
+ int r_hiyear; /* for example, 1986 */
+ const char * r_yrtype;
+
+ int r_month; /* 0..11 */
+
+ int r_dycode; /* see below */
+ int r_dayofmonth;
+ int r_wday;
+
+ long r_tod; /* time from midnight */
+ int r_todisstd; /* above is standard time if TRUE */
+ /* or wall clock time if FALSE */
+ long r_stdoff; /* offset from standard time */
+ const char * r_abbrvar; /* variable part of abbreviation */
+
+ int r_todo; /* a rule to do (used in outzone) */
+ time_t r_temp; /* used in outzone */
+};
+
+/*
+** r_dycode r_dayofmonth r_wday
+*/
+
+#define DC_DOM 0 /* 1..31 */ /* unused */
+#define DC_DOWGEQ 1 /* 1..31 */ /* 0..6 (Sun..Sat) */
+#define DC_DOWLEQ 2 /* 1..31 */ /* 0..6 (Sun..Sat) */
+
+struct zone {
+ const char * z_filename;
+ int z_linenum;
+
+ const char * z_name;
+ long z_gmtoff;
+ const char * z_rule;
+ const char * z_format;
+
+ long z_stdoff;
+
+ struct rule * z_rules;
+ int z_nrules;
+
+ struct rule z_untilrule;
+ time_t z_untiltime;
+};
+
+extern char * icatalloc __P((char * old, const char * new));
+extern char * icpyalloc __P((const char * string));
+extern void ifree __P((char * p));
+extern char * imalloc __P((int n));
+extern char * irealloc __P((char * old, int n));
+extern int link __P((const char * fromname, const char * toname));
+extern char * optarg;
+extern int optind;
+static void addtt __P((time_t starttime, int type));
+static int addtype
+ __P((long gmtoff, const char * abbr, int isdst,
+ int ttisstd));
+static void addleap __P((time_t t, int positive, int rolling));
+static void adjleap __P((void));
+static void associate __P((void));
+static int ciequal __P((const char * ap, const char * bp));
+static void convert __P((long val, char * buf));
+static void dolink __P((const char * fromfile, const char * tofile));
+static void eat __P((const char * name, int num));
+static void eats __P((const char * name, int num,
+ const char * rname, int rnum));
+static long eitol __P((int i));
+static void error __P((const char * message));
+static char ** getfields __P((char * buf));
+static long gethms __P((char * string, const char * errstrng,
+ int signable));
+static void infile __P((const char * filename));
+static void inleap __P((char ** fields, int nfields));
+static void inlink __P((char ** fields, int nfields));
+static void inrule __P((char ** fields, int nfields));
+static int inzcont __P((char ** fields, int nfields));
+static int inzone __P((char ** fields, int nfields));
+static int inzsub __P((char ** fields, int nfields, int iscont));
+static int itsabbr __P((const char * abbr, const char * word));
+static int itsdir __P((const char * name));
+static int lowerit __P((int c));
+static char * memcheck __P((char * tocheck));
+static int mkdirs __P((char * filename));
+static void newabbr __P((const char * abbr));
+static long oadd __P((long t1, long t2));
+static void outzone __P((const struct zone * zp, int ntzones));
+static void puttzcode __P((long code, FILE * fp));
+static int rcomp __P((const void *leftp, const void *rightp));
+static time_t rpytime __P((const struct rule * rp, int wantedy));
+static void rulesub __P((struct rule * rp, char * loyearp, char * hiyearp,
+ char * typep, char * monthp, char * dayp, char * timep));
+static void setboundaries __P((void));
+static time_t tadd __P((time_t t1, long t2));
+static void usage __P((void));
+static void writezone __P((const char * name));
+static int yearistype __P((int year, const char * type));
+
+static int charcnt;
+static int errors;
+static const char * filename;
+static int leapcnt;
+static int linenum;
+static time_t max_time;
+static int max_year;
+static time_t min_time;
+static int min_year;
+static int noise;
+static const char * rfilename;
+static int rlinenum;
+static const char * progname;
+static int timecnt;
+static int typecnt;
+static int tt_signed;
+
+/*
+** Line codes.
+*/
+
+#define LC_RULE 0
+#define LC_ZONE 1
+#define LC_LINK 2
+#define LC_LEAP 3
+
+/*
+** Which fields are which on a Zone line.
+*/
+
+#define ZF_NAME 1
+#define ZF_GMTOFF 2
+#define ZF_RULE 3
+#define ZF_FORMAT 4
+#define ZF_TILYEAR 5
+#define ZF_TILMONTH 6
+#define ZF_TILDAY 7
+#define ZF_TILTIME 8
+#define ZONE_MINFIELDS 5
+#define ZONE_MAXFIELDS 9
+
+/*
+** Which fields are which on a Zone continuation line.
+*/
+
+#define ZFC_GMTOFF 0
+#define ZFC_RULE 1
+#define ZFC_FORMAT 2
+#define ZFC_TILYEAR 3
+#define ZFC_TILMONTH 4
+#define ZFC_TILDAY 5
+#define ZFC_TILTIME 6
+#define ZONEC_MINFIELDS 3
+#define ZONEC_MAXFIELDS 7
+
+/*
+** Which files are which on a Rule line.
+*/
+
+#define RF_NAME 1
+#define RF_LOYEAR 2
+#define RF_HIYEAR 3
+#define RF_COMMAND 4
+#define RF_MONTH 5
+#define RF_DAY 6
+#define RF_TOD 7
+#define RF_STDOFF 8
+#define RF_ABBRVAR 9
+#define RULE_FIELDS 10
+
+/*
+** Which fields are which on a Link line.
+*/
+
+#define LF_FROM 1
+#define LF_TO 2
+#define LINK_FIELDS 3
+
+/*
+** Which fields are which on a Leap line.
+*/
+
+#define LP_YEAR 1
+#define LP_MONTH 2
+#define LP_DAY 3
+#define LP_TIME 4
+#define LP_CORR 5
+#define LP_ROLL 6
+#define LEAP_FIELDS 7
+
+/*
+** Year synonyms.
+*/
+
+#define YR_MINIMUM 0
+#define YR_MAXIMUM 1
+#define YR_ONLY 2
+
+static struct rule * rules;
+static int nrules; /* number of rules */
+
+static struct zone * zones;
+static int nzones; /* number of zones */
+
+struct link {
+ const char * l_filename;
+ int l_linenum;
+ const char * l_from;
+ const char * l_to;
+};
+
+static struct link * links;
+static int nlinks;
+
+struct lookup {
+ const char * l_word;
+ const int l_value;
+};
+
+static struct lookup const * byword __P((const char * string,
+ const struct lookup * lp));
+
+static struct lookup const line_codes[] = {
+ "Rule", LC_RULE,
+ "Zone", LC_ZONE,
+ "Link", LC_LINK,
+ "Leap", LC_LEAP,
+ NULL, 0
+};
+
+static struct lookup const mon_names[] = {
+ "January", TM_JANUARY,
+ "February", TM_FEBRUARY,
+ "March", TM_MARCH,
+ "April", TM_APRIL,
+ "May", TM_MAY,
+ "June", TM_JUNE,
+ "July", TM_JULY,
+ "August", TM_AUGUST,
+ "September", TM_SEPTEMBER,
+ "October", TM_OCTOBER,
+ "November", TM_NOVEMBER,
+ "December", TM_DECEMBER,
+ NULL, 0
+};
+
+static struct lookup const wday_names[] = {
+ "Sunday", TM_SUNDAY,
+ "Monday", TM_MONDAY,
+ "Tuesday", TM_TUESDAY,
+ "Wednesday", TM_WEDNESDAY,
+ "Thursday", TM_THURSDAY,
+ "Friday", TM_FRIDAY,
+ "Saturday", TM_SATURDAY,
+ NULL, 0
+};
+
+static struct lookup const lasts[] = {
+ "last-Sunday", TM_SUNDAY,
+ "last-Monday", TM_MONDAY,
+ "last-Tuesday", TM_TUESDAY,
+ "last-Wednesday", TM_WEDNESDAY,
+ "last-Thursday", TM_THURSDAY,
+ "last-Friday", TM_FRIDAY,
+ "last-Saturday", TM_SATURDAY,
+ NULL, 0
+};
+
+static struct lookup const begin_years[] = {
+ "minimum", YR_MINIMUM,
+ "maximum", YR_MAXIMUM,
+ NULL, 0
+};
+
+static struct lookup const end_years[] = {
+ "minimum", YR_MINIMUM,
+ "maximum", YR_MAXIMUM,
+ "only", YR_ONLY,
+ NULL, 0
+};
+
+static struct lookup const leap_types[] = {
+ "Rolling", TRUE,
+ "Stationary", FALSE,
+ NULL, 0
+};
+
+static const int len_months[2][MONSPERYEAR] = {
+ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
+ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
+};
+
+static const int len_years[2] = {
+ DAYSPERNYEAR, DAYSPERLYEAR
+};
+
+static time_t ats[TZ_MAX_TIMES];
+static unsigned char types[TZ_MAX_TIMES];
+static long gmtoffs[TZ_MAX_TYPES];
+static char isdsts[TZ_MAX_TYPES];
+static char abbrinds[TZ_MAX_TYPES];
+static char ttisstds[TZ_MAX_TYPES];
+static char chars[TZ_MAX_CHARS];
+static time_t trans[TZ_MAX_LEAPS];
+static long corr[TZ_MAX_LEAPS];
+static char roll[TZ_MAX_LEAPS];
+
+/*
+** Memory allocation.
+*/
+
+static char *
+memcheck(ptr)
+char * const ptr;
+{
+ if (ptr == NULL) {
+ (void) perror(progname);
+ (void) exit(EXIT_FAILURE);
+ }
+ return ptr;
+}
+
+#define emalloc(size) memcheck(imalloc(size))
+#define erealloc(ptr, size) memcheck(irealloc(ptr, size))
+#define ecpyalloc(ptr) memcheck(icpyalloc(ptr))
+#define ecatalloc(oldp, newp) memcheck(icatalloc(oldp, newp))
+
+/*
+** Error handling.
+*/
+
+static void
+eats(name, num, rname, rnum)
+const char * const name;
+const int num;
+const char * const rname;
+const int rnum;
+{
+ filename = name;
+ linenum = num;
+ rfilename = rname;
+ rlinenum = rnum;
+}
+
+static void
+eat(name, num)
+const char * const name;
+const int num;
+{
+ eats(name, num, (char *) NULL, -1);
+}
+
+static void
+error(string)
+const char * const string;
+{
+ /*
+ ** Match the format of "cc" to allow sh users to
+ ** zic ... 2>&1 | error -t "*" -v
+ ** on BSD systems.
+ */
+ (void) fprintf(stderr, "\"%s\", line %d: %s",
+ filename, linenum, string);
+ if (rfilename != NULL)
+ (void) fprintf(stderr, " (rule from \"%s\", line %d)",
+ rfilename, rlinenum);
+ (void) fprintf(stderr, "\n");
+ ++errors;
+}
+
+static void
+usage()
+{
+ (void) fprintf(stderr,
+"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n\
+\t[ -L leapseconds ] [ filename ... ]\n",
+ progname, progname);
+ (void) exit(EXIT_FAILURE);
+}
+
+static const char * psxrules = NULL;
+static const char * lcltime = NULL;
+static const char * directory = NULL;
+static const char * leapsec = NULL;
+static int sflag = FALSE;
+
+int
+main(argc, argv)
+int argc;
+char * argv[];
+{
+ register int i, j;
+ register int c;
+
+ (void) umask(umask(022) | 022);
+ progname = argv[0];
+ while ((c = getopt(argc, argv, "d:l:p:L:vs")) != EOF)
+ switch (c) {
+ default:
+ usage();
+ case 'd':
+ if (directory == NULL)
+ directory = optarg;
+ else {
+ (void) fprintf(stderr,
+"%s: More than one -d option specified\n",
+ progname);
+ (void) exit(EXIT_FAILURE);
+ }
+ break;
+ case 'l':
+ if (lcltime == NULL)
+ lcltime = optarg;
+ else {
+ (void) fprintf(stderr,
+"%s: More than one -l option specified\n",
+ progname);
+ (void) exit(EXIT_FAILURE);
+ }
+ break;
+ case 'p':
+ if (psxrules == NULL)
+ psxrules = optarg;
+ else {
+ (void) fprintf(stderr,
+"%s: More than one -p option specified\n",
+ progname);
+ (void) exit(EXIT_FAILURE);
+ }
+ break;
+ case 'L':
+ if (leapsec == NULL)
+ leapsec = optarg;
+ else {
+ (void) fprintf(stderr,
+"%s: More than one -L option specified\n",
+ progname);
+ (void) exit(EXIT_FAILURE);
+ }
+ break;
+ case 'v':
+ noise = TRUE;
+ break;
+ case 's':
+ sflag = TRUE;
+ break;
+ }
+ if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
+ usage(); /* usage message by request */
+ if (directory == NULL)
+ directory = TZDIR;
+
+ setboundaries();
+
+ if (optind < argc && leapsec != NULL) {
+ infile(leapsec);
+ adjleap();
+ }
+
+ zones = (struct zone *) emalloc(0);
+ rules = (struct rule *) emalloc(0);
+ links = (struct link *) emalloc(0);
+ for (i = optind; i < argc; ++i)
+ infile(argv[i]);
+ if (errors)
+ (void) exit(EXIT_FAILURE);
+ associate();
+ for (i = 0; i < nzones; i = j) {
+ /*
+ ** Find the next non-continuation zone entry.
+ */
+ for (j = i + 1; j < nzones && zones[j].z_name == NULL; ++j)
+ ;
+ outzone(&zones[i], j - i);
+ }
+ /*
+ ** Make links.
+ */
+ for (i = 0; i < nlinks; ++i)
+ dolink(links[i].l_from, links[i].l_to);
+ if (lcltime != NULL)
+ dolink(lcltime, TZDEFAULT);
+ if (psxrules != NULL)
+ dolink(psxrules, TZDEFRULES);
+ return (errors == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+static void
+dolink(fromfile, tofile)
+const char * const fromfile;
+const char * const tofile;
+{
+ register char * fromname;
+ register char * toname;
+
+ fromname = ecpyalloc(directory);
+ fromname = ecatalloc(fromname, "/");
+ fromname = ecatalloc(fromname, fromfile);
+ if (strchr(tofile, ':')) toname = ecpyalloc(tofile);
+ else
+ {
+ toname = ecpyalloc(directory);
+ toname = ecatalloc(toname, "/");
+ toname = ecatalloc(toname, tofile);
+ }
+ /*
+ ** We get to be careful here since
+ ** there's a fair chance of root running us.
+ */
+ if (!itsdir(toname))
+ (void) remove(toname);
+ if (link(fromname, toname) != 0) {
+ (void) fprintf(stderr, "%s: Can't link from %s to ",
+ progname, fromname);
+ (void) perror(toname);
+ (void) exit(EXIT_FAILURE);
+ }
+ ifree(fromname);
+ ifree(toname);
+}
+
+static void
+setboundaries()
+{
+ register time_t bit;
+
+ for (bit = 1; bit > 0; bit <<= 1)
+ ;
+ if (bit == 0) { /* time_t is an unsigned type */
+ tt_signed = FALSE;
+ min_time = 0;
+ max_time = ~(time_t) 0;
+ if (sflag)
+ max_time >>= 1;
+ } else {
+ tt_signed = TRUE;
+ min_time = bit;
+ max_time = bit;
+ ++max_time;
+ max_time = -max_time;
+ if (sflag)
+ min_time = 0;
+ }
+ min_year = TM_YEAR_BASE + gmtime(&min_time)->tm_year;
+ max_year = TM_YEAR_BASE + gmtime(&max_time)->tm_year;
+}
+
+static int
+itsdir(name)
+const char * const name;
+{
+ struct stat s;
+
+ return (stat(name, &s) == 0 && S_ISDIR(s.st_mode));
+}
+
+/*
+** Associate sets of rules with zones.
+*/
+
+/*
+** Sort by rule name.
+*/
+
+static int
+rcomp(cp1, cp2)
+const void * cp1;
+const void * cp2;
+{
+ return strcmp(((struct rule *) cp1)->r_name,
+ ((struct rule *) cp2)->r_name);
+}
+
+static void
+associate()
+{
+ register struct zone * zp;
+ register struct rule * rp;
+ register int base, out;
+ register int i;
+
+ if (nrules != 0)
+ (void) qsort((void *) rules, (size_t) nrules,
+ (size_t) sizeof *rules, rcomp);
+ for (i = 0; i < nzones; ++i) {
+ zp = &zones[i];
+ zp->z_rules = NULL;
+ zp->z_nrules = 0;
+ }
+ for (base = 0; base < nrules; base = out) {
+ rp = &rules[base];
+ for (out = base + 1; out < nrules; ++out)
+ if (strcmp(rp->r_name, rules[out].r_name) != 0)
+ break;
+ for (i = 0; i < nzones; ++i) {
+ zp = &zones[i];
+ if (strcmp(zp->z_rule, rp->r_name) != 0)
+ continue;
+ zp->z_rules = rp;
+ zp->z_nrules = out - base;
+ }
+ }
+ for (i = 0; i < nzones; ++i) {
+ zp = &zones[i];
+ if (zp->z_nrules == 0) {
+ /*
+ ** Maybe we have a local standard time offset.
+ */
+ eat(zp->z_filename, zp->z_linenum);
+ zp->z_stdoff =
+ gethms((char *)zp->z_rule, "unruly zone", TRUE);
+ /*
+ ** Note, though, that if there's no rule,
+ ** a '%s' in the format is a bad thing.
+ */
+ if (strchr(zp->z_format, '%') != 0)
+ error("%s in ruleless zone");
+ }
+ }
+ if (errors)
+ (void) exit(EXIT_FAILURE);
+}
+
+static void
+infile(name)
+const char * name;
+{
+ register FILE * fp;
+ register char ** fields;
+ register char * cp;
+ register const struct lookup * lp;
+ register int nfields;
+ register int wantcont;
+ register int num;
+ char buf[BUFSIZ];
+
+ if (strcmp(name, "-") == 0) {
+ name = "standard input";
+ fp = stdin;
+ } else if ((fp = fopen(name, "r")) == NULL) {
+ (void) fprintf(stderr, "%s: Can't open ", progname);
+ (void) perror(name);
+ (void) exit(EXIT_FAILURE);
+ }
+ wantcont = FALSE;
+ for (num = 1; ; ++num) {
+ eat(name, num);
+ if (fgets(buf, (int) sizeof buf, fp) != buf)
+ break;
+ cp = strchr(buf, '\n');
+ if (cp == NULL) {
+ error("line too long");
+ (void) exit(EXIT_FAILURE);
+ }
+ *cp = '\0';
+ fields = getfields(buf);
+ nfields = 0;
+ while (fields[nfields] != NULL) {
+ if (ciequal(fields[nfields], "-"))
+ fields[nfields] = "";
+ ++nfields;
+ }
+ if (nfields == 0) {
+ /* nothing to do */
+ } else if (wantcont) {
+ wantcont = inzcont(fields, nfields);
+ } else {
+ lp = byword(fields[0], line_codes);
+ if (lp == NULL)
+ error("input line of unknown type");
+ else switch ((int) (lp->l_value)) {
+ case LC_RULE:
+ inrule(fields, nfields);
+ wantcont = FALSE;
+ break;
+ case LC_ZONE:
+ wantcont = inzone(fields, nfields);
+ break;
+ case LC_LINK:
+ inlink(fields, nfields);
+ wantcont = FALSE;
+ break;
+ case LC_LEAP:
+ if (name != leapsec)
+ (void) fprintf(stderr,
+"%s: Leap line in non leap seconds file %s\n",
+ progname, name);
+ else inleap(fields, nfields);
+ wantcont = FALSE;
+ break;
+ default: /* "cannot happen" */
+ (void) fprintf(stderr,
+"%s: panic: Invalid l_value %d\n",
+ progname, lp->l_value);
+ (void) exit(EXIT_FAILURE);
+ }
+ }
+ ifree((char *) fields);
+ }
+ if (ferror(fp)) {
+ (void) fprintf(stderr, "%s: Error reading ", progname);
+ (void) perror(filename);
+ (void) exit(EXIT_FAILURE);
+ }
+ if (fp != stdin && fclose(fp)) {
+ (void) fprintf(stderr, "%s: Error closing ", progname);
+ (void) perror(filename);
+ (void) exit(EXIT_FAILURE);
+ }
+ if (wantcont)
+ error("expected continuation line not found");
+}
+
+/*
+** Convert a string of one of the forms
+** h -h hh:mm -hh:mm hh:mm:ss -hh:mm:ss
+** into a number of seconds.
+** A null string maps to zero.
+** Call error with errstring and return zero on errors.
+*/
+
+static long
+gethms(string, errstring, signable)
+char * string;
+const char * const errstring;
+const int signable;
+{
+ int hh, mm, ss, sign;
+
+ if (string == NULL || *string == '\0')
+ return 0;
+ if (!signable)
+ sign = 1;
+ else if (*string == '-') {
+ sign = -1;
+ ++string;
+ } else sign = 1;
+ if (sscanf(string, "%d:%d:%d", &hh, &mm, &ss) == 3) ;
+ else if (sscanf(string, "%d:%d", &hh, &mm) == 2) ss = 0;
+ else if (sscanf(string, "%d", &hh) == 1) mm = ss = 0;
+ else
+ {
+ error(errstring);
+ return 0;
+ }
+ if (hh < 0 || hh >= HOURSPERDAY ||
+ mm < 0 || mm >= MINSPERHOUR ||
+ ss < 0 || ss > SECSPERMIN) {
+ error(errstring);
+ return 0;
+ }
+ return eitol(sign) *
+ (eitol(hh * MINSPERHOUR + mm) *
+ eitol(SECSPERMIN) + eitol(ss));
+}
+
+static void
+inrule(fields, nfields)
+register char ** const fields;
+const int nfields;
+{
+ static struct rule r;
+
+ if (nfields != RULE_FIELDS) {
+ error("wrong number of fields on Rule line");
+ return;
+ }
+ if (*fields[RF_NAME] == '\0') {
+ error("nameless rule");
+ return;
+ }
+ r.r_filename = filename;
+ r.r_linenum = linenum;
+ r.r_stdoff = gethms(fields[RF_STDOFF], "invalid saved time", TRUE);
+ rulesub(&r, fields[RF_LOYEAR], fields[RF_HIYEAR], fields[RF_COMMAND],
+ fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]);
+ r.r_name = ecpyalloc(fields[RF_NAME]);
+ r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]);
+ rules = (struct rule *) erealloc((char *) rules,
+ (int) ((nrules + 1) * sizeof *rules));
+ rules[nrules++] = r;
+}
+
+static int
+inzone(fields, nfields)
+register char ** const fields;
+const int nfields;
+{
+ register int i;
+ char buf[132];
+
+ if (nfields < ZONE_MINFIELDS || nfields > ZONE_MAXFIELDS) {
+ error("wrong number of fields on Zone line");
+ return FALSE;
+ }
+ if (strcmp(fields[ZF_NAME], TZDEFAULT) == 0 && lcltime != NULL) {
+ (void) sprintf(buf,
+ "\"Zone %s\" line and -l option are mutually exclusive",
+ TZDEFAULT);
+ error(buf);
+ return FALSE;
+ }
+ if (strcmp(fields[ZF_NAME], TZDEFRULES) == 0 && psxrules != NULL) {
+ (void) sprintf(buf,
+ "\"Zone %s\" line and -p option are mutually exclusive",
+ TZDEFRULES);
+ error(buf);
+ return FALSE;
+ }
+ for (i = 0; i < nzones; ++i)
+ if (zones[i].z_name != NULL &&
+ strcmp(zones[i].z_name, fields[ZF_NAME]) == 0) {
+ (void) sprintf(buf,
+"duplicate zone name %s (file \"%s\", line %d)",
+ fields[ZF_NAME],
+ zones[i].z_filename,
+ zones[i].z_linenum);
+ error(buf);
+ return FALSE;
+ }
+ return inzsub(fields, nfields, FALSE);
+}
+
+static int
+inzcont(fields, nfields)
+register char ** const fields;
+const int nfields;
+{
+ if (nfields < ZONEC_MINFIELDS || nfields > ZONEC_MAXFIELDS) {
+ error("wrong number of fields on Zone continuation line");
+ return FALSE;
+ }
+ return inzsub(fields, nfields, TRUE);
+}
+
+static int
+inzsub(fields, nfields, iscont)
+register char ** const fields;
+const int nfields;
+const int iscont;
+{
+ register char * cp;
+ static struct zone z;
+ register int i_gmtoff, i_rule, i_format;
+ register int i_untilyear, i_untilmonth;
+ register int i_untilday, i_untiltime;
+ register int hasuntil;
+
+ if (iscont) {
+ i_gmtoff = ZFC_GMTOFF;
+ i_rule = ZFC_RULE;
+ i_format = ZFC_FORMAT;
+ i_untilyear = ZFC_TILYEAR;
+ i_untilmonth = ZFC_TILMONTH;
+ i_untilday = ZFC_TILDAY;
+ i_untiltime = ZFC_TILTIME;
+ z.z_name = NULL;
+ } else {
+ i_gmtoff = ZF_GMTOFF;
+ i_rule = ZF_RULE;
+ i_format = ZF_FORMAT;
+ i_untilyear = ZF_TILYEAR;
+ i_untilmonth = ZF_TILMONTH;
+ i_untilday = ZF_TILDAY;
+ i_untiltime = ZF_TILTIME;
+ z.z_name = ecpyalloc(fields[ZF_NAME]);
+ }
+ z.z_filename = filename;
+ z.z_linenum = linenum;
+ z.z_gmtoff = gethms(fields[i_gmtoff], "invalid GMT offset", TRUE);
+ if ((cp = strchr(fields[i_format], '%')) != 0) {
+ if (*++cp != 's' || strchr(cp, '%') != 0) {
+ error("invalid abbreviation format");
+ return FALSE;
+ }
+ }
+ z.z_rule = ecpyalloc(fields[i_rule]);
+ z.z_format = ecpyalloc(fields[i_format]);
+ hasuntil = nfields > i_untilyear;
+ if (hasuntil) {
+ z.z_untilrule.r_filename = filename;
+ z.z_untilrule.r_linenum = linenum;
+ rulesub(&z.z_untilrule,
+ fields[i_untilyear],
+ "only",
+ "",
+ (nfields > i_untilmonth) ? fields[i_untilmonth] : "Jan",
+ (nfields > i_untilday) ? fields[i_untilday] : "1",
+ (nfields > i_untiltime) ? fields[i_untiltime] : "0");
+ z.z_untiltime = rpytime(&z.z_untilrule, z.z_untilrule.r_loyear);
+ if (iscont && nzones > 0 && z.z_untiltime < max_time &&
+ z.z_untiltime > min_time &&
+ zones[nzones - 1].z_untiltime >= z.z_untiltime) {
+error("Zone continuation line end time is not after end time of previous line");
+ return FALSE;
+ }
+ }
+ zones = (struct zone *) erealloc((char *) zones,
+ (int) ((nzones + 1) * sizeof *zones));
+ zones[nzones++] = z;
+ /*
+ ** If there was an UNTIL field on this line,
+ ** there's more information about the zone on the next line.
+ */
+ return hasuntil;
+}
+
+static void
+inleap(fields, nfields)
+register char ** const fields;
+const int nfields;
+{
+ register const char * cp;
+ register const struct lookup * lp;
+ register int i, j;
+ int year, month, day;
+ long dayoff, tod;
+ time_t t;
+
+ if (nfields != LEAP_FIELDS) {
+ error("wrong number of fields on Leap line");
+ return;
+ }
+ dayoff = 0;
+ cp = fields[LP_YEAR];
+ if (sscanf((char *)cp, "%d", &year) != 1 ||
+ year < min_year || year > max_year) {
+ /*
+ * Leapin' Lizards!
+ */
+ error("invalid leaping year");
+ return;
+ }
+ j = EPOCH_YEAR;
+ while (j != year) {
+ if (year > j) {
+ i = len_years[isleap(j)];
+ ++j;
+ } else {
+ --j;
+ i = -len_years[isleap(j)];
+ }
+ dayoff = oadd(dayoff, eitol(i));
+ }
+ if ((lp = byword(fields[LP_MONTH], mon_names)) == NULL) {
+ error("invalid month name");
+ return;
+ }
+ month = lp->l_value;
+ j = TM_JANUARY;
+ while (j != month) {
+ i = len_months[isleap(year)][j];
+ dayoff = oadd(dayoff, eitol(i));
+ ++j;
+ }
+ cp = fields[LP_DAY];
+ if (sscanf((char *)cp, "%d", &day) != 1 ||
+ day <= 0 || day > len_months[isleap(year)][month]) {
+ error("invalid day of month");
+ return;
+ }
+ dayoff = oadd(dayoff, eitol(day - 1));
+ if (dayoff < 0 && !tt_signed) {
+ error("time before zero");
+ return;
+ }
+ t = (time_t) dayoff * SECSPERDAY;
+ /*
+ ** Cheap overflow check.
+ */
+ if (t / SECSPERDAY != dayoff) {
+ error("time overflow");
+ return;
+ }
+ tod = gethms(fields[LP_TIME], "invalid time of day", FALSE);
+ cp = fields[LP_CORR];
+ if (strcmp(cp, "+") != 0 && strcmp(cp, "") != 0) {
+ /* infile() turned "-" into "" */
+ error("illegal CORRECTION field on Leap line");
+ return;
+ }
+ if ((lp = byword(fields[LP_ROLL], leap_types)) == NULL) {
+ error("illegal Rolling/Stationary field on Leap line");
+ return;
+ }
+ addleap(tadd(t, tod), *cp == '+', lp->l_value);
+}
+
+static void
+inlink(fields, nfields)
+register char ** const fields;
+const int nfields;
+{
+ struct link l;
+
+ if (nfields != LINK_FIELDS) {
+ error("wrong number of fields on Link line");
+ return;
+ }
+ if (*fields[LF_FROM] == '\0') {
+ error("blank FROM field on Link line");
+ return;
+ }
+ if (*fields[LF_TO] == '\0') {
+ error("blank TO field on Link line");
+ return;
+ }
+ l.l_filename = filename;
+ l.l_linenum = linenum;
+ l.l_from = ecpyalloc(fields[LF_FROM]);
+ l.l_to = ecpyalloc(fields[LF_TO]);
+ links = (struct link *) erealloc((char *) links,
+ (int) ((nlinks + 1) * sizeof *links));
+ links[nlinks++] = l;
+}
+
+static void
+rulesub(rp, loyearp, hiyearp, typep, monthp, dayp, timep)
+register struct rule * const rp;
+char * const loyearp;
+char * const hiyearp;
+char * const typep;
+char * const monthp;
+char * const dayp;
+char * const timep;
+{
+ register struct lookup const * lp;
+ register char * cp;
+
+ if ((lp = byword(monthp, mon_names)) == NULL) {
+ error("invalid month name");
+ return;
+ }
+ rp->r_month = lp->l_value;
+ rp->r_todisstd = FALSE;
+ cp = timep;
+ if (*cp != '\0') {
+ cp += strlen(cp) - 1;
+ switch (lowerit(*cp)) {
+ case 's':
+ rp->r_todisstd = TRUE;
+ *cp = '\0';
+ break;
+ case 'w':
+ rp->r_todisstd = FALSE;
+ *cp = '\0';
+ break;
+ }
+ }
+ rp->r_tod = gethms(timep, "invalid time of day", FALSE);
+ /*
+ ** Year work.
+ */
+ cp = loyearp;
+ if ((lp = byword(cp, begin_years)) != NULL) switch ((int) lp->l_value) {
+ case YR_MINIMUM:
+ rp->r_loyear = min_year;
+ break;
+ case YR_MAXIMUM:
+ rp->r_loyear = max_year;
+ break;
+ default: /* "cannot happen" */
+ (void) fprintf(stderr,
+ "%s: panic: Invalid l_value %d\n",
+ progname, lp->l_value);
+ (void) exit(EXIT_FAILURE);
+ } else if (sscanf(cp, "%d", &rp->r_loyear) != 1 ||
+ rp->r_loyear < min_year || rp->r_loyear > max_year) {
+ if (noise)
+ error("invalid starting year");
+ if (rp->r_loyear > max_year)
+ return;
+ }
+ cp = hiyearp;
+ if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
+ case YR_MINIMUM:
+ rp->r_hiyear = min_year;
+ break;
+ case YR_MAXIMUM:
+ rp->r_hiyear = max_year;
+ break;
+ case YR_ONLY:
+ rp->r_hiyear = rp->r_loyear;
+ break;
+ default: /* "cannot happen" */
+ (void) fprintf(stderr,
+ "%s: panic: Invalid l_value %d\n",
+ progname, lp->l_value);
+ (void) exit(EXIT_FAILURE);
+ } else if (sscanf(cp, "%d", &rp->r_hiyear) != 1 ||
+ rp->r_hiyear < min_year || rp->r_hiyear > max_year) {
+ if (noise)
+ error("invalid ending year");
+ if (rp->r_hiyear < min_year)
+ return;
+ }
+ if (rp->r_hiyear < min_year)
+ return;
+ if (rp->r_loyear < min_year)
+ rp->r_loyear = min_year;
+ if (rp->r_hiyear > max_year)
+ rp->r_hiyear = max_year;
+ if (rp->r_loyear > rp->r_hiyear) {
+ error("starting year greater than ending year");
+ return;
+ }
+ if (*typep == '\0')
+ rp->r_yrtype = NULL;
+ else {
+ if (rp->r_loyear == rp->r_hiyear) {
+ error("typed single year");
+ return;
+ }
+ rp->r_yrtype = ecpyalloc(typep);
+ }
+ /*
+ ** Day work.
+ ** Accept things such as:
+ ** 1
+ ** last-Sunday
+ ** Sun<=20
+ ** Sun>=7
+ */
+ if ((lp = byword(dayp, lasts)) != NULL) {
+ rp->r_dycode = DC_DOWLEQ;
+ rp->r_wday = lp->l_value;
+ rp->r_dayofmonth = len_months[1][rp->r_month];
+ } else {
+ if ((cp = strchr(dayp, '<')) != 0)
+ rp->r_dycode = DC_DOWLEQ;
+ else if ((cp = strchr(dayp, '>')) != 0)
+ rp->r_dycode = DC_DOWGEQ;
+ else {
+ cp = dayp;
+ rp->r_dycode = DC_DOM;
+ }
+ if (rp->r_dycode != DC_DOM) {
+ *cp++ = 0;
+ if (*cp++ != '=') {
+ error("invalid day of month");
+ return;
+ }
+ if ((lp = byword(dayp, wday_names)) == NULL) {
+ error("invalid weekday name");
+ return;
+ }
+ rp->r_wday = lp->l_value;
+ }
+ if (sscanf(cp, "%d", &rp->r_dayofmonth) != 1 ||
+ rp->r_dayofmonth <= 0 ||
+ (rp->r_dayofmonth > len_months[1][rp->r_month])) {
+ error("invalid day of month");
+ return;
+ }
+ }
+}
+
+static void
+convert(val, buf)
+const long val;
+char * const buf;
+{
+ register int i;
+ register long shift;
+
+ for (i = 0, shift = 24; i < 4; ++i, shift -= 8)
+ buf[i] = val >> shift;
+}
+
+static void
+puttzcode(val, fp)
+const long val;
+FILE * const fp;
+{
+ char buf[4];
+
+ convert(val, buf);
+ (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
+}
+
+static void
+writezone(name)
+const char * const name;
+{
+ register FILE * fp;
+ register int i, j;
+ char fullname[BUFSIZ];
+ static struct tzhead tzh;
+
+ if (strlen(directory) + 1 + strlen(name) >= sizeof fullname) {
+ (void) fprintf(stderr,
+ "%s: File name %s/%s too long\n", progname,
+ directory, name);
+ (void) exit(EXIT_FAILURE);
+ }
+ (void) sprintf(fullname, "%s/%s", directory, name);
+ if ((fp = fopen(fullname, "wb")) == NULL) {
+ if (mkdirs(fullname) != 0)
+ (void) exit(EXIT_FAILURE);
+ if ((fp = fopen(fullname, "wb")) == NULL) {
+ (void) fprintf(stderr, "%s: Can't create ", progname);
+ (void) perror(fullname);
+ (void) exit(EXIT_FAILURE);
+ }
+ }
+ convert(eitol(typecnt), tzh.tzh_ttisstdcnt);
+ convert(eitol(leapcnt), tzh.tzh_leapcnt);
+ convert(eitol(timecnt), tzh.tzh_timecnt);
+ convert(eitol(typecnt), tzh.tzh_typecnt);
+ convert(eitol(charcnt), tzh.tzh_charcnt);
+ (void) fwrite((void *) &tzh, (size_t) sizeof tzh, (size_t) 1, fp);
+ for (i = 0; i < timecnt; ++i) {
+ j = leapcnt;
+ while (--j >= 0)
+ if (ats[i] >= trans[j]) {
+ ats[i] = tadd(ats[i], corr[j]);
+ break;
+ }
+ puttzcode((long) ats[i], fp);
+ }
+ if (timecnt > 0)
+ (void) fwrite((void *) types, (size_t) sizeof types[0],
+ (size_t) timecnt, fp);
+ for (i = 0; i < typecnt; ++i) {
+ puttzcode((long) gmtoffs[i], fp);
+ (void) putc(isdsts[i], fp);
+ (void) putc(abbrinds[i], fp);
+ }
+ if (charcnt != 0)
+ (void) fwrite((void *) chars, (size_t) sizeof chars[0],
+ (size_t) charcnt, fp);
+ for (i = 0; i < leapcnt; ++i) {
+ if (roll[i]) {
+ if (timecnt == 0 || trans[i] < ats[0]) {
+ j = 0;
+ while (isdsts[j])
+ if (++j >= typecnt) {
+ j = 0;
+ break;
+ }
+ } else {
+ j = 1;
+ while (j < timecnt && trans[i] >= ats[j])
+ ++j;
+ j = types[j - 1];
+ }
+ puttzcode((long) tadd(trans[i], -gmtoffs[j]), fp);
+ } else puttzcode((long) trans[i], fp);
+ puttzcode((long) corr[i], fp);
+ }
+ for (i = 0; i < typecnt; ++i)
+ (void) putc(ttisstds[i], fp);
+ if (ferror(fp) || fclose(fp)) {
+ (void) fprintf(stderr, "%s: Write error on ", progname);
+ (void) perror(fullname);
+ (void) exit(EXIT_FAILURE);
+ }
+}
+
+static void
+outzone(zpfirst, zonecount)
+const struct zone * const zpfirst;
+const int zonecount;
+{
+ register const struct zone * zp;
+ register struct rule * rp;
+ register int i, j;
+ register int usestart, useuntil;
+ register time_t starttime, untiltime;
+ register long gmtoff;
+ register long stdoff;
+ register int year;
+ register long startoff;
+ register int startisdst;
+ register int startttisstd;
+ register int type;
+ char startbuf[BUFSIZ];
+
+ /*
+ ** Now. . .finally. . .generate some useful data!
+ */
+ timecnt = 0;
+ typecnt = 0;
+ charcnt = 0;
+ /*
+ ** Two guesses. . .the second may well be corrected later.
+ */
+ gmtoff = zpfirst->z_gmtoff;
+ stdoff = 0;
+#ifdef lint
+ starttime = 0;
+ startttisstd = FALSE;
+#endif /* defined lint */
+ for (i = 0; i < zonecount; ++i) {
+ usestart = i > 0;
+ useuntil = i < (zonecount - 1);
+ zp = &zpfirst[i];
+ eat(zp->z_filename, zp->z_linenum);
+ startisdst = -1;
+ if (zp->z_nrules == 0) {
+ type = addtype(oadd(zp->z_gmtoff, zp->z_stdoff),
+ zp->z_format, zp->z_stdoff != 0,
+ startttisstd);
+ if (usestart)
+ addtt(starttime, type);
+ gmtoff = zp->z_gmtoff;
+ stdoff = zp->z_stdoff;
+ } else for (year = min_year; year <= max_year; ++year) {
+ if (useuntil && year > zp->z_untilrule.r_hiyear)
+ break;
+ /*
+ ** Mark which rules to do in the current year.
+ ** For those to do, calculate rpytime(rp, year);
+ */
+ for (j = 0; j < zp->z_nrules; ++j) {
+ rp = &zp->z_rules[j];
+ eats(zp->z_filename, zp->z_linenum,
+ rp->r_filename, rp->r_linenum);
+ rp->r_todo = year >= rp->r_loyear &&
+ year <= rp->r_hiyear &&
+ yearistype(year, rp->r_yrtype);
+ if (rp->r_todo)
+ rp->r_temp = rpytime(rp, year);
+ }
+ for ( ; ; ) {
+ register int k;
+ register time_t jtime, ktime;
+ register long offset;
+ char buf[BUFSIZ];
+
+ if (useuntil) {
+ /*
+ ** Turn untiltime into GMT
+ ** assuming the current gmtoff and
+ ** stdoff values.
+ */
+ offset = gmtoff;
+ if (!zp->z_untilrule.r_todisstd)
+ offset = oadd(offset, stdoff);
+ untiltime = tadd(zp->z_untiltime,
+ -offset);
+ }
+ /*
+ ** Find the rule (of those to do, if any)
+ ** that takes effect earliest in the year.
+ */
+ k = -1;
+#ifdef lint
+ ktime = 0;
+#endif /* defined lint */
+ for (j = 0; j < zp->z_nrules; ++j) {
+ rp = &zp->z_rules[j];
+ if (!rp->r_todo)
+ continue;
+ eats(zp->z_filename, zp->z_linenum,
+ rp->r_filename, rp->r_linenum);
+ offset = gmtoff;
+ if (!rp->r_todisstd)
+ offset = oadd(offset, stdoff);
+ jtime = rp->r_temp;
+ if (jtime == min_time ||
+ jtime == max_time)
+ continue;
+ jtime = tadd(jtime, -offset);
+ if (k < 0 || jtime < ktime) {
+ k = j;
+ ktime = jtime;
+ }
+ }
+ if (k < 0)
+ break; /* go on to next year */
+ rp = &zp->z_rules[k];
+ rp->r_todo = FALSE;
+ if (useuntil && ktime >= untiltime)
+ break;
+ if (usestart) {
+ if (ktime < starttime) {
+ stdoff = rp->r_stdoff;
+ startoff = oadd(zp->z_gmtoff,
+ rp->r_stdoff);
+ (void) sprintf(startbuf,
+ zp->z_format,
+ rp->r_abbrvar);
+ startisdst =
+ rp->r_stdoff != 0;
+ continue;
+ }
+ if (ktime != starttime &&
+ startisdst >= 0)
+addtt(starttime, addtype(startoff, startbuf, startisdst, startttisstd));
+ usestart = FALSE;
+ }
+ eats(zp->z_filename, zp->z_linenum,
+ rp->r_filename, rp->r_linenum);
+ (void) sprintf(buf, zp->z_format,
+ rp->r_abbrvar);
+ offset = oadd(zp->z_gmtoff, rp->r_stdoff);
+ type = addtype(offset, buf, rp->r_stdoff != 0,
+ rp->r_todisstd);
+ if (timecnt != 0 || rp->r_stdoff != 0)
+ addtt(ktime, type);
+ gmtoff = zp->z_gmtoff;
+ stdoff = rp->r_stdoff;
+ }
+ }
+ /*
+ ** Now we may get to set starttime for the next zone line.
+ */
+ if (useuntil) {
+ starttime = tadd(zp->z_untiltime,
+ -gmtoffs[types[timecnt - 1]]);
+ startttisstd = zp->z_untilrule.r_todisstd;
+ }
+ }
+ writezone(zpfirst->z_name);
+}
+
+static void
+addtt(starttime, type)
+const time_t starttime;
+const int type;
+{
+ if (timecnt != 0 && type == types[timecnt - 1])
+ return; /* easy enough! */
+ if (timecnt >= TZ_MAX_TIMES) {
+ error("too many transitions?!");
+ (void) exit(EXIT_FAILURE);
+ }
+ ats[timecnt] = starttime;
+ types[timecnt] = type;
+ ++timecnt;
+}
+
+static int
+addtype(gmtoff, abbr, isdst, ttisstd)
+const long gmtoff;
+const char * const abbr;
+const int isdst;
+const int ttisstd;
+{
+ register int i, j;
+
+ /*
+ ** See if there's already an entry for this zone type.
+ ** If so, just return its index.
+ */
+ for (i = 0; i < typecnt; ++i) {
+ if (gmtoff == gmtoffs[i] && isdst == isdsts[i] &&
+ strcmp(abbr, &chars[abbrinds[i]]) == 0 &&
+ ttisstd == ttisstds[i])
+ return i;
+ }
+ /*
+ ** There isn't one; add a new one, unless there are already too
+ ** many.
+ */
+ if (typecnt >= TZ_MAX_TYPES) {
+ error("too many local time types");
+ (void) exit(EXIT_FAILURE);
+ }
+ gmtoffs[i] = gmtoff;
+ isdsts[i] = isdst;
+ ttisstds[i] = ttisstd;
+
+ for (j = 0; j < charcnt; ++j)
+ if (strcmp(&chars[j], abbr) == 0)
+ break;
+ if (j == charcnt)
+ newabbr(abbr);
+ abbrinds[i] = j;
+ ++typecnt;
+ return i;
+}
+
+static void
+addleap(t, positive, rolling)
+const time_t t;
+const int positive;
+const int rolling;
+{
+ register int i, j;
+
+ if (leapcnt >= TZ_MAX_LEAPS) {
+ error("too many leap seconds");
+ (void) exit(EXIT_FAILURE);
+ }
+ for (i = 0; i < leapcnt; ++i)
+ if (t <= trans[i]) {
+ if (t == trans[i]) {
+ error("repeated leap second moment");
+ (void) exit(EXIT_FAILURE);
+ }
+ break;
+ }
+ for (j = leapcnt; j > i; --j) {
+ trans[j] = trans[j-1];
+ corr[j] = corr[j-1];
+ roll[j] = roll[j-1];
+ }
+ trans[i] = t;
+ corr[i] = (positive ? 1L : -1L);
+ roll[i] = rolling;
+ ++leapcnt;
+}
+
+static void
+adjleap()
+{
+ register int i;
+ register long last = 0;
+
+ /*
+ ** propagate leap seconds forward
+ */
+ for (i = 0; i < leapcnt; ++i) {
+ trans[i] = tadd(trans[i], last);
+ last = corr[i] += last;
+ }
+}
+
+static int
+yearistype(year, type)
+const int year;
+const char * const type;
+{
+ char buf[BUFSIZ];
+ int result;
+
+ if (type == NULL || *type == '\0')
+ return TRUE;
+ if (strcmp(type, "uspres") == 0)
+ return (year % 4) == 0;
+ if (strcmp(type, "nonpres") == 0)
+ return (year % 4) != 0;
+ (void) sprintf(buf, "yearistype %d %s", year, type);
+ result = system(buf);
+ if (result == 0)
+ return TRUE;
+ if (result == (1 << 8))
+ return FALSE;
+ error("Wild result from command execution");
+ (void) fprintf(stderr, "%s: command was '%s', result was %d\n",
+ progname, buf, result);
+ for ( ; ; )
+ (void) exit(EXIT_FAILURE);
+}
+
+static int
+lowerit(a)
+const int a;
+{
+ return (isascii(a) && isupper(a)) ? tolower(a) : a;
+}
+
+static int
+ciequal(ap, bp) /* case-insensitive equality */
+register const char * ap;
+register const char * bp;
+{
+ while (lowerit(*ap) == lowerit(*bp++))
+ if (*ap++ == '\0')
+ return TRUE;
+ return FALSE;
+}
+
+static int
+itsabbr(abbr, word)
+register const char * abbr;
+register const char * word;
+{
+ if (lowerit(*abbr) != lowerit(*word))
+ return FALSE;
+ ++word;
+ while (*++abbr != '\0')
+ do if (*word == '\0')
+ return FALSE;
+ while (lowerit(*word++) != lowerit(*abbr));
+ return TRUE;
+}
+
+static const struct lookup *
+byword(word, table)
+register const char * const word;
+register const struct lookup * const table;
+{
+ register const struct lookup * foundlp;
+ register const struct lookup * lp;
+
+ if (word == NULL || table == NULL)
+ return NULL;
+ /*
+ ** Look for exact match.
+ */
+ for (lp = table; lp->l_word != NULL; ++lp)
+ if (ciequal(word, lp->l_word))
+ return lp;
+ /*
+ ** Look for inexact match.
+ */
+ foundlp = NULL;
+ for (lp = table; lp->l_word != NULL; ++lp)
+ if (itsabbr(word, lp->l_word))
+ if (foundlp == NULL)
+ foundlp = lp;
+ else return NULL; /* multiple inexact matches */
+ return foundlp;
+}
+
+static char **
+getfields(cp)
+register char * cp;
+{
+ register char * dp;
+ register char ** array;
+ register int nsubs;
+
+ if (cp == NULL)
+ return NULL;
+ array = (char **) emalloc((int) ((strlen(cp) + 1) * sizeof *array));
+ nsubs = 0;
+ for ( ; ; ) {
+ while (isascii(*cp) && isspace(*cp))
+ ++cp;
+ if (*cp == '\0' || *cp == '#')
+ break;
+ array[nsubs++] = dp = cp;
+ do {
+ if ((*dp = *cp++) != '"')
+ ++dp;
+ else while ((*dp = *cp++) != '"')
+ if (*dp != '\0')
+ ++dp;
+ else error("Odd number of quotation marks");
+ } while (*cp != '\0' && *cp != '#' &&
+ (!isascii(*cp) || !isspace(*cp)));
+ if (isascii(*cp) && isspace(*cp))
+ ++cp;
+ *dp = '\0';
+ }
+ array[nsubs] = NULL;
+ return array;
+}
+
+static long
+oadd(t1, t2)
+const long t1;
+const long t2;
+{
+ register long t;
+
+ t = t1 + t2;
+ if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) {
+ error("time overflow");
+ (void) exit(EXIT_FAILURE);
+ }
+ return t;
+}
+
+static time_t
+tadd(t1, t2)
+const time_t t1;
+const long t2;
+{
+ register time_t t;
+
+ if (t1 == max_time && t2 > 0)
+ return max_time;
+ if (t1 == min_time && t2 < 0)
+ return min_time;
+ t = t1 + t2;
+ if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) {
+ error("time overflow");
+ (void) exit(EXIT_FAILURE);
+ }
+ return t;
+}
+
+/*
+** Given a rule, and a year, compute the date - in seconds since January 1,
+** 1970, 00:00 LOCAL time - in that year that the rule refers to.
+*/
+
+static time_t
+rpytime(rp, wantedy)
+register const struct rule * const rp;
+register const int wantedy;
+{
+ register int y, m, i;
+ register long dayoff; /* with a nod to Margaret O. */
+ register time_t t;
+
+ dayoff = 0;
+ m = TM_JANUARY;
+ y = EPOCH_YEAR;
+ while (wantedy != y) {
+ if (wantedy > y) {
+ i = len_years[isleap(y)];
+ ++y;
+ } else {
+ --y;
+ i = -len_years[isleap(y)];
+ }
+ dayoff = oadd(dayoff, eitol(i));
+ }
+ while (m != rp->r_month) {
+ i = len_months[isleap(y)][m];
+ dayoff = oadd(dayoff, eitol(i));
+ ++m;
+ }
+ i = rp->r_dayofmonth;
+ if (m == TM_FEBRUARY && i == 29 && !isleap(y)) {
+ if (rp->r_dycode == DC_DOWLEQ)
+ --i;
+ else {
+ error("use of 2/29 in non leap-year");
+ (void) exit(EXIT_FAILURE);
+ }
+ }
+ --i;
+ dayoff = oadd(dayoff, eitol(i));
+ if (rp->r_dycode == DC_DOWGEQ || rp->r_dycode == DC_DOWLEQ) {
+ register long wday;
+
+#define LDAYSPERWEEK ((long) DAYSPERWEEK)
+ wday = eitol(EPOCH_WDAY);
+ /*
+ ** Don't trust mod of negative numbers.
+ */
+ if (dayoff >= 0)
+ wday = (wday + dayoff) % LDAYSPERWEEK;
+ else {
+ wday -= ((-dayoff) % LDAYSPERWEEK);
+ if (wday < 0)
+ wday += LDAYSPERWEEK;
+ }
+ while (wday != eitol(rp->r_wday))
+ if (rp->r_dycode == DC_DOWGEQ) {
+ dayoff = oadd(dayoff, (long) 1);
+ if (++wday >= LDAYSPERWEEK)
+ wday = 0;
+ ++i;
+ } else {
+ dayoff = oadd(dayoff, (long) -1);
+ if (--wday < 0)
+ wday = LDAYSPERWEEK;
+ --i;
+ }
+ if (i < 0 || i >= len_months[isleap(y)][m]) {
+ error("no day in month matches rule");
+ (void) exit(EXIT_FAILURE);
+ }
+ }
+ if (dayoff < 0 && !tt_signed) {
+ if (wantedy == rp->r_loyear)
+ return min_time;
+ error("time before zero");
+ (void) exit(EXIT_FAILURE);
+ }
+ t = (time_t) dayoff * SECSPERDAY;
+ /*
+ ** Cheap overflow check.
+ */
+ if (t / SECSPERDAY != dayoff) {
+ if (wantedy == rp->r_hiyear)
+ return max_time;
+ if (wantedy == rp->r_loyear)
+ return min_time;
+ error("time overflow");
+ (void) exit(EXIT_FAILURE);
+ }
+ return tadd(t, rp->r_tod);
+}
+
+static void
+newabbr(string)
+const char * const string;
+{
+ register int i;
+
+ i = strlen(string) + 1;
+ if (charcnt + i >= TZ_MAX_CHARS) {
+ error("too many, or too long, time zone abbreviations");
+ (void) exit(EXIT_FAILURE);
+ }
+ (void) strcpy(&chars[charcnt], string);
+ charcnt += eitol(i);
+}
+
+static int
+mkdirs(name)
+char * const name;
+{
+ register char * cp;
+
+ if ((cp = name) == NULL || *cp == '\0')
+ return 0;
+ while ((cp = strchr(cp + 1, '/')) != 0) {
+ *cp = '\0';
+ if (!itsdir(name)) {
+ /*
+ ** It doesn't seem to exist, so we try to create it.
+ */
+ if (mkdir(name, 0755) != 0) {
+ (void) fprintf(stderr,
+ "%s: Can't create directory ",
+ progname);
+ (void) perror(name);
+ return -1;
+ }
+ }
+ *cp = '/';
+ }
+ return 0;
+}
+
+static long
+eitol(i)
+const int i;
+{
+ long l;
+
+ l = i;
+ if (i < 0 && l >= 0 || i == 0 && l != 0 || i > 0 && l <= 0) {
+ (void) fprintf(stderr, "%s: %d did not sign extend correctly\n",
+ progname, i);
+ (void) exit(EXIT_FAILURE);
+ }
+ return l;
+}
+
+/*
+** UNIX is a registered trademark of AT&T.
+*/
diff -rup --new-file baseline/fsf/emacs18/amiga/unix/unix.doc amiga/fsf/emacs18/amiga/unix/unix.doc
--- baseline/fsf/emacs18/amiga/unix/unix.doc Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/amiga/unix/unix.doc Sat Sep 28 00:00:00 1996
@@ -0,0 +1,452 @@
+Unix compatibility library for SAS C 6.x version 1.2
+----------------------------------------------------
+
+Introduction
+------------
+
+This library provides 80 odd functions which are useful for porting
+Unix programs to the Amiga running AmigaOS 2.04 or higher. It is thus
+similar to Markus Wild's ixemul.library, but has more restricted aims:
+
+a) It is written specifically for SAS C 6.1, 6.2, ...
+
+b) It isn't a complete C library, it requires the SAS C library to function.
+It adds some routines, and replaces others that were deficient, out of date,
+or that didn't provide adequate functionality.
+
+c) It isn't a complete Unix emulation library, it only contains those functions
+that I needed while porting various utilities (mainly from GNU) to the Amiga.
+
+d) It is a traditional C link library, not an Amiga library. This produces
+bigger executables.
+
+Considering the above points, you might ask why I wrote it ... There are several
+good answers:
+
+a) I started it before I was aware of ixemul.library.
+
+b) ixemul.library didn't provide the features I needed for Emacs (support for
+select).
+
+c) It is easier for me to maintain when I find I need to support another Unix
+feature (eg deleting open files).
+
+Copying
+-------
+
+The library includes code that I have written, which I place in the public domain.
+This is found in all the files that don't have a Copyright notice.
+
+It also includes code which is (inclusive of my modifications)
+
+ Copyright (c) 1982, 1986, 1991 The Regents of the University of California.
+ All rights reserved.
+
+This code is freely redistributable (see the copyright notices in the source
+and include files).
+
+Finally it includes Doug Gwyn's public domain alloca implementation.
+
+Installation & Use
+------------------
+
+To use this library, you must compile with the include directory in your include
+search path, and link with the unix.lib library (which must be specified before
+lc.lib). For example, if you extract this archive in a directory called src:, you
+could compile the following program:
+
+echo.c:
+
+#include <sys/unistd.h>
+
+void main(int argc, char **argv)
+{
+ int i;
+
+ for (i = 1; i < argc; i++)
+ {
+ if (i != 1) write(1, " ", 1);
+ write(1, argv[i], strlen(argv[i]));
+ }
+ write(1, "\n", 1);
+}
+
+with the command
+
+ sc idir src:unix/include/ lib src:unix/src/unix.lib link echo.c
+
+to produce a simple unix-like echo command.
+
+You should define the following environment variables:
+
+USER - A user name for the sole Amiga user (default "user").
+USERNAME - The full name of the sole Amiga user (default $USER).
+HOME - A "home" directory (default "s:") for programs that want one. Configuration
+ files will probably end up here ...
+SHELL - A program which behaves reasonably like a Unix shell (default "bin:sh").
+ You should copy the sh executable there if you don't have a Unix-like shell.
+HOSTNAME - The name of your machine (default "amiga").
+
+If you are going to be using pipes, you will require Matt Dillon's fifo.library
+and fifo: device. This can be found on the Fish disks, with his UUCP distribution
+and on many FTP sites.
+
+If you want to install the timezone information (see the discussion below on
+Unix vs Amiga time), do the following:
+
+ a) change to the zoneinfo directory
+ b) compile the zic problem by running lmk.
+ c) change to the datfiles directory.
+ d) edit lmkfile and choose your timezone (you can look at the data files
+ to see the ones available). If you get this wrong, you can always change
+ it later with the zic program.
+ e) type 'lmk install'. This will compile the timezones, and setup the one
+ you chose as the default. The default can be changed with
+ zic -l <timezone name>
+
+ or by defining the environment variable TZ.
+
+Functionality
+-------------
+
+While this library aims to hide the differences between AmigaOS & Unix,
+it also aims to provide support for Amiga specific features. This sometimes
+produces strange compromises.
+
+This library provides two things to programs linked with it:
+
+a) A Unix-like environment:
+
+This includes:
+
+- Unix-like command line parsing, with wildcard expansion. These
+wildcards are however specified with the Amiga syntax.
+
+Arguments which are unquoted or surround with single quotes are
+handled like Unix shells. Those surrounded with double quotes are
+handled in the Amiga fashion, but with wildcard expansion (this is
+done to avoid problems with the way the exec function works).
+
+Here is a summary of argument splitting:
+
+Arguments can be enclosed in single quotes, (') double quotes ("), or
+separated by spaces.
+
+Arguments enclosed by single quotes never suffer wildcard expansion, and
+no character is significant inside them (not even \). Given the echo program
+given above,
+
+ echo 'f*un\'
+
+simply displays
+
+ f*un\
+
+Within double quotes, * is the standard Amiga escape character. \ is
+handled just like any other character. Wildcards are expanded. So,
+assuming the current directory contains only echo.c and echo,
+
+ echo "#?.c" "*.c" "\mad"
+
+displays
+
+ echo.c .c \mad
+
+(* escapes the following character, except that *N is newline and *E is
+escape. Wildcard characters still behave as usual (' is the standard
+Amiga wildcard escape character)).
+
+If an argument is unquoted, \ acts as an escape character (removing
+special significance from the next character, be it a wildcard, a space,
+a \, ...). So
+
+ echo \*.c \\ \n
+
+displays
+
+ *.c \ n
+
+- When a program is run from the Workbench, stdin, stdout & stderr are opened
+on NIL:, and the icons selected are converted to file names and passed as the
+argc,argv to main.
+
+- The standard variable environ is defined and contains all the local environment
+variables. This is passed as the envp parameter to main.
+
+- The program is led to believe that all files belong to $USER (uid 1), group
+wheel (gid 0).
+
+- Amiga protection flags are mapped onto the standard 12 Unix protection bits
+(and back when necessary). This can be overridden (dynamically) by changing the
+value of use_amiga_flags. Eg:
+
+ extern int use_amiga_flags;
+
+ ...
+
+
+ main()
+ {
+ use_amiga_flags = 1;
+
+ ... some code using stat or chmod or ...
+ }
+
+In this case, the Amiga protection bits are left untouched. Otherwise the
+mapping is as follows (note that the archive bit is lost):
+
+Unix -> Amiga
+
+Amiga read: if user, group or world read.
+Amiga write: if user or group write.
+Amiga delete: if user or world write.
+Amiga execute: if group execute or only user execute.
+Amiga script: if world execute or only user execute.
+Amiga pure: if sticky.
+
+Amiga -> Unix
+
+user, group, world read: if amiga read.
+user write: if amiga write and delete.
+group write: if amiga write.
+world write: if amiga delete.
+user execute: if amiga execute or amiga script.
+group execute: if amiga execute.
+world execute: if amiga script.
+sticky: if amiga pure.
+
+- Unix-like time. time is expressed in seconds since 1-Jan-1970 00:00 GMT.
+This is the format used by the time(), stat() and utime() functions. The
+library uses the BSD time functions which properly handle timezones,
+daylight savings time, etc.
+
+On Unix systems, time is generally stored as GMT, while the Amiga stores
+local time. These times are visible in two places: the time stored in the
+system clock and the creation, modification or access dates for files (only
+the modification date is available on the Amiga). There are 3 ways to resolve
+this conflict:
+
+1) Ignore timezones (you can choose this option by not installing the
+timezone information). The library will then assume that system time
+and file times are expressed in GMT and will never apply any
+corrections. All will work well (except maybe on a global network).
+This is the simplest solution.
+
+2) System & file time are assumed to be local times. The time() & stat()
+functions convert local time to GMT, the utime() call converts GMT to
+local time. This allows you to keep the system clock on local time, which
+is compatible with most (all?) Amiga applications. However, nearly every
+program will be bigger because they will need the timezone information and
+timezone conversion code (approximately 7k). The library can be recompiled
+if you prefer to have things this way by adding -dUSE_LOCAL to the CFLAGS
+variable in lmkfile.
+
+3) System & file time are stored in GMT. Times are converted to local time
+only when they are displayed to the user, who must of course choose the
+correct timezone. This entails changing your system clock to GMT, which means
+that most programs will display an incorrect time. However, you won't have
+to change your system clock when daylight savings time ends ... The library
+comes compiled this way (But you can still choose option 1, no timezone
+information, and avoid the potential confusion).
+
+- BSD-like signals. Signal handlers stay enabled after a signal occurs
+(that particular signal is simply masked for the duration of the handler).
+setjmp & longjmp preserve the signal mask (the functions _setjmp & _longjmp
+don't). You may receive any signal with kill(getpid(), sig). Otherwise only
+the following occur:
+
+ SIGINT: user typed ctrl-c
+ SIGQUIT: user typed ctrl-d
+ SIGALRM: alarm() expired
+ SIGCHLD: a child process died
+
+When using kill to signal another process, only SIGHUP, SIGINT, SIGQUIT &
+SIGKILL do anything. They all send SIGBREAKF_CTRL_C | D to the process (and
+hopefully its children). See the discussion under the exec function.
+
+
+b) A large number of unix C library calls:
+
+_exit, _setjmp, _longjmp, abort, access, alloca, gettimeofday, ftime,
+bcmp, bcopy, bzero, chmod, chown, fchown, close, creat, tzset, tzsetwall,
+localtime, gmtime, asctime, ctime, mktime, opendir, closedir, readdir,
+telldir, seekdir, fchmod, fcntl, fstat, ftruncate, getenv, gethostname,
+getpid, getwd, getgid, getegid, getgrgid, getgrnam, index, ioctl, isatty,
+kill, link, lseek, mkdir, mkfifo, mknod, mktemp, open, perror, pipe, sktpair,
+getpwuid, getpwnam, getlogin, read, rename, rindex, rmdir, select, setjmp,
+longjmp, signal, sigpause, sigsetmask, sleep, stat, strftime, time, truncate,
+getuid, geteuid, umask, unlink, utime, wait, waitpid, wait3, wait4, write,
+readlink, symlink, popen, pclose.
+
+These functions aim to be BSD compatible, however I based myself on descriptions
+in the SunOS 4 man pages. Their behaviour is sometimes strange or incomplete.
+
+Here is a summary of the differences with the standard Unix functions:
+
+alloca - This is Doug Gwyn's portable alloca. Memory allocated is freed
+later than with a true alloca.
+
+gettimeofday - The dst field of the timezone is a (not very good) guess. It
+shouldn't be used anyway.
+
+chown, fchown - These are do-nothing routines.
+
+opendir, closedir, ... - These interact with stat to avoid having to read
+each directory entry twice when doing a readdir + stat loop.
+
+fchmod - The protection is only set when the file is closed. See also the
+discussion of protection modes above.
+
+fcntl - Only the F_GETFL & F_SETFL operations are supported.
+
+truncate, ftruncate - These will not necessarily work with all filing systems.
+See the discussion of the AmigaOS SetFileSize function.
+
+getenv - This checks local environment variables and then global ones. It
+allocates memory for the variables value each time. This memory is never freed
+(till the program exits).
+
+gethostname - This is obtained from the HOSTNAME environment variable at startup.
+
+getuid, geteuid, getgid, getegid, getpwuid, getpwnam, getgrgid, getgrnam, getlogin -
+These function only know about one user. He/She is:
+
+ name: $USER (default "user")
+ home directory: $HOME (default "s:")
+ shell: $SHELL (default "bin:sh")
+ uid: 1, gid: 0
+
+ioctl - Only FIONBIO & TIOCGWINSZ are known, plus a number of amiga specific
+ioctls (for internal use). These are documented in include/amiga/ioctl.h.
+
+lseek - Seeks beyond the end of a file are not implemented.
+
+mkfifo, mknod - These are 'do-nothing' routines.
+
+pipe - This uses Matt Dillon's fifo.library and fifo: device. It works well
+for interactive use, but not for transfering large quantities of data.
+
+select - This implementation only works with pipes & sktpairs, and cannot
+detect 'exceptional' conditions.
+
+sigvec - The flags are not recognized.
+
+symlink - Symbolic links on the Amiga are far too buggy and should not be used.
+By default, as compiled, this routine always returns an error. However readlink
+does work, so you can read existing symbolic links.
+
+umask - This is a 'do-nothing' routine.
+
+unlink - You can unlink a file that your program has opened before you close
+it. At that point, the AmigaOS file is closed & deleted, though it still
+appears open to read (it returns EOF), write, close, etc. Also you can unlink
+a file even if it is protected from deletion (the protection mode is changed
+first ...).
+
+utime - Only the modification time can be changed (the others don't exist).
+
+wait3, wait4 - Resource usage is never returned.
+
+exec
+----
+
+vfork() and execxx() are very tricky to implement. So I took the easy
+(but see below) way out, providing a function, eexec, that create a
+new process given argc, argv. This functions returns a pid which can
+be used with wait, waitpid, ... as usual. Also exiting processes
+generate the SIGCHLD signal. With this, it is generally fairly easy to
+replace the process creation parts of most Unix programs.
+
+First, here is a description of the problems which arise:
+
+Executing an external program is tricky with AmigaOS. The various system
+routines (CreateNewProc, SystemTags, Execute) allow some operations to be
+done easily, but make others difficult. Specifically, if you want to do all
+of the following:
+
+- Execute a program given argc, argv (like with unix)
+- Specify arbitrary input, output and error streams, including inheriting
+the current ones.
+- Have some of these streams be pipes of which you keep one end.
+- Have some of these pipes appear to be interactive (this is used for example
+by programs running inside emacs).
+- Detect when the execute program exits, and get its return code.
+- Send signals (eg ctrl-c) to the created process, and preferably its children.
+
+you are in deep trouble. A minimum of 10 attempts is needed to get
+something which works most of the time, ie the eexec function.
+
+The problems are:
+- You have to make a command line from argc, argv. But these arguments may
+contain spaces, so they must be surrounded by double quotes. And then, '*'
+must be escaped as it is the escape character. And so on.
+- Only recently has an error stream appeared in AmigaOS. And it doesn't
+inherit very well (Indeed, specifying the error stream doesn't work in the
+current version).
+- Amiga programs generally expect interactive files to be console windows.
+And fifo: is the only interactive pipe I'm aware of. So the pipe: system
+call uses fifo: and fifo.library.
+- To get the return code of an application, you must use the synchronous
+version of SystemTags. Otherwise it is lost. But you want an asynchronous
+process facility. So I create 2 processes, the first one is created with
+CreateNewProc and executes a custom piece of code. This code launches
+the real program with SystemTags, and sends a message with the return code
+to its parent (if it is still around).
+- You can't find the children of a process. So the signal is sent to all
+the processes that share the input filehandle of the created process. This
+is the best solution that I found.
+- AmigaOS isn't Unix.
+
+Therefore, the eexec function is far from perfect. It works as follows:
+
+eexec(program, argv, input, output, error, directory, stacksize)
+
+ program: the path of the executable file. Your path is searched.
+ argv: A null terminated array of arguments. The first (argv[0]) is ignored.
+ input: A unix filehandle on the desired input. -1 means copy Input().
+ output: A unix filehandle on the desired output. -1 means copy Output().
+ error: A unix filehandle on the desired error stream. -1 means copy the pr_CES
+ field of the current process, -2 means copy the value specified for output.
+ Currently, this parameter has no effect.
+ directory: pathname for the current directory for the created process, or NULL
+ to inheir the current processes'.
+ stacksize: stack size for the created process. 0 means the same size as the
+ current stack.
+
+_start_process is a lower level interface:
+
+_start_process(command, input, close_input, output, close_output,
+ error, close_error, dir, stacksize)
+ command: the string to pass to SystemTags (it will be passed to
+ the UserShell, not the system default).
+ input, output, error, close_xxx: AmigaOS filehandles for use as the
+ appropriate stream. If close_x is true, the corresponding stream will be
+ closed when the process exits.
+ dir: Lock on the desired directory for the new process.
+ stacksize: as above.
+
+
+Recompiling
+-----------
+
+To recompile, simply run lmk in the src directory. You can add the -dUSE_LOCAL
+flag to CFLAGS in lmkfile if you want the system clock to store local time
+instead of GMT.
+
+If you want symlink to work, add -dSOFTLINK to CFLAGS (For example, tar uses
+a version of unix.lib compiled like this).
+
+If you add modules, you can use the mkmkf to remake the makefile dependencies
+(it generates lmkfile from lmkfile.base and the dependencies for all the .c
+files in the current directory). This program requires perl (available from
+ftp sites).
+
+
+Changes from 1.0 to 1.1
+-----------------------
+stat() now returns a value for st_dev.
+exec() extended by eexec, assembly part rewritten in C.
+symbolic links recognized. Their use is not recommended (too buggy).
+sigvec added.
+popen, pclose added.
+Documentation discusses exec.
diff -rup --new-file baseline/fsf/emacs18/cpp/SCOPTIONS amiga/fsf/emacs18/cpp/SCOPTIONS
--- baseline/fsf/emacs18/cpp/SCOPTIONS Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/cpp/SCOPTIONS Sat Sep 28 00:00:00 1996
@@ -0,0 +1,7 @@
+IGNORE=161
+IGNORE=154
+IGNORE=100
+IGNORE=181
+IGNORE=84
+IGNORE=93
+IGNORE=72
\ No newline at end of file
diff -rup --new-file baseline/fsf/emacs18/cpp/cccp.c amiga/fsf/emacs18/cpp/cccp.c
--- baseline/fsf/emacs18/cpp/cccp.c Fri Sep 28 13:17:57 1990
+++ amiga/fsf/emacs18/cpp/cccp.c Sat Sep 28 00:00:00 1996
@@ -97,7 +97,17 @@ typedef unsigned char U_CHAR;
#ifdef EMACS
#define NO_SHORTNAMES
+#ifdef AMIGA
+#include "/src/config.h"
+#undef fflush
+#undef fwrite
+#undef main
+#undef putchar
+#undef AMIGA_DUMP
+#include <string.h>
+#else
#include "../src/config.h"
+#endif
#ifdef static
#undef static
#endif
@@ -115,7 +125,11 @@ typedef unsigned char U_CHAR;
#include <ctype.h>
#include <stdio.h>
#ifndef USG
+#ifdef AMIGA
+#include <time.h>
+#else
#include <sys/time.h> /* for __DATE__ and __TIME__ */
+#endif
#else
#define index strchr
#define rindex strrchr
@@ -123,8 +137,10 @@ typedef unsigned char U_CHAR;
#include <fcntl.h>
#endif /* USG */
+#ifndef AMIGA
void bcopy (), bzero ();
int bcmp ();
+#endif
char *xmalloc (), *xrealloc (), *xcalloc ();
void fatal (), pfatal_with_name (), perror_with_name ();
@@ -142,15 +158,29 @@ struct directory_stack
/* #include "file" starts with the first entry in the stack */
/* #include <file> starts with the second. */
/* -I directories are added after the first */
+#ifdef AMIGA
+struct directory_stack default_includes[2] =
+ {
+ { &default_includes[1], "" },
+ { 0, "include:" }
+ };
+#else
struct directory_stack default_includes[2] =
{
{ &default_includes[1], "." },
{ 0, "/usr/include" }
};
+#endif
+
struct directory_stack *include = &default_includes[0];
+#ifdef AMIGA
int max_include_len = 14; /* strlen (default_include) + 2
(for / and null) */
+#else
+int max_include_len = 9; /* strlen (default_include) + 1
+ (for null) */
+#endif
char STDIN_FILE[] = ""; /* Empty, like real cpp */
int put_out_comments = 0; /* JF non-zero means leave comments in the
@@ -379,7 +409,6 @@ main (argc, argv)
dirtmp->next = include->next;
include->next = dirtmp;
dirtmp->fname = argv[i]+2;
- include = dirtmp;
if (strlen (argv[i]) > max_include_len)
max_include_len = strlen (argv[i]);
break;
@@ -405,11 +434,11 @@ main (argc, argv)
else if ((f = open (in_fname, O_RDONLY)) < 0)
goto perror;
- fstat (f, &sbuf);
+ if (f) fstat (f, &sbuf);
fp->fname = in_fname;
fp->lineno = 1;
/* JF all this is mine about reading pipes and ttys */
- if ((sbuf.st_mode & S_IFMT) != S_IFREG) {
+ if (!f || (sbuf.st_mode & S_IFMT) != S_IFREG) {
int size;
int bsize;
int cnt;
@@ -478,11 +507,11 @@ rescan (ip, op)
struct keyword_table *handle_directive ();
int excess_newlines = 0;
int escaped = 0;
-
+
U_CHAR *bp;
-
+
check_expand(op, ip->length);
-
+
ip->bufp = ip->buf;
limit = ip->buf + ip->length;
while (1) {
@@ -615,25 +644,25 @@ rescan (ip, op)
*op->bufp++ = '/';
ip->bufp = bp + 1;
break;
-
+
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
/* if digit is not part of identifier, it is random */
if (ident_length == 0)
goto randomchar;
/* fall through */
-
+
case '_':
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
- case 'y': case 'z':
+ case 'y': case 'z':
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
- case 'Y': case 'Z':
+ case 'Y': case 'Z':
ident_length++;
/* compute step of hash function, to avoid a proc call on every token */
hash = HASHSTEP(hash, c);
@@ -646,31 +675,31 @@ randomchar:
for (hp = hashtab[MAKE_POS(hash) % HASHSIZE]; hp != NULL;
hp = hp->next) {
U_CHAR *save_ibufp; /* kludge, see below */
-
+
if (hp->length == ident_length) {
register int i = ident_length;
register U_CHAR *p = hp->name;
register U_CHAR *q = op->bufp - i;
- if (c != (U_CHAR) -1)
+ if (c != -1)
q--;
do { /* all this to avoid a strncmp() */
if (*p++ != *q++)
goto hashcollision;
} while (--i);
-
+
save_ibufp = ip->bufp;
/* back up over identifier, then expand token */
op->bufp -= ident_length;
- if (c != (U_CHAR) -1) op->bufp--;
+ if (c != -1) op->bufp--;
macroexpand (hp, ip, op, &excess_newlines);
check_expand(op, ip->length - (ip->bufp - ip->buf));
-
+
/* If we just processed an identifier at end of input,
return right away. */
- if (c == (U_CHAR) -1)
+ if (c == -1)
return;
/* if the expansion routine has not moved the input
@@ -679,7 +708,7 @@ randomchar:
reason to put it back or not put it back. */
if (ip->bufp == save_ibufp)
*op->bufp++ = c;
-
+
break; /* out of for loop */
}
hashcollision:
@@ -687,7 +716,7 @@ hashcollision:
} /* end for loop */
ident_length = hash = 0; /* stop collecting identifier */
}
-
+
/* If we just processed an identifier at end of input,
return right away. */
if (c == -1)
@@ -746,7 +775,7 @@ handle_directive (ip, op, excess_newline
while (is_idchar[*cp])
cp++;
ident_length = cp - bp;
-
+
/*
* Decode the keyword and call the appropriate expansion
* routine, after moving the input pointer up to the next line.
@@ -758,13 +787,18 @@ handle_directive (ip, op, excess_newline
register U_CHAR *buf;
register U_CHAR *limit = ip->buf + ip->length;
U_CHAR *skip_to_end_of_comment();
-
+
buf = bp = bp + ident_length;
while (bp < limit) {
if (*bp == '\'' || *bp == '\"') { /* JF handle quotes right */
U_CHAR quotec;
- for (quotec = *bp++; bp < limit && *bp != quotec; bp++) {
+ for (quotec = *bp++; bp < limit; bp++) {
+ if (*bp == quotec)
+ {
+ bp++;
+ break;
+ }
if (*bp == '\\') bp++;
if (*bp == '\n') {
if (bp[-1] == '\\')
@@ -801,13 +835,18 @@ handle_directive (ip, op, excess_newline
some slop */
bp = buf;
buf = cp;
-
+
while (bp < limit) {
if (*bp == '\'' || *bp == '\"') { /* JF handle quotes right */
U_CHAR quotec;
*cp++ = *bp;
- for (quotec = *bp++; bp < limit && *bp != quotec; *cp++ = *bp++) {
+ for (quotec = *bp++; bp < limit; *cp++ = *bp++) {
+ if (*bp == quotec)
+ {
+ *cp++ = *bp++;
+ break;
+ }
if (*bp == '\\')
*cp++ = *bp++;
if (*bp == '\n') {
@@ -939,12 +978,12 @@ expand_special_symbol (hp, ip, op)
++ip->bufp;
}
break;
-
+
oops:
-
+
error ("`defined' must be followed by IDENT or (IDENT)");
break;
-
+
default:
error("CCCP error: illegal special hash type"); /* time for gdb */
abort ();
@@ -953,7 +992,7 @@ oops:
check_expand(op, len);
bcopy (buf, op->bufp, len);
op->bufp += len;
-
+
return;
}
@@ -978,7 +1017,7 @@ do_include (buf, limit, op, keyword)
struct stat sbuf; /* to stat the include file */
FILE_BUF *fp; /* for input stack frame */
struct directory_stack *stackp;
- int flen;
+ int flen, maxlen;
int save_indepth = indepth;
/* in case of errors */
@@ -1019,7 +1058,11 @@ do_include (buf, limit, op, keyword)
if (err)
goto nope;
+ /* DG: This doesn't handle includes of aa:... on the Amiga */
+ /* It doesn't seem worth it. */
other_dir = NULL;
+ maxlen = max_include_len;
+#if 0
if (stackp == include)
{
fp = &instack[indepth];
@@ -1037,13 +1080,15 @@ do_include (buf, limit, op, keyword)
other_dir = (char *) alloca (n + 1);
strncpy (other_dir, nam, n);
other_dir[n] = '\0';
+ if (n + 4 > maxlen) maxlen = n + 4;
}
break;
}
}
}
+#endif
/* JF search directory path */
- fname = (char *) alloca (max_include_len + flen);
+ fname = (char *) alloca (maxlen + flen);
for (; stackp; stackp = stackp->next)
{
if (other_dir)
@@ -1053,6 +1098,10 @@ do_include (buf, limit, op, keyword)
}
else
strcpy (fname, stackp->fname);
+#ifdef AMIGA
+ if (fname[0] != 0 && fname[strlen(fname) - 1] != ':')
+ /* Don't add / after : or empty strings */
+#endif
strcat (fname, "/");
strncat (fname, fbeg, flen);
if ((f = open (fname, O_RDONLY)) >= 0)
@@ -1064,7 +1113,11 @@ do_include (buf, limit, op, keyword)
goto nope;
}
+#ifdef AMIGA
+ if (stat(fname, &sbuf) < 0)
+#else
if (fstat(f, &sbuf) < 0)
+#endif
{
perror_with_name (fname);
goto nope; /* impossible? */
@@ -1202,7 +1255,7 @@ do_define (buf, limit, op, keyword)
++bp; /* skip paren */
/* Skip exactly one space or tab if any. */
if (bp < limit && (*bp == ' ' || *bp == '\t')) ++bp;
-
+
/* now everything from bp before limit is the definition. */
defn = collect_expansion(bp, limit - bp, arg_ptrs);
} else {
@@ -1226,10 +1279,10 @@ do_define (buf, limit, op, keyword)
}
}
}
-
+
install (symname, T_MACRO, defn);
return 0;
-
+
nope:
return 1;
@@ -1308,7 +1361,7 @@ collect_expansion(buf, size, arglist)
if (is_idstart[*p] && (p==buf || !is_idchar[*(p-1)])) {
- for (id_len = 0; is_idchar[p[id_len]]; id_len++)
+ for (id_len = 0; p+id_len < buf+size && is_idchar[p[id_len]]; id_len++)
;
for (arg = arglist; arg != NULL; arg = arg->next) {
struct reflist *tpat;
@@ -1341,7 +1394,7 @@ collect_expansion(buf, size, arglist)
*exp_p++ = '\0';
defn->length = exp_p - defn->expansion - 1;
-
+
/* give back excess storage */
defn->expansion = (U_CHAR *) xrealloc (defn->expansion, defn->length + 1);
@@ -1456,7 +1509,7 @@ do_undef(buf, limit, op, keyword)
delete (hp);
}
-/* handle #error command later */
+/* handle #error command later */
do_error()
{
}
@@ -1465,6 +1518,21 @@ do_error()
* the behavior of the #pragma directive is implementation defined.
* this implementation defines it as follows.
*/
+#ifdef AMIGA
+do_pragma(buf, limit, op, keyword)
+ U_CHAR *buf, *limit;
+ FILE_BUF *op;
+ struct keyword_table *keyword;
+{
+ /* Just copy the pragma directibe back out */
+ int len2 = limit - buf, len1 = sizeof("#pragma") - 1;
+
+ check_expand(op, len1 + len2);
+ bcopy("#pragma", op->bufp, len1);
+ bcopy(buf, op->bufp + len1, len2);
+ op->bufp += len1 + len2;
+}
+#else
do_pragma()
{
close (0);
@@ -1479,6 +1547,7 @@ do_pragma()
nope:
fatal ("You are in a maze of twisty compiler features, all different");
}
+#endif
typedef struct if_stack {
struct if_stack *next; /* for chaining to the next stack frame */
@@ -1541,7 +1610,7 @@ do_elif (buf, limit, op, keyword)
}
if_stack->type = T_ELIF;
}
-
+
value = eval_if_expression (buf, limit - buf);
conditional_skip (ip, value == 0, T_ELIF);
}
@@ -1574,7 +1643,7 @@ eval_if_expression (buf, length)
delete (save_defined); /* clean up special symbol */
free (temp_obuf.buf);
-
+
return value;
}
@@ -1614,7 +1683,7 @@ conditional_skip (ip, skip, type)
if_stack = temp;
if_stack->type = type;
-
+
if (skip != 0) {
skip_if_group(ip);
return;
@@ -1724,7 +1793,7 @@ skip_if_group(ip)
* without changing if_stack ; this is so that the error message
* for missing #endif's etc. will point to the original #if. It
* is possible that something different would be better.
- */
+ */
do_else(buf, limit, op, keyword)
U_CHAR *buf, *limit;
FILE_BUF *op;
@@ -1915,7 +1984,7 @@ macroexpand (hp, ip, op, excess_newlines
int totlen; /* total amount of exp buffer filled so far */
register struct reflist *ap;
- struct argptrs {
+ struct argptrs {
U_CHAR *argstart;
int length;
} *args;
@@ -1999,7 +2068,7 @@ macroexpand (hp, ip, op, excess_newlines
ip2->buf = ip2->bufp = defn->expansion;
ip2->length = defn->length;
}
-
+
rescan (ip2, op);
--indepth;
*excess_newlines_ptr += newlines_found;
@@ -2024,7 +2093,7 @@ skip_macro_argument(bp, ip, newlines)
{
int paren = 0;
int quotec = 0;
-
+
while (bp < ip->buf + ip->length) {
switch (*bp) {
case '(':
@@ -2084,9 +2153,9 @@ error (msg)
}
if (ip != NULL)
- fprintf(stdout, "file %s, offset %d (line %d): ",
+ fprintf(stderr, "file %s, offset %d (line %d): ",
ip->fname, ip->bufp - ip->buf, ip->lineno);
- fprintf(stdout, "%s\n", msg);
+ fprintf(stderr, "%s\n", msg);
return 0;
}
@@ -2109,7 +2178,7 @@ check_expand(obuf, needed)
{
register int i;
register U_CHAR *p;
-
+
if (obuf->length - (obuf->bufp - obuf->buf) > needed)
return obuf->buf;
@@ -2125,7 +2194,7 @@ check_expand(obuf, needed)
return p;
}
-
+
/*
* install a name in the main hash table, even if it is already there.
* name stops with first non alphanumeric, except leading '#'.
@@ -2198,7 +2267,7 @@ lookup (name)
delete(hp)
HASHNODE *hp;
{
-
+
if (hp->prev != NULL)
hp->prev->next = hp->next;
if (hp->next != NULL)
@@ -2232,10 +2301,10 @@ hashf(name, len, hashsize)
int hashsize;
{
register int r = 0;
-
+
while (len--)
r = HASHSTEP(r, *name++);
-
+
return MAKE_POS(r) % hashsize;
}
@@ -2282,7 +2351,7 @@ initialize_random_junk()
#endif
/* is there more? */
-
+
}
/*
@@ -2357,7 +2426,7 @@ bzero (b, length)
#endif /* not VMS */
}
-void
+void
bcopy (b1, b2, length)
register char *b1;
register char *b2;
@@ -2379,7 +2448,7 @@ bcopy (b1, b2, length)
*b2++ = *b1++;
#endif /* not VMS */
}
-
+
int
bcmp (b1, b2, length) /* This could be a macro! */
register char *b1;
diff -rup --new-file baseline/fsf/emacs18/cpp/smakefile amiga/fsf/emacs18/cpp/smakefile
--- baseline/fsf/emacs18/cpp/smakefile Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/cpp/smakefile Sat Sep 28 00:00:00 1996
@@ -0,0 +1,23 @@
+# Makefile for cccp in the Emacs distribution only.
+# Here we assume that you are using SASC
+# (since cccp is used by Emacs only to deal with long strings in macros.
+
+CFLAGS=DEF EMACS idir //unix/include/ def STACK_DIRECTION=-1 def OUTPUT_LINE_COMMANDS nowvret debug sf
+
+cpp: cccp
+ -delete cpp
+ makelink cpp cccp
+cccp: cccp.o cexp.tab.o alloca.o
+ sc link cccp.o alloca.o cexp.tab.o to cccp lib //unix/src/unix.lib
+
+testexp: y.tab.c
+ cc -g -DTEST_EXP_READER y.tab.c -o testexp
+
+cexp.tab.c: cexp.y
+ echo "expect 40 shift/reduce conflicts"
+ bin:bison cexp.y >bison.debug
+
+cccp.o: cccp.c
+cexp.tab.o: cexp.tab.c
+alloca.o: /src/alloca.c
+ $(CC) $(CFLAGS) objname alloca.o /src/alloca.c
diff -rup --new-file baseline/fsf/emacs18/etc/SCOPTIONS amiga/fsf/emacs18/etc/SCOPTIONS
--- baseline/fsf/emacs18/etc/SCOPTIONS Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/etc/SCOPTIONS Sat Sep 28 00:00:00 1996
@@ -0,0 +1,15 @@
+STRINGMERGE
+STRUCTUREEQUIVALENCE
+NOWARNVOIDRETURN
+NOVERSION
+MEMORYSIZE=HUGE
+INCLUDEDIR=src:unix/include
+IGNORE=147
+IGNORE=62
+IGNORE=132
+IGNORE=154
+IGNORE=104
+IGNORE=100
+IGNORE=161
+IGNORE=84
+IGNORE=93
diff -rup --new-file baseline/fsf/emacs18/etc/amiga-env.c amiga/fsf/emacs18/etc/amiga-env.c
--- baseline/fsf/emacs18/etc/amiga-env.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/etc/amiga-env.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,439 @@
+/* env.c - manipulate environment and execute a program
+ in that environment
+ Mly 861126
+
+ Copyright (C) 1986 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them. Help stamp out software-hoarding! */
+
+/*
+
+ If first argument is "-", then a new environment is constructed
+ from scratch; otherwise the environment is inherited from the parent
+ process, except as modified by other options.
+
+ So, "env - foo" will invoke the "foo" program in a null environment,
+ whereas "env foo" would invoke "foo" in the same environment as that
+ passed to "env" itself.
+
+ Subsequent arguments are interpreted as follows:
+
+ * "variable=value" (ie an arg containing a "=" character)
+ means to set the specified environment variable to that value.
+ `value' may be of zero length ("variable="). Note that setting
+ a variable to a zero-length value is different from unsetting it.
+
+ * "-u variable" or "-unset variable"
+ means to unset that variable
+ If that variable isn't set, does nothing.
+
+ * "-s variable value" or "-set variable value"
+ same as "variable=value"
+
+ * "-" or "--"
+ are used to indicate that the following argument is the program
+ to invoke. This is only necessary when the program's name
+ begins with "-" or contains a "="
+
+ * anything else
+ The first remaining argument specifies a program to invoke
+ (it is searched for according to the specification of the PATH
+ environment variable) and any arguments following that are
+ passed as arguments to that program
+
+ If no program-name is specified following the environment
+ specifications the the resulting environment is printed
+ (The is like specifying a program-name of "printenv")
+
+ Examples:
+ If the environment passed to "env" is
+ { USER=rms EDITOR=emacs PATH=.:/gnubin:/hacks }
+
+ * "env DISPLAY=gnu:0 nemacs"
+ calls "nemacs" in the envionment
+ { EDITOR=emacs USER=rms DISPLAY=gnu }
+
+ * "env - USER=foo /hacks/hack bar baz"
+ will call the "hack" program on arguments "bar" and "baz"
+ in an environment in which the only variable is "USER"
+ Note that the "-" option will clear out the PATH variable,
+ so one should be careful to specify in which directory
+ to find the program to call
+
+ * "env -u EDITOR USER=foo PATH=/energy -- e=mc2 bar baz"
+ The program "/energy/e=mc2" is called with environment
+ { USER=foo PATH=/energy }
+
+*/
+
+#include <exec/types.h>
+#include <dos/dostags.h>
+#include <dos/var.h>
+#include <proto/dos.h>
+#include <proto/exec.h>
+
+#ifdef EMACS
+#define NO_SHORTNAMES
+#include "../src/config.h"
+#endif /* EMACS */
+
+#include <stdio.h>
+#include <errno.h>
+#include <setjmp.h>
+
+extern int execvp ();
+extern char *index ();
+
+char *xmalloc (), *xrealloc ();
+char *concat ();
+
+char *progname;
+void setenv ();
+void fatal ();
+
+#define index strchr
+
+struct MsgPort *end_port;
+struct {
+ struct Message msg;
+ int rc;
+} end_msg;
+int gargc;
+char **gargv;
+jmp_buf unixexit_buf;
+
+void __saveds unix_start(void)
+{
+ int rc;
+
+ if (!(rc = setjmp(unixexit_buf)))
+ {
+ unixmain(gargc, gargv);
+ rc = 1;
+ }
+ end_msg.rc = rc - 1;
+ end_msg.msg.mn_Length = sizeof(end_msg);
+ end_msg.msg.mn_Node.ln_Type = NT_MESSAGE;
+ PutMsg(end_port, &end_msg);
+}
+
+void unixexit(int rc)
+{
+ longjmp(unixexit_buf, rc + 1);
+}
+
+main(int argc, char **argv)
+{
+ int rc = 1;
+ long stacksize;
+ struct Process *us = (struct Process *)FindTask(0);
+
+ if (us->pr_CLI) stacksize = ((struct CommandLineInterface *)BADDR(us->pr_CLI))->cli_DefaultStack << 2;
+ else stacksize = us->pr_StackSize;
+
+ gargc = argc;
+ gargv = argv;
+
+ end_port = CreateMsgPort();
+
+ if (end_port && CreateNewProcTags(NP_Entry, unix_start,
+ NP_Input, Input(), NP_CloseInput, 0UL,
+ NP_Output, Output(), NP_CloseOutput, 0UL,
+ NP_StackSize, stacksize,
+ NP_Cli, TRUE, TAG_END))
+ {
+ while (!GetMsg(end_port)) WaitPort(end_port);
+ rc = end_msg.rc;
+ }
+ if (end_port) DeleteMsgPort(end_port);
+ Delay(1);
+ exit(rc);
+}
+
+#define exit unixexit
+
+unixmain (argc, argv)
+ register int argc;
+ register char **argv;
+{
+ register char *tem;
+
+ progname = argv[0];
+ argc--;
+ argv++;
+
+ /* "-" flag means to not inherit parent's environment */
+ /* This is ignored on the amiga */
+ if (argc && !strcmp (*argv, "-"))
+ {
+ argc--;
+ argv++;
+ }
+
+ while (argc > 0)
+ {
+ tem = index (*argv, '=');
+ if (tem)
+ /* If arg contains a "=" it specifies to set a variable */
+ {
+ *tem = '\000';
+ setenv (*argv, tem + 1);
+ argc--; argv++;
+ continue;
+ }
+
+ if (**argv != '-')
+ /* Remaining args are program name and args to pass it */
+ break;
+
+ if (argc < 2)
+ fatal ("No argument following \"%s\" switch", *argv);
+ if (!strcmp (*argv, "-u") ||
+ !strcmp (*argv, "-unset"))
+ /* Unset a variable */
+ {
+ argc--; argv++;
+ setenv (*argv, 0);
+ argc--; argv++;
+ }
+ else if (!strcmp (*argv, "-s") ||
+ !strcmp (*argv, "-set"))
+ /* Set a variable */
+ {
+ argc--; argv++;
+ tem = *argv;
+ if (argc < 2)
+ fatal ("No value specified for variable \"%s\"",
+ tem);
+ argc--; argv++;
+ setenv (tem, *argv);
+ argc--; argv++;
+ }
+ else if (!strcmp (*argv, "-") || !strcmp (*argv, "--"))
+ {
+ argc--; argv++;
+ break;
+ }
+ else
+ {
+ fatal ("unknown switch \"%s\"", *argv);
+ }
+ }
+
+ /* If no program specified print the environment and exit */
+ if (argc <= 0)
+ {
+ printenv();
+ exit (0);
+ }
+ else
+ {
+ extern int errno, sys_nerr;
+ extern char *sys_errlist[];
+
+ (void) execvp (*argv, argv);
+
+ fprintf (stderr, "%s: Cannot execute \"%s\"",
+ progname, *argv);
+ if (errno < sys_nerr)
+ fprintf (stderr, ": %s\n" , sys_errlist[errno]);
+ else
+ putc ('\n', stderr);
+ exit (errno != 0 ? errno : 1);
+ }
+}
+
+int execvp(program, argv)
+char *program, **argv;
+{
+ int index, comsize;
+ char *combuf, *bp;
+ long err, rc;
+
+ combuf = xmalloc(256);
+ comsize = 256;
+
+ bp = combuf;
+ for (index = 0; argv[index] != 0; index++)
+ {
+ char *s = argv[index];
+ int len;
+
+ len = 3;
+ while (*s) len += 1 + 2 * (*s++ == '"');
+ if (bp + len + 1 >= combuf + comsize)
+ {
+ char *newbuf;
+ int new_comsize;
+
+ new_comsize = 2 * comsize + len;
+ newbuf = xmalloc(new_comsize);
+ memcpy(newbuf, combuf, comsize);
+
+ bp = newbuf + (bp - combuf);
+ combuf = newbuf;
+ comsize = new_comsize;
+ }
+ *bp++ = ' ';
+ *bp++ = '"';
+ s = argv[index];
+ while (*s)
+ {
+ if (*s == '"' || *s == '*') *bp++ = '*';
+ *bp++ = *s++;
+ }
+ *bp++ = '"';
+ }
+ *bp = '\0';
+ rc = SystemTags(combuf,
+ SYS_UserShell, 1UL,
+ TAG_END);
+ err = IoErr();
+ free(combuf);
+ if (rc != -1) exit(rc);
+
+ errno = convert_oserr(err);
+ return -1;
+}
+
+int convert_oserr(int ioerr)
+{
+ extern int _OSERR;
+
+ _OSERR = ioerr;
+ switch (ioerr)
+ {
+ case 0: return 0;
+ case ERROR_NO_FREE_STORE: return ENOMEM;
+ case ERROR_TASK_TABLE_FULL: return EAGAIN;
+ case ERROR_BAD_TEMPLATE: case ERROR_REQUIRED_ARG_MISSING:
+ case ERROR_KEY_NEEDS_ARG: case ERROR_TOO_MANY_ARGS:
+ case ERROR_UNMATCHED_QUOTES: case ERROR_LINE_TOO_LONG: return EINVAL;
+ case ERROR_OBJECT_IN_USE: return EBUSY;
+ case ERROR_OBJECT_EXISTS: return EEXIST;
+ case ERROR_DIR_NOT_FOUND: return ENOENT;
+ case ERROR_OBJECT_NOT_FOUND: return ENOENT;
+ case ERROR_BAD_STREAM_NAME: return EINVAL;
+ case ERROR_OBJECT_TOO_LARGE: return E2BIG;
+ case ERROR_ACTION_NOT_KNOWN: return EINVAL;
+ case ERROR_INVALID_COMPONENT_NAME: return EINVAL;
+ case ERROR_INVALID_LOCK: return EINVAL;
+ case ERROR_OBJECT_WRONG_TYPE: return EINVAL;
+ case ERROR_DISK_WRITE_PROTECTED: return EACCES;
+ case ERROR_SEEK_ERROR: return EIO;
+ case ERROR_DISK_FULL: return ENOSPC;
+ case ERROR_DELETE_PROTECTED: return EACCES;
+ case ERROR_WRITE_PROTECTED: return EACCES;
+ case ERROR_READ_PROTECTED: return EACCES;
+ case ERROR_RENAME_ACROSS_DEVICES: return EXDEV;
+ default: return EOSERR;
+ }
+}
+
+printenv(void)
+/* Effect: Prints a UNIX style environment from the AmigaOS environment.
+*/
+{
+ struct LocalVar *scan_env;
+ struct Process *us = (struct Process *)FindTask(0);
+
+ for (scan_env = (struct LocalVar *)us->pr_LocalVars.mlh_Head;
+ scan_env->lv_Node.ln_Succ;
+ scan_env = (struct LocalVar *)scan_env->lv_Node.ln_Succ)
+ if (scan_env->lv_Node.ln_Type == LV_VAR &&
+ !(scan_env->lv_Flags & (GVF_GLOBAL_ONLY | GVF_BINARY_VAR)))
+ {
+ /* We only handle local text variables */
+ printf("%s=", scan_env->lv_Node.ln_Name);
+ fwrite(scan_env->lv_Value, 1, scan_env->lv_Len, stdout);
+ putchar('\n');
+ }
+}
+
+void
+setenv (var, val)
+ register char *var, *val;
+{
+ if (val) SetVar(var, val, -1, LV_VAR | GVF_LOCAL_ONLY);
+ else DeleteVar(var, LV_VAR | GVF_LOCAL_ONLY);
+}
+
+void
+fatal (msg, arg1, arg2)
+ char *msg, *arg1, *arg2;
+{
+ fprintf (stderr, "%s: ", progname);
+ fprintf (stderr, msg, arg1, arg2);
+ putc ('\n', stderr);
+ exit (1);
+}
+
+
+extern char *malloc (), *realloc ();
+
+void
+memory_fatal ()
+{
+ fatal ("Out of memory");
+}
+
+char *
+xmalloc (size)
+ int size;
+{
+ register char *value;
+ value = (char *) malloc (size);
+ if (!value) memory_fatal ();
+ return (value);
+}
+
+char *
+xrealloc (ptr, size)
+ char *ptr;
+ int size;
+{
+ register char *value;
+ value = (char *) realloc (ptr, size);
+ if (!value) memory_fatal ();
+ return (value);
+}
+
+/* Return a newly-allocated string whose contents concatenate those of s1, s2, s3. */
+
+char *
+concat (s1, s2, s3)
+ char *s1, *s2, *s3;
+{
+ int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
+ char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
+
+ strcpy (result, s1);
+ strcpy (result + len1, s2);
+ strcpy (result + len1 + len2, s3);
+ *(result + len1 + len2 + len3) = 0;
+
+ return result;
+}
+
+
+/*
+ * Local variables:
+ * compile-command: "lc -L -v amiga-env.c"
+ * end:
+ */
diff -rup --new-file baseline/fsf/emacs18/etc/etags.c amiga/fsf/emacs18/etc/etags.c
--- baseline/fsf/emacs18/etc/etags.c Wed Aug 19 22:11:01 1992
+++ amiga/fsf/emacs18/etc/etags.c Sat Sep 28 00:00:00 1996
@@ -338,10 +338,17 @@ main(ac,av)
{
for (i=1; i<ac; i++)
{
+#ifdef AMIGA
+ rename(outfile, "OTAGS");
+ sprintf(cmd, "egrep >%s -v '\t%s\t' OTAGS", outfile, av[i]);
+ system(cmd);
+ unlink("OTAGS");
+#else
sprintf(cmd,
"mv %s OTAGS;fgrep -v '\t%s\t' OTAGS >%s;rm OTAGS",
outfile, av[i], outfile);
system(cmd);
+#endif
}
aflag++;
}
@@ -357,7 +364,11 @@ main(ac,av)
#ifndef VMS
if (uflag)
{
+#ifdef AMIGA
+ sprintf(cmd, "c:sort from %s to %s", outfile, outfile);
+#else
sprintf(cmd, "sort %s -o %s", outfile, outfile);
+#endif
system(cmd);
}
#endif
diff -rup --new-file baseline/fsf/emacs18/etc/make-docfile.c amiga/fsf/emacs18/etc/make-docfile.c
--- baseline/fsf/emacs18/etc/make-docfile.c Fri Oct 25 11:43:28 1991
+++ amiga/fsf/emacs18/etc/make-docfile.c Sat Sep 28 00:00:00 1996
@@ -57,8 +57,30 @@ main (argc, argv)
i += 2;
}
+#ifdef AMIGA
+ {
+ char fn[512], *fpos;
+ int c;
+
+ c = getchar();
+ do
+ {
+ while (c == ' ' || c == '\n' || c == '\t') c = getchar();
+ if (c == EOF) break;
+ fpos = fn;
+ do *fpos++ = c;
+ while ((c = getchar()) != EOF && c != ' ' && c != '\t' && c != '\n');
+ *fpos = 0;
+
+ fprintf(stderr, "doc file %s\n", fn);
+ err_count += scan_file (fn); /* err_count seems to be {mis,un}used */
+ }
+ while (1);
+ }
+#else
for (; i < argc; i++)
err_count += scan_file (argv[i]); /* err_count seems to be {mis,un}used */
+#endif
#ifndef VMS
exit (err_count); /* see below - shane */
#endif /* VMS */
diff -rup --new-file baseline/fsf/emacs18/etc/sh.c amiga/fsf/emacs18/etc/sh.c
--- baseline/fsf/emacs18/etc/sh.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/etc/sh.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,145 @@
+;/*
+SC LINK NOSTKCHK DEF SASC=1 sh.c
+QUIT
+*/
+/*
+ * original version: David Gay
+ *
+ * 05/18/93 ch added SAS support, external verbose flag and primitive_parse
+ */
+#include <exec/types.h>
+#include <dos/dostags.h>
+#include <stdio.h>
+
+#ifdef SASC
+#include <string.h>
+#include <stdlib.h>
+#endif
+
+#include <proto/dos.h>
+
+/*
+ translates:
+
+ echo "string1;string2" ; cd xx:c ; copy xx yy
+
+ into
+
+ echo "string1;string2" \n cd xx:c \n copy xx yy
+
+ note:
+ this is a really primitive function ;-) , it may be
+ changed if necessary
+
+*/
+
+#define QUOTE '"'
+
+void primitive_parse(char *s)
+{
+ int c;
+
+ while(c = *s++)
+ {
+ if(c == QUOTE)
+ {
+ while((c = *s++) && (c != QUOTE))
+ ;
+ if(!c)
+ break;
+ }
+ else if(c == ';')
+ *(s-1) = '\n';
+ }
+}
+
+int execute(char *cmd, int debug)
+{
+ long rc;
+ char *s;
+
+ while (*cmd == ' ') cmd++;
+ if (strncmp(cmd, "exec", 4) == 0 && (cmd[4] == ' ' || cmd[4] == '\t'))
+ cmd += 4;
+
+ s = cmd;
+ primitive_parse(s);
+
+ if(debug)
+ fprintf(stderr,"/etc/sh: preparsed line:\n%s\n", cmd);
+
+ if ((rc = SystemTags(cmd, SYS_UserShell, TRUE, TAG_END)) == -1)
+ {
+ fprintf(stderr, "Failed to execute command %s\n", cmd);
+ return 20;
+ }
+ return rc;
+}
+
+void main(int argc, char **argv)
+{
+ int command;
+ char *command_string;
+ char *program_name = argv[0];
+ struct RDArgs *args;
+ long opts[1];
+ static char options[] = "";
+ long debug = 0;
+ char *shenv;
+
+ /* Throw out AmigaOS args so that Input() is clean */
+ if (args = ReadArgs(options, opts, NULL)) FreeArgs(args);
+
+ shenv = getenv("EMACS_SH_DEBUG");
+
+ if(shenv)
+ if(strstr(shenv, "-v")) /* external verbose flag */
+ debug = 1;
+
+ command = 0;
+ /* Simplistic argument parsing */
+ argv++;
+ argc--;
+ while (argc > 0 && argv[0][0] == '-')
+ {
+ switch (argv[0][1])
+ {
+ case 'c':
+ if (argc == 1) goto usage;
+ command = 1;
+ command_string = argv[1];
+ argv++;
+ argc--;
+ break;
+ case 'v':
+ debug = 1;
+ break;
+ case 'i':
+ /* ignored for now */
+ break;
+ default: goto usage;
+ }
+ argc--;
+ argv++;
+ }
+ if (argc != 0) goto usage;
+
+ if (command)
+ {
+ if(debug)
+ fprintf(stderr,"%s: command_string = %s\n", argv[0], command_string);
+ exit(execute(command_string, debug));
+ }
+ else exit(Execute("", Input(), NULL) ? 0 : 1);
+
+ usage:
+ fprintf(stderr, "%s [-i] [-v] [-c command]\n", program_name);
+ exit(1);
+}
+
+
+/*
+ * Local variables:
+ * compile-command: "sc link nostkchk def SASC=1 sh.c"
+ * end:
+ */
diff -rup --new-file baseline/fsf/emacs18/etc/smakefile amiga/fsf/emacs18/etc/smakefile
--- baseline/fsf/emacs18/etc/smakefile Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/etc/smakefile Sat Sep 28 00:00:00 1996
@@ -0,0 +1,17 @@
+all: etags sh wakeup make-docfile # env
+
+env: amiga-env.c
+ echo "'sc link to env nostkchk amiga-env.c' should work (but doesn't)."
+ echo "You're welcome to try ..."
+
+make-docfile: make-docfile.c
+ sc link make-docfile.c
+
+sh: sh.c
+ sc link sh.c
+
+wakeup: wakeup.c
+ sc link wakeup.c
+
+etags: etags.c
+ sc link idir //unix/include def ETAGS etags.c lib //unix/src/unix.lib
diff -rup --new-file baseline/fsf/emacs18/etc/termcap.amiga amiga/fsf/emacs18/etc/termcap.amiga
--- baseline/fsf/emacs18/etc/termcap.amiga Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/etc/termcap.amiga Sat Sep 28 00:00:00 1996
@@ -0,0 +1,12 @@
+ Amiga termcap by Kent Polk and David Gay
+AA|amiga|Amiga ANSI:\
+ :co#80:li#23:am:bs:bw:MT:\
+ :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+ :LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:\
+ :ae=\017:al=\E[L:as=\016:bl=\007:bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+ :cm=\E[%i%d;%dH:dc=\E[P:dl=\E[M:do=\E[B:ho=\E[H:ic=\E[@:is=\E[20l:\
+ :k1=\E0~:k2=\E1~:k3=\E2~:k4=\E3~:k5=\E4~:k6=\E5~:k7=\E6~:k8=\E7~:k9=\E8~:\
+ :k0=\E9~:kb=^H:kd=\EB:kl=\ED:kr=\EC:ku=\EA:le=\E[D:\
+ :mb=\E[7;2m:md=\E[1m:me=\E[0m:mh=\E[2m:mk=\E[8m:mr=\E[7m:nd=\E[C:nl=\E[B:\
+ :rs=\Ec:se=\E[0m:sf=\E[S:so=\E[7m:sr=\E[T:ue=\E[0m:up=\E[A:us=\E[4m:\
+ :ve=\E[\040p:vi=\E[\060\040p:xn:
diff -rup --new-file baseline/fsf/emacs18/etc/wakeup.c amiga/fsf/emacs18/etc/wakeup.c
--- baseline/fsf/emacs18/etc/wakeup.c Tue Jul 30 14:03:39 1991
+++ amiga/fsf/emacs18/etc/wakeup.c Sat Sep 28 00:00:00 1996
@@ -18,11 +18,17 @@ main (argc, argv)
while (1)
{
+#ifdef AMIGA
+ if (Write(Output(), "Wake up!\n", 9) != 9) exit(0);
+ chkabort();
+#define sleep(n) Delay(50 * (n))
+#else
/* Make sure wakeup stops when Emacs goes away. */
if (getppid () == 1)
exit (0);
printf ("Wake up!\n");
fflush (stdout);
+#endif
/* If using a period of 60, produce the output when the minute
changes. */
if (period == 60)
diff -rup --new-file baseline/fsf/emacs18/info/texinfo-3 amiga/fsf/emacs18/info/texinfo-3
--- baseline/fsf/emacs18/info/texinfo-3 Thu Jan 10 15:03:25 1991
+++ amiga/fsf/emacs18/info/texinfo-3 Sat Sep 28 00:00:00 1996
@@ -346,11 +346,11 @@ directory. Currently, it is equivalent
the output. For example,
The @file{.el} files are in
- the @file{/gnu/emacs/lisp} directory.
+ the @file{/ade/emacs/lisp} directory.
produces
- The `.el' files are in the `/gnu/emacs/lisp' directory.
+ The `.el' files are in the `/ade/emacs/lisp' directory.
diff -rup --new-file baseline/fsf/emacs18/lisp/amiga-init.el amiga/fsf/emacs18/lisp/amiga-init.el
--- baseline/fsf/emacs18/lisp/amiga-init.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/lisp/amiga-init.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,206 @@
+(global-set-key "\C-z" 'amiga-iconify)
+(setq amiga-map (make-keymap))
+(global-set-key "\C-x\C-^" amiga-map)
+
+(load "amiga-mouse")
+(load "amiga-menu")
+
+(define-key amiga-map "A" 'previous-line)
+(define-key amiga-map "B" 'next-line)
+(define-key amiga-map "D" 'backward-char)
+(define-key amiga-map "C" 'forward-char)
+(define-key amiga-map "?~" 'info)
+(define-key amiga-map "T" 'scroll-down)
+(define-key amiga-map "S" 'scroll-up)
+(define-key amiga-map " @" 'forward-word)
+(define-key amiga-map " A" 'backward-word)
+(define-key amiga-map "\M-A" 'beginning-of-buffer)
+(define-key amiga-map "\M-B" 'end-of-buffer)
+(define-key amiga-map "\M-D" 'beginning-of-line)
+(define-key amiga-map "\M-C" 'end-of-line)
+(define-key amiga-map "\M- \M-@" 'forward-sexp)
+(define-key amiga-map "\M- \M-A" 'backward-sexp)
+(define-key amiga-map "\M-T" 'scroll-down-1)
+(define-key amiga-map "\M-S" 'scroll-up-1)
+; Keypad sequences are handled like normal ones
+(define-key amiga-map "K" 'do-nothing)
+
+(defun do-nothing () (interactive))
+
+(defun scroll-down-1 ()
+ "Move up one line on screen"
+ (interactive)
+ (scroll-down 1))
+
+(defun scroll-up-1 ()
+ "Move down one line on screen"
+ (interactive)
+ (scroll-up 1))
+
+;; ARexx stuff
+
+;;; This function needs to be re-written to handle rexx returned results.
+;;;
+(setq amiga-arexx-processing nil)
+(setq amiga-arexx-errors nil)
+
+(defvar amiga-arexx-failat 5
+ "Return level from which arexx commands returns cause errors")
+
+;;
+;; process incoming rexx messages
+;;
+(defun amiga-arexx-process ()
+ (interactive)
+ (if (not amiga-arexx-processing)
+ (progn
+ (setq amiga-arexx-processing t)
+ (condition-case nil ; Avoid blocking of processing in case of bugs
+ (let (arexxcmd)
+ (while (setq arexxcmd (amiga-arexx-get-next-msg))
+ (let ((rc 0) result)
+ (condition-case err ; detect errors in arexx command
+ (let ((expr (car (read-from-string arexxcmd))))
+ (setq result (prin1-to-string (eval expr))))
+ (error (progn
+ (setq rc 20)
+ (setq result (prin1-to-string err)))))
+ (amiga-arexx-reply rc result))))
+ (error nil))
+ (setq amiga-arexx-processing nil))))
+
+(defun amiga-arexx-wait-command (id)
+ "Waits for a pending ARexx commands (MSGID) to complete.
+Also processes any pending ARexx requests during this interval.
+returns the result list associated with this id, which takes the
+form: (msgid result-code error-or-string)
+``error-or-string'' depends on ``result-code''.
+if ``result-code'' is 0 the command finished successfully and
+``error-or-string'' will be a string or nil, otherwise the command
+returned with an error and ``error-or-string'' will be an interger
+that is the secondary error code of the arexx command."
+ (amiga-arexx-process)
+ (while (not (amiga-arexx-check-command id))
+ (amiga-arexx-wait)
+ (amiga-arexx-process))
+ (amiga-arexx-get-msg-results id))
+
+(defconst amiga-arexx-error-messages
+["No cause"
+"Program not found"
+"Execution halted"
+"Insufficient memory"
+"Invalid character"
+"Unmatched quote"
+"Unterminated comment"
+"Clause too long"
+"Invalid token"
+"Symbol or string too long"
+"Invalid message packet"
+"Command string error"
+"Error return from function"
+"Host environment not found"
+"Requested library not found"
+"Function not found"
+"Function did not return value"
+"Wrong number of arguments"
+"Invalid argument to function"
+"Invalid PROCEDURE"
+"Unexpected THEN or WHEN"
+"Unexpected ELSE or OTHERWISE"
+"Unexpected BREAK, LEAVE or ITERATE"
+"Invalid statement in SELECT"
+"Missing or multiple THEN"
+"Missing OTHERWISE"
+"Missing or unexpected END"
+"Symbol mismatch"
+"Invalid DO syntax"
+"Incomplete IF or SELECT"
+"Label not found"
+"Symbol expected"
+"Symbol or string expected"
+"Invalid keyword"
+"Required keyword missing"
+"Extraneous characters"
+"Keyword conflict"
+"Invalid template"
+"Invalid TRACE request"
+"Unitialized variable"
+"Invalid variable name"
+"Invalid expression"
+"Unbalanced parentheses"
+"Nesting limit exceeded"
+"Invalid expression result"
+"Expression required"
+"Boolean value not 0 or 1"
+"Arithmetic conversion error"
+"Invalid operand"
+]
+"The arexx error messages, sorted by number")
+
+(defun amiga-arexx-do-command (str as-file)
+ "Sends ARexx command STR (like amiga-arexx-send-command).
+If AS-FILE is true, STR is an arexx command, otherwise it is a file name.
+Waits for the command to return. If the arexx command fails an error will
+be caused.
+
+If you would like to get result strings and errors (ie. not cause
+a lisp error) use: (amiga-arexx-do-command-with-results)"
+ (interactive "sARexx command:
+P")
+ (let ((id (amiga-arexx-send-command str as-file)))
+ (if (not id)
+ (error "Failed to send arexx command.")
+ (let ((reslist (amiga-arexx-wait-command id)))
+ (let ((rc (nth 1 reslist)) (second (nth 2 reslist)))
+ (if (> rc 0)
+ (progn ; error
+ (let ((error-message
+ (if (< second (length amiga-arexx-error-messages))
+ (aref amiga-arexx-error-messages second)
+ (format nil "Unknown error %d" second))))
+ (error "Arexx command failed, level %d, cause %s" rc error-message))
+ reslist)
+ second))))))
+
+(defun amiga-arexx-do-command-with-results (str as-file)
+ "Sends ARexx command STR (like amiga-arexx-do-command).
+If AS-FILE is true, STR is an arexx command, otherwise it is a file name.
+Waits for the command to return.
+
+The return value is one of three things:
+ - the command executed succesfully: nil or a result string.
+ - the command failed: a list of the form (RC ERROR-CODE)
+ where RC is the severity and ERROR-CODE is the secondary error."
+ (interactive "sARexx command:
+P")
+ (let ((id (amiga-arexx-send-command str as-file)))
+ (if (not id)
+ (error "Failed to send arexx command.")
+ (let ((reslist (amiga-arexx-wait-command id)))
+ (let ((rc (nth 1 reslist)) (second (nth 2 reslist)))
+ (if (and rc (> rc 0))
+ (list rc second)
+ second))))))
+
+(define-key amiga-map "X" 'amiga-arexx-process)
+(setq amiga-arexx-initialized t) ;; ARexx commands can now be processed.
+
+(defun amiga-wb-process ()
+ "Process all pending workbench events, ie load all files requested"
+ (interactive)
+ (let (file)
+ (condition-case nil
+ (while (setq file (amiga-get-wb-event t))
+ (condition-case nil
+ (find-file file)
+ (error nil)))
+ (error nil))))
+
+(define-key amiga-map "W" 'amiga-wb-process)
+(setq amiga-wb-initialized t) ;; WB events can now be processed.
+
+(setq completion-ignore-case t)
+;; Default is no numbered versions on Amiga, because directory searches are too
+;; slow.
+(setq version-control 'never)
Binary files baseline/fsf/emacs18/lisp/amiga-init.elc and amiga/fsf/emacs18/lisp/amiga-init.elc differ
diff -rup --new-file baseline/fsf/emacs18/lisp/amiga-menu.el amiga/fsf/emacs18/lisp/amiga-menu.el
--- baseline/fsf/emacs18/lisp/amiga-menu.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/lisp/amiga-menu.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,135 @@
+;(provide 'amiga-menu)
+
+(defconst amiga-menu-pick (char-to-string 3))
+(defconst amiga-menu-help (char-to-string 7))
+
+(defvar amiga-menus-description nil
+ "Variable containing the menus setup for Emacs")
+
+(defun amiga-menus-set (menus)
+ "Setup menus for emacs (parameter as for amiga-menus)"
+ (define-key mouse-map amiga-menu-pick 'amiga-menus-dispatch)
+ (define-key mouse-map amiga-menu-help 'amiga-menus-help)
+ (setq amiga-menus-description menus)
+ (amiga-menus menus))
+
+(defun amiga-menus-dispatch (selection)
+ (let* ((menu (car selection))
+ (item (cadr selection))
+ (code (cadr (nth item (cadr (nth menu amiga-menus-description))))))
+ (if (and (listp code) (eq (car code) 'call-interactively)
+ (listp (cadr code)) (eq (car (cadr code)) 'quote))
+ (setq this-command (cadr (cadr code))))
+ (eval code)))
+
+(defun amiga-menus-help (selection)
+ (let* ((menu (car selection))
+ (item (cadr selection))
+ (cmd (cadr (nth item (cadr (nth menu amiga-menus-description))))))
+ (if (and (listp cmd) (eq (car cmd) 'call-interactively)
+ (listp (car (cdr cmd))) (eq (car (car (cdr cmd))) 'quote))
+ (describe-function (car (cdr (car (cdr cmd)))))
+ (error "Don't know how to describe %s" cmd))))
+
+(defun make-explicit-string (str)
+ (if (and (>= (length str) 2) (= (elt str 0) 27) (< (elt str 1) 128))
+ (key-description (concat (char-to-string (+ 128 (elt str 1)))
+ (substring str 2)))
+ (key-description str)))
+
+(defun make-command-name (command str width)
+ (let ((keys (where-is-internal command nil t))
+ (string (if str str (symbol-name command))))
+ (if keys
+ (format (if width (format "%%-%ds%%s" (+ width 2)) "%s (%s)")
+ string (make-explicit-string keys))
+ string)))
+
+(defun menu-items (commands proportional)
+ (let* ((width (if proportional nil 0))
+ (names (mapcar
+ (function (lambda (cmd)
+ (if cmd
+ (let* ((name (if (symbolp cmd)
+ (symbol-name cmd)
+ (car cmd)))
+ (len (length name)))
+ (if (and (not proportional) (> len width))
+ (setq width len))
+ name))))
+ commands)))
+ (mapcar
+ (function (lambda (cmd)
+ (let ((name (car names)))
+ (setq names (cdr names))
+ (if cmd
+ (let ((command (if (symbolp cmd) cmd (cadr cmd))))
+ (list (make-command-name command name width)
+ (list 'call-interactively (list 'quote command))
+ (caddr cmd)))))))
+ commands)))
+
+(defun convert-menu-buffer (proportional)
+ "Convert the current buffer into a loadable menu file for emacs.\n\
+If PROPORTIONAL is true (or if a prefix arg is given), assume menu is in a \n\
+proportional font & present it differently."
+ (interactive "P")
+ (save-buffer)
+ (widen)
+ (goto-char 1)
+ (let ((menu-spec (reverse (read (current-buffer))))
+ menu-code)
+ (while menu-spec
+ (let ((menu-item (car menu-spec)))
+ (setq menu-code
+ (cons (list (car menu-item)
+ (menu-items (cdr menu-item) proportional))
+ menu-code))
+ (setq menu-spec (cdr menu-spec))))
+ (let ((new-buf
+ (find-file (concat
+ (substring (buffer-file-name) 0
+ (string-match "\\.menu$" (buffer-file-name)))
+ ".el"))))
+ (erase-buffer)
+ (prin1 (list 'amiga-menus-set (list 'quote menu-code)) (current-buffer))
+ (beginning-of-buffer))))
+
+(defvar menu-mode-syntax-table nil
+ "Syntax table used while in menu mode.")
+
+(defvar menu-mode-abbrev-table nil
+ "Abbrev table used while in menu mode.")
+(define-abbrev-table 'menu-mode-abbrev-table ())
+
+(if menu-mode-syntax-table
+ ()
+ (setq menu-mode-syntax-table (make-syntax-table))
+ (modify-syntax-entry ?' "w " menu-mode-syntax-table))
+
+(defvar menu-mode-map ())
+(if menu-mode-map
+ ()
+ (setq menu-mode-map (make-sparse-keymap))
+ (define-key menu-mode-map "\t" 'indent-relative)
+ (define-key menu-mode-map "\C-c\C-c" 'convert-menu-buffer))
+
+(defun menu-mode ()
+ "Major mode for editing menus intended for humans to read.
+Indentation works like in indented-text-mode. This could be improved.\\{menu-mode-map}
+Turning on menu-mode calls the value of the variable menu-mode-hook,
+if that value is non-nil."
+ (interactive)
+ (kill-all-local-variables)
+ (use-local-map menu-mode-map)
+ (define-abbrev-table 'menu-mode-abbrev-table ())
+ (setq local-abbrev-table menu-mode-abbrev-table)
+ (set-syntax-table menu-mode-syntax-table)
+ (make-local-variable 'indent-line-function)
+ (setq indent-line-function 'indent-relative-maybe)
+ (use-local-map menu-mode-map)
+ (setq mode-name "Menu")
+ (setq major-mode 'menu-mode)
+ (run-hooks 'menu-mode-hook))
+
+(setq auto-mode-alist (cons '("\\.menu$" . menu-mode) auto-mode-alist))
Binary files baseline/fsf/emacs18/lisp/amiga-menu.elc and amiga/fsf/emacs18/lisp/amiga-menu.elc differ
diff -rup --new-file baseline/fsf/emacs18/lisp/amiga-mouse.el amiga/fsf/emacs18/lisp/amiga-mouse.el
--- baseline/fsf/emacs18/lisp/amiga-mouse.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/lisp/amiga-mouse.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,276 @@
+;; Mouse support for Amiga Intuition window system.
+;; Copyright (C) 1985, 1987 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY. No author or distributor
+;; accepts responsibility to anyone for the consequences of using it
+;; or for whether it serves any particular purpose or works at all,
+;; unless he says so in writing. Refer to the GNU Emacs General Public
+;; License for full details.
+
+;; Everyone is granted permission to copy, modify and redistribute
+;; GNU Emacs, but only under the conditions described in the
+;; GNU Emacs General Public License. A copy of this license is
+;; supposed to have been given to you along with GNU Emacs so you
+;; can know your rights and responsibilities. It should be in a
+;; file named COPYING. Among other things, the copyright notice
+;; and this notice must be preserved on all copies.
+
+(provide 'amiga-mouse)
+
+(defconst amiga-button-right (char-to-string 0))
+(defconst amiga-button-middle (char-to-string 1))
+(defconst amiga-button-left (char-to-string 2))
+
+(defconst amiga-button-right-up (char-to-string 4))
+(defconst amiga-button-middle-up (char-to-string 5))
+(defconst amiga-button-left-up (char-to-string 6))
+
+(defconst amiga-button-s-right (char-to-string 16))
+(defconst amiga-button-s-middle (char-to-string 17))
+(defconst amiga-button-s-left (char-to-string 18))
+
+(defconst amiga-button-s-right-up (char-to-string 20))
+(defconst amiga-button-s-middle-up (char-to-string 21))
+(defconst amiga-button-s-left-up (char-to-string 22))
+
+(defconst amiga-button-m-right (char-to-string 32))
+(defconst amiga-button-m-middle (char-to-string 33))
+(defconst amiga-button-m-left (char-to-string 34))
+
+(defconst amiga-button-m-right-up (char-to-string 36))
+(defconst amiga-button-m-middle-up (char-to-string 37))
+(defconst amiga-button-m-left-up (char-to-string 38))
+
+(defconst amiga-button-c-right (char-to-string 64))
+(defconst amiga-button-c-middle (char-to-string 65))
+(defconst amiga-button-c-left (char-to-string 66))
+
+(defconst amiga-button-c-right-up (char-to-string 68))
+(defconst amiga-button-c-middle-up (char-to-string 69))
+(defconst amiga-button-c-left-up (char-to-string 70))
+
+(defconst amiga-button-m-s-right (char-to-string 48))
+(defconst amiga-button-m-s-middle (char-to-string 49))
+(defconst amiga-button-m-s-left (char-to-string 50))
+
+(defconst amiga-button-m-s-right-up (char-to-string 52))
+(defconst amiga-button-m-s-middle-up (char-to-string 53))
+(defconst amiga-button-m-s-left-up (char-to-string 54))
+
+(defconst amiga-button-c-s-right (char-to-string 80))
+(defconst amiga-button-c-s-middle (char-to-string 81))
+(defconst amiga-button-c-s-left (char-to-string 82))
+
+(defconst amiga-button-c-s-right-up (char-to-string 84))
+(defconst amiga-button-c-s-middle-up (char-to-string 85))
+(defconst amiga-button-c-s-left-up (char-to-string 86))
+
+(defconst amiga-button-c-m-right (char-to-string 96))
+(defconst amiga-button-c-m-middle (char-to-string 97))
+(defconst amiga-button-c-m-left (char-to-string 98))
+
+(defconst amiga-button-c-m-right-up (char-to-string 100))
+(defconst amiga-button-c-m-middle-up (char-to-string 101))
+(defconst amiga-button-c-m-left-up (char-to-string 102))
+
+(defconst amiga-button-c-m-s-right (char-to-string 112))
+(defconst amiga-button-c-m-s-middle (char-to-string 113))
+(defconst amiga-button-c-m-s-left (char-to-string 114))
+
+(defconst amiga-button-c-m-s-right-up (char-to-string 116))
+(defconst amiga-button-c-m-s-middle-up (char-to-string 117))
+(defconst amiga-button-c-m-s-left-up (char-to-string 118))
+
+(defmacro cadr (x) (list 'car (list 'cdr x)))
+(defmacro caddr (x) (list 'car (list 'cdr (list 'cdr x))))
+(defmacro cadddr (x) (list 'car (list 'cdr (list 'cdr (list 'cdr x)))))
+
+(defun coordinates-in-window-p (arg w)
+ (let ((x (car arg))
+ (y (cadr arg))
+ (edges (window-edges w)))
+ (and (>= x (car edges)) (< x (caddr edges))
+ (>= y (cadr edges)) (< y (cadddr edges))
+ (list (- x (car edges)) (- y (cadr edges))))))
+
+(defvar amiga-process-mouse-hook nil
+ "Hook to run after each mouse event is processed. Should take two
+arguments; the first being a list (XPOS YPOS) corresponding to character
+offset from top left of screen and the second being a specifier for the
+buttons/keys.
+
+This will normally be set on a per-buffer basis.")
+
+(defun amiga-flush-mouse-queue ()
+ "Process all queued mouse events."
+ ;; A mouse event causes a special character sequence to be given
+ ;; as keyboard input. That runs this function, which process all
+ ;; queued mouse events and returns.
+ (interactive)
+ (while (> (amiga-mouse-events) 0)
+ (amiga-proc-mouse-event)
+ (and (boundp 'amiga-process-mouse-hook)
+ (symbol-value 'amiga-process-mouse-hook)
+ (funcall amiga-process-mouse-hook amiga-mouse-pos amiga-mouse-item))))
+
+(defun amiga-mouse-select (arg)
+ "Select Emacs window the mouse is on."
+ (let ((start-w (selected-window))
+ (done nil)
+ (w (selected-window))
+ (rel-coordinate nil))
+ (if (eq start-w (minibuffer-window))
+ (setq rel-coordinate (coordinates-in-window-p arg w))
+ (while (and (not done)
+ (null (setq rel-coordinate
+ (coordinates-in-window-p arg w))))
+ (setq w (next-window w))
+ (if (eq w start-w)
+ (setq done t))))
+ (select-window w)
+ rel-coordinate))
+
+(defun amiga-mouse-keep-one-window (arg)
+ "Select Emacs window mouse is on, then kill all other Emacs windows."
+ (if (amiga-mouse-select arg)
+ (delete-other-windows)))
+
+(defun amiga-mouse-select-and-split (arg)
+ "Select Emacs window mouse is on, then split it vertically in half."
+ (if (amiga-mouse-select arg)
+ (split-window-vertically nil)))
+
+
+(defun amiga-mouse-set-point (arg)
+ "Select Emacs window mouse is on, and move point to mouse position."
+ (let* ((relative-coordinate (amiga-mouse-select arg))
+ margin-column
+ (rel-x (car relative-coordinate))
+ (rel-y (car (cdr relative-coordinate))))
+ (if relative-coordinate
+ (let ((prompt-width (if (eq (selected-window) (minibuffer-window))
+ minibuffer-prompt-width 0)))
+ (move-to-window-line rel-y)
+ (setq margin-column
+ (if (or truncate-lines (> (window-hscroll) 0))
+ (current-column)
+ ;; If we are using line continuation,
+ ;; compensate if first character on a continuation line
+ ;; does not start precisely at the margin.
+ (- (current-column)
+ (% (current-column) (1- (window-width))))))
+ (move-to-column (+ rel-x (1- (max 1 (window-hscroll)))
+ (if (= (point) 1)
+ (- prompt-width) 0)
+ margin-column))))))
+
+(defun amiga-mouse-set-mark (arg)
+ "Select Emacs window mouse is on, and set mark at mouse position.
+Display cursor at that position for a second."
+ (if (amiga-mouse-select arg)
+ (let ((point-save (point)))
+ (unwind-protect
+ (progn (amiga-mouse-set-point arg)
+ (push-mark nil t)
+ (sit-for 1))
+ (goto-char point-save)))))
+
+(defun amiga-mouse-cut (arg)
+ "Select Emacs window mouse is on, and set mark at mouse position.
+Display cursor at that position for a second. Then cut."
+ (if (amiga-mouse-select arg)
+ (let ((point-save (point)))
+ (unwind-protect
+ (progn (amiga-mouse-set-point arg)
+ (push-mark nil t)
+ (kill-region point-save (point))
+ (sit-for 1))
+ (goto-char point-save)))))
+
+(defun amiga-mouse-copy (arg)
+ "Select Emacs window mouse is on, and set mark at mouse position.
+Display cursor at that position for a second. Then copy."
+ (if (amiga-mouse-select arg)
+ (let ((point-save (point)))
+ (unwind-protect
+ (progn (amiga-mouse-set-point arg)
+ (push-mark nil t)
+ (copy-region-as-kill point-save (point))
+ (sit-for 1))
+ (goto-char point-save)))))
+
+(defun amiga-mouse-paste (arg)
+ "Move point to mouse position (and select window), then paste."
+ (if (amiga-mouse-select arg)
+ (progn
+ (amiga-mouse-set-point arg)
+ (yank))))
+
+(defun amiga-mouse-iconify (arg) (amiga-iconify))
+
+(defun amiga-mouse-ignore (arg)
+ "Don't do anything.")
+
+; Prevent beeps. on button-up. If the button isn't bound to anything, it
+(define-key mouse-map amiga-button-right 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-middle 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-left 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-right-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-middle-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-left-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-s-right 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-s-middle 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-s-left 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-s-right-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-s-middle-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-s-left-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-right 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-middle 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-left 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-right-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-middle-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-left-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-right 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-middle 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-left 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-right-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-middle-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-left-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-s-right 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-s-middle 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-s-left 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-s-right-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-s-middle-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-m-s-left-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-s-right 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-s-middle 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-s-left 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-s-right-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-s-middle-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-s-left-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-right 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-middle 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-left 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-right-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-middle-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-left-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-s-right 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-s-middle 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-s-left 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-s-right-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-s-middle-up 'amiga-mouse-ignore)
+(define-key mouse-map amiga-button-c-m-s-left-up 'amiga-mouse-ignore)
+
+; Define a few events
+(define-key mouse-map amiga-button-left 'amiga-mouse-set-point)
+(define-key mouse-map amiga-button-s-left 'amiga-mouse-set-mark)
+(define-key mouse-map amiga-button-c-left 'amiga-mouse-cut)
+(define-key mouse-map amiga-button-m-left 'amiga-mouse-copy)
+(define-key mouse-map amiga-button-middle 'amiga-mouse-paste)
+(define-key mouse-map amiga-button-s-middle 'amiga-mouse-iconify)
+
+(define-key amiga-map "M" 'amiga-flush-mouse-queue)
+(setq amiga-mouse-initialized t) ;; Mouse commands can now be processed.
Binary files baseline/fsf/emacs18/lisp/amiga-mouse.elc and amiga/fsf/emacs18/lisp/amiga-mouse.elc differ
diff -rup --new-file baseline/fsf/emacs18/lisp/compile.el amiga/fsf/emacs18/lisp/compile.el
--- baseline/fsf/emacs18/lisp/compile.el Fri Aug 14 15:53:00 1992
+++ amiga/fsf/emacs18/lisp/compile.el Sat Sep 28 00:00:00 1996
@@ -43,7 +43,7 @@ the next time the list of errors is want
;; The filename excludes colons to avoid confusion when error message
;; starts with digits.
(defvar compilation-error-regexp
- "\\([^ :\n]+\\(: *\\|, line \\|(\\)[0-9]+\\)\\|\\([0-9]+ *of *[^ \n]+\\)"
+ "^\\([^ :\e]+\\([ :] *\\|, line \\|(\\)[0-9]+\\)\\|\\([0-9]+ *of *[^ \n]+\\)"
"Regular expression for filename/linenumber in error in compilation log.")
(defun compile (command)
@@ -61,7 +61,8 @@ and move to the source code that caused
While grep runs asynchronously, you can use the \\[next-error] command
to find the text that grep hits refer to."
(interactive "sRun grep (with args): ")
- (compile1 (concat "grep -n " command " /dev/null")
+ (compile1 (concat "grep -n " command (if (eq system-type 'amigaos) " nil:"
+ " /dev/null"))
"No more grep hits" "grep"))
(defun compile1 (command error-message &optional name-of-mode)
@@ -195,7 +196,13 @@ means reparse the error message buffer a
(let* ((pop-up-windows t)
(w (display-buffer (marker-buffer (car next-error)))))
(set-window-point w (car next-error))
- (set-window-start w (car next-error)))
+ (if compilation-parse-sasc
+ (let ((thiswin (selected-window)))
+ (select-window w)
+ (vertical-motion -1)
+ (set-window-start w (point))
+ (select-window thiswin))
+ (set-window-start w (car next-error))))
(set-marker (car next-error) nil)))
;; Set compilation-error-list to nil, and
@@ -222,6 +229,8 @@ The function next-error, assigned to \\[
and visits its location."
(setq compilation-error-list nil)
(message "Parsing error messages...")
+ (goto-char (point-min))
+ (setq compilation-parse-sasc (search-forward "SAS/C" nil t))
(let (text-buffer
last-filename last-linenum)
;; Don't reparse messages already seen at last parse.
Binary files baseline/fsf/emacs18/lisp/compile.elc and amiga/fsf/emacs18/lisp/compile.elc differ
diff -rup --new-file baseline/fsf/emacs18/lisp/files.el amiga/fsf/emacs18/lisp/files.el
--- baseline/fsf/emacs18/lisp/files.el Sun Oct 11 15:27:38 1992
+++ amiga/fsf/emacs18/lisp/files.el Sat Sep 28 00:00:00 1996
@@ -141,6 +141,16 @@ This applies when the local-variables li
after you find a file. If you explicitly request such a scan with
\\[normal-mode], there is no query, regardless of this variable.")
+(defconst backup-char (if (eq system-type 'amigaos) "!" "~")
+ "Character to add to file names to make backup names.")
+
+(defconst autosave-char (if (eq system-type 'amigaos) "@" "#")
+ "Character to add to file names to make autosave names.")
+
+(defconst bufferfile-char (if (eq system-type 'amigaos) "^" "%")
+ "Character to add to buffer names to make file names.")
+
+
;; Avoid losing in versions where CLASH_DETECTION is disabled.
(or (fboundp 'lock-buffer)
(fset 'lock-buffer 'ignore))
@@ -380,7 +390,8 @@ for the \"mode:\" local variable. For t
(funcall (intern (concat (downcase mode) "-mode")))
(let ((alist auto-mode-alist)
(name buffer-file-name))
- (let ((case-fold-search (eq system-type 'vax-vms)))
+ (let ((case-fold-search (or (eq system-type 'amigaos)
+ (eq system-type 'vax-vms))))
;; Remove backup-suffixes from file name.
(setq name (file-name-sans-versions name))
;; Find first matching alist entry.
@@ -559,8 +570,11 @@ of the new file to agree with the old mo
(setq setmodes (file-modes backupname)))
(file-error
;; If trouble writing the backup, write it in ~.
- (setq backupname (expand-file-name "~/%backup%~"))
- (message "Cannot write backup file; backing up in ~/%%backup%%~")
+ (setq backupname
+ (expand-file-name (concat "~/" bufferfile-char "backup"
+ bufferfile-char backup-char)))
+ (message "Cannot write backup file; backing up in ~/%sbackup%s%s"
+ bufferfile-char bufferfile-char backup-char)
(sleep-for 1)
(condition-case ()
(delete-file backupname)
@@ -588,18 +602,19 @@ redefine it."
(or (string-match ";[0-9]*\\'" name)
(and (string-match "\\." name (string-match "[]>]" name))
(string-match "\\.[0-9]*\\'" name (match-end 0))))
- (string-match "\\(\\.~[0-9]+\\)?~\\'" name))))
+ (string-match (concat "\\(\\." backup-char "[0-9]+\\)?"
+ backup-char "\\'") name))))
(defun make-backup-file-name (file)
"Create the non-numeric backup file name for FILE.
This is a separate function so you can redefine it for customization."
- (concat file "~"))
+ (concat file backup-char))
(defun backup-file-name-p (file)
"Return non-nil if FILE is a backup file name (numeric or not).
This is a separate function so you can redefine it for customization.
You may need to redefine file-name-sans-versions as well."
- (string-match "~$" file))
+ (string-match (concat backup-char "$") file))
;; I believe there is no need to alter this behavior for VMS;
;; since backup files are not made on VMS, it should not get called.
@@ -609,7 +624,7 @@ Value is a list whose car is the name fo
and whose cdr is a list of old versions to consider deleting now."
(if (eq version-control 'never)
(list (make-backup-file-name fn))
- (let* ((base-versions (concat (file-name-nondirectory fn) ".~"))
+ (let* ((base-versions (concat (file-name-nondirectory fn) "." backup-char))
(bv-length (length base-versions))
(possibilities (file-name-all-completions
base-versions
@@ -626,20 +641,21 @@ Value is a list whose car is the name fo
kept-old-versions kept-new-versions -1)))
(if (not deserve-versions-p)
(list (make-backup-file-name fn))
- (cons (concat fn ".~" (int-to-string (1+ high-water-mark)) "~")
+ (cons (concat fn "." backup-char (int-to-string (1+ high-water-mark))
+ backup-char)
(if (and (> number-to-delete 0)
;; Delete nothing if there is overflow
;; in the number of versions to keep.
(>= (+ kept-new-versions kept-old-versions -1) 0))
(mapcar (function (lambda (n)
- (concat fn ".~"
- (int-to-string n) "~")))
+ (concat fn "." backup-char
+ (int-to-string n) backup-char)))
(let ((v (nthcdr kept-old-versions versions)))
(rplacd (nthcdr (1- number-to-delete) v) ())
v))))))))
(defun backup-extract-version (fn)
- (if (and (string-match "[0-9]+~$" fn bv-length)
+ (if (and (string-match (concat "[0-9]+" backup-char "$") fn bv-length)
(= (match-beginning 0) bv-length))
(string-to-int (substring fn bv-length -1))
0))
@@ -741,7 +757,7 @@ if variable delete-auto-save-files is
;; If file is precious, rename it away before
;; overwriting it.
(let ((rename t) nodelete
- (file (concat buffer-file-name "#")))
+ (file (concat buffer-file-name autosave-char)))
(condition-case ()
(progn (rename-file buffer-file-name file t)
(setq setmodes (file-modes file)))
@@ -774,6 +790,9 @@ if variable delete-auto-save-files is
;; Change the mode back, after writing.
(setq setmodes (file-modes buffer-file-name))
(set-file-modes buffer-file-name 511)))
+ (if (eq system-type 'amigaos)
+ (if amiga-create-icons
+ (amiga-put-icon buffer-file-name nil)))
(write-region (point-min) (point-max)
buffer-file-name nil t)))))
(if setmodes
@@ -983,16 +1002,17 @@ You can redefine this for customization.
See also auto-save-file-name-p."
(if buffer-file-name
(concat (file-name-directory buffer-file-name)
- "#"
+ autosave-char
(file-name-nondirectory buffer-file-name)
- "#")
- (expand-file-name (concat "#%" (buffer-name) "#"))))
+ autosave-char)
+ (expand-file-name (concat autosave-char bufferfile-char (buffer-name)
+ autosave-char))))
(defun auto-save-file-name-p (filename)
"Return non-nil if FILENAME can be yielded by make-auto-save-file-name.
FILENAME should lack slashes.
You can redefine this for customization."
- (string-match "^#.*#$" filename))
+ (string-match (concat "^" autosave-char ".*" autosave-char "$") filename))
(defconst list-directory-brief-switches "-CF"
"*Switches for list-directory to pass to `ls' for brief listing,")
Binary files baseline/fsf/emacs18/lisp/files.elc and amiga/fsf/emacs18/lisp/files.elc differ
diff -rup --new-file baseline/fsf/emacs18/lisp/loadup.el amiga/fsf/emacs18/lisp/loadup.el
--- baseline/fsf/emacs18/lisp/loadup.el Wed May 13 12:42:48 1992
+++ amiga/fsf/emacs18/lisp/loadup.el Sat Sep 28 00:00:00 1996
@@ -28,7 +28,6 @@
(load "simple")
(garbage-collect)
(load "help")
-(garbage-collect)
(load "files")
(garbage-collect)
(load "indent")
@@ -64,6 +63,10 @@
(progn
(garbage-collect)
(load "vms-patch")))
+(if (eq system-type 'amigaos)
+ (progn
+ (garbage-collect)
+ (load "amiga-init")))
;If you want additional libraries to be preloaded and their
;doc strings kept in the DOC file rather than in core,
diff -rup --new-file baseline/fsf/emacs18/lisp/simple.el amiga/fsf/emacs18/lisp/simple.el
--- baseline/fsf/emacs18/lisp/simple.el Wed Apr 15 01:13:32 1992
+++ amiga/fsf/emacs18/lisp/simple.el Sat Sep 28 00:00:00 1996
@@ -539,11 +539,47 @@ a number counts as a prefix arg."
(defvar kill-ring-yank-pointer nil
"The tail of the kill ring whose car is the last thing yanked.")
+(if (eq system-type 'amigaos)
+ (progn
+ (defun safe-amiga-paste ()
+ "Paste from the amiga clipboard, trapping any errors."
+ (condition-case nil
+ (amiga-paste)
+ (error nil)))
+
+ (defun check-clipboard ()
+ "If there is anything new in the clipboard, add it to the emacs kill ring.
+Returns t if there was something added, nil otherwise."
+ (let (added)
+ (if amiga-new-clip
+ (let ((str (safe-amiga-paste)))
+ (setq amiga-new-clip nil)
+ (if str
+ (progn
+ (kill-add str)
+ (setq added t)
+ (setq kill-ring-yank-pointer kill-ring)))))
+ added))
+ (defun update-clipboard (str)
+ (amiga-cut str)
+ (setq amiga-new-clip nil)))
+ (progn ; These could be defined for X-Windows.
+ (defun check-clipboard () nil)
+ (defun update-clipboard () nil)))
+
(defun kill-append (string before-p)
(setcar kill-ring
(if before-p
(concat string (car kill-ring))
- (concat (car kill-ring) string))))
+ (concat (car kill-ring) string)))
+ (update-clipboard (car kill-ring)))
+
+(defun kill-add (string)
+ (check-clipboard)
+ (setq kill-ring (cons string kill-ring))
+ (update-clipboard string)
+ (if (> (length kill-ring) kill-ring-max)
+ (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)))
(defun kill-region (beg end)
"Kill between point and mark.
@@ -571,9 +607,7 @@ to make one entry in the kill ring."
(delete-region beg end)
;; Take the same string recorded for undo
;; and put it in the kill-ring.
- (setq kill-ring (cons (car (car buffer-undo-list)) kill-ring))
- (if (> (length kill-ring) kill-ring-max)
- (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil))
+ (kill-add (car (car buffer-undo-list)))
(setq this-command 'kill-region)
(setq kill-ring-yank-pointer kill-ring))
(copy-region-as-kill beg end)
@@ -584,11 +618,9 @@ to make one entry in the kill ring."
(defun copy-region-as-kill (beg end)
"Save the region as if killed, but don't kill it."
(interactive "r")
- (if (eq last-command 'kill-region)
+ (if (and (eq last-command 'kill-region) (not (check-clipboard)))
(kill-append (buffer-substring beg end) (< end beg))
- (setq kill-ring (cons (buffer-substring beg end) kill-ring))
- (if (> (length kill-ring) kill-ring-max)
- (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)))
+ (kill-add (buffer-substring beg end)))
(setq this-command 'kill-region)
(setq kill-ring-yank-pointer kill-ring))
@@ -643,6 +675,7 @@ With argument n, reinsert the nth most r
text.
See also the command \\[yank-pop]."
(interactive "*P")
+ (check-clipboard)
(rotate-yank-pointer (if (listp arg) 0
(if (eq arg '-) -1
(1- arg))))
Binary files baseline/fsf/emacs18/lisp/simple.elc and amiga/fsf/emacs18/lisp/simple.elc differ
diff -rup --new-file baseline/fsf/emacs18/lisp/startup.el amiga/fsf/emacs18/lisp/startup.el
--- baseline/fsf/emacs18/lisp/startup.el Sat Apr 18 22:20:08 1992
+++ amiga/fsf/emacs18/lisp/startup.el Sat Sep 28 00:00:00 1996
@@ -113,9 +113,9 @@ definitions made by the terminal-specifi
;; Load user's init file, or load default one.
(condition-case error
(if init
- (progn (load (if (eq system-type 'vax-vms)
- "sys$login:.emacs"
- (concat "~" init "/.emacs"))
+ (progn (load (cond ((eq system-type 'vax-vms) "sys$login:.emacs")
+ ((eq system-type 'amigaos) "s:.emacs")
+ (t (concat "~" init "/.emacs")))
t t t)
(or inhibit-default-init
(let ((inhibit-startup-message nil))
@@ -129,6 +129,10 @@ definitions made by the terminal-specifi
(save-excursion
(set-buffer "*scratch*")
(funcall initial-major-mode)))
+ ;; On Amiga, initialise clipboard
+ (if (eq system-type 'amigaos)
+ (let ((clip (safe-amiga-paste)))
+ (if clip (kill-add clip))))
;; Load library for our terminal type.
;; User init file can set term-file-prefix to nil to prevent this.
(and term-file-prefix (not noninteractive)
Binary files baseline/fsf/emacs18/lisp/startup.elc and amiga/fsf/emacs18/lisp/startup.elc differ
diff -rup --new-file baseline/fsf/emacs18/lisp/term/intuition-win.el amiga/fsf/emacs18/lisp/term/intuition-win.el
--- baseline/fsf/emacs18/lisp/term/intuition-win.el Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/lisp/term/intuition-win.el Sat Sep 28 00:00:00 1996
@@ -0,0 +1,47 @@
+(load "s:.emacs-menu" t t)
+(setq command-switch-alist (append '(("-fn" . amiga-handle-set-font)
+ ("-fg" . amiga-handle-set-foreground)
+ ("-bg" . amiga-handle-set-background)
+ ("-geometry" . amiga-handle-set-geometry)
+ ("-screen" . amiga-handle-set-screen))
+ command-switch-alist))
+
+(defun amiga-handle-set-font (switch)
+ (condition-case err
+ (let ((wfont (car command-line-args-left))
+ (height (car (read-from-string (car (cdr command-line-args-left))))))
+ (setq command-line-args-left (cdr (cdr command-line-args-left)))
+ (amiga-set-font wfont height))
+ (error (message "Failed to load font"))))
+
+(defun amiga-handle-set-foreground (switch)
+ (condition-case err
+ (let ((pen (car (read-from-string (car command-line-args-left)))))
+ (setq command-line-args-left (cdr command-line-args-left))
+ (amiga-set-foreground-color pen))
+ (error (message "Failed to set foreground colour"))))
+
+(defun amiga-handle-set-background (switch)
+ (condition-case err
+ (let ((pen (car (read-from-string (car command-line-args-left)))))
+ (setq command-line-args-left (cdr command-line-args-left))
+ (amiga-set-background-color pen))
+ (error (message "Failed to set background colour"))))
+
+(defun amiga-handle-set-screen (switch)
+ (condition-case err
+ (let ((name (car command-line-args-left)))
+ (setq command-line-args-left (cdr command-line-args-left))
+ (amiga-set-geometry nil nil nil nil name))
+ (error (message "Couldn't open on public screen"))))
+
+(defun amiga-handle-set-geometry (switch)
+ (condition-case err
+ (let ((x (car (read-from-string (car command-line-args-left))))
+ (y (car (read-from-string (car (cdr command-line-args-left)))))
+ (w (car (read-from-string (car (cdr (cdr command-line-args-left))))))
+ (h (car (read-from-string (car (cdr (cdr (cdr command-line-args-left)))))))
+)
+ (setq command-line-args-left (cdr (cdr (cdr (cdr command-line-args-left)))))
+ (amiga-set-geometry x y w h nil))
+ (error (message "Couldn't set window size"))))
diff -rup --new-file baseline/fsf/emacs18/lisp/term/intuition-win.elc amiga/fsf/emacs18/lisp/term/intuition-win.elc
--- baseline/fsf/emacs18/lisp/term/intuition-win.elc Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/lisp/term/intuition-win.elc Sat Sep 28 00:00:00 1996
@@ -0,0 +1,16 @@
+
+(load "s:.emacs-menu" t t)
+
+(setq command-switch-alist (append (quote (("-fn" . amiga-handle-set-font) ("-fg" . amiga-handle-set-foreground) ("-bg" . amiga-handle-set-background) ("-geometry" . amiga-handle-set-geometry) ("-screen" . amiga-handle-set-screen))) command-switch-alist))
+
+(defun amiga-handle-set-font (switch) (byte-code "ÀÁÂ" [err (byte-code " @Ã A@!@ AAÄ
+\"*" [wfont command-line-args-left height read-from-string amiga-set-font] 4) ((error (byte-code "ÀÁ!" [message "Failed to load font"] 2)))] 3))
+
+(defun amiga-handle-set-foreground (switch) (byte-code "ÀÁÂ" [err (byte-code "Â @!@ AÃ!)" [pen command-line-args-left read-from-string amiga-set-foreground-color] 3) ((error (byte-code "ÀÁ!" [message "Failed to set foreground colour"] 2)))] 3))
+
+(defun amiga-handle-set-background (switch) (byte-code "ÀÁÂ" [err (byte-code "Â @!@ AÃ!)" [pen command-line-args-left read-from-string amiga-set-background-color] 3) ((error (byte-code "ÀÁ!" [message "Failed to set background colour"] 2)))] 3))
+
+(defun amiga-handle-set-screen (switch) (byte-code "ÀÁÂ" [err (byte-code " @ AÃÂÂÂÂ%)" [name command-line-args-left nil amiga-set-geometry] 6) ((error (byte-code "ÀÁ!" [message "Couldn't open on public screen"] 2)))] 3))
+
+(defun amiga-handle-set-geometry (switch) (byte-code "ÀÁÂ" [err (byte-code "Æ @!@Æ A@!@Æ AA@!@Æ AAA@!@ AAAAÇ
+Å%," [x command-line-args-left y w h nil read-from-string amiga-set-geometry] 10) ((error (byte-code "ÀÁ!" [message "Couldn't set window size"] 2)))] 3))
diff -rup --new-file baseline/fsf/emacs18/lisp/texinfmt.el amiga/fsf/emacs18/lisp/texinfmt.el
--- baseline/fsf/emacs18/lisp/texinfmt.el Sat Dec 7 22:28:09 1991
+++ amiga/fsf/emacs18/lisp/texinfmt.el Sat Sep 28 00:00:00 1996
@@ -874,7 +874,7 @@ converted to Info is stored in a tempora
(insert "\n* Menu:\n\n")
(setq opoint (point))
(texinfo-print-index nil indexelts)
- (if (eq system-type 'vax-vms)
+ (if (or (eq system-type 'amigaos) (eq system-type 'vax-vms))
(texinfo-sort-region opoint (point))
(shell-command-on-region opoint (point) "sort -fd" 1))))
Binary files baseline/fsf/emacs18/lisp/texinfmt.elc and amiga/fsf/emacs18/lisp/texinfmt.elc differ
diff -rup --new-file baseline/fsf/emacs18/manifests/bin amiga/fsf/emacs18/manifests/bin
--- baseline/fsf/emacs18/manifests/bin Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/manifests/bin Wed Oct 9 23:26:14 1996
@@ -0,0 +1,407 @@
+COPYING
+COPYING.info
+bin/emacs
+bin/etags
+guide/emacs.guide
+lib/emacs/18.59/etc/3B-MAXMEM
+lib/emacs/18.59/etc/AIX.DUMP
+lib/emacs/18.59/etc/APOLLO
+lib/emacs/18.59/etc/APPLE
+lib/emacs/18.59/etc/BABYL
+lib/emacs/18.59/etc/CCADIFF
+lib/emacs/18.59/etc/CHARACTERS
+lib/emacs/18.59/etc/COOKIES
+lib/emacs/18.59/etc/COPYING
+lib/emacs/18.59/etc/ChangeLog
+lib/emacs/18.59/etc/DEBUG
+lib/emacs/18.59/etc/DIFF
+lib/emacs/18.59/etc/DISTRIB
+lib/emacs/18.59/etc/DOC
+lib/emacs/18.59/etc/EMACS-DATA
+lib/emacs/18.59/etc/FAQ
+lib/emacs/18.59/etc/FTP
+lib/emacs/18.59/etc/GNU
+lib/emacs/18.59/etc/GNU.JOKES
+lib/emacs/18.59/etc/GOSDIFF
+lib/emacs/18.59/etc/INTERVAL.IDEAS
+lib/emacs/18.59/etc/INTERVIEW
+lib/emacs/18.59/etc/LEDIT
+lib/emacs/18.59/etc/LPF
+lib/emacs/18.59/etc/MACHINES
+lib/emacs/18.59/etc/MAILINGLISTS
+lib/emacs/18.59/etc/MOTIVATION
+lib/emacs/18.59/etc/Makefile
+lib/emacs/18.59/etc/NEWS
+lib/emacs/18.59/etc/NICKLES.WORTH
+lib/emacs/18.59/etc/ONEWS
+lib/emacs/18.59/etc/OONEWS
+lib/emacs/18.59/etc/OPTIONS
+lib/emacs/18.59/etc/README
+lib/emacs/18.59/etc/SCOPTIONS
+lib/emacs/18.59/etc/SERVICE
+lib/emacs/18.59/etc/SUN-SUPPORT
+lib/emacs/18.59/etc/SUNBUG
+lib/emacs/18.59/etc/TERMS
+lib/emacs/18.59/etc/TO-DO
+lib/emacs/18.59/etc/TUTORIAL
+lib/emacs/18.59/etc/XDOC
+lib/emacs/18.59/etc/XENIX
+lib/emacs/18.59/etc/Xkeymap.txt
+lib/emacs/18.59/etc/amiga-env.c
+lib/emacs/18.59/etc/celibacy.1
+lib/emacs/18.59/etc/complink.com
+lib/emacs/18.59/etc/cvtmail.c
+lib/emacs/18.59/etc/digest-doc.c
+lib/emacs/18.59/etc/echo.msg
+lib/emacs/18.59/etc/emacs.1
+lib/emacs/18.59/etc/emacs.icon
+lib/emacs/18.59/etc/emacs.names
+lib/emacs/18.59/etc/emacsclient.c
+lib/emacs/18.59/etc/emacstool.1
+lib/emacs/18.59/etc/emacstool.c
+lib/emacs/18.59/etc/env
+lib/emacs/18.59/etc/env.c
+lib/emacs/18.59/etc/etags
+lib/emacs/18.59/etc/etags-vmslib.c
+lib/emacs/18.59/etc/etags.c
+lib/emacs/18.59/etc/etags.info
+lib/emacs/18.59/etc/etags.lnk
+lib/emacs/18.59/etc/etags.o
+lib/emacs/18.59/etc/etags.vms
+lib/emacs/18.59/etc/fakemail.c
+lib/emacs/18.59/etc/faq2texi.perl
+lib/emacs/18.59/etc/ledit.l
+lib/emacs/18.59/etc/leditcfns.c
+lib/emacs/18.59/etc/make-docfile
+lib/emacs/18.59/etc/make-docfile.c
+lib/emacs/18.59/etc/make-docfile.info
+lib/emacs/18.59/etc/make-docfile.lnk
+lib/emacs/18.59/etc/make-docfile.o
+lib/emacs/18.59/etc/makedoc.com
+lib/emacs/18.59/etc/movemail.c
+lib/emacs/18.59/etc/ms-kermit
+lib/emacs/18.59/etc/ms-kermit-7bit
+lib/emacs/18.59/etc/qsort.c
+lib/emacs/18.59/etc/refcard.tex
+lib/emacs/18.59/etc/server.c
+lib/emacs/18.59/etc/sex.6
+lib/emacs/18.59/etc/sh
+lib/emacs/18.59/etc/sh.c
+lib/emacs/18.59/etc/sh.info
+lib/emacs/18.59/etc/sh.lnk
+lib/emacs/18.59/etc/sh.o
+lib/emacs/18.59/etc/smakefile
+lib/emacs/18.59/etc/sorted-doc.c
+lib/emacs/18.59/etc/spook.lines
+lib/emacs/18.59/etc/termcap.amiga
+lib/emacs/18.59/etc/termcap.dat
+lib/emacs/18.59/etc/termcap.ucb
+lib/emacs/18.59/etc/test-distrib.c
+lib/emacs/18.59/etc/testfile
+lib/emacs/18.59/etc/ulimit.hack
+lib/emacs/18.59/etc/vipcard.tex
+lib/emacs/18.59/etc/vmslink.opt
+lib/emacs/18.59/etc/wakeup
+lib/emacs/18.59/etc/wakeup.c
+lib/emacs/18.59/etc/wakeup.info
+lib/emacs/18.59/etc/wakeup.lnk
+lib/emacs/18.59/etc/wakeup.o
+lib/emacs/18.59/etc/xmouse.doc
+lib/emacs/18.59/etc/yow.c
+lib/emacs/18.59/etc/yow.lines
+lib/emacs/18.59/lisp/COPYING
+lib/emacs/18.59/lisp/ChangeLog
+lib/emacs/18.59/lisp/abbrev.el
+lib/emacs/18.59/lisp/abbrev.elc
+lib/emacs/18.59/lisp/abbrevlist.el
+lib/emacs/18.59/lisp/abbrevlist.elc
+lib/emacs/18.59/lisp/ada.el
+lib/emacs/18.59/lisp/ada.elc
+lib/emacs/18.59/lisp/add-log.el
+lib/emacs/18.59/lisp/add-log.elc
+lib/emacs/18.59/lisp/amiga-init.el
+lib/emacs/18.59/lisp/amiga-init.elc
+lib/emacs/18.59/lisp/amiga-menu.el
+lib/emacs/18.59/lisp/amiga-menu.elc
+lib/emacs/18.59/lisp/amiga-mouse.el
+lib/emacs/18.59/lisp/amiga-mouse.elc
+lib/emacs/18.59/lisp/autoinsert.el
+lib/emacs/18.59/lisp/backquote.el
+lib/emacs/18.59/lisp/backquote.elc
+lib/emacs/18.59/lisp/bg-mouse.el
+lib/emacs/18.59/lisp/bibtex.el
+lib/emacs/18.59/lisp/bibtex.elc
+lib/emacs/18.59/lisp/blackbox.el
+lib/emacs/18.59/lisp/blackbox.elc
+lib/emacs/18.59/lisp/buff-menu.el
+lib/emacs/18.59/lisp/buff-menu.elc
+lib/emacs/18.59/lisp/bytecomp.el
+lib/emacs/18.59/lisp/bytecomp.elc
+lib/emacs/18.59/lisp/c-fill.el
+lib/emacs/18.59/lisp/c-fill.elc
+lib/emacs/18.59/lisp/c-mode.el
+lib/emacs/18.59/lisp/c-mode.elc
+lib/emacs/18.59/lisp/cal.el
+lib/emacs/18.59/lisp/cal.elc
+lib/emacs/18.59/lisp/chistory.el
+lib/emacs/18.59/lisp/chistory.elc
+lib/emacs/18.59/lisp/cl-indent.el
+lib/emacs/18.59/lisp/cl-indent.elc
+lib/emacs/18.59/lisp/cl.el
+lib/emacs/18.59/lisp/cl.elc
+lib/emacs/18.59/lisp/cmacexp.el
+lib/emacs/18.59/lisp/compare-w.el
+lib/emacs/18.59/lisp/compare-w.elc
+lib/emacs/18.59/lisp/compile.el
+lib/emacs/18.59/lisp/compile.elc
+lib/emacs/18.59/lisp/dabbrev.el
+lib/emacs/18.59/lisp/dabbrev.elc
+lib/emacs/18.59/lisp/dbx.el
+lib/emacs/18.59/lisp/dbx.elc
+lib/emacs/18.59/lisp/debug.el
+lib/emacs/18.59/lisp/debug.elc
+lib/emacs/18.59/lisp/dired.el
+lib/emacs/18.59/lisp/dired.elc
+lib/emacs/18.59/lisp/disass.el
+lib/emacs/18.59/lisp/disass.elc
+lib/emacs/18.59/lisp/dissociate.el
+lib/emacs/18.59/lisp/dissociate.elc
+lib/emacs/18.59/lisp/doctex.el
+lib/emacs/18.59/lisp/doctor.el
+lib/emacs/18.59/lisp/doctor.elc
+lib/emacs/18.59/lisp/ebuff-menu.el
+lib/emacs/18.59/lisp/ebuff-menu.elc
+lib/emacs/18.59/lisp/echistory.el
+lib/emacs/18.59/lisp/echistory.elc
+lib/emacs/18.59/lisp/edt-doc.el
+lib/emacs/18.59/lisp/edt.el
+lib/emacs/18.59/lisp/edt.elc
+lib/emacs/18.59/lisp/ehelp.el
+lib/emacs/18.59/lisp/ehelp.elc
+lib/emacs/18.59/lisp/electric.el
+lib/emacs/18.59/lisp/electric.elc
+lib/emacs/18.59/lisp/emacsbug.el
+lib/emacs/18.59/lisp/files.el
+lib/emacs/18.59/lisp/files.elc
+lib/emacs/18.59/lisp/fill.el
+lib/emacs/18.59/lisp/fill.elc
+lib/emacs/18.59/lisp/flame.el
+lib/emacs/18.59/lisp/flame.elc
+lib/emacs/18.59/lisp/float.el
+lib/emacs/18.59/lisp/float.elc
+lib/emacs/18.59/lisp/fortran.el
+lib/emacs/18.59/lisp/fortran.elc
+lib/emacs/18.59/lisp/ftp.el
+lib/emacs/18.59/lisp/ftp.elc
+lib/emacs/18.59/lisp/gdb.el
+lib/emacs/18.59/lisp/gdb.elc
+lib/emacs/18.59/lisp/gosmacs.el
+lib/emacs/18.59/lisp/grow-vers.el
+lib/emacs/18.59/lisp/hanoi.el
+lib/emacs/18.59/lisp/hanoi.elc
+lib/emacs/18.59/lisp/help.el
+lib/emacs/18.59/lisp/help.elc
+lib/emacs/18.59/lisp/helper.el
+lib/emacs/18.59/lisp/helper.elc
+lib/emacs/18.59/lisp/hideif.el
+lib/emacs/18.59/lisp/hideif.elc
+lib/emacs/18.59/lisp/icon.el
+lib/emacs/18.59/lisp/icon.elc
+lib/emacs/18.59/lisp/inc-vers.el
+lib/emacs/18.59/lisp/indent.el
+lib/emacs/18.59/lisp/indent.elc
+lib/emacs/18.59/lisp/info.el
+lib/emacs/18.59/lisp/info.elc
+lib/emacs/18.59/lisp/informat.el
+lib/emacs/18.59/lisp/informat.elc
+lib/emacs/18.59/lisp/isearch.el
+lib/emacs/18.59/lisp/isearch.elc
+lib/emacs/18.59/lisp/kermit.el
+lib/emacs/18.59/lisp/keypad.el
+lib/emacs/18.59/lisp/keypad.elc
+lib/emacs/18.59/lisp/ledit.el
+lib/emacs/18.59/lisp/life.el
+lib/emacs/18.59/lisp/life.elc
+lib/emacs/18.59/lisp/lisp-mode.el
+lib/emacs/18.59/lisp/lisp-mode.elc
+lib/emacs/18.59/lisp/lisp.el
+lib/emacs/18.59/lisp/lisp.elc
+lib/emacs/18.59/lisp/loaddefs.el
+lib/emacs/18.59/lisp/loadup.el
+lib/emacs/18.59/lisp/loadup.elc
+lib/emacs/18.59/lisp/lpr.el
+lib/emacs/18.59/lisp/lpr.elc
+lib/emacs/18.59/lisp/macros.el
+lib/emacs/18.59/lisp/macros.elc
+lib/emacs/18.59/lisp/mail-utils.el
+lib/emacs/18.59/lisp/mail-utils.elc
+lib/emacs/18.59/lisp/mailalias.el
+lib/emacs/18.59/lisp/mailalias.elc
+lib/emacs/18.59/lisp/mailpost.el
+lib/emacs/18.59/lisp/makesum.el
+lib/emacs/18.59/lisp/makesum.elc
+lib/emacs/18.59/lisp/man.el
+lib/emacs/18.59/lisp/man.elc
+lib/emacs/18.59/lisp/medit.el
+lib/emacs/18.59/lisp/medit.elc
+lib/emacs/18.59/lisp/meese.el
+lib/emacs/18.59/lisp/mh-e.el
+lib/emacs/18.59/lisp/mh-e.elc
+lib/emacs/18.59/lisp/mim-mode.el
+lib/emacs/18.59/lisp/mim-mode.elc
+lib/emacs/18.59/lisp/mim-syntax.el
+lib/emacs/18.59/lisp/mim-syntax.elc
+lib/emacs/18.59/lisp/mlconvert.el
+lib/emacs/18.59/lisp/mlconvert.elc
+lib/emacs/18.59/lisp/mlsupport.el
+lib/emacs/18.59/lisp/mlsupport.elc
+lib/emacs/18.59/lisp/modula2.el
+lib/emacs/18.59/lisp/modula2.elc
+lib/emacs/18.59/lisp/novice.el
+lib/emacs/18.59/lisp/nroff-mode.el
+lib/emacs/18.59/lisp/nroff-mode.elc
+lib/emacs/18.59/lisp/options.el
+lib/emacs/18.59/lisp/options.elc
+lib/emacs/18.59/lisp/outline.el
+lib/emacs/18.59/lisp/outline.elc
+lib/emacs/18.59/lisp/page.el
+lib/emacs/18.59/lisp/page.elc
+lib/emacs/18.59/lisp/paragraphs.el
+lib/emacs/18.59/lisp/paragraphs.elc
+lib/emacs/18.59/lisp/paths.el
+lib/emacs/18.59/lisp/picture.el
+lib/emacs/18.59/lisp/picture.elc
+lib/emacs/18.59/lisp/prolog.el
+lib/emacs/18.59/lisp/prolog.elc
+lib/emacs/18.59/lisp/rect.el
+lib/emacs/18.59/lisp/rect.elc
+lib/emacs/18.59/lisp/register.el
+lib/emacs/18.59/lisp/register.elc
+lib/emacs/18.59/lisp/replace.el
+lib/emacs/18.59/lisp/replace.elc
+lib/emacs/18.59/lisp/rfc822.el
+lib/emacs/18.59/lisp/rfc822.elc
+lib/emacs/18.59/lisp/rmail.el
+lib/emacs/18.59/lisp/rmail.elc
+lib/emacs/18.59/lisp/rmailedit.el
+lib/emacs/18.59/lisp/rmailedit.elc
+lib/emacs/18.59/lisp/rmailkwd.el
+lib/emacs/18.59/lisp/rmailkwd.elc
+lib/emacs/18.59/lisp/rmailmsc.el
+lib/emacs/18.59/lisp/rmailmsc.elc
+lib/emacs/18.59/lisp/rmailout.el
+lib/emacs/18.59/lisp/rmailout.elc
+lib/emacs/18.59/lisp/rmailsum.el
+lib/emacs/18.59/lisp/rmailsum.elc
+lib/emacs/18.59/lisp/rnews.el
+lib/emacs/18.59/lisp/rnews.elc
+lib/emacs/18.59/lisp/rnewspost.el
+lib/emacs/18.59/lisp/rnewspost.elc
+lib/emacs/18.59/lisp/saveconf.el
+lib/emacs/18.59/lisp/scheme.el
+lib/emacs/18.59/lisp/scheme.elc
+lib/emacs/18.59/lisp/scribe.el
+lib/emacs/18.59/lisp/scribe.elc
+lib/emacs/18.59/lisp/sendmail.el
+lib/emacs/18.59/lisp/sendmail.elc
+lib/emacs/18.59/lisp/server.el
+lib/emacs/18.59/lisp/server.elc
+lib/emacs/18.59/lisp/shell.el
+lib/emacs/18.59/lisp/shell.elc
+lib/emacs/18.59/lisp/simple.el
+lib/emacs/18.59/lisp/simple.elc
+lib/emacs/18.59/lisp/simula.defns
+lib/emacs/18.59/lisp/simula.el
+lib/emacs/18.59/lisp/simula.elc
+lib/emacs/18.59/lisp/sort.el
+lib/emacs/18.59/lisp/sort.elc
+lib/emacs/18.59/lisp/spell.el
+lib/emacs/18.59/lisp/spell.elc
+lib/emacs/18.59/lisp/spook.el
+lib/emacs/18.59/lisp/startup.el
+lib/emacs/18.59/lisp/startup.elc
+lib/emacs/18.59/lisp/studly.el
+lib/emacs/18.59/lisp/studly.elc
+lib/emacs/18.59/lisp/subr.el
+lib/emacs/18.59/lisp/subr.elc
+lib/emacs/18.59/lisp/sun-cursors.el
+lib/emacs/18.59/lisp/sun-fns.el
+lib/emacs/18.59/lisp/sun-fns.elc
+lib/emacs/18.59/lisp/sun-keys.el
+lib/emacs/18.59/lisp/sun-mouse.el
+lib/emacs/18.59/lisp/sun-mouse.elc
+lib/emacs/18.59/lisp/sup-mouse.el
+lib/emacs/18.59/lisp/sup-mouse.elc
+lib/emacs/18.59/lisp/tabify.el
+lib/emacs/18.59/lisp/tabify.elc
+lib/emacs/18.59/lisp/tags.el
+lib/emacs/18.59/lisp/tags.elc
+lib/emacs/18.59/lisp/telnet.el
+lib/emacs/18.59/lisp/telnet.elc
+lib/emacs/18.59/lisp/term/COPYING
+lib/emacs/18.59/lisp/term/apollo.el
+lib/emacs/18.59/lisp/term/at386.el
+lib/emacs/18.59/lisp/term/bbn.el
+lib/emacs/18.59/lisp/term/bg.el
+lib/emacs/18.59/lisp/term/bgnv.el
+lib/emacs/18.59/lisp/term/bgrv.el
+lib/emacs/18.59/lisp/term/bobcat.el
+lib/emacs/18.59/lisp/term/intuition-win.el
+lib/emacs/18.59/lisp/term/intuition-win.elc
+lib/emacs/18.59/lisp/term/s4.el
+lib/emacs/18.59/lisp/term/sun.el
+lib/emacs/18.59/lisp/term/supdup.el
+lib/emacs/18.59/lisp/term/unixpc.el
+lib/emacs/18.59/lisp/term/vt100.el
+lib/emacs/18.59/lisp/term/vt101.el
+lib/emacs/18.59/lisp/term/vt102.el
+lib/emacs/18.59/lisp/term/vt125.el
+lib/emacs/18.59/lisp/term/vt131.el
+lib/emacs/18.59/lisp/term/vt200.el
+lib/emacs/18.59/lisp/term/vt220.el
+lib/emacs/18.59/lisp/term/vt240.el
+lib/emacs/18.59/lisp/term/vt300.el
+lib/emacs/18.59/lisp/term/x-win.el
+lib/emacs/18.59/lisp/term/xterm.el
+lib/emacs/18.59/lisp/terminal.el
+lib/emacs/18.59/lisp/terminal.elc
+lib/emacs/18.59/lisp/tex-mode.el
+lib/emacs/18.59/lisp/tex-mode.elc
+lib/emacs/18.59/lisp/tex-start.el
+lib/emacs/18.59/lisp/texinfmt.el
+lib/emacs/18.59/lisp/texinfmt.elc
+lib/emacs/18.59/lisp/texinfo.el
+lib/emacs/18.59/lisp/texinfo.elc
+lib/emacs/18.59/lisp/text-mode.el
+lib/emacs/18.59/lisp/text-mode.elc
+lib/emacs/18.59/lisp/time.el
+lib/emacs/18.59/lisp/time.elc
+lib/emacs/18.59/lisp/uncompress.el
+lib/emacs/18.59/lisp/underline.el
+lib/emacs/18.59/lisp/underline.elc
+lib/emacs/18.59/lisp/undigest.el
+lib/emacs/18.59/lisp/undigest.elc
+lib/emacs/18.59/lisp/unused.el
+lib/emacs/18.59/lisp/userlock.el
+lib/emacs/18.59/lisp/userlock.elc
+lib/emacs/18.59/lisp/version.el
+lib/emacs/18.59/lisp/vi.el
+lib/emacs/18.59/lisp/vi.elc
+lib/emacs/18.59/lisp/view.el
+lib/emacs/18.59/lisp/view.elc
+lib/emacs/18.59/lisp/vip.el
+lib/emacs/18.59/lisp/vip.elc
+lib/emacs/18.59/lisp/vms-patch.el
+lib/emacs/18.59/lisp/vms-patch.elc
+lib/emacs/18.59/lisp/vmsproc.el
+lib/emacs/18.59/lisp/vmsproc.elc
+lib/emacs/18.59/lisp/window.el
+lib/emacs/18.59/lisp/window.elc
+lib/emacs/18.59/lisp/x-menu.el
+lib/emacs/18.59/lisp/x-menu.elc
+lib/emacs/18.59/lisp/x-mouse.el
+lib/emacs/18.59/lisp/x-mouse.elc
+lib/emacs/18.59/lisp/xscheme.el
+lib/emacs/18.59/lisp/xscheme.elc
+lib/emacs/18.59/lisp/yow.el
+lib/emacs/18.59/lisp/yow.elc
diff -rup --new-file baseline/fsf/emacs18/manifests/src amiga/fsf/emacs18/manifests/src
--- baseline/fsf/emacs18/manifests/src Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/manifests/src Sat Sep 28 00:00:00 1996
@@ -0,0 +1,1013 @@
+fsf/emacs18/ChangeLog
+fsf/emacs18/INSTALL
+fsf/emacs18/Makefile
+fsf/emacs18/PROBLEMS
+fsf/emacs18/Product-Info
+fsf/emacs18/README
+fsf/emacs18/VMSINSTALL
+fsf/emacs18/VMSNOTES
+fsf/emacs18/allrename.com
+fsf/emacs18/amiga/README
+fsf/emacs18/amiga/amiga-extra/INSTALL.AMIGA
+fsf/emacs18/amiga/amiga-extra/amiga/.emacs
+fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.el
+fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.menu
+fsf/emacs18/amiga/amiga-extra/amiga/amiga.doc
+fsf/emacs18/amiga/amiga-extra/amiga/announce1.28
+fsf/emacs18/amiga/amiga-extra/amiga/c/emacs
+fsf/emacs18/amiga/amiga-extra/amiga/c/etags.uue
+fsf/emacs18/amiga/amiga-extra/amiga/c/getstack.uue
+fsf/emacs18/amiga/amiga-extra/amiga/c/grep.uue
+fsf/emacs18/amiga/amiga-extra/amiga/c/ls.uue
+fsf/emacs18/amiga/amiga-extra/amiga/c/rmdir.uue
+fsf/emacs18/amiga/amiga-extra/amiga/c/sort.uue
+fsf/emacs18/amiga/amiga-extra/amiga/compile.doc
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/README
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.el
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.elc
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/README
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/distinews.lha
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/README
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/pub
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/Emacs.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.el
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_asm.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_c.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_el.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_emacs.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_h.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_rexx.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexxmode10.lha
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/sas-c-emacs.lha
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.info
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/xsh11.lha
+fsf/emacs18/amiga/amiga-extra/amiga/contrib/schinz/functions.el
+fsf/emacs18/amiga/unix/include/alloca.h
+fsf/emacs18/amiga/unix/include/amiga/ioctl.h
+fsf/emacs18/amiga/unix/include/errno.h
+fsf/emacs18/amiga/unix/include/fcntl.h
+fsf/emacs18/amiga/unix/include/grp.h
+fsf/emacs18/amiga/unix/include/internal/devices.h
+fsf/emacs18/amiga/unix/include/internal/files.h
+fsf/emacs18/amiga/unix/include/internal/messages.h
+fsf/emacs18/amiga/unix/include/internal/timers.h
+fsf/emacs18/amiga/unix/include/internal/vars.h
+fsf/emacs18/amiga/unix/include/pwd.h
+fsf/emacs18/amiga/unix/include/setjmp.h
+fsf/emacs18/amiga/unix/include/signal.h
+fsf/emacs18/amiga/unix/include/stat.h
+fsf/emacs18/amiga/unix/include/stdio.h
+fsf/emacs18/amiga/unix/include/stdlib.h
+fsf/emacs18/amiga/unix/include/strings.h
+fsf/emacs18/amiga/unix/include/sys/cdefs.h
+fsf/emacs18/amiga/unix/include/sys/fcntl.h
+fsf/emacs18/amiga/unix/include/sys/file.h
+fsf/emacs18/amiga/unix/include/sys/filio.h
+fsf/emacs18/amiga/unix/include/sys/ioctl.h
+fsf/emacs18/amiga/unix/include/sys/param.h
+fsf/emacs18/amiga/unix/include/sys/socket.h
+fsf/emacs18/amiga/unix/include/sys/stat.h
+fsf/emacs18/amiga/unix/include/sys/termios.h
+fsf/emacs18/amiga/unix/include/sys/time.h
+fsf/emacs18/amiga/unix/include/sys/timeb.h
+fsf/emacs18/amiga/unix/include/sys/types.h
+fsf/emacs18/amiga/unix/include/sys/unistd.h
+fsf/emacs18/amiga/unix/include/sys/vlimit.h
+fsf/emacs18/amiga/unix/include/sys/wait.h
+fsf/emacs18/amiga/unix/include/time.h
+fsf/emacs18/amiga/unix/include/tzfile.h
+fsf/emacs18/amiga/unix/include/unistd.h
+fsf/emacs18/amiga/unix/include/utime.h
+fsf/emacs18/amiga/unix/intro.doc
+fsf/emacs18/amiga/unix/mkmkf
+fsf/emacs18/amiga/unix/mkmkf.perl
+fsf/emacs18/amiga/unix/src/SCOPTIONS
+fsf/emacs18/amiga/unix/src/_exit.c
+fsf/emacs18/amiga/unix/src/_main.c
+fsf/emacs18/amiga/unix/src/_setjmp.asm
+fsf/emacs18/amiga/unix/src/abort.c
+fsf/emacs18/amiga/unix/src/access.c
+fsf/emacs18/amiga/unix/src/alloca.c
+fsf/emacs18/amiga/unix/src/allocdos.c
+fsf/emacs18/amiga/unix/src/amiga.h
+fsf/emacs18/amiga/unix/src/amigaos.c
+fsf/emacs18/amiga/unix/src/amigaos.h
+fsf/emacs18/amiga/unix/src/amigatime.c
+fsf/emacs18/amiga/unix/src/bcmp.c
+fsf/emacs18/amiga/unix/src/bcopy.c
+fsf/emacs18/amiga/unix/src/bzero.c
+fsf/emacs18/amiga/unix/src/chmod.c
+fsf/emacs18/amiga/unix/src/chown.c
+fsf/emacs18/amiga/unix/src/close.c
+fsf/emacs18/amiga/unix/src/creat.c
+fsf/emacs18/amiga/unix/src/ctime.c
+fsf/emacs18/amiga/unix/src/devices.c
+fsf/emacs18/amiga/unix/src/dir.c
+fsf/emacs18/amiga/unix/src/dir_data.c
+fsf/emacs18/amiga/unix/src/dir_data.h
+fsf/emacs18/amiga/unix/src/error.c
+fsf/emacs18/amiga/unix/src/error_msg.c
+fsf/emacs18/amiga/unix/src/exec.c
+fsf/emacs18/amiga/unix/src/fchmod.c
+fsf/emacs18/amiga/unix/src/fcntl.c
+fsf/emacs18/amiga/unix/src/fibstat.c
+fsf/emacs18/amiga/unix/src/fibstat.h
+fsf/emacs18/amiga/unix/src/fifo.h
+fsf/emacs18/amiga/unix/src/fifo_pragmas.h
+fsf/emacs18/amiga/unix/src/fifofd.c
+fsf/emacs18/amiga/unix/src/fifofd.h
+fsf/emacs18/amiga/unix/src/files.c
+fsf/emacs18/amiga/unix/src/fstat.c
+fsf/emacs18/amiga/unix/src/ftruncate.c
+fsf/emacs18/amiga/unix/src/getenv.c
+fsf/emacs18/amiga/unix/src/gethostname.c
+fsf/emacs18/amiga/unix/src/getpid.c
+fsf/emacs18/amiga/unix/src/getwd.c
+fsf/emacs18/amiga/unix/src/gid.c
+fsf/emacs18/amiga/unix/src/grp.c
+fsf/emacs18/amiga/unix/src/index.c
+fsf/emacs18/amiga/unix/src/ioctl.c
+fsf/emacs18/amiga/unix/src/isatty.c
+fsf/emacs18/amiga/unix/src/kill.c
+fsf/emacs18/amiga/unix/src/link.c
+fsf/emacs18/amiga/unix/src/lseek.c
+fsf/emacs18/amiga/unix/src/message.c
+fsf/emacs18/amiga/unix/src/mkdir.c
+fsf/emacs18/amiga/unix/src/mkfifo.c
+fsf/emacs18/amiga/unix/src/mktemp.c
+fsf/emacs18/amiga/unix/src/open.c
+fsf/emacs18/amiga/unix/src/perror.c
+fsf/emacs18/amiga/unix/src/pipe.c
+fsf/emacs18/amiga/unix/src/popen.c
+fsf/emacs18/amiga/unix/src/processes.c
+fsf/emacs18/amiga/unix/src/processes.h
+fsf/emacs18/amiga/unix/src/protection.c
+fsf/emacs18/amiga/unix/src/pseudo_c.c
+fsf/emacs18/amiga/unix/src/pwd.c
+fsf/emacs18/amiga/unix/src/read.c
+fsf/emacs18/amiga/unix/src/readlink.c
+fsf/emacs18/amiga/unix/src/rename.c
+fsf/emacs18/amiga/unix/src/rindex.c
+fsf/emacs18/amiga/unix/src/rmdir.c
+fsf/emacs18/amiga/unix/src/select.c
+fsf/emacs18/amiga/unix/src/setjmp.c
+fsf/emacs18/amiga/unix/src/siglist.c
+fsf/emacs18/amiga/unix/src/signal.c
+fsf/emacs18/amiga/unix/src/signals.c
+fsf/emacs18/amiga/unix/src/signals.h
+fsf/emacs18/amiga/unix/src/sigpause.c
+fsf/emacs18/amiga/unix/src/sigsetmask.c
+fsf/emacs18/amiga/unix/src/sleep.c
+fsf/emacs18/amiga/unix/src/smakefile
+fsf/emacs18/amiga/unix/src/smakefile.base
+fsf/emacs18/amiga/unix/src/sprintf.asm
+fsf/emacs18/amiga/unix/src/start.c
+fsf/emacs18/amiga/unix/src/stat.c
+fsf/emacs18/amiga/unix/src/strftime.c
+fsf/emacs18/amiga/unix/src/symlink.c
+fsf/emacs18/amiga/unix/src/time.c
+fsf/emacs18/amiga/unix/src/timeconvert.c
+fsf/emacs18/amiga/unix/src/timeconvert.h
+fsf/emacs18/amiga/unix/src/timers.c
+fsf/emacs18/amiga/unix/src/tmpnam.c
+fsf/emacs18/amiga/unix/src/truncate.c
+fsf/emacs18/amiga/unix/src/uid.c
+fsf/emacs18/amiga/unix/src/umask.c
+fsf/emacs18/amiga/unix/src/unix-hard.lib.uue
+fsf/emacs18/amiga/unix/src/unix.lib.uue
+fsf/emacs18/amiga/unix/src/unlink.c
+fsf/emacs18/amiga/unix/src/utime.c
+fsf/emacs18/amiga/unix/src/wait4.c
+fsf/emacs18/amiga/unix/src/write.c
+fsf/emacs18/amiga/unix/src/zoneinfo/SCOPTIONS
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/africa
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/antarctica
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/asia
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/australasia
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/etcetera
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/europe
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/factory
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/leapseconds
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/northamerica
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/pacificnew
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/smakefile
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar87
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar88
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar89
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/southamerica
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/systemv
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1988
+fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1989
+fsf/emacs18/amiga/unix/src/zoneinfo/getopt.c
+fsf/emacs18/amiga/unix/src/zoneinfo/getopt.h
+fsf/emacs18/amiga/unix/src/zoneinfo/ialloc.c
+fsf/emacs18/amiga/unix/src/zoneinfo/smakefile
+fsf/emacs18/amiga/unix/src/zoneinfo/zic
+fsf/emacs18/amiga/unix/src/zoneinfo/zic.8
+fsf/emacs18/amiga/unix/src/zoneinfo/zic.c
+fsf/emacs18/amiga/unix/unix.doc
+fsf/emacs18/build-install
+fsf/emacs18/cpp/Makefile
+fsf/emacs18/cpp/SCOPTIONS
+fsf/emacs18/cpp/cccp.c
+fsf/emacs18/cpp/cexp.y
+fsf/emacs18/cpp/smakefile
+fsf/emacs18/emacs.com
+fsf/emacs18/etc/3B-MAXMEM
+fsf/emacs18/etc/AIX.DUMP
+fsf/emacs18/etc/APOLLO
+fsf/emacs18/etc/APPLE
+fsf/emacs18/etc/BABYL
+fsf/emacs18/etc/CCADIFF
+fsf/emacs18/etc/CHARACTERS
+fsf/emacs18/etc/COOKIES
+fsf/emacs18/etc/COPYING
+fsf/emacs18/etc/ChangeLog
+fsf/emacs18/etc/DEBUG
+fsf/emacs18/etc/DIFF
+fsf/emacs18/etc/DISTRIB
+fsf/emacs18/etc/FAQ
+fsf/emacs18/etc/FTP
+fsf/emacs18/etc/GNU
+fsf/emacs18/etc/GNU.JOKES
+fsf/emacs18/etc/GOSDIFF
+fsf/emacs18/etc/INTERVAL.IDEAS
+fsf/emacs18/etc/INTERVIEW
+fsf/emacs18/etc/LEDIT
+fsf/emacs18/etc/LPF
+fsf/emacs18/etc/MACHINES
+fsf/emacs18/etc/MAILINGLISTS
+fsf/emacs18/etc/MOTIVATION
+fsf/emacs18/etc/Makefile
+fsf/emacs18/etc/NEWS
+fsf/emacs18/etc/NICKLES.WORTH
+fsf/emacs18/etc/ONEWS
+fsf/emacs18/etc/OONEWS
+fsf/emacs18/etc/OPTIONS
+fsf/emacs18/etc/README
+fsf/emacs18/etc/SCOPTIONS
+fsf/emacs18/etc/SERVICE
+fsf/emacs18/etc/SUN-SUPPORT
+fsf/emacs18/etc/SUNBUG
+fsf/emacs18/etc/TERMS
+fsf/emacs18/etc/TO-DO
+fsf/emacs18/etc/TUTORIAL
+fsf/emacs18/etc/XDOC
+fsf/emacs18/etc/XENIX
+fsf/emacs18/etc/Xkeymap.txt
+fsf/emacs18/etc/amiga-env.c
+fsf/emacs18/etc/celibacy.1
+fsf/emacs18/etc/complink.com
+fsf/emacs18/etc/cvtmail.c
+fsf/emacs18/etc/digest-doc.c
+fsf/emacs18/etc/echo.msg
+fsf/emacs18/etc/emacs.1
+fsf/emacs18/etc/emacs.icon
+fsf/emacs18/etc/emacs.names
+fsf/emacs18/etc/emacsclient.c
+fsf/emacs18/etc/emacstool.1
+fsf/emacs18/etc/emacstool.c
+fsf/emacs18/etc/env.c
+fsf/emacs18/etc/etags-vmslib.c
+fsf/emacs18/etc/etags.c
+fsf/emacs18/etc/etags.vms
+fsf/emacs18/etc/fakemail.c
+fsf/emacs18/etc/faq2texi.perl
+fsf/emacs18/etc/ledit.l
+fsf/emacs18/etc/leditcfns.c
+fsf/emacs18/etc/make-docfile.c
+fsf/emacs18/etc/makedoc.com
+fsf/emacs18/etc/movemail.c
+fsf/emacs18/etc/ms-kermit
+fsf/emacs18/etc/ms-kermit-7bit
+fsf/emacs18/etc/qsort.c
+fsf/emacs18/etc/refcard.tex
+fsf/emacs18/etc/server.c
+fsf/emacs18/etc/sex.6
+fsf/emacs18/etc/sh.c
+fsf/emacs18/etc/smakefile
+fsf/emacs18/etc/sorted-doc.c
+fsf/emacs18/etc/spook.lines
+fsf/emacs18/etc/termcap.amiga
+fsf/emacs18/etc/termcap.dat
+fsf/emacs18/etc/termcap.ucb
+fsf/emacs18/etc/test-distrib.c
+fsf/emacs18/etc/testfile
+fsf/emacs18/etc/ulimit.hack
+fsf/emacs18/etc/vipcard.tex
+fsf/emacs18/etc/vmslink.opt
+fsf/emacs18/etc/wakeup.c
+fsf/emacs18/etc/xmouse.doc
+fsf/emacs18/etc/yow.c
+fsf/emacs18/etc/yow.lines
+fsf/emacs18/info/COPYING
+fsf/emacs18/info/dir
+fsf/emacs18/info/emacs
+fsf/emacs18/info/emacs-1
+fsf/emacs18/info/emacs-10
+fsf/emacs18/info/emacs-11
+fsf/emacs18/info/emacs-12
+fsf/emacs18/info/emacs-13
+fsf/emacs18/info/emacs-14
+fsf/emacs18/info/emacs-15
+fsf/emacs18/info/emacs-16
+fsf/emacs18/info/emacs-17
+fsf/emacs18/info/emacs-18
+fsf/emacs18/info/emacs-19
+fsf/emacs18/info/emacs-2
+fsf/emacs18/info/emacs-3
+fsf/emacs18/info/emacs-4
+fsf/emacs18/info/emacs-5
+fsf/emacs18/info/emacs-6
+fsf/emacs18/info/emacs-7
+fsf/emacs18/info/emacs-8
+fsf/emacs18/info/emacs-9
+fsf/emacs18/info/info
+fsf/emacs18/info/regex
+fsf/emacs18/info/termcap
+fsf/emacs18/info/termcap-1
+fsf/emacs18/info/termcap-2
+fsf/emacs18/info/termcap-3
+fsf/emacs18/info/texinfo
+fsf/emacs18/info/texinfo-1
+fsf/emacs18/info/texinfo-2
+fsf/emacs18/info/texinfo-3
+fsf/emacs18/info/texinfo-4
+fsf/emacs18/info/vip
+fsf/emacs18/info/vip-1
+fsf/emacs18/info/vip-2
+fsf/emacs18/install.sh
+fsf/emacs18/kepteditor.com
+fsf/emacs18/lisp/COPYING
+fsf/emacs18/lisp/ChangeLog
+fsf/emacs18/lisp/abbrev.el
+fsf/emacs18/lisp/abbrev.elc
+fsf/emacs18/lisp/abbrevlist.el
+fsf/emacs18/lisp/abbrevlist.elc
+fsf/emacs18/lisp/ada.el
+fsf/emacs18/lisp/ada.elc
+fsf/emacs18/lisp/add-log.el
+fsf/emacs18/lisp/add-log.elc
+fsf/emacs18/lisp/amiga-init.el
+fsf/emacs18/lisp/amiga-init.elc
+fsf/emacs18/lisp/amiga-menu.el
+fsf/emacs18/lisp/amiga-menu.elc
+fsf/emacs18/lisp/amiga-mouse.el
+fsf/emacs18/lisp/amiga-mouse.elc
+fsf/emacs18/lisp/autoinsert.el
+fsf/emacs18/lisp/backquote.el
+fsf/emacs18/lisp/backquote.elc
+fsf/emacs18/lisp/bg-mouse.el
+fsf/emacs18/lisp/bibtex.el
+fsf/emacs18/lisp/bibtex.elc
+fsf/emacs18/lisp/blackbox.el
+fsf/emacs18/lisp/blackbox.elc
+fsf/emacs18/lisp/buff-menu.el
+fsf/emacs18/lisp/buff-menu.elc
+fsf/emacs18/lisp/bytecomp.el
+fsf/emacs18/lisp/bytecomp.elc
+fsf/emacs18/lisp/c-fill.el
+fsf/emacs18/lisp/c-fill.elc
+fsf/emacs18/lisp/c-mode.el
+fsf/emacs18/lisp/c-mode.elc
+fsf/emacs18/lisp/cal.el
+fsf/emacs18/lisp/cal.elc
+fsf/emacs18/lisp/chistory.el
+fsf/emacs18/lisp/chistory.elc
+fsf/emacs18/lisp/cl-indent.el
+fsf/emacs18/lisp/cl-indent.elc
+fsf/emacs18/lisp/cl.el
+fsf/emacs18/lisp/cl.elc
+fsf/emacs18/lisp/cmacexp.el
+fsf/emacs18/lisp/compare-w.el
+fsf/emacs18/lisp/compare-w.elc
+fsf/emacs18/lisp/compile.el
+fsf/emacs18/lisp/compile.elc
+fsf/emacs18/lisp/dabbrev.el
+fsf/emacs18/lisp/dabbrev.elc
+fsf/emacs18/lisp/dbx.el
+fsf/emacs18/lisp/dbx.elc
+fsf/emacs18/lisp/debug.el
+fsf/emacs18/lisp/debug.elc
+fsf/emacs18/lisp/dired.el
+fsf/emacs18/lisp/dired.elc
+fsf/emacs18/lisp/disass.el
+fsf/emacs18/lisp/disass.elc
+fsf/emacs18/lisp/dissociate.el
+fsf/emacs18/lisp/dissociate.elc
+fsf/emacs18/lisp/doctex.el
+fsf/emacs18/lisp/doctor.el
+fsf/emacs18/lisp/doctor.elc
+fsf/emacs18/lisp/ebuff-menu.el
+fsf/emacs18/lisp/ebuff-menu.elc
+fsf/emacs18/lisp/echistory.el
+fsf/emacs18/lisp/echistory.elc
+fsf/emacs18/lisp/edt-doc.el
+fsf/emacs18/lisp/edt.el
+fsf/emacs18/lisp/edt.elc
+fsf/emacs18/lisp/ehelp.el
+fsf/emacs18/lisp/ehelp.elc
+fsf/emacs18/lisp/electric.el
+fsf/emacs18/lisp/electric.elc
+fsf/emacs18/lisp/emacsbug.el
+fsf/emacs18/lisp/files.el
+fsf/emacs18/lisp/files.elc
+fsf/emacs18/lisp/fill.el
+fsf/emacs18/lisp/fill.elc
+fsf/emacs18/lisp/flame.el
+fsf/emacs18/lisp/flame.elc
+fsf/emacs18/lisp/float.el
+fsf/emacs18/lisp/float.elc
+fsf/emacs18/lisp/fortran.el
+fsf/emacs18/lisp/fortran.elc
+fsf/emacs18/lisp/ftp.el
+fsf/emacs18/lisp/ftp.elc
+fsf/emacs18/lisp/gdb.el
+fsf/emacs18/lisp/gdb.elc
+fsf/emacs18/lisp/gosmacs.el
+fsf/emacs18/lisp/grow-vers.el
+fsf/emacs18/lisp/hanoi.el
+fsf/emacs18/lisp/hanoi.elc
+fsf/emacs18/lisp/help.el
+fsf/emacs18/lisp/help.elc
+fsf/emacs18/lisp/helper.el
+fsf/emacs18/lisp/helper.elc
+fsf/emacs18/lisp/hideif.el
+fsf/emacs18/lisp/hideif.elc
+fsf/emacs18/lisp/icon.el
+fsf/emacs18/lisp/icon.elc
+fsf/emacs18/lisp/inc-vers.el
+fsf/emacs18/lisp/indent.el
+fsf/emacs18/lisp/indent.elc
+fsf/emacs18/lisp/info.el
+fsf/emacs18/lisp/info.elc
+fsf/emacs18/lisp/informat.el
+fsf/emacs18/lisp/informat.elc
+fsf/emacs18/lisp/isearch.el
+fsf/emacs18/lisp/isearch.elc
+fsf/emacs18/lisp/kermit.el
+fsf/emacs18/lisp/keypad.el
+fsf/emacs18/lisp/keypad.elc
+fsf/emacs18/lisp/ledit.el
+fsf/emacs18/lisp/life.el
+fsf/emacs18/lisp/life.elc
+fsf/emacs18/lisp/lisp-mode.el
+fsf/emacs18/lisp/lisp-mode.elc
+fsf/emacs18/lisp/lisp.el
+fsf/emacs18/lisp/lisp.elc
+fsf/emacs18/lisp/loaddefs.el
+fsf/emacs18/lisp/loadup.el
+fsf/emacs18/lisp/lpr.el
+fsf/emacs18/lisp/lpr.elc
+fsf/emacs18/lisp/macros.el
+fsf/emacs18/lisp/macros.elc
+fsf/emacs18/lisp/mail-utils.el
+fsf/emacs18/lisp/mail-utils.elc
+fsf/emacs18/lisp/mailalias.el
+fsf/emacs18/lisp/mailalias.elc
+fsf/emacs18/lisp/mailpost.el
+fsf/emacs18/lisp/makesum.el
+fsf/emacs18/lisp/makesum.elc
+fsf/emacs18/lisp/man.el
+fsf/emacs18/lisp/man.elc
+fsf/emacs18/lisp/medit.el
+fsf/emacs18/lisp/medit.elc
+fsf/emacs18/lisp/meese.el
+fsf/emacs18/lisp/mh-e.el
+fsf/emacs18/lisp/mh-e.elc
+fsf/emacs18/lisp/mim-mode.el
+fsf/emacs18/lisp/mim-mode.elc
+fsf/emacs18/lisp/mim-syntax.el
+fsf/emacs18/lisp/mim-syntax.elc
+fsf/emacs18/lisp/mlconvert.el
+fsf/emacs18/lisp/mlconvert.elc
+fsf/emacs18/lisp/mlsupport.el
+fsf/emacs18/lisp/mlsupport.elc
+fsf/emacs18/lisp/modula2.el
+fsf/emacs18/lisp/modula2.elc
+fsf/emacs18/lisp/novice.el
+fsf/emacs18/lisp/nroff-mode.el
+fsf/emacs18/lisp/nroff-mode.elc
+fsf/emacs18/lisp/options.el
+fsf/emacs18/lisp/options.elc
+fsf/emacs18/lisp/outline.el
+fsf/emacs18/lisp/outline.elc
+fsf/emacs18/lisp/page.el
+fsf/emacs18/lisp/page.elc
+fsf/emacs18/lisp/paragraphs.el
+fsf/emacs18/lisp/paragraphs.elc
+fsf/emacs18/lisp/paths.el
+fsf/emacs18/lisp/picture.el
+fsf/emacs18/lisp/picture.elc
+fsf/emacs18/lisp/prolog.el
+fsf/emacs18/lisp/prolog.elc
+fsf/emacs18/lisp/rect.el
+fsf/emacs18/lisp/rect.elc
+fsf/emacs18/lisp/register.el
+fsf/emacs18/lisp/register.elc
+fsf/emacs18/lisp/replace.el
+fsf/emacs18/lisp/replace.elc
+fsf/emacs18/lisp/rfc822.el
+fsf/emacs18/lisp/rfc822.elc
+fsf/emacs18/lisp/rmail.el
+fsf/emacs18/lisp/rmail.elc
+fsf/emacs18/lisp/rmailedit.el
+fsf/emacs18/lisp/rmailedit.elc
+fsf/emacs18/lisp/rmailkwd.el
+fsf/emacs18/lisp/rmailkwd.elc
+fsf/emacs18/lisp/rmailmsc.el
+fsf/emacs18/lisp/rmailmsc.elc
+fsf/emacs18/lisp/rmailout.el
+fsf/emacs18/lisp/rmailout.elc
+fsf/emacs18/lisp/rmailsum.el
+fsf/emacs18/lisp/rmailsum.elc
+fsf/emacs18/lisp/rnews.el
+fsf/emacs18/lisp/rnews.elc
+fsf/emacs18/lisp/rnewspost.el
+fsf/emacs18/lisp/rnewspost.elc
+fsf/emacs18/lisp/saveconf.el
+fsf/emacs18/lisp/scheme.el
+fsf/emacs18/lisp/scheme.elc
+fsf/emacs18/lisp/scribe.el
+fsf/emacs18/lisp/scribe.elc
+fsf/emacs18/lisp/sendmail.el
+fsf/emacs18/lisp/sendmail.elc
+fsf/emacs18/lisp/server.el
+fsf/emacs18/lisp/server.elc
+fsf/emacs18/lisp/shell.el
+fsf/emacs18/lisp/shell.elc
+fsf/emacs18/lisp/simple.el
+fsf/emacs18/lisp/simple.elc
+fsf/emacs18/lisp/simula.defns
+fsf/emacs18/lisp/simula.el
+fsf/emacs18/lisp/simula.elc
+fsf/emacs18/lisp/sort.el
+fsf/emacs18/lisp/sort.elc
+fsf/emacs18/lisp/spell.el
+fsf/emacs18/lisp/spell.elc
+fsf/emacs18/lisp/spook.el
+fsf/emacs18/lisp/startup.el
+fsf/emacs18/lisp/startup.elc
+fsf/emacs18/lisp/studly.el
+fsf/emacs18/lisp/studly.elc
+fsf/emacs18/lisp/subr.el
+fsf/emacs18/lisp/subr.elc
+fsf/emacs18/lisp/sun-cursors.el
+fsf/emacs18/lisp/sun-fns.el
+fsf/emacs18/lisp/sun-fns.elc
+fsf/emacs18/lisp/sun-keys.el
+fsf/emacs18/lisp/sun-mouse.el
+fsf/emacs18/lisp/sun-mouse.elc
+fsf/emacs18/lisp/sup-mouse.el
+fsf/emacs18/lisp/sup-mouse.elc
+fsf/emacs18/lisp/tabify.el
+fsf/emacs18/lisp/tabify.elc
+fsf/emacs18/lisp/tags.el
+fsf/emacs18/lisp/tags.elc
+fsf/emacs18/lisp/telnet.el
+fsf/emacs18/lisp/telnet.elc
+fsf/emacs18/lisp/term/COPYING
+fsf/emacs18/lisp/term/apollo.el
+fsf/emacs18/lisp/term/at386.el
+fsf/emacs18/lisp/term/bbn.el
+fsf/emacs18/lisp/term/bg.el
+fsf/emacs18/lisp/term/bgnv.el
+fsf/emacs18/lisp/term/bgrv.el
+fsf/emacs18/lisp/term/bobcat.el
+fsf/emacs18/lisp/term/intuition-win.el
+fsf/emacs18/lisp/term/intuition-win.elc
+fsf/emacs18/lisp/term/s4.el
+fsf/emacs18/lisp/term/sun.el
+fsf/emacs18/lisp/term/supdup.el
+fsf/emacs18/lisp/term/unixpc.el
+fsf/emacs18/lisp/term/vt100.el
+fsf/emacs18/lisp/term/vt101.el
+fsf/emacs18/lisp/term/vt102.el
+fsf/emacs18/lisp/term/vt125.el
+fsf/emacs18/lisp/term/vt131.el
+fsf/emacs18/lisp/term/vt200.el
+fsf/emacs18/lisp/term/vt220.el
+fsf/emacs18/lisp/term/vt240.el
+fsf/emacs18/lisp/term/vt300.el
+fsf/emacs18/lisp/term/x-win.el
+fsf/emacs18/lisp/term/xterm.el
+fsf/emacs18/lisp/terminal.el
+fsf/emacs18/lisp/terminal.elc
+fsf/emacs18/lisp/tex-mode.el
+fsf/emacs18/lisp/tex-mode.elc
+fsf/emacs18/lisp/tex-start.el
+fsf/emacs18/lisp/texinfmt.el
+fsf/emacs18/lisp/texinfmt.elc
+fsf/emacs18/lisp/texinfo.el
+fsf/emacs18/lisp/texinfo.elc
+fsf/emacs18/lisp/text-mode.el
+fsf/emacs18/lisp/text-mode.elc
+fsf/emacs18/lisp/time.el
+fsf/emacs18/lisp/time.elc
+fsf/emacs18/lisp/uncompress.el
+fsf/emacs18/lisp/underline.el
+fsf/emacs18/lisp/underline.elc
+fsf/emacs18/lisp/undigest.el
+fsf/emacs18/lisp/undigest.elc
+fsf/emacs18/lisp/unused.el
+fsf/emacs18/lisp/userlock.el
+fsf/emacs18/lisp/userlock.elc
+fsf/emacs18/lisp/version.el
+fsf/emacs18/lisp/vi.el
+fsf/emacs18/lisp/vi.elc
+fsf/emacs18/lisp/view.el
+fsf/emacs18/lisp/view.elc
+fsf/emacs18/lisp/vip.el
+fsf/emacs18/lisp/vip.elc
+fsf/emacs18/lisp/vms-patch.el
+fsf/emacs18/lisp/vms-patch.elc
+fsf/emacs18/lisp/vmsproc.el
+fsf/emacs18/lisp/vmsproc.elc
+fsf/emacs18/lisp/window.el
+fsf/emacs18/lisp/window.elc
+fsf/emacs18/lisp/x-menu.el
+fsf/emacs18/lisp/x-menu.elc
+fsf/emacs18/lisp/x-mouse.el
+fsf/emacs18/lisp/x-mouse.elc
+fsf/emacs18/lisp/xscheme.el
+fsf/emacs18/lisp/xscheme.elc
+fsf/emacs18/lisp/yow.el
+fsf/emacs18/lisp/yow.elc
+fsf/emacs18/man/ChangeLog
+fsf/emacs18/man/Makefile
+fsf/emacs18/man/README
+fsf/emacs18/man/cl.texinfo
+fsf/emacs18/man/emacs.aux
+fsf/emacs18/man/emacs.cps
+fsf/emacs18/man/emacs.fns
+fsf/emacs18/man/emacs.kys
+fsf/emacs18/man/emacs.pgs
+fsf/emacs18/man/emacs.texi
+fsf/emacs18/man/emacs.vrs
+fsf/emacs18/man/regex.texinfo
+fsf/emacs18/man/split-man
+fsf/emacs18/man/termcap.aux
+fsf/emacs18/man/termcap.cps
+fsf/emacs18/man/termcap.fns
+fsf/emacs18/man/termcap.kys
+fsf/emacs18/man/termcap.texi
+fsf/emacs18/man/texindex.c
+fsf/emacs18/man/texinfo.aux
+fsf/emacs18/man/texinfo.cps
+fsf/emacs18/man/texinfo.fns
+fsf/emacs18/man/texinfo.tex
+fsf/emacs18/man/texinfo.texi
+fsf/emacs18/man/vip.texinfo
+fsf/emacs18/manifests/bin
+fsf/emacs18/manifests/src
+fsf/emacs18/oldXMenu/Activate.c
+fsf/emacs18/oldXMenu/AddPane.c
+fsf/emacs18/oldXMenu/AddSel.c
+fsf/emacs18/oldXMenu/ChangeLog
+fsf/emacs18/oldXMenu/ChgPane.c
+fsf/emacs18/oldXMenu/ChgSel.c
+fsf/emacs18/oldXMenu/Create.c
+fsf/emacs18/oldXMenu/DelPane.c
+fsf/emacs18/oldXMenu/DelSel.c
+fsf/emacs18/oldXMenu/Destroy.c
+fsf/emacs18/oldXMenu/Error.c
+fsf/emacs18/oldXMenu/EvHand.c
+fsf/emacs18/oldXMenu/FindPane.c
+fsf/emacs18/oldXMenu/FindSel.c
+fsf/emacs18/oldXMenu/Imakefile
+fsf/emacs18/oldXMenu/InsPane.c
+fsf/emacs18/oldXMenu/InsSel.c
+fsf/emacs18/oldXMenu/Internal.c
+fsf/emacs18/oldXMenu/Locate.c
+fsf/emacs18/oldXMenu/Makefile
+fsf/emacs18/oldXMenu/Post.c
+fsf/emacs18/oldXMenu/README
+fsf/emacs18/oldXMenu/Recomp.c
+fsf/emacs18/oldXMenu/SetAEQ.c
+fsf/emacs18/oldXMenu/SetFrz.c
+fsf/emacs18/oldXMenu/SetPane.c
+fsf/emacs18/oldXMenu/SetSel.c
+fsf/emacs18/oldXMenu/X10.h
+fsf/emacs18/oldXMenu/XCrAssoc.c
+fsf/emacs18/oldXMenu/XDelAssoc.c
+fsf/emacs18/oldXMenu/XDestAssoc.c
+fsf/emacs18/oldXMenu/XLookAssoc.c
+fsf/emacs18/oldXMenu/XMakeAssoc.c
+fsf/emacs18/oldXMenu/XMenu.h
+fsf/emacs18/oldXMenu/XMenuInt.h
+fsf/emacs18/oldXMenu/copyright.h
+fsf/emacs18/oldXMenu/insque.c
+fsf/emacs18/shortnames/COPYING
+fsf/emacs18/shortnames/Makefile
+fsf/emacs18/shortnames/defines.c
+fsf/emacs18/shortnames/dups.c
+fsf/emacs18/shortnames/header.h
+fsf/emacs18/shortnames/names.c
+fsf/emacs18/shortnames/reserved
+fsf/emacs18/shortnames/special
+fsf/emacs18/src/.dbxinit
+fsf/emacs18/src/COPYING
+fsf/emacs18/src/ChangeLog
+fsf/emacs18/src/Makefile
+fsf/emacs18/src/README
+fsf/emacs18/src/SCOPTIONS
+fsf/emacs18/src/TAGS
+fsf/emacs18/src/VMSBUILD
+fsf/emacs18/src/abbrev.c
+fsf/emacs18/src/acldef.h
+fsf/emacs18/src/alloc.c
+fsf/emacs18/src/alloca.c
+fsf/emacs18/src/alloca.s
+fsf/emacs18/src/amiga.h
+fsf/emacs18/src/amiga_clipboard.c
+fsf/emacs18/src/amiga_data.c
+fsf/emacs18/src/amiga_dump.c
+fsf/emacs18/src/amiga_malloc.c
+fsf/emacs18/src/amiga_menu.c
+fsf/emacs18/src/amiga_processes.c
+fsf/emacs18/src/amiga_rexx.c
+fsf/emacs18/src/amiga_screen.c
+fsf/emacs18/src/amiga_serial.c
+fsf/emacs18/src/amiga_sysdep.c
+fsf/emacs18/src/amiga_term.c
+fsf/emacs18/src/amiga_tty.c
+fsf/emacs18/src/buffer.c
+fsf/emacs18/src/buffer.h
+fsf/emacs18/src/build.com
+fsf/emacs18/src/bytecode.c
+fsf/emacs18/src/callint.c
+fsf/emacs18/src/callproc.c
+fsf/emacs18/src/casefiddle.c
+fsf/emacs18/src/ccom.com
+fsf/emacs18/src/chpdef.h
+fsf/emacs18/src/cm.c
+fsf/emacs18/src/cm.h
+fsf/emacs18/src/cmds.c
+fsf/emacs18/src/commands.h
+fsf/emacs18/src/compile.com
+fsf/emacs18/src/config.h-dist
+fsf/emacs18/src/crt0.c
+fsf/emacs18/src/data.c
+fsf/emacs18/src/dir.h
+fsf/emacs18/src/dired.c
+fsf/emacs18/src/dispextern.h
+fsf/emacs18/src/dispnew.c
+fsf/emacs18/src/doc.c
+fsf/emacs18/src/doprnt.c
+fsf/emacs18/src/dostrip.c
+fsf/emacs18/src/editfns.c
+fsf/emacs18/src/emacs.c
+fsf/emacs18/src/emacssignal.h
+fsf/emacs18/src/environ.c
+fsf/emacs18/src/eval.c
+fsf/emacs18/src/exec.c
+fsf/emacs18/src/fileio.c
+fsf/emacs18/src/filelock.c
+fsf/emacs18/src/filemode.c
+fsf/emacs18/src/filetypes.h
+fsf/emacs18/src/firstfile.c
+fsf/emacs18/src/fns.c
+fsf/emacs18/src/getpagesize.h
+fsf/emacs18/src/gettime.h
+fsf/emacs18/src/hftctl.c
+fsf/emacs18/src/indent.c
+fsf/emacs18/src/indent.h
+fsf/emacs18/src/insdel.c
+fsf/emacs18/src/ioctl.h
+fsf/emacs18/src/keyboard.c
+fsf/emacs18/src/keymap.c
+fsf/emacs18/src/lastfile.c
+fsf/emacs18/src/link.com
+fsf/emacs18/src/lisp.h
+fsf/emacs18/src/lread.c
+fsf/emacs18/src/m-7300.h
+fsf/emacs18/src/m-all2800.h
+fsf/emacs18/src/m-alliant.h
+fsf/emacs18/src/m-alliant1.h
+fsf/emacs18/src/m-alliant4.h
+fsf/emacs18/src/m-altos.h
+fsf/emacs18/src/m-amdahl.h
+fsf/emacs18/src/m-amiga.h
+fsf/emacs18/src/m-apollo.h
+fsf/emacs18/src/m-att3b.h
+fsf/emacs18/src/m-aviion.h
+fsf/emacs18/src/m-bullx20.h
+fsf/emacs18/src/m-celerity.h
+fsf/emacs18/src/m-convex.h
+fsf/emacs18/src/m-cydra5.h
+fsf/emacs18/src/m-delta.h
+fsf/emacs18/src/m-delta88.h
+fsf/emacs18/src/m-dpx2-200.h
+fsf/emacs18/src/m-dpx2-300.h
+fsf/emacs18/src/m-dpx2.h
+fsf/emacs18/src/m-dual.h
+fsf/emacs18/src/m-elxsi.h
+fsf/emacs18/src/m-gec63.h
+fsf/emacs18/src/m-gould.h
+fsf/emacs18/src/m-hp9000s300.h
+fsf/emacs18/src/m-hp9000s800.h
+fsf/emacs18/src/m-ibmps2-aix.h
+fsf/emacs18/src/m-ibmrs6000.h
+fsf/emacs18/src/m-ibmrt-aix.h
+fsf/emacs18/src/m-ibmrt.h
+fsf/emacs18/src/m-intel386.h
+fsf/emacs18/src/m-intel860.h
+fsf/emacs18/src/m-iris4d.h
+fsf/emacs18/src/m-irist.h
+fsf/emacs18/src/m-is386.h
+fsf/emacs18/src/m-isi-ov.h
+fsf/emacs18/src/m-masscomp.h
+fsf/emacs18/src/m-mega68.h
+fsf/emacs18/src/m-mg1.h
+fsf/emacs18/src/m-mips.h
+fsf/emacs18/src/m-mips4.h
+fsf/emacs18/src/m-news-risc.h
+fsf/emacs18/src/m-news.h
+fsf/emacs18/src/m-next.h
+fsf/emacs18/src/m-ns16000.h
+fsf/emacs18/src/m-ns32000.h
+fsf/emacs18/src/m-nu.h
+fsf/emacs18/src/m-orion.h
+fsf/emacs18/src/m-orion105.h
+fsf/emacs18/src/m-pfa50.h
+fsf/emacs18/src/m-plexus.h
+fsf/emacs18/src/m-pmax.h
+fsf/emacs18/src/m-pyramid.h
+fsf/emacs18/src/m-pyrmips.h
+fsf/emacs18/src/m-seq386.h
+fsf/emacs18/src/m-sequent.h
+fsf/emacs18/src/m-sgi3000.h
+fsf/emacs18/src/m-sparc.h
+fsf/emacs18/src/m-stride.h
+fsf/emacs18/src/m-sun1.h
+fsf/emacs18/src/m-sun2.h
+fsf/emacs18/src/m-sun3.h
+fsf/emacs18/src/m-sun386.h
+fsf/emacs18/src/m-tad68k.h
+fsf/emacs18/src/m-tahoe.h
+fsf/emacs18/src/m-tandem-s2.h
+fsf/emacs18/src/m-targon31.h
+fsf/emacs18/src/m-tek4300.h
+fsf/emacs18/src/m-template.h
+fsf/emacs18/src/m-tower32.h
+fsf/emacs18/src/m-tower32v3.h
+fsf/emacs18/src/m-triton88.h
+fsf/emacs18/src/m-ustation.h
+fsf/emacs18/src/m-vax.h
+fsf/emacs18/src/m-wicat.h
+fsf/emacs18/src/macros.c
+fsf/emacs18/src/macros.h
+fsf/emacs18/src/malloc.c
+fsf/emacs18/src/marker.c
+fsf/emacs18/src/minibuf.c
+fsf/emacs18/src/mocklisp.c
+fsf/emacs18/src/ndir.h
+fsf/emacs18/src/param.h
+fsf/emacs18/src/paths.h-dist
+fsf/emacs18/src/pre-crt0.c
+fsf/emacs18/src/precomp.com
+fsf/emacs18/src/print.c
+fsf/emacs18/src/process.c
+fsf/emacs18/src/process.h
+fsf/emacs18/src/recomp.com
+fsf/emacs18/src/regex.c
+fsf/emacs18/src/regex.h
+fsf/emacs18/src/s-386bsd.h
+fsf/emacs18/src/s-386ix.h
+fsf/emacs18/src/s-aix3-1.h
+fsf/emacs18/src/s-aix3-2.h
+fsf/emacs18/src/s-amiga.h
+fsf/emacs18/src/s-bsd4-1.h
+fsf/emacs18/src/s-bsd4-2.h
+fsf/emacs18/src/s-bsd4-3.h
+fsf/emacs18/src/s-dgux.h
+fsf/emacs18/src/s-dgux4-31.h
+fsf/emacs18/src/s-esix.h
+fsf/emacs18/src/s-esix5r4.h
+fsf/emacs18/src/s-hpux7.h
+fsf/emacs18/src/s-hpux8.h
+fsf/emacs18/src/s-iris3-5.h
+fsf/emacs18/src/s-iris3-6.h
+fsf/emacs18/src/s-irix3-3.h
+fsf/emacs18/src/s-irix4-0.h
+fsf/emacs18/src/s-isc2-2.h
+fsf/emacs18/src/s-isc3-0.h
+fsf/emacs18/src/s-mach2.h
+fsf/emacs18/src/s-newsos5.h
+fsf/emacs18/src/s-osf1.h
+fsf/emacs18/src/s-rtu.h
+fsf/emacs18/src/s-sco.h
+fsf/emacs18/src/s-sco3-2-1.h
+fsf/emacs18/src/s-sco3-2-2.h
+fsf/emacs18/src/s-sco3-2-4.h
+fsf/emacs18/src/s-sol2.h
+fsf/emacs18/src/s-sunos4-0.h
+fsf/emacs18/src/s-sunos4-1.h
+fsf/emacs18/src/s-template.h
+fsf/emacs18/src/s-umax.h
+fsf/emacs18/src/s-unipl5-0.h
+fsf/emacs18/src/s-unipl5-2.h
+fsf/emacs18/src/s-usg5-0.h
+fsf/emacs18/src/s-usg5-2-2.h
+fsf/emacs18/src/s-usg5-2.h
+fsf/emacs18/src/s-usg5-3.h
+fsf/emacs18/src/s-usg5-4.h
+fsf/emacs18/src/s-vms.h
+fsf/emacs18/src/s-vms4-0.h
+fsf/emacs18/src/s-vms4-2.h
+fsf/emacs18/src/s-vms4-4.h
+fsf/emacs18/src/s-vms5-5.h
+fsf/emacs18/src/s-xenix.h
+fsf/emacs18/src/scroll.c
+fsf/emacs18/src/search.c
+fsf/emacs18/src/simplerexx.c
+fsf/emacs18/src/simplerexx.h
+fsf/emacs18/src/sink.h
+fsf/emacs18/src/sink11.h
+fsf/emacs18/src/sink11mask.h
+fsf/emacs18/src/sinkmask.h
+fsf/emacs18/src/smakefile
+fsf/emacs18/src/sunfns.c
+fsf/emacs18/src/syntax.c
+fsf/emacs18/src/syntax.h
+fsf/emacs18/src/sysdep.c
+fsf/emacs18/src/temacs.opt
+fsf/emacs18/src/term.c
+fsf/emacs18/src/termcap.c
+fsf/emacs18/src/termchar.h
+fsf/emacs18/src/termhooks.h
+fsf/emacs18/src/terminfo.c
+fsf/emacs18/src/termopts.h
+fsf/emacs18/src/testemacs.com
+fsf/emacs18/src/tparam.c
+fsf/emacs18/src/uaf.h
+fsf/emacs18/src/undo.c
+fsf/emacs18/src/unexaix.c
+fsf/emacs18/src/unexconvex.c
+fsf/emacs18/src/unexec.c
+fsf/emacs18/src/unexelf.c
+fsf/emacs18/src/unexenix.c
+fsf/emacs18/src/unexfx2800.c
+fsf/emacs18/src/unexhp9k800.c
+fsf/emacs18/src/unexmips.c
+fsf/emacs18/src/unexnext.c
+fsf/emacs18/src/unexshm.c
+fsf/emacs18/src/vlimit.h
+fsf/emacs18/src/vms-pp.c
+fsf/emacs18/src/vms-pp.trans
+fsf/emacs18/src/vms-pwd.h
+fsf/emacs18/src/vmsfns.c
+fsf/emacs18/src/vmsmap.c
+fsf/emacs18/src/vmspaths.h
+fsf/emacs18/src/window.c
+fsf/emacs18/src/window.h
+fsf/emacs18/src/x11fns.c
+fsf/emacs18/src/x11term.c
+fsf/emacs18/src/x11term.h
+fsf/emacs18/src/xdisp.c
+fsf/emacs18/src/xfns.c
+fsf/emacs18/src/xkeys-aix.h
+fsf/emacs18/src/xmenu.c
+fsf/emacs18/src/xterm.c
+fsf/emacs18/src/xterm.h
+fsf/emacs18/src/ymakefile
+fsf/emacs18/vmsdist.com
diff -rup --new-file baseline/fsf/emacs18/src/SCOPTIONS amiga/fsf/emacs18/src/SCOPTIONS
--- baseline/fsf/emacs18/src/SCOPTIONS Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/SCOPTIONS Sat Sep 28 00:00:00 1996
@@ -0,0 +1,15 @@
+STRINGMERGE
+STRUCTUREEQUIVALENCE
+NOWARNVOIDRETURN
+NOVERSION
+MEMORYSIZE=HUGE
+INCLUDEDIR=//unix/include
+IGNORE=147
+IGNORE=62
+IGNORE=132
+IGNORE=154
+IGNORE=104
+IGNORE=100
+IGNORE=161
+IGNORE=84
+IGNORE=93
diff -rup --new-file baseline/fsf/emacs18/src/alloc.c amiga/fsf/emacs18/src/alloc.c
--- baseline/fsf/emacs18/src/alloc.c Sun Sep 20 22:45:30 1992
+++ amiga/fsf/emacs18/src/alloc.c Sat Sep 28 00:00:00 1996
@@ -76,6 +76,11 @@ Lisp_Object Vpurify_flag;
Preallocated since perhaps we can't allocate it when memory is full. */
Lisp_Object memory_exhausted_message;
+#ifdef AMIGA_DUMP
+int *pure; /* pure array is allocated at run-time */
+int puresize = DEF_PURESIZE; /* and has a variable size */
+#define PUREBEG (char *) pure
+#else /* not AMIGA_DUMP */
#ifndef HAVE_SHM
#ifdef VMS
int pure[PURESIZE / sizeof (int)]; /*no need to initialize - wasted space*/
@@ -87,6 +92,7 @@ int pure[PURESIZE / sizeof (int)] = {0,}
#define pure PURE_SEG_BITS /* Use shared memory segment */
#define PUREBEG (char *)PURE_SEG_BITS
#endif /* not HAVE_SHM */
+#endif /* not AMIGA_DUMP */
/* Index in pure at which next pure object will be allocated. */
int pureptr;
@@ -608,7 +614,7 @@ make_uninit_string (length)
XSET (val, Lisp_String,
(struct Lisp_String *) current_string_block->chars);
}
-
+
XSTRING (val)->size = length;
XSTRING (val)->data[length] = 0;
@@ -727,9 +733,13 @@ int staticidx = 0;
#ifdef __GNUC__
Lisp_Object *staticvec[NSTATICS] = {0};
#else
+#ifdef AMIGA_DUMP
+Lisp_Object *staticvec[NSTATICS]; /* Doesn't need to be pure */
+#else
char staticvec1[NSTATICS * sizeof (Lisp_Object *)] = {0};
#define staticvec ((Lisp_Object **) staticvec1)
#endif
+#endif
/* Put an entry in staticvec, pointing at the variable whose address is given */
@@ -859,12 +869,12 @@ gc-cons-threshold bytes of Lisp data si
{
mark_object (&catch->tag);
mark_object (&catch->val);
- }
+ }
for (handler = handlerlist; handler; handler = handler->next)
{
mark_object (&handler->handler);
mark_object (&handler->var);
- }
+ }
for (backlist = backtrace_list; backlist; backlist = backlist->next)
{
if (!XMARKBIT (*backlist->function))
@@ -882,7 +892,7 @@ gc-cons-threshold bytes of Lisp data si
mark_object (&backlist->args[i]);
XMARK (backlist->args[i]);
}
- }
+ }
gc_sweep ();
@@ -900,7 +910,7 @@ gc-cons-threshold bytes of Lisp data si
i = backlist->nargs - 1;
for (; i >= 0; i--)
XUNMARK (backlist->args[i]);
- }
+ }
XUNMARK (buffer_defaults.name);
XUNMARK (buffer_local_symbols.name);
@@ -936,7 +946,7 @@ clear_marks ()
{
register struct cons_block *cblk;
register int lim = cons_block_index;
-
+
for (cblk = cons_block; cblk; cblk = cblk->next)
{
register int i;
@@ -949,7 +959,7 @@ clear_marks ()
{
register struct symbol_block *sblk;
register int lim = symbol_block_index;
-
+
for (sblk = symbol_block; sblk; sblk = sblk->next)
{
register int i;
@@ -964,7 +974,7 @@ clear_marks ()
{
register struct marker_block *sblk;
register int lim = marker_block_index;
-
+
for (sblk = marker_block; sblk; sblk = sblk->next)
{
register int i;
@@ -1197,7 +1207,7 @@ gc_sweep ()
register int num_free = 0, num_used = 0;
cons_free_list = 0;
-
+
for (cblk = cons_block; cblk; cblk = cblk->next)
{
register int i;
@@ -1226,7 +1236,7 @@ gc_sweep ()
register int num_free = 0, num_used = 0;
symbol_free_list = 0;
-
+
for (sblk = symbol_block; sblk; sblk = sblk->next)
{
register int i;
@@ -1260,7 +1270,7 @@ gc_sweep ()
register int num_free = 0, num_used = 0;
marker_free_list = 0;
-
+
for (mblk = marker_block; mblk; mblk = mblk->next)
{
register int i;
@@ -1400,7 +1410,8 @@ compact_strings ()
while ((unsigned) size > STRING_BLOCK_SIZE)
{
if (size & 1) size ^= MARKBIT | 1;
- size = *(int *)size & ~MARKBIT;
+ size = *(int *)size;
+ size &= ~MARKBIT;
}
total_string_size += size;
@@ -1438,7 +1449,8 @@ compact_strings ()
if (size & 1) size ^= MARKBIT | 1;
objptr = (Lisp_Object *)size;
- size = XFASTINT (*objptr) & ~MARKBIT;
+ size = XFASTINT (*objptr);
+ size &= ~MARKBIT;
if (XMARKBIT (*objptr))
{
XSET (*objptr, Lisp_String, newaddr);
@@ -1498,7 +1510,7 @@ truncate_all_undos ()
Qt tends to return NULL, which effectively turns undo back on.
So don't call truncate_undo_list if undo_list is Qt. */
if (! EQ (nextb->undo_list, Qt))
- nextb->undo_list
+ nextb->undo_list
= truncate_undo_list (nextb->undo_list, undo_threshold,
undo_high_threshold);
nextb = nextb->next;
diff -rup --new-file baseline/fsf/emacs18/src/alloca.c amiga/fsf/emacs18/src/alloca.c
--- baseline/fsf/emacs18/src/alloca.c Sat Jul 25 14:40:32 1992
+++ amiga/fsf/emacs18/src/alloca.c Sat Sep 28 00:00:00 1996
@@ -72,7 +72,7 @@ extern pointer xmalloc();
#define STACK_DIRECTION 0 /* direction unknown */
#endif
-#if STACK_DIRECTION != 0
+#if (STACK_DIRECTION) != 0
#define STACK_DIR STACK_DIRECTION /* known at compile-time */
@@ -137,6 +137,8 @@ typedef union hdr
static header *last_alloca_header = NULL; /* -> last alloca header */
+int alloca_calling;
+
pointer
alloca (size) /* returns pointer to storage */
unsigned size; /* # bytes to allocate */
@@ -176,10 +178,12 @@ alloca (size) /* returns pointer to st
/* Allocate combined header + user data storage. */
+ alloca_calling = 1;
{
register pointer new = xmalloc (sizeof (header) + size);
/* address of header */
+ alloca_calling = 0;
((header *)new)->h.next = last_alloca_header;
((header *)new)->h.deep = depth;
diff -rup --new-file baseline/fsf/emacs18/src/amiga.h amiga/fsf/emacs18/src/amiga.h
--- baseline/fsf/emacs18/src/amiga.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,145 @@
+
+/* Prototypes for functions defined in amiga_clipboard.c */
+void syms_of_amiga_clipboard(void);
+void early_clipboard(void);
+void init_clipboard(void);
+void cleanup_clipboard(void);
+
+/* Prototypes for functions defined in amiga_dump.c */
+void map_out_data(char *fn);
+void map_in_data(int load);
+extern void *far first_fn, *far last_fn;
+
+/* Prototypes for functions defined in amiga_menu.c */
+void suspend_menus(void);
+int resume_menus(void);
+void syms_of_amiga_menu(void);
+void init_amiga_menu(void);
+void cleanup_amiga_menu(void);
+
+/* Prototypes for functions defined in amiga_processes.c */
+/* Simulation of unix processes & signals */
+int wait_for_termination(int pid);
+int wait_without_blocking(void);
+char *amiga_path(void);
+void init_amiga_processes(void);
+void cleanup_amiga_processes(void);
+
+/* Prototypes for functions defined in amiga_rexx.c */
+int check_arexx(int force, int kbd);
+void init_amiga_rexx(void);
+void cleanup_amiga_rexx(void);
+void syms_of_amiga_rexx(void);
+
+/* Prototypes for functions defined in amiga_screen.c */
+extern struct Window *emacs_win;
+void get_window_size(int *widthp, int *heightp);
+void reset_window(void);
+void force_window(void);
+void add_wbevent(struct WBArg *wbarg);
+void check_window(int force);
+void setup_intchar(char intchar);
+
+void start_count(int n);
+void stop_count(int n);
+void suspend_count(int n);
+void resume_count(int n);
+int disp_counts(void);
+
+void screen_puts(char *str, unsigned int len);
+void syms_of_amiga_screen(void);
+void init_amiga_screen(void);
+void cleanup_amiga_screen(void);
+
+/* Prototypes for functions defined in amiga_serial.c */
+void init_amiga_serial(void);
+void cleanup_amiga_serial(void);
+void check_serial(int force);
+void serial_puts(char *str, int len);
+unsigned long serial_baud_rate(void);
+
+/* Prototypes for functions defined in amiga_sysdep.c */
+extern int selecting;
+
+int set_exclusive_use(int fd);
+int sys_suspend(void);
+char *get_system_name(void);
+char *expand_path(char *path, char *buf, int len);
+int syms_of_amiga(void);
+void cleanup_amiga(void);
+void amiga_undump_reinit(void);
+void *early_xmalloc(long size);
+void *early_xrealloc(void *old, long size);
+
+/* Failure stuff */
+void wbmessage(char *msg);
+void fail(char *cause);
+void fail_nomem(void);
+void _fail_internal(char *file, int line);
+#define fail_internal() _fail_internal(__FILE__, __LINE__);
+enum exit_method { use_exit, use_xcexit, use_safe };
+extern enum exit_method amiga_fail_exit;
+
+#define MALLOC_HUNK_SIZE 92000 /* Default malloc hunk size */
+extern long malloc_hunk_size; /* Amount of memory malloc'ed by a to-be-dumped emacs */
+extern long malloc_bytes_used; /* Amount of this hunk actually used */
+extern long far pre_alloc; /* amount of memory to reserve for emacs */
+extern int puresize; /* Size of pure hunk */
+
+/* Various special values used to find the beginning & end of the text, data,
+ bss and malloc segments. */
+extern int first_data, last_data, first_bss, last_bss;
+extern void first_function(), last_function();
+extern char *malloc_hunk;
+extern int amiga_initialized; /* True once Emacs has been undumped or initialised */
+struct mem_header /* sizeof() must be multiple of 4 ! */
+{
+ struct mem_header *next, *prev;
+ long size;
+ /* Data follows */
+};
+extern struct mem_header *free_list;
+
+
+/* Prototypes for functions defined in amiga_term.c */
+int amiga_term_init(void);
+
+/* Prototypes for functions defined in amiga_tty.c */
+extern struct timeinfo *far odd_timer;
+extern unsigned long odd_sig;
+int setpgrp_of_tty(int pid);
+int init_sigio(void);
+int reset_sigio(void);
+int request_sigio(void);
+int unrequest_sigio(void);
+int tabs_safe_p(void);
+int get_screen_size(int *widthp, int *heightp);
+int init_baud_rate(void);
+void check_intuition(void);
+#define AMIGASEQ 256 /* When passed to enque, insert the Amiga sequence introducer
+ C-x C-^ */
+void enque(unsigned int c, int meta);
+int init_sys_modes(void);
+int reset_sys_modes(void);
+void amiga_consume_input(void);
+int discard_tty_input(void);
+int emacs_fflush(struct __iobuf *f);
+void emacs_putchar(int c);
+void emacs_output(char *str, int size);
+void emacs_fwrite(char *str, unsigned int nblocks, unsigned int len, FILE *f);
+void syms_of_amiga_tty(void);
+void init_amiga_tty(void);
+void cleanup_amiga_tty(void);
+void early_amiga_tty(void);
+void amiga_term_open(void);
+/* Signal mask used to detect available keyboard input.
+ Must be set by amiga_serial or amiga_screen */
+extern unsigned long inputsig;
+
+/* Prototypes for functions defined in amiga_unix.c */
+void MemCleanup(void);
+char *malloc(int size);
+int free(void *p);
+char *calloc(long n, long size);
+char *realloc(char *p, long size);
+void emacs_malloc_init(void);
diff -rup --new-file baseline/fsf/emacs18/src/amiga_clipboard.c amiga/fsf/emacs18/src/amiga_clipboard.c
--- baseline/fsf/emacs18/src/amiga_clipboard.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_clipboard.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,225 @@
+#include "config.h"
+#undef NULL
+#include "lisp.h"
+#include "termchar.h"
+#include "amiga.h"
+
+#include <stdio.h>
+#include <internal/devices.h>
+
+#undef LONGBITS
+
+#include <exec/types.h>
+#include <exec/io.h>
+#include <devices/clipboard.h>
+#include <libraries/iffparse.h>
+#include <utility/hooks.h>
+
+#include <proto/exec.h>
+#include <proto/iffparse.h>
+
+#define ID_FTXT MAKE_ID('F','T','X','T')
+#define ID_CHRS MAKE_ID('C','H','R','S')
+
+/*
+ * Text error messages for possible IFFERR_#? returns from various
+ * IFF routines. To get the index into this array, take your IFFERR code,
+ * negate it, and subtract one.
+ * idx = -error - 1;
+ */
+static char *far ifferrormsgs[] = {
+ "End of file (not an error).",
+ "End of context (not an error).",
+ "No lexical scope.",
+ "Insufficient memory.",
+ "Stream read error.",
+ "Stream write error.",
+ "Stream seek error.",
+ "File is corrupt.",
+ "IFF syntax error.",
+ "Not an IFF file.",
+ "Required call-back hook missing.",
+ "Return to client. You should never see this."
+};
+
+Lisp_Object amiga_new_clip;
+static struct IFFHandle *far iff;
+struct Library *IFFParseBase;
+
+static struct IOClipReq *far ClipRequest;
+static struct Hook cliphook;
+
+/* added __interrupt flag this disables stack checking for this function
+ * so we can compile with stack checking on. -ch3/19/93. */
+static ULONG __saveds __asm __interrupt
+clip_change( register __a0 struct Hook *hook,
+ register __a2 VOID *object,
+ register __a1 ULONG *message )
+{
+ amiga_new_clip = 1;
+ return 0;
+}
+
+static Lisp_Object clip_unwind(Lisp_Object dummy)
+{
+ CloseIFF (iff);
+ CloseClipboard ((struct ClipboardHandle *) iff->iff_Stream);
+
+ return Qnil;
+}
+
+static int clip_protect(void)
+{
+ int count = specpdl_ptr - specpdl;
+
+ record_unwind_protect(clip_unwind, Qnil);
+
+ return count;
+}
+
+static long clip_check(long err)
+{
+ if(err) error ("Clipboard IO failed, error %ld: %s\n",
+ err, ifferrormsgs[-err - 1]);
+ return err;
+}
+
+
+static void cut(char *str, int size)
+{
+ int count;
+
+ if (!(iff->iff_Stream = (ULONG) OpenClipboard (0)))
+ error ("Clipboard open failed.");
+
+ count = clip_protect();
+
+ /* Open clipbaord */
+ InitIFFasClip (iff);
+ clip_check(OpenIFF (iff, IFFF_WRITE));
+
+ /* Write data */
+ clip_check(PushChunk(iff, ID_FTXT, ID_FORM, IFFSIZE_UNKNOWN));
+ clip_check(PushChunk(iff, 0, ID_CHRS, IFFSIZE_UNKNOWN));
+ if (WriteChunkBytes(iff, str, size) != size) clip_check(IFFERR_WRITE);
+ clip_check(PopChunk(iff));
+ clip_check(PopChunk(iff));
+
+ /* & close */
+ unbind_to (count);
+}
+
+DEFUN ("amiga-cut", Famiga_cut, Samiga_cut,
+ 1, 1, 0,
+ "Copy string into Amiga clipboard.")
+ (arg)
+ Lisp_Object arg;
+{
+ struct Lisp_String *p;
+
+ CHECK_STRING (arg, 0);
+
+ p = XSTRING (arg);
+ cut(p->data, p->size);
+
+ return Qnil;
+}
+
+DEFUN ("amiga-paste", Famiga_paste, Samiga_paste,
+ 0, 0, 0,
+ "Returns text currently in the Amiga clipboard, or NIL if there is none.")
+ ()
+{
+ long err = 0;
+ Lisp_Object result = Qnil;
+ struct ContextNode *cn;
+ int count;
+
+ if (!(iff->iff_Stream = (ULONG) OpenClipboard (0)))
+ error ("Clipboard open failed.");
+
+ count = clip_protect();
+
+ /* Open clipbaord */
+ InitIFFasClip (iff);
+ clip_check(OpenIFF (iff, IFFF_READ));
+ clip_check(StopChunk(iff, ID_FTXT, ID_CHRS));
+
+ /* Find the first FTXT CHRS chunks */
+ while (result == Qnil)
+ {
+ long err = ParseIFF(iff, IFFPARSE_SCAN);
+
+ if (err == IFFERR_EOC) continue; /* enter next context */
+ else if (err == IFFERR_EOF) break;
+ else clip_check(err);
+
+ /* We only asked to stop at FTXT CHRS chunks
+ * If no error we've hit a stop chunk
+ * Read the CHRS chunk data
+ */
+ cn = CurrentChunk(iff);
+
+ if ((cn) && (cn->cn_Type == ID_FTXT) && (cn->cn_ID == ID_CHRS))
+ {
+ int size = cn->cn_Size, rlen;
+
+ result = make_string("", size);
+
+ if ((rlen = ReadChunkBytes(iff, XSTRING (result)->data, size)) != size)
+ if (rlen < 0) clip_check(rlen);
+ else clip_check(IFFERR_EOC);
+ }
+ }
+ unbind_to (count);
+
+ return result;
+}
+
+void syms_of_amiga_clipboard(void)
+{
+ DEFVAR_BOOL ("amiga-new-clip", &amiga_new_clip,
+ "Set to t every time a new clip is put in the Amiga clipboard");
+ amiga_new_clip = 0;
+
+ defsubr (&Samiga_cut);
+ defsubr (&Samiga_paste);
+}
+
+void early_clipboard(void)
+{
+ IFFParseBase = 0;
+}
+
+void init_clipboard(void)
+{
+ /* Initialise IFF for clipboard */
+ if (!(IFFParseBase = OpenLibrary("iffparse.library", 0)))
+ _fail("iffparse.library is required");
+ if (!(iff = AllocIFF())) no_memory();
+
+ ClipRequest = (struct IOClipReq *)
+ _device_open("clipboard.device", 0L, 0L, 0L, 0, sizeof(struct IOClipReq));
+ if (!ClipRequest) _fail("clipboard.device missing !?");
+
+ cliphook.h_Entry = (ULONG (*)())clip_change;
+ ClipRequest->io_Command = CBD_CHANGEHOOK;
+ ClipRequest->io_Length = 1; /* install */
+ ClipRequest->io_Data = (APTR)&cliphook;
+ DoIO((struct IORequest *)ClipRequest);
+}
+
+void cleanup_clipboard(void)
+{
+ if (ClipRequest)
+ {
+ cliphook.h_Entry = (ULONG (*)())clip_change;
+ ClipRequest->io_Command = CBD_CHANGEHOOK;
+ ClipRequest->io_Length = 0; /* remove */
+ ClipRequest->io_Data = (APTR)&cliphook;
+ DoIO((struct IORequest *)ClipRequest);
+ }
+ if (iff) FreeIFF(iff);
+ if (IFFParseBase) CloseLibrary(IFFParseBase);
+ _device_close((struct IORequest *)ClipRequest);
+}
diff -rup --new-file baseline/fsf/emacs18/src/amiga_data.c amiga/fsf/emacs18/src/amiga_data.c
--- baseline/fsf/emacs18/src/amiga_data.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_data.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1 @@
+/* Declarations of data that should not be squashed by the dump routine */
diff -rup --new-file baseline/fsf/emacs18/src/amiga_dump.c amiga/fsf/emacs18/src/amiga_dump.c
--- baseline/fsf/emacs18/src/amiga_dump.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_dump.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,721 @@
+#include <exec/types.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <assert.h>
+#include <proto/dos.h>
+#include <internal/messages.h>
+#include "config.h"
+#include "lisp.h"
+#include "buffer.h"
+#include "regex.h"
+#include "amiga.h"
+#include "dispextern.h"
+#include "termchar.h"
+
+#define RANGE(ptr, s, e) ((char *)ptr >= (char *)s && (char *)ptr < (char *)e)
+#define HUNK_POS (VALBITS - 3)
+#define HUNK_MASK (7 << HUNK_POS)
+#define HUNK_CODE (0 << HUNK_POS)
+#define HUNK_DATA (1 << HUNK_POS)
+#define HUNK_BSS (2 << HUNK_POS)
+#define HUNK_MALLOC (3 << HUNK_POS)
+#define HUNK_PURE (4 << HUNK_POS)
+#define ARRAY_MARK_FLAG ((MARKBIT >> 1) & ~MARKBIT)
+
+void *far first_fn = first_function, *far last_fn = last_function;
+
+extern int *pure, puresize;
+extern struct gcpro *gcprolist;
+
+extern Lisp_Object *staticvec[];
+extern int staticidx;
+extern struct cons_block *cons_block;
+extern struct Lisp_Cons *cons_free_list;
+extern struct Lisp_Vector *all_vectors;
+extern struct symbol_block *symbol_block;
+extern struct Lisp_Symbol *symbol_free_list;
+extern struct marker_block *marker_block;
+extern struct Lisp_Marker *marker_free_list;
+
+struct string_block_head
+ {
+ struct string_block_head *next, *prev;
+ int pos;
+ };
+extern struct string_block_head *current_string_block;
+extern struct string_block_head *first_string_block;
+extern struct string_block_head *large_string_blocks;
+extern char *kbd_macro_buffer, *read_buffer, *chars_wasted, *copybuf;
+extern struct minibuf_save_data *minibuf_save_vector;
+extern struct re_pattern_buffer searchbuf;
+extern int *ILcost, *DLcost, *ILncost, *DLncost;
+extern Lisp_Object MouseMap, global_map, Vglobal_map, Vesc_map, Vctl_x_map;
+extern Lisp_Object Qvariable_documentation, selected_window;
+
+extern char *callint_argfuns[];
+
+static void *dump_malloc(int size)
+{
+ void *new = malloc(size);
+
+ if (!new) no_memory();
+
+ return new;
+}
+
+static void bailout(char *fn)
+{
+ if (fn) _message("%s isn't a dump file for this version of Emacs, aborting", fn);
+ else _message("Dump file isn't for this version of Emacs, aborting");
+
+ /* We are in deep trouble, as all our variables are potentially corrupt */
+ /* Therefore, no cleanup is possible */
+ /* Remove cleanup routines */
+ onexit(0);
+ /* However, the library & the memory allocation should be ok, so
+ we can exit reasonably */
+ _fail("Some system resources may have been lost");
+}
+
+static void *hunk_pointer(void *ptr)
+{
+ if (!ptr) return ptr;
+
+ if (RANGE(ptr, first_fn, last_fn))
+ return (void *)(HUNK_CODE | (char *)ptr - (char *)first_fn);
+ else if (RANGE(ptr, &first_data, &last_data))
+ return (void *)(HUNK_DATA | (char *)ptr - (char *)&first_data);
+ else if (RANGE(ptr, &first_bss, &last_bss))
+ return (void *)(HUNK_BSS | (char *)ptr - (char *)&first_bss);
+ else if (RANGE(ptr, malloc_hunk, malloc_hunk + malloc_hunk_size))
+ return (void *)(HUNK_MALLOC | (char *)ptr - malloc_hunk);
+ else if (RANGE(ptr, pure, (char *)pure + puresize))
+ return (void *)(HUNK_PURE | (char *)ptr - (char *)pure);
+ else bailout(0);
+}
+
+static Lisp_Object hunk_lispptr(Lisp_Object *objptr, Lisp_Object val)
+{
+ int type = val & ~VALMASK;
+ void *ptr = (void *)XPNTR(val);
+
+ if (RANGE(ptr, first_fn, last_fn))
+ return type | HUNK_CODE | (char *)ptr - (char *)first_fn;
+ else if (RANGE(ptr, &first_data, &last_data))
+ return type | HUNK_DATA | (char *)ptr - (char *)&first_data;
+ else if (RANGE(ptr, &first_bss, &last_bss))
+ return type | HUNK_BSS | (char *)ptr - (char *)&first_bss;
+ else if (RANGE(ptr, pure, (char *)pure + puresize))
+ return type | HUNK_PURE | (char *)ptr - (char *)pure;
+ else if (RANGE(ptr, malloc_hunk, malloc_hunk + malloc_hunk_size))
+ return type | HUNK_MALLOC | (char *)ptr - malloc_hunk;
+ else bailout(0);
+}
+
+static void patch_pointers ();
+
+static void patch_buffer (buf)
+ Lisp_Object buf;
+{
+ Lisp_Object tem;
+ register struct buffer *buffer = XBUFFER (buf);
+ register Lisp_Object *ptr;
+
+ buffer->text.beg = hunk_pointer (buffer->text.beg);
+ patch_pointers (&buffer->markers);
+
+ /* This is the buffer's markbit */
+ patch_pointers (&buffer->name);
+ XMARK (buffer->name);
+
+ for (ptr = &buffer->name + 1;
+ (char *)ptr < (char *)buffer + sizeof (struct buffer);
+ ptr++)
+ patch_pointers (ptr);
+}
+
+static void patch_pointers (objptr)
+ Lisp_Object *objptr;
+{
+ register Lisp_Object obj;
+
+ obj = *objptr;
+ XUNMARK (obj);
+
+
+ loop:
+
+ switch (XGCTYPE (obj))
+ {
+ case Lisp_String:
+ *objptr = hunk_lispptr(objptr, *objptr);
+ break;
+
+ case Lisp_Vector:
+ case Lisp_Window:
+ case Lisp_Process:
+ case Lisp_Window_Configuration:
+ *objptr = hunk_lispptr(objptr, *objptr);
+ {
+ register struct Lisp_Vector *ptr = XVECTOR (obj);
+ register int size = ptr->size;
+ register int i;
+
+ if (size & ARRAY_MARK_FLAG) break; /* Already marked */
+ ptr->size |= ARRAY_MARK_FLAG; /* Else mark it */
+ for (i = 0; i < size; i++) /* and then mark its elements */
+ patch_pointers (&ptr->contents[i]);
+ }
+ break;
+
+ case Lisp_Symbol:
+ *objptr = hunk_lispptr(objptr, *objptr);
+ {
+ register struct Lisp_Symbol *ptr = XSYMBOL (obj);
+ struct Lisp_Symbol *ptrx;
+
+ if (XMARKBIT (ptr->plist)) break;
+ XMARK (ptr->plist);
+ XSETTYPE (*(Lisp_Object *) &ptr->name, Lisp_String);
+ patch_pointers (&ptr->name);
+ patch_pointers ((Lisp_Object *) &ptr->value);
+ patch_pointers (&ptr->function);
+ patch_pointers (&ptr->plist);
+ objptr = (Lisp_Object *)&ptr->next;
+ ptr = ptr->next;
+ if (ptr)
+ {
+ ptrx = ptr; /* Use pf ptrx avoids compiler bug on Sun */
+ XSETSYMBOL (obj, ptrx);
+ goto loop;
+ }
+ }
+ break;
+
+ case Lisp_Marker: {
+ struct Lisp_Marker *ptr = XMARKER (obj);
+
+ *objptr = hunk_lispptr(objptr, *objptr);
+ if (XMARKBIT (ptr->chain)) break;
+ XMARK (ptr->chain);
+ ptr->buffer = hunk_pointer (ptr->buffer);
+ patch_pointers (&ptr->chain);
+ break;
+ }
+
+ case Lisp_Cons:
+ case Lisp_Buffer_Local_Value:
+ case Lisp_Some_Buffer_Local_Value:
+ *objptr = hunk_lispptr(objptr, *objptr);
+ {
+ register struct Lisp_Cons *ptr = XCONS (obj);
+ if (XMARKBIT (ptr->car)) break;
+ XMARK (ptr->car);
+ patch_pointers (&ptr->car);
+ objptr = &ptr->cdr;
+ obj = ptr->cdr;
+ goto loop;
+ }
+
+ case Lisp_Buffer:
+ *objptr = hunk_lispptr(objptr, *objptr);
+ if (!XMARKBIT (XBUFFER (obj)->name))
+ patch_buffer (obj);
+ break;
+
+ case Lisp_Subr: {
+ struct Lisp_Subr *subr = XSUBR(obj);
+
+ *objptr = hunk_lispptr(objptr, *objptr);
+ if (subr->min_args & 0x8000) break;
+ subr->min_args |= 0x8000;
+ subr->function = hunk_pointer(subr->function);
+ subr->symbol_name = hunk_pointer(subr->symbol_name);
+ subr->prompt = hunk_pointer(subr->prompt);
+ if ((long)subr->doc >= 0) /* Make sure that not a doc offset */
+ subr->doc = hunk_pointer(subr->doc);
+ break;
+ }
+
+ case Lisp_Int:
+ case Lisp_Void:
+ case Lisp_Buffer_Objfwd: break;
+
+ case Lisp_Intfwd:
+ case Lisp_Boolfwd:
+ case Lisp_Objfwd:
+ case Lisp_Internal_Stream:
+ *objptr = hunk_lispptr(objptr, *objptr);
+ /* Don't bother with Lisp_Buffer_Objfwd,
+ since all markable slots in current buffer marked anyway. */
+ /* Don't need to do Lisp_Objfwd, since the places they point
+ are protected with staticpro. */
+ break;
+
+ default:
+ abort ();
+ }
+}
+
+static void patch_chain(void **ptr, int offset)
+{
+ while (*ptr)
+ {
+ void **next = (void **)((char *)*ptr + offset);
+
+ *ptr = hunk_pointer(*ptr);
+ ptr = next;
+ }
+}
+
+static void patch(void)
+{
+ int i;
+ struct string_block_head *sptr;
+ struct buffer *bptr;
+ struct mem_header *mem;
+
+ for (i = 0; i < staticidx; i++)
+ {
+ if (!XMARKBIT(*staticvec[i]))
+ {
+ patch_pointers(staticvec[i]);
+ XMARK(*staticvec[i]);
+ }
+ staticvec[i] = hunk_pointer(staticvec[i]);
+ }
+
+ /* Patch all the pointers normally used before a dump ! */
+ patch_chain((void **)&cons_block, 0);
+ patch_chain((void **)&cons_free_list, 0);
+
+ patch_chain((void **)&all_vectors, 4);
+
+ patch_chain((void **)&symbol_block, 0);
+ patch_chain((void **)&symbol_free_list, 4);
+
+ patch_chain((void **)&marker_block, 0);
+ patch_chain((void **)&marker_free_list, 4);
+
+ /* Strings are lots of fun */
+ patch_chain((void **)&large_string_blocks, 0);
+ sptr = first_string_block;
+ while (sptr)
+ {
+ struct string_block *next = sptr->next;
+
+ if (sptr->next) sptr->next = hunk_pointer(sptr->next);
+ if (sptr->prev) sptr->prev = hunk_pointer(sptr->prev);
+ sptr = next;
+ }
+ first_string_block = hunk_pointer(first_string_block);
+ current_string_block = hunk_pointer(current_string_block);
+
+ /* More fun with buffers */
+ bptr = all_buffers;
+ if (bptr)
+ {
+ while (bptr->next)
+ {
+ struct buffer *next = bptr->next;
+
+ bptr->next = hunk_pointer(bptr->next);
+ bptr = next;
+ }
+ }
+ all_buffers = hunk_pointer(all_buffers);
+ current_buffer = hunk_pointer(current_buffer);
+
+ kbd_macro_buffer = hunk_pointer(kbd_macro_buffer);
+ minibuf_save_vector = hunk_pointer(minibuf_save_vector);
+ searchbuf.buffer = hunk_pointer(searchbuf.buffer);
+ searchbuf.fastmap = hunk_pointer(searchbuf.fastmap);
+ specpdl = hunk_pointer(specpdl);
+ read_buffer = hunk_pointer(read_buffer);
+
+ MouseMap = hunk_lispptr(&MouseMap, MouseMap);
+ global_map = hunk_lispptr(&global_map, global_map);
+ Vglobal_map = hunk_lispptr(&Vglobal_map, Vglobal_map);
+ Vesc_map = hunk_lispptr(&Vesc_map, Vesc_map);
+ Vctl_x_map = hunk_lispptr(&Vctl_x_map, Vctl_x_map);
+
+ Qvariable_documentation = hunk_lispptr(&Qvariable_documentation, Qvariable_documentation);
+ selected_window = hunk_lispptr(&selected_window, selected_window);
+
+ mem = free_list;
+ free_list = hunk_pointer(free_list);
+ while (mem)
+ {
+ struct mem_header *next = mem->next;
+
+ mem->prev = hunk_pointer(mem->prev);
+ mem->next = hunk_pointer(mem->next);
+ mem = next;
+ }
+
+ for (i = 0; i <= 4; i++)
+ callint_argfuns[i] = hunk_pointer(callint_argfuns[i]);
+}
+
+static dump(char *fn)
+{
+ BPTR fd;
+ long size;
+
+ fd = Open(fn, MODE_NEWFILE);
+ if (!fd)
+ {
+ static void unpatch();
+
+ unpatch();
+ _fail("emacs hasn't been dumped (%s missing)", fn);
+ }
+
+ Write(fd, (char *)&puresize, sizeof puresize);
+ Write(fd, (char *)&malloc_hunk_size, sizeof malloc_hunk_size);
+ Write(fd, (char *)&first_data, (char *)&last_data - (char *)&first_data);
+ Write(fd, (char *)&first_bss, (char *)&last_bss - (char *)&first_bss);
+ Write(fd, (char *)pure, puresize);
+ Write(fd, (char *)malloc_hunk, malloc_hunk_size);
+ Write(fd, (char *)&staticidx, sizeof staticidx);
+ Write(fd, (char *)staticvec, staticidx * sizeof(Lisp_Object *));
+ size = (char *)last_fn - (char *)first_fn;
+ Write(fd, (char *)&size, sizeof size);
+
+ Close(fd);
+}
+
+static void *make_pointer(void *ptr)
+{
+ int hunk = (long)ptr & HUNK_MASK;
+ int offset = (long)ptr & (VALMASK & ~HUNK_MASK);
+
+ if (!ptr) return 0;
+
+ if (hunk == HUNK_CODE) return (char *)first_fn + offset;
+ if (hunk == HUNK_DATA) return (char *)&first_data + offset;
+ if (hunk == HUNK_BSS) return (char *)&first_bss + offset;
+ if (hunk == HUNK_PURE) return (char *)pure + offset;
+ if (hunk == HUNK_MALLOC) return malloc_hunk + offset;
+ assert(0);
+}
+
+static Lisp_Object make_lispptr(Lisp_Object *objptr, Lisp_Object obj)
+{
+ long val = XUINT(obj);
+ int hunk = val & HUNK_MASK;
+ int offset = val & ~HUNK_MASK;
+ char *ptr;
+
+ if (hunk == HUNK_CODE) ptr = (char *)first_fn + offset;
+ else if (hunk == HUNK_DATA) ptr = (char *)&first_data + offset;
+ else if (hunk == HUNK_BSS) ptr = (char *)&first_bss + offset;
+ else if (hunk == HUNK_PURE) ptr = (char *)pure + offset;
+ else if (hunk == HUNK_MALLOC) ptr = malloc_hunk + offset;
+ else assert(0);
+
+ XSETPNTR(obj, (long)ptr);
+ return obj;
+}
+
+static void unpatch_pointers ();
+
+static void unpatch_buffer (buf)
+ Lisp_Object buf;
+{
+ Lisp_Object tem;
+ register struct buffer *buffer = XBUFFER (buf);
+ register Lisp_Object *ptr;
+
+ buffer->text.beg = make_pointer (buffer->text.beg);
+ unpatch_pointers (&buffer->markers);
+
+ /* This is the buffer's markbit */
+ XUNMARK (buffer->name);
+ unpatch_pointers (&buffer->name);
+
+ for (ptr = &buffer->name + 1;
+ (char *)ptr < (char *)buffer + sizeof (struct buffer);
+ ptr++)
+ unpatch_pointers (ptr);
+}
+
+static void unpatch_pointers (objptr)
+ Lisp_Object *objptr;
+{
+ register Lisp_Object obj;
+
+ obj = *objptr;
+ XUNMARK (obj);
+
+
+ loop:
+
+ switch (XGCTYPE (obj))
+ {
+ case Lisp_String:
+ *objptr = make_lispptr(objptr, *objptr);
+ break;
+
+ case Lisp_Vector:
+ case Lisp_Window:
+ case Lisp_Process:
+ case Lisp_Window_Configuration:
+ obj = *objptr = make_lispptr(objptr, *objptr);
+ {
+ register struct Lisp_Vector *ptr = XVECTOR (obj);
+ register int size;
+ register int i;
+
+ if (!(ptr->size & ARRAY_MARK_FLAG)) break; /* Already unmarked */
+ size = ptr->size &= ~ARRAY_MARK_FLAG; /* Else unmark it */
+ for (i = 0; i < size; i++) /* and then unmark its elements */
+ unpatch_pointers (&ptr->contents[i]);
+ }
+ break;
+
+ case Lisp_Symbol:
+ obj = *objptr = make_lispptr(objptr, *objptr);
+ {
+ register struct Lisp_Symbol *ptr = XSYMBOL (obj);
+ struct Lisp_Symbol *ptrx;
+
+ if (!XMARKBIT (ptr->plist)) break;
+ XUNMARK (ptr->plist);
+ unpatch_pointers (&ptr->name);
+ ptr->name = XSTRING (*(Lisp_Object *)&ptr->name);
+ unpatch_pointers ((Lisp_Object *) &ptr->value);
+ unpatch_pointers (&ptr->function);
+ unpatch_pointers (&ptr->plist);
+ objptr = (Lisp_Object *)&ptr->next;
+ ptr = ptr->next;
+ if (ptr)
+ {
+ ptrx = ptr; /* Use pf ptrx avoids compiler bug on Sun */
+ XSET (obj, Lisp_Symbol, ptrx);
+ goto loop;
+ }
+ }
+ break;
+
+ case Lisp_Marker: {
+ struct Lisp_Marker *ptr;
+
+ obj = *objptr = make_lispptr(objptr, *objptr);
+ ptr = XMARKER (obj);
+ if (!XMARKBIT (ptr->chain)) break;
+ XUNMARK (ptr->chain);
+ ptr->buffer = make_pointer (ptr->buffer);
+ unpatch_pointers (&ptr->chain);
+ break;
+ }
+
+ case Lisp_Cons:
+ case Lisp_Buffer_Local_Value:
+ case Lisp_Some_Buffer_Local_Value:
+ obj = *objptr = make_lispptr(objptr, *objptr);
+ {
+ register struct Lisp_Cons *ptr = XCONS (obj);
+ if (!XMARKBIT (ptr->car)) break;
+ XUNMARK (ptr->car);
+ unpatch_pointers (&ptr->car);
+ objptr = &ptr->cdr;
+ obj = ptr->cdr;
+ goto loop;
+ }
+
+ case Lisp_Buffer:
+ obj = *objptr = make_lispptr(objptr, *objptr);
+ if (XMARKBIT (XBUFFER (obj)->name))
+ unpatch_buffer (obj);
+ break;
+
+ case Lisp_Subr: {
+ struct Lisp_Subr *subr;
+
+ obj = *objptr = make_lispptr(objptr, *objptr);
+ subr = XSUBR(obj);
+ if (!(subr->min_args & 0x8000)) break;
+ subr->min_args &= ~0x8000;
+ subr->function = make_pointer(subr->function);
+ subr->symbol_name = make_pointer(subr->symbol_name);
+ subr->prompt = make_pointer(subr->prompt);
+ if ((long)subr->doc >= 0) /* Make sure that not a doc offset */
+ subr->doc = make_pointer(subr->doc);
+ break;
+ }
+
+ case Lisp_Int:
+ case Lisp_Void:
+ case Lisp_Buffer_Objfwd: break;
+
+ case Lisp_Intfwd:
+ case Lisp_Boolfwd:
+ case Lisp_Objfwd:
+ case Lisp_Internal_Stream:
+ *objptr = make_lispptr(objptr, *objptr);
+ /* Don't bother with Lisp_Buffer_Objfwd,
+ since all markable slots in current buffer marked anyway. */
+ /* Don't need to do Lisp_Objfwd, since the places they point
+ are protected with staticpro. */
+ break;
+
+ default:
+ abort ();
+ }
+}
+
+static void unpatch_chain(void **ptr, int offset)
+{
+ while (*ptr)
+ {
+ *ptr = make_pointer(*ptr);
+ ptr = (void **)((char *)*ptr + offset);
+ }
+}
+
+/* Reconstructs the addresses that were patched */
+static void unpatch(void)
+{
+ int fd, i;
+ struct string_block_head *sptr;
+ struct buffer *bptr;
+ struct mem_header *mem;
+
+ for (i = 0; i < staticidx; i++)
+ {
+ staticvec[i] = make_pointer(staticvec[i]);
+ if (XMARKBIT(*staticvec[i]))
+ {
+ XUNMARK(*staticvec[i]);
+ unpatch_pointers(staticvec[i]);
+ }
+ }
+
+ /* Unpatch all the pointers normally used before a dump ! */
+ unpatch_chain((void **)&cons_block, 0);
+ unpatch_chain((void **)&cons_free_list, 0);
+
+ unpatch_chain((void **)&all_vectors, 4);
+
+ unpatch_chain((void **)&symbol_block, 0);
+ unpatch_chain((void **)&symbol_free_list, 4);
+
+ unpatch_chain((void **)&marker_block, 0);
+ unpatch_chain((void **)&marker_free_list, 4);
+
+ /* Strings are lots of fun */
+ unpatch_chain((void **)&large_string_blocks, 0);
+ sptr = first_string_block = make_pointer(first_string_block);
+ current_string_block = make_pointer(current_string_block);
+ while (sptr)
+ {
+ if (sptr->next) sptr->next = make_pointer(sptr->next);
+ if (sptr->prev) sptr->prev = make_pointer(sptr->prev);
+ sptr = sptr->next;
+ }
+
+ /* More fun with buffers */
+ bptr = all_buffers = make_pointer(all_buffers);
+ if (bptr)
+ {
+ while (bptr->next)
+ {
+ bptr->next = make_pointer(bptr->next);
+ bptr = bptr->next;
+ }
+ }
+ current_buffer = make_pointer(current_buffer);
+
+ kbd_macro_buffer = make_pointer(kbd_macro_buffer);
+ minibuf_save_vector = make_pointer(minibuf_save_vector);
+ searchbuf.buffer = make_pointer(searchbuf.buffer);
+ searchbuf.fastmap = make_pointer(searchbuf.fastmap);
+ specpdl = make_pointer(specpdl);
+ read_buffer = make_pointer(read_buffer);
+
+ MouseMap = make_lispptr(&MouseMap, MouseMap);
+ global_map = make_lispptr(&global_map, global_map);
+ Vglobal_map = make_lispptr(&Vglobal_map, Vglobal_map);
+ Vesc_map = make_lispptr(&Vesc_map, Vesc_map);
+ Vctl_x_map = make_lispptr(&Vctl_x_map, Vctl_x_map);
+
+ Qvariable_documentation = make_lispptr(&Qvariable_documentation, Qvariable_documentation);
+ selected_window = make_lispptr(&selected_window, selected_window);
+
+ free_list = make_pointer(free_list);
+ mem = free_list;
+ while (mem)
+ {
+ mem->prev = make_pointer(mem->prev);
+ mem->next = make_pointer(mem->next);
+ mem = mem->next;
+ }
+
+ for (i = 0; i <= 4; i++)
+ callint_argfuns[i] = make_pointer(callint_argfuns[i]);
+}
+
+static undump(char *fn)
+{
+ BPTR fd;
+ long code_size;
+ char *_malloc_hunk;
+ int *_pure;
+ /*extern struct Library *FifoBase;
+ struct Library *_FifoBase = FifoBase;*/
+
+ fd = Open(fn, MODE_OLDFILE);
+ if (!fd) return 0;
+
+ Read(fd, (char *)&puresize, sizeof puresize);
+ Read(fd, (char *)&malloc_hunk_size, sizeof malloc_hunk_size);
+ _pure = dump_malloc(puresize);
+ _malloc_hunk = dump_malloc(malloc_hunk_size + pre_alloc);
+ Read(fd, (char *)&first_data, (char *)&last_data - (char *)&first_data);
+ Read(fd, (char *)&first_bss, (char *)&last_bss - (char *)&first_bss);
+ Read(fd, (char *)_pure, puresize);
+ Read(fd, (char *)_malloc_hunk, malloc_hunk_size);
+ Read(fd, (char *)&staticidx, sizeof staticidx);
+ Read(fd, (char *)staticvec, staticidx * sizeof(Lisp_Object *));
+ /*FifoBase = _FifoBase;*/
+ if (Read(fd, (char *)&code_size, sizeof code_size) != sizeof code_size ||
+ code_size != (char *)last_fn - (char *)first_fn)
+ bailout(fn);
+
+ Close(fd);
+ malloc_hunk = _malloc_hunk;
+ pure = _pure;
+ return 1;
+}
+
+void map_out_data(char *fn)
+{
+ if (amiga_initialized) error("You can only dump once !");
+ Fgarbage_collect();
+
+ patch();
+ dump(fn);
+ unpatch();
+ amiga_initialized = 1;
+}
+
+void map_in_data(int load)
+{
+ if (load && undump("GNUEmacs:etc/EMACS-DATA"))
+ {
+ unpatch();
+ current_screen = new_screen = temp_screen = 0;
+ message_buf = 0;
+ chars_wasted = copybuf = 0;
+ DC_ICcost = 0;
+ ILcost = DLcost = ILncost = DLncost = 0;
+ initialized = amiga_initialized = 1;
+ }
+ else
+ {
+ malloc_hunk = dump_malloc(malloc_hunk_size + pre_alloc);
+ pure = dump_malloc(puresize);
+ }
+ amiga_undump_reinit();
+}
diff -rup --new-file baseline/fsf/emacs18/src/amiga_malloc.c amiga/fsf/emacs18/src/amiga_malloc.c
--- baseline/fsf/emacs18/src/amiga_malloc.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_malloc.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,321 @@
+/* Emulation of some unix functions for emacs.
+Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY. No author or distributor
+accepts responsibility to anyone for the consequences of using it
+or for whether it serves any particular purpose or works at all,
+unless he says so in writing. Refer to the GNU Emacs General Public
+License for full details.
+
+Everyone is granted permission to copy, modify and redistribute
+GNU Emacs, but only under the conditions described in the
+GNU Emacs General Public License. A copy of this license is
+supposed to have been given to you along with GNU Emacs so you
+can know your rights and responsibilities. It should be in a
+file named COPYING. Among other things, the copyright notice
+and this notice must be preserved on all copies. */
+
+#include <exec/types.h>
+#include <exec/memory.h>
+#include <proto/exec.h>
+
+#undef LONGBITS
+#undef NULL
+#include "config.h"
+#include "lisp.h"
+#include "amiga.h"
+
+/* Memory stuff */
+long far DataSegBits;
+static int DataSegFound;
+static struct mem_header *far current;
+struct mem_header *free_list;
+extern int alloca_calling;
+extern int *pure;
+long far pre_alloc; /* amount of memory to reserve for emacs */
+char *malloc_hunk;
+long malloc_hunk_size = MALLOC_HUNK_SIZE; /* Amount of memory malloc'ed by a
+ to-be-dumped emacs */
+long malloc_bytes_used; /* Amount of this hunk actually used */
+static int early_malloc = TRUE; /* Before we undump, we want system allocations */
+
+#define ADDR_OK(x) (((long)x & ~VALMASK) == DataSegBits)
+
+/* Memory allocation code */
+/* ---------------------- */
+
+static void *alloc_sys(long memsize)
+/* Effect: Allocate from AmigaOS (via AllocMem). */
+{
+ /* Allocation rounded up to multiple of 4 */
+ long size = ((memsize + 3) & ~3) + sizeof(struct mem_header);
+ struct mem_header *mem;
+
+ if (!DataSegFound)
+ {
+ /* Find page containing Pure data. All data used by emacs must be
+ on the same page (As a page is 2^26 bytes, this shouldn't be too
+ unlikely). */
+ DataSegBits = (long)&first_data & ~VALMASK;
+ if (!(ADDR_OK(first_fn) && ADDR_OK(last_fn) &&
+ ADDR_OK(&first_data) && ADDR_OK(&last_data) &&
+ ADDR_OK(&first_bss) && ADDR_OK(&last_bss)))
+ _fail("I can't handle your memory configuration");
+ DataSegFound = TRUE;
+ }
+
+ mem = AllocMem(size, 0);
+ if (!mem) return 0;
+ /* All memory *must* be allocated on the same page ! */
+ if (!ADDR_OK(mem))
+ {
+ FreeMem(mem, size);
+ return 0;
+ }
+ if (current) current->prev = mem;
+ mem->next = current;
+ mem->prev = 0;
+ current = mem;
+ mem->size = size;
+
+ return mem + 1;
+}
+
+static void free_sys(char *p)
+{
+ struct mem_header *old = (struct mem_header *)p - 1;
+
+ if (old == current)
+ {
+ current = current->next;
+ if (current) current->prev = 0;
+ }
+ else
+ {
+ old->prev->next = old->next;
+ if (old->next) old->next->prev = old->prev;
+ }
+ FreeMem(old, old->size);
+}
+
+void _MemCleanup(void)
+{
+ struct mem_header *next;
+
+ while (current)
+ {
+ next = current->next;
+ FreeMem(current, current->size);
+ current = next;
+ }
+}
+
+static void *alloc_hunk(long memsize)
+/* Effect: Allocates from the malloc hunk (which is dumped to disk).
+*/
+{
+ /* Allocation rounded up to multiple of 4 */
+ long size = ((memsize + 3) & ~3) + sizeof(struct mem_header);
+ /* Find a free block in the memory list */
+ struct mem_header *scan = free_list->next;
+
+ while (scan->size > 0)
+ {
+ if (size < scan->size) /* Found ! */
+ {
+ long end;
+
+ /* Split block if big enough */
+ if (size + sizeof(struct mem_header) + 8 > scan->size)
+ {
+ /* Remove block from list */
+ scan->prev->next = scan->next;
+ scan->next->prev = scan->prev;
+ }
+ else
+ {
+ /* Split block */
+ struct mem_header *new = (struct mem_header *)((char *)scan + size);
+
+ new->prev = scan->prev;
+ new->next = scan->next;
+ scan->prev->next = new;
+ scan->next->prev = new;
+ new->size = scan->size - size;
+ scan->size = size;
+ }
+ if (!amiga_initialized)
+ {
+ end = (char *)scan - (char *)free_list + scan->size +
+ sizeof(long) + sizeof(struct mem_header);
+ if (end > malloc_bytes_used) malloc_bytes_used = end;
+ }
+ return scan + 1;
+ }
+ scan = scan->next;
+ }
+ return 0;
+}
+
+static void free_hunk(char *p)
+{
+ struct mem_header *old = (struct mem_header *)p - 1, *scan = free_list;
+
+ do scan = scan->next; while (scan < old);
+
+ /* Check for merges (potentially with both sides) */
+ if ((char *)scan->prev + scan->prev->size == (char *)old)
+ if ((char *)old + old->size == (char *)scan)
+ {
+ /* Merge all 3 blocks together */
+ scan->prev->size += old->size + scan->size;
+ scan->next->prev = scan->prev;
+ scan->prev->next = scan->next;
+ }
+ else /* Merge with previous block */
+ scan->prev->size += old->size;
+ else if ((char *)old + old->size == (char *)scan)
+ {
+ /* Merge with next block */
+ old->size += scan->size;
+ scan->prev->next = old;
+ scan->next->prev = old;
+ old->prev = scan->prev;
+ old->next = scan->next;
+ }
+ else /* Add a new block */
+ {
+ old->next = scan;
+ old->prev = scan->prev;
+ scan->prev->next = old;
+ scan->prev = old;
+ }
+}
+
+char *__halloc(long size)
+{
+ if (early_malloc) return alloc_sys(size);
+
+ if (!amiga_initialized)
+ if (alloca_calling)
+ {
+ alloca_calling = 0;
+ return alloc_sys(size);
+ }
+ else
+ {
+ void *mem = alloc_hunk(size);
+
+ if (!mem)
+ _fail("Emacs dump: ran out of memory for malloc. \n"
+ "See the -malloc option for more information.\n");
+ return mem;
+ }
+ else
+ {
+ alloca_calling = 0;
+ if (pre_alloc)
+ {
+ void *mem;
+
+ if (mem = alloc_hunk(size)) return mem;
+ }
+ return alloc_sys(size);
+ }
+}
+
+char *malloc(int size)
+{
+ return __halloc(size);
+}
+
+free(void *p)
+{
+ struct mem_header *old = (struct mem_header *)p - 1;
+
+ if ((char *)p >= malloc_hunk &&
+ (char *)p <= malloc_hunk + malloc_hunk_size + pre_alloc)
+ {
+ if (!amiga_initialized || pre_alloc) free_hunk(p);
+ }
+ else free_sys(p);
+}
+
+char *calloc(long n, long size)
+{
+ char *t;
+ long rsize = n * size;
+
+ t = malloc(rsize);
+ if (t) memset (t, 0, rsize);
+
+ return t;
+}
+
+char *realloc(char *p, long size)
+{
+ char *new = malloc(size);
+ struct mem_header *old = (struct mem_header *)p - 1;
+
+ if (new)
+ {
+ long minsize;
+ long oldsize = old->size - sizeof(struct mem_header);
+
+ if (size < oldsize) minsize = size;
+ else minsize = oldsize;
+
+ memcpy(new, p, minsize);
+ }
+ free(p);
+ return new;
+}
+
+void emacs_malloc_init(void)
+{
+ struct mem_header *end_sentinel, *new_end, *new_block;
+
+ early_malloc = FALSE; /* We now have a malloc hunk */
+
+ /* Set up the memory allocation in the malloc hunk */
+ free_list = (struct mem_header *)malloc_hunk;
+ end_sentinel = (struct mem_header *)((char *)free_list + malloc_hunk_size
+ - sizeof(struct mem_header));
+ if (!amiga_initialized)
+ {
+ /* Before dumping */
+ free_list->next = free_list + 1;
+ free_list->prev = 0;
+ free_list->size = 0; /* Prevents merges with this pseudo-block */
+ free_list[1].prev = free_list;
+ free_list[1].next = end_sentinel;
+ free_list[1].size =
+ malloc_hunk_size - 2 * sizeof(struct mem_header) - sizeof(long);
+ /* The - sizeof(long) prevents any merges with end_sentinel */
+
+ end_sentinel->size = 0;
+ end_sentinel->prev = free_list + 1;
+ end_sentinel->next = 0;
+
+ malloc_bytes_used = 0;
+ }
+ else if (pre_alloc)
+ {
+ /* After having undumped extend malloc block */
+ /* Move end_sentinel: */
+ new_end = (struct mem_header *)((char *)free_list + malloc_hunk_size +
+ pre_alloc - sizeof(struct mem_header));
+ new_end->size = 0;
+ new_end->next = 0;
+ new_end->prev = end_sentinel->prev;
+ end_sentinel->prev->next = new_end;
+
+ /* Add extra memory (pre_alloc bytes) */
+ new_block = (struct mem_header *)((char *)end_sentinel - sizeof(long));
+ new_block->size = pre_alloc;
+ free_hunk((char *)(new_block + 1));
+ }
+}
diff -rup --new-file baseline/fsf/emacs18/src/amiga_menu.c amiga/fsf/emacs18/src/amiga_menu.c
--- baseline/fsf/emacs18/src/amiga_menu.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_menu.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,309 @@
+#include <exec/types.h>
+#include <libraries/gadtools.h>
+#include <intuition/intuition.h>
+#include <proto/exec.h>
+#include <proto/dos.h>
+#include <proto/gadtools.h>
+#include <proto/intuition.h>
+#include "config.h"
+#undef NULL
+#include "lisp.h"
+#include "amiga.h"
+
+#ifndef GTMN_NewLookMenus
+#define GTMN_NewLookMenus GT_TagBase+67
+#endif
+
+static struct Menu *emacs_menu;
+static char *emacs_menu_strings;
+static APTR win_vi;
+struct Library *GadToolsBase;
+
+void suspend_menus(void)
+{
+ if (emacs_win)
+ {
+ ClearMenuStrip(emacs_win);
+ if (win_vi)
+ {
+ FreeVisualInfo(win_vi);
+ win_vi = 0;
+ }
+ }
+}
+
+int resume_menus(void)
+{
+ if (emacs_win && emacs_menu)
+ {
+ win_vi = GetVisualInfo(emacs_win->WScreen, TAG_END);
+
+ if (!win_vi || !LayoutMenus(emacs_menu, win_vi,
+ GTMN_NewLookMenus, 1L,
+ TAG_END))
+ {
+ if (win_vi) FreeVisualInfo(win_vi);
+ Famiga_delete_menus();
+
+ return FALSE;
+ }
+ SetMenuStrip(emacs_win, emacs_menu);
+ }
+ return TRUE;
+}
+
+DEFUN ("amiga-menus", Famiga_menus, Samiga_menus, 1, 1, 0,
+ "Define menus for emacs. The argument is a list structured as follows:\n\
+ ((menu1-name ((item1-name item1-expr item1-key item1-disabled) ...)\n\
+ menu1-disabled) ...)\n\
+menu-name is the name of the menu item header.\n\
+The menu is disabled if menu-disabled is not nil [optional].\n\
+item-name is the name of an item.\n\
+The item-expr fields are ignored.\n\
+If item-key is nil, no shortcut is allowed.\n\
+If item-disabled is not nil, the item is disabled.\n\
+If the item information list is nil, a line is drawn in the menu.\n\
+item-key & item-disabled are optional.")
+ (menus)
+ Lisp_Object menus;
+{
+ Lisp_Object s_menus, s_items;
+ int citems, slen;
+ char *strdata;
+ struct NewMenu *menudata, *mkm;
+ struct Lisp_String *name;
+
+/* int i;
+ extern int total[], nb[];
+
+ for (i = 0; i < 16; i++)
+ {
+ printf("%d(%d) ", total[i], nb[i]);
+ total[i] = nb[i] = 0;
+ }
+ printf("\n");
+ start_count(15);
+ for (i = 0; i < 100; i++) { suspend_count(15); resume_count(15); }
+ stop_count(15);
+ for (i = 0; i < 100; i++) { start_count(14); stop_count(14); }
+ printf("100 s/r: %d, 100 s/s: %d\n", total[15], total[14]);
+
+ return Qnil;
+*/
+ check_intuition();
+
+ /* Check structure of parameter & count # items & menus */
+ s_menus = menus;
+ citems = slen = 0;
+
+ while (!NULL(s_menus))
+ {
+ struct Lisp_Cons *menu, *menu_cell;
+
+ CHECK_CONS(s_menus, 0);
+ menu_cell = XCONS(s_menus);
+ citems++;
+ CHECK_CONS(menu_cell->car, 0); /* Each menu is a list */
+ menu = XCONS(menu_cell->car);
+
+ CHECK_STRING(menu->car, 0); /* Check name */
+ name = XSTRING(menu->car);
+ slen += name->size + 1;
+ CHECK_CONS(menu->cdr, 0);
+
+ menu = XCONS(menu->cdr); /* Check items */
+
+ s_items = menu->car;
+ while (!NULL(s_items))
+ {
+ struct Lisp_Cons *item, *item_cell;
+
+ CHECK_CONS(s_items, 0);
+ item_cell = XCONS(s_items);
+ citems++;
+ if (!NULL(item_cell->car))
+ {
+ CHECK_CONS(item_cell->car, 0); /* Each item is a list */
+ item = XCONS(item_cell->car);
+
+ CHECK_STRING(item->car, 0);
+ name = XSTRING(item->car);
+ slen += name->size + 1;
+
+ if (!NULL(item->cdr)) /* Only name is necessary */
+ {
+ CHECK_CONS(item->cdr, 0);
+ item = XCONS(item->cdr);
+
+ /* Expr is arbitrary */
+ if (!NULL(item->cdr))
+ {
+ CHECK_CONS(item->cdr, 0);
+ item = XCONS(item->cdr);
+
+ /* Check shortcut */
+ if (!NULL(item->car))
+ {
+ CHECK_NUMBER(item->car, 0);
+ slen += 2;
+ }
+
+ if (!NULL(item->cdr))
+ {
+ CHECK_CONS(item->cdr, 0);
+ item = XCONS(item->cdr);
+
+ /* Check that end of list */
+ if (!NULL(item->cdr)) error("Badly formed item");
+ }
+ }
+ }
+ }
+ s_items = item_cell->cdr;
+ }
+ if (!NULL(menu->cdr))
+ {
+ CHECK_CONS(menu->cdr, 0);
+ menu = XCONS(menu->cdr);
+ if (!NULL(menu->cdr)) error("Badly formed menu");
+ }
+ s_menus = menu_cell->cdr;
+ }
+
+ suspend_menus();
+ if (emacs_menu) Famiga_delete_menus();
+
+ /* Now create menu structure */
+ menudata = (struct NewMenu *)alloca(sizeof(struct NewMenu) * (citems + 1));
+ emacs_menu_strings = strdata = (char *)xmalloc(slen);
+ mkm = menudata;
+ s_menus = menus;
+ while (!NULL(s_menus))
+ {
+ struct Lisp_Cons *menu, *menu_cell;
+ struct NewMenu *menu1;
+
+ menu_cell = XCONS(s_menus);
+ mkm->nm_Type = NM_TITLE;
+ menu = XCONS(menu_cell->car);
+ name = XSTRING(menu->car);
+ strcpy(strdata, name->data);
+ mkm->nm_Label = strdata;
+ strdata += name->size + 1;
+ mkm->nm_CommKey = 0;
+ mkm->nm_Flags = 0;
+ mkm->nm_MutualExclude = 0;
+ menu1 = mkm++;
+
+ menu = XCONS(menu->cdr); /* Check items */
+
+ s_items = menu->car;
+ while (!NULL(s_items))
+ {
+ struct Lisp_Cons *item, *item_cell;
+
+ item_cell = XCONS(s_items);
+ mkm->nm_Type = NM_ITEM;
+ mkm->nm_CommKey = 0;
+ mkm->nm_Flags = 0;
+ mkm->nm_MutualExclude = 0;
+ if (NULL(item_cell->car))
+ {
+ mkm->nm_Type = IM_ITEM;
+ mkm->nm_Label = NM_BARLABEL;
+ }
+ else
+ {
+
+ item = XCONS(item_cell->car);
+ name = XSTRING(item->car);
+ strcpy(strdata, name->data);
+ mkm->nm_Label = strdata;
+ strdata += name->size + 1;
+
+ if (!NULL(item->cdr)) /* Only name is necessary */
+ {
+ item = XCONS(item->cdr);
+
+ /* Expr is ignored */
+
+ if (!NULL(item->cdr))
+ {
+ item = XCONS(item->cdr);
+
+ /* Check shortcut */
+ if (!NULL(item->car))
+ {
+ mkm->nm_CommKey = strdata;
+ strdata[0] = XFASTINT(item->car);
+ strdata[1] = '\0';
+ strdata += 2;
+ }
+ if (!NULL(item->cdr))
+ {
+ item = XCONS(item->cdr);
+ if (!NULL(item->car))
+ mkm->nm_Flags |= NM_ITEMDISABLED;
+ }
+ }
+ }
+ }
+ mkm++;
+ s_items = item_cell->cdr;
+ }
+ if (!NULL(menu->cdr))
+ {
+ menu = XCONS(menu->cdr);
+ if (!NULL(menu->car)) menu1->nm_Flags |= NM_MENUDISABLED;
+ }
+ s_menus = menu_cell->cdr;
+ }
+ mkm->nm_Type = NM_END;
+ mkm->nm_Label = 0;
+ mkm->nm_CommKey = 0;
+ mkm->nm_Flags = 0;
+ mkm->nm_MutualExclude = 0;
+ if (!(emacs_menu = CreateMenus(menudata, TAG_END)))
+ {
+ free(emacs_menu_strings);
+ emacs_menu_strings = 0;
+ error("Menu couldn't be created");
+ }
+ if (!resume_menus()) error("Menu couldn't be layed out");
+
+ return Qt;
+}
+
+DEFUN ("amiga-delete-menus", Famiga_delete_menus, Samiga_delete_menus, 0, 0, 0,
+ "Remove & free menu strip")
+ ()
+{
+ check_intuition();
+
+ suspend_menus();
+ if (emacs_menu) FreeMenus(emacs_menu);
+ emacs_menu = 0;
+ if (emacs_menu_strings) free(emacs_menu_strings);
+ emacs_menu_strings = 0;
+
+ return Qt;
+}
+
+void syms_of_amiga_menu(void)
+{
+ defsubr(&Samiga_delete_menus);
+ defsubr(&Samiga_menus);
+}
+
+void init_amiga_menu(void)
+{
+ GadToolsBase = OpenLibrary("gadtools.library", 0);
+ if (!GadToolsBase) _fail("gadtools.library required");
+}
+
+void cleanup_amiga_menu(void)
+{
+ suspend_menus();
+ if (emacs_menu) Famiga_delete_menus();
+ if (GadToolsBase) CloseLibrary(GadToolsBase);
+}
diff -rup --new-file baseline/fsf/emacs18/src/amiga_processes.c amiga/fsf/emacs18/src/amiga_processes.c
--- baseline/fsf/emacs18/src/amiga_processes.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_processes.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,94 @@
+#include <exec/types.h>
+#include <exec/execbase.h>
+#include <exec/memory.h>
+#include <dos/dos.h>
+#include <dos/dosextens.h>
+#include <dos/dostags.h>
+#include <proto/exec.h>
+#include <proto/dos.h>
+#include <clib/alib_protos.h>
+#include <signal.h>
+#undef signal
+#include <ios1.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+#include <internal/vars.h>
+
+#include "config.h"
+#include "lisp.h"
+#include "amiga.h"
+#include "emacssignal.h"
+
+extern struct ExecBase *SysBase;
+
+int amiga_process_stack_size;
+
+/* A few emacs support functions */
+/* ----------------------------- */
+
+wait_for_termination (pid)
+ int pid;
+{
+ while (1)
+ {
+ sigsetmask (sigmask (SIGCHLD));
+ if (0 > kill (pid, 0))
+ {
+ sigsetmask (SIGEMPTYMASK);
+ break;
+ }
+ sigpause (SIGEMPTYMASK);
+ }
+}
+
+char *amiga_path(void)
+{
+ char *path, *pp, name[128];
+ int pathsize;
+ struct CommandLineInterface *cli;
+ BPTR lock;
+ long l, *lp, nlen;
+
+ pathsize = 128;
+ path = (char *)xmalloc(pathsize);
+
+ strcpy(path, ".");
+ pp = path + 1;
+
+ if (!(cli = (struct CommandLineInterface *)((long)_us->pr_CLI << 2)))
+ return path;
+
+ l = (long)cli->cli_CommandDir;
+ while (l) {
+ *pp++ = ',';
+ l <<= 2;
+ lp = (long *)l;
+ lock = (BPTR)*(lp + 1);
+ NameFromLock(lock, name, 128);
+ nlen = strlen(name);
+ if (pp + nlen + 5 >= path + pathsize)
+ {
+ char *newpath;
+
+ pathsize = 2 * pathsize + nlen;
+ newpath = (char *)xrealloc(path);
+ pp = newpath + (pp - path);
+ path = newpath;
+ }
+ memcpy(pp, name, nlen);
+ pp += nlen;
+ l = *lp;
+ }
+ /* Use of +5 above guarantees that there is enough space for c: */
+ strcpy(pp, ",c:");
+
+ return path;
+}
+
+void syms_of_amiga_processes(void)
+{
+ amiga_process_stack_size = 0;
+ DEFVAR_INT("amiga-process-stack-size", &amiga_process_stack_size,
+ "Size of stack for called processes. 0 means same size as emacs stack.");
+}
diff -rup --new-file baseline/fsf/emacs18/src/amiga_rexx.c amiga/fsf/emacs18/src/amiga_rexx.c
--- baseline/fsf/emacs18/src/amiga_rexx.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_rexx.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,460 @@
+/* low level ARexx code for use in amiga version of Emacs.
+ Copyright (C) 1993 Christian E. Hopps.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#include "SimpleRexx.h"
+#include <proto/exec.h>
+#undef NULL
+#include "config.h"
+#include "lisp.h"
+
+#include "amiga.h"
+
+#define XLRXMSG(x) ((struct LispRexxMsg *) XPNTR((x)))
+#define XSETLRXMSG(x,v) (XSET((x), Lisp_Int, v))
+
+static AREXXCONTEXT far handle;
+static int amiga_arexx_initialized;
+
+/* This structure should be allocated with emacs_malloc() its pointer will be */
+/* used as an msgid. (emacs XUINT())*/
+struct LispRexxMsg {
+ struct MinNode lrm_Node; /* A node for tracking messages. */
+ struct RexxMsg *lrm_Msg; /* The actual Rexx Msg. */
+ ULONG lrm_Flags;
+};
+/* Flags for LispRexxMessage indicating what to do with it. */
+#define LRMF_SENTCMD (1L << 0) /* this msg originated here. */
+#define LRMF_DOERRORS (1L << 1) /* handle error replies */
+#define LRMF_DORESULTS (1L << 2) /* handle result strings */
+
+struct LispRexxList {
+ struct MinList lrl_List;
+ int lrl_Count;
+};
+
+struct LispRexxList pending; /* The list of pending */
+ /* (outgoing) Rexx Messages. */
+struct LispRexxList returned; /* The list of pending */
+ /* (outgoing) Rexx Messages */
+ /* that have been received. */
+struct LispRexxList incoming; /* The message that are */
+ /* incoming to Emacs (sent */
+ /* from some other rexx host. */
+
+/* allocate a rexx message properly */
+Lisp_Object alloc_rexx_msg(ULONG flags)
+{
+ Lisp_Object rm = Qnil;
+ struct LispRexxMsg *lrm = (struct LispRexxMsg *)malloc(sizeof(*lrm));
+ if(lrm) {
+ lrm->lrm_Flags = flags;
+ XSETLRXMSG(rm,lrm);
+ return(rm);
+ }
+ return(Qnil);
+}
+
+/* free an arexx message allocated with alloc_arexx_msg() */
+void free_rexx_msg (Lisp_Object rm)
+{
+ if(!NULL(rm)) {
+ void *mem = XLRXMSG(rm);
+ free(mem);
+ }
+}
+
+/* The next 2 functions imlement FIFO lists. */
+
+/* add LispRexxMsg to a LispRexxLisp Tail. */
+void add_rexx_msg_to_tail(struct LispRexxList *rl, Lisp_Object rm)
+{
+ AddTail((struct List *)rl,(struct Node *)XPNTR(rm));
+ rl->lrl_Count++;
+}
+
+/* remove LispRexxMsg from head of a LispRexxLisp. */
+Lisp_Object remove_rexx_msg_from_head(struct LispRexxList *rl)
+{
+ Lisp_Object rm = (Lisp_Object)RemHead((struct List *)rl);
+ if(rm != 0) {
+ rl->lrl_Count--;
+ return(rm);
+ } else {
+ return Qnil;
+ }
+}
+
+void remove_rexx_msg(struct LispRexxList *rl, Lisp_Object rm)
+{
+ Remove((struct Node *)XPNTR(rm));
+ rl->lrl_Count--;
+}
+
+
+/* find a rexx message on a list given an msgid (ptr) */
+int is_rexx_msgid_on_list(struct LispRexxList *rl,
+ Lisp_Object id)
+{
+ struct MinNode *mn = rl->lrl_List.mlh_Head;
+ for(mn; mn->mln_Succ; mn = mn->mln_Succ) {
+ Lisp_Object cmpid = Qnil;
+ XSETLRXMSG(cmpid,mn);
+ if( EQ(cmpid,id)) {
+ return(1);
+ }
+ }
+ return(0);
+}
+
+Lisp_Object find_rexx_msg_on_list(struct LispRexxList *rl,
+ struct RexxMsg *msg)
+{
+ Lisp_Object pnt = Qnil;
+ struct MinNode *mn = rl->lrl_List.mlh_Head;
+ for(mn; mn->mln_Succ; mn = mn->mln_Succ) {
+ if( ((struct LispRexxMsg *)mn)->lrm_Msg == msg) {
+ XSETLRXMSG(pnt,mn);
+ }
+ }
+ return(pnt);
+}
+
+/* This function is given a RexxMsg and it goes and find (or doesn't) the */
+/* corisponding pending message, removes it from the list and sets up the lisp */
+/* list for return values. if it is not found nil is returned. (it deals with */
+/* the errors for incoming messages properly. Some thought is needed on how to */
+/* handle errors from replied sent commands that were not asking for results. */
+Lisp_Object handle_rexx_msg_replied(struct RexxMsg *msg)
+{
+ Lisp_Object rm = find_rexx_msg_on_list(&pending, msg);
+ if(!NULL(rm)) {
+ /* Process the command. If it was requesting results strings handle */
+ /* them otherwise just delete. */
+ struct LispRexxMsg *lrm = XLRXMSG(rm);
+ remove_rexx_msg(&pending, rm);
+
+ if(msg->rm_Result1 == 0) {
+ if(lrm->lrm_Flags & LRMF_DORESULTS) {
+ /* add to returned so that result can be fetched. */
+ add_rexx_msg_to_tail(&returned,rm);
+ } else {
+ /* simply delete rexx message. */
+ DeleteARexxMsg(handle,msg);
+ free_rexx_msg(rm);
+ }
+ } else {
+ /* an error occured with our message. */
+ if(lrm->lrm_Flags & LRMF_DOERRORS) {
+ /* add to returned so that error can be fetched. */
+ add_rexx_msg_to_tail(&returned,rm);
+ } else {
+ /* simply delete rexx message. */
+ DeleteARexxMsg(handle,msg);
+ free_rexx_msg(rm);
+ }
+ }
+ } else {
+ /* This should never happen we received a rexx message reply */
+ /* that we never sent out. */
+ DeleteARexxMsg(handle,msg);
+ }
+}
+
+/* This function takes incoming messages and place them on the incoming msg */
+/* list. */
+Lisp_Object handle_rexx_msg_received(struct RexxMsg *msg)
+{
+ Lisp_Object rm = alloc_rexx_msg(LRMF_DORESULTS|LRMF_DOERRORS);
+ if(!NULL(rm)) {
+ /* Add message to incoming list. */
+ struct LispRexxMsg *lrm = XLRXMSG(rm);
+ lrm->lrm_Msg = msg; /* set msg pointer. */
+ add_rexx_msg_to_tail(&incoming,rm);
+ } else {
+ /* This should never happen we received a rexx message but ran out of */
+ /* memory. Set last error msg. and reply with fail. */
+ SetARexxLastError(handle, msg, "Out of emacs memory.");
+ ReplyARexxMsg(handle, msg, 0, 20);
+ }
+}
+
+/* Almost the same as old one, but we now call handle_pending_arexx_reply() for */
+/* replied messages that we sent, so that we can setup result strings and such. */
+int check_arexx(int force, int kbd)
+{
+ struct RexxMsg *msg;
+ int msg_received = FALSE;
+ while (msg = GetARexxMsg(handle)) {
+ msg_received = TRUE;
+ if(msg->rm_Node.mn_Node.ln_Type == NT_REPLYMSG) {
+ /* This is a reply to a rexx command we send out. */
+ handle_rexx_msg_replied(msg);
+ } else {
+ handle_rexx_msg_received(msg);
+ }
+ }
+ if ((kbd && amiga_arexx_initialized)) {
+ /* if we got a message or we have some out, or we have some waiting to */
+ /* be processes then enque the Key sequence that will call the rexx */
+ /* message handler. We obviously don't do this for returned commands :^) */
+ if ((msg_received || force && incoming.lrl_Count > 0) &&
+ get_ttycount() == 0) {
+ enque(AMIGASEQ, FALSE); enque('X', FALSE);
+ }
+ }
+ return msg_received;
+}
+
+DEFUN ("amiga-arexx-wait", Famiga_arexx_wait, Samiga_arexx_wait, 0, 0, 0,
+ "Wait for an ARexx event (command or reply) before proceeding.")
+ ()
+{
+ while (!check_arexx(FALSE, FALSE)) Wait(ARexxSignal(handle));
+}
+
+DEFUN ("amiga-arexx-check-command",
+ Famiga_arexx_check_command, Samiga_arexx_check_command, 1, 1, 0,
+ "Return t if command ID has finished, nil otherwise.")
+ (id)
+Lisp_Object id;
+{
+ CHECK_NUMBER(id,0);
+
+ if(is_rexx_msgid_on_list(&pending,id)) {
+ /* still on pending return false. */
+ return Qnil;
+ } else if(is_rexx_msgid_on_list(&returned,id)) {
+ /* is waiting to be processed return true. */
+ return Qt;
+ }
+
+ /* is nowhere to be found. error. */
+ error("id not found.");
+ return Qnil;
+}
+
+DEFUN ("amiga-arexx-get-next-msg", Famiga_arexx_get_next_msg,
+ Samiga_get_next_msg, 0, 0, 0,
+"Returns the oldest arexx msg sent to emacs rexx port.\n\
+When you are through with this message call (amiga-arexx-reply).\n\
+if the msg is not replied this function will continue to\n\
+return that msg until it has been replied to.")
+ ()
+{
+ struct RexxMsg *rmsg;
+
+ check_arexx(FALSE, FALSE);
+ if (incoming.lrl_Count) {
+ struct RexxMsg *msg = ((struct LispRexxMsg *)
+ incoming.lrl_List.mlh_Head)->lrm_Msg;
+ return build_string(ARG0(msg));
+ }
+ /* nothing to be gotten. */
+ return Qnil;
+}
+
+DEFUN("amiga-arexx-get-msg-results", Famiga_arexx_get_msg_results,
+ Samiga_arexx_get_msg_results, 1,1,0,
+"Returns the results from MSGID. will be a list of the form:\n\
+ (msgid resultcode secondary)\n\n\
+If resultcode is 0 then secondary will be a string or nil.\n\
+else resulcode will be greater than 0 and secondary will be\n\
+an error-code (int).\n\n\
+If MSGID has not yet completed nil is returned.\n\
+if MSGID has been dealt with or is invalid and error will occur.")
+ (msgid)
+Lisp_Object msgid;
+{
+ CHECK_NUMBER(msgid,0);
+
+ if(is_rexx_msgid_on_list(&returned,msgid)) {
+ /* msgid has completed build list and delete LispRexxMsg. */
+ struct LispRexxMsg *lrm = XLRXMSG(msgid);
+ Lisp_Object rc, error_or_string, ret;
+ struct RexxMsg *msg = lrm->lrm_Msg;
+
+ remove_rexx_msg(&returned,msgid);
+
+ rc = make_number(msg->rm_Result1);
+ if(msg->rm_Result1 == 0) {
+ error_or_string = msg->rm_Result2 ? build_string(msg->rm_Result2) : 0;
+ } else {
+ /* error occurred */
+ error_or_string = make_number(msg->rm_Result2); /* save error code. */
+ }
+ free_rexx_msg(msgid); /* free our rexx msg. */
+ DeleteARexxMsg(handle,msg); /* free ARexx msg proper */
+
+ /* build lisp list. */
+ ret = Fcons( msgid, Fcons( rc, Fcons(error_or_string, Qnil)));
+ if(NULL(ret)) {
+ error("Couldn't get memory.");
+ }
+ return(ret);
+ } else if(is_rexx_msgid_on_list(&pending,msgid)) {
+ return Qnil; /* this msgid has not yet completed. */
+ } else {
+ error("Unknown MSGID.");
+ return Qnil;
+ }
+}
+
+DEFUN ("amiga-arexx-reply", Famiga_arexx_reply, Samiga_arexx_reply,
+ 2, 2, 0,
+"Replies to the first arexx message (the one got via amiga-arexx-get-event)\n\
+with RC as return code.\n\
+If RC=0, TEXT is the result, otherwise it is the error text. It can be nil.")
+ (rc, text)
+Lisp_Object rc, text;
+{
+ int retcode, ok = TRUE;
+ char *result;
+ struct RexxMsg *rmsg;
+ Lisp_Object rm = remove_rexx_msg_from_head(&incoming);
+ struct LispRexxMsg *lrm = XLRXMSG(rm);
+
+ if (NULL(rm))
+ error("No ARexx message to reply to.");
+
+ rmsg = lrm->lrm_Msg;
+
+ CHECK_NUMBER(rc, 0);
+ retcode = XINT(rc);
+
+ if (!NULL (text)) {
+ CHECK_STRING(text, 0);
+ result = XSTRING (text)->data;
+ } else {
+ result = 0;
+ }
+ if (retcode && result)
+ ok = SetARexxLastError(handle, rmsg, result);
+ ReplyARexxMsg(handle, rmsg, result, retcode);
+
+ if (!ok)
+ error("Failed to set ARexx error message.");
+
+ return Qnil;
+}
+
+Lisp_Object send_rexx_command(Lisp_Object str, Lisp_Object as_file,
+ ULONG flags)
+{
+ struct RexxMsg *rmsg;
+ int i;
+ Lisp_Object id, rm;
+ struct LispRexxMsg *lrm;
+
+ rm = alloc_rexx_msg(flags);
+ if(NULL(rm)) {
+ error("Failed to send command to ARexx.");
+ return Qnil;
+ }
+
+ CHECK_STRING (str, 0);
+ if (!(rmsg = SendARexxMsg(handle, XSTRING (str)->data,!NULL (as_file),
+ (flags & LRMF_DORESULTS ? 1 : 0)))) {
+ free_rexx_msg(rm);
+ error("Failed to send command to ARexx.");
+ return Qnil;
+ }
+ lrm = XLRXMSG(rm);
+ lrm->lrm_Msg = rmsg; /* set rexx message pointer. */
+ add_rexx_msg_to_tail(&pending,rm); /* add to pending list. */
+
+ return(rm);
+}
+
+DEFUN ("amiga-arexx-send-command", Famiga_arexx_send_command,
+ Samiga_arexx_send_command, 1, 2, 0,
+"Sends a command to ARexx for execution.\n\
+If the second arg is non-nil, the command is directly interpreted.\n\
+Returns an integer that uniquely identifies this message. This must\n\
+then be used to get the results from the command.\n\
+NOTE: this is very different from old way things worked.\n\
+ earlier versions of emacs discarded successful results\n\
+ and errors always got replied to becuase they caused failures\n\
+ Neither of these are true now.\
+This function is also no longer interactive.\n\
+Use (amiga-arexx-do-command)\n")
+ (str, as_file)
+Lisp_Object str, as_file;
+{
+ return(send_rexx_command(str,as_file,
+ LRMF_DORESULTS|
+ LRMF_DOERRORS|
+ LRMF_SENTCMD));
+}
+
+void init_amiga_rexx(void)
+{
+ extern ULONG inputsig;
+ int i;
+
+ handle = InitARexx("Emacs", "elx");
+ inputsig |= ARexxSignal(handle);
+
+ /* init exec lists. */
+ NewList((struct List *)&incoming.lrl_List);
+ incoming.lrl_Count = 0;
+
+ NewList((struct List *)&pending.lrl_List);
+ pending.lrl_Count = 0;
+
+ NewList((struct List *)&returned.lrl_List);
+ returned.lrl_Count = 0;
+}
+
+void cleanup_amiga_rexx(void)
+{
+ /* Delete and reply all rexx messages we have gotten. */
+ Lisp_Object rm = remove_rexx_msg_from_head(&returned);
+ while(!NULL(rm)) {
+ struct LispRexxMsg *lrm = XLRXMSG(rm);
+ DeleteARexxMsg(handle,lrm->lrm_Msg);
+ free_rexx_msg(rm);
+ rm = remove_rexx_msg_from_head(&returned);
+ }
+
+ rm = remove_rexx_msg_from_head(&incoming);
+ while(!NULL(rm)) {
+ struct LispRexxMsg *lrm = XLRXMSG(rm);
+ ReplyARexxMsg(handle, lrm->lrm_Msg, 0, 20);
+ free_rexx_msg(rm);
+ rm = remove_rexx_msg_from_head(&incoming);
+ }
+
+ /* Free the rest of rexx, will wait for pending msgs to return */
+ FreeARexx(handle);
+}
+
+void syms_of_amiga_rexx(void)
+{
+ DEFVAR_BOOL ("amiga-arexx-initialized", &amiga_arexx_initialized,
+ "Set this to t when Emacs is ready to respond to ARexx messages.\n"
+ "(ie C-\ X causes all pending ARexx messages to be answered)");
+ amiga_arexx_initialized = 0;
+
+ defsubr(&Samiga_arexx_send_command);
+ defsubr(&Samiga_arexx_reply);
+ defsubr(&Samiga_get_next_msg);
+ defsubr(&Samiga_arexx_get_msg_results);
+ defsubr(&Samiga_arexx_check_command);
+ defsubr(&Samiga_arexx_wait);
+}
diff -rup --new-file baseline/fsf/emacs18/src/amiga_screen.c amiga/fsf/emacs18/src/amiga_screen.c
--- baseline/fsf/emacs18/src/amiga_screen.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_screen.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,1396 @@
+#include "config.h"
+#undef NULL
+#include "lisp.h"
+#include "termchar.h"
+#include "dispextern.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stddef.h>
+#include <internal/devices.h>
+#include <internal/vars.h>
+
+#define min(x,y) ((x) > (y) ? (y) : (x))
+#define max(x,y) ((x) < (y) ? (y) : (x))
+
+#undef LONGBITS
+
+#include <exec/types.h>
+#include <exec/interrupts.h>
+#include <devices/input.h>
+#include <devices/inputevent.h>
+#include <intuition/intuitionbase.h>
+#include <intuition/intuition.h>
+#include <devices/conunit.h>
+#include <devices/inputevent.h>
+#include <graphics/gfxbase.h>
+#include <graphics/gfxmacros.h>
+#include <utility/hooks.h>
+#include <workbench/startup.h>
+#include <workbench/workbench.h>
+
+#include <proto/exec.h>
+#include <proto/dos.h>
+#include <proto/intuition.h>
+#include <proto/graphics.h>
+#include <proto/console.h>
+#include <proto/diskfont.h>
+#include <proto/wb.h>
+
+/* this is defined for those unlucky enough
+ * not to have the 3.0 headers -ch3/16/93. */
+#ifndef WA_NewLookMenus
+#define WA_NewLookMenus (WA_Dummy + 0x30)
+#endif
+
+#include "amiga.h"
+
+#define SHIFT_MASK (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)
+#define CONTROL_MASK IEQUALIFIER_CONTROL
+#define META_MASK IEQUALIFIER_LALT
+
+struct GfxBase *GfxBase;
+struct IntuitionBase *IntuitionBase;
+struct Library *DiskfontBase, *KeymapBase, *WorkbenchBase;
+
+static char intkey_code, intkey_qualifier;
+static struct IOStdReq *input_req;
+static struct Interrupt int_handler_hook;
+static int hooked;
+
+static struct MsgPort *wbport;
+static struct AppWindow *emacs_app_win;
+static struct AppIcon *emacs_icon;
+
+struct Library *ConsoleDevice;
+static struct TextFont *font;
+static int font_opened;
+/* The reset string resets the console, turns off scrolling and sets up
+ the foreground & background colors. */
+#define CONSOLE_RESET "\x1b""c\x9b>1l\x9b""3%d;4%d;>%dm"
+static char reset_string[20]; /* Must be big enough for
+ printf(CONSOLE_RESET, foreground, background, background);
+ (0 <= foreground, background <= 7) */
+
+/* These are the pen numbers for emacs window's base colors */
+int foreground = 1, background = 0;
+
+/* Current window, and its main characteristics */
+struct Window *emacs_win;
+WORD emacs_x = 0, emacs_y = 0, emacs_w = 640, emacs_h = 200;
+char *emacs_screen_name;
+char emacs_screen_name_storage[MAXPUBSCREENNAME+1];
+int emacs_backdrop = 0; /* Use backdrop window ? */
+
+/* Current window size: */
+#define EMACS_X() (emacs_win ? emacs_win->LeftEdge : emacs_x)
+#define EMACS_Y() (emacs_win ? emacs_win->TopEdge : emacs_y)
+#define EMACS_W() (emacs_win ? emacs_win->Width : emacs_w)
+#define EMACS_H() (emacs_win ? emacs_win->Height : emacs_h)
+
+/* used for setting the color of standout text -ch3/16/93. */
+int inverse_fill_pen = 8, inverse_text_pen = 8;
+
+/* IO request for all console io. */
+static struct IOStdReq *emacs_console;
+
+/* a storage area for the name of the screen last opened on */
+
+#define emacs_icon_width 57
+#define emacs_icon_height 55
+#define emacs_icon_num_planes 1
+#define emacs_icon_words_per_plane 220
+
+UWORD chip emacs_icon_data[1][55][4] = {
+ {
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0fe0,0x6000,
+ 0x0000,0x0000,0x0060,0x6000,0x0000,0x0000,0x0fff,0xe000,
+ 0x0000,0x0000,0x1800,0x2000,0x0000,0x0000,0x13ff,0xa000,
+ 0x0000,0x0000,0x1400,0xa000,0x0000,0x0000,0x3600,0xa000,
+ 0x0000,0x0000,0x0000,0xa000,0x0000,0x0000,0x0c00,0xa000,
+ 0x0000,0x0000,0x1e00,0xa000,0x0000,0x0000,0x0c00,0xa000,
+ 0x0000,0x0000,0x0000,0xa000,0x0000,0x0000,0x2100,0xa000,
+ 0x0000,0x0000,0x3300,0xa000,0x0000,0x0000,0x0c00,0xa000,
+ 0x003f,0xffff,0xffff,0xb000,0x001f,0xffff,0xffff,0x8000,
+ 0x004e,0x0000,0x0001,0xf000,0x00c6,0x00f0,0x0001,0x8000,
+ 0x00c6,0x0100,0x0001,0x8000,0x0006,0x0103,0x9201,0x8000,
+ 0x0006,0x013a,0x5201,0x8000,0x00c6,0x010a,0x5201,0x8000,
+ 0x00c6,0x010a,0x5601,0x8000,0x0086,0x00f2,0x4a01,0x8000,
+ 0x0006,0x0000,0x0001,0x8000,0x0046,0x0000,0x0001,0x8000,
+ 0x00c6,0x7c00,0x0001,0x8000,0x00c6,0x4000,0x0001,0x8000,
+ 0x0006,0x41d8,0xc319,0x8000,0x0006,0x7925,0x24a1,0x8000,
+ 0x00c6,0x4125,0x2419,0x8000,0x01c6,0x4125,0x2485,0x8000,
+ 0x0086,0x7d24,0xd319,0x8000,0x0007,0x0000,0x0003,0x8000,
+ 0x0003,0xffe3,0xffff,0x0000,0x0081,0xfff7,0xfffe,0x0000,
+ 0x01c0,0x0036,0x0000,0x0000,0x0180,0x0014,0x0f80,0x0000,
+ 0x0000,0x0014,0x1040,0x0000,0x0000,0x0014,0x2720,0x0000,
+ 0x0000,0x0012,0x28a0,0x0000,0x0080,0x000a,0x48a0,0x0000,
+ 0x01c0,0x0009,0x90a0,0x0000,0x0180,0x0004,0x20a0,0x0000,
+ 0x0000,0x0003,0xc0a0,0x0000,0x0000,0x0000,0x00a0,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000
+ },
+};
+
+struct Image far emacs_icon_image = {
+ 0, 0,
+ emacs_icon_width, emacs_icon_height, emacs_icon_num_planes,
+ (UWORD *)emacs_icon_data,
+ 3, 0,
+ 0
+};
+
+static struct DiskObject far emacs_icon_object = {
+ 0, 0,
+ { 0, 0, 0, emacs_icon_width, emacs_icon_height, 0, 0, 0, (APTR)&emacs_icon_image },
+ 0, 0, 0,
+ NO_ICON_POSITION, NO_ICON_POSITION
+};
+
+static struct Hook background_hook;
+
+#define EVENTSIZE 32
+
+static struct event {
+ ULONG class;
+ UWORD code, qual;
+ WORD x, y;
+} events[EVENTSIZE];
+static int event_num, event_in, event_out;
+
+static struct wbevent {
+ struct wbevent *next;
+ char file[1];
+} *wbevents;
+
+Lisp_Object Vamiga_mouse_pos;
+Lisp_Object Vamiga_mouse_item;
+extern Lisp_Object MouseMap;
+int amiga_remap_bsdel;
+int amiga_remap_numeric_keypad;
+int amiga_mouse_initialized;
+int amiga_wb_initialized;
+int emacs_iconified;
+
+static int amiga_pos_x(int x)
+{
+ return (x - emacs_win->BorderLeft) / emacs_win->RPort->Font->tf_XSize;
+}
+
+static int amiga_pos_y(int y)
+{
+ return (y - emacs_win->BorderTop) / emacs_win->RPort->Font->tf_YSize;
+}
+
+static void amiga_change_size(void)
+{
+ int new_height = amiga_pos_y(emacs_win->Height - emacs_win->BorderBottom);
+ int new_width = amiga_pos_x(emacs_win->Width - emacs_win->BorderRight);
+
+ /* Hack to force redisplay */
+ if (screen_height == new_height) screen_height--;
+ /* I consider that refreshes are possible during a select, which is
+ true for the current state of emacs */
+ change_screen_size(new_height, new_width, 0, !selecting && !waiting_for_input, 1);
+}
+
+/* Get terminal size from system.
+ Store number of lines into *heightp and width into *widthp.
+ If zero or a negative number is stored, the value is not valid. */
+
+void get_window_size (widthp, heightp)
+ int *widthp, *heightp;
+{
+ if (emacs_win)
+ {
+ *heightp = amiga_pos_y(emacs_win->Height - emacs_win->BorderBottom);
+ *widthp = amiga_pos_x(emacs_win->Width - emacs_win->BorderRight);
+ }
+ else
+ {
+ *heightp = 0;
+ *widthp = 0;
+ }
+}
+
+static int set_min_size(struct Window *win, struct TextFont *font,
+ WORD *minw, WORD *minh)
+{
+ *minw = 11 * font->tf_XSize + win->BorderLeft + win->BorderRight;
+ *minh = 4 * font->tf_YSize + win->BorderTop + win->BorderBottom;
+
+ return (int)WindowLimits(win, *minw, *minh, 0, 0);
+}
+
+struct fill
+{
+ struct Layer *layer;
+ struct Rectangle bounds;
+ WORD offsetx, offsety;
+};
+
+/* __interrupt disables stack checking. -ch3/19/93. */
+static ULONG __asm __saveds __interrupt
+fill_background(register __a2 struct RastPort *obj,
+ register __a1 struct fill *msg)
+{
+ struct Layer *l;
+
+ SetAPen(obj, background);
+ SetDrMd(obj, JAM1);
+ SetAfPt(obj, 0, 0);
+ SetWrMsk(obj, 0xff);
+ /* Gross hack starts here */
+ l = obj->Layer;
+ obj->Layer = 0;
+ /* Stops */
+ RectFill(obj, msg->bounds.MinX, msg->bounds.MinY,
+ msg->bounds.MaxX, msg->bounds.MaxY);
+ /* Starts again */
+ obj->Layer = l;
+ /* And finally dies */
+
+ return 0;
+}
+
+static void clear_window(void)
+{
+ SetAPen(emacs_win->RPort, background);
+ RectFill(emacs_win->RPort, emacs_win->BorderLeft, emacs_win->BorderTop,
+ emacs_win->Width - emacs_win->BorderRight - 1,
+ emacs_win->Height - emacs_win->BorderBottom - 1);
+}
+
+static int make_reset_string(void)
+{
+ sprintf(reset_string, CONSOLE_RESET, foreground, background, background);
+}
+
+void reset_window(void)
+{
+ make_reset_string();
+ if (emacs_win)
+ {
+ screen_puts (reset_string, strlen(reset_string));
+ clear_window();
+ amiga_change_size ();
+ }
+}
+
+static void close_app_win(void)
+{
+ if (emacs_app_win)
+ {
+ struct AppMessage *msg;
+
+ RemoveAppWindow(emacs_app_win); /* What can I do if it fails ?! */
+ while (msg = (struct AppMessage *)GetMsg(wbport)) ReplyMsg(msg);
+ }
+}
+
+static int close_emacs_window(void)
+{
+ close_app_win();
+ inputsig &= ~(1L << emacs_win->UserPort->mp_SigBit);
+ _device_close(emacs_console);
+ if(emacs_win)
+ {
+ /* put title back the way it should be -ch3/19/93. */
+ ShowTitle(emacs_win->WScreen, !emacs_backdrop);
+ }
+ CloseWindow(emacs_win);
+ emacs_console = 0;
+ emacs_win = 0;
+ ConsoleDevice = 0;
+}
+
+/* We need this function becuase we do not always have the string
+ * for the screen we opened on. for example LockPubScreen(NULL);
+ * This function will get the name by looping through all public
+ * screens looking for the one that matches ours. -ch3/20/93 */
+
+char *get_screen_name(struct Screen *this, char *namebuf)
+{
+ struct PubScreenNode *pubscreens =
+ (struct PubScreenNode *)LockPubScreenList()->lh_Head;
+
+ while (pubscreens->psn_Node.ln_Succ)
+ {
+ if (pubscreens->psn_Screen == this)
+ {
+ strcpy(namebuf, pubscreens->psn_Node.ln_Name);
+ UnlockPubScreenList();
+ return namebuf;
+ }
+ pubscreens = (struct PubScreenNode *)pubscreens->psn_Node.ln_Succ;
+ }
+ /* Failed to find screen */
+ namebuf[0] = '\0';
+ UnlockPubScreenList();
+
+ return 0;
+}
+
+/* added two parameters to eliminate the need for the global
+ * which was causing some unwanted effect (bugs). -ch3/19/93 */
+
+static enum { ok, no_screen, no_window }
+open_emacs_window(UWORD x, UWORD y, UWORD w, UWORD h, int backdrop,
+ char *pubscreen_name)
+ /* Open or reopen emacs window */
+{
+ WORD minw, minh;
+ struct Screen *new_screen;
+ struct Window *new_win;
+ struct IOStdReq *new_console;
+ int no_backdrop = !backdrop;
+
+ new_screen = LockPubScreen(pubscreen_name);
+
+ if (!new_screen)
+ return no_screen;
+
+ /* removed newwindow structure, and added as tag
+ * items so that we can change them easier. -ch3/16/93. */
+
+ new_win = OpenWindowTags(0, WA_Left, x, WA_Top, y,
+ WA_Width, w, WA_Height, h, /* Static items */
+ WA_AutoAdjust, 1, WA_NewLookMenus, 1,
+ WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_RAWKEY |
+ IDCMP_MOUSEBUTTONS| IDCMP_NEWSIZE |
+ IDCMP_MENUPICK | IDCMP_MENUHELP,
+ WA_PubScreen, new_screen,
+ WA_BackFill, &background_hook,
+ WA_MenuHelp, 1, WA_Activate, 1,
+ WA_SimpleRefresh, 1,
+ WA_MaxWidth, -1, WA_MaxHeight, -1,
+ WA_Backdrop, backdrop, /* changing items */
+ WA_Borderless, backdrop,
+ WA_CloseGadget, no_backdrop,
+ WA_SizeGadget, no_backdrop,
+ WA_DragBar, no_backdrop,
+ WA_DepthGadget, no_backdrop,
+ WA_Title, no_backdrop ?
+ "GNU Emacs 18.59, Amiga port "VERS : 0,
+ TAG_END);
+
+ UnlockPubScreen(0L, new_screen);
+
+ if (new_win)
+ {
+ /* if emacs_backdrop then the screen title will show BEHIND the window
+ -ch3/16/93. */
+ ShowTitle(new_screen, !emacs_backdrop);
+ SetFont(new_win->RPort, font);
+
+ if (set_min_size(new_win, font, &minw, &minh) &&
+ (new_console = (struct IOStdReq *)
+ _device_open("console.device", CONU_CHARMAP, CONFLAG_NODRAW_ON_NEWSIZE,
+ (APTR)new_win, sizeof(*new_win),
+ sizeof(struct IOStdReq))))
+ {
+ inputsig |= 1L << new_win->UserPort->mp_SigBit;
+ ConsoleDevice = (struct Library *)new_console->io_Device;
+ emacs_app_win = AddAppWindowA(0, 0, new_win, wbport, 0);
+
+ /* Copy the info into permanent storage */
+ emacs_win = new_win;
+ emacs_console = new_console;
+
+ /* fetch the name of the current screen -ch3/19/93 */
+ emacs_screen_name = get_screen_name(emacs_win->WScreen,
+ emacs_screen_name_storage);
+
+ emacs_backdrop = backdrop;
+
+ reset_window();
+
+ return ok;
+ }
+ CloseWindow(new_win);
+ }
+ return no_window;
+}
+
+void force_window(void)
+{
+ if (!emacs_win && !emacs_iconified)
+ {
+ if (open_emacs_window(emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
+ emacs_screen_name) != ok)
+ {
+ /* Try to return to defaults (Workbench, etc) */
+ if (open_emacs_window(0, 0, 640, 200, 0, 0) != ok)
+ _fail("I've lost my window ! Exiting.");
+ }
+ resume_menus();
+ }
+}
+
+/* returns:
+ * -2 if msg is not class RAWKEY
+ * same as RawKeyConvert otherwise:
+ * buffer length if <= kbsize
+ * -1 else
+ */
+static DeadKeyConvert(struct IntuiMessage *msg, UBYTE *kbuffer, int kbsize,
+ struct KeyMap *kmap)
+{
+ static struct InputEvent ievent = {0, IECLASS_RAWKEY, 0, 0, 0};
+ int extra = 0, res;
+
+ if (msg->Class != RAWKEY) return (-2);
+
+ /* Do some keymapping ourselves to make emacs users happy */
+
+ /* Ctrl-space becomes Ctrl-@ */
+ if (msg->Code == 0x40 && msg->Qualifier & CONTROL_MASK)
+ {
+ *kbuffer = 0;
+ return 1;
+ }
+ /* Backspace becomes DEL */
+ if (msg->Code == 0x41 && amiga_remap_bsdel)
+ {
+ *kbuffer = 0177;
+ return 1;
+ }
+ /* And DEL becomes CTRL-D */
+ if (msg->Code == 0x46 && amiga_remap_bsdel)
+ {
+ *kbuffer = 04;
+ return 1;
+ }
+ /* Stick numeric pad prefix in front of numeric keypad chars */
+ if (msg->Qualifier & IEQUALIFIER_NUMERICPAD && amiga_remap_numeric_keypad)
+ {
+ *kbuffer++ = 'x' & 037;
+ *kbuffer++ = '^' & 037;
+ *kbuffer++ = 'K';
+ kbsize -= 3;
+ extra = 3;
+ }
+
+ /* pack input event */
+ ievent.ie_Code = msg->Code;
+
+ /* Ignore meta in decoding keys */
+ ievent.ie_Qualifier = msg->Qualifier & ~META_MASK;
+
+ /* get previous codes from location pointed to by IAddress
+ * this pointer is valid until IntuiMessage is replied.
+ */
+ ievent.ie_position.ie_addr = *((APTR *)msg->IAddress);
+ ievent.ie_position.ie_dead.ie_prev1DownQual &= ~META_MASK;
+ ievent.ie_position.ie_dead.ie_prev2DownQual &= ~META_MASK;
+
+ res = RawKeyConvert(&ievent, kbuffer, kbsize, kmap);
+ return res ? res + extra : 0;
+}
+
+void add_wbevent(struct WBArg *wbarg)
+{
+ char filename[256];
+
+ if (wbarg->wa_Lock && NameFromLock(wbarg->wa_Lock, filename, 256))
+ {
+ struct wbevent *event;
+
+ if (wbarg->wa_Name) AddPart(filename, wbarg->wa_Name, 256);
+ if (event = (struct wbevent *)malloc(offsetof(struct wbevent, file) +
+ strlen(filename) + 1))
+ {
+ event->next = wbevents;
+ strcpy(event->file, filename);
+ wbevents = event;
+ }
+ }
+}
+
+void check_window(int force)
+{
+ ULONG class;
+ USHORT code, qualifier;
+ UWORD mx, my;
+ unsigned char buf[32];
+ int buflen, deiconify, i;
+ struct IntuiMessage *msg;
+ int mouse_event = FALSE, wb_event = FALSE;
+ struct AppMessage *amsg;
+
+ force_window();
+
+ if (emacs_win)
+ while (msg = (struct IntuiMessage *)GetMsg(emacs_win->UserPort))
+ {
+ class = msg->Class;
+ code = msg->Code;
+ qualifier = msg->Qualifier;
+ mx = msg->MouseX; my = msg->MouseY;
+ buflen = DeadKeyConvert(msg, buf, 32, 0);
+ ReplyMsg(msg);
+
+ switch (class)
+ {
+ case IDCMP_CLOSEWINDOW: {
+ enque(030, FALSE); enque(03, FALSE); /* ^X^C */
+ break;
+ }
+ case IDCMP_RAWKEY: {
+ if (buflen > 0)
+ {
+ unsigned char *sbuf = buf;
+ int meta = qualifier & META_MASK;
+
+ /* Don't set META on CSI */
+ do enque(*sbuf++, meta); while (--buflen);
+ }
+ break;
+ }
+ case IDCMP_NEWSIZE: amiga_change_size(); break;
+ case IDCMP_MENUPICK: case IDCMP_MENUHELP:
+ if (code == MENUNULL) break; /* else fall through */
+ case IDCMP_MOUSEBUTTONS: {
+ mouse_event = TRUE;
+ if (event_num == EVENTSIZE) break;
+
+ events[event_in].class = class;
+ events[event_in].code = code;
+ events[event_in].qual = qualifier;
+ events[event_in].x = mx;
+ events[event_in].y = my;
+ event_num++;
+ event_in = (event_in + 1) % EVENTSIZE;
+
+ break;
+ }
+ }
+ }
+ /* Handle App requests */
+ while (amsg = (struct AppMessage *)GetMsg(wbport))
+ switch (amsg->am_Type)
+ {
+ case MTYPE_APPICON: case MTYPE_APPWINDOW:
+ /* Add an event for all these files */
+ for (i = 0; i < amsg->am_NumArgs; i++) add_wbevent(amsg->am_ArgList + i);
+ wb_event = TRUE;
+ /* Reply to the message, and deiconify if was icon */
+ deiconify = amsg->am_Type == MTYPE_APPICON;
+ ReplyMsg(amsg);
+ if (deiconify && emacs_icon)
+ /* Reopen window */
+ if (open_emacs_window(emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
+ emacs_screen_name) == ok)
+ {
+ resume_menus();
+ RemoveAppIcon(emacs_icon);
+ emacs_icon = 0;
+ emacs_iconified = 0;
+ }
+ break;
+ default: ReplyMsg(amsg); break;
+ }
+
+ if (amiga_mouse_initialized && (force && event_num > 0 || mouse_event))
+ {
+ enque(AMIGASEQ, FALSE); enque('M', FALSE);
+ }
+ if (amiga_wb_initialized && (force && wbevents || wb_event))
+ {
+ enque(AMIGASEQ, FALSE); enque('W', FALSE);
+ }
+}
+
+void setup_intchar(char intchar)
+{
+ char cqbuf[2];
+
+ if (MapANSI(&intchar, 1, cqbuf, 1, 0) == 1)
+ {
+ intkey_code = cqbuf[0];
+ intkey_qualifier = cqbuf[1];
+ }
+ else
+ {
+ /* Default is CTRL-G in usa0 keymap */
+ intkey_code = 0x24;
+ intkey_qualifier = IEQUALIFIER_CONTROL;
+ }
+}
+
+/* Hack to detect interrupt char as soon as it is pressed */
+/* __interrupt disables stack checking. -ch3/19/93.*/
+static long __saveds __interrupt __asm
+int_handler(register __a0 struct InputEvent *ev)
+{
+ struct InputEvent *ep, *laste;
+ static struct InputEvent retkey;
+ ULONG lock = LockIBase(0);
+
+ if (emacs_win && IntuitionBase->ActiveWindow == emacs_win)
+ {
+ laste = 0;
+
+ /* run down the list of events to see if they pressed the magic key */
+ for (ep = ev; ep; laste = ep, ep = ep->ie_NextEvent)
+ if (ep->ie_Class == IECLASS_RAWKEY &&
+ (ep->ie_Qualifier & 0xff) == intkey_qualifier &&
+ ep->ie_Code == intkey_code)
+ {
+ /* Remove this key from input sequence */
+ if (laste) laste->ie_NextEvent = ep->ie_NextEvent;
+ else ev = ep->ie_NextEvent;
+
+ Vquit_flag = Qt;
+ Signal(_us, SIGBREAKF_CTRL_C);
+ }
+ }
+ UnlockIBase(lock);
+
+ /* pass on the pointer to the event */
+ return (long)ev;
+}
+
+DEFUN ("amiga-mouse-events", Famiga_mouse_events, Samiga_mouse_events, 0, 0, 0,
+ "Return number of pending mouse events from Intuition.")
+ ()
+{
+ register Lisp_Object tem;
+
+ check_intuition ();
+
+ XSET (tem, Lisp_Int, event_num);
+
+ return tem;
+}
+
+DEFUN ("amiga-proc-mouse-event", Famiga_proc_mouse_event, Samiga_proc_mouse_event,
+ 0, 0, 0,
+ "Pulls a mouse event out of the mouse event buffer and dispatches\n\
+the appropriate function to act upon this event.")
+()
+{
+ register Lisp_Object mouse_cmd;
+ register char com_letter;
+ register char key_mask;
+ register Lisp_Object tempx;
+ register Lisp_Object tempy;
+ extern Lisp_Object get_keyelt ();
+ extern int meta_prefix_char;
+ struct event *ev;
+ int posx, posy;
+
+ check_intuition ();
+
+ if (event_num) {
+ ev = &events[event_out];
+ event_out = (event_out + 1) % EVENTSIZE;
+ event_num--;
+ if (ev->class == MOUSEBUTTONS)
+ {
+ switch (ev->code)
+ {
+ case SELECTDOWN: com_letter = 2; break;
+ case SELECTUP: com_letter = 6; break;
+ case MIDDLEDOWN: com_letter = 1; break;
+ case MIDDLEUP: com_letter = 5; break;
+ case MENUDOWN: com_letter = 0; break;
+ case MENUUP: com_letter = 4; break;
+ default: com_letter = 3; break;
+ }
+ posx = amiga_pos_x(ev->x);
+ posy = amiga_pos_y(ev->y);
+ XSET (tempx, Lisp_Int, min (screen_width-1, max (0, posx)));
+ XSET (tempy, Lisp_Int, min (screen_height-1, max (0, posy)));
+ }
+ else
+ {
+ /* Must be Menu Pick or Help */
+ com_letter = ev->class == IDCMP_MENUPICK ? 3 : 7;
+
+ /* The parameters passed describe the selected item */
+ XSET (tempx, Lisp_Int, MENUNUM(ev->code));
+ XSET (tempy, Lisp_Int, ITEMNUM(ev->code));
+ }
+ if (ev->qual & META_MASK) com_letter |= 0x20;
+ if (ev->qual & SHIFT_MASK) com_letter |= 0x10;
+ if (ev->qual & CONTROL_MASK) com_letter |= 0x40;
+
+ Vamiga_mouse_pos = Fcons (tempx, Fcons (tempy, Qnil));
+ Vamiga_mouse_item = make_number (com_letter);
+ mouse_cmd = get_keyelt (access_keymap (MouseMap, com_letter));
+ if (NULL (mouse_cmd)) {
+ bell ();
+ Vamiga_mouse_pos = Qnil;
+ }
+ else return call1 (mouse_cmd, Vamiga_mouse_pos);
+ }
+ return Qnil;
+}
+
+DEFUN ("amiga-get-mouse-event", Famiga_get_mouse_event, Samiga_get_mouse_event,
+ 1, 1, 0,
+ "Get next mouse event out of mouse event buffer (com-letter (x y)).\n\
+ARG non-nil means return nil immediately if no pending event;\n\
+otherwise, wait for an event.")
+(arg)
+Lisp_Object arg;
+{
+ register char com_letter;
+ register char key_mask;
+
+ register Lisp_Object tempx;
+ register Lisp_Object tempy;
+ struct event *ev;
+ int posx, posy;
+
+ check_intuition ();
+
+ if (NULL (arg))
+ {
+ amiga_consume_input();
+ while (!event_num)
+ {
+ int rfds = 1;
+
+ select(1, &rfds, 0, 0, 0);
+ amiga_consume_input();
+ }
+ }
+ /*** ??? Surely you don't mean to busy wait??? */
+
+ if (event_num) {
+ ev = &events[event_out];
+ event_out = (event_out + 1) % EVENTSIZE;
+ event_num--;
+ switch (ev->code)
+ {
+ case SELECTDOWN: com_letter = 2; break;
+ case SELECTUP: com_letter = 6; break;
+ case MIDDLEDOWN: com_letter = 1; break;
+ case MIDDLEUP: com_letter = 5; break;
+ case MENUDOWN: com_letter = 0; break;
+ case MENUUP: com_letter = 4; break;
+ default: com_letter = 3; break;
+ }
+ if (ev->qual & META_MASK) com_letter |= 0x20;
+ if (ev->qual & SHIFT_MASK) com_letter |= 0x10;
+ if (ev->qual & CONTROL_MASK) com_letter |= 0x40;
+
+ posx = amiga_pos_x(ev->x);
+ posy = amiga_pos_y(ev->y);
+ XSET (tempx, Lisp_Int, min (screen_width-1, max (0, posx)));
+ XSET (tempy, Lisp_Int, min (screen_height-1, max (0, posy)));
+
+ Vamiga_mouse_pos = Fcons (tempx, Fcons (tempy, Qnil));
+ Vamiga_mouse_item = make_number (com_letter);
+ return Fcons (com_letter, Fcons (Vamiga_mouse_pos, Qnil));
+ }
+ return Qnil;
+}
+
+DEFUN ("amiga-get-wb-event", Famiga_get_wb_event, Samiga_get_wb_event,
+ 1, 1, 0,
+ "Get next Workbench event out of workbench event buffer (a file name).\n\
+ARG non-nil means return nil immediately if no pending event;\n\
+otherwise, wait for an event.")
+(arg)
+Lisp_Object arg;
+{
+ Lisp_Object file;
+ struct wbevent *ev;
+
+ check_intuition ();
+
+ if (NULL (arg))
+ {
+ amiga_consume_input();
+ while (!wbevents)
+ {
+ int rfds = 1;
+
+ select(1, &rfds, 0, 0, 0);
+ amiga_consume_input();
+ }
+ }
+ /*** ??? Surely you don't mean to busy wait??? */
+
+ if (wbevents) {
+ file = build_string(wbevents->file);
+ ev = wbevents;
+ wbevents = wbevents->next;
+ free(ev);
+ return file;
+ }
+ return Qnil;
+}
+
+DEFUN("amiga-set-foreground-color", Famiga_set_foreground_color,
+ Samiga_set_foreground_color, 1, 1, "nPen number: ",
+ "Use PEN as foreground color")
+ (pen)
+{
+ int fg;
+
+ check_intuition();
+ CHECK_NUMBER(pen, 0);
+
+ fg = XUINT (pen);
+ if (pen > 7) error("Pen colors must be between 0 & 7");
+ foreground = fg;
+ reset_window();
+ return Qnil;
+}
+
+DEFUN("amiga-set-background-color", Famiga_set_background_color,
+ Samiga_set_background_color, 1, 1, "nPen number: ",
+ "Use PEN as background color")
+ (pen)
+{
+ int bg;
+
+ check_intuition();
+ CHECK_NUMBER(pen, 0);
+
+ bg = XUINT (pen);
+ if (pen > 7) error("Pen colors must be between 0 & 7");
+ background = bg;
+ reset_window();
+ return Qnil;
+}
+
+DEFUN("amiga-set-inverse-fill-pen", Famiga_set_inverse_fill_pen,
+ Samiga_set_inverse_fill_pen, 1, 1, "nPen number: ",
+ "Use PEN's color for inverse fills (0-7 or 8 for reverse)")
+ (pen)
+{
+ int ifp = 8;
+
+ check_intuition();
+ CHECK_NUMBER(pen, 0);
+
+ ifp = XUINT (pen);
+ if (pen > 8)
+ error("choices are from 0 to 8");
+ inverse_fill_pen = ifp;
+ reset_window();
+ return Qnil;
+}
+
+DEFUN("amiga-set-inverse-text-pen", Famiga_set_inverse_text_pen,
+ Samiga_set_inverse_text_pen, 1, 1, "nPen number: ",
+ "Use PEN's color for inverse fills (0-7 or 8 for reverse)")
+ (pen)
+{
+ int itp = 8;
+
+ check_intuition();
+ CHECK_NUMBER(pen, 0);
+
+ itp = XUINT (pen);
+ if (pen > 8)
+ error("choices are from 0 to 8");
+ inverse_text_pen = itp;
+ reset_window();
+ return Qnil;
+}
+
+DEFUN("amiga-set-font", Famiga_set_font, Samiga_set_font, 2, 2,
+ "sFont: \n\
+nSize: ",
+ "Set font used for window to FONT with given HEIGHT.\n\
+The font used must be non-proportional.")
+(wfont, height)
+{
+ struct TextAttr attr;
+ struct TextFont *newfont;
+ char *fname;
+ struct Lisp_String *fstr;
+ WORD minw, minh, oldmw, oldmh;
+
+ CHECK_STRING (wfont, 0);
+ CHECK_NUMBER (height, 0);
+
+ check_intuition();
+
+ fstr = XSTRING (wfont);
+ fname = (char *)alloca (fstr->size + 6);
+ strcpy (fname, fstr->data);
+ strcat (fname, ".font");
+ attr.ta_Name = fname;
+ attr.ta_YSize = XFASTINT (height);
+ attr.ta_Style = 0;
+ attr.ta_Flags = 0;
+ newfont = OpenDiskFont (&attr);
+
+ if (!newfont)
+ error ("Font %s %d not found", fstr->data, XFASTINT (height));
+ if (newfont->tf_Flags & FPF_PROPORTIONAL)
+ {
+ CloseFont(newfont);
+ error ("Font %s %d is proportional", fstr->data, XFASTINT (height));
+ }
+
+ if (emacs_win)
+ {
+ if (!set_min_size(emacs_win, newfont, &minw, &minh))
+ {
+ CloseFont(newfont);
+ if (!set_min_size(emacs_win, font, &oldmw, &oldmh))
+ _fail("Failed to restore old font, exiting.");
+ error("Window is too small for this font, need at least %d(w) by %d(h)",
+ minw, minh);
+ }
+ SetFont(emacs_win->RPort, newfont);
+ }
+ if (font_opened) CloseFont(font);
+ font_opened = TRUE;
+ font = newfont;
+ reset_window();
+ return Qnil;
+}
+
+DEFUN("amiga-set-geometry", Famiga_set_geometry, Samiga_set_geometry, 4, MANY, 0,
+ "Set Emacs window geometry and screen.\n\
+First 4 parameters are the (X,Y) position of the top-left corner of the window\n\
+and its WIDTH and HEIGHT. These must be big enough for an 11x4 characters window.\n\
+If nil is given for any of these, that means to keep the same value as before.\n\
+The optional argument SCREEN specifies which screen to use, nil stands for the\n\
+same screen as the window is on, t stands for the default public screen (normally\n\
+the Workbench), a string specifies a given public screen.\n\
+If optional argument BACKDROP is t, a backdrop window is used.")
+ (nargs, args)
+ int nargs;
+ Lisp_Object *args;
+{
+ Lisp_Object x, y, w, h, scr = Qnil, backdrop = Qnil;
+ int opened;
+ WORD tempx, tempy, tempw, temph;
+ char *screen_name;
+ int use_backdrop;
+
+ if (nargs > 6) error("Too many arguments to amiga-set-geometry");
+ x = args[0]; y = args[1]; w = args[2]; h = args[3];
+ if (nargs > 4)
+ {
+ scr = args[4];
+ if (nargs > 5) backdrop = args[5];
+ }
+
+ check_intuition();
+
+ if (!NULL (x))
+ {
+ CHECK_NUMBER(x, 0);
+ tempx = XUINT(x);
+ }
+ else tempx = EMACS_X();
+ if (!NULL (y))
+ {
+ CHECK_NUMBER(y, 0);
+ tempy = XUINT(y);
+ }
+ else tempy = EMACS_Y();
+ if (!NULL (w))
+ {
+ CHECK_NUMBER(w, 0);
+ tempw = XUINT(w);
+ }
+ else tempw = EMACS_W();
+ if (!NULL (h))
+ {
+ CHECK_NUMBER(h, 0);
+ temph = XUINT(h);
+ }
+ else temph = EMACS_H();
+
+ use_backdrop = !NULL(backdrop);
+
+ if (scr == Qt) screen_name = 0; /* set to zero for def. */
+ else if (!NULL (scr))
+ {
+ CHECK_STRING (scr, 0);
+ screen_name = XSTRING (scr)->data;
+ }
+ else screen_name = emacs_screen_name;
+
+ if (emacs_win)
+ {
+ struct Window *old_win = emacs_win;
+ struct IOStdReq *old_console = emacs_console;
+
+ suspend_menus();
+ opened = open_emacs_window(tempx, tempy, tempw, temph, use_backdrop,
+ screen_name);
+ if (opened != ok)
+ {
+ resume_menus();
+
+ if (opened == no_window) error("Failed to open desired window");
+ else if (screen_name)
+ error("Unknown public screen %s", screen_name);
+ else error("The default screen wasn't found !?");
+ }
+
+ _device_close(old_console);
+ CloseWindow(old_win);
+ if (!resume_menus()) error("Failed to recover menus (No memory?)");
+ }
+ else /* No window, set defaults */
+ {
+ emacs_screen_name = screen_name;
+ if (screen_name)
+ {
+ emacs_screen_name_storage[MAXPUBSCREENNAME] = '\0';
+ strncpy(emacs_screen_name_storage, screen_name, MAXPUBSCREENNAME);
+ }
+ emacs_x = tempx;
+ emacs_y = tempy;
+ emacs_w = tempw;
+ emacs_h = temph;
+ emacs_backdrop = use_backdrop;
+ }
+ return Qnil;
+}
+
+
+/* The next 2 functions are very usefull for writing
+ * arexx/lisp functions that interact with other programs
+ * that will be sharing the same screen. -ch3/19/93. */
+
+DEFUN("amiga-get-window-geometry",
+ Famiga_get_window_geometry, Samiga_get_window_geometry, 0, 0, 0,
+ "Get Emacs window geometry.\n\
+a list returned is of the form: (iconified x y width height backdrop)\n\
+where x, y, width, height are integers, backdrop is t or nil and iconified\n\
+is t if the window is iconified and nil otherwise")
+()
+{
+ Lisp_Object x, y, w, h, b, i;
+
+ XSET(x, Lisp_Int, EMACS_X());
+ XSET(y, Lisp_Int, EMACS_Y());
+ XSET(w, Lisp_Int, EMACS_W());
+ XSET(h, Lisp_Int, EMACS_H());
+ b = emacs_backdrop ? Qt : Qnil;
+ i = emacs_iconified ? Qt : Qnil;
+
+ return Fcons(i, Fcons(x, Fcons(y, Fcons(w, Fcons(h, Fcons(b, Qnil))))));
+}
+
+DEFUN("amiga-get-screen-geometry",
+ Famiga_get_screen_geometry, Samiga_get_screen_geometry, 0, 0, 0,
+ "Get geometry of the screen emacs window resides on.\n\
+a list returned is of the form: (name x y width height)\n\
+where name is a string, x, y, width, height are integers.\n\
+Only the public screen name is returned if the window is not currently open.\n\
+In this last case, the name may be nil if the window will be opened on the\n\
+default public screen.")
+()
+{
+ Lisp_Object name;
+
+ if (emacs_screen_name) name = Qnil;
+ else name = build_string(emacs_screen_name);
+
+ if(emacs_win)
+ {
+ struct Screen *s = emacs_win->WScreen;
+ Lisp_Object x, y, w, h;
+
+ XSET(x, Lisp_Int, s->LeftEdge);
+ XSET(y, Lisp_Int, s->TopEdge);
+ XSET(w, Lisp_Int, s->Width);
+ XSET(h, Lisp_Int, s->Height);
+
+ return Fcons(name, Fcons(x, Fcons(y, Fcons(w, Fcons(h, Qnil)))));
+ }
+ return Fcons(name, Qnil);
+}
+
+DEFUN("amiga-iconify", Famiga_iconify, Samiga_iconify, 0, 0, "",
+ "Toggle the emacs iconification state.")
+()
+{
+ check_intuition();
+
+ if (emacs_iconified)
+ {
+ /* Deiconify */
+
+ /* Reopen window */
+ if (open_emacs_window(emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
+ emacs_screen_name) != ok)
+ error("Failed to deiconify (No memory?)");
+ resume_menus();
+
+ RemoveAppIcon(emacs_icon);
+ emacs_icon = 0;
+ emacs_iconified = 0;
+ }
+ else
+ if (emacs_icon = AddAppIconA(0, 0, "Emacs", wbport, 0, &emacs_icon_object, 0))
+ {
+ if (emacs_win)
+ {
+ /* Close window */
+ emacs_x = EMACS_X(); emacs_y = EMACS_Y();
+ emacs_w = EMACS_W(); emacs_h = EMACS_H();
+ suspend_menus();
+ close_emacs_window();
+ }
+ emacs_iconified = 1;
+ }
+ else error("Iconify attempt failed\n");
+
+ return Qnil;
+}
+
+DEFUN("amiga-set-icon-pos", Famiga_set_icon_pos, Samiga_set_icon_pos, 2, 2,
+"nX position: \n\
+nY position: ",
+ "Set the X Y position of the icon for emacs when iconified.")
+ (Lisp_Object x, Lisp_Object y)
+{
+ long xpos, ypos;
+
+ if (NULL (x)) emacs_icon_object.do_CurrentX = NO_ICON_POSITION;
+ else
+ {
+ CHECK_NUMBER (x, 0);
+ emacs_icon_object.do_CurrentX = XINT(x);
+ }
+ if (NULL (y)) emacs_icon_object.do_CurrentY = NO_ICON_POSITION;
+ else
+ {
+ CHECK_NUMBER (y, 0);
+ emacs_icon_object.do_CurrentY = XINT(y);
+ }
+
+ return Qnil;
+}
+
+struct EClockVal scount[16], ecount[16];
+long total[16], counting[16], nb[16], susp[16];
+
+void start_count(int n)
+{
+ nb[n]++;
+ if (counting[n]) printf("Restarted %d\n", n);
+ counting[n] = 1;
+ /*ReadEClock(&scount[n]);*/
+}
+
+void stop_count(int n)
+{
+ if (counting[n])
+ {
+ /*ReadEClock(&ecount[n]);*/
+ counting[n] = 0;
+
+ total[n] += ecount[n].ev_lo - scount[n].ev_lo;
+ }
+}
+
+void suspend_count(int n)
+{
+ if (counting[n] && susp[n]++ == 0)
+ {
+ /*ReadEClock(&ecount[n]);*/
+ total[n] += ecount[n].ev_lo - scount[n].ev_lo;
+ }
+}
+
+void resume_count(int n)
+{
+ if (counting[n] && --susp[n] == 0) /*ReadEClock(&scount[n])*/;
+}
+
+disp_counts(void)
+{
+ int i;
+
+ for (i = 0; i < 16; i++)
+ {
+ printf("%d(%d) ", total[i], nb[i]);
+ total[i] = nb[i] = 0;
+ }
+ printf("\n");
+}
+
+void screen_puts(char *str, unsigned int len)
+{
+ if (emacs_win)
+ {
+ int i;
+
+ emacs_console->io_Command = CMD_WRITE;
+ emacs_console->io_Data = (APTR)str;
+ emacs_console->io_Length = len;
+
+ /* start_count(0);
+ for (i = 1; i <= 6; i++) suspend_count(i);*/
+ DoIO(emacs_console);
+ /* for (i = 1; i <= 6; i++) resume_count(i);
+ stop_count(0);*/
+ }
+}
+
+DEFUN ("amiga-activate-window", Famiga_activate_window, Samiga_activate_window, 0, 0, 0,
+ "Makes emacs window the currently active one.")
+ ()
+{
+ if(emacs_win) {
+ ActivateWindow(emacs_win);
+ return Qnil;
+ }
+ error("No window to make active.");
+ return Qnil;
+}
+
+DEFUN ("amiga-window-to-front", Famiga_window_to_front, Samiga_window_to_front, 0, 0, 0,
+ "Pulls the emacs window to the front (including screen)")
+ ()
+{
+ if(emacs_win) {
+ WindowToFront(emacs_win);
+ ScreenToFront(emacs_win->WScreen);
+ return Qnil;
+ }
+ error("No window to pull to the front.");
+ return Qnil;
+}
+
+DEFUN ("amiga-window-to-back", Famiga_window_to_back, Samiga_window_to_back, 0, 0, 0,
+ "Pushes the emacs window to the back (including screen)")
+ ()
+{
+ if(emacs_win) {
+ WindowToBack(emacs_win);
+ ScreenToBack(emacs_win->WScreen);
+ return Qnil;
+ }
+ error("No window to push back.");
+ return Qnil;
+}
+
+
+void syms_of_amiga_screen(void)
+{
+ DEFVAR_LISP ("amiga-mouse-item", &Vamiga_mouse_item,
+ "Encoded representation of last mouse click, corresponding to\n\
+numerical entries in amiga-mouse-map.");
+ Vamiga_mouse_item = Qnil;
+ DEFVAR_LISP ("amiga-mouse-pos", &Vamiga_mouse_pos,
+ "Current x-y position of mouse by row, column as specified by font.");
+ Vamiga_mouse_pos = Qnil;
+
+ DEFVAR_BOOL ("amiga-remap-bsdel", &amiga_remap_bsdel,
+ "*If true, map DEL to Ctrl-D and Backspace to DEL. \n\
+This is the most convenient (and default) setting. If nil, don't remap.");
+ amiga_remap_bsdel = 1;
+
+ DEFVAR_BOOL ("amiga-remap-numeric-keypad", &amiga_remap_numeric_keypad,
+ "*If true, numeric keypad keys are prefixed with C-x C-^ K.\n\
+This enables you to remap them, but causes problems with functions like\n\
+isearch-forward-regexp on some keyboards. Default to true.");
+ amiga_remap_numeric_keypad = 1;
+
+ DEFVAR_BOOL ("amiga-mouse-initialized", &amiga_mouse_initialized,
+ "Set to true once lisp has been setup to process mouse commands.\n\
+No mouse processing request (C-X C-^ M) will be queued while this is nil.");
+ amiga_mouse_initialized = 0;
+
+ DEFVAR_BOOL ("amiga-wb-initialized", &amiga_wb_initialized,
+ "Set to true once lisp has been setup to process workbench commands.\n\
+No workbench processing request (C-X C-^ W) will be queued while this is nil.");
+ amiga_mouse_initialized = 0;
+
+ defsubr (&Samiga_mouse_events);
+ defsubr (&Samiga_proc_mouse_event);
+ defsubr (&Samiga_get_mouse_event);
+ defsubr (&Samiga_get_wb_event);
+ defsubr (&Samiga_set_font);
+ defsubr (&Samiga_set_geometry);
+ defsubr (&Samiga_set_background_color);
+ defsubr (&Samiga_set_foreground_color);
+ defsubr (&Samiga_iconify);
+ defsubr (&Samiga_set_icon_pos);
+
+ /* New functions -ch3/19/93. */
+ defsubr (&Samiga_set_inverse_text_pen);
+ defsubr (&Samiga_set_inverse_fill_pen);
+ defsubr (&Samiga_window_to_front);
+ defsubr (&Samiga_window_to_back);
+ defsubr (&Samiga_activate_window);
+ defsubr (&Samiga_get_window_geometry);
+ defsubr (&Samiga_get_screen_geometry);
+
+}
+
+void init_amiga_screen(void)
+{
+ event_num = event_in = event_out = 0;
+
+ if (!((IntuitionBase = (struct IntuitionBase *)
+ OpenLibrary("intuition.library", 37L)) &&
+ (GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0L)) &&
+ (DiskfontBase = OpenLibrary("diskfont.library", 0L)) &&
+ (WorkbenchBase = OpenLibrary("workbench.library", 37)) &&
+ (KeymapBase = OpenLibrary("keymap.library", 36)) &&
+ (input_req = (struct IOStdReq *)_device_open("input.device", 0, 0, 0, 0,
+ sizeof(struct IOStdReq)))))
+ _fail("Need version 2.04 and diskfont.library!");
+
+ if (!(wbport = CreateMsgPort())) no_memory();
+
+ /* Add Ctrl-G detector */
+ int_handler_hook.is_Data = 0;
+ int_handler_hook.is_Code = (void *)int_handler;
+ int_handler_hook.is_Node.ln_Pri = 100; /* 100 not 127 is the standard value
+ * for input stream handlers. -ch3/19/93. */
+ /* it is standard for interrupts to have names -ch3/19/93.*/
+ int_handler_hook.is_Node.ln_Name = "GNU Emacs CTRL-G handler";
+ input_req->io_Command = IND_ADDHANDLER;
+ input_req->io_Data = (APTR)&int_handler_hook;
+
+ /* wasn't checking for error. -ch3/19/93. */
+ if(0 == DoIO(input_req))
+ hooked = TRUE;
+ else
+ {
+ hooked = FALSE;
+ _fail("couldn't get input handler hook for CTRL-G");
+ }
+
+ inputsig |= 1L << wbport->mp_SigBit;
+
+ background_hook.h_Entry = (ULONG (*)()) fill_background; /* added cast. */
+ font = GfxBase->DefaultFont;
+
+ init_amiga_menu();
+}
+
+void cleanup_amiga_screen(void)
+{
+ if (hooked)
+ {
+ input_req->io_Command = IND_REMHANDLER;
+ input_req->io_Data = (APTR)&int_handler_hook;
+ DoIO(input_req);
+ }
+ close_app_win();
+ if (wbport) DeleteMsgPort(wbport);
+ cleanup_amiga_menu();
+ _device_close(emacs_console);
+ if (emacs_win) CloseWindow(emacs_win);
+ if (font_opened) CloseFont(font);
+ if (IntuitionBase) CloseLibrary(IntuitionBase);
+ if (GfxBase) CloseLibrary(GfxBase);
+ if (DiskfontBase) CloseLibrary(DiskfontBase);
+ if (WorkbenchBase) CloseLibrary(WorkbenchBase);
+ if (KeymapBase) CloseLibrary(KeymapBase);
+ _device_close(input_req);
+}
diff -rup --new-file baseline/fsf/emacs18/src/amiga_serial.c amiga/fsf/emacs18/src/amiga_serial.c
--- baseline/fsf/emacs18/src/amiga_serial.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_serial.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,72 @@
+#include <exec/types.h>
+#include <devices/serial.h>
+#include <stdio.h>
+#include <internal/devices.h>
+
+#include <proto/exec.h>
+#include <proto/dos.h>
+
+#include "amiga.h"
+
+static struct MsgPort *SerReadPort;
+static struct IOExtSer *SerReadRequest, *SerWriteRequest;
+static char ser_inbuf[2];
+char *far serial_device = "serial.device";
+long far serial_unit;
+
+void init_amiga_serial(void)
+{
+ if ((SerWriteRequest = (struct IOExtSer *)
+ _device_open(serial_device, serial_unit, 0L,
+ 0L, 0, sizeof(struct IOExtSer))) &&
+ (SerReadPort = CreateMsgPort()) &&
+ (SerReadRequest = (struct IOExtSer *)CreateIORequest(SerReadPort, sizeof (struct IOExtSer))))
+ {
+ SerReadRequest->IOSer.io_Device = SerWriteRequest->IOSer.io_Device;
+ SerReadRequest->IOSer.io_Unit = SerWriteRequest->IOSer.io_Unit;
+ ser_inbuf[1]=0;
+ SerReadRequest->IOSer.io_Command = CMD_READ;
+ SerWriteRequest->IOSer.io_Command = CMD_WRITE;
+ SerReadRequest->IOSer.io_Length = 1;
+ SerReadRequest->IOSer.io_Data = &ser_inbuf[0];
+ SendIO(SerReadRequest);
+
+ inputsig |= 1L << SerReadPort->mp_SigBit;
+ }
+ else _fail("No memory or serial.device missing");
+}
+
+void cleanup_amiga_serial(void)
+{
+ if (SerReadRequest)
+ {
+ AbortIO(SerReadRequest);
+ WaitIO(SerReadRequest);
+ DeleteIORequest(SerReadRequest);
+ }
+ if (SerReadPort) DeletePort(SerReadPort);
+ _device_close(SerWriteRequest);
+}
+
+void check_serial(int force)
+{
+ while (CheckIO(SerReadRequest))
+ {
+ int c = ser_inbuf[0];
+ SendIO(SerReadRequest);
+ enque(c, FALSE);
+ }
+}
+
+void serial_puts(char *str, int len)
+{
+
+ SerWriteRequest->IOSer.io_Length = len;
+ SerWriteRequest->IOSer.io_Data = str;
+ DoIO(SerWriteRequest);
+}
+
+unsigned long serial_baud_rate(void)
+{
+ return SerWriteRequest->io_Baud;
+}
diff -rup --new-file baseline/fsf/emacs18/src/amiga_sysdep.c amiga/fsf/emacs18/src/amiga_sysdep.c
--- baseline/fsf/emacs18/src/amiga_sysdep.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_sysdep.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,375 @@
+/* Interfaces to system-dependent kernel and library entries.
+Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY. No author or distributor
+accepts responsibility to anyone for the consequences of using it
+or for whether it serves any particular purpose or works at all,
+unless he says so in writing. Refer to the GNU Emacs General Public
+License for full details.
+
+Everyone is granted permission to copy, modify and redistribute
+GNU Emacs, but only under the conditions described in the
+GNU Emacs General Public License. A copy of this license is
+supposed to have been given to you along with GNU Emacs so you
+can know your rights and responsibilities. It should be in a
+file named COPYING. Among other things, the copyright notice
+and this notice must be preserved on all copies. */
+
+#include <exec/types.h>
+#include <dos/dos.h>
+#include <dos/dosextens.h>
+#include <dos/var.h>
+#include <exec/execbase.h>
+#include <exec/tasks.h>
+#include <utility/tagitem.h>
+#include <workbench/startup.h>
+#include <workbench/workbench.h>
+#include <proto/exec.h>
+#include <proto/dos.h>
+#include <proto/icon.h>
+
+#include <string.h>
+#include <ios1.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <setjmp.h>
+#include <unistd.h>
+#include <internal/vars.h>
+
+#undef LONGBITS
+#undef NULL
+#include "config.h"
+#include "lisp.h"
+#include "emacssignal.h"
+
+#define min(x,y) ((x) > (y) ? (y) : (x))
+
+#include "termhooks.h"
+#include "termchar.h"
+#include "termopts.h"
+#include "dispextern.h"
+#include "amiga.h"
+
+#define EMACS_TOOL_SIZE 128 /* Room for path to emacs executable */
+
+struct Library *IconBase;
+extern struct ExecBase *SysBase;
+
+/*long __stack = 40000;*/ /* Minimum stack size, used by c.o */
+int amiga_process_stack_size;
+
+int amiga_initialized;
+int amiga_create_icons; /* If true, we create icons when saving files */
+enum exit_method amiga_fail_exit = use_xcexit;
+int selecting;
+
+/* Emacs sysdep routines */
+/* --------------------- */
+
+set_exclusive_use(int fd) {}
+
+/* Suspend the Emacs process; give terminal to its superior. */
+sys_suspend()
+{
+ /* This could have been iconify, but:
+ a) Not good for serial lines.
+ b) emacs stays active while iconified */
+}
+
+char *get_system_name()
+{
+ static char sysname[32];
+
+ gethostname(sysname, sizeof sysname);
+ return sysname;
+}
+
+/*
+ * flush any pending output
+ * (may flush input as well; it does not matter the way we use it)
+ */
+
+flush_pending_output (channel)
+ int channel;
+{
+}
+
+wait_for_termination (pid)
+ int pid;
+{
+ while (1)
+ {
+ sigsetmask (sigmask (SIGCHLD));
+ if (0 > kill (pid, 0))
+ {
+ sigsetmask (SIGEMPTYMASK);
+ break;
+ }
+ sigpause (SIGEMPTYMASK);
+ }
+}
+
+/* A few general amiga support routines */
+/* ------------------------------------ */
+
+char *expand_path(char *path, char *buf, int len)
+{
+ BPTR dirlock;
+ APTR window;
+
+ window = _us->pr_WindowPtr;
+ _us->pr_WindowPtr = (APTR)-1;
+ dirlock = Lock(path, ACCESS_READ);
+ _us->pr_WindowPtr = window;
+ if (dirlock) /* Expand lock name */
+ {
+ if (!NameFromLock(dirlock, buf, len)) buf = 0;
+ UnLock(dirlock);
+ return buf;
+ }
+ return 0;
+}
+
+#undef select
+int emacs_select(int nfds, int *rfds, int *wfds, int *efds, struct timeval *timeout)
+{
+ int ret;
+
+ selecting = TRUE;
+ ret = select(nfds, rfds, wfds, efds, timeout);
+ selecting = FALSE;
+ return ret;
+}
+
+void no_memory(void)
+{
+ _fail("No memory");
+}
+
+char *amiga_path(void)
+{
+ char *path, *pp, name[128];
+ int pathsize;
+ struct CommandLineInterface *cli;
+ BPTR lock;
+ long l, *lp, nlen;
+
+ pathsize = 128;
+ path = (char *)xmalloc(pathsize);
+
+ strcpy(path, ".");
+ pp = path + 1;
+
+ if (!(cli = (struct CommandLineInterface *)((long)_us->pr_CLI << 2)))
+ return path;
+
+ l = (long)cli->cli_CommandDir;
+ while (l) {
+ *pp++ = ',';
+ l <<= 2;
+ lp = (long *)l;
+ lock = (BPTR)*(lp + 1);
+ NameFromLock(lock, name, 128);
+ nlen = strlen(name);
+ if (pp + nlen + 5 >= path + pathsize)
+ {
+ char *newpath;
+
+ pathsize = 2 * pathsize + nlen;
+ newpath = (char *)xrealloc(path, pathsize);
+ pp = newpath + (pp - path);
+ path = newpath;
+ }
+ memcpy(pp, name, nlen);
+ pp += nlen;
+ l = *lp;
+ }
+ /* Use of +5 above guarantees that there is enough space for c: */
+ strcpy(pp, ",c:");
+
+ return path;
+}
+
+/* Some general amiga commands */
+/* --------------------------- */
+
+#define emacs_file_icon_width 54
+#define emacs_file_icon_height 22
+#define emacs_file_icon_num_planes 2
+
+static UWORD chip emacs_file_icon_data[2][22][4] = {
+ {
+ 0x0000,0x0000,0x0000,0x0400,0x0000,0x0000,0x0000,0x0c00,
+ 0x0000,0x0000,0x0000,0x0c00,0x07ff,0xffff,0xffe0,0x0c00,
+ 0x0400,0x0000,0x0030,0x0c00,0x0400,0x0000,0x0028,0x0c00,
+ 0x04ff,0xffff,0xfe24,0x0c00,0x0400,0x0000,0x0022,0x0c00,
+ 0x04ff,0xffff,0xfe3f,0x0c00,0x0400,0x0000,0x0000,0x8c00,
+ 0x04ff,0xffc0,0x0000,0x8c00,0x0400,0x0000,0x0000,0x8c00,
+ 0x0400,0x0000,0x0000,0x8c00,0x0400,0x0000,0x0000,0x8c00,
+ 0x04ff,0xffff,0xfe00,0x8c00,0x0400,0x0000,0x0000,0x8c00,
+ 0x04ff,0xffff,0xfe00,0x8c00,0x0400,0x0000,0x0000,0x8c00,
+ 0x07ff,0xffff,0xffff,0x8c00,0x0000,0x0000,0x0000,0x0c00,
+ 0x0000,0x0000,0x0000,0x0c00,0x7fff,0xffff,0xffff,0xfc00
+ },
+ {
+ 0xffff,0xffff,0xffff,0xf800,0x8000,0x0000,0x0000,0x0000,
+ 0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,
+ 0x83ff,0xffff,0xffc0,0x0000,0x83ff,0xffff,0xffd0,0x0000,
+ 0x8300,0x0000,0x01d8,0x0000,0x83ff,0xffff,0xffdc,0x0000,
+ 0x8300,0x0000,0x01c0,0x0000,0x83ff,0xffff,0xffff,0x0000,
+ 0x8300,0x003f,0xffff,0x0000,0x83ff,0xffff,0xffff,0x0000,
+ 0x83ff,0xffff,0xffff,0x0000,0x83ff,0xffff,0xffff,0x0000,
+ 0x8300,0x0000,0x01ff,0x0000,0x83ff,0xffff,0xffff,0x0000,
+ 0x8300,0x0000,0x01ff,0x0000,0x83ff,0xffff,0xffff,0x0000,
+ 0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,
+ 0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000
+ },
+};
+struct Image far emacs_file_icon_image = {
+ 0, 0,
+ emacs_file_icon_width, emacs_file_icon_height, emacs_file_icon_num_planes,
+ (UWORD *)emacs_file_icon_data,
+ 3, 0,
+ 0
+};
+
+static char *far emacs_file_tooltypes[] = {
+ "FILETYPE=TEXT",
+ 0
+};
+
+static char far emacs_tool[EMACS_TOOL_SIZE];
+
+static struct DiskObject far emacs_file_icon_object = {
+ WB_DISKMAGIC, WB_DISKVERSION,
+ { 0, 0, 0, emacs_file_icon_width, emacs_file_icon_height,
+ GFLG_GADGIMAGE | GADGBACKFILL, GACT_IMMEDIATE | GACT_RELVERIFY, GTYP_BOOLGADGET,
+ (APTR)&emacs_file_icon_image },
+ WBPROJECT, emacs_tool, emacs_file_tooltypes,
+ NO_ICON_POSITION, NO_ICON_POSITION,
+ 0, 0,
+ 40000 /* Stack size for emacs */
+};
+
+DEFUN ("amiga-put-icon", Famiga_put_icon, Samiga_put_icon, 2, 2, 0,
+ "Create an icon for FILE.\n\
+If FORCE is non-nil create it unconditionally, otherwise only if one doesn't exist.\n\
+Returns t if an icon was created, nil otherwise.")
+ (file, force)
+Lisp_Object file, force;
+{
+ char *fname;
+ struct DiskObject *obj;
+
+ CHECK_STRING(file, 0);
+ fname = XSTRING(file)->data;
+
+ if (NULL (force) && (obj = GetDiskObject(fname)))
+ {
+ /* Icon exists, don't overwrite */
+ FreeDiskObject(obj);
+ return Qnil;
+ }
+ emacs_file_icon_object.do_StackSize = _stack_size;
+ if (PutDiskObject(fname, &emacs_file_icon_object)) return Qt;
+ error("Icon for %s couldn't be created", fname);
+}
+
+/* Amiga initialisation routines */
+/* ----------------------------- */
+
+syms_of_amiga ()
+{
+ DEFVAR_BOOL("amiga-initialized", &amiga_initialized, "");
+ DEFVAR_INT("amiga-malloc-bytes-used", &malloc_bytes_used,
+ "Number of malloc bytes used when emacs was dumped");
+ DEFVAR_BOOL("amiga-create-icons", &amiga_create_icons,
+ "If non-nil, create icons when saving files.");
+ defsubr(&Samiga_put_icon);
+ amiga_process_stack_size = 0;
+ DEFVAR_INT("amiga-process-stack-size", &amiga_process_stack_size,
+ "Size of stack for called processes. 0 means same size as emacs stack.");
+ syms_of_amiga_tty();
+ syms_of_amiga_menu();
+ syms_of_amiga_clipboard();
+}
+
+static void amiga_early_init(int *_argc, char ***_argv)
+{
+ int argc = *_argc;
+ char **argv = *_argv;
+
+ if (argc > 2 && !strcmp(argv[1], "-pure"))
+ {
+ puresize = atoi(argv[2]);
+ argc -= 2; argv += 2;
+ }
+ if (argc > 2 && !strcmp(argv[1], "-malloc"))
+ {
+ malloc_hunk_size = atoi(argv[2]);
+ argc -= 2; argv += 2;
+ }
+ if (argc > 2 && !strcmp(argv[1], "-prealloc"))
+ {
+ pre_alloc = atoi(argv[2]);
+ argc -= 2; argv += 2;
+ }
+ /* Handle the -dev switch, which specifies device & unit to use as terminal */
+ if (argc > 3 && !strcmp (argv[1], "-dev"))
+ {
+ extern char *far serial_device;
+ extern long far serial_unit;
+
+ serial_device = argv[2];
+ serial_unit = atoi(argv[3]);
+ fprintf (stderr, "Using %s (unit %d)\n", serial_device ,serial_unit);
+ argc -= 3; argv += 3;
+ }
+ /* Patch real argc, argv to hide arguments we used */
+ argv[0] = (*_argv)[0];
+ *_argv = argv;
+ *_argc = argc;
+
+ expand_path(argv[0], emacs_tool, EMACS_TOOL_SIZE);
+}
+
+void cleanup_amiga(void)
+{
+ cleanup_clipboard();
+ cleanup_amiga_tty();
+ if (IconBase) CloseLibrary(IconBase);
+}
+
+void amiga_undump_reinit(void)
+/* Post-undump initialisation */
+{
+ extern struct WBStartup *_WBenchMsg;
+
+ emacs_malloc_init();
+ early_amiga_tty();
+ early_clipboard();
+
+ if (!onexit(cleanup_amiga)) _fail("Internal problem with onexit");
+
+ make_environ();
+ IconBase = OpenLibrary("icon.library", 0);
+ if (!IconBase) _fail("Need icon.library");
+ amiga_create_icons = _WBenchMsg != 0;
+
+ init_amiga_tty(); init_clipboard();
+}
+
+#undef main
+main(int argc, char **argv)
+/* Effect: Call emacs_main after doing some early amiga initialisation for emacs.
+*/
+{
+ /* This initialisation may steal some command line options */
+ amiga_early_init(&argc, &argv);
+ emacs_main(argc, argv);
+}
diff -rup --new-file baseline/fsf/emacs18/src/amiga_term.c amiga/fsf/emacs18/src/amiga_term.c
--- baseline/fsf/emacs18/src/amiga_term.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_term.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,388 @@
+/* Amiga terminal control routines.
+ Copyright (C) 1985, 1986, 1987 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+
+#include <stdio.h>
+#include <ctype.h>
+#include "config.h"
+#include "termhooks.h"
+#include "termchar.h"
+#include "termopts.h"
+
+/* internal state */
+
+/* nonzero means supposed to write text in standout mode. */
+static int standout_requested;
+
+static int standout_mode; /* Nonzero when in standout mode. */
+
+static char tens[100] = {
+ '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
+ '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
+ '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
+ '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
+ '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
+ '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
+ '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
+ '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
+ '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
+ '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
+};
+
+static char ones[100] = {
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+};
+
+#define addnum(str, num) if (num < 100) \
+ { *--str = ones[num]; *--str = tens[num]; } \
+ else do { *--str = '0' + num % 10; num /= 10; } while (num != 0)
+
+static background_highlight ();
+static turn_off_highlight ();
+
+
+/* Cursor motion stuff (from cm.c) */
+static int curX, curY;
+
+/* Move to absolute position, specified origin 0 */
+
+Amove_cursor (row, col)
+{
+ char buf[32], *pos = buf + 32;
+
+ if (curY == row && curX == col)
+ return;
+
+ curX = col; curY = row;
+ *--pos = 'H';
+ col = col + 1; row = row + 1;
+ addnum(pos, col);
+ *--pos = ';';
+ addnum(pos, row);
+ *--pos = 0x9b;
+ emacs_output(pos, buf + 32 - pos);
+ if (pos < buf) abort();
+}
+
+
+Aring_bell ()
+{
+ emacs_output("\07", 1);
+}
+
+Aset_terminal_modes ()
+{
+}
+
+Areset_terminal_modes ()
+{
+ turn_off_highlight ();
+}
+
+Aupdate_begin ()
+{
+ /* Hide cursor */
+ emacs_output("\x9b\x30\x20\x70", 4);
+}
+
+Aupdate_end ()
+{
+ background_highlight ();
+ standout_requested = 0;
+ emacs_output("\x9b\x20\x70", 3); /* Show cursor */
+}
+
+
+/* Handle highlighting when TN_standout_width (termcap sg) is not specified.
+ In these terminals, output is affected by the value of standout
+ mode when the output is written.
+
+ These functions are called on all terminals, but do nothing
+ on terminals whose standout mode does not work that way. */
+
+static turn_off_highlight ()
+{
+ if (standout_mode)
+ {
+ extern int background, foreground;
+ extern int inverse_fill_pen, inverse_text_pen;
+ int b = background + 40, f = foreground + 30;
+ if(inverse_fill_pen < 8 && inverse_text_pen < 8)
+ {
+ char buf[32], *pos = buf + 32;
+ /* UnDo inverse fill */
+ *--pos = '\0';
+ *--pos = 'm';
+ addnum(pos, b);
+ *--pos = ';';
+ /* UnDo inverse text */
+ addnum(pos, f);
+ *--pos = 0x9b;
+ emacs_output(pos, buf + 32 - pos);
+ }
+ else
+ {
+ emacs_output("\x9b""27m", 4);
+ }
+ }
+ standout_mode = 0;
+}
+
+static turn_on_highlight ()
+{
+ if (!standout_mode)
+ {
+ extern int inverse_fill_pen, inverse_text_pen;
+ int b = inverse_fill_pen + 40, f = inverse_text_pen + 30;
+ if(inverse_fill_pen < 8 && inverse_text_pen < 8)
+ {
+ char buf[32], *pos = buf + 32;
+ /* Do inverse fill */
+ *--pos = '\0';
+ *--pos = 'm';
+ addnum(pos, b);
+ *--pos = ';';
+
+ /* Do inverse text */
+ addnum(pos, f);
+ *--pos = 0x9b;
+ emacs_output(pos, buf + 32 - pos);
+ }
+ else
+ {
+ emacs_output("\x9b\x37m", 3);
+ }
+ }
+ standout_mode = 1;
+}
+
+/* Set standout mode to the state it should be in for
+ empty space inside windows. What this is,
+ depends on the user option inverse-video. */
+
+static background_highlight ()
+{
+ if (inverse_video)
+ turn_on_highlight ();
+ else
+ turn_off_highlight ();
+}
+
+/* Set standout mode to the mode specified for the text to be output. */
+
+static
+highlight_if_desired ()
+{
+ if (!inverse_video == !standout_requested)
+ turn_off_highlight ();
+ else
+ turn_on_highlight ();
+}
+
+/* External interface to control of standout mode.
+ Call this when about to modify line at position VPOS
+ and not change whether it is highlighted. */
+
+Areassert_line_highlight (highlight, vpos)
+ int highlight;
+ int vpos;
+{
+ standout_requested = highlight;
+}
+
+/* Call this when about to modify line at position VPOS
+ and change whether it is highlighted. */
+
+Achange_line_highlight (new_highlight, vpos, first_unused_hpos)
+ int new_highlight, vpos, first_unused_hpos;
+{
+ standout_requested = new_highlight;
+
+ move_cursor (vpos, 0);
+
+ background_highlight ();
+ clear_end_of_line (first_unused_hpos);
+ reassert_line_highlight (new_highlight, curY);
+}
+
+/* Erase operations */
+
+/* clear from cursor to end of screen */
+Aclear_to_end ()
+{
+ background_highlight ();
+ emacs_output("\x9bJ", 2);
+}
+
+/* Clear entire screen */
+
+Aclear_screen ()
+{
+ background_highlight ();
+ emacs_output("\f", 1);
+ curX = curY = 0;
+}
+
+/* Clear to end of line, but do not clear any standout marker.
+ Assumes that the cursor is positioned at a character of real text,
+ which implies it cannot be before a standout marker
+ unless the marker has zero width.
+
+ Note that the cursor may be moved. */
+
+Aclear_end_of_line (first_unused_hpos)
+ int first_unused_hpos;
+{
+ if (curX >= first_unused_hpos)
+ return;
+
+ background_highlight ();
+ emacs_output("\x9bK", 2);
+}
+
+Aoutput_chars (string, len)
+ register char *string;
+ int len;
+{
+ highlight_if_desired ();
+
+ curX += len;
+ emacs_output(string, len);
+}
+
+/* If start is zero, insert blanks instead of a string at start */
+
+Ainsert_chars (start, len)
+ register char *start;
+ int len;
+{
+ char buf[32], *pos = buf + 32;
+
+ highlight_if_desired ();
+
+ *--pos = '@';
+ addnum(pos, len);
+ *--pos = 0x9b;
+ emacs_output(pos, buf + 32 - pos);
+ if (pos < buf) abort();
+ if (start) emacs_output(start, len);
+}
+
+Adelete_chars (n)
+ register int n;
+{
+ char buf[32], *pos = buf + 32;
+
+ *--pos = 'P';
+ addnum(pos, n);
+ *--pos = 0x9b;
+ emacs_output(pos, buf + 32 - pos);
+ if (pos < buf) abort();
+}
+
+/* Insert N lines at vpos VPOS. If N is negative, delete -N lines. */
+
+Ains_del_lines (vpos, n)
+ int vpos, n;
+{
+ register int i = n > 0 ? n : -n;
+ char buf[32], *pos = buf + 32;
+
+ if (n > 0)
+ {
+ i = n;
+ *--pos = 'L';
+ }
+ else
+ {
+ i = -n;
+ *--pos = 'M';
+ }
+ if (vpos + i >= screen_height) return;
+
+ move_cursor (vpos, 0);
+ background_highlight ();
+ addnum(pos, i);
+ *--pos = 0x9b;
+ emacs_output(pos, buf + 32 - pos);
+ if (pos < buf) abort();
+}
+
+Acalculate_costs (extra, costvec, ncostvec)
+ int extra;
+ int *costvec, *ncostvec;
+{
+ CalcLID(2, 40, extra, 0, costvec, ncostvec);
+}
+
+Aset_terminal_window (size)
+int size;
+{
+}
+
+
+amiga_term_init ()
+{
+ must_write_spaces = FALSE;
+ min_padding_speed = 0;
+ memory_below_screen = FALSE;
+ meta_key = TRUE;
+ scroll_region_ok = FALSE;
+ line_ins_del_ok = FALSE; /* much cleaner display when FALSE -ch3/19/93. */
+ char_ins_del_ok = FALSE;
+ fast_clear_end_of_line = TRUE;
+ no_redraw_on_reenter = FALSE;
+
+ clear_screen_hook = Aclear_screen;
+ clear_end_of_line_hook = Aclear_end_of_line;
+ clear_to_end_hook = Aclear_to_end;
+ ins_del_lines_hook = Ains_del_lines;
+ change_line_highlight_hook = Achange_line_highlight;
+ insert_chars_hook = Ainsert_chars;
+ output_chars_hook = Aoutput_chars;
+ delete_chars_hook = Adelete_chars;
+ ring_bell_hook = Aring_bell;
+ reset_terminal_modes_hook = Areset_terminal_modes;
+ set_terminal_modes_hook = Aset_terminal_modes;
+ update_begin_hook = Aupdate_begin;
+ update_end_hook = Aupdate_end;
+ set_terminal_window_hook = Aset_terminal_window;
+ move_cursor_hook = Amove_cursor;
+ reassert_line_highlight_hook = Areassert_line_highlight;
+
+ dont_calculate_costs = 1;
+ calculate_costs_hook = Acalculate_costs;
+
+ /* Get screen size from system, or else from somewhere ... */
+ get_screen_size (&screen_width, &screen_height);
+ /* Random defaults to avoid any problems */
+ if (screen_width <= 0) screen_width = 80;
+ if (screen_height <= 0) screen_height = 23;
+
+ init_baud_rate ();
+}
diff -rup --new-file baseline/fsf/emacs18/src/amiga_tty.c amiga/fsf/emacs18/src/amiga_tty.c
--- baseline/fsf/emacs18/src/amiga_tty.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/amiga_tty.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,305 @@
+#include "config.h"
+#undef NULL
+#include "lisp.h"
+#include "termchar.h"
+
+#include <stdio.h>
+#include <errno.h>
+#include <internal/files.h>
+#include <internal/vars.h>
+
+#undef LONGBITS
+
+#include <exec/types.h>
+#include <dos/dos.h>
+#include <proto/exec.h>
+
+#include "amiga.h"
+#include "termhooks.h"
+
+static int term_initialised;
+ULONG inputsig;
+
+/* A few tty system dependent routines unused on the Amiga */
+
+setpgrp_of_tty(int pid) {}
+init_sigio() {}
+reset_sigio() {}
+request_sigio() {}
+unrequest_sigio() {}
+
+/* Return nonzero if safe to use tabs in output.
+ At the time this is called, init_sys_modes has not been done yet. */
+
+tabs_safe_p()
+{
+ if (noninteractive)
+ return 1;
+
+ return 0; /* Not safe on Amiga !? */
+}
+
+/* Get terminal size from system.
+ Store number of lines into *heightp and width into *widthp.
+ If zero or a negative number is stored, the value is not valid. */
+
+get_screen_size (widthp, heightp)
+ int *widthp, *heightp;
+{
+ if (term_initialised && !inhibit_window_system)
+ get_window_size(widthp, heightp);
+ else /* We don't known what size the terminal is */
+ {
+ *widthp = 0;
+ *heightp = 0;
+ }
+}
+
+init_baud_rate ()
+{
+ if (noninteractive || !term_initialised) baud_rate = 1200;
+ else if (!inhibit_window_system) baud_rate = 38400;
+ else baud_rate = serial_baud_rate();
+}
+
+void check_intuition ()
+{
+ if (noninteractive || inhibit_window_system)
+ error ("You aren't using a window.");
+}
+
+#define TTYBUFSIZE 256 /* Same size as kbd_buffer */
+static char ttybuf[TTYBUFSIZE];
+static int tty_count;
+#define TTYPUT(c) { if (tty_count < TTYBUFSIZE) ttybuf[tty_count++] = c; }
+
+static int interrupt_char;
+
+void enque(unsigned int c, int meta)
+/* place input keys in keyboard buffer
+ If high bit is set, precede character with ^Q (hack).
+ If meta is true, set high bit.
+ If both the high bit & meta are true, we have a problem. Ignore it.
+ If c == AMIGASEQ (256) enqueue the amiga sequence introducer (C-x C-^)
+*/
+{
+ /* Hack CSI to be AMIGASEQ (to allow defining function keys, etc) */
+ if (c == 0233 || c == AMIGASEQ)
+ {
+ TTYPUT('x' & 037);
+ TTYPUT('^' & 037);
+ }
+ else if (c >= 0200) /* Special character, precede with ^Q */
+ {
+ TTYPUT('q' & 037);
+ TTYPUT(c);
+ }
+ else
+ {
+ if (meta) c |= 0200;
+ if (c == interrupt_char) Signal(_us, SIGBREAKF_CTRL_C);
+ else TTYPUT(c);
+ }
+}
+
+int get_ttycount(void)
+{
+ return tty_count;
+}
+
+init_sys_modes ()
+{
+ extern int quit_char;
+
+ if (noninteractive)
+ return;
+
+ if (inhibit_window_system) clear_screen();
+
+ interrupt_char = quit_char;
+ if (!inhibit_window_system) setup_intchar(interrupt_char);
+}
+
+reset_sys_modes ()
+{
+ if (noninteractive)
+ {
+ fflush (stdout);
+ return;
+ }
+ move_cursor (screen_height - 1, 0);
+ clear_end_of_line (screen_width);
+ /* clear_end_of_line may move the cursor */
+ move_cursor (screen_height - 1, 0);
+}
+
+void amiga_consume_input(void)
+{
+ extern int this_command_key_count;
+ int force = this_command_key_count == 0;
+ /* If force is TRUE & some non-keyboard (eg mouse events) input is pending,
+ insert the appropriate magic sequence in the input stream */
+
+ if (term_initialised)
+ {
+ if (!inhibit_window_system) check_window(force);
+ else check_serial(force);
+ check_arexx(force, TRUE);
+ }
+}
+
+discard_tty_input ()
+{
+ if (noninteractive)
+ return;
+
+ amiga_consume_input();
+ tty_count = 0;
+ chkabort();
+}
+
+/* Code for the fd describing the emacs input (terminal or window) */
+
+static ULONG __regargs ttyin_select_start(void *userinfo, int rd, int wr)
+{
+ if (!inhibit_window_system) force_window();
+
+ return tty_count ? -1 : inputsig;
+}
+
+static void __regargs ttyin_select_poll(void *userinfo, int *rd, int *wr)
+{
+ amiga_consume_input();
+ if (!tty_count) *rd = 0;
+}
+
+static int __regargs ttyin_read(void *userinfo, void *buffer, unsigned int length)
+{
+ amiga_consume_input();
+ if (length > tty_count) length = tty_count;
+ memcpy(buffer, ttybuf, length);
+ tty_count -= length;
+ if (tty_count) memmove(ttybuf, ttybuf + length, tty_count - length);
+
+ return (int)length;
+}
+
+static int __regargs ttyin_write(void *userinfo, void *buffer, unsigned int length)
+{
+ errno = EACCES;
+ return -1;
+}
+
+static int __regargs ttyin_lseek(void *userinfo, long rpos, int mode)
+{
+ errno = ESPIPE;
+ return -1;
+}
+
+static int __regargs ttyin_close(void *userinfo, int internal)
+{
+ return 0;
+}
+
+static int __regargs ttyin_ioctl(void *userinfo, int request, void *data)
+{
+ errno = EINVAL;
+ return -1;
+}
+
+#define CBUFSIZE 1024
+#undef fwrite
+#undef fflush
+
+char cbuffer[CBUFSIZE + 16], *cbuffer_pos;
+
+int emacs_fflush(FILE *f)
+{
+ if (noninteractive || f != stdout) return fflush(f);
+ else
+ {
+ int len;
+
+ len = cbuffer_pos - cbuffer;
+ if (term_initialised)
+ if (!inhibit_window_system) screen_puts(cbuffer, len);
+ else serial_puts(cbuffer, len);
+ if (termscript) fwrite (cbuffer, 1, len, termscript);
+ cbuffer_pos = cbuffer;
+
+ return 0;
+ }
+}
+
+void emacs_putchar(int c)
+{
+ if (cbuffer_pos >= cbuffer + CBUFSIZE) emacs_fflush(stdout);
+ *cbuffer_pos++ = c;
+}
+
+void emacs_output(char *str, int size)
+{
+ if (cbuffer_pos + size > cbuffer + CBUFSIZE) emacs_fflush(stdout);
+ if (size > CBUFSIZE)
+ {
+ if (term_initialised)
+ if (!inhibit_window_system) screen_puts(str, size);
+ else serial_puts(str, size);
+ }
+ else
+ {
+ memcpy(cbuffer_pos, str, size);
+ cbuffer_pos += size;
+ }
+}
+
+void emacs_fwrite(char *str, unsigned int nblocks, unsigned int len, FILE *f)
+{
+ if (noninteractive || f != stdout) fwrite (str, nblocks, len, f);
+ else
+ {
+ unsigned int size;
+
+ if (nblocks == 1) size = len; /* Emacs always uses 1 "block" */
+ else size = nblocks * len;
+
+ emacs_output(str, size);
+ }
+}
+
+void syms_of_amiga_tty(void)
+{
+ syms_of_amiga_screen();
+ syms_of_amiga_rexx();
+}
+
+void init_amiga_tty()
+{
+ inputsig = 0;
+ term_initialised = FALSE;
+ init_amiga_rexx();
+}
+
+void cleanup_amiga_tty()
+{
+ cleanup_amiga_rexx();
+ cleanup_amiga_serial();
+ cleanup_amiga_screen();
+}
+
+void early_amiga_tty()
+{
+ cbuffer_pos = cbuffer;
+ tty_count = 0;
+}
+
+void amiga_term_open(void)
+{
+ inhibit_window_system ? init_amiga_serial() : init_amiga_screen();
+ close(0);
+ if (_alloc_fd((void *)1, FI_READ, ttyin_select_start, ttyin_select_poll, ttyin_read,
+ ttyin_write, ttyin_lseek, ttyin_close, ttyin_ioctl) == 0)
+ term_initialised = TRUE;
+ else _fail("Failed to initialise I/O, no memory ?");
+}
+
diff -rup --new-file baseline/fsf/emacs18/src/buffer.c amiga/fsf/emacs18/src/buffer.c
--- baseline/fsf/emacs18/src/buffer.c Wed May 13 12:39:33 1992
+++ amiga/fsf/emacs18/src/buffer.c Sat Sep 28 00:00:00 1996
@@ -1137,7 +1137,11 @@ init_buffer ()
#ifndef VMS
/* Maybe this should really use some standard subroutine
whose definition is filename syntax dependent. */
- if (buf[strlen (buf) - 1] != '/')
+ if (buf[strlen (buf) - 1] != '/'
+#ifdef AMIGA
+&& buf[strlen (buf) -1] != ':'
+#endif /*AMIGA */
+)
strcat (buf, "/");
#endif /* not VMS */
current_buffer->directory = build_string (buf);
diff -rup --new-file baseline/fsf/emacs18/src/callproc.c amiga/fsf/emacs18/src/callproc.c
--- baseline/fsf/emacs18/src/callproc.c Sat Jul 11 20:26:01 1992
+++ amiga/fsf/emacs18/src/callproc.c Sat Sep 28 00:00:00 1996
@@ -124,11 +124,7 @@ If you quit, the process is killed with
CHECK_STRING (args[0], 0);
if (nargs <= 1 || NULL (args[1]))
-#ifdef VMS
- args[1] = build_string ("NLA0:");
-#else
- args[1] = build_string ("/dev/null");
-#endif /* not VMS */
+ args[1] = build_string (PATH_NULL);
else
args[1] = Fexpand_file_name (args[1], current_buffer->directory);
@@ -177,10 +173,9 @@ If you quit, the process is killed with
if (XTYPE (buffer) == Lisp_Int)
#ifdef VMS
- fd[1] = open ("NLA0:", 0), fd[0] = -1;
+ fd[1] = open (PATH_NULL, 0), fd[0] = -1;
#else
- fd[1] = open ("/dev/null", O_WRONLY), fd[0] = -1;
-#endif /* not VMS */
+ fd[1] = open (PATH_NULL, O_WRONLY), fd[0] = -1;
else
{
pipe (fd);
@@ -193,6 +188,22 @@ If you quit, the process is killed with
synch_process_death = 0;
synch_process_retcode = 0;
+#ifdef AMIGA
+ {
+ register unsigned char *temp;
+
+ if (XTYPE (current_buffer->directory) == Lisp_String)
+ {
+ register int i;
+
+ i = XSTRING (current_buffer->directory)->size;
+ temp = (unsigned char *) alloca (i + 1);
+ bcopy (XSTRING (current_buffer->directory)->data, temp, i);
+ temp[i] = 0;
+ }
+ pid = exec(new_argv[0], new_argv, filefd, fd[1], temp, amiga_process_stack_size);
+ }
+#else
{
/* child_setup must clobber environ in systems with true vfork.
Protect it from permanent change. */
@@ -230,6 +241,7 @@ If you quit, the process is killed with
close (filefd);
close (fd1);
}
+#endif /* not AMIGA */
if (pid < 0)
{
@@ -302,7 +314,7 @@ If you quit, the process is killed with
register Lisp_Object filename_string, start, end, status;
char tempfile[20];
- strcpy (tempfile, "/tmp/emacsXXXXXX");
+ strcpy (tempfile, PATH_TEMP);
mktemp (tempfile);
filename_string = build_string (tempfile);
@@ -318,6 +330,7 @@ If you quit, the process is killed with
unlink (tempfile);
return status;
}
+#ifndef AMIGA
/* This is the last thing run in a newly forked inferior
either synchronous or asynchronous.
@@ -425,6 +438,7 @@ child_setup (in, out, err, new_argv, env
write (1, new_argv[0], strlen (new_argv[0]));
_exit (1);
}
+#endif /* not AMIGA */
init_callproc ()
{
@@ -437,6 +451,15 @@ init_callproc ()
Vexec_path = decode_env_path (0, PATH_EXEC);
Vexec_directory = Ffile_name_as_directory (Fcar (Vexec_path));
Vexec_path = nconc2 (decode_env_path ("PATH", ""), Vexec_path);
+#ifdef AMIGA
+ {
+ char *amiga_path(), *apath = amiga_path();
+
+ Vexec_path = nconc2 (decode_env_path (0, apath), Vexec_path);
+ Vexec_path = nconc2 (decode_env_path (0, "GNUEmacs:c"), Vexec_path);
+ free(apath);
+ }
+#endif
execdir = Fdirectory_file_name (Vexec_directory);
if (access (XSTRING (execdir)->data, 0) < 0)
@@ -447,7 +470,7 @@ init_callproc ()
}
sh = (char *) egetenv ("SHELL");
- Vshell_file_name = build_string (sh ? sh : "/bin/sh");
+ Vshell_file_name = build_string (sh ? sh : PATH_SHELL);
#ifndef MAINTAIN_ENVIRONMENT
/* The equivalent of this operation was done
diff -rup --new-file baseline/fsf/emacs18/src/dired.c amiga/fsf/emacs18/src/dired.c
--- baseline/fsf/emacs18/src/dired.c Sun Mar 22 21:16:41 1992
+++ amiga/fsf/emacs18/src/dired.c Sat Sep 28 00:00:00 1996
@@ -385,7 +385,11 @@ file_name_completion_stat (dirname, dp,
bcopy (XSTRING (dirname)->data, fullname, pos);
#ifndef VMS
+#ifdef AMIGA
+ if ((fullname[pos - 1] != '/')&&(fullname[pos - 1] != ':'))
+#else
if (fullname[pos - 1] != '/')
+#endif
fullname[pos++] = '/';
#endif
diff -rup --new-file baseline/fsf/emacs18/src/dispnew.c amiga/fsf/emacs18/src/dispnew.c
--- baseline/fsf/emacs18/src/dispnew.c Fri Jul 24 12:31:36 1992
+++ amiga/fsf/emacs18/src/dispnew.c Sat Sep 28 00:00:00 1996
@@ -674,11 +674,27 @@ update_screen (force, inhibit_hairy_id)
int preempt_count = baud_rate / 2400 + 1;
extern input_pending;
+ start_count(0);
+
if (screen_height == 0) abort (); /* Some bug zeros some core */
if (force_redisplay)
force = 1;
+#ifdef FAST_DISPLAY
+ /* Don't compute for i/d line if just want cursor motion. */
+ /* Don't allow preemption, etc either */
+ for (i = 0; i < screen_height; i++)
+ if (new_screen->enable[i])
+ break;
+
+ if (i >= screen_height)
+ {
+ update_begin();
+ goto update_done;
+ }
+#endif
+
if (!force)
detect_input_pending ();
if (!force
@@ -695,10 +711,12 @@ update_screen (force, inhibit_hairy_id)
if (!line_ins_del_ok)
inhibit_hairy_id = 1;
+#ifndef FAST_DISPLAY
/* Don't compute for i/d line if just want cursor motion. */
for (i = 0; i < screen_height; i++)
- if (new_screen->enable)
+ if (new_screen->enable[i])
break;
+#endif
/* Try doing i/d line, if not yet inhibited. */
if (!inhibit_hairy_id && i < screen_height)
@@ -742,6 +760,9 @@ update_screen (force, inhibit_hairy_id)
update_line (i);
}
}
+#ifdef FAST_DISPLAY
+update_done:
+#endif
pause = (i < screen_height - 1) ? i + 1 : 0;
/* Now just clean up termcap drivers and set cursor, etc. */
@@ -781,6 +802,7 @@ update_screen (force, inhibit_hairy_id)
}
bzero (new_screen->enable, screen_height);
+ stop_count(0);
return pause;
}
@@ -894,6 +916,57 @@ update_line (vpos)
else
reassert_line_highlight (new_screen->highlight[vpos], vpos);
+#ifdef FAST_DISPLAY
+ if (current_screen->enable[vpos])
+ {
+ obody = current_screen->contents[vpos];
+ olen = current_screen->used[vpos];
+ }
+ else olen = 0;
+
+ nbody = new_screen->contents[vpos];
+ nlen = new_screen->used[vpos];
+
+ /* Pretend trailing spaces are not there at all,
+ unless for one reason or another we must write all spaces. */
+ /* We know that the previous character byte contains 0. */
+ if (! new_screen->highlight[vpos])
+ {
+ if (!must_write_spaces)
+ while (nbody[nlen - 1] == ' ')
+ nlen--;
+ }
+ else
+ {
+ /* For an inverse-video line, give it extra trailing spaces
+ all the way to the screen edge
+ so that the reverse video extends all the way across. */
+ while (nlen < screen_width - 1)
+ nbody[nlen++] = ' ';
+ }
+
+ while (olen > 0 && nlen > 0 && *obody == *nbody)
+ {
+ olen--; nlen--; obody++; nbody++;
+ }
+ if (olen > 0 || nlen > 0)
+ move_cursor (vpos, nbody - new_screen->contents[vpos]);
+ if (nlen > 0) output_chars (nbody, nlen);
+
+ if (olen > nlen && new_screen->used[vpos] != screen_width)
+ clear_end_of_line(current_screen->used[vpos]);
+ /* Exchange contents between current_screen and new_screen. */
+ temp = new_screen->contents[vpos];
+ new_screen->contents[vpos] = current_screen->contents[vpos];
+ current_screen->contents[vpos] = temp;
+
+ /* One way or another, this will enable the line being updated. */
+ current_screen->enable[vpos] = 1;
+ current_screen->used[vpos] = new_screen->used[vpos];
+ current_screen->highlight[vpos] = new_screen->highlight[vpos];
+
+#else /* not FAST_DISPLAY */
+
/* ??? */
if (! current_screen->enable[vpos])
{
@@ -1172,6 +1245,7 @@ update_line (vpos)
temp = new_screen->contents[vpos];
new_screen->contents[vpos] = current_screen->contents[vpos];
current_screen->contents[vpos] = temp;
+#endif /* not FAST_DISPLAY */
}
count_blanks (str)
@@ -1577,8 +1651,18 @@ init_display ()
cursor_in_echo_area = 0;
terminal_type = (char *) 0;
+#ifdef AMIGA
+ amiga_term_open();
+#endif
if (!inhibit_window_system)
{
+#ifdef AMIGA
+ amiga_term_init();
+ /* Using Intuition V2.04 */
+ Vwindow_system = intern ("intuition");
+ Vwindow_system_version = make_number (2);
+ goto term_init_done;
+#endif /* AMIGA */
#ifdef HAVE_X_WINDOWS
extern char *alternate_display;
char *disp = (char *) egetenv ("DISPLAY");
diff -rup --new-file baseline/fsf/emacs18/src/doc.c amiga/fsf/emacs18/src/doc.c
--- baseline/fsf/emacs18/src/doc.c Tue Jan 8 10:25:38 1991
+++ amiga/fsf/emacs18/src/doc.c Sat Sep 28 00:00:00 1996
@@ -21,6 +21,7 @@ the Free Software Foundation, 675 Mass A
#include "config.h"
#include "lisp.h"
#include "buffer.h"
+#include "paths.h"
#include <sys/types.h>
#include <sys/file.h> /* Must be after sys/types.h for USG and BSD4_1*/
@@ -188,7 +189,7 @@ when doc strings are referred to later i
#ifndef CANNOT_DUMP
name = (char *) alloca (XSTRING (filename)->size + 8);
- strcpy (name, "../etc/");
+ strcpy (name, RELPATH_DOC);
#else /* CANNOT_DUMP */
CHECK_STRING (Vexec_directory, 0);
name = (char *) alloca (XSTRING (filename)->size +
diff -rup --new-file baseline/fsf/emacs18/src/dostrip.c amiga/fsf/emacs18/src/dostrip.c
--- baseline/fsf/emacs18/src/dostrip.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/dostrip.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,23 @@
+#include <stdio.h>
+
+#define SIZE 2048
+
+main(int argc, char **argv)
+{
+ char buf[SIZE];
+
+ buf[SIZE - 1] = 0;
+ while (fgets(buf, SIZE - 1, stdin))
+ {
+ if (buf[0] != '#')
+ {
+ char *p = buf, *e;
+
+ while (*p && *p == ' ') p++;
+ e = p + strlen(p);
+ while (e > p && (e[-1] == ' ' || e[-1] == '\t' || e[-1] == '\n')) e--;
+ *e = '\0';
+ if (*p) puts(p);
+ }
+ }
+}
diff -rup --new-file baseline/fsf/emacs18/src/emacs.c amiga/fsf/emacs18/src/emacs.c
--- baseline/fsf/emacs18/src/emacs.c Fri Oct 16 20:51:00 1992
+++ amiga/fsf/emacs18/src/emacs.c Sat Sep 28 00:00:00 1996
@@ -78,6 +78,10 @@ the Free Software Foundation, 675 Mass A
#endif
#endif
+#ifdef AMIGA_DUMP
+#define HAVE_SHM /* Simplifies the ifdefs */
+#endif
+
#ifndef O_RDWR
#define O_RDWR 2
#endif
@@ -323,6 +327,7 @@ main (argc, argv, envp)
xargc = argc;
#endif
+#ifndef AMIGA
/* Handle the -t switch, which specifies filename to use as terminal */
if (skip_args + 2 < argc && !strcmp (argv[skip_args + 1], "-t"))
{
@@ -336,6 +341,7 @@ main (argc, argv, envp)
inhibit_window_system = 1; /* -t => -nw */
#endif
}
+#endif
#ifdef HAVE_X_WINDOWS
/* Handle the -d switch, which means use a different display for X */
if (skip_args + 2 < argc && (!strcmp (argv[skip_args + 1], "-d") ||
@@ -717,7 +723,11 @@ Take symbols from SYMFILE (presumably th
#ifdef VMS
#define SEPCHAR ','
#else
+#ifdef AMIGA /* Can't use : on Amiga */
+#define SEPCHAR ','
+#else
#define SEPCHAR ':'
+#endif
#endif
Lisp_Object
diff -rup --new-file baseline/fsf/emacs18/src/exec.c amiga/fsf/emacs18/src/exec.c
--- baseline/fsf/emacs18/src/exec.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/exec.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,138 @@
+#include "amiga.h"
+#include "processes.h"
+#include <amiga/ioctl.h>
+#include <exec/memory.h>
+#include <dos/dosextens.h>
+#include <dos/dostags.h>
+#include <string.h>
+
+int eexec(char *program, char **argv, int input, int output, int error,
+ char *dir, int stacksize)
+/* input = -1 -> inherit Input()
+ output = -1 -> inherit Output()
+ error = -1 -> inherit pr_CES
+ error = -2 -> stderr = stdout */
+{
+ int index, comsize, close_input, close_output, close_error;
+ char *combuf, *bp;
+ BPTR in, out, err, dirlock;
+ int _pseudo_close(int fd);
+
+ comsize = 256;
+ combuf = malloc(comsize);
+
+ if (input == -1)
+ {
+ in = Input();
+ close_input = FALSE;
+ }
+ else
+ {
+ if (ioctl(input, _AMIGA_GET_FH, &in) == -1) in = 0;
+ close_input = TRUE;
+ _pseudo_close(input);
+ }
+
+ if (output == -1)
+ {
+ out = Output();
+ close_output = FALSE;
+ }
+ else
+ {
+ if (ioctl(output, _AMIGA_GET_FH, &out) == -1) out = 0;
+ close_output = out != in;
+ _pseudo_close(output);
+ }
+
+ if (error == -1)
+ {
+ err = _us->pr_CES;
+ close_error = FALSE;
+ }
+ else if (error == -2)
+ {
+ err = out;
+ close_error = FALSE;
+ }
+ else
+ {
+ if (ioctl(error, _AMIGA_GET_FH, &err) == -1) err = 0;
+ close_error = err != out && err != in;
+ _pseudo_close(error);
+ }
+
+ /* pr_CES is not always defined */
+ if (in && out && (err || error == -1))
+ if (combuf)
+ {
+ bp = combuf;
+ for (index = 0; argv[index] != 0; index++)
+ {
+ /* Use program as argv[0]. This loses some information, but ... */
+ char *arg = index == 0 ? program : argv[index];
+ char *s;
+ int len;
+
+ len = 3;
+ s = arg;
+ while (*s)
+ {
+ len++;
+ if (*s == '*' || *s == '"' || *s == '\n') len++;
+ s++;
+ }
+ if (bp + len + 1 >= combuf + comsize)
+ {
+ char *newbuf;
+
+ comsize += comsize + len;
+ newbuf = realloc(combuf, comsize);
+ if (!newbuf) { errno = ENOMEM; goto error; }
+ bp = newbuf + (bp - combuf);
+ combuf = newbuf;
+ }
+ *bp++ = ' ';
+ *bp++ = '"';
+ s = arg;
+ while (*s)
+ {
+ if (*s == '"' || *s == '*') *bp++ = '*';
+ else if (*s == '\n') *bp++ = '+';
+ *bp++ = *s++;
+ }
+ *bp++ = '"';
+ }
+ *bp = '\0';
+ if (dir) dirlock = Lock(dir, SHARED_LOCK);
+ else dirlock = 0;
+
+ if (dirlock || !dir)
+ {
+ int pid = _start_process(combuf, in, close_input, out, close_output,
+ err, close_error, dirlock, stacksize);
+
+ if (pid != -1)
+ {
+ free(combuf);
+ return pid;
+ }
+ }
+ else errno = convert_oserr(IoErr());
+ if (dirlock) UnLock(dirlock);
+ }
+ else errno = ENOMEM;
+
+ error:
+ if (in && close_input) Close(in);
+ if (out && close_output) Close(out);
+ if (err && close_error) Close(err);
+ if (combuf) free(combuf);
+ return -1;
+}
+
+int exec(char *program, char **argv, int input, int output,
+ char *dir, int stacksize)
+{
+ return eexec(program, argv, input, output, -1, dir, stacksize);
+}
diff -rup --new-file baseline/fsf/emacs18/src/fileio.c amiga/fsf/emacs18/src/fileio.c
--- baseline/fsf/emacs18/src/fileio.c Tue Oct 6 15:02:20 1992
+++ amiga/fsf/emacs18/src/fileio.c Sat Sep 28 00:00:00 1996
@@ -147,6 +147,9 @@ on VMS, perhaps instead a string ending
p = beg + XSTRING (file)->size;
while (p != beg && p[-1] != '/'
+#ifdef AMIGA
+ && p[-1] != ':'
+#endif /* AMIGA */
#ifdef VMS
&& p[-1] != ':' && p[-1] != ']' && p[-1] != '>'
#endif /* VMS */
@@ -174,6 +177,9 @@ or the entire name if it contains no sla
end = p = beg + XSTRING (file)->size;
while (p != beg && p[-1] != '/'
+#ifdef AMIGA
+ && p[-1] != ':'
+#endif /* AMIGA */
#ifdef VMS
&& p[-1] != ':' && p[-1] != ']' && p[-1] != '>'
#endif /* VMS */
@@ -248,9 +254,15 @@ file_name_as_directory (out, in)
out[size] = '\0';
}
#else /* not VMS */
+#ifdef AMIGA
+ /* AmigaOS syntax, append slash if the last char isn't a ':' or '/' */
+ if (out[size] != '/' && out[size] != ':' && size != 0)
+ strcat (out, "/");
+#else /* not AMIGA */
/* For Unix syntax, Append a slash if necessary */
if (out[size] != '/')
strcat (out, "/");
+#endif /* not AMIGA */
#endif /* not VMS */
return out;
}
@@ -464,6 +476,110 @@ initial ~ is expanded. See also the fun
(name, defalt)
Lisp_Object name, defalt;
{
+#ifdef AMIGA
+ unsigned char *nm, *tilde, *newdir, *colon, *t_pos, *target;
+
+ CHECK_STRING (name, 0);
+
+ nm = XSTRING (name)->data;
+ /* Find base directory */
+ if (NULL (defalt))
+ defalt = current_buffer->directory;
+ CHECK_STRING (defalt, 1);
+ newdir = XSTRING (defalt)->data;
+
+ /* Concat newdir w/ nm and canonicalize */
+ /* newdir always contains at least the device name.
+ It is assumed canonical */
+ target = (unsigned char *)alloca(strlen(nm) + strlen(newdir) + 2);
+ file_name_as_directory (target, newdir);
+ t_pos = target + strlen(target);
+
+ while (*nm)
+ {
+ unsigned char *comp_end = nm;
+ int comp_len;
+
+ /* Find next component of path (everything upto the next /) */
+ do comp_end++; while (comp_end[0] && comp_end[-1] != '/' && comp_end[-1] != ':');
+ comp_len = comp_end - nm;
+
+ if (comp_len == 1 && nm[0] == '/' ||
+ nm[0] == '.' && nm[1] == '.' &&
+ (comp_len == 2 || comp_len == 3 && nm[2] == '/'))
+ {
+ /* Previous directory */
+ if (t_pos > target && t_pos[-1] != ':')
+ {
+ t_pos--; /* Back up over / */
+ while (t_pos > target &&
+ t_pos[-1] != ':' && t_pos[-1] != '/') t_pos--;
+ }
+ }
+ else if (comp_len == 2 && nm[0] == '.' && nm[1] == '/' ||
+ comp_len == 1 && nm[0] == '.') ; /* Ignore . */
+ else if (nm[0] == ':') /* Just keep disk name */
+ {
+ char *new_pos;
+
+ *t_pos = 0; /* Limit search for : */
+ t_pos = index(target, ':');
+ if (t_pos) t_pos++;
+ else t_pos = target;
+ }
+ else if (nm[0] == '~' || index(nm, ':'))
+ {
+ char *exp_name;
+
+ if (nm[0] == '~')
+ if (nm[1] == '/' || nm[1] == 0) /* Home directory */
+ {
+ newdir = (unsigned char *) egetenv ("HOME");
+ if (!newdir) newdir = (unsigned char *) "s:";
+ }
+ else
+ {
+ /* Handle ~ followed by user name. */
+ char lastc = nm[comp_len - 1];
+ int len = comp_len - 1;
+
+ if (lastc == ':' || lastc == '/') len--;
+
+ /* ~name becomes name: */
+ newdir = (unsigned char *) alloca (len + 2);
+ bcopy((char *) nm + 1, newdir, len);
+ newdir[len] = ':';
+ newdir[len + 1] = 0;
+ }
+ else /* we have name: */
+ {
+ newdir = (char *)alloca(comp_len + 1);
+ bcopy(nm, newdir, comp_len);
+ newdir[comp_len] = 0;
+ }
+ exp_name = (char *)alloca(1024);
+ if (expand_path(newdir, exp_name, 1024))
+ {
+ char *colon = strchr(exp_name, ':');
+
+ /* Detect paths with multiple colons (eg from PATH:) and
+ leave them alone. They create confusion. */
+ if (!(colon && strchr(colon + 1, ':'))) newdir = exp_name;
+ }
+ target = (unsigned char *)alloca(strlen(nm) + strlen(newdir) + 2);
+ file_name_as_directory (target, newdir);
+ t_pos = target + strlen(target);
+ }
+ else /* Copy component */
+ {
+ bcopy(nm, t_pos, comp_len);
+ t_pos += comp_len;
+ }
+
+ nm = comp_end;
+ }
+ return make_string (target, t_pos - target);
+#else /* not AMIGA */
unsigned char *nm;
register unsigned char *newdir, *p, *o;
@@ -795,6 +911,7 @@ initial ~ is expanded. See also the fun
}
return make_string (target, o - target);
+#endif /* not AMIGA */
}
DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name,
@@ -825,6 +942,23 @@ duplicates what expand-file-name does.")
for (p = nm; p != endp; p++)
{
+#ifdef AMIGA
+ if (p[0] == '~' && p != nm && p[-1] == '/')
+ {
+ nm = p;
+ substituted = 1;
+ }
+ else if (p[0] == ':')
+ {
+ char *p2 = p;
+ while (p2 > nm && p2[-1] != ':' && p2[-1] != '/') p2--;
+ if (p2 != nm)
+ {
+ nm = p2;
+ substituted = 1;
+ }
+ }
+#else /* not AMIGA */
if ((p[0] == '~' ||
#ifdef APOLLO
/* // at start of file name is meaningful in Apollo system */
@@ -845,6 +979,7 @@ duplicates what expand-file-name does.")
nm = p;
substituted = 1;
}
+#endif /* not AMIGA */
}
#ifdef VMS
@@ -1353,6 +1488,13 @@ DEFUN ("file-name-absolute-p", Ffile_nam
CHECK_STRING (filename, 0);
ptr = XSTRING (filename)->data;
+#ifdef AMIGA
+ /* An absolute filename has a non-leading ':' in it */
+ if (*ptr != ':')
+ while (*ptr)
+ if (*ptr++ == ':') return Qt;
+ return Qnil;
+#else /* not AMIGA */
if (*ptr == '/' || *ptr == '~'
#ifdef VMS
/* ??? This criterion is probably wrong for '<'. */
@@ -1364,6 +1506,7 @@ DEFUN ("file-name-absolute-p", Ffile_nam
return Qt;
else
return Qnil;
+#endif /* not AMIGA */
}
DEFUN ("file-exists-p", Ffile_exists_p, Sfile_exists_p, 1, 1, 0,
diff -rup --new-file baseline/fsf/emacs18/src/firstfile.c amiga/fsf/emacs18/src/firstfile.c
--- baseline/fsf/emacs18/src/firstfile.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/firstfile.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,4 @@
+int first_data = 1;
+int first_bss;
+
+void first_function() { }
diff -rup --new-file baseline/fsf/emacs18/src/indent.c amiga/fsf/emacs18/src/indent.c
--- baseline/fsf/emacs18/src/indent.c Sat Apr 18 09:01:07 1992
+++ amiga/fsf/emacs18/src/indent.c Sat Sep 28 00:00:00 1996
@@ -35,6 +35,11 @@ int indent_tabs_mode;
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
+#ifdef EIGHT_BIT
+/* Visible characters */
+extern char visible[];
+#endif
+
/* These three values memoize the current column to avoid recalculation */
/* Some things in set last_known_column_point to -1
to mark the memoized value as invalid */
@@ -115,7 +120,11 @@ current_column ()
}
c = *--ptr;
+#ifdef EIGHT_BIT
+ if (visible[c])
+#else
if (c >= 040 && c < 0177)
+#endif
{
col++;
}
@@ -326,7 +335,11 @@ passed values greater than (screen-width
}
else if (ctl_arrow && (c < 040 || c == 0177))
col++;
+#ifdef EIGHT_BIT
+ else if (!visible[c])
+#else
else if (c < 040 || c >= 0177)
+#endif
col += 3;
}
@@ -373,9 +386,57 @@ compute_motion (from, fromvpos, fromhpos
prev_hpos = hpos;
c = FETCH_CHAR (pos);
+#ifdef EIGHT_BIT
+ if (visible[c])
+#else
if (c >= 040 && c < 0177)
- hpos++;
- else if (c == '\t')
+#endif
+ {
+ unsigned char *p;
+ int gap_pos;
+ int maxhpos;
+
+ if (vpos == tovpos)
+ {
+ maxhpos = tohpos;
+ if (maxhpos > width) maxhpos = width;
+ }
+ else maxhpos = width;
+
+ if (pos < GPT)
+ {
+ gap_pos = GPT;
+ p = BEG_ADDR + pos;
+ }
+ else
+ {
+ gap_pos = -1;
+ p = GAP_SIZE + BEG_ADDR + pos;
+ }
+ do
+ {
+ hpos++;
+ if (hpos >= maxhpos)
+ {
+ prev_hpos = hpos - 1;
+ if (hpos >= width) goto check_hpos;
+ /* We've reached the target pos */
+ pos++;
+ goto done;
+ }
+ pos++;
+ if (pos >= to)
+ {
+ prev_hpos = hpos - 1;
+ goto done;
+ }
+ if (gap_pos == pos) p += GAP_SIZE;
+ c = *p++;
+ }
+ while (visible[c]);
+ prev_hpos = hpos;
+ }
+ if (c == '\t')
{
hpos += tab_width - ((hpos + tab_offset + hscroll - (hscroll > 0)
/* Add tab_width here to make sure positive.
@@ -433,6 +494,7 @@ compute_motion (from, fromvpos, fromhpos
else
hpos += (ctl_arrow && c < 0200) ? 2 : 4;
+check_hpos:
/* Handle right margin. */
if (hpos >= width
&& (hpos > width
@@ -462,6 +524,7 @@ compute_motion (from, fromvpos, fromhpos
}
}
+ done:
val_compute_motion.bufpos = pos;
val_compute_motion.hpos = hpos;
diff -rup --new-file baseline/fsf/emacs18/src/keyboard.c amiga/fsf/emacs18/src/keyboard.c
--- baseline/fsf/emacs18/src/keyboard.c Sat May 16 23:57:15 1992
+++ amiga/fsf/emacs18/src/keyboard.c Sat Sep 28 00:00:00 1996
@@ -1313,7 +1313,13 @@ read_avail_input (nread)
#endif
fcntl (fileno (stdin), F_SETFL, 0);
#else /* not USG */
+#ifdef AMIGA /* This is where the input work finally gets done */
+ /* Note, The nread != 0 case isn't handled as it doesn't arise on the Amiga.
+ (Look carefully at calls to read_avail_input) */
+ nread = read(0, buf, sizeof buf);
+#else /* not AMIGA */
you lose
+#endif /* not AMIGA */
#endif /* not USG */
#endif /* no FIONREAD */
diff -rup --new-file baseline/fsf/emacs18/src/keymap.c amiga/fsf/emacs18/src/keymap.c
--- baseline/fsf/emacs18/src/keymap.c Sat Jul 27 10:43:27 1991
+++ amiga/fsf/emacs18/src/keymap.c Sat Sep 28 00:00:00 1996
@@ -29,6 +29,10 @@ the Free Software Foundation, 675 Mass A
/* Actually allocate storage for these variables */
+#ifdef AMIGA
+#define HAVE_X_WINDOWS /* We want the mouse map too */
+#endif
+
#ifdef HAVE_X_WINDOWS
Lisp_Object MouseMap; /* Keymap for mouse commands */
#endif /* HAVE_X_WINDOWS */
diff -rup --new-file baseline/fsf/emacs18/src/lastfile.c amiga/fsf/emacs18/src/lastfile.c
--- baseline/fsf/emacs18/src/lastfile.c Sat Mar 30 16:05:55 1991
+++ amiga/fsf/emacs18/src/lastfile.c Sat Sep 28 00:00:00 1996
@@ -35,9 +35,23 @@ the Free Software Foundation, 675 Mass A
coming from libraries.
*/
+#ifdef AMIGA
+/* I need to find the end of initialised and unitialised data, as well as of
+ executable code.
+*/
+int last_data = 1;
+int last_bss;
+
+void last_function() { }
+
+/* Some data that shouldn't be dumped */
+#include "amiga_data.c"
+
+#else /* not AMIGA */
#ifdef VMS
/* Prevent the file from being totally empty. */
static dummy () {}
#endif
char my_edata = 0;
+#endif /* not AMIGA */
diff -rup --new-file baseline/fsf/emacs18/src/lisp.h amiga/fsf/emacs18/src/lisp.h
--- baseline/fsf/emacs18/src/lisp.h Thu Mar 5 16:11:31 1992
+++ amiga/fsf/emacs18/src/lisp.h Sat Sep 28 00:00:00 1996
@@ -287,7 +287,7 @@ Lisp_Object;
(XUINT (a) | (XUINT (a) > PURESIZE ? DATA_SEG_BITS : PURE_SEG_BITS))
#else /* not HAVE_SHM */
#ifdef DATA_SEG_BITS
-/* This case is used for the rt-pc.
+/* This case is used for the rt-pc and the Amiga.
In the diffs I was given, it checked for ptr = 0
and did not adjust it in that case.
But I don't think that zero should ever be found
@@ -520,6 +520,13 @@ struct Lisp_Marker
{ if (XTYPE ((x)) == Lisp_Marker) XFASTINT (x) = marker_position (x); \
else if (XTYPE ((x)) != Lisp_Int) x = wrong_type_argument (Qinteger_or_marker_p, (x)); }
+#ifdef AMIGA_DUMP
+#define CHECK_IMPURE(obj) \
+ { extern int *pure, puresize; \
+ if ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + puresize) \
+ && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) \
+ pure_write_error (); }
+#else /* not AMIGA_DUMP */
#ifdef VIRT_ADDR_VARIES
/* For machines like APOLLO where text and data can go anywhere
@@ -529,7 +536,6 @@ struct Lisp_Marker
if ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE) \
&& (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) \
pure_write_error (); }
-
#else /* not VIRT_ADDR_VARIES */
#ifdef PNTR_COMPARISON_TYPE
@@ -548,6 +554,7 @@ struct Lisp_Marker
#endif /* PNTR_COMPARISON_TYPE */
#endif /* VIRT_ADDRESS_VARIES */
+#endif /* not AMIGA_DUMP */
/* Cast pointers to this type to compare them. Some machines want int. */
#ifndef PNTR_COMPARISON_TYPE
diff -rup --new-file baseline/fsf/emacs18/src/lread.c amiga/fsf/emacs18/src/lread.c
--- baseline/fsf/emacs18/src/lread.c Sun Mar 22 21:18:17 1992
+++ amiga/fsf/emacs18/src/lread.c Sat Sep 28 00:00:00 1996
@@ -240,11 +240,15 @@ absolute_filename_p (pathname)
Lisp_Object pathname;
{
register unsigned char *s = XSTRING (pathname)->data;
+#ifdef AMIGA
+ return (*s && index(s + 1, ':')); /* Non-leading : */
+#else
return (*s == '~' || *s == '/'
#ifdef VMS
|| index (s, ':')
#endif /* VMS */
);
+#endif /* not AMIGA */
}
/* Search for a file whose name is STR, looking in directories
@@ -559,7 +563,7 @@ read0 (readcharfun)
}
static int read_buffer_size;
-static char *read_buffer;
+char *read_buffer;
static Lisp_Object
read1 (readcharfun)
diff -rup --new-file baseline/fsf/emacs18/src/m-amiga.h amiga/fsf/emacs18/src/m-amiga.h
--- baseline/fsf/emacs18/src/m-amiga.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/m-amiga.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,129 @@
+/* m- file for GNU Emacs running on AmigaOS 2.04, SAS C compiler 5.10b
+ Copyright (C) 1985, 1986 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY. No author or distributor
+accepts responsibility to anyone for the consequences of using it
+or for whether it serves any particular purpose or works at all,
+unless he says so in writing. Refer to the GNU Emacs General Public
+License for full details.
+
+Everyone is granted permission to copy, modify and redistribute
+GNU Emacs, but only under the conditions described in the
+GNU Emacs General Public License. A copy of this license is
+supposed to have been given to you along with GNU Emacs so you
+can know your rights and responsibilities. It should be in a
+file named COPYING. Among other things, the copyright notice
+and this notice must be preserved on all copies. */
+
+
+/* The following three symbols give information on
+ the size of various data types. */
+/* lisp.h doesn't make any concessions for INTBITS = 16 and
+ NO_UNION_TYPE (use int as lisp object) defined. The following is
+ assuming that the Manx 32 bit int. math package is faster than
+ bitfield implementation, overall. If you want to use INTBITS = 16,
+ you *cannot* define NO_UNION_TYPE. */
+
+#define SHORTBITS 16 /* Number of bits in a short */
+
+#define INTBITS 32 /* Number of bits in an int */
+
+#define LONGBITS 32 /* Number of bits in a long */
+
+#define VALBITS 26 /* Number of bits in an int or pointer offset */
+
+#define GCTYPEBITS 5 /* Number of bits in a type. */
+
+/* Define BIG_ENDIAN iff lowest-numbered byte in a word
+ is the most significant byte. */
+
+#define BIG_ENDIAN
+
+/* Define NO_ARG_ARRAY if you cannot take the address of the first of a
+ * group of arguments and treat it as an array of the arguments. */
+
+/* #define NO_ARG_ARRAY */
+
+/* Define WORD_MACHINE if addresses and such have
+ * to be corrected before they can be used as byte counts. */
+
+#define WORD_MACHINE
+
+/* Define how to take a char and sign-extend into an int.
+ On machines where char is signed, this is a no-op. */
+
+#define SIGN_EXTEND_CHAR(c) (c)
+
+/* Now define a symbol for the cpu type, if your compiler
+ does not define it automatically:
+ Ones defined so far include vax, m68000, ns16000, pyramid,
+ orion, tahoe, APOLLO and many others */
+
+#ifndef m68000
+#define m68000
+#endif
+
+/* Use type int rather than a union, to represent Lisp_Object */
+/* This is desirable for most machines. */
+
+#define NO_UNION_TYPE
+/* Use a struct rather than an int. */
+
+
+/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
+ the 24-bit bit field into an int. In other words, if bit fields
+ are always unsigned.
+
+ If you use NO_UNION_TYPE, this flag does not matter. */
+
+#define EXPLICIT_SIGN_EXTEND
+
+/* We don't have /dev/kmem, so LOAD_AVE_TYPE and LOAD_AVE_CVT are
+ not defined. */
+
+/* Define CANNOT_DUMP on machines where unexec does not work.
+ Then the function dump-emacs will not be defined
+ and temacs will do (load "loadup") automatically unless told otherwise. */
+
+/* #define CANNOT_DUMP */
+
+/* Define VIRT_ADDR_VARIES if the virtual addresses of
+ pure and impure space as loaded can vary, and even their
+ relative order cannot be relied on.
+
+ Otherwise Emacs assumes that text space precedes data space,
+ numerically. */
+
+/* #define VIRT_ADDR_VARIES */
+/* I now rely on AMIGA_DUMP to make appropriate patches in the source */
+
+/* Define C_ALLOCA if this machine does not support a true alloca
+ and the one written in C should be used instead.
+ Define HAVE_ALLOCA to say that the system provides a properly
+ working alloca function and it should be used.
+ Define neither one if an assembler-language alloca
+ in the file alloca.s should be used. */
+
+#define C_ALLOCA
+/* #define HAVE_ALLOCA */
+
+/* Define STACK_DIRECTION for alloca.c */
+#define STACK_DIRECTION -1 /* Grows downward */
+
+/* Define NO_REMAP if memory segmentation makes it not work well
+ to change the boundary between the text section and data section
+ when Emacs is dumped. If you define this, the preloaded Lisp
+ code will not be sharable; but that's better than failing completely. */
+
+#define NO_REMAP
+
+/* Set high (32 - VALBITS) = 6 bits of every pointer to the same as those of
+ &pure[0].
+*/
+#ifdef emacs
+extern long far DataSegBits;
+#endif
+#define DATA_SEG_BITS DataSegBits
diff -rup --new-file baseline/fsf/emacs18/src/paths.h-dist amiga/fsf/emacs18/src/paths.h-dist
--- baseline/fsf/emacs18/src/paths.h-dist Tue Sep 11 17:51:18 1990
+++ amiga/fsf/emacs18/src/paths.h-dist Sat Sep 28 00:00:00 1996
@@ -17,3 +17,19 @@
/* the name of the file !!!SuperLock!!! in the directory
specified by PATH_LOCK. Yes, this is redundant. */
#define PATH_SUPERLOCK "/usr/local/emacs/lock/!!!SuperLock!!!"
+
+/* The path to the file containing the termcap descriptions */
+#define PATH_TERMCAP "/etc/termcap"
+
+/* The relative path (while dumping) to the directory containing
+ the DOC file */
+#define RELPATH_DOC "../etc/"
+
+/* The path for a /dev/null-like device */
+#define PATH_NULL "/dev/null"
+
+/* Path for temporary files (for call-process-region) */
+#define PATH_TEMP "/tmp/emacsXXXXXX"
+
+/* Path to the shell (the one in shell-file-name) */
+#define PATH_SHELL "/bin/sh"
diff -rup --new-file baseline/fsf/emacs18/src/process.c amiga/fsf/emacs18/src/process.c
--- baseline/fsf/emacs18/src/process.c Sat Oct 24 21:42:04 1992
+++ amiga/fsf/emacs18/src/process.c Sat Sep 28 00:00:00 1996
@@ -1203,6 +1203,23 @@ create_process (process, new_argv)
If fork fails, remove_process will clear the bit. */
FD_SET (inchannel, &input_wait_mask);
+#ifdef AMIGA
+ {
+ register unsigned char *temp;
+
+ if (XTYPE (current_buffer->directory) == Lisp_String)
+ {
+ register int i;
+
+ i = XSTRING (current_buffer->directory)->size;
+ temp = (unsigned char *) alloca (i + 1);
+ bcopy (XSTRING (current_buffer->directory)->data, temp, i);
+ temp[i] = 0;
+ }
+ pid = exec(new_argv[0], new_argv, forkin, forkout, temp,
+ amiga_process_stack_size);
+ }
+#else /* not AMIGA */
{
/* child_setup must clobber environ on systems with true vfork.
Protect it from permanent change. */
@@ -1305,6 +1322,7 @@ create_process (process, new_argv)
}
environ = save_environ;
}
+#endif /* not AMIGA */
if (pid < 0)
{
@@ -1314,6 +1332,7 @@ create_process (process, new_argv)
XFASTINT (XPROCESS (process)->pid) = pid;
+#ifndef AMIGA
/* If the subfork execv fails, and it exits,
this close hangs. I don't know why.
So have an interrupt jar it loose. */
@@ -1326,6 +1345,7 @@ create_process (process, new_argv)
start_polling ();
if (forkin != forkout && forkout >= 0)
close (forkout);
+#endif
#ifdef SIGCHLD
#ifdef BSD4_1
diff -rup --new-file baseline/fsf/emacs18/src/s-amiga.h amiga/fsf/emacs18/src/s-amiga.h
--- baseline/fsf/emacs18/src/s-amiga.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/s-amiga.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,215 @@
+/* file for GNU Emacs running on AmigaOS 2.04, SAS C compiler 5.10b
+ Copyright (C) 1985, 1986 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY. No author or distributor
+accepts responsibility to anyone for the consequences of using it
+or for whether it serves any particular purpose or works at all,
+unless he says so in writing. Refer to the GNU Emacs General Public
+License for full details.
+
+Everyone is granted permission to copy, modify and redistribute
+GNU Emacs, but only under the conditions described in the
+GNU Emacs General Public License. A copy of this license is
+supposed to have been given to you along with GNU Emacs so you
+can know your rights and responsibilities. It should be in a
+file named COPYING. Among other things, the copyright notice
+and this notice must be preserved on all copies. */
+
+
+/*
+ * Define symbols to identify the version of Unix this is.
+ * Define all the symbols that apply correctly.
+ */
+
+#ifndef AMIGA
+#define AMIGA
+#endif /* AMIGA */
+
+/* SYSTEM_TYPE should indicate the kind of system you are using.
+ It sets the Lisp variable system-type. */
+
+#define SYSTEM_TYPE "amigaos"
+
+/* Define this if you want a faster redisplay. This saves a lot of CPU
+ time at the expense of more characters to be redrawn.
+ On a bitmapped display you win, with a serial line you probably lose.
+*/
+#define FAST_DISPLAY
+
+/* Define this to display eight bit characters. The actual characters
+ that are visible can be set in init_xdisp ().
+*/
+#define EIGHT_BIT
+
+/* nomultiplejobs should be defined if your system's shell
+ does not have "job control" (the ability to stop a program,
+ run some other program, then continue the first one). */
+
+#define NOMULTIPLEJOBS
+
+/* Define this to include various patches that allow the Amiga to dump.
+ This *must* be defined on the Amiga!
+*/
+#define AMIGA_DUMP
+
+/* Do not use interrupt_input = 1 by default, because in 4.3
+ we can make noninterrupt input work properly. */
+
+/* #undef INTERRUPT_INPUT */ /* This file borrowed from s-bsd4-3.h */
+
+/* First pty name is /dev/ptyp0. */
+
+/* #define FIRST_PTY_LETTER 'p' */
+/*
+ * Define HAVE_TIMEVAL if the system supports the BSD style clock values.
+ * Look in <sys/time.h> for a timeval structure.
+ */
+
+#define HAVE_TIMEVAL
+#define USE_UTIME
+
+/*
+ * Define HAVE_SELECT if the system supports the `select' system call.
+ */
+
+#define HAVE_SELECT
+
+/*
+ * Define HAVE_PTYS if the system supports pty devices.
+ */
+
+/* #define HAVE_PTYS */
+
+/* Define HAVE_SOCKETS if system supports 4.2-compatible sockets. */
+
+/* #define HAVE_SOCKETS */
+
+/* But we do have socket pairs for processes ... */
+#define SKTPAIR
+
+/*
+ * Define NONSYSTEM_DIR_LIBRARY to make Emacs emulate
+ * The 4.2 opendir, etc., library functions.
+ */
+
+/* #define NONSYSTEM_DIR_LIBRARY */
+#define SYSV_SYSTEM_DIR
+
+/* Define this symbol if your system has the functions bcopy, etc. */
+
+#define BSTRING /* #define'ed later on */
+
+/* subprocesses should be defined if you want to
+ have code for asynchronous subprocesses
+ (as used in M-x compile and M-x shell).
+ This is generally OS dependent, and not supported
+ under most USG systems. */
+
+#define subprocesses
+
+#define DID_REMOTE /* Use 0 length write to send eof */
+
+/* If your system uses COFF (Common Object File Format) then define the
+ preprocessor symbol "COFF". */
+
+/* #define COFF */
+
+/* define MAIL_USE_FLOCK if the mailer uses flock
+ to interlock access to /usr/spool/mail/$USER.
+ The alternative is that a lock file named
+ /usr/spool/mail/$USER.lock. */
+
+/* #define MAIL_USE_FLOCK */
+
+/* Define CLASH_DETECTION if you want lock files to be written
+ so that Emacs can tell instantly when you try to modify
+ a file that someone else has modified in his Emacs. */
+
+/* #define CLASH_DETECTION */
+
+/* We use the Berkeley (and usg5.2.2) interface to nlist. */
+
+/* #define NLIST_STRUCT */
+
+/* The file containing the kernel's symbol table is called /vmunix. */
+
+/* #define KERNEL_FILE "/vmunix" */
+
+/* The symbol in the kernel where the load average is found
+ is named _avenrun. */
+
+/* #define LDAV_SYMBOL "_avenrun" */
+
+/* We use our own malloc for 2 reasons:
+ - To check that the 6 (INTBITS - VALBITS) of allocated data are
+ the same as &pure[0].
+ - To release unused memory to the system (SAS's malloc keeps it
+ till you quit)
+*/
+
+#define SYMS_SYSTEM syms_of_amiga()
+
+#define SYSTEM_MALLOC /* But I have replaced the system malloc ... */
+
+#define DEF_PURESIZE 132000 /* Leave space for extra code for Amiga */
+#ifdef emacs
+extern int puresize;
+#endif
+#define PURESIZE puresize /* Puresize is variable ... */
+
+#ifdef emacs
+/* Stdio must be included before redefining putchar */
+#include <stdio.h>
+extern char cbuffer[], *cbuffer_pos;
+#define PENDING_OUTPUT_COUNT(x) (cbuffer_pos - cbuffer)
+#endif
+/* We divert some calls to our routines */
+#define putchar(c) do { extern int noninteractive; \
+ if (noninteractive) putc (c, stdout); \
+ else emacs_putchar(c); } while(0)
+#define fwrite emacs_fwrite
+#define fflush emacs_fflush
+#define random rand
+#define srandom srand
+#define main emacs_main
+#define select emacs_select
+
+#ifdef emacs
+#include <string.h>
+#undef index
+#undef rindex
+#define index strchr
+#define rindex strrchr
+#endif
+
+#define fsync(x) 0 /* Emulate fsync ... */
+
+#ifdef emacs
+#include <sys/wait.h> /* process.c doesn't have appropriate #ifdef's */
+extern int amiga_process_stack_size;
+#endif
+
+/* Here are some symbols for ymakefile's benefit */
+
+#define LIB_STANDARD //unix/src/unix.lib lib:sc.lib lib:amiga.lib
+#define START_FILES lib:c.o firstfile.o
+#define C_DEBUG_SWITCH debug s
+#define C_OPTIMIZE_SWITCH opt
+#define LD_SWITCH_SYSTEM
+#define C_SWITCH_SYSTEM
+#define S_SWITCH_MACHINE /* Nothing! */
+#define UNEXEC amiga_dump.o
+#define OBJECTS_SYSTEM amiga_clipboard.o amiga_tty.o amiga_serial.o \
+ amiga_screen.o amiga_menu.o amiga_malloc.o \
+ amiga_rexx.o simplerexx.o amiga_term.o
+
+
+/* Amiga window-specific stuff */
+
+#define VERS "1.28DG Beta"
+
+#define FALSE 0
+#define TRUE 1
diff -rup --new-file baseline/fsf/emacs18/src/scroll.c amiga/fsf/emacs18/src/scroll.c
--- baseline/fsf/emacs18/src/scroll.c Tue Jan 8 11:04:52 1991
+++ amiga/fsf/emacs18/src/scroll.c Sat Sep 28 00:00:00 1996
@@ -55,6 +55,65 @@ int *DLcost;
int *ILncost;
int *DLncost;
+#ifdef FAST_DISPLAY
+scrolling_1 (window_size, unchanged_at_top, unchanged_at_bottom,
+ draw_cost, old_hash, new_hash, free_at_end)
+ int window_size, unchanged_at_top, unchanged_at_bottom;
+ int *draw_cost;
+ int *old_hash;
+ int *new_hash;
+ int free_at_end;
+{
+ int lines, i;
+ int window_end = unchanged_at_top + window_size;
+
+ /* Rebase arrays at line 0 */
+ old_hash -= unchanged_at_top - 1;
+ new_hash -= unchanged_at_top - 1;
+ draw_cost -= unchanged_at_top - 1;
+
+ /* We can't allow un-enabled lines to be scrolled (they are not redrawable).
+ Restrict window to the first set of contiguous enabled lines
+ (an enabled line has draw_cost[x] != INFINITY) */
+ for (i = unchanged_at_top; i < window_end && draw_cost[i] != INFINITY; i++) ;
+ /*unchanged_at_bottom += window_size - i;*/
+ /*window_size = i - unchanged_at_top;*/
+ window_end = i;
+
+ if (lines = calc_scroll(old_hash, new_hash, unchanged_at_top, window_end))
+ scroll_screen_lines(unchanged_at_top, window_end - lines, lines);
+ else if (lines = calc_scroll(new_hash, old_hash, unchanged_at_top, window_end))
+ scroll_screen_lines(unchanged_at_top + lines, window_end, -lines);
+}
+
+int calc_scroll(int *old_hash, int *new_hash, int from, int to)
+/* For insert attempt, the parameters are correct.
+ For delete attempt, swap the old & new hash parameters
+*/
+{
+ int try = from + 1, lines, i;
+ int hash1 = old_hash[from];
+
+ do
+ {
+ if (hash1 == new_hash[try])
+ {
+ /* Check if other lines match too */
+ lines = try - from; /* Amount to insert */
+ for (i = try + 1; i < to; i++)
+ if (old_hash[i - lines] != new_hash[i]) break;
+ if (i == to) /* It works ! */
+ return lines;
+ }
+ try++;
+ }
+ while (try < to);
+
+ return 0;
+}
+
+#else /* not FAST_DISPLAY */
+
scrolling_1 (window_size, unchanged_at_top, unchanged_at_bottom,
draw_cost, old_hash, new_hash, free_at_end)
int window_size, unchanged_at_top, unchanged_at_bottom;
@@ -320,6 +379,7 @@ do_scrolling (matrix, window_size, uncha
if (window)
set_terminal_window (0);
}
+#endif /* not FAST_DISPLAY */
/* Return number of lines in common between current screen contents
and the text to be displayed,
diff -rup --new-file baseline/fsf/emacs18/src/simplerexx.c amiga/fsf/emacs18/src/simplerexx.c
--- baseline/fsf/emacs18/src/simplerexx.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/simplerexx.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,416 @@
+/*
+ * Simple ARexx interface by Michael Sinz
+ *
+ * This is a very "Simple" interface to the world of ARexx...
+ * For more complex interfaces into ARexx, it is best that you
+ * understand the functions that are provided by ARexx.
+ * In many cases they are more powerful than what is presented
+ * here.
+ *
+ * This code is fully re-entrant and self-contained other than
+ * the use of SysBase/AbsExecBase and the ARexx RVI support
+ * library which is also self-contained...
+ */
+
+#include <exec/types.h>
+#include <exec/nodes.h>
+#include <exec/lists.h>
+#include <exec/ports.h>
+#include <exec/memory.h>
+
+#include <proto/exec.h>
+
+#include <rexx/storage.h>
+#include <rexx/rxslib.h>
+
+#include <string.h>
+#include <ctype.h>
+
+/*
+ * The prototypes for the few ARexx functions we will call...
+ */
+struct RexxMsg *CreateRexxMsg(struct MsgPort *,char *,char *);
+void *CreateArgstring(char *,long);
+void DeleteRexxMsg(struct RexxMsg *);
+void DeleteArgstring(char *);
+BOOL IsRexxMsg(struct Message *);
+
+/*
+ * Pragmas for the above functions... (To make this all self-contained...)
+ * If you use RexxGlue.o, this is not needed...
+ *
+ * These are for Lattice C 5.x (Note the use of RexxContext->RexxSysBase)
+ */
+#pragma libcall RexxContext->RexxSysBase CreateRexxMsg 90 09803
+#pragma libcall RexxContext->RexxSysBase CreateArgstring 7E 0802
+#pragma libcall RexxContext->RexxSysBase DeleteRexxMsg 96 801
+#pragma libcall RexxContext->RexxSysBase DeleteArgstring 84 801
+#pragma libcall RexxContext->RexxSysBase IsRexxMsg A8 801
+
+/*
+ * Now, we have made the pragmas needed, let's get to work...
+ */
+
+/*
+ * A structure for the ARexx handler context
+ * This is *VERY* *PRIVATE* and should not be touched...
+ */
+struct ARexxContext
+{
+struct MsgPort *ARexxPort; /* The port messages come in at... */
+struct Library *RexxSysBase; /* We will hide the library pointer here... */
+ long Outstanding; /* The count of outstanding ARexx messages... */
+ char PortName[24]; /* The port name goes here... */
+ char ErrorName[28]; /* The name of the <base>.LASTERROR... */
+ char Extension[8]; /* Default file name extension... */
+};
+
+#define AREXXCONTEXT struct ARexxContext *
+
+#include "SimpleRexx.h"
+
+/*
+ * This function returns the port name of your ARexx port.
+ * It will return NULL if there is no ARexx port...
+ *
+ * This string is *READ ONLY* You *MUST NOT* modify it...
+ */
+char *ARexxName(AREXXCONTEXT RexxContext)
+{
+ register char *tmp=NULL;
+
+ if (RexxContext) tmp=RexxContext->PortName;
+ return(tmp);
+}
+
+/*
+ * This function returns the signal mask that the Rexx port is
+ * using. It returns NULL if there is no signal...
+ *
+ * Use this signal bit in your Wait() loop...
+ */
+ULONG ARexxSignal(AREXXCONTEXT RexxContext)
+{
+ register ULONG tmp=NULL;
+
+ if (RexxContext) tmp=1L << (RexxContext->ARexxPort->mp_SigBit);
+ return(tmp);
+}
+
+/*
+ * This function returns a structure that contains the commands sent from
+ * ARexx or the results of commands you sent. You will need to parse it
+ * and return the structure back so that the memory can be freed.
+ *
+ * This returns NULL if there was no message.
+ */
+struct RexxMsg *GetARexxMsg(AREXXCONTEXT RexxContext)
+{
+ register struct RexxMsg *tmp=NULL;
+ register short flag;
+
+ if (RexxContext) tmp=(struct RexxMsg *)GetMsg(RexxContext->ARexxPort);
+ return(tmp);
+}
+
+/* Use this to delete a message sent via SendARexxMsg and that has now been
+ returned to you.
+*/
+void DeleteARexxMsg(AREXXCONTEXT RexxContext, struct RexxMsg *rmsg)
+{
+ /*
+ * Free the arguments and the message...
+ */
+ if(rmsg->rm_Action & RXFF_RESULT) {
+ if(rmsg->rm_Result1 == 0 && rmsg->rm_Result2) {
+ DeleteArgstring((STRPTR)rmsg->rm_Result2);
+ }
+ }
+ DeleteArgstring(rmsg->rm_Args[0]);
+ DeleteRexxMsg(rmsg);
+ RexxContext->Outstanding-=1;
+}
+
+/*
+ * Use this to return a ARexx message...
+ *
+ * If you wish to return something, it must be in the RString.
+ * If you wish to return an Error, it must be in the Error.
+ * If there is an error, the RString is ignored.
+ */
+void ReplyARexxMsg(AREXXCONTEXT RexxContext,struct RexxMsg *rmsg,
+ char *RString,LONG Error)
+{
+ if (RexxContext) if (rmsg) if (rmsg!=REXX_RETURN_ERROR)
+ {
+ rmsg->rm_Result2=0;
+ if (!(rmsg->rm_Result1=Error))
+ {
+ /*
+ * if you did not have an error we return the string
+ */
+ if (rmsg->rm_Action & (1L << RXFB_RESULT)) if (RString)
+ {
+ rmsg->rm_Result2=(LONG)CreateArgstring(RString,
+ (LONG)strlen(RString));
+ }
+ }
+
+ /*
+ * Reply the message to ARexx...
+ */
+ ReplyMsg((struct Message *)rmsg);
+ }
+}
+
+/*
+ * This function will set an error string for the ARexx
+ * application in the variable defined as <appname>.LASTERROR
+ *
+ * Note that this can only happen if there is an ARexx message...
+ *
+ * This returns TRUE if it worked, FALSE if it did not...
+ */
+short SetARexxLastError(AREXXCONTEXT RexxContext,struct RexxMsg *rmsg,
+ char *ErrorString)
+{
+ register short OkFlag=FALSE;
+
+ if (RexxContext) if (rmsg) if (CheckRexxMsg(rmsg))
+ {
+ /*
+ * Note that SetRexxVar() has more than just a TRUE/FALSE
+ * return code, but for this "basic" case, we just care if
+ * it works or not.
+ */
+ if (!SetRexxVar(rmsg,RexxContext->ErrorName,ErrorString,
+ (long)strlen(ErrorString)))
+ {
+ OkFlag=TRUE;
+ }
+ }
+ return(OkFlag);
+}
+
+/*
+ * This function will send a string to ARexx...
+ *
+ * The default host port will be that of your task...
+ *
+ * If you set StringFile to TRUE, it will set that bit for the message...
+ *
+ * Returns the message sent, or NULL in case of error.
+ */
+struct RexxMsg *SendARexxMsg(AREXXCONTEXT RexxContext,char *RString,
+ short StringFile, short results)
+{
+ register struct MsgPort *RexxPort;
+ register struct RexxMsg *rmsg;
+ register short flag=FALSE;
+
+ if (RexxContext) if (RString)
+ {
+ if (rmsg=CreateRexxMsg(RexxContext->ARexxPort,
+ RexxContext->Extension,
+ RexxContext->PortName))
+ {
+ rmsg->rm_Action=RXCOMM | (StringFile ?
+ (1L << RXFB_STRING):0);
+ rmsg->rm_Action |= (results ? RXFF_RESULT : 0);
+ if (rmsg->rm_Args[0]=CreateArgstring(RString,
+ (LONG)strlen(RString)))
+ {
+ /*
+ * We need to find the RexxPort and this needs
+ * to be done in a Forbid()
+ */
+ Forbid();
+ if (RexxPort=FindPort(RXSDIR))
+ {
+ /*
+ * We found the port, so put the
+ * message to ARexx...
+ */
+ PutMsg(RexxPort,(struct Message *)rmsg);
+ RexxContext->Outstanding+=1;
+ flag=TRUE;
+ }
+ else
+ {
+ /*
+ * No port, so clean up...
+ */
+ DeleteArgstring(rmsg->rm_Args[0]);
+ DeleteRexxMsg(rmsg);
+ }
+ Permit();
+ }
+ else DeleteRexxMsg(rmsg);
+ }
+ }
+ return flag ? rmsg : NULL;
+}
+
+int PendingCommands(AREXXCONTEXT RexxContext)
+{
+ if (RexxContext) return RexxContext->Outstanding;
+ else return 0;
+}
+
+/*
+ * This function closes down the ARexx context that was opened
+ * with InitARexx...
+ */
+void FreeARexx(AREXXCONTEXT RexxContext)
+{
+ register struct RexxMsg *rmsg;
+
+ if (RexxContext)
+ {
+ /*
+ * Clear port name so it can't be found...
+ */
+ RexxContext->PortName[0]='\0';
+
+ /*
+ * Clean out any outstanding messages we had sent out...
+ */
+ while (RexxContext->Outstanding)
+ {
+ WaitPort(RexxContext->ARexxPort);
+ while (rmsg=GetARexxMsg(RexxContext))
+ {
+ if (rmsg!=REXX_RETURN_ERROR)
+ {
+ /*
+ * Any messages that come now are blown
+ * away...
+ */
+ SetARexxLastError(RexxContext,rmsg,
+ "99: Port Closed!");
+ /* removed ReplyARexxMsg() this was a bug that would */
+ /* obviously cause a loop (we would continue to reply and */
+ /* then get the message. It now deletes the message as */
+ /* should be done. -ch5/10/93. */
+ DeleteARexxMsg(RexxContext,rmsg);
+ }
+ }
+ }
+
+ /*
+ * Clean up the port and delete it...
+ */
+ if (RexxContext->ARexxPort)
+ {
+ while (rmsg=GetARexxMsg(RexxContext))
+ {
+ /*
+ * Any messages that still are coming in are
+ * "dead" We just set the LASTERROR and
+ * reply an error of 100...
+ */
+ SetARexxLastError(RexxContext,rmsg,
+ "99: Port Closed!");
+ ReplyARexxMsg(RexxContext,rmsg,NULL,100);
+ }
+ RemPort(RexxContext->ARexxPort);
+ DeleteMsgPort(RexxContext->ARexxPort);
+ }
+
+ /*
+ * Make sure we close the library...
+ */
+ if (RexxContext->RexxSysBase)
+ {
+ CloseLibrary(RexxContext->RexxSysBase);
+ }
+
+ /*
+ * Free the memory of the RexxContext
+ */
+ FreeMem(RexxContext,sizeof(struct ARexxContext));
+ }
+}
+
+/*
+ * This routine initializes an ARexx port for your process
+ * This should only be done once per process. You must call it
+ * with a valid application name and you must use the handle it
+ * returns in all other calls...
+ *
+ * NOTE: The AppName should not have spaces in it...
+ * Example AppNames: "MyWord" or "FastCalc" etc...
+ * The name *MUST* be less that 16 characters...
+ * If it is not, it will be trimmed...
+ * The name will also be UPPER-CASED...
+ *
+ * NOTE: The Default file name extension, if NULL will be
+ * "rexx" (the "." is automatic)
+ */
+AREXXCONTEXT InitARexx(char *AppName,char *Extension)
+{
+ register AREXXCONTEXT RexxContext=NULL;
+ register short loop;
+ register short count;
+ register char *tmp;
+
+ if (RexxContext=AllocMem(sizeof(struct ARexxContext),
+ MEMF_PUBLIC|MEMF_CLEAR))
+ {
+ if (RexxContext->RexxSysBase=OpenLibrary("rexxsyslib.library", NULL))
+ {
+ /*
+ * Set up the extension...
+ */
+ if (!Extension) Extension="rexx";
+ tmp=RexxContext->Extension;
+ for (loop=0;(loop<7)&&(Extension[loop]);loop++)
+ {
+ *tmp++=Extension[loop];
+ }
+ *tmp='\0';
+
+ /*
+ * Set up a port name...
+ */
+ tmp=RexxContext->PortName;
+ for (loop=0;(loop<16)&&(AppName[loop]);loop++)
+ {
+ *tmp++=toupper(AppName[loop]);
+ }
+ *tmp='\0';
+
+ /*
+ * Set up the last error RVI name...
+ *
+ * This is <appname>.LASTERROR
+ */
+ strcpy(RexxContext->ErrorName,RexxContext->PortName);
+ strcat(RexxContext->ErrorName,".LASTERROR");
+
+ /* We need to make a unique port name... */
+ Forbid();
+ for (count=1,RexxContext->ARexxPort=(VOID *)1;
+ RexxContext->ARexxPort;count++)
+ {
+ stci_d(tmp,count);
+ RexxContext->ARexxPort=
+ FindPort(RexxContext->PortName);
+ }
+
+ /*RexxContext->ARexxPort=CreatePort(RexxContext->PortName,NULL);*/
+ RexxContext->ARexxPort=CreateMsgPort();
+ RexxContext->ARexxPort->mp_Node.ln_Name = RexxContext->PortName;
+ RexxContext->ARexxPort->mp_Node.ln_Pri = 0;
+ AddPort(RexxContext->ARexxPort);
+ Permit();
+ }
+
+ if (!RexxContext->RexxSysBase || !RexxContext->ARexxPort)
+ {
+ FreeARexx(RexxContext);
+ RexxContext=NULL;
+ }
+ }
+ return(RexxContext);
+}
diff -rup --new-file baseline/fsf/emacs18/src/simplerexx.h amiga/fsf/emacs18/src/simplerexx.h
--- baseline/fsf/emacs18/src/simplerexx.h Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/simplerexx.h Sat Sep 28 00:00:00 1996
@@ -0,0 +1,119 @@
+/*
+ * Simple ARexx interface by Michael Sinz
+ *
+ * This is a very "Simple" interface...
+ */
+
+#ifndef SIMPLE_REXX_H
+#define SIMPLE_REXX_H
+
+#include <exec/types.h>
+#include <exec/nodes.h>
+#include <exec/lists.h>
+#include <exec/ports.h>
+
+#include <rexx/storage.h>
+#include <rexx/rxslib.h>
+
+/*
+ * This is the handle that SimpleRexx will give you
+ * when you initialize an ARexx port...
+ *
+ * The conditional below is used to skip this if we have
+ * defined it earlier...
+ */
+#ifndef AREXXCONTEXT
+
+typedef void *AREXXCONTEXT;
+
+#endif /* AREXXCONTEXT */
+
+/*
+ * The value of RexxMsg (from GetARexxMsg) if there was an error returned
+ */
+#define REXX_RETURN_ERROR ((struct RexxMsg *)-1L)
+#define REXX_RETURN_OK ((struct RexxMsg *)-3L)
+
+/*
+ * This function closes down the ARexx context that was opened
+ * with InitARexx...
+ */
+void FreeARexx(AREXXCONTEXT);
+
+/*
+ * This routine initializes an ARexx port for your process
+ * This should only be done once per process. You must call it
+ * with a valid application name and you must use the handle it
+ * returns in all other calls...
+ *
+ * NOTE: The AppName should not have spaces in it...
+ * Example AppNames: "MyWord" or "FastCalc" etc...
+ * The name *MUST* be less that 16 characters...
+ * If it is not, it will be trimmed...
+ * The name will also be UPPER-CASED...
+ *
+ * NOTE: The Default file name extension, if NULL will be
+ * "rexx" (the "." is automatic)
+ */
+AREXXCONTEXT InitARexx(char *,char *);
+
+/*
+ * This function returns the port name of your ARexx port.
+ * It will return NULL if there is no ARexx port...
+ *
+ * This string is *READ ONLY* You *MUST NOT* modify it...
+ */
+char *ARexxName(AREXXCONTEXT);
+
+/*
+ * This function returns the signal mask that the Rexx port is
+ * using. It returns NULL if there is no signal...
+ *
+ * Use this signal bit in your Wait() loop...
+ */
+ULONG ARexxSignal(AREXXCONTEXT);
+
+/*
+ * This function returns a structure that contains the commands sent from
+ * ARexx... You will need to parse it and return the structure back
+ * so that the memory can be freed...
+ *
+ * This returns NULL if there was no message...
+ */
+struct RexxMsg *GetARexxMsg(AREXXCONTEXT);
+
+/* Use this to delete a message sent via SendARexxMsg and that has now been
+ returned to you.
+*/
+void DeleteARexxMsg(AREXXCONTEXT RexxContext, struct RexxMsg *rmsg);
+
+/*
+ * Use this to return a ARexx message...
+ *
+ * If you wish to return something, it must be in the RString.
+ * If you wish to return an Error, it must be in the Error.
+ */
+void ReplyARexxMsg(AREXXCONTEXT,struct RexxMsg *,char *,LONG);
+
+/*
+ * This function will send a string to ARexx...
+ *
+ * The default host port will be that of your task...
+ *
+ * If you set StringFile to TRUE, it will set that bit for the message...
+ *
+ * Returns the message sent, or NULL in case of error.
+ */
+struct RexxMsg *SendARexxMsg(AREXXCONTEXT,char *,short,short);
+
+/*
+ * This function will set an error string for the ARexx
+ * application in the variable defined as <appname>.LASTERROR
+ *
+ * Note that this can only happen if there is an ARexx message...
+ *
+ * This returns TRUE if it worked, FALSE if it did not...
+ */
+short SetARexxLastError(AREXXCONTEXT,struct RexxMsg *,char *);
+
+#endif /* SIMPLE_REXX_H */
diff -rup --new-file baseline/fsf/emacs18/src/smakefile amiga/fsf/emacs18/src/smakefile
--- baseline/fsf/emacs18/src/smakefile Wed Dec 31 17:00:00 1969
+++ amiga/fsf/emacs18/src/smakefile Sat Sep 28 00:00:00 1996
@@ -0,0 +1,45 @@
+CPP = /cpp/cpp -DAMIGA
+MAKE = smake # BSD doesn't have it as a default.
+#Note: an alternative is CPP = /lib/cpp
+
+all: xmakefile doall
+
+doall:
+ $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} all
+
+#This is used in making a distribution.
+#Do not use it on development directories!
+distclean:
+ -delete force paths.h config.h emacs-* temacs xemacs xmakefile \
+ *! @* *.o
+
+clean:
+ -delete force temacs xemacs xmakefile @* *.o
+
+xemacs: xmakefile doxemacs
+
+doxemacs:
+ $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} xemacs
+
+temacs: xmakefile dotemacs
+
+dotemacs:
+ $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} temacs
+
+demacs: xmakefile dodemacs
+
+dodemacs:
+ $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} demacs
+
+# If you have a problem with cc -E here, changing
+# the definition of CPP above may fix it.
+xmakefile: ymakefile config.h dostrip
+ -delete force xmakefile
+ ${CPP} ymakefile > t:ymkf
+ dostrip <t:ymkf >xmakefile
+
+dostrip: dostrip.c
+ sc link dostrip
+
+tags:
+ etags [a-z]*.h [a-z]*.c /lisp/[a-z]*.el
diff -rup --new-file baseline/fsf/emacs18/src/term.c amiga/fsf/emacs18/src/term.c
--- baseline/fsf/emacs18/src/term.c Fri Jan 3 00:46:47 1992
+++ amiga/fsf/emacs18/src/term.c Sat Sep 28 00:00:00 1996
@@ -161,7 +161,7 @@ static int se_is_so; /* 1 if same string
or'd with 0100. Zero if no standout marker at all. */
/* used iff TN_standout_width >= 0. */
char *chars_wasted;
-static char *copybuf;
+char *copybuf;
/* nonzero means supposed to write text in standout mode. */
int standout_requested;
diff -rup --new-file baseline/fsf/emacs18/src/termcap.c amiga/fsf/emacs18/src/termcap.c
--- baseline/fsf/emacs18/src/termcap.c Tue Jan 8 11:08:50 1991
+++ amiga/fsf/emacs18/src/termcap.c Sat Sep 28 00:00:00 1996
@@ -30,6 +30,7 @@ what you give them. Help stamp out sof
#ifdef emacs
#include "config.h"
+#include "paths.h"
#endif
#ifndef BUFSIZE
@@ -344,7 +345,11 @@ tgetent (bp, name)
#ifdef VMS
filep = tem && legal_filename_p (tem);
#else
+#ifdef AMIGA
+ filep = tem != 0; /* Always assume that it is a file */
+#else
filep = tem && (*tem == '/');
+#endif
#endif /* VMS */
/* If tem is non-null and starts with / (in the un*x case, that is),
@@ -374,11 +379,7 @@ tgetent (bp, name)
indirect = (char *) 0;
if (!tem)
-#ifdef VMS
- tem = "emacs_library:[etc]termcap.dat";
-#else
- tem = "/etc/termcap";
-#endif
+ tem = PATH_TERMCAP;
/* Here we know we must search a file and tem has its name. */
diff -rup --new-file baseline/fsf/emacs18/src/tparam.c amiga/fsf/emacs18/src/tparam.c
--- baseline/fsf/emacs18/src/tparam.c Tue Jan 8 11:09:27 1991
+++ amiga/fsf/emacs18/src/tparam.c Sat Sep 28 00:00:00 1996
@@ -258,7 +258,7 @@ tparam1 (string, outstring, len, up, lef
return outstring;
}
-#ifdef DEBUG
+#ifdef TPARAM_DEBUG
main (argc, argv)
int argc;
@@ -274,4 +274,4 @@ main (argc, argv)
return 0;
}
-#endif /* DEBUG */
+#endif /* TPARAM_DEBUG */
diff -rup --new-file baseline/fsf/emacs18/src/xdisp.c amiga/fsf/emacs18/src/xdisp.c
--- baseline/fsf/emacs18/src/xdisp.c Fri Jul 24 12:08:13 1992
+++ amiga/fsf/emacs18/src/xdisp.c Sat Sep 28 00:00:00 1996
@@ -31,6 +31,17 @@ the Free Software Foundation, 675 Mass A
#include "commands.h"
#include "macros.h"
+#define MAX_WIN_LINE 64
+static int win_line_bufpos[MAX_WIN_LINE];
+static int win_line_modified;
+static struct buffer *win_line_buffer;
+#define CLEAR_WIN_LINE() (win_line_buffer = 0)
+
+#ifdef EIGHT_BIT
+char visible[256]; /* visible[i] is true if character i is
+ displayable */
+#endif
+
extern int interrupt_input;
extern int command_loop_level;
@@ -275,7 +286,10 @@ display_echo_area_contents ()
windows_or_buffers_changed++;
if (EQ (minibuf_window, selected_window))
- this_line_bufpos = 0;
+ {
+ this_line_bufpos = 0;
+ CLEAR_WIN_LINE();
+ }
prev_echo_area_contents = echo_area_contents;
}
@@ -327,6 +341,8 @@ redisplay ()
must_finish = 1;
}
+ if (windows_or_buffers_changed) CLEAR_WIN_LINE();
+
if (clip_changed || windows_or_buffers_changed)
update_mode_lines++;
@@ -453,6 +469,7 @@ update:
Also, don't forget to check every line to update the arrow. */
if (pause)
{
+ CLEAR_WIN_LINE();
this_line_bufpos = 0;
if (!NULL (last_arrow_position))
{
@@ -709,9 +726,29 @@ redisplay_window (window, just_this_one)
&& (just_this_one || XFASTINT (w->width) == screen_width)
&& !EQ (window, minibuf_window))
{
- pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0),
+ int *wlb;
+ int line, best_startp, best_vpos;
+
+ best_startp = startp; best_vpos = 0;
+ if (win_line_buffer && BUF_MODIFF(win_line_buffer) > win_line_modified)
+ CLEAR_WIN_LINE();
+ if (current_buffer == win_line_buffer && current_buffer == XBUFFER (w->buffer))
+ {
+ /* Try & find line to start from */
+ wlb = win_line_bufpos; line = 0;
+ while (line < MAX_WIN_LINE)
+ {
+ if (*wlb && point > *wlb && *wlb > best_startp)
+ {
+ best_startp = *wlb;
+ best_vpos = line;
+ }
+ line++; wlb++;
+ }
+ }
+ pos = *compute_motion (best_startp, best_vpos, (hscroll ? 1 - hscroll : 0),
point, height + 1, 10000, width, hscroll,
- pos_tab_offset (w, startp));
+ pos_tab_offset (w, best_startp));
if (pos.vpos < height)
{
@@ -843,6 +880,8 @@ try_window (window, pos)
struct position val;
+ if (XBUFFER(w->buffer) == win_line_buffer) CLEAR_WIN_LINE();
+
Fset_marker (w->start, make_number (pos), Qnil);
point_vpos = -1;
@@ -908,6 +947,8 @@ try_window_id (window)
int delta;
int tab_offset, epto;
+ if (XBUFFER(w->buffer) == win_line_buffer) CLEAR_WIN_LINE();
+
if (GPT - BEG < beg_unchanged)
beg_unchanged = GPT - BEG;
if (Z - GPT < end_unchanged)
@@ -1334,6 +1375,7 @@ display_text_line (w, start, vpos, hpos,
pause = pos;
while (p1 < endp)
{
+restart:
p1prev = p1;
if (pos == pause)
{
@@ -1354,13 +1396,44 @@ display_text_line (w, start, vpos, hpos,
p = &FETCH_CHAR (pos);
}
c = *p++;
+#ifdef EIGHT_BIT
+ if (visible[c])
+#else
if (c >= 040 && c < 0177)
- {
+#endif
+ /* This optimises the frequent part (displayable characters) of
+ this inner loop. If the conditions aren't met, return to old
+ inner loop. */
+ {
if (p1 >= startp)
- *p1 = c;
- p1++;
- }
- else if (c == '\n')
+ {
+ do
+ {
+ *p1++ = c;
+ pos++;
+ if (p1 >= endp)
+ {
+ p1prev = p1 - 1;
+ goto done;
+ }
+ if (pos == pause) goto restart;
+ c = *p++;
+ }
+#ifdef EIGHT_BIT
+ while (visible[c]);
+#else
+ while (c >= 040 && c < 0177);
+#endif
+ p1prev = p1;
+ }
+ else
+ {
+ p1++;
+ pos++;
+ goto restart;
+ }
+ }
+ if (c == '\n')
{
invis = 0;
while (pos < end
@@ -1434,6 +1507,7 @@ display_text_line (w, start, vpos, hpos,
}
pos++;
}
+done:
val.hpos = - XINT (w->hscroll);
if (val.hpos)
@@ -1525,6 +1599,25 @@ display_text_line (w, start, vpos, hpos,
this_line_bufpos = 0;
}
}
+ /* Save positions of all lines of current window */
+ if (w == XWINDOW(selected_window) && vpos < MAX_WIN_LINE)
+ {
+ /* Line is not continued and did not start in middle of character */
+ if (hpos == (XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0)
+ && val.vpos)
+ {
+ if (current_buffer != win_line_buffer ||
+ !(win_line_modified >= MODIFF))
+ {
+ win_line_buffer = current_buffer;
+ win_line_modified = MODIFF;
+ bzero(win_line_bufpos, sizeof win_line_bufpos);
+ }
+ win_line_bufpos[vpos - XINT (w->top)] = start;
+ }
+ else
+ win_line_bufpos[vpos - XINT (w->top)] = 0;
+ }
/* If hscroll and line not empty, insert truncation-at-left marker */
if (hscroll && lastpos != start)
@@ -1994,7 +2087,11 @@ display_string (w, vpos, string, hpos, t
{
c = *string++;
if (!c) break;
+#ifdef EIGHT_BIT
+ if (visible[c])
+#else
if (c >= 040 && c < 0177)
+#endif
{
if (p1 >= start)
*p1 = c;
@@ -2109,7 +2206,11 @@ init_xdisp ()
register
#endif COMPILER_REGISTER_BUG
struct window *mini_w;
+#ifdef EIGHT_BIT
+ int i;
+#endif
+ CLEAR_WIN_LINE();
this_line_bufpos = 0;
mini_w = XWINDOW (minibuf_window);
@@ -2128,4 +2229,10 @@ init_xdisp ()
XFASTINT (XWINDOW (root_window)->width) = screen_width;
XFASTINT (mini_w->width) = screen_width;
}
+#ifdef EIGHT_BIT
+ for (i = 040; i < 0177; i++) visible[i] = 1;
+#ifdef AMIGA
+ for (i = 0240; i <= 0377; i++) visible[i] = 1;
+#endif
+#endif
}
diff -rup --new-file baseline/fsf/emacs18/src/ymakefile amiga/fsf/emacs18/src/ymakefile
--- baseline/fsf/emacs18/src/ymakefile Tue Oct 6 11:44:28 1992
+++ amiga/fsf/emacs18/src/ymakefile Sat Sep 28 00:00:00 1996
@@ -18,7 +18,15 @@ along with GNU Emacs; see the file COPYI
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+#ifdef amiga
+#undef amiga
+#endif
+
+#ifdef AMIGA
+dot =
+#else
dot = .
+#endif
/* on Xenix, replace double-dot below with $(dot)$(dot) */
lispdir = $(dot)$(dot)/lisp/
etcdir = $(dot)$(dot)/etc/
@@ -161,7 +169,7 @@ LD = $(CC)
#define LINKER gcc -nostdlib
#else
#define LINKER ld
-#endif
+#endif
#endif /* not ORDINARY_LINK */
#endif /* no LINKER */
@@ -191,7 +199,11 @@ LOCALCPP= localcpp
SHORT= shortnames
#endif /* SHORTNAMES */
+#ifdef AMIGA
+CFLAGS= C_DEBUG_SWITCH def emacs $(MYCPPFLAG) C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM
+#else
CFLAGS= C_DEBUG_SWITCH -Demacs $(MYCPPFLAG) C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM
+#endif
/* DO NOT use -R. There is a special hack described in lastfile.c
which is used instead. Some initialized data areas are modified
at initial startup, then labeled as part of the text area when
@@ -258,7 +270,7 @@ GNULIB_VAR = LIB_GCC
GNULIB_VAR = `if [ -f LIB_GCC ] ; then echo LIB_GCC; else echo; fi`
#endif /* __GNUC__ <= 1 */
#else
-GNULIB_VAR =
+GNULIB_VAR =
#endif
#ifdef MAINTAIN_ENVIRONMENT
@@ -270,11 +282,19 @@ environobj = environ.o
#define UNEXEC unexec.o
#endif
+termobjs= term.o cm.o
+
+#ifdef AMIGA
+SYSDEP= amiga_sysdep.o
+#else
+SYSDEP= sysdep.o
+#endif
+
/* lastfile must follow all files
whose initialized data areas should be dumped as pure by dump-emacs. */
obj= dispnew.o scroll.o xdisp.o window.o \
- term.o cm.o $(XOBJ) \
- emacs.o keyboard.o macros.o keymap.o sysdep.o \
+ $(termobjs) $(XOBJ) \
+ emacs.o keyboard.o macros.o keymap.o $(SYSDEP) \
buffer.o filelock.o insdel.o marker.o \
minibuf.o fileio.o dired.o filemode.o \
cmds.o casefiddle.o indent.o search.o regex.o undo.o \
@@ -360,17 +380,43 @@ xemacs: temacs ${etcdir}DOC ${lisp}
#ifdef CANNOT_DUMP
mv temacs xemacs
#else
+#ifdef AMIGA
+ -delete ${etcdir}EMACS-DATA xemacs force
+ temacs -nl -batch -l inc-vers
+ temacs -nl -batch -l loadup.el dump
+ -touch xemacs
+ -delete /temacs force
+ makelink from /temacs temacs
+#else
./temacs -batch -l inc-vers
./temacs -batch -l loadup.el dump
+#endif /* not AMIGA */
#endif /* not CANNOT_DUMP */
#endif /* not HAVE_SHM */
${etcdir}DOC: ${etcdir}make-docfile ${obj} ${lisp}
+#ifdef AMIGA
+REDIRECT_IN= <
+ -delete force ${etcdir}DOC
+ ${etcdir}make-docfile >${etcdir}DOC $(REDIRECT_IN) < <
+${obj}
+${lisp}
+${lispdir}version.el
+${lispdir}amiga-menu.elc ${lispdir}amiga-init.elc ${lispdir}amiga-mouse.elc
+OBJECTS_SYSTEM
+<
+#else
rm -f ${etcdir}DOC
${etcdir}make-docfile ${obj} ${lisp} ${lispdir}version.el > ${etcdir}DOC
+#endif
+#ifdef AMIGA
+${etcdir}make-docfile: ${etcdir}make-docfile.c
+ sc link /etc/make-docfile
+#else
${etcdir}make-docfile:
cd ${etcdir}; ${MAKE} ${MFLAGS} make-docfile
+#endif
/* Some systems define this to cause parallel Make-ing. */
#ifndef MAKE_PARALLEL
@@ -378,7 +424,30 @@ ${etcdir}make-docfile:
#endif
temacs: MAKE_PARALLEL $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE
+#ifdef AMIGA
+ slink <with <
+from ${STARTFILES} $(obj) OBJECTS_SYSTEM OBJECTS_MACHINE $(otherobj)
+to temacs
+lib LIB_STANDARD
+nodebug
+batch
+<
+#endif
+
+demacs: MAKE_PARALLEL $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE
+#ifdef AMIGA
+ slink <with <
+from ${STARTFILES} $(obj) OBJECTS_SYSTEM OBJECTS_MACHINE $(otherobj)
+to demacs
+lib LIB_STANDARD
+map ram:emacs.map,h,x
+addsym
+swidth 16
+batch
+<
+#else
$(LD) ${STARTFLAGS} ${LDFLAGS} -o temacs ${STARTFILES} ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE ${LIBES}
+#endif
/* These are needed for C compilation, on the systems that need them */
#ifdef NEED_CPP
@@ -460,51 +529,51 @@ alloca.o : alloca.s config.h
it is so often changed in ways that do not require any recompilation
and so rarely changed in ways that do require any. */
-abbrev.o : abbrev.c buffer.h commands.h config.h
-buffer.o : buffer.c syntax.h buffer.h commands.h window.h config.h
-callint.o : callint.c window.h commands.h buffer.h config.h
-callproc.o : callproc.c paths.h buffer.h commands.h config.h
-casefiddle.o : casefiddle.c syntax.h commands.h buffer.h config.h
+abbrev.o : abbrev.c buffer.h commands.h config.h
+buffer.o : buffer.c syntax.h buffer.h commands.h window.h config.h
+callint.o : callint.c window.h commands.h buffer.h config.h
+callproc.o : callproc.c paths.h buffer.h commands.h config.h
+casefiddle.o : casefiddle.c syntax.h commands.h buffer.h config.h
cm.o : cm.c cm.h termhooks.h config.h
-cmds.o : cmds.c syntax.h buffer.h commands.h config.h
+cmds.o : cmds.c syntax.h buffer.h commands.h config.h
crt0.o : crt0.c config.h
$(CC) -c $(CFLAGS) C_SWITCH_ASM crt0.c
dired.o : dired.c commands.h buffer.h config.h regex.h
dispnew.o : dispnew.c commands.h window.h buffer.h dispextern.h termchar.h termopts.h cm.h config.h lisp.h
doc.o : doc.c buffer.h config.h paths.h
doprnt.o : doprnt.c
-editfns.o : editfns.c window.h buffer.h config.h
-emacs.o : emacs.c commands.h config.h
+editfns.o : editfns.c window.h buffer.h config.h
+emacs.o : emacs.c commands.h config.h
#ifdef MAINTAIN_ENVIRONMENT
environ.o : environ.c buffer.h commands.h config.h
#endif /* MAINTAIN_ENVIRONMENT */
-fileio.o : fileio.c window.h buffer.h config.h
+fileio.o : fileio.c window.h buffer.h config.h
filelock.o : filelock.c buffer.h paths.h config.h
-filemode.o : filemode.c
+filemode.o : filemode.c
indent.o : indent.c window.h indent.h buffer.h config.h termchar.h termopts.h
-insdel.o : insdel.c window.h buffer.h config.h
-keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h commands.h window.h macros.h config.h
-keymap.o : keymap.c buffer.h commands.h config.h
-lastfile.o : lastfile.c
+insdel.o : insdel.c window.h buffer.h config.h
+keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h commands.h window.h macros.h config.h
+keymap.o : keymap.c buffer.h commands.h config.h
+lastfile.o : lastfile.c
macros.o : macros.c window.h buffer.h commands.h macros.h config.h
malloc.o : malloc.c config.h
-marker.o : marker.c buffer.h config.h
-minibuf.o : minibuf.c syntax.h window.h buffer.h commands.h config.h
+marker.o : marker.c buffer.h config.h
+minibuf.o : minibuf.c syntax.h window.h buffer.h commands.h config.h
mocklisp.o : mocklisp.c buffer.h config.h
-process.o : process.c process.h buffer.h window.h termhooks.h termopts.h commands.h dispextern.h config.h
-regex.o : regex.c syntax.h buffer.h config.h regex.h
+process.o : process.c process.h buffer.h window.h termhooks.h termopts.h commands.h dispextern.h config.h
+regex.o : regex.c syntax.h buffer.h config.h regex.h
scroll.o : scroll.c termchar.h config.h dispextern.h termhooks.h
-search.o : search.c regex.h commands.h buffer.h syntax.h config.h
-syntax.o : syntax.c syntax.h buffer.h commands.h config.h
+search.o : search.c regex.h commands.h buffer.h syntax.h config.h
+syntax.o : syntax.c syntax.h buffer.h commands.h config.h
sysdep.o : sysdep.c config.h dispextern.h termhooks.h termchar.h termopts.h window.h
term.o : term.c termchar.h termhooks.h termopts.h config.h cm.h
termcap.o : termcap.c config.h
terminfo.o : terminfo.c config.h
tparam.o : tparam.c config.h
-undo.o : undo.c buffer.h commands.h config.h
+undo.o : undo.c buffer.h commands.h config.h
UNEXEC : config.h getpagesize.h
window.o : window.c indent.h commands.h window.h buffer.h config.h termchar.h
-xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h termchar.h window.h config.h
+xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h termchar.h window.h config.h
xfns.o : xfns.c xterm.h window.h config.h
xmenu.o : xmenu.c xterm.h window.h config.h
xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h \
@@ -517,13 +586,13 @@ x11term.o : x11term.c x11term.h termhook
/* The files of Lisp proper */
-alloc.o : alloc.c window.h buffer.h config.h
-bytecode.o : bytecode.c buffer.h config.h
-data.o : data.c buffer.h config.h
+alloc.o : alloc.c window.h buffer.h config.h
+bytecode.o : bytecode.c buffer.h config.h
+data.o : data.c buffer.h config.h
eval.o : eval.c commands.h config.h
fns.o : fns.c buffer.h commands.h config.h
-print.o : print.c process.h window.h buffer.h dispextern.h termchar.h config.h
-lread.o : lread.c buffer.h paths.h config.h
+print.o : print.c process.h window.h buffer.h dispextern.h termchar.h config.h
+lread.o : lread.c buffer.h paths.h config.h
/* System-specific programs to be made.
OTHER_FILES, OBJECTS_SYSTEM and OBJECTS_MACHINE
@@ -533,3 +602,18 @@ sunfns.o : sunfns.c buffer.h config.h
${etcdir}emacstool: ${etcdir}emacstool.c
cd ${etcdir}; ${MAKE} ${MFLAGS} emacstool
+
+SimpleRexx.o: SimpleRexx.c SimpleRexx.h
+amiga_clipboard.o: amiga_clipboard.c termchar.h amiga.h config.h
+amiga_dump.o: amiga_dump.c termchar.h buffer.h dispextern.h regex.h amiga.h config.h
+amiga_menu.o: amiga_menu.c amiga.h config.h
+amiga_processes.o: amiga_processes.c amiga.h config.h
+amiga_rexx.o: amiga_rexx.c SimpleRexx.h amiga.h config.h
+amiga_screen.o: amiga_screen.c termchar.h dispextern.h amiga.h config.h
+amiga_serial.o: amiga_serial.c amiga.h config.h
+amiga_sysdep.o: amiga_sysdep.c termopts.h termhooks.h termchar.h dispextern.h \
+ amiga.h config.h
+amiga_term.o: amiga_term.c termopts.h termhooks.h termchar.h config.h
+amiga_tty.o: amiga_tty.c termhooks.h termchar.h amiga.h config.h
+amiga_malloc.o: amiga_malloc.c amiga.h config.h
+ $(CC) $(CFLAGS) parms=both amiga_malloc.c