home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 7
/
FreshFishVol7.bin
/
bbs
/
gnu
/
emacs-18.59-diffs.lha
/
GNU
/
src
/
diffs
/
emacs-18.59.diffs
Wrap
Text File
|
1994-09-07
|
1MB
|
36,476 lines
diff -rc --new-file emacs-18.59/Product-Info /gnu/src/amiga/emacs-18.59/Product-Info
*** emacs-18.59/Product-Info Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/Product-Info Tue Jul 12 17:05:44 1994
***************
*** 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 -rc --new-file emacs-18.59/amiga/README /gnu/src/amiga/emacs-18.59/amiga/README
*** emacs-18.59/amiga/README Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/README Tue Jul 12 10:00:08 1994
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/INSTALL.AMIGA /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/INSTALL.AMIGA
*** emacs-18.59/amiga/amiga-extra/INSTALL.AMIGA Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/INSTALL.AMIGA Sun May 9 18:19:06 1993
***************
*** 0 ****
--- 1,58 ----
+ DON'T FORGET: This version of Emacs REQUIRES AMIGADOS V2.04 !!
+
+ 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/.emacs /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/.emacs
*** emacs-18.59/amiga/amiga-extra/amiga/.emacs Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/.emacs Sun Sep 20 10:06:40 1992
***************
*** 0 ****
--- 1 ----
+ ;; Put your configuration commands here.
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/.emacs-menu.el /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/.emacs-menu.el
*** emacs-18.59/amiga/amiga-extra/amiga/.emacs-menu.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/.emacs-menu.el Sat May 16 13:53:06 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/.emacs-menu.menu /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/.emacs-menu.menu
*** emacs-18.59/amiga/amiga-extra/amiga/.emacs-menu.menu Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/.emacs-menu.menu Sat May 16 13:52:44 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/amiga.doc /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/amiga.doc
*** emacs-18.59/amiga/amiga-extra/amiga/amiga.doc Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/amiga.doc Wed Sep 29 22:42:40 1993
***************
*** 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 AmigaDOS 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 AmigaDOS & 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/announce1.28 /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/announce1.28
*** emacs-18.59/amiga/amiga-extra/amiga/announce1.28 Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/announce1.28 Thu Sep 30 19:48:52 1993
***************
*** 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
+ AmigaDOS (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:
+ - AmigaDOS 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/c/emacs /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/emacs
*** emacs-18.59/amiga/amiga-extra/amiga/c/emacs Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/emacs Sun May 9 18:16:16 1993
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/c/etags.uue /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/etags.uue
*** emacs-18.59/amiga/amiga-extra/amiga/c/etags.uue Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/etags.uue Tue Jul 12 10:34:45 1994
***************
*** 0 ****
--- 1,610 ----
+ begin 666 etags
+ M```#\P`````````"``````````$``!B&```"^P```^D``!B&2.=^_B1()`!)
+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
+ M+PU#[P`83KK[E%!/2H!G!B]``!A@"G``$"\`#"!+3I4@;P`8$!@?0``,+T@`
+ M&$H`9K9,WR@`WOP`#$YU(&\`!""(6)!"J``$(4@`"$YU```@;P`$2.<`!BI(
+ M2JT`"F<*(DTL>``$3J[^F!M\`/\`"'#_*T``%'``$"T`#RQX``1.KOZP(DUP
+ M(DZN_RY,WV``3G4``"!O``0@+P`(2.<#%BX`*DAP_RQX``1.KOZV'`!(ADC&
+ M(`92@&8$<`!@8'`B(CP``0`!3J[_.B9`2H!F""`&3J[^L&!$0>L`"B#-%T<`
+ M"1=\``0`"$(8$,:3R4ZN_MHG0``0(`UG"")+3J[^GF`:0>L`&"=(`!1!ZP`4
+ M)T@`'$*K`!@7?``"`"`@"TS?:,!.=2\(+P!.N0```F!03TYU``````/L````
+ M`0```````&(.`````@````$````4````"@````````/R```#Z@```=``````
+ 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/c/getstack.uue /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/getstack.uue
*** emacs-18.59/amiga/amiga-extra/amiga/c/getstack.uue Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/getstack.uue Tue Jul 12 10:35:07 1994
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/c/grep.uue /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/grep.uue
*** emacs-18.59/amiga/amiga-extra/amiga/c/grep.uue Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/grep.uue Tue Jul 12 10:35:27 1994
***************
*** 0 ****
--- 1,1028 ----
+ begin 666 grep
+ M```#\P`````````"``````````$``"F2```+:@```^D``"F22.=^_B1()`!)
+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
+ 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/c/ls.uue /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/ls.uue
*** emacs-18.59/amiga/amiga-extra/amiga/c/ls.uue Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/ls.uue Tue Jul 12 10:35:38 1994
***************
*** 0 ****
--- 1,929 ----
+ begin 666 ls
+ M```#\P`````````"``````````$``".[```$S````^D``".[2.=^_B1()`!)
+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
+ M``!W:61T:`!A;&UO<W0M86QL``!I9VYO<F4M8F%C:W5P<P``8VQA<W-I9GD`
+ 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/c/rmdir.uue /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/rmdir.uue
*** emacs-18.59/amiga/amiga-extra/amiga/c/rmdir.uue Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/rmdir.uue Tue Jul 12 10:35:52 1994
***************
*** 0 ****
--- 1,404 ----
+ begin 666 rmdir
+ M```#\P`````````"``````````$```\'```"=````^D```\'2.=^_B1()`!)
+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
+ 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/c/sort.uue /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/sort.uue
*** emacs-18.59/amiga/amiga-extra/amiga/c/sort.uue Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/c/sort.uue Tue Jul 12 10:36:08 1994
***************
*** 0 ****
--- 1,650 ----
+ begin 666 sort
+ M```#\P`````````"``````````$``!F=```"L@```^D``!F=2.=^_B1()`!)
+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
+ M3J[_?&`,(DUP'"QX``1.KO\N(&P=!"QX``1.KOZ,*D!*@&;B(&P=!$ZZL
+ M>``$3J[_=DS?8`!.=0``(&\`!"`O``@B+P`,(F\`$"]O`!0`!"]O`!@`"%E/
+ M2.</-B@O`"PJ+P`H+`$N`"I)+T@`("QX``1.KOUF)D!*@&<P($L@!$ZN_7(D
+ M0$J`9R(@#6<()4T`*"5%`"0@;P`@(`<B2B(&3J[^1$H`9@0@"F`6(`IG!B!*
+ M3J[];"`+9P8@2TZZ%Z!P`$S?;/!83TYU(&\`!$CG``8J2"`-9Q@B32QX``1.
+ MKOX^(&T`#DZZ%W8@34ZN_6Q,WV``3G593T'Y`````"Z(9P@@>?____Q.D%A/
+ M3G593T'Y`````"Z(9P@@>?____Q.D%A/3G5(YP,$*F\`$"!-2AAF_%.(D<TN
+ M"&`*(`9![`E&3KH+5GP`'!U*AF;N0>P)1DZZ#V8@!TS?(,!.=9[\`!!(YP<4
+ M?@!+[P`L8```FG`EL"\`%&8``(`@;P`H4J\`*!`0<@`2`!]``!5P9)*`9SIP
+ M#)*`9PY7@6<&6X%G!F!$)EU@-"P=1^\`'GH'(`9R#\"!0?H`>-'`%I!3B^B&
+ M4X5*A6KH0B\`'V`*(!U![P`73KH"&D?O`!<O"TZZ_TA83]Z`8")2AW``$"\`
+ M%4'L"49.N@JF8!!2AW``$"\`%$'L"49.N@J4(&\`*%*O`"@0$!]``!1F`/]8
+ M0>P)1DZZ#IH@!TS?*.#>_``03G4P,3(S-#4V-S@Y04)#1$5&`````$CG`Q<J
+ M;!T,8!0F57`4T*T`!")-+'@`!$ZN_RXJ2R`-9NA"K!T,8$PJ;!T8<)S0K`G<
+ M)D`@+0`$*4`=&"EM``@)W"XM`!A*@&8>(&P*``QH`"0`%&42($\L"$'M``PL
+ M>``$3J[])"Y&(DL@!RQX``1.KO\N2JP=&&:N3-_HP$YU(&\`!")O``@@4")1
+ M$!BP&68$2@!F]I`A2(!(P$YU(&\`!"`O``A#^O_@<@1.^@>:(&\`!")O``@@
+ M+P`,2H!O"A(0$-$2P5.`9O9.=2!O``0B;P`(<`!R`!`8$AD,``!A;0H,``!Z
+ M;@0$```@#`$`86T*#`$`>FX$!`$`()"!9@1*`6;43G4``"`O``@@;P`$3E7_
+ M]")/<@I.N@)P!D$`,!+!2H!F\"`)$.&_R6;Z0A"0CTY=3G4``"`O``@@;P`$
+ M3E7_]")/(@`"00`'!D$`,!+!YHAF\"`)$.&_R6;Z0A"0CTY=3G4``#`Q,C,T
+ M-38W.#EA8F-D968@+P`((&\`!%%/(D\R``)!``\2^Q#<Z(AF\B`)$.&_R6;Z
+ M0A"0B5!/3G4``"`O``@@;P`$+PA*@$Y5__0B3VP&$/P`+42`<@I.N@'(!D$`
+ M,!+!2H!F\!#AO\EF^D(0(`A.79"?3G4``"!O``0B;P`(2.<P("1(<@`@`28!
+ M#!``*V<(#!``+68$=@%22!`8!```,&T:#```"6X4)`'E@=*"TH%*`V8$TH!@
+ MXI*`8-XB@2`(D(I3@$S?!`Q.=2!O``0O#2I(""T``P`;9C`@+`F,3KH$?BM`
+ M``0K0``09@IP#"E`',QP_V`6*VP)C``4<//!K0`80JT`#$*M``AP`"I?3G4`
+ M`"!O``1(YR`4*D@F36`@<``0$T'L"!T(,``!"`!G"G(`$@!T()*"8`1R`!(`
+ M%L%*$V;<(`U,WR@$3G4``)[\`%!(YS$V0_H`A'``+'@`!$ZN_=@J0$J`9@9P
+ M%$ZZ[')^`"!L"@P>*/__(`=#[P`<8`(2V%.`9/I"-W@<0>\`'"E(":1#[`FL
+ M1^P)P"Q-D<B5RG``(@!T?=2"=BA.KOZD<!1.NNPL3-]LC-[\`%!.=2HJ(%-T
+ M86-K($]V97)F;&]W("HJ``!%6$E4``!I;G1U:71I;VXN;&EB<F%R>0!*@&H`
+ M`!Y$@$J!:@``#$2!80``($2!3G5A```81(!$@4YU2H%J```,1(%A```&1(!.
+ M=2\"2$$T`68``")(0$A!2$(T`&<```:$P3`"2$`T`(3!,`)(0C(")!].=2\#
+ M=A`,00"`9```!N&944,,00@`9```!NF964,,02``9```!N6954-*06L```;C
+ MF5-#-`#FJ$A"0D+FJDA#@,$V`#`"-`-(0<3!D()D```&4T/0@7(`,@-(0^>X
+ M2$#!028?)!].=0``2.=P`"0`9R!*@68$0H!@&"8`QL%(0L3!2$)"0M:"2$'`
+ MP4A`0D#0@TS?``Y.=0``("P*"`1``?0N0$[Z_F```"!O``0@+P`((B\`#%.!
+ M:P2P&&;X4TA2@4J!9@``!)'((`A.=2)O``@@;P`$("\`#"((8`00V6<(4X!D
+ M^&`&0AA3@&3Z(`%.=2)O``@@;P`$("\`#"((2H!O%K')90S3P-'`$2%3@&;Z
+ M8`80V5.`9OH@`4YU(&\`!"`O``A(YP,4+@`J2&82(`UF!'``8&@@34ZZ`&YP
+ M`&!>(`UF"B`'3-\HP$[Z`<@F356+,#Q__\!32,#E@"P`"!,`#V<,#&N``/_^
+ M9@0L*__R(`=.N@&@)D!*@&8$<`!@'KR'8P0@!V`"(`8@32)+8`(2V%.`9/H@
+ M34ZZ``X@"TS?*,!.=2!O``0@"&8"3G59@$CG/#(B+!T,9@XI?````!8<S$S?
+ M3#Q.=2)!L(%O$B0!U*D`!`:"````%+"";`)@""(I``!GU&#@)@$&@P```!"P
+ M@VW&9Q(D0T*"-"H``FNZY8K6@EB#8.@D0#0J``!JJ@BJ``<``$*#-BH``@)#
+ M?__EBTIJ``)K0$?R.`1*:P``:S9"A#@K``("1'__Y8S8@UB$Y(Q8@TIK``)J
+ M!`!$@``U1``":Q(J!.6,-#)(!`)"@`"*0C6%2`1"A#@J``!G3.6,1(1'\DC\
+ M2FL``&L^0H0X*P`"Y8Q"A3HJ``("17__Y8W8A5B$6(/DC$IJ``)J!`!$@``W
+ M1``":Q(J!.6,-#-(!`)"@`"*0C>%2`37J0`()BD`!+:L"!AN#+:I``AF.DJI
+ M``!G-"`L'0P@0+*`9@PI:0``'0Q@$"!H``"RJ```9O8A:0`````@*0`$!H``
+ M```4+'@`!$ZN_RY,WTP\3G4@+P`$2H!F#"E\````%AS,<`!.=4CG/C)6@`*`
+ M_____`R```'__&X``+BPK`@8;@``L"8L'0QG``"H(D.PJ0`(;C(B+!T0LJD`
+ M#&8H1>D`$$I2:Q!"A#@J``("1'__Y8RPA&\:0H0X*@`":PCEC$7R2`1@W"8I
+ M``!G9B)#8+X(Z@`'``!'\@@$0H6PA&<\+`2<@%F&9@0@!&`PY(Y*:@`":@0`
+ M1H``*@#DC3=&``(W10``-44``GH$2D9K#C0R2`0"0H``C$(UAD@$)BD`"):`
+ MEH4C0P`((`I8@$S?3'Q.=2H`L*P(&&H$("P(&"@`!H`````4(BP=$"QX``1.
+ MKO\Z2H!F"BE\````#!S,8,PB0$7I`!`C;!T,```I21T,(T0`!"-L'1``#"8$
+ MEH5G*%F#9R0C0P`(1_)8!#5\@````.2--44``C=%``#DBP!#@``W0P`"8!1"
+ MJ0`(-7R`````Y(P`1(``-40``B`*6(!,WTQ\3G4@;P`$("\`""(O``PB;P`0
+ M64](YP\V+`$N`"I(+TD`('`!OH!C``"R)DW7QB`'58!F)"\++PT@32)++&\`
+ M*$Z64$]*@&\``)(@!B!-(DM.NO@T8```A"`'XH@B!DZZ^X8B3=/`(`8@34ZZ
+ M^!HD37H`>`%@*B\-+PL@2R)-+&\`*$Z64$]*@&H24H75QK7+9PH@!B!+(DI.
+ MNO?LU\92A+B'9=*US6<*(`8@32)*3KKWUB9O`"`@!2(&($TB2V$`_U(@2M'&
+ M(`>0A5.`(@8B2TS?;/!8CV``_SI,WVSP6$].=2`O``1(YP$$+@`J;`G48`@@
+ M;0`$3I`J52`-9O1+[`DD<`;`K0`858!F&"`M``20K0`09PXB+0`<(&T`$,%!
+ M3KKO2"!-*E`@#6;6(`=,WR"`3OKEX"`O``0@;P`(0]!2F2!14ID0@$YU44\@
+ M;P`,0I<O2``$2&\`%"\O`!1!^O_>0^\`"$ZZ"_X@;P`,0A!03R`74$].=0``
+ M("\`!"!O``@O#2(`*DA2E4/M``@@$5*1&X$(#"`9#(````(`;11![0`,(FT`
+ M!'(!P4%.N@'P0JT`""I?3G6>_`(,+PTJ;P(40J\`#$*O``0O30`(2&\"'"\O
+ M`AQ!^O^J0^\`#$ZZ"X903R`O``QG$$'O`!`B;P`(<@'!04ZZ`:8(+0`%`!MF
+ M"`@M``0`&V<$</]@!"`O``0J7][\`@Q.=2`O``0@;P`(64](YP,$+@`J2'P`
+ M'T``#W)!TH'"K0`89@P([0`%`!MP_V```4!P,\"M`!A5@&=0<$Q&`,"M`!AR
+ M0-*!L(%F#`CM``$`&T*M``Q@-`@M``4`&V<&</]@``$,<&Y&`,"M`!AR;D8!
+ ML(%F#`CM``$`&T*M``Q@"G``*T``#&```.8@+0`,L*T`%&PR(&T`!%*M``0@
+ M!Q"`4JT`#`@M``8`&V<.<@J^@68(($U.N@-T+`!*AF<``*H@!F```*H(+0`"
+ M`!MG+D*M``P@+0`<0>\`#W(!3KKM="P`4H!F"`CM``4`&V!R(`93@&=L".T`
+ M!``;8&1*K0`49B`@34ZZ]N1*@&<*".T`!0`;</]@6'``*T``#"MM`!``!"`M
+ M``RPK0`4;0@@34ZZ`OHL``CM``$`&R!M``12K0`$(`<0@%*M``P(+0`&`!MG
+ M#G(*OH%F""!-3KH"SBP`2H9G!"`&8`9R`!('(`%,WR#`6$].=2!O``0@+P`(
+ M(B\`#")O`!!93TCG#Q`L`2X`)DDO2``4(`8B!TZZ^#(J`'@`2H=G!$J&9@9P
+ M`&```/QP,,"K`!AF"G!!T(#`JP`89@P(ZP`%`!MP`&```-YP,\"K`!A5@&=0
+ M<$Q&`,"K`!AR0-*!L(%F#`CK``$`&T*K``Q@-`@K``4`&V<&<`!@``"J<&Y&
+ M`,"K`!AR;D8!L(%F#`CK``$`&T*K``Q@"D*K``QP`&```(1*JP`49DP(*P`"
+ M`!MF1"!+3KKUL$J`9SH(ZP`%`!MP`&!@(&\`%!`8(FL`!!*`4JL`!%*K``Q3
+ MA5*$+T@`%'(*L`%F#@@K``8`&V<&($M.N@&R("L`#+"K`!1L!$J%;L)*A6\6
+ M($M.N@&:("L`'"(%(&\`%$ZZZ[38@"`$(@=.NO:43-\(\%A/3G4@;P`$("\`
+ M""(O``PB;P`044](YP\4+@`J22P!)D@O00`8+T@`'$J'9P1*AF8&<`!@``$X
+ M(`8B!TZZ]N(L`'H`<##`K0`89P9P`&```1YP?D8`P*T`&&<``1)P,\"M`!A3
+ M@&<T<%Q&`,"M`!AR0-*!L(%F%`CM````&P@M``0`&V<6<`!@``#D0JT`"`CM
+ M``4`&W``8```U$JM`!1F+@@M``(`&V8F($U.NO2.2H!G'`CM``4`&W``8```
+ ML$/M``0@41;04IE3F5.&4H5*K0`(9P1*AF[F2H9O``"(""T``@`;9@:\K0`4
+ M;S`@+0`<(@8@2TZZ[!PH`$J&:A`([0`%`!L@!2('3KKU@F!>N(9L!@CM``0`
+ M&]J$8$@@;0`0*T@`!"`M`!PB+0`4(&T`$$ZZZ^`H`&P0".T`!0`;(`4B!TZZ
+ M]4A@)$J$9A`([0`$`!L@!2('3KKU-&`0*T0`"&``_VP@!2('3KKU(DS?*/!0
+ M3TYU```@;P`$2.<!!"I((`UG``"@<$'0@,"M`!AF+"!M`!!#[0`$(LA"F4(M
+ M`"!P`"+`""T`!P`;9P8(K0```!L(K0`$`!M@``"*2JT`%&=$("T`#&H&<@`K
+ M00`,("T`#&<H(BT`'"!M`!#!04ZZZ<(N`%*`9@@([0`%`!M@#+ZM``QG!@CM
+ M``0`&RMM`!``!$*M``QP,,"M`!AF$@@M``<`&V<&</S!K0`8<`!@)'#_8"!^
+ M`$OL"21*K0`89PP@36$`_T9*@&<"?O\J52`-9N@@!TS?((!.=2!O``1(YP$$
+ M*DA^`"`-9P8@+0`89@1P_V!`""T``0`;9P@@34ZZ_PHN`'`,P*T`&&8.2JT`
+ M%&<((&T`$$ZZ]=9"K0`8("T`'$ZZT*)2AV<$2H!G!'#_8`)P`$S?((!.=2!O
+ M``0B;P`(+V\`#``$64](YP\4)F\`("I)+T@`&'X`+"P)D'H`2JL`&&<&($M.
+ MNO]T<``0+0`!<BN0@6<@<C:0@6<&4X!G!&`@?`!R*[(M``)7P$0`2(!(P"H`
+ M8`QZ`7!AL"T``F8"?`!P`!`5<F&0@6<,<A&0@6<:6X!G)&`V2H56P'(!D@``
+ M00$(C(%^0.&/8"A*A5;`<@"2`)(`C(%@&DJ%5L!R`9(``$$!``!!`@",@6`&
+ M<`!@``"`+RP)E"\&+R\`($ZZWU1/[P`,*`!2@&8$<`!@8DJ%9P8(QP`'8#!P
+ M`!`5<F&0@6<,<A&0@6<:6X!G&F`:",<``4AX``(@!'(`3KKH]%A/8`9^`6`"
+ M?@((!@`/9@0(QP`/D<A+ZP`0*L@JR"=$`!PG2``$)T@`#"=(``@JQR`+3-\H
+ M\%A/3G4``"!O``0B;P`(44](YP`42.\#```(2^P))&`$)DTJ4R`-9P9*K0`8
+ M9O(@#68><").NO6L*D!*@&8$<`!@'B!-)HAP(7(`$,%1R/_\+PT@;P`,(F\`
+ M$$ZZ_G183TS?*`!03TYU```@;P`$(F\`""]O``P`!"]O`!``")[\`#1(YR\V
+ M)F\`8"IO`%Q([P,``"Q"+P`[0B\`.D(O`#E"+P`X'WP`(``W0J\`5'#_+T``
+ M4$(O`#9^`'P`1>\`/&!*<``@;P`L$!!R()"!9R)7@&<F48!G$E6`9P97@&<B
+ M8#(??``!`#M@'A]\``$`.F`6'WP``0`Y8`X??``!`#A@!A]\`#``-U*O`"P@
+ M;P`L2A!FKG`!L"\`.V8&'WP`(``W<BH@;P`LLA!F'BQO`#`B5EB6(A$O00!4
+ M;`A$KP!4'T``.U*O`"Q@#$/O`%1.NN^RT:\`+"!O`"P0$'(NL`%F1E*O`"QP
+ M*B!O`"RP$&8<(F\`,"!16)$@$"]``%!L!G#_+T``4%*O`"Q@%D/O`%!.NN]P
+ M*@!F!D*O`%!@!-NO`"P??``@`#=P`"!O`"P0$'),D(%G%'(<D(%G!EF`9PI@
+ M$A]\``(`-F`&'WP``0`V4J\`+"!O`"Q2B")O`"P0$7(`$@`?0``D+T@`)G!0
+ MDH!G``$048%G``$<<`N2@&<``=!3@6=06X%G3%N!9R)3@6<``0)3@6<``.I7
+ M@6<``8!5@6<``/!7@6<``.I@``&X)&\`,'`"L"\`-F8.(%)8DB)0(!,R@&``
+ M`DH@4EB2(E`BDV```CXB;P`P(%%8D2@0:@1^`42$2H=G#$7O`#T??``M`#Q@
+ M(DHO`#IG#$7O`#T??``K`#Q@$$HO`#EG#$7O`#T??``@`#Q\`2`$($I.NNV*
+ M*@`@+P!09@9*A&<``>0@+P!0:@9R`2]!`%`H+P!0F(5O'"!*T<0@!2)*3KKP
+ M_'(P($I@`A#!4X1D^BHO`%#<A2`%4X!F``$$$!*P+P`W9@``^DJO`%!F``#R
+ M0A)@``#L("\`4&H&<`@O0`!0'WP``0`V<`*P+P`V9A`B;P`P(%%8D2`0>``X
+ M`&`*(F\`,"!16)$H$!`O`"1R=;`!9P#_6G)OL`%F'DHO`#AG#$7O`#T??``P
+ M`#Q\`2`$($I.NNSZ8`#_/DHO`#AG$A]\`#``/$7O`#X??`!X`#U\`B`$($I.
+ MNNT6*@`(+P`%`"1F`/\40>\`/$ZZ[@)@`/\((F\`,"!16)$D4"`*9@1%^@#R
+ M($I*&&;\4XB1RBH(("\`4&L$L(5O!"]%`%`L+P!08"!\`2)O`#`@45B1(!`?
+ M0``\0B\`/6`&<`!@``"L1>\`/"`O`%2PAFP(<@`O00!48`2=KP!42B\`.V<>
+ M8`AP`!`:($M.E5.&;/1@!B!+<"!.E5.O`%1L]&!J2H=F#$HO`#EF!DHO`#IG
+ M1A`2<B"P`6<,="NP`F<&="VP`F8R2H9K+K(O`#=F$F`*<``0+P`W($M.E5.O
+ M`%1L\'``$!H@2TZ54X9@"G``$"\`-R!+3I53KP!4;/!@"'``$!H@2TZ54X9L
+ M]"`O`"9,WVSTWOP`-$YU```@;P`$(F\`""]O``P`!"]O`!``")[\``Q(YP`4
+ M)DDJ2"]O`!P`$&`X<"6P+P`,9B8@;P`8L!!F!E*O`!A@&"\++PU#[P`83KK[
+ ME%!/2H!G!B]``!A@"G``$"\`#"!+3I4@;P`8$!@?0``,+T@`&$H`9K9,WR@`
+ MWOP`#$YU(&\`!""(6)!"J``$(4@`"$YU```@;P`$2.<`!BI(2JT`"F<*(DTL
+ M>``$3J[^F!M\`/\`"'#_*T``%'``$"T`#RQX``1.KOZP(DUP(DZN_RY,WV``
+ M3G4``"!O``0@+P`(2.<#%BX`*DAP_RQX``1.KOZV'`!(ADC&(`92@&8$<`!@
+ M8'`B(CP``0`!3J[_.B9`2H!F""`&3J[^L&!$0>L`"B#-%T<`"1=\``0`"$(8
+ M$,:3R4ZN_MHG0``0(`UG"")+3J[^GF`:0>L`&"=(`!1!ZP`4)T@`'$*K`!@7
+ M?``"`"`@"TS?:,!.=2\(+P!.N0``(?Y03TYU``````/L`````0```````&9J
+ M`````0````$````*`````````_(```/J```"LD%04@!!54<`1$5#`$9%0@!*
+ 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/compile.doc /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/compile.doc
*** emacs-18.59/amiga/amiga-extra/amiga/compile.doc Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/compile.doc Sun Jan 17 12:21:18 1993
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el Thu Mar 18 22:26:08 1993
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el Thu Mar 18 22:26:44 1993
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker Sat May 8 12:38:48 1993
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx Thu Mar 18 22:54:36 1993
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/README /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/README
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/README Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/README Thu Oct 1 07:30:20 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/dtags.el /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/dtags.el
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/dtags.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/dtags.el Mon Dec 23 21:21:46 1991
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/dtags.elc and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/dtags.elc differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el Thu Oct 1 07:24:18 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/README /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/README
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/README Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/README Thu Oct 1 07:17:36 1992
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/distinews.lha and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/distinews.lha differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx Thu Oct 1 06:56:54 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc Mon Jul 20 18:55:54 1992
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c Wed Jul 22 17:40:22 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts Mon Jul 20 18:55:52 1992
***************
*** 0 ****
--- 1,7 ----
+ -rr
+ -v
+ -cs
+ -ms
+ -Lc
+ -Ld
+ -Pfakemail
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h Wed Jul 22 17:40:32 1992
***************
*** 0 ****
--- 1 ----
+ #define VERSION "0.06"
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc Wed Jul 22 17:01:58 1992
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c Wed Jul 22 17:36:28 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts Wed Jul 22 17:01:56 1992
***************
*** 0 ****
--- 1,7 ----
+ -rr
+ -v
+ -cs
+ -ms
+ -Lc
+ -Ld
+ -Pmovemail
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h Wed Jul 22 17:36:32 1992
***************
*** 0 ****
--- 1 ----
+ #define VERSION "0.02"
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/kaiser/README /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/kaiser/README
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/kaiser/README Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/kaiser/README Sun Jan 17 11:48:08 1993
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/kaiser/pub and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/kaiser/pub differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/COPYING /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/COPYING
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/COPYING Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/COPYING Thu Sep 30 17:29:32 1993
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/COPYING.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/COPYING.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/Emacs.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/Emacs.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_asm.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_asm.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_c.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_c.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_el.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_el.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_emacs.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_emacs.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_h.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_h.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_rexx.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_rexx.info differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons.el /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons.el
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons.el Wed Sep 29 22:43:36 1993
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/icons.info differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el Thu Sep 30 21:02:52 1993
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc.info differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el Thu Sep 30 21:11:14 1993
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/lisp.info differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx Fri Oct 1 08:56:48 1993
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/rexx.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/rexx.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/rexxmode10.lha and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/rexxmode10.lha differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/sas-c-emacs.lha and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/sas-c-emacs.lha differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc Thu Sep 30 23:30:30 1993
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc.info differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile Thu Sep 9 23:57:48 1993
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c Thu Sep 30 21:29:50 1993
***************
*** 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 emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg.info and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/wbarg.info differ
Binary files emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/xsh11.lha and /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/lindgren/xsh11.lha differ
diff -rc --new-file emacs-18.59/amiga/amiga-extra/amiga/contrib/schinz/functions.el /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/schinz/functions.el
*** emacs-18.59/amiga/amiga-extra/amiga/contrib/schinz/functions.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/amiga-extra/amiga/contrib/schinz/functions.el Sat May 8 13:57:12 1993
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/alloca.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/alloca.h
*** emacs-18.59/amiga/unix/include/alloca.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/alloca.h Fri Aug 27 18:18:40 1993
***************
*** 0 ****
--- 1,8 ----
+ #ifndef ALLOCA_H
+ #define ALLOCA_H
+
+ #include <stddef.h>
+
+ void *alloca(size_t size);
+
+ #endif
diff -rc --new-file emacs-18.59/amiga/unix/include/amiga/ioctl.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/amiga/ioctl.h
*** emacs-18.59/amiga/unix/include/amiga/ioctl.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/amiga/ioctl.h Sat Aug 8 21:05:28 1992
***************
*** 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 AmigaDOS 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 -rc --new-file emacs-18.59/amiga/unix/include/errno.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/errno.h
*** emacs-18.59/amiga/unix/include/errno.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/errno.h Sun Jul 5 18:00:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/fcntl.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/fcntl.h
*** emacs-18.59/amiga/unix/include/fcntl.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/fcntl.h Thu Jul 9 22:05:10 1992
***************
*** 0 ****
--- 1 ----
+ #include <sys/fcntl.h>
diff -rc --new-file emacs-18.59/amiga/unix/include/grp.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/grp.h
*** emacs-18.59/amiga/unix/include/grp.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/grp.h Wed Jul 8 21:23:48 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/internal/devices.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/internal/devices.h
*** emacs-18.59/amiga/unix/include/internal/devices.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/internal/devices.h Sun Aug 16 11:07:18 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/internal/files.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/internal/files.h
*** emacs-18.59/amiga/unix/include/internal/files.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/internal/files.h Sun Dec 6 13:12:24 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/internal/messages.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/internal/messages.h
*** emacs-18.59/amiga/unix/include/internal/messages.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/internal/messages.h Sun Aug 16 12:43:04 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/internal/timers.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/internal/timers.h
*** emacs-18.59/amiga/unix/include/internal/timers.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/internal/timers.h Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/internal/vars.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/internal/vars.h
*** emacs-18.59/amiga/unix/include/internal/vars.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/internal/vars.h Sun Aug 16 10:58:12 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/pwd.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/pwd.h
*** emacs-18.59/amiga/unix/include/pwd.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/pwd.h Wed Jul 8 20:19:36 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/setjmp.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/setjmp.h
*** emacs-18.59/amiga/unix/include/setjmp.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/setjmp.h Sun Aug 16 11:57:38 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/signal.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/signal.h
*** emacs-18.59/amiga/unix/include/signal.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/signal.h Sun Oct 18 20:03:30 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/stat.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/stat.h
*** emacs-18.59/amiga/unix/include/stat.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/stat.h Fri Dec 4 20:34:06 1992
***************
*** 0 ****
--- 1 ----
+ #include <sys/stat.h>
diff -rc --new-file emacs-18.59/amiga/unix/include/stdio.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/stdio.h
*** emacs-18.59/amiga/unix/include/stdio.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/stdio.h Fri Dec 4 22:35:48 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/stdlib.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/stdlib.h
*** emacs-18.59/amiga/unix/include/stdlib.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/stdlib.h Sat Sep 26 14:17:40 1992
***************
*** 0 ****
--- 1,4 ----
+ /* Avoid problems with conflicting declarations for mkdir */
+ #define mkdir __fake_mkdir
+ #include "include:stdlib.h"
+ #undef mkdir
diff -rc --new-file emacs-18.59/amiga/unix/include/strings.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/strings.h
*** emacs-18.59/amiga/unix/include/strings.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/strings.h Sat Aug 1 11:48:24 1992
***************
*** 0 ****
--- 1 ----
+ #include <string.h>
diff -rc --new-file emacs-18.59/amiga/unix/include/sys/cdefs.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/cdefs.h
*** emacs-18.59/amiga/unix/include/sys/cdefs.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/cdefs.h Thu Jul 9 22:02:46 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/sys/fcntl.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/fcntl.h
*** emacs-18.59/amiga/unix/include/sys/fcntl.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/fcntl.h Sat Aug 9 09:22:26 2008
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/sys/file.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/file.h
*** emacs-18.59/amiga/unix/include/sys/file.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/file.h Thu Aug 13 21:26:00 1992
***************
*** 0 ****
--- 1,2 ----
+ #include <fcntl.h>
+ #include <sys/unistd.h>
diff -rc --new-file emacs-18.59/amiga/unix/include/sys/filio.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/filio.h
*** emacs-18.59/amiga/unix/include/sys/filio.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/filio.h Sun Jul 5 14:26:20 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/sys/ioctl.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/ioctl.h
*** emacs-18.59/amiga/unix/include/sys/ioctl.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/ioctl.h Tue Jul 7 20:44:40 1992
***************
*** 0 ****
--- 1 ----
+ #include <sys/termios.h>
diff -rc --new-file emacs-18.59/amiga/unix/include/sys/param.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/param.h
*** emacs-18.59/amiga/unix/include/sys/param.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/param.h Fri Dec 4 22:38:06 1992
***************
*** 0 ****
--- 1,11 ----
+ #ifndef _PARAM_H
+ #define _PARAM_H
+
+ #define MAXPATHLEN 1024
+ #define DEV_BSIZE 512
+
+ #ifndef NULL
+ #define NULL (0)
+ #endif
+
+ #endif
diff -rc --new-file emacs-18.59/amiga/unix/include/sys/socket.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/socket.h
*** emacs-18.59/amiga/unix/include/sys/socket.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/socket.h Sat Jul 4 14:31:08 1992
***************
*** 0 ****
--- 1,4 ----
+ /* Support for socket pairs only */
+
+ #define AF_UNIX 0
+ #define SOCK_STREAM 0
diff -rc --new-file emacs-18.59/amiga/unix/include/sys/stat.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/stat.h
*** emacs-18.59/amiga/unix/include/sys/stat.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/stat.h Fri Dec 4 20:34:52 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/sys/termios.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/termios.h
*** emacs-18.59/amiga/unix/include/sys/termios.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/termios.h Thu Jul 9 21:49:32 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/sys/time.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/time.h
*** emacs-18.59/amiga/unix/include/sys/time.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/time.h Mon Aug 17 20:40:54 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/sys/timeb.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/timeb.h
*** emacs-18.59/amiga/unix/include/sys/timeb.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/timeb.h Wed Jul 8 21:02:30 1992
***************
*** 0 ****
--- 1,12 ----
+ #ifndef _TIMEB_H
+ #define _TIMEB_H
+
+ struct timeb
+ {
+ time_t time;
+ unsigned short millitm;
+ short timezone;
+ short dstflag;
+ };
+
+ #endif
diff -rc --new-file emacs-18.59/amiga/unix/include/sys/types.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/types.h
*** emacs-18.59/amiga/unix/include/sys/types.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/types.h Fri Aug 14 19:58:50 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/sys/unistd.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/unistd.h
*** emacs-18.59/amiga/unix/include/sys/unistd.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/unistd.h Fri Dec 4 22:35:36 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/sys/vlimit.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/vlimit.h
*** emacs-18.59/amiga/unix/include/sys/vlimit.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/vlimit.h Sat Jul 4 14:31:04 1992
***************
*** 0 ****
--- 1,2 ----
+ /* Dummy for Emacs so that we can run on VMS... */
+ #define LIM_DATA 0
diff -rc --new-file emacs-18.59/amiga/unix/include/sys/wait.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/wait.h
*** emacs-18.59/amiga/unix/include/sys/wait.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/sys/wait.h Fri Aug 14 19:55:48 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/time.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/time.h
*** emacs-18.59/amiga/unix/include/time.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/time.h Sat Aug 1 18:53:58 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/tzfile.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/tzfile.h
*** emacs-18.59/amiga/unix/include/tzfile.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/tzfile.h Fri Jul 31 23:33:04 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/unistd.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/unistd.h
*** emacs-18.59/amiga/unix/include/unistd.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/unistd.h Wed Dec 2 19:54:00 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/include/utime.h /gnu/src/amiga/emacs-18.59/amiga/unix/include/utime.h
*** emacs-18.59/amiga/unix/include/utime.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/include/utime.h Sun Jul 5 18:02:02 1992
***************
*** 0 ****
--- 1,3 ----
+ struct utimbuf { time_t actime, modtime; };
+
+ int utime(char *path, struct utimbuf *times);
diff -rc --new-file emacs-18.59/amiga/unix/intro.doc /gnu/src/amiga/emacs-18.59/amiga/unix/intro.doc
*** emacs-18.59/amiga/unix/intro.doc Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/intro.doc Tue Sep 22 20:27:34 1992
***************
*** 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 AmigaDOS 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 AmigaDOS 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 -rc --new-file emacs-18.59/amiga/unix/mkmkf /gnu/src/amiga/emacs-18.59/amiga/unix/mkmkf
*** emacs-18.59/amiga/unix/mkmkf Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/mkmkf Wed Sep 29 23:08:18 1993
***************
*** 0 ****
--- 1,2 ----
+ copy smakefile smakefile!
+ perl src:unix/mkmkf.perl `glob *.c` >smakefile
diff -rc --new-file emacs-18.59/amiga/unix/mkmkf.perl /gnu/src/amiga/emacs-18.59/amiga/unix/mkmkf.perl
*** emacs-18.59/amiga/unix/mkmkf.perl Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/mkmkf.perl Wed Sep 29 23:08:32 1993
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/SCOPTIONS /gnu/src/amiga/emacs-18.59/amiga/unix/src/SCOPTIONS
*** emacs-18.59/amiga/unix/src/SCOPTIONS Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/SCOPTIONS Sat Dec 5 10:00:04 1992
***************
*** 0 ****
--- 1,9 ----
+ PARAMETERS=BOTH
+ NOSTACKCHECK
+ STRUCTUREEQUIVALENCE
+ NOVERSION
+ NOICONS
+ INCLUDEDIR=/include/internal/
+ INCLUDEDIR=/include/
+ IGNORE=104
+ IGNORE=74
diff -rc --new-file emacs-18.59/amiga/unix/src/_exit.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/_exit.c
*** emacs-18.59/amiga/unix/src/_exit.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/_exit.c Fri Dec 4 22:18:52 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/_main.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/_main.c
*** emacs-18.59/amiga/unix/src/_main.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/_main.c Sat Jun 5 15:25:10 1993
***************
*** 0 ****
--- 1,471 ----
+ #include "amiga.h"
+ #include "signals.h"
+ #include "fifofd.h"
+ #include "timers.h"
+ #include "amigados.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 AmigaDOS 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 AmigaDOS style
+ (+ filename expansion) */
+ if (*line == '"')
+ {
+ line++;
+ arg_start = line;
+ /* Find end of word */
+ while (*line && *line != '"')
+ {
+ /* * is an escape character inside double quotes
+ (AmigaDOS 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 -rc --new-file emacs-18.59/amiga/unix/src/_setjmp.asm /gnu/src/amiga/emacs-18.59/amiga/unix/src/_setjmp.asm
*** emacs-18.59/amiga/unix/src/_setjmp.asm Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/_setjmp.asm Sat Dec 5 18:18:18 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/abort.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/abort.c
*** emacs-18.59/amiga/unix/src/abort.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/abort.c Sun Jul 19 17:47:02 1992
***************
*** 0 ****
--- 1,11 ----
+ #include "amiga.h"
+ #include <signal.h>
+
+ extern void _close_all(void);
+
+ void abort(void)
+ {
+ chkabort();
+ _close_all();
+ kill(getpid(), SIGIOT);
+ }
diff -rc --new-file emacs-18.59/amiga/unix/src/access.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/access.c
*** emacs-18.59/amiga/unix/src/access.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/access.c Fri Dec 4 22:18:18 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/alloca.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/alloca.c
*** emacs-18.59/amiga/unix/src/alloca.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/alloca.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/allocdos.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/allocdos.c
*** emacs-18.59/amiga/unix/src/allocdos.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/allocdos.c Sun Oct 11 13:04:22 1992
***************
*** 0 ****
--- 1,6 ----
+ #include <proto/dos.h>
+
+ void *AllocDosObjectTags(ULONG type, ULONG tag1, ...)
+ {
+ return AllocDosObject(type, &tag1);
+ }
diff -rc --new-file emacs-18.59/amiga/unix/src/amiga.h /gnu/src/amiga/emacs-18.59/amiga/unix/src/amiga.h
*** emacs-18.59/amiga/unix/src/amiga.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/amiga.h Wed Dec 2 20:12:34 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/amigados.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/amigados.c
*** emacs-18.59/amiga/unix/src/amigados.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/amigados.c Sun Dec 6 13:14:12 1992
***************
*** 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 AmigaDOS 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 -rc --new-file emacs-18.59/amiga/unix/src/amigados.h /gnu/src/amiga/emacs-18.59/amiga/unix/src/amigados.h
*** emacs-18.59/amiga/unix/src/amigados.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/amigados.h Sun Jul 19 17:47:02 1992
***************
*** 0 ****
--- 1,10 ----
+ #ifndef AMIGADOS_H
+ #define AMIGADOS_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 -rc --new-file emacs-18.59/amiga/unix/src/amigatime.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/amigatime.c
*** emacs-18.59/amiga/unix/src/amigatime.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/amigatime.c Tue Aug 25 22:08:14 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/bcmp.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/bcmp.c
*** emacs-18.59/amiga/unix/src/bcmp.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/bcmp.c Wed Dec 2 19:59:32 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/bcopy.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/bcopy.c
*** emacs-18.59/amiga/unix/src/bcopy.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/bcopy.c Wed Dec 2 19:59:46 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/bzero.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/bzero.c
*** emacs-18.59/amiga/unix/src/bzero.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/bzero.c Wed Dec 2 19:59:04 1992
***************
*** 0 ****
--- 1,9 ----
+ #include "amiga.h"
+ #include <string.h>
+
+ #undef bzero
+
+ void bzero(char *b, int length)
+ {
+ memset(b, 0, length);
+ }
diff -rc --new-file emacs-18.59/amiga/unix/src/chmod.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/chmod.c
*** emacs-18.59/amiga/unix/src/chmod.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/chmod.c Wed Dec 2 19:52:06 1992
***************
*** 0 ****
--- 1,8 ----
+ #include "amiga.h"
+
+ int chmod(const char *name, int mode)
+ {
+ chkabort();
+ if (SetProtection(name, _make_protection(mode))) return 0;
+ ERROR;
+ }
diff -rc --new-file emacs-18.59/amiga/unix/src/chown.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/chown.c
*** emacs-18.59/amiga/unix/src/chown.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/chown.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/close.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/close.c
*** emacs-18.59/amiga/unix/src/close.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/close.c Fri Dec 4 22:17:50 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/creat.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/creat.c
*** emacs-18.59/amiga/unix/src/creat.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/creat.c Fri Dec 4 22:17:08 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/ctime.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/ctime.c
*** emacs-18.59/amiga/unix/src/ctime.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/ctime.c Sat Dec 5 11:00:58 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/devices.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/devices.c
*** emacs-18.59/amiga/unix/src/devices.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/devices.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/dir.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/dir.c
*** emacs-18.59/amiga/unix/src/dir.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/dir.c Fri Dec 4 20:32:28 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/dir_data.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/dir_data.c
*** emacs-18.59/amiga/unix/src/dir_data.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/dir_data.c Fri Dec 4 20:27:08 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/dir_data.h /gnu/src/amiga/emacs-18.59/amiga/unix/src/dir_data.h
*** emacs-18.59/amiga/unix/src/dir_data.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/dir_data.h Fri Dec 4 20:26:54 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/error.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/error.c
*** emacs-18.59/amiga/unix/src/error.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/error.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/error_msg.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/error_msg.c
*** emacs-18.59/amiga/unix/src/error_msg.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/error_msg.c Sat Dec 5 09:59:06 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/exec.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/exec.c
*** emacs-18.59/amiga/unix/src/exec.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/exec.c Sun Dec 6 14:32:30 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/fchmod.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/fchmod.c
*** emacs-18.59/amiga/unix/src/fchmod.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/fchmod.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/fcntl.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/fcntl.c
*** emacs-18.59/amiga/unix/src/fcntl.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/fcntl.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/fibstat.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/fibstat.c
*** emacs-18.59/amiga/unix/src/fibstat.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/fibstat.c Sat Dec 5 12:11:24 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/fibstat.h /gnu/src/amiga/emacs-18.59/amiga/unix/src/fibstat.h
*** emacs-18.59/amiga/unix/src/fibstat.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/fibstat.h Sat Oct 17 12:55:52 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/fifo.h /gnu/src/amiga/emacs-18.59/amiga/unix/src/fifo.h
*** emacs-18.59/amiga/unix/src/fifo.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/fifo.h Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/fifo_pragmas.h /gnu/src/amiga/emacs-18.59/amiga/unix/src/fifo_pragmas.h
*** emacs-18.59/amiga/unix/src/fifo_pragmas.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/fifo_pragmas.h Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/fifofd.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/fifofd.c
*** emacs-18.59/amiga/unix/src/fifofd.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/fifofd.c Fri Aug 14 18:33:24 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/fifofd.h /gnu/src/amiga/emacs-18.59/amiga/unix/src/fifofd.h
*** emacs-18.59/amiga/unix/src/fifofd.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/fifofd.h Mon Aug 24 22:31:52 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/files.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/files.c
*** emacs-18.59/amiga/unix/src/files.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/files.c Sun Dec 6 13:12:58 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/fstat.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/fstat.c
*** emacs-18.59/amiga/unix/src/fstat.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/fstat.c Sat Oct 17 12:47:08 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/ftruncate.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/ftruncate.c
*** emacs-18.59/amiga/unix/src/ftruncate.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/ftruncate.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/getenv.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/getenv.c
*** emacs-18.59/amiga/unix/src/getenv.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/getenv.c Wed Dec 2 19:52:54 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/gethostname.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/gethostname.c
*** emacs-18.59/amiga/unix/src/gethostname.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/gethostname.c Sun Aug 16 10:56:12 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/getpid.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/getpid.c
*** emacs-18.59/amiga/unix/src/getpid.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/getpid.c Sun Oct 18 20:11:42 1992
***************
*** 0 ****
--- 1,8 ----
+ #include "amiga.h"
+ #include "processes.h"
+
+ int getpid(void)
+ {
+ chkabort();
+ return _our_pid;
+ }
diff -rc --new-file emacs-18.59/amiga/unix/src/getwd.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/getwd.c
*** emacs-18.59/amiga/unix/src/getwd.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/getwd.c Sat Aug 15 11:22:30 1992
***************
*** 0 ****
--- 1,8 ----
+ #include "amiga.h"
+ #include <sys/param.h>
+
+ char *getwd (char *pathname)
+ {
+ chkabort();
+ return getcwd(pathname, MAXPATHLEN);
+ }
diff -rc --new-file emacs-18.59/amiga/unix/src/gid.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/gid.c
*** emacs-18.59/amiga/unix/src/gid.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/gid.c Sun Jul 19 17:47:02 1992
***************
*** 0 ****
--- 1,4 ----
+ #include "amiga.h"
+
+ gid_t getgid(void) { return AMIGA_GID; }
+ gid_t getegid(void) { return AMIGA_GID; }
diff -rc --new-file emacs-18.59/amiga/unix/src/grp.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/grp.c
*** emacs-18.59/amiga/unix/src/grp.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/grp.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/index.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/index.c
*** emacs-18.59/amiga/unix/src/index.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/index.c Wed Dec 2 20:22:34 1992
***************
*** 0 ****
--- 1,8 ----
+ #include <string.h>
+
+ #undef index
+
+ char *index(char *str, int c)
+ {
+ return strchr(str, c);
+ }
diff -rc --new-file emacs-18.59/amiga/unix/src/ioctl.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/ioctl.c
*** emacs-18.59/amiga/unix/src/ioctl.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/ioctl.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/isatty.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/isatty.c
*** emacs-18.59/amiga/unix/src/isatty.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/isatty.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/kill.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/kill.c
*** emacs-18.59/amiga/unix/src/kill.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/kill.c Fri Aug 14 19:48:34 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/link.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/link.c
*** emacs-18.59/amiga/unix/src/link.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/link.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/lseek.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/lseek.c
*** emacs-18.59/amiga/unix/src/lseek.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/lseek.c Fri Dec 4 22:17:36 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/message.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/message.c
*** emacs-18.59/amiga/unix/src/message.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/message.c Fri Dec 4 21:18:50 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/mkdir.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/mkdir.c
*** emacs-18.59/amiga/unix/src/mkdir.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/mkdir.c Sat Sep 26 14:20:44 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/mkfifo.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/mkfifo.c
*** emacs-18.59/amiga/unix/src/mkfifo.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/mkfifo.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/mktemp.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/mktemp.c
*** emacs-18.59/amiga/unix/src/mktemp.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/mktemp.c Sat Aug 15 12:21:26 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/open.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/open.c
*** emacs-18.59/amiga/unix/src/open.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/open.c Fri Dec 4 22:16:48 1992
***************
*** 0 ****
--- 1,141 ----
+ #include "amiga.h"
+ #include "files.h"
+ #include "amigados.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 -rc --new-file emacs-18.59/amiga/unix/src/perror.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/perror.c
*** emacs-18.59/amiga/unix/src/perror.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/perror.c Wed Dec 2 20:24:48 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/pipe.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/pipe.c
*** emacs-18.59/amiga/unix/src/pipe.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/pipe.c Sun Dec 6 13:14:56 1992
***************
*** 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 AmigaDOS 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 -rc --new-file emacs-18.59/amiga/unix/src/popen.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/popen.c
*** emacs-18.59/amiga/unix/src/popen.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/popen.c Sun Oct 25 11:25:20 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/processes.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/processes.c
*** emacs-18.59/amiga/unix/src/processes.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/processes.c Sat Sep 26 11:26:36 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/processes.h /gnu/src/amiga/emacs-18.59/amiga/unix/src/processes.h
*** emacs-18.59/amiga/unix/src/processes.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/processes.h Mon Oct 19 21:28:30 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/protection.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/protection.c
*** emacs-18.59/amiga/unix/src/protection.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/protection.c Sat Aug 8 22:13:32 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/pseudo_c.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/pseudo_c.c
*** emacs-18.59/amiga/unix/src/pseudo_c.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/pseudo_c.c Fri Aug 14 18:13:46 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/pwd.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/pwd.c
*** emacs-18.59/amiga/unix/src/pwd.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/pwd.c Sun Sep 20 09:36:52 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/read.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/read.c
*** emacs-18.59/amiga/unix/src/read.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/read.c Fri Dec 4 22:17:24 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/readlink.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/readlink.c
*** emacs-18.59/amiga/unix/src/readlink.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/readlink.c Mon Sep 27 19:20:10 1993
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/rename.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/rename.c
*** emacs-18.59/amiga/unix/src/rename.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/rename.c Wed Dec 2 20:01:48 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/rindex.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/rindex.c
*** emacs-18.59/amiga/unix/src/rindex.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/rindex.c Wed Dec 2 20:22:42 1992
***************
*** 0 ****
--- 1,8 ----
+ #include <string.h>
+
+ #undef rindex
+
+ char *rindex(char *str, int c)
+ {
+ return strrchr(str, c);
+ }
diff -rc --new-file emacs-18.59/amiga/unix/src/rmdir.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/rmdir.c
*** emacs-18.59/amiga/unix/src/rmdir.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/rmdir.c Sat Aug 1 16:08:26 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/select.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/select.c
*** emacs-18.59/amiga/unix/src/select.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/select.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/setjmp.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/setjmp.c
*** emacs-18.59/amiga/unix/src/setjmp.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/setjmp.c Sun Aug 16 11:57:30 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/siglist.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/siglist.c
*** emacs-18.59/amiga/unix/src/siglist.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/siglist.c Sat Aug 15 11:21:06 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/signal.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/signal.c
*** emacs-18.59/amiga/unix/src/signal.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/signal.c Sun Nov 8 19:33:22 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/signals.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/signals.c
*** emacs-18.59/amiga/unix/src/signals.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/signals.c Sun Oct 18 20:16:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/signals.h /gnu/src/amiga/emacs-18.59/amiga/unix/src/signals.h
*** emacs-18.59/amiga/unix/src/signals.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/signals.h Sun Oct 18 19:59:26 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/sigpause.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/sigpause.c
*** emacs-18.59/amiga/unix/src/sigpause.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/sigpause.c Sat Aug 1 16:42:14 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/sigsetmask.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/sigsetmask.c
*** emacs-18.59/amiga/unix/src/sigsetmask.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/sigsetmask.c Sun Oct 18 20:17:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/sleep.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/sleep.c
*** emacs-18.59/amiga/unix/src/sleep.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/sleep.c Sun Jul 19 17:47:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/smakefile /gnu/src/amiga/emacs-18.59/amiga/unix/src/smakefile
*** emacs-18.59/amiga/unix/src/smakefile Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/smakefile Sun Dec 6 14:33:20 1992
***************
*** 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 amigados.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 amigados.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
+ amigados.o: amigados.c signals.h amiga.h
+ ctime.o: ctime.c
+ open.o: open.c amigados.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 amigados.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 -rc --new-file emacs-18.59/amiga/unix/src/smakefile.base /gnu/src/amiga/emacs-18.59/amiga/unix/src/smakefile.base
*** emacs-18.59/amiga/unix/src/smakefile.base Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/smakefile.base Wed Dec 2 19:44:50 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/sprintf.asm /gnu/src/amiga/emacs-18.59/amiga/unix/src/sprintf.asm
*** emacs-18.59/amiga/unix/src/sprintf.asm Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/sprintf.asm Sat Aug 15 12:20:02 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/start.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/start.c
*** emacs-18.59/amiga/unix/src/start.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/start.c Sun Oct 25 12:06:00 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/stat.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/stat.c
*** emacs-18.59/amiga/unix/src/stat.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/stat.c Sun Oct 25 17:28:04 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/strftime.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/strftime.c
*** emacs-18.59/amiga/unix/src/strftime.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/strftime.c Fri Jul 31 23:29:14 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/symlink.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/symlink.c
*** emacs-18.59/amiga/unix/src/symlink.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/symlink.c Sat Oct 17 12:45:10 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/time.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/time.c
*** emacs-18.59/amiga/unix/src/time.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/time.c Tue Aug 25 22:09:58 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/timeconvert.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/timeconvert.c
*** emacs-18.59/amiga/unix/src/timeconvert.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/timeconvert.c Sat Jun 5 11:46:46 1993
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/timeconvert.h /gnu/src/amiga/emacs-18.59/amiga/unix/src/timeconvert.h
*** emacs-18.59/amiga/unix/src/timeconvert.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/timeconvert.h Tue Aug 25 20:32:38 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/timers.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/timers.c
*** emacs-18.59/amiga/unix/src/timers.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/timers.c Mon Aug 17 22:32:54 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/tmpnam.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/tmpnam.c
*** emacs-18.59/amiga/unix/src/tmpnam.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/tmpnam.c Sat Oct 24 09:39:52 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/truncate.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/truncate.c
*** emacs-18.59/amiga/unix/src/truncate.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/truncate.c Sun Jul 19 17:47:02 1992
***************
*** 0 ****
--- 1,21 ----
+ #include "amiga.h"
+ #include "amigados.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 -rc --new-file emacs-18.59/amiga/unix/src/uid.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/uid.c
*** emacs-18.59/amiga/unix/src/uid.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/uid.c Sun Jul 19 17:47:02 1992
***************
*** 0 ****
--- 1,4 ----
+ #include "amiga.h"
+
+ uid_t getuid(void) { return AMIGA_UID; }
+ uid_t geteuid(void) { return AMIGA_UID; }
diff -rc --new-file emacs-18.59/amiga/unix/src/umask.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/umask.c
*** emacs-18.59/amiga/unix/src/umask.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/umask.c Sun Jul 19 17:47:02 1992
***************
*** 0 ****
--- 1,3 ----
+ #include "amiga.h"
+
+ int umask(int mask) { return 0; }
diff -rc --new-file emacs-18.59/amiga/unix/src/unix-hard.lib.uue /gnu/src/amiga/emacs-18.59/amiga/unix/src/unix-hard.lib.uue
*** emacs-18.59/amiga/unix/src/unix-hard.lib.uue Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/unix-hard.lib.uue Tue Jul 12 10:32:19 1994
***************
*** 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
+ M`#QAI"!-3-]@`$[Z``!(YP(&+`$J2$J`9Q0@+0`@(BT`-"QL```P?``!3J[_
+ MRDJ&9Q0@+0`D(BT`."QL```P?``"3J[_RG`!(BP``..@3-]@0$YU2.<#-B9)
+ M*D@N$R!O`!PL$&`4(&T`-+'*9@1^`&`(M>T`.&8"?``@;0`\+'@`!$ZN_HPD
+ M0$J`9MI*AV<60I,@+0`@(BT`-"QL```P?``#3J[_RDJ&9U(@;P`<0I`@+0`D
+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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!@D&#V2.<!%'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
+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
+ M`&$`^NA83V``_JQZ`2!O`"Q"J``(0B@`$4(H`!`O"B`&($LB;P`L<@)A`/M`
+ M0>\!0'`080#Z)EA/(@LD+P`L+&P``$ZN_,HH`&8\8"IZ`")O`"S2_`$80>\!
+ M/'`!80#Z($J`9@1X9V`2(B\`+"QL``!.KOS$*`!*A&?2(B\`+"QL``!.KOR^
+ M<'30@+B`9PI(;`!83KH``%A/2H5G(B\*(`8@2R)O`"QR`&$`^L!![P%,(DMP
+ M`&$`^C183V``_?@@+P%`(&\!1$ZZ``!![P%(0^\!/&$`^BH@2TZZ``!@`/W6
+ M(&\!.$ZZ```@;P`L3KH``&$`^))![`!R3KH``"E```!F"$'L`'@I2```0>P`
+ M?DZZ```I0``49@8I;````!1![`"(3KH``"E``!AF"$'L`(XI2``80>P`DDZZ
+ 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@
+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
+ 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 -rc --new-file emacs-18.59/amiga/unix/src/unix.lib.uue /gnu/src/amiga/emacs-18.59/amiga/unix/src/unix.lib.uue
*** emacs-18.59/amiga/unix/src/unix.lib.uue Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/unix.lib.uue Tue Jul 12 10:32:02 1994
***************
*** 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
+ M`#QAI"!-3-]@`$[Z``!(YP(&+`$J2$J`9Q0@+0`@(BT`-"QL```P?``!3J[_
+ MRDJ&9Q0@+0`D(BT`."QL```P?``"3J[_RG`!(BP``..@3-]@0$YU2.<#-B9)
+ M*D@N$R!O`!PL$&`4(&T`-+'*9@1^`&`(M>T`.&8"?``@;0`\+'@`!$ZN_HPD
+ M0$J`9MI*AV<60I,@+0`@(BT`-"QL```P?``#3J[_RDJ&9U(@;P`<0I`@+0`D
+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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!@D&#V2.<!%'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
+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
+ M`&$`^NA83V``_JQZ`2!O`"Q"J``(0B@`$4(H`!`O"B`&($LB;P`L<@)A`/M`
+ M0>\!0'`080#Z)EA/(@LD+P`L+&P``$ZN_,HH`&8\8"IZ`")O`"S2_`$80>\!
+ M/'`!80#Z($J`9@1X9V`2(B\`+"QL``!.KOS$*`!*A&?2(B\`+"QL``!.KOR^
+ M<'30@+B`9PI(;`!83KH``%A/2H5G(B\*(`8@2R)O`"QR`&$`^L!![P%,(DMP
+ M`&$`^C183V``_?@@+P%`(&\!1$ZZ``!![P%(0^\!/&$`^BH@2TZZ``!@`/W6
+ M(&\!.$ZZ```@;P`L3KH``&$`^))![`!R3KH``"E```!F"$'L`'@I2```0>P`
+ M?DZZ```I0``49@8I;````!1![`"(3KH``"E``!AF"$'L`(XI2``80>P`DDZZ
+ 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@
+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
+ 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 -rc --new-file emacs-18.59/amiga/unix/src/unlink.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/unlink.c
*** emacs-18.59/amiga/unix/src/unlink.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/unlink.c Wed Dec 2 20:19:44 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/utime.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/utime.c
*** emacs-18.59/amiga/unix/src/utime.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/utime.c Mon Aug 24 23:02:00 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/wait4.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/wait4.c
*** emacs-18.59/amiga/unix/src/wait4.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/wait4.c Sat Aug 15 13:45:34 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/write.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/write.c
*** emacs-18.59/amiga/unix/src/write.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/write.c Fri Dec 4 22:15:36 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/africa /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/africa
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/africa Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/africa Sat Aug 1 14:24:06 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/antarctica /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/antarctica
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/antarctica Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/antarctica Thu Jul 30 00:43:20 1992
***************
*** 0 ****
--- 1,4 ----
+ # @(#)antarctica 4.1
+
+ # From Arthur David Olson (February 13, 1988):
+ # No data available.
diff -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/asia /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/asia
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/asia Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/asia Sat Aug 1 14:24:28 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/australasia /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/australasia
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/australasia Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/australasia Sat Aug 1 14:24:04 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/etcetera /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/etcetera
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/etcetera Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/etcetera Sat Aug 1 14:24:06 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/europe /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/europe
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/europe Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/europe Sat Aug 1 14:24:08 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/factory /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/factory
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/factory Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/factory Sat Aug 1 14:24:08 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/leapseconds /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/leapseconds
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/leapseconds Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/leapseconds Sat Aug 1 14:24:10 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/northamerica /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/northamerica
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/northamerica Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/northamerica Sat Aug 1 14:24:12 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/pacificnew /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/pacificnew
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/pacificnew Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/pacificnew Sat Aug 1 14:24:12 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/smakefile /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/smakefile
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/smakefile Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/smakefile Mon Sep 21 09:58:50 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar87 /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar87
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar87 Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar87 Sat Aug 1 14:24:14 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar88 /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar88
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar88 Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar88 Sat Aug 1 14:24:16 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar89 /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar89
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar89 Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/solar89 Sat Aug 1 14:24:20 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/southamerica /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/southamerica
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/southamerica Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/southamerica Sat Aug 1 14:24:20 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/systemv /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/systemv
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/systemv Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/systemv Sat Aug 1 14:24:22 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/usno1988 /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/usno1988
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/usno1988 Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/usno1988 Sat Aug 1 14:24:22 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/datfiles/usno1989 /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/usno1989
*** emacs-18.59/amiga/unix/src/zoneinfo/datfiles/usno1989 Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/datfiles/usno1989 Sat Aug 1 14:24:26 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/getopt.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/getopt.c
*** emacs-18.59/amiga/unix/src/zoneinfo/getopt.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/getopt.c Sat Aug 1 16:48:36 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/getopt.h /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/getopt.h
*** emacs-18.59/amiga/unix/src/zoneinfo/getopt.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/getopt.h Tue Jun 23 20:12:40 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/ialloc.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/ialloc.c
*** emacs-18.59/amiga/unix/src/zoneinfo/ialloc.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/ialloc.c Sat Aug 1 16:53:24 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/smakefile /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/smakefile
*** emacs-18.59/amiga/unix/src/zoneinfo/smakefile Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/smakefile Thu Sep 30 19:25:36 1993
***************
*** 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 emacs-18.59/amiga/unix/src/zoneinfo/zic and /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/zic differ
diff -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/zic.8 /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/zic.8
*** emacs-18.59/amiga/unix/src/zoneinfo/zic.8 Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/zic.8 Sat Aug 1 14:23:58 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/src/zoneinfo/zic.c /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/zic.c
*** emacs-18.59/amiga/unix/src/zoneinfo/zic.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/src/zoneinfo/zic.c Sat Aug 1 18:39:52 1992
***************
*** 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 -rc --new-file emacs-18.59/amiga/unix/unix.doc /gnu/src/amiga/emacs-18.59/amiga/unix/unix.doc
*** emacs-18.59/amiga/unix/unix.doc Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/amiga/unix/unix.doc Sun Jun 6 08:43:38 1993
***************
*** 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 AmigaDOS 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 AmigaDOS & 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 AmigaDOS 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 AmigaDOS 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 AmigaDOS. 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 AmigaDOS. 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.
+ - AmigaDOS 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: AmigaDOS 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 -rc --new-file emacs-18.59/cpp/SCOPTIONS /gnu/src/amiga/emacs-18.59/cpp/SCOPTIONS
*** emacs-18.59/cpp/SCOPTIONS Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/cpp/SCOPTIONS Sat Jun 5 12:01:06 1993
***************
*** 0 ****
--- 1,7 ----
+ IGNORE=161
+ IGNORE=154
+ IGNORE=100
+ IGNORE=181
+ IGNORE=84
+ IGNORE=93
+ IGNORE=72
\ No newline at end of file
diff -rc --new-file emacs-18.59/cpp/cccp.c /gnu/src/amiga/emacs-18.59/cpp/cccp.c
*** emacs-18.59/cpp/cccp.c Fri Sep 28 20:17:57 1990
--- /gnu/src/amiga/emacs-18.59/cpp/cccp.c Sat Jun 5 12:07:16 1993
***************
*** 97,103 ****
--- 97,113 ----
#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,121 ****
--- 125,135 ----
#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,130 ****
--- 137,146 ----
#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,156 ****
--- 158,186 ----
/* #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,385 ****
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;
--- 409,414 ----
***************
*** 405,415 ****
else if ((f = open (in_fname, O_RDONLY)) < 0)
goto perror;
! 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) {
int size;
int bsize;
int cnt;
--- 434,444 ----
else if ((f = open (in_fname, O_RDONLY)) < 0)
goto perror;
! if (f) fstat (f, &sbuf);
fp->fname = in_fname;
fp->lineno = 1;
/* JF all this is mine about reading pipes and ttys */
! if (!f || (sbuf.st_mode & S_IFMT) != S_IFREG) {
int size;
int bsize;
int cnt;
***************
*** 478,488 ****
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) {
--- 507,517 ----
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,639 ****
*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 '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':
ident_length++;
/* compute step of hash function, to avoid a proc call on every token */
hash = HASHSTEP(hash, c);
--- 644,668 ----
*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 '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':
ident_length++;
/* compute step of hash function, to avoid a proc call on every token */
hash = HASHSTEP(hash, c);
***************
*** 646,676 ****
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)
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--;
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)
return;
/* if the expansion routine has not moved the input
--- 675,705 ----
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 != -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 != -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 == -1)
return;
/* if the expansion routine has not moved the input
***************
*** 679,685 ****
reason to put it back or not put it back. */
if (ip->bufp == save_ibufp)
*op->bufp++ = c;
!
break; /* out of for loop */
}
hashcollision:
--- 708,714 ----
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,693 ****
} /* 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)
--- 716,722 ----
} /* 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,752 ****
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.
--- 775,781 ----
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,770 ****
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++) {
if (*bp == '\\') bp++;
if (*bp == '\n') {
if (bp[-1] == '\\')
--- 787,804 ----
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++) {
! if (*bp == quotec)
! {
! bp++;
! break;
! }
if (*bp == '\\') bp++;
if (*bp == '\n') {
if (bp[-1] == '\\')
***************
*** 801,813 ****
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++) {
if (*bp == '\\')
*cp++ = *bp++;
if (*bp == '\n') {
--- 835,852 ----
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; *cp++ = *bp++) {
! if (*bp == quotec)
! {
! *cp++ = *bp++;
! break;
! }
if (*bp == '\\')
*cp++ = *bp++;
if (*bp == '\n') {
***************
*** 939,950 ****
++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 ();
--- 978,989 ----
++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,959 ****
check_expand(op, len);
bcopy (buf, op->bufp, len);
op->bufp += len;
!
return;
}
--- 992,998 ----
check_expand(op, len);
bcopy (buf, op->bufp, len);
op->bufp += len;
!
return;
}
***************
*** 978,984 ****
struct stat sbuf; /* to stat the include file */
FILE_BUF *fp; /* for input stack frame */
struct directory_stack *stackp;
! int flen;
int save_indepth = indepth;
/* in case of errors */
--- 1017,1023 ----
struct stat sbuf; /* to stat the include file */
FILE_BUF *fp; /* for input stack frame */
struct directory_stack *stackp;
! int flen, maxlen;
int save_indepth = indepth;
/* in case of errors */
***************
*** 1019,1025 ****
--- 1058,1068 ----
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,1049 ****
other_dir = (char *) alloca (n + 1);
strncpy (other_dir, nam, n);
other_dir[n] = '\0';
}
break;
}
}
}
/* JF search directory path */
! fname = (char *) alloca (max_include_len + flen);
for (; stackp; stackp = stackp->next)
{
if (other_dir)
--- 1080,1094 ----
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 (maxlen + flen);
for (; stackp; stackp = stackp->next)
{
if (other_dir)
***************
*** 1053,1058 ****
--- 1098,1107 ----
}
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,1070 ****
--- 1113,1123 ----
goto nope;
}
+ #ifdef AMIGA
+ if (stat(fname, &sbuf) < 0)
+ #else
if (fstat(f, &sbuf) < 0)
+ #endif
{
perror_with_name (fname);
goto nope; /* impossible? */
***************
*** 1202,1208 ****
++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 {
--- 1255,1261 ----
++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,1235 ****
}
}
}
!
install (symname, T_MACRO, defn);
return 0;
!
nope:
return 1;
--- 1279,1288 ----
}
}
}
!
install (symname, T_MACRO, defn);
return 0;
!
nope:
return 1;
***************
*** 1308,1314 ****
if (is_idstart[*p] && (p==buf || !is_idchar[*(p-1)])) {
! for (id_len = 0; is_idchar[p[id_len]]; id_len++)
;
for (arg = arglist; arg != NULL; arg = arg->next) {
struct reflist *tpat;
--- 1361,1367 ----
if (is_idstart[*p] && (p==buf || !is_idchar[*(p-1)])) {
! 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,1347 ****
*exp_p++ = '\0';
defn->length = exp_p - defn->expansion - 1;
!
/* give back excess storage */
defn->expansion = (U_CHAR *) xrealloc (defn->expansion, defn->length + 1);
--- 1394,1400 ----
*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,1462 ****
delete (hp);
}
! /* handle #error command later */
do_error()
{
}
--- 1509,1515 ----
delete (hp);
}
! /* handle #error command later */
do_error()
{
}
***************
*** 1465,1470 ****
--- 1518,1538 ----
* 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,1484 ****
--- 1547,1553 ----
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,1547 ****
}
if_stack->type = T_ELIF;
}
!
value = eval_if_expression (buf, limit - buf);
conditional_skip (ip, value == 0, T_ELIF);
}
--- 1610,1616 ----
}
if_stack->type = T_ELIF;
}
!
value = eval_if_expression (buf, limit - buf);
conditional_skip (ip, value == 0, T_ELIF);
}
***************
*** 1574,1580 ****
delete (save_defined); /* clean up special symbol */
free (temp_obuf.buf);
!
return value;
}
--- 1643,1649 ----
delete (save_defined); /* clean up special symbol */
free (temp_obuf.buf);
!
return value;
}
***************
*** 1614,1620 ****
if_stack = temp;
if_stack->type = type;
!
if (skip != 0) {
skip_if_group(ip);
return;
--- 1683,1689 ----
if_stack = temp;
if_stack->type = type;
!
if (skip != 0) {
skip_if_group(ip);
return;
***************
*** 1724,1730 ****
* 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;
--- 1793,1799 ----
* 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,1921 ****
int totlen; /* total amount of exp buffer filled so far */
register struct reflist *ap;
! struct argptrs {
U_CHAR *argstart;
int length;
} *args;
--- 1984,1990 ----
int totlen; /* total amount of exp buffer filled so far */
register struct reflist *ap;
! struct argptrs {
U_CHAR *argstart;
int length;
} *args;
***************
*** 1999,2005 ****
ip2->buf = ip2->bufp = defn->expansion;
ip2->length = defn->length;
}
!
rescan (ip2, op);
--indepth;
*excess_newlines_ptr += newlines_found;
--- 2068,2074 ----
ip2->buf = ip2->bufp = defn->expansion;
ip2->length = defn->length;
}
!
rescan (ip2, op);
--indepth;
*excess_newlines_ptr += newlines_found;
***************
*** 2024,2030 ****
{
int paren = 0;
int quotec = 0;
!
while (bp < ip->buf + ip->length) {
switch (*bp) {
case '(':
--- 2093,2099 ----
{
int paren = 0;
int quotec = 0;
!
while (bp < ip->buf + ip->length) {
switch (*bp) {
case '(':
***************
*** 2084,2092 ****
}
if (ip != NULL)
! fprintf(stdout, "file %s, offset %d (line %d): ",
ip->fname, ip->bufp - ip->buf, ip->lineno);
! fprintf(stdout, "%s\n", msg);
return 0;
}
--- 2153,2161 ----
}
if (ip != NULL)
! fprintf(stderr, "file %s, offset %d (line %d): ",
ip->fname, ip->bufp - ip->buf, ip->lineno);
! fprintf(stderr, "%s\n", msg);
return 0;
}
***************
*** 2109,2115 ****
{
register int i;
register U_CHAR *p;
!
if (obuf->length - (obuf->bufp - obuf->buf) > needed)
return obuf->buf;
--- 2178,2184 ----
{
register int i;
register U_CHAR *p;
!
if (obuf->length - (obuf->bufp - obuf->buf) > needed)
return obuf->buf;
***************
*** 2125,2131 ****
return p;
}
!
/*
* install a name in the main hash table, even if it is already there.
* name stops with first non alphanumeric, except leading '#'.
--- 2194,2200 ----
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,2204 ****
delete(hp)
HASHNODE *hp;
{
!
if (hp->prev != NULL)
hp->prev->next = hp->next;
if (hp->next != NULL)
--- 2267,2273 ----
delete(hp)
HASHNODE *hp;
{
!
if (hp->prev != NULL)
hp->prev->next = hp->next;
if (hp->next != NULL)
***************
*** 2232,2241 ****
int hashsize;
{
register int r = 0;
!
while (len--)
r = HASHSTEP(r, *name++);
!
return MAKE_POS(r) % hashsize;
}
--- 2301,2310 ----
int hashsize;
{
register int r = 0;
!
while (len--)
r = HASHSTEP(r, *name++);
!
return MAKE_POS(r) % hashsize;
}
***************
*** 2282,2288 ****
#endif
/* is there more? */
!
}
/*
--- 2351,2357 ----
#endif
/* is there more? */
!
}
/*
***************
*** 2357,2363 ****
#endif /* not VMS */
}
! void
bcopy (b1, b2, length)
register char *b1;
register char *b2;
--- 2426,2432 ----
#endif /* not VMS */
}
! void
bcopy (b1, b2, length)
register char *b1;
register char *b2;
***************
*** 2379,2385 ****
*b2++ = *b1++;
#endif /* not VMS */
}
!
int
bcmp (b1, b2, length) /* This could be a macro! */
register char *b1;
--- 2448,2454 ----
*b2++ = *b1++;
#endif /* not VMS */
}
!
int
bcmp (b1, b2, length) /* This could be a macro! */
register char *b1;
diff -rc --new-file emacs-18.59/cpp/smakefile /gnu/src/amiga/emacs-18.59/cpp/smakefile
*** emacs-18.59/cpp/smakefile Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/cpp/smakefile Sat Oct 2 15:30:13 1993
***************
*** 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 -rc --new-file emacs-18.59/etc/SCOPTIONS /gnu/src/amiga/emacs-18.59/etc/SCOPTIONS
*** emacs-18.59/etc/SCOPTIONS Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/etc/SCOPTIONS Sat Dec 5 18:07:36 1992
***************
*** 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 -rc --new-file emacs-18.59/etc/amiga-env.c /gnu/src/amiga/emacs-18.59/etc/amiga-env.c
*** emacs-18.59/etc/amiga-env.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/etc/amiga-env.c Sat Jun 5 16:55:12 1993
***************
*** 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 AmigaDOS 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 -rc --new-file emacs-18.59/etc/etags.c /gnu/src/amiga/emacs-18.59/etc/etags.c
*** emacs-18.59/etc/etags.c Thu Aug 20 05:11:01 1992
--- /gnu/src/amiga/emacs-18.59/etc/etags.c Sun May 9 18:35:40 1993
***************
*** 338,347 ****
--- 338,354 ----
{
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,363 ****
--- 364,374 ----
#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 -rc --new-file emacs-18.59/etc/make-docfile.c /gnu/src/amiga/emacs-18.59/etc/make-docfile.c
*** emacs-18.59/etc/make-docfile.c Fri Oct 25 18:43:28 1991
--- /gnu/src/amiga/emacs-18.59/etc/make-docfile.c Sun May 9 18:35:46 1993
***************
*** 57,64 ****
--- 57,86 ----
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 -rc --new-file emacs-18.59/etc/sh.c /gnu/src/amiga/emacs-18.59/etc/sh.c
*** emacs-18.59/etc/sh.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/etc/sh.c Sat Jun 5 11:44:06 1993
***************
*** 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 AmigaDOS 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 -rc --new-file emacs-18.59/etc/smakefile /gnu/src/amiga/emacs-18.59/etc/smakefile
*** emacs-18.59/etc/smakefile Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/etc/smakefile Sat Oct 2 15:30:23 1993
***************
*** 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 -rc --new-file emacs-18.59/etc/termcap.amiga /gnu/src/amiga/emacs-18.59/etc/termcap.amiga
*** emacs-18.59/etc/termcap.amiga Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/etc/termcap.amiga Sun May 9 18:35:58 1993
***************
*** 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 -rc --new-file emacs-18.59/etc/wakeup.c /gnu/src/amiga/emacs-18.59/etc/wakeup.c
*** emacs-18.59/etc/wakeup.c Tue Jul 30 21:03:39 1991
--- /gnu/src/amiga/emacs-18.59/etc/wakeup.c Sun May 9 18:36:20 1993
***************
*** 18,28 ****
--- 18,34 ----
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 -rc --new-file emacs-18.59/lisp/amiga-init.el /gnu/src/amiga/emacs-18.59/lisp/amiga-init.el
*** emacs-18.59/lisp/amiga-init.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/lisp/amiga-init.el Sat Jun 5 11:35:42 1993
***************
*** 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 emacs-18.59/lisp/amiga-init.elc and /gnu/src/amiga/emacs-18.59/lisp/amiga-init.elc differ
diff -rc --new-file emacs-18.59/lisp/amiga-menu.el /gnu/src/amiga/emacs-18.59/lisp/amiga-menu.el
*** emacs-18.59/lisp/amiga-menu.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/lisp/amiga-menu.el Sat Nov 21 16:13:18 1992
***************
*** 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 emacs-18.59/lisp/amiga-menu.elc and /gnu/src/amiga/emacs-18.59/lisp/amiga-menu.elc differ
diff -rc --new-file emacs-18.59/lisp/amiga-mouse.el /gnu/src/amiga/emacs-18.59/lisp/amiga-mouse.el
*** emacs-18.59/lisp/amiga-mouse.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/lisp/amiga-mouse.el Sat Nov 21 16:13:20 1992
***************
*** 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 emacs-18.59/lisp/amiga-mouse.elc and /gnu/src/amiga/emacs-18.59/lisp/amiga-mouse.elc differ
diff -rc --new-file emacs-18.59/lisp/compile.el /gnu/src/amiga/emacs-18.59/lisp/compile.el
*** emacs-18.59/lisp/compile.el Fri Aug 14 22:53:00 1992
--- /gnu/src/amiga/emacs-18.59/lisp/compile.el Thu Dec 24 17:06:50 1992
***************
*** 43,49 ****
;; 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]+\\)"
"Regular expression for filename/linenumber in error in compilation log.")
(defun compile (command)
--- 43,49 ----
;; The filename excludes colons to avoid confusion when error message
;; starts with digits.
(defvar compilation-error-regexp
! "^\\([^ :\e]+\\([ :] *\\|, line \\|(\\)[0-9]+\\)\\|\\([0-9]+ *of *[^ \n]+\\)"
"Regular expression for filename/linenumber in error in compilation log.")
(defun compile (command)
***************
*** 61,67 ****
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")
"No more grep hits" "grep"))
(defun compile1 (command error-message &optional name-of-mode)
--- 61,68 ----
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 (if (eq system-type 'amigados) " nil:"
! " /dev/null"))
"No more grep hits" "grep"))
(defun compile1 (command error-message &optional name-of-mode)
***************
*** 195,201 ****
(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)))
(set-marker (car next-error) nil)))
;; Set compilation-error-list to nil, and
--- 196,208 ----
(let* ((pop-up-windows t)
(w (display-buffer (marker-buffer (car next-error)))))
(set-window-point 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,227 ****
--- 229,236 ----
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 emacs-18.59/lisp/compile.elc and /gnu/src/amiga/emacs-18.59/lisp/compile.elc differ
diff -rc --new-file emacs-18.59/lisp/files.el /gnu/src/amiga/emacs-18.59/lisp/files.el
*** emacs-18.59/lisp/files.el Sun Oct 11 22:27:38 1992
--- /gnu/src/amiga/emacs-18.59/lisp/files.el Sat Nov 21 16:14:10 1992
***************
*** 141,146 ****
--- 141,156 ----
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 'amigados) "!" "~")
+ "Character to add to file names to make backup names.")
+
+ (defconst autosave-char (if (eq system-type 'amigados) "@" "#")
+ "Character to add to file names to make autosave names.")
+
+ (defconst bufferfile-char (if (eq system-type 'amigados) "^" "%")
+ "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,386 ****
(funcall (intern (concat (downcase mode) "-mode")))
(let ((alist auto-mode-alist)
(name buffer-file-name))
! (let ((case-fold-search (eq system-type 'vax-vms)))
;; Remove backup-suffixes from file name.
(setq name (file-name-sans-versions name))
;; Find first matching alist entry.
--- 390,397 ----
(funcall (intern (concat (downcase mode) "-mode")))
(let ((alist auto-mode-alist)
(name buffer-file-name))
! (let ((case-fold-search (or (eq system-type 'amigados)
! (eq system-type 'vax-vms))))
;; Remove backup-suffixes from file name.
(setq name (file-name-sans-versions name))
;; Find first matching alist entry.
***************
*** 559,566 ****
(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%%~")
(sleep-for 1)
(condition-case ()
(delete-file backupname)
--- 570,580 ----
(setq setmodes (file-modes backupname)))
(file-error
;; If trouble writing the backup, write it in ~.
! (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,605 ****
(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))))
(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 "~"))
(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))
;; 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.
--- 602,620 ----
(or (string-match ";[0-9]*\\'" name)
(and (string-match "\\." name (string-match "[]>]" name))
(string-match "\\.[0-9]*\\'" name (match-end 0))))
! (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 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 (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,615 ****
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) ".~"))
(bv-length (length base-versions))
(possibilities (file-name-all-completions
base-versions
--- 624,630 ----
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) "." backup-char))
(bv-length (length base-versions))
(possibilities (file-name-all-completions
base-versions
***************
*** 626,645 ****
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)) "~")
(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) "~")))
(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)
(= (match-beginning 0) bv-length))
(string-to-int (substring fn bv-length -1))
0))
--- 641,661 ----
kept-old-versions kept-new-versions -1)))
(if (not deserve-versions-p)
(list (make-backup-file-name fn))
! (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 "." 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 (concat "[0-9]+" backup-char "$") fn bv-length)
(= (match-beginning 0) bv-length))
(string-to-int (substring fn bv-length -1))
0))
***************
*** 741,747 ****
;; If file is precious, rename it away before
;; overwriting it.
(let ((rename t) nodelete
! (file (concat buffer-file-name "#")))
(condition-case ()
(progn (rename-file buffer-file-name file t)
(setq setmodes (file-modes file)))
--- 757,763 ----
;; If file is precious, rename it away before
;; overwriting it.
(let ((rename t) nodelete
! (file (concat buffer-file-name autosave-char)))
(condition-case ()
(progn (rename-file buffer-file-name file t)
(setq setmodes (file-modes file)))
***************
*** 774,779 ****
--- 790,798 ----
;; Change the mode back, after writing.
(setq setmodes (file-modes buffer-file-name))
(set-file-modes buffer-file-name 511)))
+ (if (eq system-type 'amigados)
+ (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,998 ****
See also auto-save-file-name-p."
(if buffer-file-name
(concat (file-name-directory buffer-file-name)
! "#"
(file-name-nondirectory buffer-file-name)
! "#")
! (expand-file-name (concat "#%" (buffer-name) "#"))))
(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))
(defconst list-directory-brief-switches "-CF"
"*Switches for list-directory to pass to `ls' for brief listing,")
--- 1002,1018 ----
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)
! 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 (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 emacs-18.59/lisp/files.elc and /gnu/src/amiga/emacs-18.59/lisp/files.elc differ
diff -rc --new-file emacs-18.59/lisp/loadup.el /gnu/src/amiga/emacs-18.59/lisp/loadup.el
*** emacs-18.59/lisp/loadup.el Wed May 13 19:42:48 1992
--- /gnu/src/amiga/emacs-18.59/lisp/loadup.el Sat Nov 21 16:14:52 1992
***************
*** 28,34 ****
(load "simple")
(garbage-collect)
(load "help")
- (garbage-collect)
(load "files")
(garbage-collect)
(load "indent")
--- 28,33 ----
***************
*** 64,69 ****
--- 63,72 ----
(progn
(garbage-collect)
(load "vms-patch")))
+ (if (eq system-type 'amigados)
+ (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 -rc --new-file emacs-18.59/lisp/simple.el /gnu/src/amiga/emacs-18.59/lisp/simple.el
*** emacs-18.59/lisp/simple.el Wed Apr 15 08:13:32 1992
--- /gnu/src/amiga/emacs-18.59/lisp/simple.el Sat Nov 21 16:16:00 1992
***************
*** 539,549 ****
(defvar kill-ring-yank-pointer nil
"The tail of the kill ring whose car is the last thing yanked.")
(defun kill-append (string before-p)
(setcar kill-ring
(if before-p
(concat string (car kill-ring))
! (concat (car kill-ring) string))))
(defun kill-region (beg end)
"Kill between point and mark.
--- 539,585 ----
(defvar kill-ring-yank-pointer nil
"The tail of the kill ring whose car is the last thing yanked.")
+ (if (eq system-type 'amigados)
+ (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)))
! (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,579 ****
(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))
(setq this-command 'kill-region)
(setq kill-ring-yank-pointer kill-ring))
(copy-region-as-kill beg end)
--- 607,613 ----
(delete-region beg end)
;; Take the same string recorded for undo
;; and put it in the kill-ring.
! (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,594 ****
(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)
(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)))
(setq this-command 'kill-region)
(setq kill-ring-yank-pointer kill-ring))
--- 618,626 ----
(defun copy-region-as-kill (beg end)
"Save the region as if killed, but don't kill it."
(interactive "r")
! (if (and (eq last-command 'kill-region) (not (check-clipboard)))
(kill-append (buffer-substring beg end) (< end beg))
! (kill-add (buffer-substring beg end)))
(setq this-command 'kill-region)
(setq kill-ring-yank-pointer kill-ring))
***************
*** 643,648 ****
--- 675,681 ----
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 emacs-18.59/lisp/simple.elc and /gnu/src/amiga/emacs-18.59/lisp/simple.elc differ
diff -rc --new-file emacs-18.59/lisp/startup.el /gnu/src/amiga/emacs-18.59/lisp/startup.el
*** emacs-18.59/lisp/startup.el Sun Apr 19 05:20:08 1992
--- /gnu/src/amiga/emacs-18.59/lisp/startup.el Sat Nov 21 16:16:08 1992
***************
*** 113,121 ****
;; 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"))
t t t)
(or inhibit-default-init
(let ((inhibit-startup-message nil))
--- 113,121 ----
;; Load user's init file, or load default one.
(condition-case error
(if init
! (progn (load (cond ((eq system-type 'vax-vms) "sys$login:.emacs")
! ((eq system-type 'amigados) "s:.emacs")
! (t (concat "~" init "/.emacs")))
t t t)
(or inhibit-default-init
(let ((inhibit-startup-message nil))
***************
*** 129,134 ****
--- 129,138 ----
(save-excursion
(set-buffer "*scratch*")
(funcall initial-major-mode)))
+ ;; On Amiga, initialise clipboard
+ (if (eq system-type 'amigados)
+ (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 emacs-18.59/lisp/startup.elc and /gnu/src/amiga/emacs-18.59/lisp/startup.elc differ
diff -rc --new-file emacs-18.59/lisp/term/intuition-win.el /gnu/src/amiga/emacs-18.59/lisp/term/intuition-win.el
*** emacs-18.59/lisp/term/intuition-win.el Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/lisp/term/intuition-win.el Sat Nov 21 16:08:08 1992
***************
*** 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 -rc --new-file emacs-18.59/lisp/term/intuition-win.elc /gnu/src/amiga/emacs-18.59/lisp/term/intuition-win.elc
*** emacs-18.59/lisp/term/intuition-win.elc Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/lisp/term/intuition-win.elc Sun May 16 10:57:14 1993
***************
*** 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 -rc --new-file emacs-18.59/lisp/texinfmt.el /gnu/src/amiga/emacs-18.59/lisp/texinfmt.el
*** emacs-18.59/lisp/texinfmt.el Sun Dec 8 05:28:09 1991
--- /gnu/src/amiga/emacs-18.59/lisp/texinfmt.el Sat Nov 21 16:16:32 1992
***************
*** 874,880 ****
(insert "\n* Menu:\n\n")
(setq opoint (point))
(texinfo-print-index nil indexelts)
! (if (eq system-type 'vax-vms)
(texinfo-sort-region opoint (point))
(shell-command-on-region opoint (point) "sort -fd" 1))))
--- 874,880 ----
(insert "\n* Menu:\n\n")
(setq opoint (point))
(texinfo-print-index nil indexelts)
! (if (or (eq system-type 'amigados) (eq system-type 'vax-vms))
(texinfo-sort-region opoint (point))
(shell-command-on-region opoint (point) "sort -fd" 1))))
Binary files emacs-18.59/lisp/texinfmt.elc and /gnu/src/amiga/emacs-18.59/lisp/texinfmt.elc differ
diff -rc --new-file emacs-18.59/src/SCOPTIONS /gnu/src/amiga/emacs-18.59/src/SCOPTIONS
*** emacs-18.59/src/SCOPTIONS Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/SCOPTIONS Sat Oct 2 15:31:56 1993
***************
*** 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 -rc --new-file emacs-18.59/src/alloc.c /gnu/src/amiga/emacs-18.59/src/alloc.c
*** emacs-18.59/src/alloc.c Mon Sep 21 05:45:30 1992
--- /gnu/src/amiga/emacs-18.59/src/alloc.c Sun Dec 6 12:42:02 1992
***************
*** 76,81 ****
--- 76,86 ----
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,92 ****
--- 92,98 ----
#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,614 ****
XSET (val, Lisp_String,
(struct Lisp_String *) current_string_block->chars);
}
!
XSTRING (val)->size = length;
XSTRING (val)->data[length] = 0;
--- 614,620 ----
XSET (val, Lisp_String,
(struct Lisp_String *) current_string_block->chars);
}
!
XSTRING (val)->size = length;
XSTRING (val)->data[length] = 0;
***************
*** 727,735 ****
--- 733,745 ----
#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,870 ****
{
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))
--- 869,880 ----
{
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,888 ****
mark_object (&backlist->args[i]);
XMARK (backlist->args[i]);
}
! }
gc_sweep ();
--- 892,898 ----
mark_object (&backlist->args[i]);
XMARK (backlist->args[i]);
}
! }
gc_sweep ();
***************
*** 900,906 ****
i = backlist->nargs - 1;
for (; i >= 0; i--)
XUNMARK (backlist->args[i]);
! }
XUNMARK (buffer_defaults.name);
XUNMARK (buffer_local_symbols.name);
--- 910,916 ----
i = backlist->nargs - 1;
for (; i >= 0; i--)
XUNMARK (backlist->args[i]);
! }
XUNMARK (buffer_defaults.name);
XUNMARK (buffer_local_symbols.name);
***************
*** 936,942 ****
{
register struct cons_block *cblk;
register int lim = cons_block_index;
!
for (cblk = cons_block; cblk; cblk = cblk->next)
{
register int i;
--- 946,952 ----
{
register struct cons_block *cblk;
register int lim = cons_block_index;
!
for (cblk = cons_block; cblk; cblk = cblk->next)
{
register int i;
***************
*** 949,955 ****
{
register struct symbol_block *sblk;
register int lim = symbol_block_index;
!
for (sblk = symbol_block; sblk; sblk = sblk->next)
{
register int i;
--- 959,965 ----
{
register struct symbol_block *sblk;
register int lim = symbol_block_index;
!
for (sblk = symbol_block; sblk; sblk = sblk->next)
{
register int i;
***************
*** 964,970 ****
{
register struct marker_block *sblk;
register int lim = marker_block_index;
!
for (sblk = marker_block; sblk; sblk = sblk->next)
{
register int i;
--- 974,980 ----
{
register struct marker_block *sblk;
register int lim = marker_block_index;
!
for (sblk = marker_block; sblk; sblk = sblk->next)
{
register int i;
***************
*** 1197,1203 ****
register int num_free = 0, num_used = 0;
cons_free_list = 0;
!
for (cblk = cons_block; cblk; cblk = cblk->next)
{
register int i;
--- 1207,1213 ----
register int num_free = 0, num_used = 0;
cons_free_list = 0;
!
for (cblk = cons_block; cblk; cblk = cblk->next)
{
register int i;
***************
*** 1226,1232 ****
register int num_free = 0, num_used = 0;
symbol_free_list = 0;
!
for (sblk = symbol_block; sblk; sblk = sblk->next)
{
register int i;
--- 1236,1242 ----
register int num_free = 0, num_used = 0;
symbol_free_list = 0;
!
for (sblk = symbol_block; sblk; sblk = sblk->next)
{
register int i;
***************
*** 1260,1266 ****
register int num_free = 0, num_used = 0;
marker_free_list = 0;
!
for (mblk = marker_block; mblk; mblk = mblk->next)
{
register int i;
--- 1270,1276 ----
register int num_free = 0, num_used = 0;
marker_free_list = 0;
!
for (mblk = marker_block; mblk; mblk = mblk->next)
{
register int i;
***************
*** 1400,1406 ****
while ((unsigned) size > STRING_BLOCK_SIZE)
{
if (size & 1) size ^= MARKBIT | 1;
! size = *(int *)size & ~MARKBIT;
}
total_string_size += size;
--- 1410,1417 ----
while ((unsigned) size > STRING_BLOCK_SIZE)
{
if (size & 1) size ^= MARKBIT | 1;
! size = *(int *)size;
! size &= ~MARKBIT;
}
total_string_size += size;
***************
*** 1438,1444 ****
if (size & 1) size ^= MARKBIT | 1;
objptr = (Lisp_Object *)size;
! size = XFASTINT (*objptr) & ~MARKBIT;
if (XMARKBIT (*objptr))
{
XSET (*objptr, Lisp_String, newaddr);
--- 1449,1456 ----
if (size & 1) size ^= MARKBIT | 1;
objptr = (Lisp_Object *)size;
! size = XFASTINT (*objptr);
! size &= ~MARKBIT;
if (XMARKBIT (*objptr))
{
XSET (*objptr, Lisp_String, newaddr);
***************
*** 1498,1504 ****
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
= truncate_undo_list (nextb->undo_list, undo_threshold,
undo_high_threshold);
nextb = nextb->next;
--- 1510,1516 ----
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
= truncate_undo_list (nextb->undo_list, undo_threshold,
undo_high_threshold);
nextb = nextb->next;
diff -rc --new-file emacs-18.59/src/alloca.c /gnu/src/amiga/emacs-18.59/src/alloca.c
*** emacs-18.59/src/alloca.c Sat Jul 25 21:40:32 1992
--- /gnu/src/amiga/emacs-18.59/src/alloca.c Sun Nov 22 10:12:50 1992
***************
*** 72,78 ****
#define STACK_DIRECTION 0 /* direction unknown */
#endif
! #if STACK_DIRECTION != 0
#define STACK_DIR STACK_DIRECTION /* known at compile-time */
--- 72,78 ----
#define STACK_DIRECTION 0 /* direction unknown */
#endif
! #if (STACK_DIRECTION) != 0
#define STACK_DIR STACK_DIRECTION /* known at compile-time */
***************
*** 137,142 ****
--- 137,144 ----
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,185 ****
--- 178,189 ----
/* 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 -rc --new-file emacs-18.59/src/amiga.h /gnu/src/amiga/emacs-18.59/src/amiga.h
*** emacs-18.59/src/amiga.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga.h Sat Dec 5 18:07:10 1992
***************
*** 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 -rc --new-file emacs-18.59/src/amiga_clipboard.c /gnu/src/amiga/emacs-18.59/src/amiga_clipboard.c
*** emacs-18.59/src/amiga_clipboard.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_clipboard.c Tue Mar 23 09:41:50 1993
***************
*** 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 -rc --new-file emacs-18.59/src/amiga_data.c /gnu/src/amiga/emacs-18.59/src/amiga_data.c
*** emacs-18.59/src/amiga_data.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_data.c Sun Nov 22 10:12:54 1992
***************
*** 0 ****
--- 1 ----
+ /* Declarations of data that should not be squashed by the dump routine */
diff -rc --new-file emacs-18.59/src/amiga_dump.c /gnu/src/amiga/emacs-18.59/src/amiga_dump.c
*** emacs-18.59/src/amiga_dump.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_dump.c Sun Nov 22 10:13:00 1992
***************
*** 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 -rc --new-file emacs-18.59/src/amiga_malloc.c /gnu/src/amiga/emacs-18.59/src/amiga_malloc.c
*** emacs-18.59/src/amiga_malloc.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_malloc.c Sat Dec 5 16:36:46 1992
***************
*** 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 -rc --new-file emacs-18.59/src/amiga_menu.c /gnu/src/amiga/emacs-18.59/src/amiga_menu.c
*** emacs-18.59/src/amiga_menu.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_menu.c Thu Sep 30 21:27:42 1993
***************
*** 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 -rc --new-file emacs-18.59/src/amiga_processes.c /gnu/src/amiga/emacs-18.59/src/amiga_processes.c
*** emacs-18.59/src/amiga_processes.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_processes.c Sun Nov 22 10:13:02 1992
***************
*** 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 -rc --new-file emacs-18.59/src/amiga_rexx.c /gnu/src/amiga/emacs-18.59/src/amiga_rexx.c
*** emacs-18.59/src/amiga_rexx.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_rexx.c Sat Jun 5 13:21:16 1993
***************
*** 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 -rc --new-file emacs-18.59/src/amiga_screen.c /gnu/src/amiga/emacs-18.59/src/amiga_screen.c
*** emacs-18.59/src/amiga_screen.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_screen.c Tue Aug 31 18:16:14 1993
***************
*** 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 -rc --new-file emacs-18.59/src/amiga_serial.c /gnu/src/amiga/emacs-18.59/src/amiga_serial.c
*** emacs-18.59/src/amiga_serial.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_serial.c Sat Jun 5 11:37:38 1993
***************
*** 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 -rc --new-file emacs-18.59/src/amiga_sysdep.c /gnu/src/amiga/emacs-18.59/src/amiga_sysdep.c
*** emacs-18.59/src/amiga_sysdep.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_sysdep.c Sat Jun 5 11:39:12 1993
***************
*** 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 -rc --new-file emacs-18.59/src/amiga_term.c /gnu/src/amiga/emacs-18.59/src/amiga_term.c
*** emacs-18.59/src/amiga_term.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_term.c Tue Mar 23 09:45:12 1993
***************
*** 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 -rc --new-file emacs-18.59/src/amiga_tty.c /gnu/src/amiga/emacs-18.59/src/amiga_tty.c
*** emacs-18.59/src/amiga_tty.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/amiga_tty.c Sat Jun 5 13:20:50 1993
***************
*** 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 -rc --new-file emacs-18.59/src/buffer.c /gnu/src/amiga/emacs-18.59/src/buffer.c
*** emacs-18.59/src/buffer.c Wed May 13 19:39:33 1992
--- /gnu/src/amiga/emacs-18.59/src/buffer.c Sun Nov 22 10:13:24 1992
***************
*** 1137,1143 ****
#ifndef VMS
/* Maybe this should really use some standard subroutine
whose definition is filename syntax dependent. */
! if (buf[strlen (buf) - 1] != '/')
strcat (buf, "/");
#endif /* not VMS */
current_buffer->directory = build_string (buf);
--- 1137,1147 ----
#ifndef VMS
/* Maybe this should really use some standard subroutine
whose definition is filename syntax dependent. */
! 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 -rc --new-file emacs-18.59/src/callproc.c /gnu/src/amiga/emacs-18.59/src/callproc.c
*** emacs-18.59/src/callproc.c Sun Jul 12 03:26:01 1992
--- /gnu/src/amiga/emacs-18.59/src/callproc.c Sun Nov 22 10:13:32 1992
***************
*** 124,134 ****
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 */
else
args[1] = Fexpand_file_name (args[1], current_buffer->directory);
--- 124,130 ----
CHECK_STRING (args[0], 0);
if (nargs <= 1 || NULL (args[1]))
! args[1] = build_string (PATH_NULL);
else
args[1] = Fexpand_file_name (args[1], current_buffer->directory);
***************
*** 177,186 ****
if (XTYPE (buffer) == Lisp_Int)
#ifdef VMS
! fd[1] = open ("NLA0:", 0), fd[0] = -1;
#else
! fd[1] = open ("/dev/null", O_WRONLY), fd[0] = -1;
! #endif /* not VMS */
else
{
pipe (fd);
--- 173,181 ----
if (XTYPE (buffer) == Lisp_Int)
#ifdef VMS
! fd[1] = open (PATH_NULL, 0), fd[0] = -1;
#else
! fd[1] = open (PATH_NULL, O_WRONLY), fd[0] = -1;
else
{
pipe (fd);
***************
*** 193,198 ****
--- 188,209 ----
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,235 ****
--- 241,247 ----
close (filefd);
close (fd1);
}
+ #endif /* not AMIGA */
if (pid < 0)
{
***************
*** 302,308 ****
register Lisp_Object filename_string, start, end, status;
char tempfile[20];
! strcpy (tempfile, "/tmp/emacsXXXXXX");
mktemp (tempfile);
filename_string = build_string (tempfile);
--- 314,320 ----
register Lisp_Object filename_string, start, end, status;
char tempfile[20];
! strcpy (tempfile, PATH_TEMP);
mktemp (tempfile);
filename_string = build_string (tempfile);
***************
*** 318,323 ****
--- 330,336 ----
unlink (tempfile);
return status;
}
+ #ifndef AMIGA
/* This is the last thing run in a newly forked inferior
either synchronous or asynchronous.
***************
*** 425,430 ****
--- 438,444 ----
write (1, new_argv[0], strlen (new_argv[0]));
_exit (1);
}
+ #endif /* not AMIGA */
init_callproc ()
{
***************
*** 437,442 ****
--- 451,465 ----
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,453 ****
}
sh = (char *) egetenv ("SHELL");
! Vshell_file_name = build_string (sh ? sh : "/bin/sh");
#ifndef MAINTAIN_ENVIRONMENT
/* The equivalent of this operation was done
--- 470,476 ----
}
sh = (char *) egetenv ("SHELL");
! Vshell_file_name = build_string (sh ? sh : PATH_SHELL);
#ifndef MAINTAIN_ENVIRONMENT
/* The equivalent of this operation was done
diff -rc --new-file emacs-18.59/src/dired.c /gnu/src/amiga/emacs-18.59/src/dired.c
*** emacs-18.59/src/dired.c Mon Mar 23 04:16:41 1992
--- /gnu/src/amiga/emacs-18.59/src/dired.c Sun Nov 22 10:13:54 1992
***************
*** 385,391 ****
--- 385,395 ----
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 -rc --new-file emacs-18.59/src/dispnew.c /gnu/src/amiga/emacs-18.59/src/dispnew.c
*** emacs-18.59/src/dispnew.c Fri Jul 24 19:31:36 1992
--- /gnu/src/amiga/emacs-18.59/src/dispnew.c Sun Nov 22 10:14:00 1992
***************
*** 674,684 ****
--- 674,700 ----
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,704 ****
if (!line_ins_del_ok)
inhibit_hairy_id = 1;
/* Don't compute for i/d line if just want cursor motion. */
for (i = 0; i < screen_height; i++)
! if (new_screen->enable)
break;
/* Try doing i/d line, if not yet inhibited. */
if (!inhibit_hairy_id && i < screen_height)
--- 711,722 ----
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[i])
break;
+ #endif
/* Try doing i/d line, if not yet inhibited. */
if (!inhibit_hairy_id && i < screen_height)
***************
*** 742,747 ****
--- 760,768 ----
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,786 ****
--- 802,808 ----
}
bzero (new_screen->enable, screen_height);
+ stop_count(0);
return pause;
}
***************
*** 894,899 ****
--- 916,972 ----
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,1177 ****
--- 1245,1251 ----
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,1584 ****
--- 1651,1668 ----
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 -rc --new-file emacs-18.59/src/doc.c /gnu/src/amiga/emacs-18.59/src/doc.c
*** emacs-18.59/src/doc.c Tue Jan 8 17:25:38 1991
--- /gnu/src/amiga/emacs-18.59/src/doc.c Sun Nov 22 10:14:02 1992
***************
*** 21,26 ****
--- 21,27 ----
#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,194 ****
#ifndef CANNOT_DUMP
name = (char *) alloca (XSTRING (filename)->size + 8);
! strcpy (name, "../etc/");
#else /* CANNOT_DUMP */
CHECK_STRING (Vexec_directory, 0);
name = (char *) alloca (XSTRING (filename)->size +
--- 189,195 ----
#ifndef CANNOT_DUMP
name = (char *) alloca (XSTRING (filename)->size + 8);
! strcpy (name, RELPATH_DOC);
#else /* CANNOT_DUMP */
CHECK_STRING (Vexec_directory, 0);
name = (char *) alloca (XSTRING (filename)->size +
diff -rc --new-file emacs-18.59/src/dostrip.c /gnu/src/amiga/emacs-18.59/src/dostrip.c
*** emacs-18.59/src/dostrip.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/dostrip.c Sun Nov 22 10:14:02 1992
***************
*** 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 -rc --new-file emacs-18.59/src/emacs.c /gnu/src/amiga/emacs-18.59/src/emacs.c
*** emacs-18.59/src/emacs.c Sat Oct 17 03:51:00 1992
--- /gnu/src/amiga/emacs-18.59/src/emacs.c Sun Nov 22 10:14:08 1992
***************
*** 78,83 ****
--- 78,87 ----
#endif
#endif
+ #ifdef AMIGA_DUMP
+ #define HAVE_SHM /* Simplifies the ifdefs */
+ #endif
+
#ifndef O_RDWR
#define O_RDWR 2
#endif
***************
*** 323,328 ****
--- 327,333 ----
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,341 ****
--- 341,347 ----
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,723 ****
--- 723,733 ----
#ifdef VMS
#define SEPCHAR ','
#else
+ #ifdef AMIGA /* Can't use : on Amiga */
+ #define SEPCHAR ','
+ #else
#define SEPCHAR ':'
+ #endif
#endif
Lisp_Object
diff -rc --new-file emacs-18.59/src/exec.c /gnu/src/amiga/emacs-18.59/src/exec.c
*** emacs-18.59/src/exec.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/exec.c Sat Oct 24 12:59:54 1992
***************
*** 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 -rc --new-file emacs-18.59/src/fileio.c /gnu/src/amiga/emacs-18.59/src/fileio.c
*** emacs-18.59/src/fileio.c Tue Oct 6 22:02:20 1992
--- /gnu/src/amiga/emacs-18.59/src/fileio.c Sun Nov 22 10:14:24 1992
***************
*** 147,152 ****
--- 147,155 ----
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,179 ****
--- 177,185 ----
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,256 ****
--- 254,268 ----
out[size] = '\0';
}
#else /* not VMS */
+ #ifdef AMIGA
+ /* AmigaDOS 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,469 ****
--- 476,585 ----
(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,800 ****
--- 911,917 ----
}
return make_string (target, o - target);
+ #endif /* not AMIGA */
}
DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name,
***************
*** 825,830 ****
--- 942,964 ----
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,850 ****
--- 979,985 ----
nm = p;
substituted = 1;
}
+ #endif /* not AMIGA */
}
#ifdef VMS
***************
*** 1353,1358 ****
--- 1488,1500 ----
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,1369 ****
--- 1506,1512 ----
return Qt;
else
return Qnil;
+ #endif /* not AMIGA */
}
DEFUN ("file-exists-p", Ffile_exists_p, Sfile_exists_p, 1, 1, 0,
diff -rc --new-file emacs-18.59/src/firstfile.c /gnu/src/amiga/emacs-18.59/src/firstfile.c
*** emacs-18.59/src/firstfile.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/firstfile.c Sun Nov 22 10:14:28 1992
***************
*** 0 ****
--- 1,4 ----
+ int first_data = 1;
+ int first_bss;
+
+ void first_function() { }
diff -rc --new-file emacs-18.59/src/indent.c /gnu/src/amiga/emacs-18.59/src/indent.c
*** emacs-18.59/src/indent.c Sat Apr 18 16:01:07 1992
--- /gnu/src/amiga/emacs-18.59/src/indent.c Sun Nov 22 10:14:38 1992
***************
*** 35,40 ****
--- 35,45 ----
#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,121 ****
--- 120,130 ----
}
c = *--ptr;
+ #ifdef EIGHT_BIT
+ if (visible[c])
+ #else
if (c >= 040 && c < 0177)
+ #endif
{
col++;
}
***************
*** 326,332 ****
--- 335,345 ----
}
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,381 ****
prev_hpos = hpos;
c = FETCH_CHAR (pos);
if (c >= 040 && c < 0177)
! hpos++;
! else if (c == '\t')
{
hpos += tab_width - ((hpos + tab_offset + hscroll - (hscroll > 0)
/* Add tab_width here to make sure positive.
--- 386,442 ----
prev_hpos = hpos;
c = FETCH_CHAR (pos);
+ #ifdef EIGHT_BIT
+ if (visible[c])
+ #else
if (c >= 040 && c < 0177)
! #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,438 ****
--- 494,500 ----
else
hpos += (ctl_arrow && c < 0200) ? 2 : 4;
+ check_hpos:
/* Handle right margin. */
if (hpos >= width
&& (hpos > width
***************
*** 462,467 ****
--- 524,530 ----
}
}
+ done:
val_compute_motion.bufpos = pos;
val_compute_motion.hpos = hpos;
diff -rc --new-file emacs-18.59/src/keyboard.c /gnu/src/amiga/emacs-18.59/src/keyboard.c
*** emacs-18.59/src/keyboard.c Sun May 17 06:57:15 1992
--- /gnu/src/amiga/emacs-18.59/src/keyboard.c Sun Nov 22 10:14:48 1992
***************
*** 1313,1319 ****
--- 1313,1325 ----
#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 -rc --new-file emacs-18.59/src/keymap.c /gnu/src/amiga/emacs-18.59/src/keymap.c
*** emacs-18.59/src/keymap.c Sat Jul 27 17:43:27 1991
--- /gnu/src/amiga/emacs-18.59/src/keymap.c Sun Nov 22 10:14:52 1992
***************
*** 29,34 ****
--- 29,38 ----
/* 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 -rc --new-file emacs-18.59/src/lastfile.c /gnu/src/amiga/emacs-18.59/src/lastfile.c
*** emacs-18.59/src/lastfile.c Sat Mar 30 23:05:55 1991
--- /gnu/src/amiga/emacs-18.59/src/lastfile.c Sat Dec 5 18:16:44 1992
***************
*** 35,43 ****
--- 35,57 ----
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 -rc --new-file emacs-18.59/src/lisp.h /gnu/src/amiga/emacs-18.59/src/lisp.h
*** emacs-18.59/src/lisp.h Thu Mar 5 23:11:31 1992
--- /gnu/src/amiga/emacs-18.59/src/lisp.h Sun Nov 22 10:14:58 1992
***************
*** 287,293 ****
(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.
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
--- 287,293 ----
(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 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,525 ****
--- 520,532 ----
{ 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,535 ****
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
--- 536,541 ----
***************
*** 548,553 ****
--- 554,560 ----
#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 -rc --new-file emacs-18.59/src/lread.c /gnu/src/amiga/emacs-18.59/src/lread.c
*** emacs-18.59/src/lread.c Mon Mar 23 04:18:17 1992
--- /gnu/src/amiga/emacs-18.59/src/lread.c Sun Nov 22 10:15:02 1992
***************
*** 240,250 ****
--- 240,254 ----
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,565 ****
}
static int read_buffer_size;
! static char *read_buffer;
static Lisp_Object
read1 (readcharfun)
--- 563,569 ----
}
static int read_buffer_size;
! char *read_buffer;
static Lisp_Object
read1 (readcharfun)
diff -rc --new-file emacs-18.59/src/m-amiga.h /gnu/src/amiga/emacs-18.59/src/m-amiga.h
*** emacs-18.59/src/m-amiga.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/m-amiga.h Sun Nov 22 10:20:16 1992
***************
*** 0 ****
--- 1,129 ----
+ /* m- file for GNU Emacs running on AmigaDOS 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 -rc --new-file emacs-18.59/src/paths.h-dist /gnu/src/amiga/emacs-18.59/src/paths.h-dist
*** emacs-18.59/src/paths.h-dist Wed Sep 12 00:51:18 1990
--- /gnu/src/amiga/emacs-18.59/src/paths.h-dist Sun Nov 22 10:16:24 1992
***************
*** 17,19 ****
--- 17,35 ----
/* 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 -rc --new-file emacs-18.59/src/process.c /gnu/src/amiga/emacs-18.59/src/process.c
*** emacs-18.59/src/process.c Sun Oct 25 04:42:04 1992
--- /gnu/src/amiga/emacs-18.59/src/process.c Sun Nov 22 10:16:38 1992
***************
*** 1203,1208 ****
--- 1203,1225 ----
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,1310 ****
--- 1322,1328 ----
}
environ = save_environ;
}
+ #endif /* not AMIGA */
if (pid < 0)
{
***************
*** 1314,1319 ****
--- 1332,1338 ----
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,1331 ****
--- 1345,1351 ----
start_polling ();
if (forkin != forkout && forkout >= 0)
close (forkout);
+ #endif
#ifdef SIGCHLD
#ifdef BSD4_1
diff -rc --new-file emacs-18.59/src/s-amiga.h /gnu/src/amiga/emacs-18.59/src/s-amiga.h
*** emacs-18.59/src/s-amiga.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/s-amiga.h Sat Oct 2 15:32:32 1993
***************
*** 0 ****
--- 1,215 ----
+ /* file for GNU Emacs running on AmigaDOS 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 "amigados"
+
+ /* 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 -rc --new-file emacs-18.59/src/scroll.c /gnu/src/amiga/emacs-18.59/src/scroll.c
*** emacs-18.59/src/scroll.c Tue Jan 8 18:04:52 1991
--- /gnu/src/amiga/emacs-18.59/src/scroll.c Sun Nov 22 10:17:30 1992
***************
*** 55,60 ****
--- 55,119 ----
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,325 ****
--- 379,385 ----
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 -rc --new-file emacs-18.59/src/simplerexx.c /gnu/src/amiga/emacs-18.59/src/simplerexx.c
*** emacs-18.59/src/simplerexx.c Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/simplerexx.c Mon May 10 14:35:42 1993
***************
*** 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 -rc --new-file emacs-18.59/src/simplerexx.h /gnu/src/amiga/emacs-18.59/src/simplerexx.h
*** emacs-18.59/src/simplerexx.h Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/simplerexx.h Mon May 10 14:35:42 1993
***************
*** 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 -rc --new-file emacs-18.59/src/smakefile /gnu/src/amiga/emacs-18.59/src/smakefile
*** emacs-18.59/src/smakefile Thu Jan 1 00:00:00 1970
--- /gnu/src/amiga/emacs-18.59/src/smakefile Sat Dec 5 16:43:56 1992
***************
*** 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 -rc --new-file emacs-18.59/src/term.c /gnu/src/amiga/emacs-18.59/src/term.c
*** emacs-18.59/src/term.c Fri Jan 3 07:46:47 1992
--- /gnu/src/amiga/emacs-18.59/src/term.c Sun Nov 22 10:18:02 1992
***************
*** 161,167 ****
or'd with 0100. Zero if no standout marker at all. */
/* used iff TN_standout_width >= 0. */
char *chars_wasted;
! static char *copybuf;
/* nonzero means supposed to write text in standout mode. */
int standout_requested;
--- 161,167 ----
or'd with 0100. Zero if no standout marker at all. */
/* used iff TN_standout_width >= 0. */
char *chars_wasted;
! char *copybuf;
/* nonzero means supposed to write text in standout mode. */
int standout_requested;
diff -rc --new-file emacs-18.59/src/termcap.c /gnu/src/amiga/emacs-18.59/src/termcap.c
*** emacs-18.59/src/termcap.c Tue Jan 8 18:08:50 1991
--- /gnu/src/amiga/emacs-18.59/src/termcap.c Sun Nov 22 10:18:04 1992
***************
*** 30,35 ****
--- 30,36 ----
#ifdef emacs
#include "config.h"
+ #include "paths.h"
#endif
#ifndef BUFSIZE
***************
*** 344,350 ****
--- 345,355 ----
#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,384 ****
indirect = (char *) 0;
if (!tem)
! #ifdef VMS
! tem = "emacs_library:[etc]termcap.dat";
! #else
! tem = "/etc/termcap";
! #endif
/* Here we know we must search a file and tem has its name. */
--- 379,385 ----
indirect = (char *) 0;
if (!tem)
! tem = PATH_TERMCAP;
/* Here we know we must search a file and tem has its name. */
diff -rc --new-file emacs-18.59/src/tparam.c /gnu/src/amiga/emacs-18.59/src/tparam.c
*** emacs-18.59/src/tparam.c Tue Jan 8 18:09:27 1991
--- /gnu/src/amiga/emacs-18.59/src/tparam.c Sun Nov 22 10:18:10 1992
***************
*** 258,264 ****
return outstring;
}
! #ifdef DEBUG
main (argc, argv)
int argc;
--- 258,264 ----
return outstring;
}
! #ifdef TPARAM_DEBUG
main (argc, argv)
int argc;
***************
*** 274,277 ****
return 0;
}
! #endif /* DEBUG */
--- 274,277 ----
return 0;
}
! #endif /* TPARAM_DEBUG */
diff -rc --new-file emacs-18.59/src/xdisp.c /gnu/src/amiga/emacs-18.59/src/xdisp.c
*** emacs-18.59/src/xdisp.c Fri Jul 24 19:08:13 1992
--- /gnu/src/amiga/emacs-18.59/src/xdisp.c Sun Nov 22 10:19:14 1992
***************
*** 31,36 ****
--- 31,47 ----
#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,281 ****
windows_or_buffers_changed++;
if (EQ (minibuf_window, selected_window))
! this_line_bufpos = 0;
prev_echo_area_contents = echo_area_contents;
}
--- 286,295 ----
windows_or_buffers_changed++;
if (EQ (minibuf_window, selected_window))
! {
! this_line_bufpos = 0;
! CLEAR_WIN_LINE();
! }
prev_echo_area_contents = echo_area_contents;
}
***************
*** 327,332 ****
--- 341,348 ----
must_finish = 1;
}
+ if (windows_or_buffers_changed) CLEAR_WIN_LINE();
+
if (clip_changed || windows_or_buffers_changed)
update_mode_lines++;
***************
*** 453,458 ****
--- 469,475 ----
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,717 ****
&& (just_this_one || XFASTINT (w->width) == screen_width)
&& !EQ (window, minibuf_window))
{
! pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0),
point, height + 1, 10000, width, hscroll,
! pos_tab_offset (w, startp));
if (pos.vpos < height)
{
--- 726,754 ----
&& (just_this_one || XFASTINT (w->width) == screen_width)
&& !EQ (window, minibuf_window))
{
! 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, best_startp));
if (pos.vpos < height)
{
***************
*** 843,848 ****
--- 880,887 ----
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,913 ****
--- 947,954 ----
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,1339 ****
--- 1375,1381 ----
pause = pos;
while (p1 < endp)
{
+ restart:
p1prev = p1;
if (pos == pause)
{
***************
*** 1354,1366 ****
p = &FETCH_CHAR (pos);
}
c = *p++;
if (c >= 040 && c < 0177)
! {
if (p1 >= startp)
! *p1 = c;
! p1++;
! }
! else if (c == '\n')
{
invis = 0;
while (pos < end
--- 1396,1439 ----
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)
! {
! 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,1439 ****
--- 1507,1513 ----
}
pos++;
}
+ done:
val.hpos = - XINT (w->hscroll);
if (val.hpos)
***************
*** 1525,1530 ****
--- 1599,1623 ----
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,2000 ****
--- 2087,2097 ----
{
c = *string++;
if (!c) break;
+ #ifdef EIGHT_BIT
+ if (visible[c])
+ #else
if (c >= 040 && c < 0177)
+ #endif
{
if (p1 >= start)
*p1 = c;
***************
*** 2109,2115 ****
--- 2206,2216 ----
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,2131 ****
--- 2229,2238 ----
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 -rc --new-file emacs-18.59/src/ymakefile /gnu/src/amiga/emacs-18.59/src/ymakefile
*** emacs-18.59/src/ymakefile Tue Oct 6 18:44:28 1992
--- /gnu/src/amiga/emacs-18.59/src/ymakefile Thu Sep 30 20:52:04 1993
***************
*** 18,24 ****
--- 18,32 ----
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,167 ****
#define LINKER gcc -nostdlib
#else
#define LINKER ld
! #endif
#endif /* not ORDINARY_LINK */
#endif /* no LINKER */
--- 169,175 ----
#define LINKER gcc -nostdlib
#else
#define LINKER ld
! #endif
#endif /* not ORDINARY_LINK */
#endif /* no LINKER */
***************
*** 191,197 ****
--- 199,209 ----
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,264 ****
GNULIB_VAR = `if [ -f LIB_GCC ] ; then echo LIB_GCC; else echo; fi`
#endif /* __GNUC__ <= 1 */
#else
! GNULIB_VAR =
#endif
#ifdef MAINTAIN_ENVIRONMENT
--- 270,276 ----
GNULIB_VAR = `if [ -f LIB_GCC ] ; then echo LIB_GCC; else echo; fi`
#endif /* __GNUC__ <= 1 */
#else
! GNULIB_VAR =
#endif
#ifdef MAINTAIN_ENVIRONMENT
***************
*** 270,280 ****
#define UNEXEC unexec.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 \
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 \
--- 282,300 ----
#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 \
! $(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,376 ****
--- 380,422 ----
#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,384 ****
--- 424,453 ----
#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,510 ****
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
cm.o : cm.c cm.h termhooks.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
#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
filelock.o : filelock.c buffer.h paths.h config.h
! 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
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
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
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
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
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
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 \
--- 529,579 ----
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
cm.o : cm.c cm.h termhooks.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
#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
filelock.o : filelock.c buffer.h paths.h config.h
! 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
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
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
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
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
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
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,529 ****
/* 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
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
/* System-specific programs to be made.
OTHER_FILES, OBJECTS_SYSTEM and OBJECTS_MACHINE
--- 586,598 ----
/* 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
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
/* System-specific programs to be made.
OTHER_FILES, OBJECTS_SYSTEM and OBJECTS_MACHINE
***************
*** 533,535 ****
--- 602,619 ----
${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