home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / emacs-18.59-diffs.gz / emacs-18.59-diffs
Text File  |  1996-10-13  |  1MB  |  36,473 lines

  1. This file contains patches that transform the baseline version into
  2. the amiga version.  Assuming that you have unarchived the baseline
  3. version in the current directory, just run the command:
  4.  
  5.     patch -p1 -E -b .pbak <diff-file
  6.  
  7. where 'diff-file' is this patch file.  After running patch you should
  8. remove all the generated *.pbak files, and look for any *.rej files
  9. that indicate a problem patching the baseline source.
  10.  
  11. diff -rup --new-file baseline/fsf/emacs18/Product-Info amiga/fsf/emacs18/Product-Info
  12. --- baseline/fsf/emacs18/Product-Info    Wed Dec 31 17:00:00 1969
  13. +++ amiga/fsf/emacs18/Product-Info    Sat Sep 28 00:00:00 1996
  14. @@ -0,0 +1,62 @@
  15. +.name
  16. +emacs
  17. +.fullname
  18. +GNU Emacs editor
  19. +.type
  20. +Text Editing
  21. +.short
  22. +GNU Emacs editor
  23. +.description
  24. +GNU Emacs is the GNU incarnation of the advanced, self-documenting,
  25. +customizable, extensible real-time display editor Emacs. (The `G' in
  26. +`GNU' is not silent.)
  27. +
  28. +We say that Emacs is a "display" editor because normally the text
  29. +being edited is visible on the screen and is updated automatically as
  30. +you type your commands.
  31. +
  32. +We call it a "real-time" editor because the display is updated very
  33. +frequently, usually after each character or pair of characters you
  34. +type.  This minimizes the amount of information you must keep in your
  35. +head as you edit.
  36. +
  37. +We call Emacs advanced because it provides facilities that go beyond
  38. +simple insertion and deletion: filling of text; automatic indentation
  39. +of programs; viewing two or more files at once; and dealing in terms
  40. +of characters, words, lines, sentences, paragraphs, and pages, as well
  41. +as expressions and comments in several different programming
  42. +languages.  It is much easier to type one command meaning "go to the
  43. +end of the paragraph" than to find that spot with simple cursor keys.
  44. +
  45. +"Self-documenting" means that at any time you can type a special
  46. +character, `Control-h', to find out what your options are.  You can
  47. +also use it to find out what any command does, or to find all the
  48. +commands that pertain to a topic.
  49. +
  50. +"Customizable" means that you can change the definitions of Emacs
  51. +commands in little ways.  For example, if you use a programming
  52. +language in which comments start with `<**' and end with `**>', you
  53. +can tell the Emacs comment manipulation commands to use those strings.
  54. +Another sort of customization is rearrangement of the command set.
  55. +For example, if you prefer the four basic cursor motion commands (up,
  56. +down, left and right) on keys in a diamond pattern on the keyboard,
  57. +you can have it.
  58. +
  59. +"Extensible" means that you can go beyond simple customization and
  60. +write entirely new commands, programs in the Lisp language to be run
  61. +by Emacs's own Lisp interpreter.  Emacs is an "on-line extensible"
  62. +system, which means that it is divided into many functions that call
  63. +each other, any of which can be redefined in the middle of an editing
  64. +session.  Any part of Emacs can be replaced without making a separate
  65. +copy of all of Emacs.  Most of the editing commands of Emacs are
  66. +written in Lisp already; the few exceptions could have been written in
  67. +Lisp but are written in C for efficiency.  Although only a programmer
  68. +can write an extension, anybody can use it afterward.
  69. +.version
  70. +18.59
  71. +.author
  72. +Richard Stallman
  73. +.distribution
  74. +GNU Public License
  75. +.described-by
  76. +Fred Fish (fnf@amigalib.com)
  77. diff -rup --new-file baseline/fsf/emacs18/amiga/README amiga/fsf/emacs18/amiga/README
  78. --- baseline/fsf/emacs18/amiga/README    Wed Dec 31 17:00:00 1969
  79. +++ amiga/fsf/emacs18/amiga/README    Sat Sep 28 00:00:00 1996
  80. @@ -0,0 +1,11 @@
  81. +This version of emacs is still built with SAS C.  It also requires
  82. +David Gay's unix emulation library, which can be found in the unix
  83. +subdirectory here.  You may have to go through some contortions to
  84. +recompile it though.
  85. +
  86. +The files in amiga-extra are various things I received in the emacs
  87. +distribution from David Gay, but didn't have any time to examine
  88. +very closely, so they are stuck there in limbo for the time being.
  89. +
  90. +-Fred  ><>
  91. + 12-Jul-94
  92. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/INSTALL.AMIGA amiga/fsf/emacs18/amiga/amiga-extra/INSTALL.AMIGA
  93. --- baseline/fsf/emacs18/amiga/amiga-extra/INSTALL.AMIGA    Wed Dec 31 17:00:00 1969
  94. +++ amiga/fsf/emacs18/amiga/amiga-extra/INSTALL.AMIGA    Sat Sep 28 00:00:00 1996
  95. @@ -0,0 +1,58 @@
  96. +DON'T FORGET: This version of Emacs REQUIRES AmigaOS V2.04 or later !!
  97. +
  98. +If you are updating from a previous version, the following steps apply:
  99. +- You must redefine your GNUEMACS: assign (the name of the directory
  100. +  has changed from emacs-18.58 to emacs-18.59).
  101. +- You should make sure you are using the lisp files (*.el and *.elc) which
  102. +  come with this release, as several of them have changed.
  103. +
  104. +New users should do the following (assuming you are in the emacs-18.59
  105. +directory):
  106. +
  107. +1. Copy amiga/.emacs, amiga/.emacs-menu.menu, amiga/.emacs-menu.el to s:
  108. +2. Copy amiga/c/#? to somewhere in your path.
  109. +3. Add an assign GNUEMACS: <wherever you've put the emacs directory> to 
  110. +   your User-Startup.
  111. +4. Install Matt Dillon's fifo.library and fifo: handler if you want to use
  112. +   external processes (This can be found on Fish disks). If you have any
  113. +   problems, try a version at least as recent as that on Fish Disk 588.
  114. +5. Define various environment variables (these all have defaults, so this
  115. +   isn't absolutely necessary, except for ESHELL) :
  116. +
  117. +     USER     - a username (a la Unix) (default "user")
  118. +     USERNAME - your full name (default same as $USER)
  119. +     HOME     - your "home" directory (This is the directory refered to
  120. +        by ~/<file>, and where the .emacs file is looked for)
  121. +        (default "s:").
  122. +     HOSTNAME - a name for your system (default "amiga")
  123. +     ESHELL   - where to find an unix-like shell (no default). By unix-like
  124. +        I mean that it should not open a window to get its input.
  125. +        The only tested value for this is GNUEMACS:etc/sh.
  126. +
  127. +   For instance, I have the following values:
  128. +     USER: dgay, USERNAME: David E. Gay, HOSTNAME: owl,
  129. +     ESHELL: gnuemacs:etc/sh
  130. +
  131. +6. If you want to check that emacs is working, type 
  132. +  assign gnuemacs: ""
  133. +  emacs
  134. +
  135. +   If all goes well, emacs should open a window. If you get
  136. +     memacs: Unknown command
  137. +   you have an alias for emacs. Try editing s:Shell-Startup and removing it.
  138. +
  139. +   If you get
  140. +     emacs: file is not executable
  141. +   try typing
  142. +     protect <wherever you put the commands from step 2>/emacs +s
  143. +
  144. +   And finally, if you get
  145. +     wrong number of arguments
  146. +     if failed returncode 10
  147. +   make sure that you have getstack in your path
  148. +
  149. +7. If you are going to use emacs over a serial line, you must install 
  150. +   the termcap file, which comes with the source version. To do so, type:
  151. +
  152. +     join gnuemacs:etc/termcap.ucb gnuemacs:etc/termcap.amiga as s:termcap
  153. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs
  154. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs    Wed Dec 31 17:00:00 1969
  155. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs    Sat Sep 28 00:00:00 1996
  156. @@ -0,0 +1 @@
  157. +;; Put your configuration commands here.
  158. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.el
  159. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.el    Wed Dec 31 17:00:00 1969
  160. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.el    Sat Sep 28 00:00:00 1996
  161. @@ -0,0 +1 @@
  162. +(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))))))
  163. \ No newline at end of file
  164. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.menu amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.menu
  165. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.menu    Wed Dec 31 17:00:00 1969
  166. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.menu    Sat Sep 28 00:00:00 1996
  167. @@ -0,0 +1,38 @@
  168. +(("Project" ("Open" find-file ?O)
  169. +        ("Save" save-buffer ?S)
  170. +        ("Save As" write-file ?W)
  171. +        ()
  172. +        ("Quit" save-buffers-kill-emacs ?Q))
  173. + ("Edit" ("Undo" undo ?U)
  174. +         ()
  175. +     ("Mark" set-mark-command ?M)
  176. +     ("Cut" kill-region ?X)
  177. +     ("Copy" copy-region-as-kill ?C)
  178. +     ("Paste" yank ?V)
  179. +     ("Paste Previous" yank-pop))
  180. + ("Search" ("Find Forward" isearch-forward ?F)
  181. +       ("Find Backward" isearch-backward ?B)
  182. +       ()
  183. +       ("Find Fwd Regexp" isearch-forward-regexp)
  184. +       ("Find Bwd Regexp" isearch-backward-regexp)
  185. +       ()
  186. +       ("Query Replace" query-replace ?R)
  187. +       ("Query Rpl Regexp" query-replace-regexp))
  188. + ("Window" ("Split" split-window-vertically ?2)
  189. +       ("Split H" split-window-horizontally)
  190. +       ()
  191. +       ("One Window" delete-other-windows ?1)
  192. +       ("Delete" delete-window ?0)
  193. +       ()
  194. +       ("Enlarge" enlarge-window ?E)
  195. +       ("Next" other-window ?N))
  196. + ("Buffers" ("List" list-buffers)
  197. +        ("Change" switch-to-buffer)
  198. +        ("Kill" kill-buffer))
  199. + ("Help" ("Tutorial" help-with-tutorial ?T)
  200. +         ("Information" info ?H)
  201. +     ()
  202. +     ("Where Is Command" where-is)
  203. +     ("What Is Command" describe-function)
  204. +     ("What Is Key" describe-key)
  205. +     ("Apropos" command-apropos)))
  206. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/amiga.doc amiga/fsf/emacs18/amiga/amiga-extra/amiga/amiga.doc
  207. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/amiga.doc    Wed Dec 31 17:00:00 1969
  208. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/amiga.doc    Sat Sep 28 00:00:00 1996
  209. @@ -0,0 +1,605 @@
  210. +1. Introduction
  211. +---------------
  212. +
  213. +Emacs is a powerful, but sometimes cryptic, editor. In this Amiga
  214. +version, I have tried to make it easier to use with menus, mouse
  215. +support and arrow key support, but it still requires some getting used
  216. +to. I would recommend starting with the tutorial, which can be started
  217. +from the Help menu (if it is missing, you didn't install emacs
  218. +correctly. Check that the file s:.emacs-menu.el exists) or from the
  219. +keyboard by typing Control-H and then t.
  220. +
  221. +This file only describes the Amiga specific features of emacs, and it
  222. +assumes a working knowledge of emacs. For more documentation you can
  223. +consult the emacs help (Information in the Help menu, or C-h i) or
  224. +read the emacs manual (which is the same document in a printed form).
  225. +This manual can be bought from the
  226. +
  227. +     Free Software Foundation
  228. +     675 Mass Ave
  229. +     Cambridge, MA 02139
  230. +     USA
  231. +
  232. +See the file gnuemacs:etc/DISTRIB for more information (you can type
  233. +C-h C-d to view it).
  234. +
  235. +To install emacs, read the file INSTALLATION.
  236. +
  237. +
  238. +2. Changes since the last version
  239. +---------------------------------
  240. +
  241. +Several features have been added since v1.26:
  242. +
  243. +- based on emacs 18.59 instead of 18.58
  244. +- changes contributed by Christian E. Hopps: new AREXX code, enhancements
  245. +to the screen routines (more flexibility, read window & screen size,
  246. +...).
  247. +- amiga-iconify is now a toggle (to allow deiconification from AREXX).
  248. +- the infamous 'vfork: not enough memory' message is now more explicit :-)
  249. +- miscellaneous bug fixes
  250. +
  251. +3. Using emacs in a window
  252. +--------------------------
  253. +
  254. +Emacs runs in a window on the Workbench (this can be changed). It
  255. +basically works like just any other version of GNU Emacs, using the
  256. +same keys, etc. It uses the standard amiga keymap, but with some strange
  257. +modifications:
  258. +
  259. +o The left alt key is stolen as a meta key for emacs. This means you can't use
  260. +it to enter accents. However, the right alt key remains untouched. Hence
  261. +'left alt-f e' moves forward one word and inserts an e, while
  262. +'right alt-f e' inserts an e acute. In the rest of the text, the meta key
  263. +always means the 'left alt' key.
  264. +
  265. +o C-space is always mapped to C-@, the set-mark command, for convenience.
  266. +
  267. +o The backspace key always sends DEL (delete previous character in emacs),
  268. +and DEL sends C-d (delete character under cursor). If you don't like this, 
  269. +add the line
  270. +    (setq amiga-remap-bsdel nil)
  271. +to your .emacs file (in s:).
  272. +
  273. +o Keypad keys are prefixed with C-x C-^ K (so 0 generates C-x C-^ K 0).
  274. +Normally, C-x C-^ K is a do-nothing operation, so the keypad keys just
  275. +insert the usual character. If you want to redefine the keypad keys, you
  276. +must do the following:
  277. +
  278. +  (global-set-key "\C-x\C-^K" (make-sparse-keymap))
  279. +  (global-set-key "\C-x\C-^K0" '<function for key 0>)
  280. +  (global-set-key "\C-x\C-^K1" '<function for key 0>)
  281. +  ...
  282. +
  283. +Once you have redefined one key, you must define all of them (as C-x C-^ K
  284. +is no longer a do-nothing command). If you still want a keypad to insert
  285. +its usual character, you can use (for +)
  286. +
  287. +  (global-set-key "\C-x\C-^K+" 'self-insert-command)
  288. +
  289. +Even with this, the numeric keypad will not work with the incremental
  290. +search function. The only way past that is to disable the C-x C-^ K
  291. +prefix, with the following code:
  292. +
  293. +  (setq amiga-remap-numeric-keypad nil)
  294. +
  295. +(and you will then not be able to redefine the keypad keys).
  296. +
  297. +o The sequences for function & arrow keys are the standard Amiga ones, 
  298. +except that the initial character (CSI, code 155) is replaced by
  299. +C-x C-^. For example, F1 is C-x C-^ 0 ~. You can always find the 
  300. +characters generated by a key by pressing it, and then executing
  301. +M-x view-lossage. This displays the last 100 characters seen by emacs. So
  302. +to define F1 to be view-lossage you would add
  303. +
  304. +  (global-set-key "\C-x\C-^0~" 'view-lossage)
  305. +
  306. +to s:.emacs (trying to define F1 interactively with M-x global-set-key
  307. +will fail ...).
  308. +
  309. +
  310. +There are several extra features:
  311. +
  312. +a) Mouse support, similar to the X-Windows version.
  313. +
  314. +You can position the cursor with the left mouse button. Other possibilites are:
  315. +
  316. +action            result
  317. +------------------------------
  318. +shift-left button    set mark at mouse position
  319. +control-left button    cut between point and mouse position
  320. +meta-left button    copy between point and mouse position
  321. +middle button        paste
  322. +shift-middle button    iconify emacs window (double click to deiconify)
  323. +
  324. +Some of the control, meta, etc combinations may be stolen by Intuition or
  325. +commodities programs, so don't be surprised if they don't all work.
  326. +
  327. +All of these actions may be redefined (this is emacs after all!), see the
  328. +file lisp/amiga-mouse.el for details (you will need to learn lisp if you don't
  329. +already know it ...) [Note: this file is not included in the binary only
  330. +distribution, you will need the source code version].
  331. +
  332. +b) Clipboard
  333. +
  334. +At first glance, emacs uses the Amiga clipboard, ie it cuts to the
  335. +clipboard and pastes from it (via the menu operations or the C-w
  336. +(kill-region), M-w (copy-region-as-kill) & C-y (yank) commands).
  337. +
  338. +Things are actually complicated by emacs use of a "kill ring" (ie it
  339. +remembers the last 30 things cut. The M-y (yank-pop, menu command
  340. +Paste Previous) allows you to recover old cuts):
  341. +
  342. +- When you cut (or copy) something in emacs it is placed in the
  343. +clipboard.
  344. +
  345. +- When you paste (yank) something in emacs, it checks the clipboard to
  346. +see if it contains anything new. If so, it pastes that.
  347. +
  348. +[Note: It also checks the clipboard when you cut something, and saves
  349. +that in the kill-ring if necessary]
  350. +
  351. +All this effort is used to make the clipboard appear to operate
  352. +transparently in emacs.
  353. +
  354. +c) Window
  355. +
  356. +By default, emacs runs in a window on the workbench screen using the
  357. +system default font and the standard colours. All this can be changed:
  358. +
  359. +o The font can be specified with the -fn <font> <size> option when you
  360. +run emacs. You can also use the amiga-set-font command interactively,
  361. +or add a line like
  362. +   (amiga-set-font "topaz" 11)
  363. +to your s:.emacs file. The font must be non-proportional.
  364. +
  365. +o The window size and screen can be changed with the
  366. +amiga-set-geometry function. It takes 4, 5 or 6 parameters, the (x,y)
  367. +position of the window and its (width,height). The 5th optional
  368. +parameter specifies the screen: a string gives the name of a public
  369. +screen, t stands for the default public screen (normally the
  370. +workbench) and nil means keep the same screen. Finally, if the 6th
  371. +parameter is present and not nil, a backdrop window is used.
  372. +
  373. +For example, the lisp code
  374. +  (amiga-set-geometry 0 0 640 400)
  375. +resizes the emacs window to 640x400. If the screen would be too small
  376. +given the current font (there must be room for 11x4 characters), the
  377. +change is refused.
  378. +
  379. +Michael Kaiser has contributed a simple public screen creation
  380. +utility: gnuemacs:amiga/contrib/kaiser/pub is a program that creates
  381. +a public screen called "EmacsPublicScreen".
  382. +
  383. +o The foreground & background colours can be changed with the 
  384. +amiga-set-foreground-color & amiga-set-background-color commands. You
  385. +specify the pen and not the actual colour (from 0 to 7 only,
  386. +because of restrictions in console.device).
  387. +
  388. +o The inverse text & fill colours can be specified with
  389. +amiga-set-inverse-text-pen and amiga-set-inverse-fill-pen. The
  390. +choices are also pens 0 to 7, or 8 for reverse.
  391. +
  392. +o The emacs window can be iconified (onto the workbench) with the
  393. +amiga-iconify command. This is bound to shift-middle button on a 3
  394. +button mouse, and to C-z (which is normally bound to suspend-emacs,
  395. +which doesn't work on the Amiga).
  396. +
  397. +To deiconify emacs, double click on the icon.
  398. +
  399. +Emacs will continue to answer to ARexx commands while iconified. The
  400. +variable amiga-emacs-iconfied is set to 't' while emacs is iconified,
  401. +'nil' the rest of the time.  You can test this, eg to make sure that
  402. +emacs is not iconified before reading some user input. If you wish to
  403. +deiconify emacs from arexx, simply call (amiga-iconify) again (it is a
  404. +toggle).
  405. +
  406. +You can specify the position for the icon with (amiga-set-icon-pos x
  407. +y), or get the default position with (amiga-set-icon-pos nil nil).
  408. +
  409. +If you use the functions described above in s:.emacs, they will take 
  410. +effect before emacs's window is opened. This will avoid the nasty
  411. +visual effects of the previous version.
  412. +
  413. +o You can manipulate the emacs window with amiga-activate-window,
  414. +amiga-window-to-front and amiga-window-to-back.
  415. +
  416. +o You can get the window and screen size with (amiga-get-window-geometry)
  417. +and (amiga-get-screen-geometry). The iconified status is now returned 
  418. +by amiga-get-window-geometry instead of the amiga-emacs-iconified variable.
  419. +
  420. +d) Menus
  421. +
  422. +If you have installed emacs correctly (see the INSTALLATION file), it
  423. +will startup with some menus containing some useful basic
  424. +functions (the layout was inspired from that of TurboText, another
  425. +good editor which has the disadvantage of being more expensive than
  426. +emacs ...). Alongside each item is the emacs key sequence which
  427. +invokes that function, if any.
  428. +
  429. +Using the Menu Help functionality of AmigaOS 2.04, you can get help
  430. +on any menu item by highlighting it with the mouse and pressing the
  431. +Help key [This is easier if you're left handed :-)].
  432. +
  433. +The menus are not fixed, they are defined by the s:.emacs-menu.el file
  434. +(which isn't human-readable). To modify them, edit s:.emacs-menu.menu.
  435. +This contains a lisp-like (but quite legible even for lisp-haters)
  436. +representation of the menus, which you can modify by adding items or
  437. +menus. The format should be obvious (just make sure that closing
  438. +brackets correspond to the correct opening ones, emacs always shows
  439. +the corresponding '(' when you type a ')'. Also the last bracket
  440. +should correspond with the first).
  441. +
  442. +When you have finished your changes, type C-c C-c. This will save your
  443. +menus, and then generate a .el file from them (this takes several
  444. +seconds even on an A3000. Be patient). Then save the resulting file.
  445. +To have the new menus take effect immediately, type M-C-x while in the
  446. +.el file.
  447. +
  448. +Enterprising lisp programmers can customise the menus even more by
  449. +modifying the functions amiga-menus-dispatch and/or amiga-menus-help
  450. +in lisp/amiga-mouse.el. This code basically receives a (menu-number
  451. +menu-item-number) list and must take the appropriate action
  452. +(currently, execute the command associated with that particular menu
  453. +item). The lack of comments will surely not deter these audacious
  454. +pionneers ...
  455. +
  456. +e) Command line options
  457. +
  458. +Beyond the standard emacs command line options (for which
  459. +documentation tends to be rather sketchy, not to say missing), you can
  460. +also use:
  461. +
  462. +-prealloc <n>: Reserve n bytes of memory for emacs exclusively. This
  463. +option *must* be the first on the command line. On the A3000, chip
  464. +memory can't be used for emacs (the details are complicated ...), so
  465. +you will run out of memory sooner than expected. This option allows
  466. +you to reserve some for emacs before it gets eaten by other programs.
  467. +
  468. +-fn <font> <size>: Set the font that emacs uses, like the
  469. +amiga-set-font command (see section c, on windows). Note that there
  470. +must be enough room for 11x4 characters in the standard 640x200
  471. +window. So avoid fonts bigger than 40 points ...
  472. +
  473. +-nw: Don't use a window, use a serial port. See part 3, Using Emacs
  474. +over a serial line.
  475. +
  476. +f) ARexx
  477. +
  478. +[The ARexx interface has been rewritten for this version by Christian
  479. +E. Hopps]
  480. +
  481. +Emacs has a full ARexx interface. It can execute scripts and commands
  482. +synchronously (waiting for the result) or asynchronously, and has an
  483. +ARexx port from which it accepts commands. 
  484. +
  485. +To execute a script, use the amiga-arexx-do-command command.  This
  486. +asks for the script file name (the default extension is .elx). If you
  487. +just want to execute a simple ARexx command, you can prefix those
  488. +commands with C-u and specify the string to execute.
  489. +
  490. +From lisp, you can use
  491. +  (amiga-arexx-send-command "<file>" nil) for a script, and
  492. +  (amiga-arexx-send-command "<commands>" t) for direct execution.
  493. +(and the same for amiga-arexx-do-command). The result of
  494. +amiga-arexx-send-command is an integer that can be passed to
  495. +amiga-arexx-wait-command to wait for the completion of the script or
  496. +command. It can also be used with amiga-arexx-check-command to check
  497. +if the script has finished. For example:
  498. +
  499. +  (let ((arexx-id (amiga-send-command "start-fun" nil)))
  500. +    ... do something here ...
  501. +    ; and wait for arexx script to end
  502. +    (amiga-arexx-wait-command arexx-id))
  503. +
  504. +amiga-arexx-wait-command returns the result of the script/command.
  505. +
  506. +amiga-arexx-do-command-with-results is like amiga-arexx-do-command,
  507. +but it returns the result of the script/command.
  508. +
  509. +Emacs's ARexx port accepts commands in lisp, and is usually called
  510. +EMACS1 (if you run emacs twice simulatenously, the second one will
  511. +have EMACS2, and so on). For example (from a shell),
  512. +
  513. +  rx "address EMACS1 '(beginning-of-buffer)'"
  514. +
  515. +will set point to the beginning of the buffer.
  516. +
  517. +ARexx commands are only processed at certain times, so be careful how
  518. +you design your applications. These are:
  519. +
  520. +o While waiting for commands from the keyboard (ie when emacs is
  521. +idle or iconified).
  522. +o While processing a synchronous (amiga-arexx-do-command) script or
  523. +waiting for a script to terminate with amiga-arexx-wait-command.
  524. +o When the amiga-arexx-process function is called.
  525. +
  526. +They also affect the user visible state by default (ie calling
  527. +beginning-of-buffer as above modifies the user's position). Avoid
  528. +sending random commands at random times, or use save-excursion.
  529. +
  530. +As usual, all this behaviour can be modified to some extent. Look in
  531. +amiga-init.el for details [The source code is the documentation...].
  532. +
  533. +There are a few arexx examples in the amiga/contrib directory.
  534. +
  535. +g) Workbench support
  536. +
  537. +Beyond iconification (see the section on the emacs window), emacs 
  538. +supports a number of features for Workbench users:
  539. +
  540. +- emacs can be run from the Workbench, by all the usual methods
  541. +  (double clicking on the tool, double clicking on a project which
  542. +  has temacs as its default tool, etc). All the projects that are
  543. +  passed to temacs will be loaded (if they are files), or listed 
  544. +  with dired (if they are directories).
  545. +
  546. +- icons can be dropped in emacs's window, the corresponding file
  547. +  or directory will be loaded or listed.
  548. +
  549. +- icons can be created for files that are saved. This is the default
  550. +  when emacs is run from the workbench. This is controlled by the
  551. +  amiga-create-icons variable: if you always want icons to be
  552. +  created, add
  553. +
  554. +    (setq amiga-create-icons t)
  555. +
  556. +  to s:.emacs, or
  557. +
  558. +    (setq amiga-create-icons nil)
  559. +
  560. +  if you never want them.
  561. +
  562. +h) external processes
  563. +
  564. +This version of emacs fully supports synchronous (used to get the
  565. +result of ls for dired, for instance) and asynchronous (as in the
  566. +'shell' command) processes. However, it requires Matt Dillon's
  567. +'fifo.device' and 'fifo:' devices to function. See the INSTALLATION
  568. +file for details.
  569. +
  570. +This allows full support for all emacs functions which call external
  571. +programs, providing that said programs exist on the Amiga. The
  572. +following work:
  573. +  compile (for SAS C 5.10b, with a few occasional problems)
  574. +  grep
  575. +  shell (but see the discussions below)
  576. +  display-time
  577. +  dired
  578. +  list-directory
  579. +  sort-...
  580. +
  581. +The compile command sometimes has problems finding file names in the
  582. +error messages, and tries to read the current directory instead. If
  583. +you are patient, it moves on to the next file.
  584. +
  585. +Because of differences between AmigaOS & Unix, sending signals (eg
  586. +interrupt, kill) to processes is not very reliable. The following
  587. +points must be kept in mind:
  588. +
  589. +- In some unlikely cases, the appropriate process to signal won't be 
  590. +  found. 
  591. +- The stop-process & continue-process functions don't work.
  592. +- interrupt-process & quit-process send a ctrl-c & ctrl-d to the
  593. +  process and all its children (probably).
  594. +- kill-process also sends a ctrl-c & ctrl-d. It then pretends that
  595. +  the process has died.
  596. +
  597. +All input sent to a process after an end-of-file is ignored. The process
  598. +just sees an endless sequence of end-of-files. This is most visible with
  599. +the shell command, where if you send an end-of-file to a program (eg type)
  600. +with C-c C-d, the shell will exit. The bug is in fifo.device, not in emacs.
  601. +
  602. +The input & output of processes run inside emacs look like interactive
  603. +files (which allows, for instance, shells to run correctly). However, this
  604. +confuses some programs which expect all interactive files to be Amiga
  605. +consoles and causes them to crash. Several versions of ls suffer from this
  606. +problem (they run into problems while trying to get the window size).
  607. +
  608. +amiga-process-stack-size is the size of the stack for new processes. If it
  609. +is 0 (the default), emacs's stack size is used.
  610. +
  611. +
  612. +4. Using emacs over a serial line
  613. +---------------------------------
  614. +
  615. +To use emacs over a serial port, you must do:
  616. +
  617. +  setenv TERM <terminal type> (eg vt100)
  618. +  emacs -nw
  619. +
  620. +The setenv line can be put in your User-Startup, so as to avoid typing
  621. +it every time.
  622. +
  623. +Emacs cannot simply guess how your terminal works from its name, it
  624. +needs a description of it. This is found in a termcap file, which
  625. +emacs looks for in s:termcap. If you didn't install this file with emacs,
  626. +you can do so by typing (in a CLI):
  627. +
  628. +  join gnuemacs:etc/termcap.ucb gnuemacs:etc/termcap.amiga as s:termcap
  629. +
  630. +[Note: These files only come with the source version]
  631. +
  632. +The -nw prevents the use of a window.
  633. +
  634. +If you have several serial ports, you can type
  635. +
  636. +  emacs -dev ser2.device 2 -nw
  637. +
  638. +to use port 2 of device ser2.device. Use of the -dev option still requires the
  639. +-nw.
  640. +
  641. +These options (-dev & -nw) *must* be specified at the start of the
  642. +command line.
  643. +
  644. +The descriptions of the Clipboard, the command line options and the
  645. +ARexx port in part 2 above also apply to use over a serial port.
  646. +
  647. +
  648. +5. Redumping emacs [This section for expert users only]
  649. +-------------------------------------------------------
  650. +
  651. +Enterprising users may want to change the lisp files which are loaded
  652. +into the Emacs dump file. The procedure for doing this is very similar
  653. +to that with the Unix version, except that the amount of pure storage
  654. +can be changed without recompiling emacs. This will allow users
  655. +without SAS C v5.10b to still make such changes.
  656. +
  657. +The necessary lisp files are only included in the source distribution,
  658. +so you will have to get that first. Once that is available, that you
  659. +have made all your changes (eg adding some extra files to be dumped),
  660. +use the following sequence to redump emacs:
  661. +
  662. +  cd gnuemacs:etc
  663. +  stack 20000
  664. +  /temacs -pure <n> -malloc <m> -nl -batch -l loadup dump
  665. +
  666. +The -pure <n> and -malloc <m> options should only be necessary if you
  667. +add extra files to be dumped, see below how to choose values for n &
  668. +m. The above order for the parameters must be preserved. Specifying
  669. +dump without -nl & -batch will have unpredicatable consequences.
  670. +
  671. +Once all the files are loaded, a new copy of gnuemacs:etc/EMACS-DATA
  672. +will be saved, and all should work correctly. If you get one of the
  673. +following messages:
  674. +
  675. +  Pure Lisp storage exhausted
  676. +
  677. +  Emacs dump: ran out of memory for malloc.
  678. +
  679. +read the following description of the -pure & -malloc options:
  680. +
  681. +When emacs is dumped, it saves (amongst other things) the copies of
  682. +two zones of memory, called the pure storage area and the malloc hunk.
  683. +These contain an internal representation of the lisp code, so the more
  684. +code you include in a dumped emacs, the bigger these need to be. The
  685. +default sizes of these are reasonable sizes for the standard lisp code
  686. +which is dumped, but you will probably need to increase them if you
  687. +add some more lisp modules. The best way to find the new values for n
  688. +(size of pure area) and m (size of the malloc hunk), is to run the
  689. +command
  690. +
  691. +  cd gnuemacs:etc
  692. +  stack 20000
  693. +  /temacs -pure 200000 -malloc 200000 -nl -batch -l loadup dump
  694. +
  695. +(these sizes should be largely sufficient, but if you still get one of
  696. +the two error messages above, increase them). Then run emacs as usual,
  697. +and look at the values of the 2 lisp variables
  698. +
  699. +     pure-bytes-used
  700. +and  amiga-malloc-bytes-used
  701. +
  702. +pure-bytes used contains the minimum value for n, and
  703. +amiga-malloc-bytes-used the minimum value for m. Add 1000 to these for
  704. +luck to get values for n and m, and redump emacs using these.
  705. +
  706. +For those who are into modifying the C source, the default values are
  707. +130000 for n (see DEF_PURESIZE in s-amiga.h) and 92000 for m (see
  708. +MALLOC_HUNK_SIZE in amiga.h).
  709. +
  710. +6. Source
  711. +---------
  712. +
  713. +Source for emacs and all the programs included with it should be
  714. +obtainable from the same place as this file. If not, please send me
  715. +mail (if you are on the Internet) and I will provide the missing
  716. +pieces. Specifically, there should be:
  717. +
  718. +- The emacs sources
  719. +- Sources for the 'unix library' needed to compile emacs
  720. +- Source for the programs in the c directory (ls, sort, rmdir, grep).
  721. +This consists of the GNU fileutils, textutils and grep packages.
  722. +
  723. +Distributing the binary without these packages is a violation of
  724. +the GNU General Public License (see the file COPYRIGHT in the etc
  725. +directory) under which emacs is distributed.
  726. +
  727. +7. Thanks & Problems
  728. +--------------------
  729. +
  730. +I would like to thank the following people for their help while porting
  731. +emacs:
  732. +
  733. +- Mark D. Henning for the early port of emacs. He's the person who got
  734. +emacs working on the Amiga ...
  735. +- Christian E. Hopps for enhancements to the screen display code, a
  736. +rewrite of the AREXX code, testing and useful suggestions.
  737. +- All the beta testers and people who contributed useful utilities (see
  738. +the amiga/contrib directory):
  739. +  Jean-Marc Vandel
  740. +  Philippe Morel
  741. +  Jukka Partanen
  742. +  Michael Witbrock
  743. +  Tero Manninen
  744. +  Alan Bair
  745. +  Hugh D. Gamble
  746. +  Tapio Heiskanen
  747. +  Teddy Wang
  748. +  Richard McGowen
  749. +  Keith Hanlan
  750. +  Carsten Heyl
  751. +  Anders Lindgren
  752. +  Michel Schinz
  753. +  Hans-Joachim Widmaier
  754. +  Michael Kaiser
  755. +
  756. +Please send any bug reports, enhancement requests, etc to:
  757. +
  758. +Post:                E-mail:
  759. +David Gay            dgay@di.epfl.ch
  760. +19 Chemin de la Source
  761. +CH-1296 Coppet
  762. +Vaud
  763. +Switzerland
  764. +
  765. +8. Ordering Information
  766. +-----------------------
  767. +
  768. +I can provide a complete copy of my development directory, which
  769. +includes:
  770. +
  771. +o the standard emacs-18.59 files
  772. +o modified and new lisp files
  773. +o Amiga-specific source, as text and in RCS format (highlighting the
  774. +changes from a standard unix distribution, and the different versions).
  775. +o assorted lisp packages hacked for the Amiga (I will be posting some
  776. +of these in due course):
  777. +  - a tags-like access to the 2.0 autodocs (you must already have a
  778. +    copy of these ...)
  779. +  - gnus (a news reader) for use with Matt Dillon's uucp package. 
  780. +  - getris, a tetris clone for emacs
  781. +
  782. +All these as a tar file on a QIC-150 tape, for $200 (the same price as
  783. +the FSF, so as not to undercut them), or 300SF. This price is valid
  784. +until the 31st December 1993, and includes shipping by surface mail.
  785. +
  786. +Please send all orders, by postal mail, to
  787. +
  788. +  David Gay
  789. +  19 Chemin de la Source
  790. +  CH-1296 Coppet
  791. +  Vaud
  792. +  Switzerland
  793. +
  794. +  Tel: +(41)-22 776 35 81 [Evenings, Central European Time]
  795. +  Fax: +(41)-22 776 70 58
  796. +
  797. +Include with your order:
  798. +- A cheque, in dollars or Swiss francs.
  799. +- Your *complete* address (don't forget the country, etc).
  800. +- A phone or fax number so I can contact you if I have any problems.
  801. +
  802. +I will be glad to include, on request, and with full source, some
  803. +other pieces of software I have written:
  804. +- An HP11 calculator (this is an update to the version available on
  805. +fish disks, with some bug fixes and 2.0 specific features).
  806. +- A scheme compiler for the Amiga, still in an alpha state.
  807. +- A fortune cookie program, including 1 megabyte of cookies (merged
  808. +from various sources).
  809. +
  810. +
  811. +Dvaid Gay
  812. +dgay@di.epfl.ch
  813. +Ecole Polytechnique Federale de Lausanne - Switzerland
  814. +Laboratoire d'Informatique Technique
  815. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/announce1.28 amiga/fsf/emacs18/amiga/amiga-extra/amiga/announce1.28
  816. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/announce1.28    Wed Dec 31 17:00:00 1969
  817. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/announce1.28    Sat Sep 28 00:00:00 1996
  818. @@ -0,0 +1,39 @@
  819. +GNU Emacs 18.59, Amiga RELEASE 1.28
  820. +-----------------------------------
  821. +
  822. +Emacs is a very powerful, but sometimes cryptic, text editor. Its basic
  823. +features are similar to those of the MEmacs editor which comes with 
  824. +AmigaOS (in the Tools directory), but has numerous other facilities:
  825. +- unlimited undo.
  826. +- language specific editing, with automatic (re)indentation.
  827. +- a dialect of lisp as extension language, leading to extreme 
  828. +  reconfigurability.
  829. +- abbreviations for commonly typed words.
  830. +- complete on-line manual.
  831. +- powerful search & replace facilities (including wildcards).
  832. +
  833. +In this Amiga version, I have tried to make it easier to use with menus, 
  834. +mouse, clipboard, rexx and workbench support.
  835. +
  836. +This version (1.28) is an update on version 1.26. It tracks the update
  837. +from GNU Emacs 18.58 to 18.59.
  838. +
  839. +System requirements:
  840. +- AmigaOS 2.04
  841. +- At least 2MB of memory (emacs uses about 750k + memory for the files
  842. +  being edited).
  843. +- 2.5MB of free disk space for the binary version, 8MB for the 
  844. +  source version (but you can remove some of the files once it has been
  845. +  installed).
  846. +- Emacs works with a 68000 (A500,A2000), but is a bit slow. It is very
  847. +  pleasant to use with a 68030/25MHz ...
  848. +
  849. +This port was originally based on that of Mark Henning (gnuemacs
  850. +v1.10), but after having made rather extensive modifications, added
  851. +numerous features and updated it to Emacs 18.59, I decided to
  852. +release it myself. 
  853. +
  854. +David Gay
  855. +dgay@di.epfl.ch
  856. +Ecole Polytechnique Federale de Lausanne, Switzerland.
  857. +Laboratoire d'Informatique Technique.
  858. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/emacs amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/emacs
  859. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/emacs    Wed Dec 31 17:00:00 1969
  860. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/emacs    Sat Sep 28 00:00:00 1996
  861. @@ -0,0 +1,26 @@
  862. +.key a1,a2,a3,a4,a5,a6,a7,a8,a9
  863. +.bra {                                       
  864. +.ket }   
  865. +; Startup script for GNU Emacs                                    
  866. +; Make sure the FIFO handler is ready        
  867. +assign >NIL: FIFO: exists                    
  868. +if warn                                      
  869. +  if exists L:fifo-handler                   
  870. +    echo "Starting fifo-handler"             
  871. +    run <NIL: >NIL: L:fifo-handler           
  872. +  else                                       
  873. +    echo "Cannot find L:fifo-handler."       
  874. +    echo "External processes will not work." 
  875. +  endif                                      
  876. +endif                                        
  877. +; Increase the stack size as needed          
  878. +set stack=`getstack`
  879. +if not $stack gt 40000 val
  880. +  stack 40000
  881. +endif
  882. +; Invoke GNU Emacs
  883. +run gnuemacs:temacs {a1} {a2} {a3} {a4} {a5} {a6} {a7} {a8} {a9}
  884. +; Restore the previous stack size                                       
  885. +stack $stack
  886. +unset stack
  887. +
  888. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/etags.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/etags.uue
  889. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/etags.uue    Wed Dec 31 17:00:00 1969
  890. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/etags.uue    Sat Sep 28 00:00:00 1996
  891. @@ -0,0 +1,610 @@
  892. +begin 666 etags
  893. +M```#\P`````````"``````````$``!B&```"^P```^D``!B&2.=^_B1()`!)
  894. +M^0`````L>``$1_D```=`<@`@/````2M@`B;!4<C__"E/!W`I3@=H)FX!%"`K
  895. +M`*QG#.6(($`@*``TY8A@!B`/D*L`.B(/DH`&@0```(`I00=$L*P&B&14("P&
  896. +MB`:`````@"E`!Y`B/``!``%.KO\Z2H!G``'2*4`'C"(`!H````"`*4`'1-"L
  897. +M!H@,;@`D`!1M&"E`!X@I00>$DJP'D$'L!X`@@4ZN_21@`BY`0JP';'``(CP`
  898. +M`#``3J[^SB9N`11#^@&*<`!.KOW8*4`+Y&8&<&1@``#F*6L`F`=D2JL`K&<`
  899. +M`'X@:P"LT<C1R")H`!#3R=/)(`)R`!(9*4D'=-"!7H`"0/_\*4`'?$CG0$`B
  900. +M/``!``%.KO\Z3-\"`DJ`9@AP%"\`9P`!%B!`*4`'>"`"4X#4@1&R```@`E."
  901. +M4<C_]A&\`"`@`E."$;P`(B`"$;$@`"`!4<K_^!"\`"(O"&!*0>L`7$ZN_H!!
  902. +MZP!<3J[^C"E`!VPO`"1`("H`)&<8+&P+Y"!`(B@``$ZN_Z`I0`=D(@!.KO^"
  903. +M(&P';"\(2&P'0"!H`"0I:``$!W1.ND=P3KHRNG``8`0@+P`$)&P'<"4`+'@`
  904. +M!`QN`"0`%&T22JP'@&<,0>P'@%FL!XA.KOTD+DH@+`=<9P0@0$Z03KI'2$ZZ
  905. +M1UP@+`>09PPB;`>,+'@`!$ZN_RY*K`=L9R`L;`OD(BP'9&<$3J[_IBQX``1.
  906. +MKO]\(FP';$ZN_H9@$BQX``0@+`=\9P@B;`=X3J[_+B)L"^1.KOYB(!],WW]^
  907. +M3G5D;W,N;&EB<F%R>0`@#Y!\`'2PK`=$90!*^)[\`&1(YP<4+B\`?"IO`(!Z
  908. +M`"E5"B9P`2E``#IP`;Z`;P`!$B!M``1R+;(09@`!!BP`(&T`!")(T\9*$6<`
  909. +M`.[1QA`02(!(P')"D(%G-EF`9T!R&Y"!9TA9@&=,4X!G3G(.D(%G``"44X!G
  910. +M``"44X!G``">4X!G``"24X!G``"@8```N!E\`#\`!$*L`#I@``"6&7P`+P`$
  911. +M0JP`.F```(A2K``B8```@%*L`#I@>$J%;Q8O+`HF2'H#&DAL!M!.NE#@3^\`
  912. +M#&!R4H53AUB-<`&^@&\((&T`!$H09A8O+`HF2'H#%$AL!M!.NE"V3^\`#&!(
  913. +M*6T`!``&8#)2K``F8"92K``J0JP`.F`<4JP`+F`64JP`,E*L`#9"K``Z8`A2
  914. +MK``V0JP`.E*&8`#_"%.'6(U@`/[J<`&^@&X<+RP*)DAZ`N)(;`;03KI06$AX
  915. +M``%.ND]Z3^\`$$JL``9F$D'Z`OA*K``Z9P1!^@+H*4@`!F$`!6!(;`HV80`@
  916. +MYDAL"CYA`"#>4$]*K``Z9T1!^@+22JP`(F<$0?H"QB\(+RP`!DZZ5_I03RE`
  917. +M"BYF)"\L"B9(>@*P2&P&T$ZZ3^@NK``&3KHD\DAX``%.ND\"3^\`$'`!*4``
  918. +M'B`L`!ZPAVQ,(@#E@29U&``O"V$`!=!83TJL`#IG,"\L"C)A``\6+H`O"TAZ
  919. +M`F8O+`HN3KI/F"ZL"C)A``KZ+JP*,F$`">I/[P`00JP*,E*L`!Y@K$JL`#IG
  920. +M$"\L"BY.NE7"0I=.NDZ06$]*K``V9Q`O+`HR80`*P$*73KI.>EA/2JP`*F=&
  921. +M?`&\AVP\2'H"#B\L``9.NC[X(`;E@"ZU"``O+``&2'H!_$AO`"1.NDZP2&\`
  922. +M*$ZZ38A(>@'B3KHHW$_O`!Q2AF#`4JP`(D'Z`;Q*K``B9P1!^@&P+P@O+``&
  923. +M3KI6Y%!/*4`*+F8D+RP`!DAZ`9I(;`;03KI.TBZL``9.NB/<2'@``4ZZ3>Q/
  924. +M[P`0+RP*,F$`"B`NK`HN3KI5!%A/2JP`*F<@(&P`!B\(+PA(>@&*2&\`($ZZ
  925. +M3B1(;P`D3KI,_$_O`!1"ITZZ3:I83TS?*.#>_`!D3G4@#`D*```@"0HB)R,H
  926. +M*5M=>WT]+2LE*B\F?%Y^(3P^.RPN.C\``$%"0T1%1D=(24I+3$U.3U!14E-4
  927. +M55976%E:7V%B8V1E9F=H:6IK;&UN;W!Q<G-T=79W>'EZ)```04)#1$5&1TA)
  928. +M2DM,34Y/4%%24U155E=865I?86)C9&5F9VAI:FML;6YO<'%R<W1U=G=X>7HD
  929. +M,#$R,S0U-C<X.0``+#L``"5S.B`M9B!F;&%G(&UA>2!O;FQY(&)E(&=I=F5N
  930. +M(&]N8V4*`"5S.B`M9B!F;&%G(&UU<W0@8F4@9F]L;&]W960@8GD@82!F:6QE
  931. +M;F%M90H`57-A9V4Z("5S(%LM0D9A971U=W9X72!;+68@;W5T9FEL95T@9FEL
  932. +M92`N+BX*`%1!1U,``'1A9W,``&$`=P`E<SH@```,"B5S+"5D"@``3U1!1U,`
  933. +M96=R97`@/B5S("UV("<))7,))R!/5$%'4P!C.G-O<G0@9G)O;2`E<R!T;R`E
  934. +M<P``<@!T97@`875X`&)B;`!L`&5L``!L<W``;&ES<```8VP``&-L:7-P`'-M
  935. +M``!S8VT`<V-H96UE``!T`'-C:`!330``4T--`"5S.B!T;V\@;6%N>2!E;G1R
  936. +M:65S('1O('-O<G0*`&UA:6X``$T````E<R0`)2XU,',`)7,Z($1U<&QI8V%T
  937. +M92!E;G1R>2!I;B!F:6QE("5S+"!L:6YE("5D.B`E<PH``%-E8V]N9"!E;G1R
  938. +M>2!I9VYO<F5D"@`E<SH@1'5P;&EC871E(&5N=')Y(&EN(&9I;&5S("5S(&%N
  939. +M9"`E<SH@)7,@*%=A<FYI;F<@;VYL>2D*```E<R5C)60L)60*```E<PDE<PD`
  940. +M`"5D```E<R`E<R`E9`H`)2TQ-G,E-&0@)2TQ-G,@)7,*``!D969I;F4``'1Y
  941. +M<&5D968`<W1R=6-T``!U;FEO;@!E;G5M``!$148`:6YT96=E<@!R96%L``!L
  942. +M;V=I8V%L`&-O;7!L97@`8VAA<F%C=&5R`&1O=6)L90``<')E8VES:6]N`&9U
  943. +M;F-T:6]N``!S=6)R;W5T:6YE``!P<F]G<F%M`'!R;V-E9'5R90`Z8VAA<'1E
  944. +M<CIS96-T:6]N.G-U8G-E8W1I;VXZ<W5B<W5B<V5C=&EO;CIE<6YO.FQA8F5L
  945. +M.G)E9CIC:71E.F)I8FET96TZ='EP96]U=`!415A404=3``H`=FER='5A;"!M
  946. +M96UO<GD@97AH875S=&5D``"_[`=$90!$($CG`01^`'!_OH!L,'``0>P)%A&`
  947. +M>`!![`B7$8!X`$'L"!@1@'@`0>P'F1&`>`!![`F5$;P``7@`4H=@RBIL``H0
  948. +M%6<2$@!(@4'L!YD1O``!$`!2C6#J*FP`#A`59Q(2`$B!0>P(&!&\``$0`%*-
  949. +M8.HJ;``6$!5G$A(`2(%![`B7$;P``1``4HU@ZBIL`!(0%6<2$@!(@4'L"181
  950. +MO``!$`!2C6#J*FP`&A`59Q`2`$B!0>P)E4(P$`!2C6#L&6P'HP>9&6P((@@8
  951. +M&6P)(`D6&6P(H0B7&6P)GPF53-\@@$YU(`^0?``,L*P'1&4`0S)(YP`4*F\`
  952. +M#$AZ_-8O#4ZZ4<103RE`"BIF'B\L"B9(>OQZ2&P&T$ZZ2;(NC4ZZ'KY/[P`,
  953. +M8``"7"\-80`;3BE`"B)(>``N+PUA`!NF3^\`#"9`(`MG4D'K``%(>OR&+PA.
  954. +MND,B4$]*@&<H0>L``4AZ_'8O"$ZZ0PY03TJ`9Q1!ZP`!2'K\9B\(3KI"^E!/
  955. +M2H!F%B\L"BIA`!:4+JP**DZZ3Y!83V```>P@"V<``)!!ZP`!2'K\.B\(3KI"
  956. +MRE!/2H!G9$'K``%(>OPH+PA.ND*V4$]*@&=00>L``4AZ_!@O"$ZZ0J)03TJ`
  957. +M9SQ!ZP`!2'K\""\(3KI"CE!/2H!G*$'K``%(>OOZ+PA.ND)Z4$]*@&<40>L`
  958. +M`4AZ^^HO"$ZZ0F903TJ`9A8O+`HJ80`2L"ZL"BI.ND[\6$]@``%8(`MG``#Z
  959. +M0>L``4AZ^\`O"$ZZ0C903TJ`9P``T$'K``%(>ONN+PA.ND(@4$]*@&<``+I!
  960. +MZP`!2'K[G"\(3KI""E!/2H!G``"D0>L``4AZ^XXO"$ZZ0?103TJ`9P``CD'K
  961. +M``%(>OMZ+PA.ND'>4$]*@&=X0>L``4AZ^VHO"$ZZ0<I03TJ`9V1!ZP`!2'K[
  962. +M6B\(3KI!ME!/2H!G4'!ML"O__V8@<&.P*__^9AAP<[`K__UF$$'K``$O"&$`
  963. +M`*)83TJ`9BAP3;`K__]F-'!#L"O__F8L<%.P*__]9B1!ZP`!+PAA``!Z6$]*
  964. +M@&<4+RP**F$`$O@NK`HJ3KI-_%A/8%@@"V=&$"L``7)CL`%G/')HL`%G-G)Y
  965. +ML`%G,$HK``)F*B\L"BIA``W@6$]*@&<,+RP**DZZ3<)83V`>0J="IR\L"BI.
  966. +MNDLJ3^\`#&$`!S0O+`HJ3KI-HEA/3-\H`$YUO^P'1&4`0)(O#2IO``@0%6<0
  967. +M<C"P`6T&<CFP`6_P<`!@`G`!*E].=2`/D'P`1+"L!T1E`$!DGOP`.$CG#Q0H
  968. +M+P!H*B\`9"PO`&`>+P!;2'@`($ZZ0PQ83R9`(`MF,B\L"B9(>OHJ2&P&T$ZZ
  969. +M1M8NK`HR80`"."ZL"C)A``$H0JP*,DAX`"!A`!HV3^\`$"9`2JP`.F9J2JP`
  970. +M-F9D2'KZ#B\O`%A.ND!&4$]*@&922'@`+R\L"B)A`!B@4$\J0$J`9@8J;`HB
  971. +M8`)2C4AZ^>@O#4AZ^>!A`!E<2'@`+B\`+T``8&$`&'1/[P`4*D`@#6<(2BT`
  972. +M`F8"0A4@;P!,+T@`5"\O`%1A`!?L6$\F@"=L"B(`!!='``@G10`*)T0`#I'(
  973. +M)T@`'"=(`!A*K``Z9PHB;P!<0C%H`&`Z2JP`-F8T+R\`7$ZZ/V183W(RL(%L
  974. +M!D'Z^69@!$'Z^60O+P!<+PA(;P`A3KI%<$_O``Q![P`9+T@`7"\O`%QA`!=Z
  975. +M6$\G0``22JP*,F8(($LI2`HR8`PO+`HR+PMA```^4$],WRCPWOP`.$YU(`]9
  976. +M0+"L!T1E`#[J+PTJ;P`((`UG%B\M`!QAY"Z-3KI`,%A/($TJ:``88.8J7TYU
  977. +M(`^0?``8L*P'1&4`/KA(YP$4)F\`%"IO`!`O$R\53KH^^%!/+@!*K``Z9G1*
  978. +MAV9P(&T`!")K``2SR&8R2JP`+F8``)`O%2\L"A8O""\L"B9(>OB:2&P&T$ZZ
  979. +M111(>OB\2&P&T$ZZ10A/[P`@8&1**P`69B1*K``N9AXO%2\K``0O+0`$+RP*
  980. +M)DAZ^*9(;`;03KI$W$_O`!@7?``!`!9@,DJ':A@@*P`89PPO`"\-80#_4%!/
  981. +M8!PG30`88!8@*P`<9PPO`"\-80#_.%!/8`0G30`<3-\H@$YU(`^0?``8L*P'
  982. +M1&4`/>!(YR`4*F\`$"`-9P`#Y"\M`!AAWEA/2JP`.F<D+RT`#B\M``I(>`!_
  983. +M+RT`$DAZ^%@O+`HN3KI$4D_O`!A@``.H2JP`-F8``U8O+0`$+Q5(>OA"+RP*
  984. +M+DZZ1#!/[P`02BT`"&<``K`@;`HN""@``0`;9W!2J``,(&P*+B`H``RPJ``4
  985. +M;CXB2"!I``12J0`$$"P`!!"`<@JP`68>(&P*+@@H``8`&V<2+PA.NDE@6$\0
  986. +M+``$<@`2`&`($"P`!'(`$@!@'B!L"BY3J``,$"P`!$B`2,`O+`HN+P!.ND00
  987. +M4$\B`&`6$"P`!$B`2,`O+`HN+P!.ND/X4$\B`"!L"BX(*``!`!MG6E*H``P@
  988. +M;`HN("@`#+"H`!1N,")((&D`!%*I``1P7A"`<@JP`688(&P*+@@H``8`&V<,
  989. +M+PA.NDC06$]P7F`"<%Y@%B!L"BY3J``,+RP*+DAX`%Y.ND.24$]@#B\L"BY(
  990. +M>`!>3KI#@E!/)FT`$A`39P`!#G)<L`%G"!0L``2P`F9P(&P*+@@H``$`&V=6
  991. +M4J@`#"!L"BX@*``,L*@`%&XL(F@`!%*H``02@7`*L@!F&"!L"BX(*``&`!MG
  992. +M#"\(3KI(2%A/<%Q@`G!<8!8@;`HN4Z@`#"\L"BY(>`!<3KI#"E!/8`XO+`HN
  993. +M2'@`7$ZZ0OI03R!L"BX(*``!`!MG:%*H``P@;`HN("@`#+"H`!1N.")((&D`
  994. +M!%*I``00$Q"`<@JP`68<(&P*+@@H``8`&V<0+PA.ND?46$\0$W(`$@!@!A`3
  995. +M<@`2`&`<(&P*+E.H``P0$TB`2,`O+`HN+P!.ND**4$\B`&`4$!-(@$C`+RP*
  996. +M+B\`3KI"=%!/(@!2BV``_O`@;`HN""@``0`;9VY2J``,(&P*+B`H``RPJ``4
  997. +M;CPB:``$4J@`!!`L``02@'(*L`%F'B!L"BX(*``&`!MG$B\(3KI'1EA/$"P`
  998. +M!'(`$@!@"!`L``1R`!(`8!X@;`HN4Z@`#!`L``1(@$C`+RP*+B\`3KI!]E!/
  999. +M(@!@+!`L``1(@$C`+RP*+B\`3KI!WE!/(@!@%"\M``I(>O6`+RP*+DZZ069/
  1000. +M[P`,(&P*+@@H``$`&V=84J@`#"!L"BX@*``,L*@`%&XN(D@@:0`$4JD`!'`*
  1001. +M$("P`&88(&P*+@@H``8`&V<,+PA.ND:B6$]P"F`"<`I@%B!L"BY3J``,+RP*
  1002. +M+DAX``I.ND%D4$]@6B\L"BY(>``*3KI!5%!/8$I*K``R9R9P/]"M``IR0$ZZ
  1003. +M.3XO`"\M``0O%4AZ].9(;`:N3KI`R$_O`!1@'B\M`!(O+0`$+RT`"B\52'KT
  1004. +MT$AL!JY.ND"H3^\`&"\M`!QA`/P&6$],WR@$3G4@#UE`L*P'1&4`.=Y(YP,$
  1005. +M*F\`$'X`(`UG4B\M`!AAX"X`+JT`'&'8WH`NK0`23KHYR%A/5H#>@"PM``I*
  1006. +MAF<.4H<@!G(*3KHXK"P`8.XL+0`.2H9F`E*'2H9G#E*'(`9R"DZZ.)`L`&#N
  1007. +M(`=,WR#`3G4@#Y!\`CRPK`=$90`Y:I[\`B1(YR<T0JP*%D*L"AHD;`HZ0A)"
  1008. +MK`>4?``@!AH`(@4900>80J\"/$*L``!"+`H4'T``'Q]!`!X@;`HJ""@`!``;
  1009. +M9@`"Z!X:2(=(QV8H*6P*&@H>4JP*%B\(2&P*-F$`$)903U*`T:P*&B1L"CI"
  1010. +MK`>40BP'F'!<OH!F,!X:2(=(QV8B*6P*&@H>4JP*%B\L"BI(;`HV80`07E!/
  1011. +M4H#1K`H:)&P*.GX@8``!'$H&9TYP*KZ`9@`!$!X:2(=(QW`JOH!F`F#R2H=F
  1012. +M)BEL"AH*'E*L"A8O+`HJ2&P*-F$`$!A03U*`T:P*&B1L"CI"K`>4<"^^@&8`
  1013. +M`-!\`&```,I*!6<.<"*^@&8`_S!Z`&``_RI*+P`?9Q!P)[Z`9@#_'$(O`!]@
  1014. +M`/\4(`=R(I"!9QI3@&<V68!G&%&`9QYR3)"!9SY5@&=08```@'H!8`#^[!]\
  1015. +M``$`'V``_N)P*K`29@#^VE**?`%@`/[2(&P*.E*(M<AF`/[&<`$I0`>48`#^
  1016. +MO'`"L*P``&8&<`,I0```4J\"/&``_J8@;`HZ4HBUR&8(<``O0`(\8`13KP(\
  1017. +M2J\"/&8`_HAP`["L``!F`/Y^<`0I0```8`#^="`O`CQF``%&2@5F``%`2@9F
  1018. +M``$Z$BP'F$H!9@`!,$HO`!YG``$20>P(&$HP>`!G``#X(&P*.B(*)`&4K`HZ
  1019. +M+TH`+"]L"A8`*"]L"AX`)"\`2&\`/"\-2&\`."]"`$`O2`!$80`!#$_O`!`D
  1020. +M;P`L+T``(&<``*H@+P`D(BP*'K*`9U0O`&$``]P@+`I"D*\`."!-T<`@"R(-
  1021. +MD(%2@"Z`+PA(;P!$3KHW;B`+(@V0@4'O`$G1P$(0+J\`,"\O`#0O`B\L"D(O
  1022. +M+P!02&\`6&$`]F)/[P`@8$`@"R(-D(%2@"\`+P%(;P!$3KHW+"`+(@V0@4'O
  1023. +M`$G1P$(0+J\`,"\O`#0O`B\L"CHO+P!02&\`6&$`]B!/[P`@("\`.!E`!YA"
  1024. +M+P`>*DI3C6`D0>P(ETHP>`!G&E*+8!9![`D62C!X`&<,)DI3BRI+'WP``0`>
  1025. +M<#N^@&8`_2!P!+"L``!F`/T60JP``&``_0Y,WRSDWOP")$YU(`^0?``0L*P'
  1026. +M1&4`-B193TCG+Q0N+P`P*F\`)"95<`$@;P`L((`<*___>`!*K`>49D80!DB`
  1027. +M0>P'F4HP``!G;AP;2@9F["!L"BH(*``$`!MF7"EL"AH*'E*L"A8O"$AL"C9A
  1028. +M``U<4$]2@-&L"AHF;`HZ0JP'E&"Z4JP'E"`L!Y1R!+"!;!Q5@&8D2'@`!DAZ
  1029. +M\'XO+P`P3KHUO$_O``Q*@&<,&7P``0>8>`%@``(H2JP`)F<T2'@`!TAZ\%PO
  1030. +M+P`P3KHUDD_O``Q*@&8<(&\`*!`H``=(@$'L"!A*,```9PAP`2E```!@P'`!
  1031. +ML*P``&8``)!(>``&2'KP)B\O`#!.NC543^\`#$J`9A0@;P`H$"@`!DB`0>P(
  1032. +M&$HP``!F6$AX``5(>O`"+R\`,$ZZ-2A/[P`,2H!F%"!O`"@0*``%2(!![`@8
  1033. +M2C```&8L2'@`!$AZ[]PO+P`P3KHT_$_O``Q*@&8>(&\`*!`H``1(@$'L"!A*
  1034. +M,```9PIP`BE```!@`/\J<`*PK```9@IP`RE```!@`/\8<`&PK```9@IR!"E!
  1035. +M``!@`/\&<@.RK```9@I*AV8&=`0I0@``=`2TK```9@X@;P`L0I`O0``<8``!
  1036. +M"DJL!Y1F("\!2'KO7"\O`#!.NC1V3^\`#$J`9@IP`1E`"A1@`/ZX2BP*%&<.
  1037. +M0BP*%'`!+T``'&```-!P*+P`9@#^G'H`'!MP*;P`9V)*!F8P(&P**@@H``0`
  1038. +M&V92*6P*&@H>4JP*%B\(2&P*-F$`"X903U*`T:P*&B9L"CI"K`>4$`9(@$'L
  1039. +M"19*,```9@9P+[P`9@12!6"L$`9(@$'L!YE*,```9IY*!6::8`#^,!P;$`9(
  1040. +M@$'L!YE*,```9S9*!F;L(&P**@@H``0`&V8F*6P*&@H>4JP*%B\(2&P*-F$`
  1041. +M"Q103U*`T:P*&B9L"CI"K`>48+H0!DB`0>P)E1(P``!(@4C!+T$`'"!+4X@J
  1042. +MB$J$9@I*KP`<9P1P`6`"<`!,WRCT6$].=2`/D'P`#+"L!T1E`#,R2.<#`"XO
  1043. +M``PO+`HJ3KH]"BP`0I<O!R\L"BI.NCV,+JP**DAL"CYA``J80I<O!B\L"BI.
  1044. +MNCUT3^\`&$S?`,!.=2`/44"PK`=$90`RYB\-*F\`"$*L"A9"K`H:0JP*2@@M
  1045. +M``0`&V8``<92K`H6*6P*&@H>+PU(;`HV80`*1E!/4H#1K`H:(&P*.BE("D80
  1046. +M$'(EL`%F!%*L"D8@;`I&$!!(@$C`0^P%A0@Q``,(`&<&4JP*1F#D(&P*1A`0
  1047. +M2@!GH$B`2,``0``@<F.0@6=64X!G=%N`9PQ7@&<V78!G'&```*Q(>NU480`!
  1048. +M3EA/2H!G``"<80`!A&```)1(>NU$80`!-EA/2H!G``"$80`!;&!\2'KM-&$`
  1049. +M`2!83TJ`9VYA``%88&A(>NTH80`!#%A/2H!F#DAZ[2)A``#^6$]*@&=,80`!
  1050. +M-F!&2'KM&&$``.I83TJ`9S@@;`I&$!!(@$C`0^P%A0@Q``,(`&<&4JP*1F#D
  1051. +M(&P*1A`02@!G`/[F2'KLZF$``+183TJ`9P#^UB!L"D80$$B`2,!#[`6%"#$`
  1052. +M`P@`9P92K`I&8.0@;`I&$!!*`&<`_JY(@$C``$``(')FD(%G#G(*D(%G.%>`
  1053. +M9QQ@`/Z22'KLH&$``&!83TJ`9P#^@F$``1Y@`/YZ2'KLDF$``$A83TJ`9P#^
  1054. +M:F$``09@`/YB2'KLAF$``#!83TJ`9PAA``#P8`#^3$AZ['AA```:6$]*@&<`
  1055. +M_CQA``#88`#^-"`L"DHJ7TYUO^P'1&4`,/9(YP$$*F\`#'X`$!5G&`(`_]\@
  1056. +M;`I&T<=RW\(0L`%F!E*-4H=@Y$H59@C?K`I&<`%@`G``3-\@@$YUO^P'1&4`
  1057. +M,+0@;`I&$!!(@$C`0^P%A0@Q``,(`&<&4JP*1F#D(&P*1A`0<BJP`6964JP*
  1058. +M1B!L"D80$$B`2,!#[`6%"#$``P@`9P92K`I&8.0@;`I&$!!(@$C`0^P%A0@Q
  1059. +M``((`&8&4ZP*1F`:4JP*1B!L"D80$$B`2,!![`6%"#```@@`9N9.=2`/D'P"
  1060. +M&+"L!T1E`#`FGOP"`$CG`00@;`I&$!!(@$C`0^P%A0@Q``,(`&<&4JP*1F#D
  1061. +M(&P*1A`02@!G``"82(!(P'(#0^P%A<(Q"`!*`68.$!!R7[`!9P9R)+`!9G9+
  1062. +MZ``!$!5G,DB`2,!R`T'L!87",`@`2@%F'!`52(!(P`@P``((`&8.$!5R7[`!
  1063. +M9P9R)+`!9@12C6#*'A5"%2\L"D9(;P`,3KHP)!J'(`V0K`HZ4H`NK`H>+RP*
  1064. +M%B\`+RP*.DAX``%(;P`@80#N^%*L"DI/[P`<3-\@@-[\`@!.=2`/44"PK`=$
  1065. +M90`O2B\-*F\`"$*L"A9"K`H:0JP*2@@M``0`&V8``*!2K`H6*6P*&@H>+PU(
  1066. +M;`HV80`&JE!/4H#1K`H:*6P*.@I&(&P*1A`0<BBP`6;($"@``7)$L`%G!G)D
  1067. +ML`%FN!`H``)R1;`!9P9R9;`!9J@0*``#<D:P`6<&<F:P`6:8(&P*1A`02(!(
  1068. +MP$/L!84(,0`#"`!F!E*L"D9@Y"!L"D80$$B`2,!#[`6%"#$``P@`9P92K`I&
  1069. +M8.1A```*8`#_6BI?3G4@#Y!\`ABPK`=$90`N?I[\`@!(YP$$(&P*1A`02@!G
  1070. +M5$OH``$0%6<0<BBP`6<*<B"P`6<$4HU@[!X50A4O+`I&2&\`#$ZZ+MP:AR`-
  1071. +MD*P*.E*`+JP*'B\L"A8O`"\L"CI(>``!2&\`(&$`[;!2K`I*3^\`'$S?((#>
  1072. +M_`(`3G4@#U%`L*P'1&4`+@(O#2IO``A"K`H60JP*&D*L"DH(+0`$`!MF``%0
  1073. +M4JP*%BEL"AH*'B\-2&P*-F$`!6)03U*`T:P*&BEL"CH*1B!L"D80$'(HL`%F
  1074. +M=A`H``%R1+`!9P9R9+`!9F80*``"<D6P`6<&<F6P`696$"@``W)&L`%G!G)F
  1075. +ML`%F1B!L"D80$$B`2,!#[`6%"#$``P@`9@92K`I&8.0@;`I&$!!G'DB`2,!#
  1076. +M[`6%"#$``P@`9@@0$'(HL`%F!E*L"D9@VF$``+`@;`I&$!!R*+`!9@#_1A`H
  1077. +M``%R4[`!9PAR<[`!9@#_-!`H``)R1;`!9PAR9;`!9@#_(A`H``-R5+`!9PAR
  1078. +M=+`!9@#_$!`H``1R(;`!9P:P`68`_P`0*``%2(!(P$'L!84(,``#"`!G`/[J
  1079. +M(&P*1A`02(!(P$/L!84(,0`#"`!F!E*L"D9@Y"!L"D80$$B`2,!#[`6%"#$`
  1080. +M`P@`9P92K`I&8.1A```*8`#^JBI?3G4@#Y!\`ABPK`=$90`LAI[\`@!(YP$$
  1081. +M(&P*1A`02@!G9$OH``$0%6<@<BBP`6<:<BFP`6<42(!(P$'L!84(,``#"`!F
  1082. +M!%*-8-P>%4(5+RP*1DAO``Q.NBS4&H<@#9"L"CI2@"ZL"AXO+`H6+P`O+`HZ
  1083. +M2'@``4AO`"!A`.NH4JP*2D_O`!Q,WR"`WOP"`$YU(`]10+"L!T1E`"OZ2.<A
  1084. +M%"IO`!1"K`H60JP*&D*L"DHO#6$``*Y83TJL`#YF$B\L`$)(>N>&80`!5E!/
  1085. +M*4``/@@M``0`&V8``(12K`H6*6P*&@H>+PU(;`HV80`#.%!/4H#1K`H:(&P*
  1086. +M.BE("D8F2!`L`$9(@$C`+P`O+`I&80`$<E!/*4`*1F>V4JP*1B!L"D9*$&>J
  1087. +M(`@B`"0+DH+3K`H>)D`O"V$``FY83RX`2H=KOB`'YX`@;``^T<`O*``$+PMA
  1088. +M``'*4$]@`/]V3-\HA$YU(`^0?``,L*P'1&4`*R9(YP,$*F\`$'P`""T````;
  1089. +M9RA3K0`(;18(+0`-`!YF#B!M``12K0`$<``0$&`(+PU.NC-R6$\N`&`*+PU.
  1090. +MNC-F6$\N`"`'4H!G)'`EOH!F!'P!8+9P"KZ`9@1\`&"L2H9FJ'!<OH!G!G`A
  1091. +MOH!FG'!<OH!F%!E\`%P`1AE\`'L`1QE\`'T`2&`2&7P`(0!&&7P`/`!'&7P`
  1092. +M/@!(0J="IR\-3KHT^D_O``Q,WR#`3G4@#Y!\`!2PK`=$90`J:E%/2.<C%"\O
  1093. +M`"!.NC`L6$\J0"`-9@8J;P`D8!1(>N1F+R\`*"\-80`#VD_O``PJ0'X!)DT@
  1094. +M"V<>2'@`.B\+80`#%E!/)D`@2R`(9^A2BTH39^)2AV#>(`=2@"(`YX$O`6$`
  1095. +M!"Q83WP`+T``&$H59W9(>``Z+PUA``+>4$\F0"`+9@PO#4ZZ*?)83R9-U\`@
  1096. +M"R(-D(%*@&\T)`;G@B\`+P%A``)&(&\`("&`*``@!N>`+K`(`"]``!Q.NBF^
  1097. +M4$\@;P`8(B\`%"&`&`12ADH39P9+ZP`!8)8@!N>`(&\`&$*P"`!"L`@$("\`
  1098. +M&$S?*,103TYU(`^0?`(8L*P'1&4`*6J>_`(`2.<!%"XO`A0J;P(0)DW7QTH5
  1099. +M9U@0$V<*L"P`2&<$4HM@\B`+(@V0@2\`+P%(;P`43KHIIB`+(@V0@4'O`!C1
  1100. +MP$(0+JP*.DZZ*2PNK`H>+RP*%B\`+RP*.DAX``%(;P`H80#HDE*L"DI/[P`@
  1101. +M3-\H@-[\`@!.=2`/D'P`#+"L!T1E`"CB2.<!!"IO``Q^`"`'YX`@;``^(DC3
  1102. +MP"`I``1*@&\B(`?G@-'`+R@`!"\-+Q!.NBC63^\`#$J`9@0@!V`&4H=@RG#_
  1103. +M3-\@@$YU(`]90+"L!T1E`"B.+PTJ;P`(<&30@"J`+P!A``*B*T``!%A/*E].
  1104. +M=2`/D'P`#+"L!T1E`"AD64](YP$V*F\`(")O`!P@:0`$)D@B2RQO`!S3UB1)
  1105. +M+T@`%`@M````&V<H4ZT`"&T6""T`#0`>9@X@;0`$4JT`!'``$!!@""\-3KHP
  1106. +MF%A/+@!@"B\-3KHPC%A/+@"WRF8X(&\`'"`0(@#2@2"!+P$O+P`880`"2E!/
  1107. +M(@`@;P`<DJ@`!-?!($`B0"QO`!S3UB1)+4``!"]``!1*AVL&<`J^@&8$0A-@
  1108. +M""`'%L!@`/]V(`N0KP`43-]L@%A/3G4@#U%`L*P'1&4`)YPO#2IO``@O#4ZZ
  1109. +M)Z`N@"\-80``"%!/*E].=2`/D'P`#+"L!T1E`"=T2.<!%"XO`!0J;P`0(`=2
  1110. +M@"\`80`!A"9`+H<O#2\+3KHGQD(S>`!/[P`,(`M,WRB`3G6_[`=$90`G.DCG
  1111. +M`10>+P`7*F\`$)?+$!6P!V8")DT@35*-2A!F\"`+3-\H@$YUO^P'1&4`)PQ(
  1112. +MYP$$'B\`$RIO``P0%;`'9@0@#6`*($U2C4H09NYP`$S?((!.=2`/44"PK`=$
  1113. +M90`FVDCG`!0F;P`0*F\`#"\++PUA```42'@``4ZZ+))/[P`,3-\H`$YU(`^0
  1114. +M?``,L*P'1&4`)J9(YP`4)F\`$"IO``PO+`HF2'K?_$AL!M!.NBTT+HLO#4AL
  1115. +M!M!.NBTH2'KB.$AL!M!.NBT<3^\`'$S?*`!.=2`/D'P`#+"L!T1E`"9:64](
  1116. +MYP<4)F\`("IO`!PO#4ZZ)E8N`"Z+3KHF3BP`+J\`*$ZZ)D0J`"`'T(;0A5*`
  1117. +M+H!A``!*+HTO`"]``!Q.NB:P(&\`'-''+HLO"$ZZ)J(@;P`@T<?1QBZO`#`O
  1118. +M"$ZZ)I`@;P`D(DC3Q]/&T\5"$4_O`!`@"$S?*.!83TYU(`]10+"L!T1E`"70
  1119. +M2.<#`"XO``PO!TZZ*(I83RP`2H9F#$*G2'KA=&$`_LQ03R`&3-\`P$YU(`]1
  1120. +M0+"L!T1E`"6:2.<#!"XO`!0J;P`0+P<O#4ZZ)EI03RP`2H9F"DAZX3IA`/Z2
  1121. +M6$\@!DS?(,!.=0``2.<@,B!O`!A#[P`<1?H`'"9O`!0D"RQY````!$ZN_?8@
  1122. +M"Y""3-],!$YU%L!.=0``(&\`!")O``A93TCG,S8J2'X`(&P+>"PH`.`O20`@
  1123. +M2H9F($JL!VQF&D'L`&0B""0\```#[2QL"^1.KO_B+`!G`GX!2H9G-B(&0>P`
  1124. +M;B0(0>P'="8(+&P+Y$ZN_IXB!B0-)B\`($ZN_IXB!G0*3J[^R$J'9U@B!DZN
  1125. +M_]Q@4"!L"W@F:`"X,'S__[?(9T!#[`!T<"4L>``$3J[]V"1`2H!G+"EL!W0`
  1126. +M6"E-`%PO"B!++$I#[`!0E<HF;P`D3J[]M$S?!``B2BQX``1.KOYB3-]LS%A/
  1127. +M3G4@;P`$0^\`"&``_RH@;P`$0^\`"&$`_QYP%$[Z*B```"!O``2>_`!42.<X
  1128. +M%BI((`UG)$H59R`@34H89OQ3B)'-(@AP`B!-3KH;IG`"(@!![`"(3KH;FB`L
  1129. +M"YQO$K"L!6)N#.6`0>P$QB9P"`!@+%*`9B0B+`=(=`!![P`;)@AX42QL"^1.
  1130. +MKOXL2D!G!"9#8`I'[`",8`1'[`"0($M*&&;\4XB1RR((<`(@2TZZ&T)P`G(!
  1131. +M0>P`I$ZZ&S9,WV@<WOP`5$YU2.<`!G`(<@`L>``$3J[_.BI`2H!F!'``8"Y"
  1132. +MK0`$2'@`*'``+P!R`4'L`*B3R<%!3KH>CE!/*H!F#")-<`A.KO\N<`!@`B`-
  1133. +M3-]@`$YU(&\`!$CG``8J2"`-9Q@@36$``!X@54ZZ'M(B37`(+'@`!$ZN_RY,
  1134. +MWV``3G4@;P`$2.<`!BI(2JT`!&<4(E4L>``$3J[^(")53J[^)D*M``1,WV``
  1135. +M3G4@;P`$(%`B:``.<``0*0`/<@'AH2`!3G4@;P`$("\`""(O``Q(YP,&+`$N
  1136. +M`"I(8:I*AV8$2H9G'B)5(T<`("-&`"0S?``)`!PL>``$3J[^,G`!*T``!$S?
  1137. +M8,!.=2!O``1(YP`&*DA*K0`$9QPB52QX``1.KOXL2D!G#B)53J[^)D*M``1P
  1138. +M`6`"<`!,WV``3G4O#B`L"X0B`$A!0D'2@"`L"WBS@"E`"E1"K`I80^P`O'``
  1139. +M+'@`!$ZN_=@I0`I0</].KOZV2(!(P"E``+A*K`I09PA*@&L$<`%@`G``*4`*
  1140. +M7"Q?3G4O#B`L`+AK""QX``1.KOZP("P*4&<*(D`L>``$3J[^8BQ?3G4@+P`$
  1141. +M44](YP,`+@!.N@4H(`=.N@&02H!G*")`(&D`'')`Y8G"D2](``P@`2!I``0B
  1142. +M;P`,3I$L`"`'3KH!2"`&8`)P_TS?`,!03TYU("\`!"\'+A]@K@``(&\`!"`O
  1143. +M``@B;P`,+V\`$``$+V\`%``(+V\`&``,+V\`'``0+V\`(``4+V\`)``844](
  1144. +MYP<4+@!([P,``!1\`"IL"F!@%DJM``1F"C!\``$K2``$8`Q2AMK\`"2\K`ID
  1145. +M;>0@+`IDO(!F>'(*TZP*9"`L"F0B`.>!TH#E@2`!3KHCZ"I`2H!F#'`,*4`+
  1146. +MG'#_8```CG#VT*P*9"(`YX'2@.6!(&P*8")-8`(2V%.!9/H@+`I@9P8@0$ZZ
  1147. +M(D(I30I@>O;:K`ID(`7G@-"%Y8#;P)?+*TL`!%*%VOP`)+JL"F1M\"`&YX#0
  1148. +MAN6`(&P*8"&O`!0(!"&'"``AKP`8"`A+[P`@(9T(#"&="!`AG0@42^\`+"&=
  1149. +M"!@AG0@<(9T(("`&3-\HX%!/3G4@+P`$(@!K%K*L"F1L$"`!YX#0@>6`(&P*
  1150. +M8$*P"`1.=2`O``1(YP$$+@!K'KZL"F1L&"`'YX#0A^6`*FP*8-O`2JT`!&<$
  1151. +M(`U@"'`)*4`+G'``3-\@@$YU("P*9$YU```@+P`$64\N@$'L`-`@"%A/3G4@
  1152. +M;P`$64\NB$'L`-`@"%A/3G4@+`#03G4``"!O``193TCG(P(B"'3^+&P+Y$ZN
  1153. +M_ZPO0``09SHN+`N<3KK_JBP`8!Y(;P`02'@(!2\&3KH-!$_O``Q*@&8(*4<+
  1154. +MG'``8!)3AFS>(B\`$"QL"^1.KO^F</],WT#$6$].=2!O``1(YR$&*DA.N@*^
  1155. +M(@TL;`OD3J[_N$J`9P1P`&!03J[_?"X`<F_2@;"!9B`B#70`3J[_1DJ`9PXB
  1156. +M#4ZN_[A*@&<$(`)@*$ZN_WPN`'!ET("^@&8.($UA`/]*2H!F!'``8`P@!TZZ
  1157. +M&`PI0`N<</],WV"$3G4``"`O``193RZ`("P+=&<.($!.NOQB2H!G!'(!8`)R
  1158. +M`"`!6$].=2`O``1R`"!L"W1.^OP(3KK[/"E`"W1F"DAL`/!.NOIV6$\@;`MT
  1159. +M3KK[S(&L"FA.=2!L"W1.^OMH".P`#`IJ3G4@+P`$"```#%;`1`!(@$C`3G4(
  1160. +M[``-"FI.=2`O``0(```-5L!$`$B`2,!.=4ZZ&,)P`"!L"]00*``/<@'AH8.L
  1161. +M"FA.=4[Z&10@+P`$64](YP$6+T``$'X`8"X@+0`43KH8:B9`2H!G%$JK`!1F
  1162. +M#GX!<`$G0``4)VT`&``8(DUP'"QX``1.KO\N(&P+U"QX``1.KOZ,*D!*@&;`
  1163. +M(`=,WVB`6$].=2`O``1(YP\$+@!P`>^@+`!P";Z`9@9P`$ZZ"Q`@+`MLP(9G
  1164. +M!HVL"W!@>BH&1H7+K`MP2H=K9G`@OH!L8"`'YX!![`IL*G`(`#!\``&[R&8L
  1165. +M(`=5@&<44X!G$'(-D(%G/%F`9SA1@&<T8`I(;`$(3KKY-%A/<`!.N@JR8"`@
  1166. +M#6<<(`?G@"@&0>P*;(BP"`2)K`ML(`=.E4:$R:P+;"`L"W#`AF:*3-\@\$YU
  1167. +M("\`!"\.(BP*:(*`<``L>``$3J[^SBQ?3G4@+P`$+PXB`"`L"FB`@2QX``1.
  1168. +MKO["+%].=2`O``1(YP,`+@!\`&$`_A!*@&<(?`%P#F$`_PP@!V$`_F)*@&<(
  1169. +M?`%P`F$`_OH@!V$`_FI*@&<(?`%P`V$`_N@@!V$`_H9*@&<(?`%P%&$`_M8@
  1170. +M!DS?`,!.=2`O``0O!RE`!TQP""X?8`#^O'``80#_8&"08/9(YP$4?@!+[`IL
  1171. +M-GP``2J+0JT`!%*'4(UP(+Z`;?!"K`MP0JP+;$*L"FAA`/W480#]ZF$`_:),
  1172. +MWRB`8`#]^&$`_;A@`/X(``!(;`$<3KKX#EA/3G4@+P`$+PU.NA\D*D!*@&8"
  1173. +M8>(@#2I?3G4@;P`$("\`""\+3KH=&"9`2H!F`F'&(`LF7TYU(&\`!"\-*D@@
  1174. +M#68$2^P!)B!-2AAF_%.(D<T@"%*`3KH>V"!`2H!F!'``8`@B2!+=9OP@""I?
  1175. +M3G593TCG`S1^`'P`(&P+>"9H`-!@+$HK``AF)#`\!0#`:P`.9AI2AR!K``H@
  1176. +M"$H89OQ3B)'`(`C<@-RK`!14AB932I-FT"`'4H#E@-"&80#_2BE`"Y#EAR!`
  1177. +M(D#3QT7I``0O0``49@I![`$8*4@+D&!6(&P+>"IH`-!@0DHM``AF.C`\!0#`
  1178. +M;0`.9C`F;0`*+BT`%"!O`!0@RB](`!1@`A3;2A-F^A3\`#TF;0`08`(4VR`'
  1179. +M4X=*@&;V0AHJ54J59KH@;P`40I!,WRS`6$].=2!O``0@+P`(+PTJ2"J`0JT`
  1180. +M!.6`80#^M"M```@J7TYU(&\`!")O``@@+P`,2.<B-"9)*DA*@&<*($MA`/["
  1181. +M)$!@`B1+(`IG/B(5)"T`!+2!;2(L`=R&=!#2@KR!;0(B!BJ!(`'E@"!M``A.
  1182. +MNAN6*T``"&<21^T`!"(34IOE@2!;(8H8`'`!3-\L1$YU(&\`!")O``@@+P`,
  1183. +M89)*@&8$80#^&DYU(&\`!")O``A(YP`4)DDJ2"`M``30JP`$L)5O$M"`*H#E
  1184. +M@"!M``AA`/X:*T``""(M``3E@2!M``C1P2`K``0B`.6!(FL`"&`"$-E3@63Z
  1185. +MT:T`!"!K``A,WR@`3OH;AB!O``0B;P`(+V\`#``$("\`$"(O`!193TCG`C0L
  1186. +M`2I))$@O2``02H!G1%.`9PI3@&<``+9@``#T4X9G(B`O`!@B#9"!(&\`$$(P
  1187. +M"``@02)O`!!@`A+84X!D^F```,Y![`$H(F\`$!+89OQ@``"^)F\`&&!N<%RP
  1188. +M%69F2BT``6=@5(UP`;R`9@84_`!A8%0@!E6`9D80+?__2(!(P'(CD(%G+E6`
  1189. +M9RI5@&<F4X!G(E.`9QY3@&<:<A60@6<4<AR0@6<.58!G"G(?D(%G!%6`9@04
  1190. +M_``G%.W__V`(%.W__V`"%-V[RV6.8$`F;P`88#9P*K`59BY*+0`!9RA4C1`M
  1191. +M__](@$C`<F60@6<,<@F0@68,%/P`"F`.%/P`&V`(%.W__V`"%-V[RV7&0A),
  1192. +MWRQ`6$].=9[\`2Q(YS\V*F\!6"!L!V@,:``E`!1D"DAX`!1.NLTN6$]"K`:H
  1193. +M<`$I0`:D*4`&RG`"*4`&QBE`!NPI?````(0&Z)/)+'@`!$ZN_MHI0`MX3KKU
  1194. +M`"E`"WQF"DAL`2I.NO0Z6$\@;`M\3KKUD"E`"X`L;`M\(%8L:``4*4X+C$'O
  1195. +M`3!.KO^^*6\!,`N$3KKU^$ZZ^ZP@;`MX("@`K&<0Y8`B0"(I`#3E@2E!"XA@
  1196. +M!BEH`(0+B$H59@``Z$'L`4(B""0\```#[BQL"^1.KO_B+`!![`%((@A.KO_B
  1197. +M+@!![`%.(@A.KO_B*@!*AF<(2H=G!$J%9B)*AF<&(@9.KO_<2H=G!B('3J[_
  1198. +MW$J%9P8B!4ZN_]QA`/MR<`$O`"\%+P`O!R(&P4%.N@VV(&P';"`H`!Q![P%8
  1199. +M80#\GD_O`!!\`'X`8%`B;`=L(&D`)"`P>`!G/B(`0^\`,"0)=D#EBRQL"^1.
  1200. +MKOYN2H!G)B)L!VP@:0`DT<<@*``$9P@B`B0`3J[\CG`!0>\!2$/O`#!A`/S8
  1201. +M4H90AR!L!VR\J``<;:9@``+&+&P+Y$ZN_\HH`$ZN_\0J`'X`(&P+>"PH`.!F
  1202. +M*'X!0>P!5"(()#P```/M3J[_XBP`9A)![`%6(@A.KO_B+`!F!&$`^J0O!R\&
  1203. +M<``O`"\%(@3!04ZZ#.AP`4'O`5AA`/O6(#P```4:80#ZCB!`,7P$```2+T``
  1204. +M/'!`Y8AA`/IZ3^\`$'Y`Y8\O0`$X8`)2C1`52(!(P$'L!84(,``#"`!F[!`5
  1205. +M9P`"$'(BL`%F,%*-)DU@$'`JL!5F"$HM``%G`E*-4HT0%6<&<B*P`6;F)$T0
  1206. +M%7(BL`%F`E*-?`)@4G`GL!5F(%*-)DU@`E*-$!5G!G(GL`%F]"1-<">P%68"
  1207. +M4HU\`6`L)DU@$'!<L!5F"$HM``%G`E*-4HT0%6<02(!(P$'L!84(,``#"`!G
  1208. +MW"1-?``@2RH*FHL@!5*`+T@`*&$`^;@F0$JO`4QF("`%($LB;P`H3KH6@$(S
  1209. +M6`!P`$'O`4@B2V$`^V)@`/\HVH5R$-J!NH=O%"!O`3A.NA<Z(`5A`/EX+@4O
  1210. +M0`$X+PH@!G(!($LB;P`L80#[L%A/(@LD+P$X)@<L;`OD3J[\N"H`;!!"$B\O
  1211. +M`"A(;`%<3KKQ0E!/2H5F(B\*(`9R`"!+(F\`+&$`^W9P`$'O`4PB2V$`^NI8
  1212. +M3V``_JYZ`2!O`"Q"J``(0B@`$4(H`!`O"B`&<@(@2R)O`"QA`/M"<!!![P%`
  1213. +M80#Z*%A/(@LD+P`L+&P+Y$ZN_,I@*'H`(F\`+-+\`1AP`4'O`3QA`/HF2H!F
  1214. +M!'AG8!(B+P`L+&P+Y$ZN_,0H`$J$9](B+P`L+&P+Y$ZN_+YP=-"`N(!G"DAL
  1215. +M`7!.NO"26$]*A6<B+PH@!G(`($LB;P`L80#ZQG``0>\!3")+80#Z.EA/8`#]
  1216. +M_B`O`4`@;P%$3KH13$'O`4A#[P$\80#Z,"!+3KH6!&``_=P@;P$X3KH5^"!O
  1217. +M`"Q.NA7P80#XF$'L`8I.N@P<*4``T&8(0>P!D"E(`-!![`&63KH,!BE``.1F
  1218. +M!BEL`-``Y$'L`:!.N@OR*4``Z&8(0>P!IBE(`.A![`&J3KH+W"E``.QF"$'L
  1219. +M`;`I2`#L0>P!N$ZZ"\8I0`N49@A![`'"*4@+E"`O`4P@;P%0(FP+D$ZZ*+1P
  1220. +M`$ZZ&>),WVS\WOP!+$YU```@+P`$2.<#`"X`2JP+F&<$(`=@8'P`(`<"@```
  1221. +M`21G`GP("`<`!V<$`$8`!0@'``1G!`C&``((!P`!9P0(Q@``"`<``V<$",8`
  1222. +M`0@'``!G!`C&``8@!W))P(%R0+"!9@0`1@!""`<`"6<$",8`!2`&"D``#TS?
  1223. +M`,!.=2`O``1(YP8`+`!*K`N89P@@!@)`#_]@7GH`"D8`#P@&``-G!'I)Y8T@
  1224. +M!G(%P(%;@&8$",4`!P@&``)G!`C%``0(!@``9P0(Q0`!(`9R0L"!9P0(Q0`&
  1225. +M"`8``6<$",4``P@&``9G!`C%```(!@`%9P0(Q0`)(`5,WP!@3G4``$CG`P!.
  1226. +MNO+B+@!\`&`*+P9.NO%*6$]2AKR';?),WP#`3G4@+P`$+P<N`&'43KKPODZZ
  1227. +M]EP@;`M\3KKO?"\'3KK''EA/+A].=2`O``0O!RX?8-0``"`O``0B+P`((&\`
  1228. +M#%%/2.<#)"P!+@`J2$ZZ]=@@!TZZ\D!*@&<:(D`@:0`@+T@`%"`&(&D`!")-
  1229. +M)&\`%$Z28`)P_TS?),!03TYU``">_``,2.<O-BIO`#1^`\ZO`#A\`2!L"W@F
  1230. +M:`"X*CP```/L3KKU@DJ'9PIP`KZ`9P1R`&`"<@$O00`H<`&^@&<(58=G!'``
  1231. +M8`)P`2]``"P@34/L`<A.N@[22H!F!GC_8``!5G#_(&P+>"%``+@B#73^+&P+
  1232. +MY$ZN_ZPN`"!L"W@A2P"X2H!F>"QL"^1.KO]\3KH*P"P`("P'2'(N1@&P@6<$
  1233. +M2H!F"GX!*CP```/N8!8@!E6`9@P(+P`(`#IG!'`!8`)P`"X`2H=G+'P`""\`
  1234. +M"``Z9QP(+P`/`#IG!G@"8```V"`O`#Q.NOV&*`!@``#*>/]@``#$*48+G'#_
  1235. +M8``!1$*G<@(L;`OD)`].KO\<W_P````$)$!*@&<,(@<D"DZN_YI*@&86(`IG
  1236. +M"'(")`I.KO\63KH+&'#_8``!""@J`'1R`B0*3J[_%B('3J[_IG!0Z8C`KP`X
  1237. +M#(````4`9@QP$2E`"YQP_V```-I*KP`H9P8(!``#9@Q*KP`L9Q((!``"9PQP
  1238. +M#2E`"YQP_V```+8(+P`)`#IG(B(-)#P```/N3J[_XDJ`9P@B`$ZN_]Q@"DZZ
  1239. +M"IQP_V```(P(+P`(`#IG!"`%8`8@/````^TD`"(-+&P+Y$ZN_^(J`&8(3KH*
  1240. +M<'#_8&`(+P`)`#IF!$J&9@0L!&`"?/]^`$JO`"AG`GX!2J\`+&<$",<``0@O
  1241. +M``,`.V<$",<``R\'(`4B!DZZ!9Y83RX`;!QP_R!L"W@A0`"X(@4L;`OD3J[_
  1242. +MW"!L"W@A2P"X(`=,WVSTWOP`#$YU(&\`!"\O``PO+P`,+PAA`/VF3^\`#$YU
  1243. +M``">_``,2-<!`W#_WOP`#$YU44](UP,`4$].=4CG,`(B$$HH``UG!'``8!PD
  1244. +M"28`+&P+Y$ZN_]8B`%*`9@A.N@FH</]@`B`!3-]`#$YU44](YS\V+@`J22)(
  1245. +M+!$O1@`H+T@`+$HI``UG!G``8```C$HI``QG9B9-U\=Z`&!8)$U@`E**M<MD
  1246. +M!G`*L!)F]+?*9@0H"F`&0>H``2@(F(TB+P`H)`TF!"QL"^1.KO_0+`!2@&8(
  1247. +M3KH),G#_8#[:AK:&9C9+Z@`!GH9P`$ZZ\=Q.NO(,2H!F(DJ'9J1@'"(&)`TF
  1248. +M!RQL"^1.KO_0*@!2@&8(3KH(]G#_8`(@!4S?;/Q03TYU64](YSX"+!`O00`8
  1249. +M2B@`#6<$<`!@4E.!)@$B!B0`+&P+Y$ZN_[XJ`$ZN_WPH`%*%9P1*A&<.(`1.
  1250. +MN@>R*4`+G'#_8"0B!G0`)@).KO^^+`!2@&<$2H1G#B`$3KH'D"E`"YQP_V`"
  1251. +M(`9,WT!\6$].=9[\`0!(YS\&+@`J2"P5*BT`""`M``1G"B(`+&P+Y$ZN_Z88
  1252. +M+0`-2(1(Q"!-3KH/PDJ$9P1P`&!$(@9![P`@)`AV0.6++&P+Y$ZN_F@H`$J'
  1253. +M9@HB!DZN_]Q*@&<:2H1G$G#_NH!G#"(")`5.KO]&2H!G!'``8`9.N@?^</],
  1254. +MWV#\WOP!`$YU("\`!$CG(`(B`'0`+&P+Y$ZN_S1.KO]\="Y&`K""5\%$`4B!
  1255. +M2,$@`4S?0`1.=2`O``0@;P`((F\`#)[\`!!(YS<6+@`F22I(?`!AN$J`9GPB
  1256. +M!W0!+&P+Y$ZN_E9*@&=L(@=![`'0)`AV!$ZN_]!9@&92(@<D/```)Q!.KO\T
  1257. +M2H!G0B('0>\`("0(=A!.KO_6<@FP@6\N<)NP+P`@9B9![P`E(@@D"TZN_-`J
  1258. +M`$'O`";1P"(()`U.KOS04H!G!E*%9P)\`2('=`!.KOY6(`9,WVCLWOP`$$YU
  1259. +M("\`!"(O``B>_`(02.<_!BX`</\O0`(H+T$`)"('=`!V`2QL"^1.KO^^+T``
  1260. +M("('3J[_OBP`3J[_?"H`+T`"+&8``,(H+P`D(@<D!';_3J[^.+""9@``KKR"
  1261. +M;```GBH$FH8H!2`$<@%(02QX``1.KO\Z*D!*@&9J<@)(04ZN_RCBB"H`#(4`
  1262. +M``(`;1`@!7(!2$%.KO\Z*D!*@&9&>D#GC4OO`"@P/`'_<@!![P`H$,%1R/_\
  1263. +M8"RXA6\$(`5@`B`$)@!.NN^P(@<D#2QL"^1.KO_0L(-G"DZN_WPO0`(L8`:8
  1264. +M@TJ$;M!![P`HL<UG#")-(`4L>``$3J[_+BHO`BQF!$*O`B@L+P`@O*\`)&P.
  1265. +M(@<D!G;_+&P+Y$ZN_[XL+P(H9PH@!4ZZ!/@I0`N<(`9,WV#\WOP"$$YUGOP!
  1266. +M"$CG-Q8N`"9)*D@L%4HM``UF``$8(`<$@```!`!G(`2````$`&=*4X!G6%.`
  1267. +M9UQ3@&=>4X!G9E.`9VQ@``#N2BT`#&<F(`9![P$D0^\!(&$`_=9*@&<4("\!
  1268. +M)#=```(@+P$@-H!P`&```,IP&6```+XB!BQL"^1.KO\H)H!P`&```+(FAG``
  1269. +M8```JG``8```I"`&(A-A`/XV8```F"M3``AP`&```(XJ$TJM``1F#B(5+&P+
  1270. +MY$ZN_HPK0``$("T`!&=B)``B!2QL"^1.KOY<2H!F4B(&0>\`("0(=D#EBTZN
  1271. +M_FA*@&<^(@5.KO^F(BT`!$ZN_Z8B!DZN_]PB`G0`3J[_1AM\``$`#2J"*T(`
  1272. +M!$'O`"`B""QL"^1.KO^X2H!G!"`"8`Y.N@2V8`9P%BE`"YQP_TS?:.S>_`$(
  1273. +M3G4@+P`$(B\`""]O``P`!$CG#P8J+P`<+`$N`'`.3KH-:"I`2H!F"G`,*4`+
  1274. +MG'#_8$Y#U2+'0IDBQD(M``TB!RQL"^1.KO\H&T``#$AZ_G1(>OO:2'K[9DAZ
  1275. +M^JY(>OIX2'KZ:B`%($U#^OI23KKHXD_O`!@H`&P&($U.N@N@(`1,WV#P3G4@
  1276. +M+P`$(B\`""]O``P`!"]O`!``""]O`!0`#"]O`!@`$$CG#0`H+P`4*B\`$"X`
  1277. +M<`!*@68$<$#EB`!```$O`"`'<O]A`/]&6$]*@&9`<`!*A&8$<$#EB`!```(O
  1278. +M`"`%<O]A`/\H6$]3@&8B<`!*KP`<9@1P0.6(`$```B\`("\`''+_80#_!EA/
  1279. +M58!G$$'L`=8O2``03-\`L$[ZY41,WP"P3G4@;P`$(F\`"$CG(18F22I(3KKL
  1280. +MQ"(-)`LL;`OD3J[_LDJ`9P1P`&!L3J[_?"X`<C1&`;"!9E(B`DZN_[A*@&<.
  1281. +M(@U.KO^R2H!G!'``8$9.KO]\+@!R;]*!L(%F+"("=`!.KO]&2H!G&B(+3J[_
  1282. +MN$J`9Q`B#20+3J[_LDJ`9P1P`&`23J[_?"X`(`=.N@'T*4`+G'#_3-]HA$YU
  1283. +M```@+P`$(&\`""(O``Q93TCG`S0L`2X`*DA.NNP@(`=.NNB()D!*@&=$""L`
  1284. +M`0`#9S8(*P`#``-G%B!K`!@O2``4<`!R`B!K``0B;P`43I$@:P`4+T@`%"`&
  1285. +M(&L`!")-)&\`%$Z28`AP#2E`"YQP_TS?+,!83TYU("\`!"!O``@B+P`,2.<#
  1286. +M!$S?(,!@@"!O``2>_`!`2.<[%BI(3KKKGB`-9U)*%6=.(@U![P`@)`AV0'@`
  1287. +M+&P+Y$ZN_'8N`&TV3J[_?"P`4H!.N@K\)D!*@&<DOH9G%"8&4H,B#20+3J[\
  1288. +M=DJ`;Q`@`F`.($(B2Q+89OP@"V`"<`!,WVC<WOP`0$YU("\`!"(O``@O;P`,
  1289. +M``113TCG!P`J+P`8+`$N`$ZZZQP@!TZZYX1*@&<:(D`@:0`8+T@`$"`&(@4@
  1290. +M:0`$(F\`$$Z18`)P_TS?`.!03TYU("\`!"(O``@O;P`,``1(YP<`*B\`$"]%
  1291. +M`!!,WP#@8*```"`O``0@;P`((B\`#%E/2.<#-"P!+@`J2$ZZZK`@!TZZYQ@F
  1292. +M0$J`9R8(*P````-G&"!K`!`O2``4(`8@:P`$(DTD;P`43I)@"'`-*4`+G'#_
  1293. +M3-\LP%A/3G4@+P`$(&\`""(O``Q(YP,$3-\@P&">```@+P`$*4`'2$J`9P``
  1294. +MAG)GD(%G``""58!G``"`<@F0@6=\4X!G>%.`9W13@&=P4X!G;%.`9VA3@&=H
  1295. +M4X!G:')1D(%G9E.`9V93@&=F4X!G9E.`9V93@&=F58!G9E.`9V93@&=F4X!G
  1296. +M9E6`9V93@&=F4X!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V9@:'``
  1297. +M8&9P#&!B<`M@7G`68%IP!V!6<`A@4G`08$YP$6!*<`)@1G`"8$)P%F`^<`=@
  1298. +M.G`68#9P)&`R<!9@+G`68"IP'F`F<!)@(G`E8!YP)F`:<!-@%G`68!)P'&`.
  1299. +M<`U@"G`-8`9P#6`"</].=2\.+&P+Y$ZN_WQA`/[Z*4`+G"Q?3G4@;P`$2.<`
  1300. +M!BI((DTL>``$3J[_!"!-3-]@`$[Z!T@@+P`$2.<!!"X`*FP+J&`.("T`#+"'
  1301. +M9@0@#6`(*E5*E6;N<`!,WR"`3G5(YR`"0>P+J$ZZ&7(@+`MX(BP+A"0`LX("
  1302. +M@@!___\I0@ND4H(I0@N@+P$O`$AL!6A(;`NT3KK@'D_O`!`L>``$3J[]9BE`
  1303. +M"]AG$'``0>P+M$ZZ&88I0`O49@I(;`5V3KKA!%A/3-]`!$YU+PX@+`O89PH@
  1304. +M0"QX``1.KOU@2JP+U&<X+'@`!$ZN_WQ@#")(<!PL>``$3J[_+B!L"]0L>``$
  1305. +M3J[^C"!`2H!FXB!L"]1.NAC@+'@`!$ZN_W8L7TYU```@;P`$("\`""(O``PB
  1306. +M;P`0+V\`%``$+V\`&``(64](YP\V*"\`+"HO`"@L`2X`*DDO2``@+'@`!$ZN
  1307. +M_68F0$J`9S`@2R`$3J[]<B1`2H!G(B`-9P@E30`H)44`)"!O`"`@!R)*(@9.
  1308. +MKOY$2@!F!"`*8!8@"F<&($I.KOUL(`MG!B!+3KH83'``3-]L\%A/3G4@;P`$
  1309. +M2.<`!BI((`UG&")-+'@`!$ZN_CX@;0`.3KH8(B!-3J[];$S?8`!.=5E/0?D`
  1310. +M````+HAG""!Y_____$Z06$].=5E/0?D`````+HAG""!Y_____$Z06$].=4CG
  1311. +M`Q<J;`O<8!0F57`4T*T`!")-+'@`!$ZN_RXJ2R`-9NA"K`O<8$PJ;`OH<)S0
  1312. +MK`=$)D`@+0`$*4`+Z"EM``@'1"XM`!A*@&8>(&P':`QH`"0`%&42($\L"$'M
  1313. +M``PL>``$3J[])"Y&(DL@!RQX``1.KO\N2JP+Z&:N3-_HP$YU(&\`!")O``@@
  1314. +M4")1$!BP&68$2@!F]I`A2(!(P$YU(&\`!"`O``A#^O_@<@1.^@>N(&\`!")O
  1315. +M``@@+P`,2H!O"A(0$-$2P5.`9O9.=2!O``0B;P`(<`!R`!`8$AD,``!A;0H,
  1316. +M``!Z;@0$```@#`$`86T*#`$`>FX$!`$`()"!9@1*`6;43G4``"`O``@@;P`$
  1317. +M3E7_]")/<@I.N@(T!D$`,!+!2H!F\"`)$.&_R6;Z0A"0CTY=3G4``"`O``@@
  1318. +M;P`$3E7_]")/(@`"00`'!D$`,!+!YHAF\"`)$.&_R6;Z0A"0CTY=3G4``#`Q
  1319. +M,C,T-38W.#EA8F-D968@+P`((&\`!%%/(D\R``)!``\2^Q#<Z(AF\B`)$.&_
  1320. +MR6;Z0A"0B5!/3G4``"!O``0B;P`(2.<P("1(<@`@`28!#!``*V<(#!``+68$
  1321. +M=@%22!`8!```,&T:#```"6X4)`'E@=*"TH%*`V8$TH!@XI*`8-XB@2`(D(I3
  1322. +M@$S?!`Q.=2!O``0O#2I(""T``P`;9C`@+`;T3KH$SBM```0K0``09@IP#"E`
  1323. +M"YQP_V`6*VP&]``4<//!K0`80JT`#$*M``AP`"I?3G4``"!O``1(YR`4*D@F
  1324. +M36`@<``0$T'L!84(,``!"`!G"G(`$@!T()*"8`1R`!(`%L%*$V;<(`U,WR@$
  1325. +M3G4``)[\`%!(YS$V0_H`A'``+'@`!$ZN_=@J0$J`9@9P%$ZZ[I9^`"!L!W0>
  1326. +M*/__(`=#[P`<8`(2V%.`9/I"-W@<0>\`'"E(!PQ#[`<41^P'*"Q-D<B5RG``
  1327. +M(@!T?=2"=BA.KOZD<!1.NNY03-]LC-[\`%!.=2HJ(%-T86-K($]V97)F;&]W
  1328. +M("HJ``!%6$E4``!I;G1U:71I;VXN;&EB<F%R>0!*@&H``!Y$@$J!:@``#$2!
  1329. +M80``($2!3G5A```81(!$@4YU2H%J```,1(%A```&1(!.=2\"2$$T`68``")(
  1330. +M0$A!2$(T`&<```:$P3`"2$`T`(3!,`)(0C(")!].=2\#=A`,00"`9```!N&9
  1331. +M44,,00@`9```!NF964,,02``9```!N6954-*06L```;CF5-#-`#FJ$A"0D+F
  1332. +MJDA#@,$V`#`"-`-(0<3!D()D```&4T/0@7(`,@-(0^>X2$#!028?)!].=0``
  1333. +M2.=P`"0`9R!*@68$0H!@&"8`QL%(0L3!2$)"0M:"2$'`P4A`0D#0@TS?``Y.
  1334. +M=0``("P'<`1``?0N0$[Z_F```"!O``0@"$H89OQ32)'`(`A.=0``(&\`!")O
  1335. +M``@@+P`,2H!G$%.`$ABR&68,2@%G!%.`:O)P`$YU;@1P_TYU<`%.=0``(&\`
  1336. +M!")O``@2&+(99@A*`6;V<`!.=6X$</].=7`!3G4B;P`((&\`!"`O``PB"&`$
  1337. +M$-EG"%.`9/A@!D(84X!D^B`!3G4B;P`((&\`!"`($-EF_$YU(F\`""!O``0@
  1338. +M+P`,(@A*@&\6L<EE#-/`T<`1(5.`9OI@!A#94X!F^B`!3G4@;P`$("\`"$CG
  1339. +M`Q0N`"I(9A(@#68$<`!@:"!-3KH`;G``8%X@#68*(`=,WRC`3OH!R"9-58LP
  1340. +M/'__P%-(P.6`+``($P`/9PP,:X``__YF!"PK__(@!TZZ`:`F0$J`9@1P`&`>
  1341. +MO(=C!"`'8`(@!B!-(DM@`A+84X!D^B!-3KH`#B`+3-\HP$YU(&\`!"`(9@).
  1342. +M=5F`2.<\,B(L"]QF#BE\````%@N<3-],/$YU(D&P@6\2)`'4J0`$!H(````4
  1343. +ML()L`F`((BD``&?48.`F`0:#````$+"#;<9G$B1#0H(T*@`":[KEBM:"6(-@
  1344. +MZ"1`-"H``&JJ"*H`!P``0H,V*@`"`D-__^6+2FH``FM`1_(X!$IK``!K-D*$
  1345. +M."L``@)$?__EC-B#6(3DC%B#2FL``FH$`$2``#5$``)K$BH$Y8PT,D@$`D*`
  1346. +M`(I"-85(!$*$."H``&=,Y8Q$A$?R2/Q*:P``:SY"A#@K``+EC$*%.BH``@)%
  1347. +M?__EC=B%6(18@^2,2FH``FH$`$2``#=$``)K$BH$Y8PT,T@$`D*``(I"-X5(
  1348. +M!->I``@F*0`$MJP%@&X,MJD`"&8Z2JD``&<T("P+W"!`LH!F#"EI```+W&`0
  1349. +M(&@``+*H``!F]B%I`````"`I``0&@````!0L>``$3J[_+DS?3#Q.=2`O``1*
  1350. +M@&8,*7P````6"YQP`$YU2.<^,E:``H#____\#(```?_\;@``N+"L!8!N``"P
  1351. +M)BP+W&<``*@B0["I``AN,B(L"^"RJ0`,9BA%Z0`02E)K$$*$."H``@)$?__E
  1352. +MC+"$;QI"A#@J``)K".6,1?)(!&#<)BD``&=F(D-@O@CJ``<``$?R"`1"A;"$
  1353. +M9SPL!)R`689F!"`$8##DCDIJ``)J!`!&@``J`.2--T8``C=%```U10`">@1*
  1354. +M1FL.-#)(!`)"@`",0C6&2`0F*0`(EH"6A2-#``@@"EB`3-],?$YU*@"PK`6`
  1355. +M:@0@+`6`*``&@````!0B+`O@+'@`!$ZN_SI*@&8**7P````,"YQ@S")`1>D`
  1356. +M$"-L"]P``"E)"]PC1``$(VP+X``,)@26A6<H68-G)"-#``A'\E@$-7R`````
  1357. +MY(TU10`"-T4``.2+`$.``#=#``)@%$*I``@U?(````#DC`!$@``U1``"(`I8
  1358. +M@$S?3'Q.=2!O``0@+P`((B\`#")O`!!93TCG#S8L`2X`*D@O20`@<`&^@&,`
  1359. +M`+(F3=?&(`=5@&8D+PLO#2!-(DLL;P`H3I903TJ`;P``DB`&($TB2TZZ^"!@
  1360. +M``"$(`?BB"(&3KK[-B)-T\`@!B!-3KKX!B1->@!X`6`J+PTO"R!+(DTL;P`H
  1361. +M3I903TJ`:A)2A=7&M<MG"B`&($LB2DZZ]]C7QE*$N(=ETK7-9PH@!B!-(DI.
  1362. +MNO?")F\`("`%(@8@32)+80#_4B!*T<8@!Y"%4X`B!B)+3-]L\%B/8`#_.DS?
  1363. +M;/!83TYU(&\`!)[\`!A(YS<6*DA^`"9X``0@#68&<`%@``"$+&P+Y$ZN_\0L
  1364. +M`&840?H`?B(()#P```/N3J[_XBP`?@$,:P`D`!1E+"]\@```(0`@3J[_RD?O
  1365. +M`"0FP";\@```(B;&0ILB#4'O`"`D"$ZN_:(J`&`B(@TF!G0`3J[_(DJ`9A).
  1366. +MKO]\*4`'2'+_*4$+G"H`8`(J`DJ'9P8B!DZN_]P@!4S?:.S>_``83G5.24PZ
  1367. +M``!.^O'*3OKQPB`O``1(YP$$+@`J;`<\8`@@;0`$3I`J52`-9O1+[`:,<`;`
  1368. +MK0`858!F&"`M``20K0`09PXB+0`<(&T`$,%!3KKQ`"!-*E`@#6;6(`=,WR"`
  1369. +M3OKF_"`O``0@;P`(0]!2F2!14ID0@$YU44\@;P`,0I<O2``$2&\`%"\O`!1!
  1370. +M^O_>0^\`"$ZZ#/H@;P`,0A!03R`74$].=0``("\`!"!O``@O#2(`*DA2E4/M
  1371. +M``@@$5*1&X$(#"`9#(````(`;11![0`,(FT`!'(!P4%.N@1@0JT`""I?3G6>
  1372. +M_`(,+PTJ;P(40J\`#$*O``0O30`(2&\"'"\O`AQ!^O^J0^\`#$ZZ#()03R`O
  1373. +M``QG$$'O`!`B;P`(<@'!04ZZ!!8(+0`%`!MF"`@M``0`&V<$</]@!"`O``0J
  1374. +M7][\`@Q.=2`O``0@;P`(64](YP,$+@`J2'P`'T``#W)!TH'"K0`89@P([0`%
  1375. +M`!MP_V```4!P,\"M`!A5@&=0<$Q&`,"M`!AR0-*!L(%F#`CM``$`&T*M``Q@
  1376. +M-`@M``4`&V<&</]@``$,<&Y&`,"M`!AR;D8!L(%F#`CM``$`&T*M``Q@"G``
  1377. +M*T``#&```.8@+0`,L*T`%&PR(&T`!%*M``0@!Q"`4JT`#`@M``8`&V<.<@J^
  1378. +M@68(($U.N@1P+`!*AF<``*H@!F```*H(+0`"`!MG+D*M``P@+0`<0>\`#W(!
  1379. +M3KKO+"P`4H!F"`CM``4`&V!R(`93@&=L".T`!``;8&1*K0`49B`@34ZZ]=Q*
  1380. +M@&<*".T`!0`;</]@6'``*T``#"MM`!``!"`M``RPK0`4;0@@34ZZ`_8L``CM
  1381. +M``$`&R!M``12K0`$(`<0@%*M``P(+0`&`!MG#G(*OH%F""!-3KH#RBP`2H9G
  1382. +M!"`&8`9R`!('(`%,WR#`6$].=2!O``193TCG`00J2$'L!HR[R&9$0>P&KDZZ
  1383. +M`Y8(+0`-`!IG-"`M`!Q![P`+<@%.NN_4+@!O"GX`'B\`"V```2!*AV8(".T`
  1384. +M!``;8`8([0`%`!M^_V```0A3K0`(;1`@;0`$4JT`!'``$!!@``#T<#/`K0`8
  1385. +M4X!G-'!<1@#`K0`8<D#2@;"!9A0([0```!L(+0`$`!MG%G#_8```QD*M``@(
  1386. +M[0`%`!MP_V```+8(+0`"`!MG1D*M``A^`!XM`"!*AV<(0BT`(&```)8@+0`<
  1387. +M0>\`"W(!3KKO+BX`;PA^`!XO``M@>DJ'9@@([0`$`!M@!@CM``4`&W[_8&1*
  1388. +MK0`49A0@34ZZ]&A*@&<*".T`!0`;</]@3"!M`!`K2``$("T`'"(M`!0@;0`0
  1389. +M3KKNVBM```@N`&\24ZT`""!M``12K0`$?@`>$&`82H=F"`CM``0`&V`*".T`
  1390. +M!0`;0JT`"'[_(`=,WR"`6$].=2!O``1(YP<4*DA^`"`M`!AF"G()*4$+G'#_
  1391. +M8&X@/```@`+`K0`8#(```(`"9@@@34ZZ`A9^`4AX``$@+0`<<@!.NNWL6$\L
  1392. +M`$H'9CP(+0`/`!IG(B9M``0J+0`(8!!R"K(;5\!$`$B`2@!G`E.&(`53A4J`
  1393. +M9N@(+0`!`!MG!MRM``Q@!)RM``@@!DS?*.!.=2!O``0@+P`((B\`#$CG`P0L
  1394. +M`2X`*D@(+0`!`!MG!B!-3KH!EB`&4X!F"B!-3KK_1MZ`?``K;0`0``1"K0`,
  1395. +M0JT`"$(M`"`(+0`'`!MG!G#\P:T`&"\&("T`'"('3KKM0%A/4H!F!'#_8`AP
  1396. +MS\&M`!AP`$S?(,!.=2!O``0@+P`((B\`#")O`!!93TCG#Q`L`2X`)DDO2``4
  1397. +M(`8B!TZZ]+HJ`'@`2H=G!$J&9@9P`&```/QP,,"K`!AF"G!!T(#`JP`89@P(
  1398. +MZP`%`!MP`&```-YP,\"K`!A5@&=0<$Q&`,"K`!AR0-*!L(%F#`CK``$`&T*K
  1399. +M``Q@-`@K``4`&V<&<`!@``"J<&Y&`,"K`!AR;D8!L(%F#`CK``$`&T*K``Q@
  1400. +M"D*K``QP`&```(1*JP`49DP(*P`"`!MF1"!+3KKR.$J`9SH(ZP`%`!MP`&!@
  1401. +M(&\`%!`8(FL`!!*`4JL`!%*K``Q3A5*$+T@`%'(*L`%F#@@K``8`&V<&($M.
  1402. +MN@`^("L`#+"K`!1L!$J%;L)*A6\6($M.N@`F("L`'"(%(&\`%$ZZZOS8@"`$
  1403. +M(@=.NO,<3-\(\%A/3G4@;P`$2.<!!"I((`UG``"@<$'0@,"M`!AF+"!M`!!#
  1404. +M[0`$(LA"F4(M`"!P`"+`""T`!P`;9P8(K0```!L(K0`$`!M@``"*2JT`%&=$
  1405. +M("T`#&H&<@`K00`,("T`#&<H(BT`'"!M`!#!04ZZZGXN`%*`9@@([0`%`!M@
  1406. +M#+ZM``QG!@CM``0`&RMM`!``!$*M``QP,,"M`!AF$@@M``<`&V<&</S!K0`8
  1407. +M<`!@)'#_8"!^`$OL!HQ*K0`89PP@36$`_T9*@&<"?O\J52`-9N@@!TS?((!.
  1408. +M=2!O``1(YP$$*DA^`"`-9P8@+0`89@1P_V!`""T``0`;9P@@34ZZ_PHN`'`,
  1409. +MP*T`&&8.2JT`%&<((&T`$$ZZ]")"K0`8("T`'$ZZT,92AV<$2H!G!'#_8`)P
  1410. +M`$S?((!.=2!O``0B;P`(+V\`#``$64](YP\4)F\`("I)+T@`&'X`+"P&^'H`
  1411. +M2JL`&&<&($M.NO]T<``0+0`!<BN0@6<@<C:0@6<&4X!G!&`@?`!R*[(M``)7
  1412. +MP$0`2(!(P"H`8`QZ`7!AL"T``F8"?`!P`!`5<F&0@6<,<A&0@6<:6X!G)&`V
  1413. +M2H56P'(!D@``00$(C(%^0.&/8"A*A5;`<@"2`)(`C(%@&DJ%5L!R`9(``$$!
  1414. +M``!!`@",@6`&<`!@``"`+RP&_"\&+R\`($ZZWW1/[P`,*`!2@&8$<`!@8DJ%
  1415. +M9P8(QP`'8#!P`!`5<F&0@6<,<A&0@6<:6X!G&F`:",<``4AX``(@!'(`3KKI
  1416. +ML%A/8`9^`6`"?@((!@`/9@0(QP`/D<A+ZP`0*L@JR"=$`!PG2``$)T@`#"=(
  1417. +M``@JQR`+3-\H\%A/3G4``"!O``0B;P`(44](YP`42.\#```(2^P&C&`$)DTJ
  1418. +M4R`-9P9*K0`89O(@#68><").NO/X*D!*@&8$<`!@'B!-)HAP(7(`$,%1R/_\
  1419. +M+PT@;P`,(F\`$$ZZ_G183TS?*`!03TYU```@;P`$(F\`""]O``P`!"]O`!``
  1420. +M")[\`#1(YR\V)F\`8"IO`%Q([P,``"Q"+P`[0B\`.D(O`#E"+P`X'WP`(``W
  1421. +M0J\`5'#_+T``4$(O`#9^`'P`1>\`/&!*<``@;P`L$!!R()"!9R)7@&<F48!G
  1422. +M$E6`9P97@&<B8#(??``!`#M@'A]\``$`.F`6'WP``0`Y8`X??``!`#A@!A]\
  1423. +M`#``-U*O`"P@;P`L2A!FKG`!L"\`.V8&'WP`(``W<BH@;P`LLA!F'BQO`#`B
  1424. +M5EB6(A$O00!4;`A$KP!4'T``.U*O`"Q@#$/O`%1.NNVNT:\`+"!O`"P0$'(N
  1425. +ML`%F1E*O`"QP*B!O`"RP$&8<(F\`,"!16)$@$"]``%!L!G#_+T``4%*O`"Q@
  1426. +M%D/O`%!.NNUL*@!F!D*O`%!@!-NO`"P??``@`#=P`"!O`"P0$'),D(%G%'(<
  1427. +MD(%G!EF`9PI@$A]\``(`-F`&'WP``0`V4J\`+"!O`"Q2B")O`"P0$7(`$@`?
  1428. +M0``D+T@`)G!0DH!G``$048%G``$<<`N2@&<``=!3@6=06X%G3%N!9R)3@6<`
  1429. +M`0)3@6<``.I7@6<``8!5@6<``/!7@6<``.I@``&X)&\`,'`"L"\`-F8.(%)8
  1430. +MDB)0(!,R@&```DH@4EB2(E`BDV```CXB;P`P(%%8D2@0:@1^`42$2H=G#$7O
  1431. +M`#T??``M`#Q@(DHO`#IG#$7O`#T??``K`#Q@$$HO`#EG#$7O`#T??``@`#Q\
  1432. +M`2`$($I.NNO"*@`@+P!09@9*A&<``>0@+P!0:@9R`2]!`%`H+P!0F(5O'"!*
  1433. +MT<0@!2)*3KKO2'(P($I@`A#!4X1D^BHO`%#<A2`%4X!F``$$$!*P+P`W9@``
  1434. +M^DJO`%!F``#R0A)@``#L("\`4&H&<`@O0`!0'WP``0`V<`*P+P`V9A`B;P`P
  1435. +M(%%8D2`0>``X`&`*(F\`,"!16)$H$!`O`"1R=;`!9P#_6G)OL`%F'DHO`#AG
  1436. +M#$7O`#T??``P`#Q\`2`$($I.NNLR8`#_/DHO`#AG$A]\`#``/$7O`#X??`!X
  1437. +M`#U\`B`$($I.NNM.*@`(+P`%`"1F`/\40>\`/$ZZZ_Y@`/\((F\`,"!16)$D
  1438. +M4"`*9@1%^@#R($I*&&;\4XB1RBH(("\`4&L$L(5O!"]%`%`L+P!08"!\`2)O
  1439. +M`#`@45B1(!`?0``\0B\`/6`&<`!@``"L1>\`/"`O`%2PAFP(<@`O00!48`2=
  1440. +MKP!42B\`.V<>8`AP`!`:($M.E5.&;/1@!B!+<"!.E5.O`%1L]&!J2H=F#$HO
  1441. +M`#EF!DHO`#IG1A`2<B"P`6<,="NP`F<&="VP`F8R2H9K+K(O`#=F$F`*<``0
  1442. +M+P`W($M.E5.O`%1L\'``$!H@2TZ54X9@"G``$"\`-R!+3I53KP!4;/!@"'``
  1443. +M$!H@2TZ54X9L]"`O`"9,WVSTWOP`-$YU```@;P`$(F\`""]O``P`!"]O`!``
  1444. +M")[\``Q(YP`4)DDJ2"]O`!P`$&`X<"6P+P`,9B8@;P`8L!!F!E*O`!A@&"\+
  1445. +M+PU#[P`83KK[E%!/2H!G!B]``!A@"G``$"\`#"!+3I4@;P`8$!@?0``,+T@`
  1446. +M&$H`9K9,WR@`WOP`#$YU(&\`!""(6)!"J``$(4@`"$YU```@;P`$2.<`!BI(
  1447. +M2JT`"F<*(DTL>``$3J[^F!M\`/\`"'#_*T``%'``$"T`#RQX``1.KOZP(DUP
  1448. +M(DZN_RY,WV``3G4``"!O``0@+P`(2.<#%BX`*DAP_RQX``1.KOZV'`!(ADC&
  1449. +M(`92@&8$<`!@8'`B(CP``0`!3J[_.B9`2H!F""`&3J[^L&!$0>L`"B#-%T<`
  1450. +M"1=\``0`"$(8$,:3R4ZN_MHG0``0(`UG"")+3J[^GF`:0>L`&"=(`!1!ZP`4
  1451. +M)T@`'$*K`!@7?``"`"`@"TS?:,!.=2\(+P!.N0```F!03TYU``````/L````
  1452. +M`0```````&(.`````@````$````4````"@````````/R```#Z@```=``````
  1453. +M+P`````````%G```!:(```7"```%^@``!CP`````````````````````````
  1454. +M``````````````````````````C,7'M]````3VL``````!0`````````````
  1455. +M``````!,8V]N<V]L93H``"5S.B```&EN='5I=&EO;BYL:6)R87)Y````.B``
  1456. +M`#0R``!5;FMN;W=N(&5R<F]R(&-O9&4```H```!T:6UE<BYD979I8V4`````
  1457. +M_____V9I9F\N;&EB<F%R>0```````````````````,P``0```````````,X`
  1458. +M``````````````!&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R
  1459. +M<G5P=````````$YO(&UE;6]R>0```&$`1F%I;&5D('1O(&-R96%T92!T:6UE
  1460. +M<@``3DE,.@``3DE,.@``3DE,.@``*@!.24PZ``!);G9A;&ED('=I;&1C87)D
  1461. +M("5S`$5R<F]R(&5X<&%N9&EN9R!A<F=U;65N=',`55-%4@``=7-E<@``55-%
  1462. +M4DY!344``$A/344``',Z``!32$5,3`!B:6XZ<V@``$A/4U1.04U%``!A;6EG
  1463. +M80!.24PZ`````)LP('$``$9A:6QE9"!T;R!I;FET:6%L:7-E($DO3P``86UI
  1464. +M9V$@<W!E8VEF:6,@97)R;W(``````?!5;FMN;W=N(&5R<F]R`&YO="!O=VYE
  1465. +M<@!N;R!S=6-H(&9I;&4@;W(@9&ER96-T;W)Y`&YO('-U8V@@<')O8V5S<P!I
  1466. +M;G1E<G)U<'1E9"!S>7-T96T@8V%L;`!I+V\@97)R;W(`;F\@<W5C:"!D979I
  1467. +M8V4@;W(@861D<F5S<P!A<F=U;65N="!L:7-T('1O;R!L;VYG``!E>&5C(&9O
  1468. +M<FUA="!E<G)O<@!B860@9FEL92!N=6UB97(`;F\@8VAI;&0@<')O8V5S<P``
  1469. +M;F\@;6]R92!P<F]C97-S97,`;F]T(&5N;W5G:"!M96UO<GD`<&5R;6ES<VEO
  1470. +M;B!D96YI960`8F%D(&%D9')E<W,`8FQO8VL@9&5V:6-E(')E<75I<F5D`&UO
  1471. +M=6YT(&1E=FEC97,@8G5S>0``9FEL92!E>&ES=',`8W)O<W,M9&5V:6-E(&QI
  1472. +M;FL`;F\@<W5C:"!D979I8V4``&YO="!A(&1I<F5C=&]R>0!I<R!A(&1I<F5C
  1473. +M=&]R>0``:6YV86QI9"!A<F=U;65N=```9FEL92!T86)L92!O=F5R9FQO=P!T
  1474. +M;V\@;6%N>2!O<&5N(&9I;&5S`&YO="!A('1Y<&5W<FET97(``'1E>'0@9FEL
  1475. +M92!B=7-Y``!F:6QE('1O;R!B:6<``&YO('-P86-E(&QE9G0@;VX@9&5V:6-E
  1476. +M`&EL;&5G86P@<V5E:P``<F5A9"UO;FQY(&9I;&4@<WES=&5M`'1O;R!M86YY
  1477. +M(&QI;FMS``!B<F]K96X@<&EP90!M871H(&%R9W5M96YT`')E<W5L="!T;V\@
  1478. +M;&%R9V4``$DO3R!S=')E86T@96UP='D``&9I;&4@;F%M92!T;V\@;&]N9P``
  1479. +M9&ER96-T;W)Y(&YO="!E;7!T>0!T;V\@;6%N>2!S;V9T(&QI;FMS("AL;V]P
  1480. +M/RD````""@```A@```(B```"/````DP```)D```";@```H@```*@```"L@``
  1481. +M`L(```+4```"Y@```O@```,*```#%@```RP```-````#3````UX```-N```#
  1482. +M?@```XX```.@```#M````\@```/:```#Z@```_@```00```$'@``!#0```1$
  1483. +M```$4```!%X```1P```$@@``!)8```2J````)@``9&]O<BXE;'@N)6QX``!.
  1484. +M;R!M96UO<GD```!````@("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@
  1485. +M($@0$!`0$!`0$!`0$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!
  1486. +M`0$!`0$!`0$!`0$!`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("
  1487. +M`@(0$!`0(```````````````````````````````````````````````````
  1488. +M````````````````````````````````````````````````````````````
  1489. +M````````````````````````````````````````````````````````````
  1490. +M```````/H```!JX```````````````````````````````````````````;0
  1491. +M````````````````````````````````````````````````````````````
  1492. +M```````````````````````````````"````@``````-__\````.``X`````
  1493. +M``````````#__P````0`!````````$Q"```'`/__````!``$````````3%@`
  1494. +M`````````````^P````(````````!S0```<@````0@```!H````6````$@``
  1495. +M``X````*````+@````$```<D```&K@``!HP```5>```%6@``!58```52```%
  1496. +M3@``!4H```5&```%0@``!3X```4Z```%-@``!3(```4N```%*@``!28```4B
  1497. +M```%'@``!1H```46```%$@``!0X```4*```%!@``!0(```3^```$^@``!/8`
  1498. +M``3R```$[@``!.H```3F```$X@``!-X```3:```$U@``!-(```3.```$R@``
  1499. +:!,8```(&````X````-0```!@`````````_+:
  1500. +`
  1501. +end
  1502. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/getstack.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/getstack.uue
  1503. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/getstack.uue    Wed Dec 31 17:00:00 1969
  1504. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/getstack.uue    Sat Sep 28 00:00:00 1996
  1505. @@ -0,0 +1,8 @@
  1506. +begin 666 getstack
  1507. +M```#\P`````````!```````````````G```#Z0```"=93TCG(!Y)^0````"3
  1508. +MR2QX``1.KO[:*D!#^@!P<"4L>``$3J[]V"9`2H!G-B(M`*SE@2]!`!0@;P`4
  1509. +M(B@`-.6!+P%!^@!2(@@L2R0/3J[\1D_O``0B2RQX``1.KOYB<`!@`G`43-]X
  1510. +M!%A/3G4D5D52.B!G971S=&%C:R`Q+C`@*#(Q+C,N.3,I``!D;W,N;&EB<F%R
  1511. +,>0`E;&0*``````/R
  1512. +`
  1513. +end
  1514. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/grep.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/grep.uue
  1515. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/grep.uue    Wed Dec 31 17:00:00 1969
  1516. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/grep.uue    Sat Sep 28 00:00:00 1996
  1517. @@ -0,0 +1,1028 @@
  1518. +begin 666 grep
  1519. +M```#\P`````````"``````````$``"F2```+:@```^D``"F22.=^_B1()`!)
  1520. +M^0`````L>``$1_D```QX<@`@/```"$Q@`B;!4<C__"E/#*@I3@R@)FX!%"`K
  1521. +M`*QG#.6(($`@*``TY8A@!B`/D*L`.B(/DH`&@0```(`I00Q\L*P+P&14("P+
  1522. +MP`:`````@"E`#,@B/``!``%.KO\Z2H!G``'2*4`,Q"(`!H````"`*4`,?-"L
  1523. +M"\`,;@`D`!1M&"E`#,`I00R\DJP,R$'L#+@@@4ZN_21@`BY`0JP,I'``(CP`
  1524. +M`#``3J[^SB9N`11#^@&*<`!.KOW8*4`ME&8&<&1@``#F*6L`F`R<2JL`K&<`
  1525. +M`'X@:P"LT<C1R")H`!#3R=/)(`)R`!(9*4D,K-"!7H`"0/_\*4`,M$CG0$`B
  1526. +M/``!``%.KO\Z3-\"`DJ`9@AP%"\`9P`!%B!`*4`,L"`"4X#4@1&R```@`E."
  1527. +M4<C_]A&\`"`@`E."$;P`(B`"$;$@`"`!4<K_^!"\`"(O"&!*0>L`7$ZN_H!!
  1528. +MZP!<3J[^C"E`#*0O`"1`("H`)&<8+&PME"!`(B@``$ZN_Z`I0`R<(@!.KO^"
  1529. +M(&P,I"\(2&P,>"!H`"0I:``$#*Q.N@"R3KIM_G``8`0@+P`$)&P,J"4`+'@`
  1530. +M!`QN`"0`%&T22JP,N&<,0>P,N%FL#,!.KOTD+DH@+`R49P0@0$Z03KH`;$ZZ
  1531. +M`'0@+`S(9PPB;`S$+'@`!$ZN_RY*K`RD9R`L;"V4(BP,G&<$3J[_IBQX``1.
  1532. +MKO]\(FP,I$ZN_H9@$BQX``0@+`RT9P@B;`RP3J[_+B)L+91.KOYB(!],WW]^
  1533. +M3G5D;W,N;&EB<F%R>0!.^0``A1A.^0``A0!.^0``ADQP82`/44"PK`Q\90`N
  1534. +MY"\-("\`#"(O``@O`"\!3KHNS%!/*D!*@&8*2&P``$ZZ7?!83R`-*E].=2`/
  1535. +MD'P`$+"L#'QE`"ZL2.<!!"XO``PO!TZZ+J0J0$J'5L!$`$B`2,!(>``]2&P`
  1536. +M&DAL`!(O`$ZZ+IA/[P`4(`UF"DAL`"!.NEV>6$\@#4S?((!.=2`/D'P`$+"L
  1537. +M#'QE`"Y82.<!$"XO`!`@;P`,+P<O"$ZZ+F@F0$J'5L!$`$B`2,!(>`!*2&P`
  1538. +M.DAL`#(O`$ZZ+CY/[P`8(`MF"DAL`$!.NEU$6$\@"TS?"(!.=;_L#'QE`"X$
  1539. +M+P(@+P`((&\`#"0`<A_$@7(!Y:'JB.6`(#`(`,"!)!].=;_L#'QE`"W:+P(@
  1540. +M+P`((&\`#"(`ZHGE@70?P()T`>&BA;`8`"0?3G6_[`Q\90`MLB\"("\`""!O
  1541. +M``PB`.J)Y8%T'\""=`'AHD:"Q;`8`"0?3G6_[`Q\90`MB$CG`Q0F;P`8*F\`
  1542. +M%'X`?``GM6@`:`!2AUB&<`B^@&7P3-\HP$YUO^P,?&4`+5H@;P`$<!]R`!#!
  1543. +M4<C__$YUO^P,?&4`+4)(YP$0)F\`#'X`1IM2AW`(OH!E]DS?"(!.=;_L#'QE
  1544. +M`"T@2.<#%"9O`!@J;P`4?@!\`"`U:`"PLV@`9P1P`&`,4H=8AG`(OH!EZ'`!
  1545. +M3-\HP$YU(`]10+"L#'QE`"SD2.<#!"IO`!!^`'P`8!HB;!$D(%'1QB\(+PUA
  1546. +MH%!/2H!F=%*'<"#<@"!L$22^J``$;=P@;!$D("@`!+"H``AM.&`.(&P1)"(H
  1547. +M``C2@2%!``@@;!$D("@`!+"H``ALY"!L$20B*``(ZX$O`2\080#^$%!/(&P1
  1548. +M)""`(&P1)%*H``0@!^N`(FP1)"!1T<`O""\-80#^PE!/(`=,WR#`3G6_[`Q\
  1549. +M90`L/B\'(B\`#"XO``AP`2E`$2PI1Q$H*4$1,"X?3G4@#Y!\`"BPK`Q\90`L
  1550. +M%)[\`"!(YS\$2JP1/&8&</]@``9>2^P1."!5$!@JR'X`'@!3G2E($3@@!W(*
  1551. +MD(%G``-.<AJ0@6<``(Q9@&<``TQ3@&<``V13@&<``MI3@&<``NY7@&<``VYR
  1552. +M$9"!9P`"HG(<D(%G``.:4X!G``$:58!G#'(>D(%G``+H8``%;@@L``41*V8>
  1553. +M2JP10&<`!5X(+``#$2MG#B!L$3A3B+'L$31F``5(0JP10`@L``,1*V<*(#P`
  1554. +M``$#8``%N"`\```!`F``!:X(+``%$2MF``"@("P1/&<``)@(+``#$2MF``4,
  1555. +M""P``!$K9QA*@&\0(&P1.!(0="FR`F8$=@%@)G8`8")R`;"!;QH@;!$X%!!V
  1556. +M7+0#9@X8*``!=BFX`V8$=@%@`G8`2H-F1@@L``$1*V<82H!O$"!L$3@2$'1\
  1557. +ML@)F!'8!8"1V`&`@<@&P@6\6<%P@;!$XL!!F#'!\L"@``68$<`%@`G``)@!*
  1558. +M@V<`!(`(+``#$2MG"B`\```!!6``!/1P0>6(8``$[$JL$3QF"DAL`&9.NEFN
  1559. +M6$]+[!$X(%40&"K(?@`>`%.=*4@1."`'<BB0@6<``3)3@&<``3I5@&<``0Q=
  1560. +M@&=.4X!G2E.`9T93@&="4X!G/E.`9SI3@&<V4X!G,E.`9RY7@&<^58!G2%.`
  1561. +M9P``SE>`9UAR%9"!9V!R"Y"!9T!R%9"!9U1;@&<``,I@``/:0JP10'`!*4`1
  1562. +M1"`\```!`6``!$Q"K!%`(#P```$&8``$/D*L$4`@/````0=@``0P0JP10'!"
  1563. +MY8A@``0D0JP10"`\```!"6``!!9(;P`<80#\4%A/?`!P?[R`8AAP!T'L"KW`
  1564. +M,&@`9PQ(;P`<+P9A`/NP4$]2A@R&```!`&W8<%>^@&8*2&\`'&$`_"Y83T*L
  1565. +M$4!P`2E`$41(;P`<80#\=`:````!$5A/8``#M`@L``(1*V<``R1@0`@L``(1
  1566. +M*V<``QA@<@@L``$1*V8``PQ@``"(""P``!$K9@`"_F```*0(+```$2MF``+P
  1567. +M8```M`@L``(1*V8``N((+``%$2MF"$JL$41G``+2(#P```$*8``#3@@L``41
  1568. +M*V8(2JP11&<``K@@/````0M@``,T""P``A$K9@`"I`@L``41*V8(2JP11&<`
  1569. +M`I1P0^6(8``#$@@L``$1*V<``H)P`2E`$4!"K!%$(#P```$.8``"]`@L``01
  1570. +M*V;D8``"8@@L```1*V<``EAP`2E`$4!"K!%$(#P```$/8``"R@@L```1*V<`
  1571. +M`CI"K!%`<`$I0!%$<$3EB&```JY(;P`<80#ZZ$AO`"!A`/KX2&\`)$AX``IA
  1572. +M`/I\0JP10'`!*4`11$AO`"QA`/LT!H````$13^\`%&```G)(;P`<80#ZK%A/
  1573. +M2JP1/&8*2&P`B$ZZ5RI83TOL$3@@51`8*LA^`!X`4YTI2!$X<%Z^@&8H2JP1
  1574. +M/&8*2&P`I$ZZ5P!83TOL$3@@51`8*LA^`!X`4YU\`2E($3A@`GP`2JP1/&8*
  1575. +M2&P`P$ZZ5M983TOL$3@@51`8*LAZ`!H`4YTI2!$X<"VZ@&8``,!*K!$\9@I(
  1576. +M;`#<3KI6JEA/2^P1."!5$!@JR'H`&@!3G2E($3A@;DAO`!PO!V$`^7I03TJL
  1577. +M$3!G6G!_OH!B*$OL"KW;QP@5``!G'`@5``!G""`'<B#0@6`"(`=(;P`<+P!A
  1578. +M`/E&8"J^@&(H2^P*O=O'"!4``6<<"!4``6<((`=R()"!8`(@!TAO`!PO`&$`
  1579. +M^1I03U*'OH5OCDJL$3QF"DAL`/A.NE826$]+[!$X(%40&"K(?@`>`%.=*4@1
  1580. +M.&!N2&\`'"\'80#XXE!/2JP1,&=:<'^^@&(H2^P*O=O'"!4``&<<"!4``&<(
  1581. +M(`=R(-"!8`(@!TAO`!PO`&$`^*Y@*KZ`8BA+[`J]V\<(%0`!9QP(%0`!9P@@
  1582. +M!W(@D(%@`B`'2&\`'"\`80#X@E!/+@5P7;Z`9@#^HDJ&9PI(;P`<80#Y`EA/
  1583. +M0JP10'`!*4`11$AO`!QA`/E(!H````$16$]@``"(0JP10'`!*4`11$JL$3!G
  1584. +M='!_OH!B;DOL"KW;QW`#P!5G8DAO`!QA`/B@6$\(%0``9Q((%0``9P@@!W(@
  1585. +MT(%@`B`'+@!(;P`<+P=A`/?\4$]![`J]"#```7@`9P@@!W(@D(%@`B`'2&\`
  1586. +M'"\`80#WVDAO`"1A`/C$!H````$13^\`#&`"(`=,WR#\WOP`($YU(`]10+"L
  1587. +M#'QE`'[$+P<N+P`((&P1)"`H`!"PJ``4;3Q@#B!L$20B*``4TH$A00`4(&P1
  1588. +M)"`H`!"PJ``4;.0@;!$D(B@`%.6!+P$O*``,80#VY%!/(&P1)"%```P@;!$D
  1589. +M(B@`$%*H`!#E@2)L$20@:0`,(`<A@!@`!(````$`9R9R"I"!9R13@&<@4X!G
  1590. +M'%.`9P93@&<"8`93K!%,8`P@;!$D4J@`'%*L$4P@+!%,(&P1)+"H`!AO!"%`
  1591. +M`!@N'TYU(`]90+"L#'QE`'X$("P12&L(#(````$`;4`,@````1%L.`R````!
  1592. +M`6<P#(````$"9R@,@````01G(`R````!!F<8#(````$'9Q`,@````0AG"`R`
  1593. +M```!"682+P!A`/[B80#X5EA/*4`12&`\#(````$/9BIA`/A"*4`12&$``*P,
  1594. +MK````1`12&<*2&P!!DZZ4W983V$`^"(I0!%(8`I(>`$`80#^G%A/3G4@#UE`
  1595. +ML*P,?&4`?5IA`/](8!(O+!%(80#^?F$`]_)83RE`$4@@+!%(#(````$*9^(,
  1596. +M@````0MGV@R````!#&?23G4@#UE`L*P,?&4`?1AAL&`,8:Q(>`$-80#^/%A/
  1597. +M("P12`R````!$&<4#(````$.9PP,@````05G!$J`:M1.=2`/64"PK`Q\90!\
  1598. +MVF&T8!1A`/=\*4`12&&H2'@!#F$`_?983PRL```!#A%(9^).=2`/64"PK`Q\
  1599. +M90!\JDCG`!0@+P`0)F\`%"!O``PI2Q$D2^P1/"K`<`$JP$*=*4@1-"E($3A*
  1600. +MK!$L9@I(;`$43KI2;%A/80#W&"EK`!@13"E`$4@,@````0-F($AX`0)A`/V&
  1601. +M80#V^BE`$4AA`/]D2'@!#6$`_7)03V`$80#_5`RL```!!1%(9AI(>`$$80#]
  1602. +M6$AX`0UA`/U080#VQ%!/*4`12'#_L*P12&<*2&P!*$ZZ4?Q83W#_D*L`("\`
  1603. +M80#]*$AX`0UA`/T@4$]*JP`@9PI(>`$.80#]$%A/4JL`($S?*`!.=;_L#'QE
  1604. +M`'O*2.<#%"9O`!@J;P`4?@!\`&`0(%/1QB)5T\8@V2#94H=0AKZM``1MZB=M
  1605. +M``0`!$S?*,!.=2`/D'P`$+"L#'QE`'N(GOP`$$CG!S8J;P`X?@!\`"HM``1@
  1606. +M!%*'4(:^A6P,(%71QB`O`#"PD&7L("T`!+Z`;!PB!^>!(%71P29((B\`,+*3
  1607. +M9@HB+P`T@ZL`!&!`0>\`,$/O`"0BV"+84JT`!"P'YX9@)"!5(DC3QD7O`!PL
  1608. +M2BS9+-E2A]'&0^\`)"Q)(-X@WB+:(MI0AKZM``1MUDS?;.#>_``03G4@#UE`
  1609. +ML*P,?&4`>N193TCG+S9^`'P`(&\`-$*H``1Z`$*O`"1@``"`)E/7Q2@O`"0D
  1610. +M4M7$(A(D$[2!4L!$`$B`2,`B+0`$YX$J5=O!2H!G$"!O`#12J``$4H<JVRK;
  1611. +M8$12AE"O`"2TDF0.(&\`-%*H``0JVBK:8"Y2ARK;*ML@;P`T(B@`!%*H``3G
  1612. +M@2!O`#0F4-?!+&\`,"I6V\0@+0`$@:L`!%"%)F\`+"IO`#0D;P`POJL`!&P(
  1613. +MO*H`!&T`_VHH!^>$8!HB+0`$4JT`!%*'(%/1Q.>!(E73P2+8(MA0A+ZK``1M
  1614. +MX"X&YX=@&B(M``12K0`$4H8@4M''YX$B5=/!(M@BV%"'O*H`!&W@3-]L]%A/
  1615. +M3G6_[`Q\90!YU$CG!P0J;P`<?@!\`"HM``1@$"!5("\`%+"P:`!G"%*'4(:^
  1616. +MA6WL("T`!+Z`;"!3K0`$+`?GAF`0(%71QD/H``@@V2#94H=0AKZM``1MZDS?
  1617. +M(.!.=2`/D'P`)+"L#'QE`'ERGOP`'$CG/S9-[P!,)EXJ;P!(?`!*GE;`<@"2
  1618. +M`"]!`#Q*GE;`=`"4`'@`*BL`!'X`+T(`,&`0(%/1QR`0T*@`!+&&4H10A[B%
  1619. +M;>P@!G@`?``B+0`H+T``."]!`#1@="1M`"35QKZ29F0@*P`$(BH`"+*`9E@2
  1620. +M*@`,2(%(P;J!9DP2*@`-2(%(P20O`#"T@68\?@!X`"HK``1@'B!3T<0B:@`$
  1621. +MT\0@*``$L*D`!&8.(!"PD68(4H=0A+Z%;=XH+P!`OJL`!&8&(`1@``'J4H1P
  1622. +M%-R`+T0`0"XO`#@J+P`\N*\`-&T`_WH@+0`HL*T`+&TR8`HB+0`LTH$K00`L
  1623. +M("T`*+"M`"QL["`M`"PB`.6!TH#E@2\!+RT`)&$`\+Q03RM``"0@!.6`T(3E
  1624. +M@"@`)&T`)-7$)(<B*P`$YX$O`6$`\$0E0``$(&T`)-'$0^@`!"Z)+PMA`/Q,
  1625. +M4$\@;0`DT<1-Z``,',4B+P`P',%"'D(H``]"J``0>@!^`"PO`$!@``$H(E/3
  1626. +MQR(1Y8$D;0`,(#(8`&H``.XH*0`$(B\`/%;!=`"4`90!6()R`28!Y:/&A&<6
  1627. +M("\`,%;`=@"6`)8`)`'GHL2$9@``@B`O`#Q6P'8`E@"6`%B#)`'GHL2$9Q8@
  1628. +M+P`P5L!V`)8`E@!2@R0!YZ+$A&94("\`/%;`=@"6`)8`6H,D`>>BQ(1G%"`O
  1629. +M`#!6P'8`E@"6`"0!YZ+$A&8J2J\`/%;"=@"6`I8"6H,D`>>BQ(1G)DJO`#!6
  1630. +MPG8`E@*6`E*#YZ'"A&<2)`;E@M2&Y8(L;0`DW<*)+@`/(`;E@-"&Y8`B;0`D
  1631. +MT\!*J0`09C8L4R0V>`#E@BQM``PC=B@``!!@(@R````!`68:(`;E@-"&Y8`@
  1632. +M;0`DT<`1?`#_``\1?``!``Y2A5"'NJL`!&T`_M12K0`H(`9,WVS\WOP`'$YU
  1633. +M(`^0?``DL*P,?&4`=J:>_``<2.<'-BIO`$`B+0`0Y8$O`6$`[J!83WX`)D`O
  1634. +M0``<8`1"FU*'OJT`$&WV?@!@``$L+`?GAB13U<8B$N6!)FT`#"`S&``,@```
  1635. +M`0!M``$,#(````$!9P`!`@R````!$6P``/@@2D/O`"@BV"+8+V\`+``T(F\`
  1636. +M/"!1T<9-[P`@+-@LV"\)3>\`))[\``@B3W`'$MY1R/_\80#\+D_O``PB+P`H
  1637. +MY8$F;P`<U\%*DV<&4X=@``"F<@$F@2(O`"CE@2!M``S1P2`0!(````$";40,
  1638. +M@`````AL/-!`,#L`!D[[``0`#@`P`!(`,``6`!P`(@`H<#!@&'!08!1P>="`
  1639. +M8!!P>M"`8`IP>]"`8`1P!D8`P:\`-'X`?``J+P`HYX4D;P`\8"@B4R]Q:```
  1640. +M,"\*0^\`-)[\``@L3W`''-E1R/_\80#YS$_O``Q2AU"&)FT`,-?%OJL`!&W,
  1641. +M?O]2AR9O`#R^JP`$;0#^S"\O`!Q.NG:86$],WVS@WOP`'$YU(`^0?`!4L*P,
  1642. +M?&4`=1J>_`!$2.</-BIO`&@K;P!L`#0B+0`8Y8$O`6$`[0XB+0`8Y8$N@2]`
  1643. +M`&0O0``T80#L^B(M`!SG@2Z!+T``8"]``#!A`.SF(BT`'.>!($`B0-/!(BT`
  1644. +M&.6!+H$O0``L+TD`7&$`[,8B+0`<YX$N@2]``%@O0``H80#LLB(M`!SG@2!`
  1645. +M(D#3P2(M`!#E@2Z!+T``)"])`%1A`.R26$\D0'X`)D!@!$*;4H>^K0`0;?8B
  1646. +M+0`<YX$O`6$`['(O0`!$2'@`""\M`!!A`.PL3^\`#"M``#!^`"]*`#1\`&``
  1647. +M`T`J;P!4(`?E@"!K``P@,`@`!(````$`9R!R"I"!9P``[%.`9SA3@&<T4X!G
  1648. +M``$`4X!G``)68``"D'`!(&\`8"#`0^T`!$*5+&\`7$*>+T@`8"])`%0O3@!<
  1649. +M8``"W"!O`%PO:/_\`$PO;P!8`$AZ`"IO`%!@``"*(A7G@2!K`##1P4AO`$`O
  1650. +M"$AO`%!A`/C`3^\`#"(5Y8$@+P!$4X"PLA@`;3Y@!B(3TH$F@2(5Y8$F2M?!
  1651. +M("\`1%.`L)-LZ"`5(@#G@2)O`&@F:0`PU\'E@"`R"`#G@"\`+Q-A`.O&4$\F
  1652. +M@"9O`&@B%>>!(&L`,-'!+PA(;P!$80#W=%!/4H50C2!O`%2ZJ/_\;0#_;B`'
  1653. +MY8`@:P`,#+````$,"`!G``(:<`$@;P!@(4#__&```@P@;P!<+VC__`!,+V\`
  1654. +M6`!(>@`B+?_\YX$J;P!0V\%@``"*(A7G@2!K`##1P4AO`$`O"$AO`%!A`/?H
  1655. +M3^\`#"(5Y8$@+P!$4X"PLA@`;3Y@!B(3TH$F@2(5Y8$F2M?!("\`1%.`L)-L
  1656. +MZ"`5(@#G@2)O`&@F:0`PU\'E@"`R"`#G@"\`+Q-A`.KN4$\F@"9O`&@B%>>!
  1657. +M(&L`,-'!+PA(;P!$80#VG%!/4H50C2!O`%2ZJ/_X;0#_;B9O`&`J;P!<2JO_
  1658. +M^&<*("W__-&M__A@"B(M__SG@=.O`%@@35F(*F\`5"](`%Q*J__\9PH@+?_\
  1659. +MT:W_^&`^(BW_^.>!)F\`4-?!*BW__%.%*`7GA&`2(&\`4-'$(DO3Q"+8(MA3
  1660. +MA5&$2H5JZB(M__CG@=.O`%`K;?_\__A9C29O`&`O30!42JO__&<*2JO_^&<$
  1661. +M<`%@`G``)T#_^%F++TL`8&```+!-[P!<(%8@*/_\T:C_^%F>("W__-&M__A9
  1662. +MC29>+TT`5$JK__QF"DJK__AF!'``8`)P`2=`__A9BR]+`&!@<"`'Y8`@:P`,
  1663. +MT<`,D````0%7P$0`2(!(P")O`&`BP$'M``1P`2J`+&\`7"S`4:\`6$OO`%!1
  1664. +MG2('*L@@;P!0(($O20!@(ETB@7(`1@$A00`$(T$`!"!O`#0@@"9K`##7QDAX
  1665. +M``@O3@!@80#I'%A/)H!2AUBO`#10AB9O`&B^JP`0;0#\N'X`?`!Z`&!Z*FL`
  1666. +M#"`U:``,@````0!M$`R````!`6<(#(````$1;50@:P`PT<5(;P!`+PAA`/3J
  1667. +M+HM(;P!(80#Y_D_O``PF:P`PU\4@+P!$(BL`!+*`;`[G@"\`+Q-A`.CV4$\F
  1668. +M@"9O`&@@:P`PT<4O"$AO`$1A`/2H4$]2AUB&4(6^JP`0;8!"KP!$?@`F;P!8
  1669. +M*F\`7&`L($M#[P`X(M@BV$AO`$!#[P`\GOP`""Q/<`<<V5'(__QA`/2B3^\`
  1670. +M#%*'4(N^K?_\;<XJ;P!H+PU(;P!$80#Y:%!/?`!^`"HO`$0F;P!`8!IP,,"K
  1671. +M``1R8-*!PJL`!.2)LH!G`GP!4H=0B[Z%;>)P`2M``"Q"K0`H2'@`%&$`Y^PK
  1672. +M0``D0I<O!DAO`$@O#6$`]DHNKP!`3KIQ)"ZO`#Q.NG$<+J\`.$ZZ<10NKP`T
  1673. +M3KIQ#"ZO`#!.NG$$+HI.NG#^+J\`4$ZZ</9/[P`03-]L\-[\`$1.=2`/D'PH
  1674. +MS+"L#'QE`&]VGOPHO$CG+S9"KP#<2JP-#&8^<`$I0`T,?`!P?[R`8AAP!T'L
  1675. +M"KW`,&@`9PQ(;`S,+P9A`.@J4$]2A@R&```!`&W82&P,[$AX``IA`.@24$](
  1676. +M;P"T80#HB%A/0J\`6$*O`#A+[P#@0>\@X"`O*.0B`.6!TH#E@21O*.@O00`D
  1677. +M+T@`,&```P(@:P`$T>\`.$/O`-0BV"+8(B\`U.6!)FH`#"`S&`!K%`R````!
  1678. +M`&P,2&\`M"\`80#GJ&`@#(````$1;0`"O`2````!$>N`(%+1P$AO`+0O"&$`
  1679. +MY]A03R`O`-AR`$8!L(%G``#V(&H`)-'&2B@`#%;!=`"4`90!6H)R`>6AP(%F
  1680. +M#DAO`+1(>``*80#G=E!/)FH`)-?&2BL`#%;`<@"2`)(`6(%P`>.@(B\`V,*`
  1681. +M9AY\`'X`0>\`M$/L#.P@,7@`P;!X`%*&6(=P"+R`9>9**P`-5L!R`)(`D@!2
  1682. +M@7`!XZ`B+P#8PH!F('P`?@!![P"T0^P,S"`Q>`!&@,&P>`!2AEB'<`B\@&7D
  1683. +M2BL`#5;`<@"2`)(`<`'CH"(O`-C"@&8>?`!^`$'O`+1#[`S,(#%X`,&P>`!2
  1684. +MAEB'<`B\@&7F?`!'[P"T8`12AEB+<`B\@&0$2I-G\E&&9P`!HGH`1>\`X"]-
  1685. +M`$`O;P`P`#Q+[R#@8``!*B(O`-3E@2)O*.@F:0`,(#,8`&L8#(````$`;!`O
  1686. +M"B\`80#F'%!/2H!G``#V>`!\`'X`0>\`D$/O`+0@,7@`P+)X`"&`>`!G`G@!
  1687. +M4H98AW`(O(!EWDJ$9P``R$*O`+!"KP!L?`!^`$?O`+37QR@3*C)X`$'O`'`@
  1688. +M!$:`P(4A@'@`9P9P`2]``&Q&A<B%)H1G!G`!+T``L%*&6(=P"+R`9<8L+P#<
  1689. +M2J\`;&=6)F\`0"\+2&\`=&$`Y@0NBDAO`)AA`.7Z(&\H]"(H`!SG@2Z!80#D
  1690. +MP"!O`$@@@"Z(+PUA`/#03^\`$%*&+T8`W$'K`"!0KP`\<"#1KP`T4*\`,"](
  1691. +M`$`B+0`$4JT`!.>!(%71P4/O`-0@V2#9*B\`5$JO`+!G%E*%U/P`(%"-+T4`
  1692. +M5"PO`-RZAFT`_LPJ;P`T)&\HZ+J&9D8O#4AO`+AA`.5P2&\`O&$`Y98B*@`<
  1693. +MYX$N@6$`Y#)/[P`,(&\`,""`<@$A00`$(E!-[P#4(MXBWE*&VOP`(%"O`#`O
  1694. +M1@#<4J\`6%"O`#@O30`T+"\`)"9J`"37QB`O`%BPJP`(;0#\Z"(J`!SG@2\!
  1695. +M80#CW"]``&@B*@`<YX$N@6$`X\Q83WP`*F\H["]``"A*J@`T9P``Z'H`0J\`
  1696. +M7"1J`"0H*@`(?@!@."9J``37QW`PP*L`!')@TH'"JP`$Y(FR@&<">@%P`\"K
  1697. +M``1R#,*K``3DB;*`9P9P`2]``%Q2AE"'O(1MQ$AO`&1(:@`$80#O?"9O*/!P
  1698. +M`"Z`+P!(;P!P+PMA`/&Z3^\`%"@`2H5G&$*G2'@``4AO`&PO"V$`\:!/[P`0
  1699. +M*@!@`BH$2J\`7&<82'@``4*G2&\`;"\+80#Q@$_O`!`N`&`"+@1\`"9-<`J\
  1700. +M@&8$)H5@&'!_O(!B$'`'0>P*O<`P:`!G!":'8`(FA%*&6(L,A@```0!MTF`0
  1701. +M)DUP_R;`4H8,A@```0!M\D*O`%A%[R#@0>\`X"](`"Q@``(:0J\`:'H`>`!@
  1702. +M4'P`?@!@+B!3T<=#[P!,(M@BV$AO`&1#[P!0GOP`""Q/<`<<V5'(__QA`.[2
  1703. +M3^\`#%*&4(<@4B(P2`#G@2)O*.@F:0`PU\&\JP`$;;I2A5"$NJH`!&VJ)F\H
  1704. +MZ$JK`#1G1'P`?@!@-"!K`"0B:``$T\=![P!$(-D@V4AO`&1#[P!(GOP`""Q/
  1705. +M<`<<V5'(__QA`.YL3^\`#%*&4(<@:P`DO*@`"&W">@`O+P`L2'@`"F$`XJ!0
  1706. +M3TJ`9RI\`"XO`&@F;P!D8!IP,,"K``1R8-*!PJL`!.2)LH!G`GH!4H90B[R'
  1707. +M;>)X`'X`?``F;P`L(#-H`$'L#,S`L&@`9@I2AUB&<`B^@&7H<`B^@&0H?``N
  1708. +M+P!H)F\`9&`8<`/`JP`$<@S"JP`$Y(FR@&<">`%2AE"+O(=MY"9O*.AP`"\`
  1709. +M+P!(;P!L+PMA`._.3^\`$"P`+T``)$J%9QI"ITAX``%(;P!L+PMA`.^P3^\`
  1710. +M$"]``&!@!"]&`&!*A&<82'@``4*G2&\`;"\+80#OCD_O`!`J`&`"*@9"KP!4
  1711. +M)F\`+'@`8%Q^`'`![Z`D$\2`9SXL!-R'<@J\@68*Y88KKP!@:`!@*G)_O(%B
  1712. +M%'('0>P*O<(P:`!G".6&*X5H`&`0#(8```$`;`CEABNO`"1H`%*'<""^@&6P
  1713. +M4J\`5%B+<"#8@`RO````"`!499I2KP!84(IP(-&O`"PN+P#<("\`6+"';0#]
  1714. +MW'P`1^\@X&`,+Q-.NFG,6$]2AE"+O(=M\"\O`&1.NFFZ+J\`+$ZZ:;)83TS?
  1715. +M;/3>_"B\3G4@#Y!\`!2PK`Q\90!H-%%/2.<_-"IO`#0H+P`P#*T```0``#QM
  1716. +M2'P`>@!@-B!M`$`@,%@`9PXO`$ZZ:6I83R!M`$!@%B!M`$@@,%@`9Q`O`$ZZ
  1717. +M:5)83R!M`$A"L%@`4H98A;RM`#AMQ'``*T``/%*M`#PL!.6&(`8B;0!,0K$(
  1718. +M`"($Y8'2A.6!)FT`)-?!+T``*"]!`"04*P`,5L)V`)8"E@):@W0!YZ(6*P`/
  1719. +MQ`-G(!0K``U6PG``D`*0`G0!X:+$`V<,(FT`3-/&".D``@`#$"L`#%;`=`"4
  1720. +M`)0`6()P`28`Y:,4*P`/Q@)G(A8K``U6PW(`D@.2`U*!)@#CH\8"9PPB;0!,
  1721. +MT\8(Z0`!``-**P`,5L%T`)0!E`%8@B(`Y:$4*P`/P@)G'DHK``U6P78`E@&6
  1722. +M`>>@Q`!G#"!M`$S1Q@CH`````TAX!`!A`-\&)D`N@"\-+P1A`/=F3^\`#'X`
  1723. +M)$M@``"J("T`."(2LH!M``":*@!@"B(M`#C2@2M!`#@@$K"M`#AL[B(M`#A2
  1724. +M@>6!+P$O+0!$80#?#BM``$0@0$/H``0K20!`(BT`..6!+H$O+0!(80#>\"M`
  1725. +M`$@B+0`XY8$N@2\M`$QA`-[<*T``3"(M`#CE@2Z!+RT`4&$`WLA/[P`4*T``
  1726. +M4"@M`#@L!>6&8!0@;0!`0K!H`%*%(&T`2$*P:`!8AKJ$;>A2AUB*#(<```$`
  1727. +M;0#_4"(O`"@@;0!0(:L`*!@`</\G0``H(&T`)-'O`"1**``/9P8@;0!(8`0@
  1728. +M;0!`(8L8`$S?+/Q03TYU(`]10+"L#'QE`&7F+PTJ;P`(<`$K0``X0JT`/$AX
  1729. +M``1(>``"80#=IBM``$0@0$/H``0K20!`2'@`!"\M`#AA`-V,*T``2"(M`#CE
  1730. +M@2Z!80#=LBM``$PB+0`XY8$N@6$`W:(K0`!0+HU"IV$`_41/[P`4*E].=2`/
  1731. +M44"PK`Q\90!E<$CG#S9*K!$09CQP`2E`$1!^`$OL#1!P"KZ`9@1P!&`8<'^^
  1732. +M@&(0<`=![`J]P#!X`&<$<`)@`G`!*H!2AUB-#(<```$`;=`J;P`D2JT`.&8(
  1733. +M+PUA`/\J6$]\`"9O`"@D;0!`(&\`+!"\``H@!N6`*G((`"`-9SAP`!`;2,#E
  1734. +M@"HU"``@!>6`*G((`"`-9QIP`!`;2,#E@"PU"``@!N6`*G((`"`-9M!@!B`&
  1735. +M+`4J`$J&:VP@;P`LM\AB9"@&Y80L;P`D*FX`2-O$2I5G4G``$!-(P"X`Y8<B
  1736. +M;@!,(#%(`$/L#1#`L7@`9R@J;P`X(`UG'"`&Y8#0AN6`(FX`)-/`2BD`#F<&
  1737. +M<`$J@&`"0I4@"V!P*@92BR)5+#%X`&``_TXJ;P`L2J\`-&<2M\UB#G`*L"O_
  1738. +M_V8&(&\`-%*0M\UE!'``8#XJ;P`D2H9K$B\-+P9A`/O>4$\D;0!`8`#_$'`*
  1739. +ML"O__V862J\`,&<0(`7E@"!M`%`L,`@`8`#^\GP`8`#^[$S?;/!.=2`/64"P
  1740. +MK`Q\90!CWB\-*F\`"'`!*T``"$AX`"!A`-O<*H!"K0`$<`$K0``42'@`!&$`
  1741. +MV\@K0``,0JT`($*M`!Q"K0`80JT`$$*M`#1"K0`X4$\J7TYU(`^0?``,L*P,
  1742. +M?&4`8X9(YP<T+"\`*"XO`"`F;P`D*F\`'$JL$3!G``"^+P=.NF9L6$\D0$J`
  1743. +M9@I(;`$V3KHY3%A/0JP1,'H`8$@@3='%$!!R?[`!;C9(@$C`0^P*O0@Q```(
  1744. +M`&<F$!!(@$C`"#$```@`9PP0$$B`2,!R(-"!8`80$$B`2,`5@%@`8`05D%@`
  1745. +M4H6ZAV6T+PMA`/\00JL`AD(K`%0NBR\'+PIA`.8R+HI.NF1$+HMA``3^+H8O
  1746. +M"V$`[:QP`2E`$3`NBV$`_MXNBR\'+PUA`.8(+H8O"V$`[8Y/[P`<8"(O"V$`
  1747. +M_L`NBR\'+PUA`.7J+HMA``2\+H8O"V$`[6I/[P`03-\LX$YU(`]90+"L#'QE
  1748. +M`&)Z2.<#!"IO`!`O%4ZZ8]`NK0`,3KICR%A/?@!\`&`6(&T`)-'&+R@`!$ZZ
  1749. +M8[)83U*'<!3<@+ZM`"AMY"\M`"1.NF.<6$]^`'P`8!8@;0`P(#!H`&<(+P!.
  1750. +MNF.$6$]2AU"&OJT`$&WD+RT`,$ZZ8W!83WX`?`!@*"!M`$`@,&@`9P@O`$ZZ
  1751. +M8UA@$"!M`$@@,&@`9P@O`$ZZ8T983U*'6(:^K0`X;=(O+0!$3KIC,BZM`$A.
  1752. +MNF,J6$\@;0!0+T@`$$S?(,!.^F,8(`]10+"L#'QE`&&H2.<#%"IO`!@F;P`4
  1753. +M(`UF!'``8`P@34H89OQ3B)'-(`@N`"`+9@1\`&`02H=G/B!+2AAF_%.(D<LL
  1754. +M""`+9@Q2AR\'3KID:EA/8!`@!M"'4H`O`"\+3KIB+%!/)D`@"V<,(`UG""!+
  1755. +MT<80W6;\(`M,WRC`3G4@#U%`L*P,?&4`82@@;P`$+PA"IV$`_VI03TYU(`^0
  1756. +M?``,L*P,?&4`80I(YP$4*F\`%"!-2AAF_%.(D<TN""9O`!!@&"\'+PTO"TZZ
  1757. +M82)/[P`,2H!F!"`+8`A2BTH39N1P`$S?*(!.=2`/64"PK`Q\90!@P"!O``0@
  1758. +M"&<(+PA.NF(66$].=2`/64"PK`Q\90!@HDCG`!0J;P`,(`UG$B9-8`HO$TZZ
  1759. +M8?!83T*;2I-F\DS?*`!.=2`/44"PK`Q\90!@<DCG!S0N+P`D*F\`'"`-9@9P
  1760. +M`&```*HO+P`@80#_(EA/)D!*@&8,+PUAFEA/<`!@``".0C-X`'P`)$U@'B\+
  1761. +M+Q)A`/\84$]*@&<,+PM.NF&&6$\@#6!H4H98BDJ29MYZ`"`&Y8`D3=7`8"@O
  1762. +M%2\+80#^ZE!/2H!F!E*%6(U@%"\53KIA4EA/4X99BKR%9P@JDD*22I5FU"(&
  1763. +M5('E@2\!+R\`($ZZ8*A03R!`2H!F!'``8`SEAB&+:`!"L&@$(`A,WRS@3G4@
  1764. +M#Y!\``RPK`Q\90!?H$CG`S0J;P`8(`UG!DJO`!QF!G``8```@$AX``1.NF*(
  1765. +M6$\F0$J`9@1P`&!J0I,D36!>?@`0$DB`2,`O`"\O`"!.NE^`8"A\`6`"4H80
  1766. +M,F@`9P:P-6@`9_*\AV\"+@80$DB`2,`O`$AM``%.NE]64$\J0"`-9M!*AV<4
  1767. +M+P<O"B\+80#^H$_O``PF0$J`9P92BDH29IX@"TS?+,!.=2`/D'P`#+"L#'QE
  1768. +M`%[V2.<`-"9O`!0J;P`0(`UG!"`+9@1P`&`L)$M@(B!2(`A*&&;\4XB1P"\(
  1769. +M+P`O#6$`_DA/[P`,*D!*@&<&6(I*DF;:(`U,WRP`3G4@#Y!\``RPK`Q\90!>
  1770. +MGEE/2.<`-"IO`!0@#6<&2J\`&&8$<`!@;$AX``1.NF&&6$\F0$J`9@1P`&!8
  1771. +M0I,D36!(*F\`&&`X+Q4O$F$`_K)03R1`2H!F#"\+80#]I%A/<`!@,"\*+PMA
  1772. +M`/]`)D`NBF$`_8Y03R`+9@1P`&`66(TD;P`,2I5FP%B*+TH`#$J29K`@"TS?
  1773. +M+`!83TYU(`]90+"L#'QE`%X&2.<`)"IO``P@;0`$(FT`""1M``Q"$D(10A`@
  1774. +M52](``Q,WR0`8`#],B`/D'P`(+"L#'QE`%W0GOP`%$CG/S8F;P!`0JL`AD(K
  1775. +M`%0B*P`04H'I@2\!3KI@MEA/*D`O0``L9P`$6B1-?@!@%$'L$10B32+8(M@B
  1776. +MV"+84H?:_``0OJL`$&_F?@`J2F!H2'@`!$ZZ8'PJ@$AX``).NF!R*T``!$AX
  1777. +M``).NF!F*T``"$AX``).NF!:3^\`$"M```PB%6<``X(D+0`$9P`#>B8M``AG
  1778. +M``-R2H!G``-L(&T`!")M``@L0$(60A%"$"!50I!2A]K\`!"^JP`0;Y)![`%$
  1779. +M0J\`-$*O`#`O2``X8``#*"!M``S1[P`P+A`F;P`L(`=2@&<``7H$@````0%G
  1780. +M4%.`9TQ3@&=(4X!G``,,4X!G/E.`9P`#`E.`9S13@&<P4X!G+%.`9RA3@&<P
  1781. +M4X!G+%.`9P`!*%.`9P`!?%.`9S)3@&<``M13@&<``LY@``)0+PIA`/YV6$]@
  1782. +M``*BM<MC``*XE/P`$"\*80#^8%A/8``"C$'K`""UR&4``IXF2I;\`!"4_``@
  1783. +M(&H`#")K``P0&+`99@9*`&;V9P8@:@`,0A!^`"IJ``1@`E*'$#5X`&<*(&L`
  1784. +M!+`P>`!G[B!J``1",'@`(&H`""`(2AAF_%.(D<`J""!K``@@"$H89OQ3B)'`
  1785. +M*`@N!;Z(;P(N!'P`8"`@!)"&(&L`"-'`(`60AB)J``C3P!`I__^P*/__9@92
  1786. +MAKR';=Q^`&`4(&H`"")((`60AM"'$[`(`'@`4H>^AFWH(&H`"$(P>``O$R\2
  1787. +M80#\]%!/*D!*@&<``=(O$F$`^N(NDDZZ7.Q83R2-8``!HK7+8P`!N)3\`!`@
  1788. +M:@`,0A!@``&.0>L`$+7(9@`!H'X`1>P!1&`D(%4@"$H89OQ3B)'`+`@@2DH8
  1789. +M9OQ3B)'*O(AC!B!3)'!X`%B'*E/;QTJ59M0O2@`X8``!9$'K`""UR&4``5HF
  1790. +M2I;\`!"4_``@+Q,O$F$`_`A03R2`9P`!0"IJ``A*%6=2(&L`!$H09THO#6$`
  1791. +M^;I83RI`2H!G``$@+RL`!"\-80#Y)E!/*D!*@&<``0P@34H89OQ3B)'-+P@O
  1792. +M#2\280#Z/B2`+HU.NEP63^\`#$J29P``YB!J``Q*$&<6+RL`!"\J``1A`/CB
  1793. +M4$\E0``$9P``R"!K``Q*$&8&(&H`"$(0+RL`""\J``AA`/B^4$\E0``(9P``
  1794. +MI"!J``Q*$&<<*FL`#$H59Q0O#2\(80#XG%!/)4``#&9F8```@$(08%YP_[Z`
  1795. +M;71*AV=P#(<```$1;0HO"F$`_!983V!"+PIA`/P,2^H`#"!51^H`!");+%,<
  1796. +MAQ*'$(<@52)J``0L6T(N``%"*0`!0B@``4AX``$O'2\280#Y;$_O`!`D@&<<
  1797. +MU/P`$%*O`#18KP`P*F\`0"`O`#2PK0`0;0#\S"IO`$!(>``Q+R\`/$AM`%1.
  1798. +MNEH\3^\`#$(M`(5![0!4(DA*&6;\4XF3R"M)`(9^`"9O`"PD2V`L+Q)A`/C:
  1799. +M+I)A`/BV+JH`!&$`^*XNJ@`(80#XIBZJ``QA`/B>6$]2A]3\`!"^K0`0;\XO
  1800. +M2P!`3-]L_-[\`!1.^EJN3-]L_-[\`!1.=0``3OD``(UH3OD``(J83OD``(V@
  1801. +M3OD``(J\3OD``(K43OD``*7H3OD``(O\3OD``(MT3OD``(LD<&$@#Y!\``RP
  1802. +MK`Q\90!8^$JL`4AF.C`\`/]R`$'L$5`0P5'(__QP&7(!0>P1L1#!4<C__'`9
  1803. +M0>P1D1#!4<C__'`)0>P1@!#!4<C__"E!`4A.=;_L#'QE`%BN(B\`!"`L`4PI
  1804. +M00%,3G4@#Y!\`-2PK`Q\90!8DI[\`,1(YS<V*F\`]"95)&\`["!*T>\`\")M
  1805. +M`!!"KP#D0J\`X$*O`-PO2P#83>\`.'X!0BT`%"](`"@O20`L+TX`-&$`_TA*
  1806. +MK0`$9@`(.'`<*T``!"(59PPO`"\!3KI9#E!/8`@O`$ZZ6S!83RJ`2H!G``AR
  1807. +M)D`O2P#88``("'#VT*T`!"(+DI6R@&]X($TJ4`RH``$````$9P`(1"!O`/0B
  1808. +M*``$TH$A00`$#($``0``;PAP`4A`(4``!"\H``0O$$ZZ6*I03R!O`/0@@&<`
  1809. +M"!:0C2P`U\8J;P#@(`UG!MO&+TT`X"IO`-P@#6<&V\8O30#<W:\`V"IO`.0@
  1810. +M#6<&V\8O30#D(&\`*+'*9P`'QGP`'!HJ;P`L(`UG""!-T<9\`!P0(`9R"I"!
  1811. +M9P`$&G(:D(%G1EF`9P`#\E.`9P`#^E.`9P`!1E.`9P`!-E>`9P`"3G(1D(%G
  1812. +M``$H<AR0@6<``L93@&<``_Q5@&<``,QR'I"!9P`#X&``!H8J;P`H""P``P%/
  1813. +M9S((+``%`4]F!K7-9@`&;"IO`.`@#6<0+PM(>``$+PUA``=03^\`#$*O`.!P
  1814. +M`Q;`8``&T+7-9W00$G(*L`%G;`@L``4!3V9D""P```%/9PYT*;`"5\%$`4B!
  1815. +M2,%@&')<L`%F#A0J``%V*;0#9@1V`6`"=@`B`TJ!9C((+``!`4]G#G1\L`)7
  1816. +MP40!2(%(P6`6<ERP`68,<'RP*@`!9@1P`6`"<``B`$J!9P`%T!;\``-@``90
  1817. +M2J\`W&<2<`JP*O_^9PH(+``%`4]G``6P""P``P%/9R`@;P#L4HBUR&<*""P`
  1818. +M!0%/9P`%E'`"%L`O2P#88``&$!;\``)@``8(""P``@%/9@`%=DJO`-QF"@@L
  1819. +M``4!3V<`!69"+P`S0B\`,G(KO(%6P$0`2("!+P`S=#^\@E;`1`!(@($O`#(@
  1820. +M;P`HL<I7P$0`2(!(P"P`9F1*AF8`!@!\`!P:(`UG"")-T\9\`!P1<"J\@&>V
  1821. +M""P``@%/9@B\@6>JO()GI@@L``(!3V<N<%R\@&8HL<IG``7&>@`:&B`-9P@@
  1822. +M3='%>@`:$+J!9PBZ@F<$58I@""P%8`#_<E.**F\`W"`-9P`%2DHO`#)G%B!-
  1823. +M2&C__4AX``<O"V$`!:1/[P`,5HM+ZP`#+PLO#2\O`.1(>``%80`%PD_O`!!"
  1824. +MKP#D)DU*+P`S9@`%""!O`-PO"TAH``8O"$AX``AA``6<3^\`$%:+8``$ZB!+
  1825. +M4HL0O``)+T@`W&``!-H@32I0#*@``0````1G``4D(&\`]"(H``32@2%!``0,
  1826. +M@0`!``!O"'`!2$`A0``$+R@`!"\03KI5BE!/(&\`]""`9P`$]I"-+`#7QBIO
  1827. +M`.`@#6<&V\8O30#@*F\`W"`-9P;;QB]-`-S=KP#8*F\`Y"`-9P;;QB]-`.0J
  1828. +M;P#T(`N0E7+=TJT`!+"!;@#_=B!+2^@``2](`-QP7K`29@P@2R9-$+P`"U**
  1829. +M8`@@2R9-$+P`"B!*%OP`("](`"1P'W(`(DL2P5'(__PJ;P`L(&\`*+'*9P`$
  1830. +M5'P`'!H@#6<((DW3QGP`'!%P7;R`9@HB;P`D4HFSRF9L<"VP$F9.<%VP*@`!
  1831. +M9T:QRF<`!"!+Z@`!L<UG``061>T``7H`&A4J;P`L(`UG("!-T<5Z`!H08!8@
  1832. +M!N:((@9T!\*"=`$F`N.CAS,(`%*&O(5CYF""(`;FB'0'S()T`>VBA3,(`&``
  1833. +M_W!3*___$"O__V\*2(!(P$HS"/]G[!`K__](@-;`8``#7@@L```!3V8``.I@
  1834. +M``+(""P```%/9@`!5&```KH(+``$`4]F``'*8``"K`@L``$!3V8``;Q@``*>
  1835. +M(&\`*+'*5\!$`$B`2,`L`&8``TY*AF8``UI\`!P:(`9R)Y"!9P`"(E.`9P``
  1836. +MA%.`9P``]E6`9P`"4%V`9P`"$E.`9P`"#%.`9P`"!E.`9P`"`%.`9P`!^E.`
  1837. +M9P`!]%.`9P`![E.`9P`!Z%.`9P`!XE>`9P`!K%6`9P`!KE.`9P`""%>`9P`!
  1838. +MLG(5D(%G``&"<@F0@6<``:I5@&<``91R%9"!9P`!7%N`9P`!`F```>0(+```
  1839. +M`4]F``':*F\`-$'O`-BQS6<``K)P"KZ`;`X@2Q"\``Q4BR`'$4```2!+(DT@
  1840. +M"RQO`/20EB*`6(U'Z0`(("\`X&<&D)92@&`"<``J@":'4H=#ZP`(("\`V)"6
  1841. +M)T``!$*O`.!"KP#<)D@O2P#8+TD`-&```?X(+````4]F``%B*F\`-$'O`#BQ
  1842. +MS6<``BY9C2)O`/0@4='5+T@`V"`O`.!G$"\+2'@`!"\`80`"-D_O``P@+?_\
  1843. +M<@JP@6P0($L0O``-5(L@+?_\$4```5&-0J\`X"`59PXB;P#T(E'3P%.)+TD`
  1844. +MX%F-+&\`]")6T]4O30`T+TD`W&```7H(+``!`4]F``#>+PM(:P`&+R\`X$AX
  1845. +M``5A``(&3^\`$$*O`.1+ZP`#)F\`X"`+9Q`O#4AX``0O"V$``:Y/[P`,1^T`
  1846. +M`T*O`-PO2P#8+TT`X&```28@2U*+$+P`%"](`-Q@``$6($M2BQ"\`!4O2`#<
  1847. +M8``!!A;\`!9@``#^%OP`%V```/86_``88```[A;\`!E@``#F%OP`$F```-X6
  1848. +M_``38```UBH&<#":@+J'9$(J;P`T48U@"B`5L(5G-)K\`!!![P`XN\AB[B!+
  1849. +M$+P`#E2+$44``2](`-Q@``">""P``@%/9@#ZF"`-9P;;QGP`'!4J;P#D(`UG
  1850. +M8A`52(`@3=#`0^@``;/+9E)R?[`!9TP0$G(JL`%G1')>L`%G/@@L``(!3V<>
  1851. +M<ERP`684$BH``70KL@)G!G8_L@-F!'(!8!AR`&`4<BNP`6<*<C^P`6<$<`!@
  1852. +M`G`!(@!*@6<:+TL`W'`!(&\`W!"`2^L``2]-`.14BW(`&H$6QE(5*F\`]+7O
  1853. +M`"AF`/?P)&\`X"`*9Q`O"TAX``0O"F$``%)/[P`,0>\`.")O`#2SR&82(`N0
  1854. +ME2M```AP`&`J0>P!4&`B0>P!;&`<0>P!>F`60>P!B&`00>P!K&`*0>P!OF`$
  1855. +M0>P!VB`(3-]L[-[\`,1.=;_L#'QE`$^62.<A%!XO`!LF;P`<*F\`%$/5$L=!
  1856. +M[0`#(`N0B"(`=`!&`L*"$L'@@!+`3-\HA$YU(`^0?``,L*P,?&4`3UA(YP$T
  1857. +M'B\`%RIO`!@F;P`@5HLD;P`@8`93BU.*%I*US6;V$`=(@$C`+TT`%"]``!A,
  1858. +MWRR`8(0@#Y!\`5BPK`Q\90!/%)[\`4Q(YS$V*F\!;"9M``PD52!*T>T`"")M
  1859. +M`!!-[P`H+T@`("])`!PO3@`D,#P`_W(`+$L<P5'(__P;?``!`!1"+0`58``"
  1860. +MUB!O`""QRF8.(&\!;!%\``$`%6```L8J;P`<<``0&E.`;0`"G`R`````&6P`
  1861. +M`I+00#`[``9.^P`$`#`"F@!:`(H!!`"*`(H`B@%(`;`"!@$T`30!.@*:`IH"
  1862. +MF@*:`IH!<`&0`IH"F@*:`IH@#6<6<``0*@`!<@`2-0``=`$7@A``8``"/'``
  1863. +M$"H``1>\``$``&```BP@#6<.<``0+0`*<@$7@0``8`9P`1=```HJ;P%L<`&P
  1864. +M+0`59P`"!AM\``(`%6```?P@;P%L$7P``0`5$"H``4B`2,#A@'(`$A(D`78`
  1865. +M1@/$@]2`(`)2@"!*T<!%Z``!2H)N``'><`6P$F8``=80*@`"2(!(P.&`<@`2
  1866. +M*@`!PH/2@%*!($K1P47H``(J;P`D0>\`*+'-9P`!JB!5L<IF``&B68TO30`D
  1867. +M8``!F"!*5(I8KP`D$"@``4B`2,#A@'(`$A`D`78`1@/$@]2`T<)#Z``"+&\`
  1868. +M)"R)8``!:%**8``!8G`!(&\!;!%``!470``*?@!P"KZ`9P87O``!>`!2APR'
  1869. +M```!`&WJ(&\!;$HH`!5G``$:8``!,GX`<`%![!%0L#!X`&8$%X!X`%*'#(<`
  1870. +M``$`;>9@``#V?@!P`4'L$5"P,'@`9P07@'@`4H<,AP```0!MYF```-9+Z@`!
  1871. +M<``0$B(`YX$N`5.')&\`'&`X(`=R"$ZZ2]!P`20`XZ(@!W((3KI+PA(U"`#"
  1872. +M`F<8(`IG#G``$#)X`'(!%X$``&`&%[P``7@`4X=*AVK$8```@'``$!(N`.>'
  1873. +M8!H@#6<.<``0-7@`<@$7@0``8`87O``!>`!2APR'```!`&W>2^H``7``$!(B
  1874. +M`.>!+@%3AR1O`!Q@."`'<@A.NDM.<`$D`..B(`=R"$ZZ2T`2-0@`P@)F&"`*
  1875. +M9PYP`!`R>`!R`1>!``!@!A>\``%X`%.'2H=JQ"IO`"1![P`HL<UG$"!-68@D
  1876. +M52](`"0@"F8`_2A,WVR,WOP!3$YU(`^0?``DL*P,?&4`2]HO!R`O`!@B+P`4
  1877. +M+B\`$"!O``PB;P`(+P<O+P`@+P`O`2\'+PAP`"\`+P`O"6$```I/[P`D+A].
  1878. +M=2`/D'P`++"L#'QE`$N4GOP`#$CG+S0J+P!(+"\`1"XO`#@J;P`P)FT`#"1M
  1879. +M`!`H!]BO`$`O1``D(@MG#DHM`!1F""\-80#\.EA/("T`"&\4(%5P$K`09@Q*
  1880. +MA6\(2H9N``$^>@$@"V<``-*\A&P``,QP`;`M`!5G``#"2H5O8G@`+T4`(+R'
  1881. +M;`XB!M*%LH=M!B@%F(?8AKR';0@@;P`\D<=@!"!O`#31QBI((@IG'&`"4X6Z
  1882. +MA&\B<``0'7(`$C(``$HS$`!GZF`04X6ZA&\*<``0'4HS``!G\-RO`""<A6!:
  1883. +MO(=M$B`&D(<@;P`\$C`(`!]!`"M@#"!O`#00,&@`'T``*W#_P"\`*R(*9QAR
  1884. +M`!(`=``4,A``2C,@`%?!1`%(@4C!8!)R`!(`2C,0`%?`1`!(@$C`(@!*@69,
  1885. +M*"\`)"IO`#!*A6L.N(9F"B`+9P9*+0`59THO+P!0+R\`4"\&+R\`3"\O`$PO
  1886. +M!R\O`$PO#6$``'9/[P`@2H!K#%2`9@1P_F`>(`9@&DJ%9Q1*A6\(4X52AF``
  1887. +M_M!2A5.&8`#^R'#_3-\L]-[\``Q.=2`/D'P`(+"L#'QE`$GJ("\`$"(O``P@
  1888. +M;P`((F\`!"\!+R\`&"\`+P$O"'``+P`O`"\)80``"$_O`"!.=2`/D'P#++"L
  1889. +M#'QE`$FNGOP#'$CG/S8N+P-0+"\#6"HO`V0L;P-((%8O2`-`T>X`"")N`!!-
  1890. +M[P"P+T@`/$'O`S`D;P-,2^\`I"K(+TD`,"K.*LY*AF80($HL!Y7*+TH#3'X`
  1891. +M+T@#5"I*V\<@329O`U0L2]W&+T@`-"].`#BZAVX.($K1Q2]+`S@O2`,\8`XO
  1892. +M30,\($O1Q9''+T@#.'H`2^\`5#1\__\JRE*%<`JZ@&7V*B\#7+J';@X@;P-,
  1893. +MT<4O;P,\`S!@#"!+T<61QR]O`S@#,"](`S0F;P-`)&\#-"IO`S"W[P`\9@``
  1894. +MU"9O`V`J+P-<(`MG``"F)H6[[P,\9@PB"I*O`TPG00`H8`P@"I"O`U30AR=`
  1895. +M`"AX`4?O`%@P?/__+T@`+"!++`3EAB)3+&\`++W)9@QP_R)O`V`C@&@`8$Q'
  1896. +M[P!\U\8B3]+\`$I*,4@`9P@B$Y*O`TQ@""(3DJ\#5-*'(F\#8".!:``F2"!/
  1897. +MT/P`0$HP2`!G#"(3DJ\#3".!:"A@#"`3D*\#5-"'(X!H*%*$6(MP"KB`;8J[
  1898. +M[P,\9@P@"I"O`TR0A6``!]P@"I"O`U30AY"%8``'SB!+0^@``29O`SAP`!`0
  1899. +M+TD#0%.`;0`'9`R`````&6P`!UK00#`[``9.^P`$!M0"7@)T!$@"L@1$`U`$
  1900. +M<@&6`<P!S``P`&@`H`=,!TP'3`:L!K@&7`:,!9P%\@38!3H@;P-`<``0$$C`
  1901. +M(@#E@4/O`'S3P2**4J\#0+OO`SQ7P$0`2(!(P'(`$A`@3]#\`$H1@!``8`#^
  1902. +MAB!O`T!P`!`02,`B`.6!0^\`5-/!(HI2KP-`N^\#/%?`1`!(@$C`<@`2$"!/
  1903. +MT/P`0!&`$`!@`/Y.>``@;P-`&!@@!.6`0^\`?"9Q"``O2`-`($_0_`!*$C!(
  1904. +M`")/TOP`0+(Q2`!F"D'O`%31P")08`0B;P,\)$E@'B!O`SBQRF<:(`3E@$'O
  1905. +M`%31P"I(M=5G"B9O`U0D5;?*9]XJ;P,TM\IF&F``_>`@;P,X(F\#,+/(9P`&
  1906. +M.BIO`U0O2`,PN^\#,&?D*B\#,"(-FH$@"B0+D(*Z@&\"*@`@+P`P9Q(O`"\%
  1907. +M+P(O`6$`!EI/[P`08!P@!2!-(D)R`$J`9PX2&)(99@13@&;V2(%(P2`!2H!F
  1908. +M``7>($W1Q=?%+T@#-&``_WJ[RV<`!<HD;P-4*DLO30,PM<UG[$OJ``$F;P`P
  1909. +M(`MG$"]-`S1P`!`2<@`2,P``8`HO30,T<``0$B(`<`JR@&8`_29@``6*>`!P
  1910. +M"R!O`T"P*/__9A1X`6`0N\MG``5R)&\#5"I++TT#,+7-9^PJ;P`P(`UG#'``
  1911. +M$!)Z`!HU``!@!'H`&A(J;P-`<``0%2(`YX&Z@6PH(`5R"$ZZ1+QP`20`XZ(@
  1912. +M!7((3KI$KA(U"`'"`F<*2H17Q$0$2(1(Q'``$!52@"!-T<`O2`-`2H1G``4`
  1913. +M0>H``6``_(RU[P-,9P#\B'`*L"K__V8`!.9@`/QZ(&\`.+'*9P#\<+7O`#1F
  1914. +M%DJ&9PYP"B!O`U2P$&<$<@!@$G(!8`YR"K(25\!$`$B`2,`B`$J!9P`$J&``
  1915. +M_#PJ;P"D)F\`J+?-9EHJ#9JO`*SDA2(L`>S2@;J!;P9P_F``!,HH!=B$(`3E
  1916. +M@"\`3KHC;"I`(@7E@2Z!+R\`L"\`3KI%C$_O``PB"Y*O`*SD@>6!)DW7P2`$
  1917. +MY8`@3='`+TT`K"](`*0@;P-`5*\#0!`H``%(@$C`X8!R`!(0)`%V`$8#Q(/4
  1918. +M@-'"0^@``B:)0>L`""=*``0O2`"H8`#[GB!O`T`0*``!2(!(P.&`<O_"$'0`
  1919. +M%`'4@"H"1>@``BI*)F\`/&`"4HV[RV<.$!5R#;`!9_)R#+`!9^R[RV<``)@0
  1920. +M%7(!L`%G"'0#L`)F``".5P!F!'`*8`9P`!`M``(H`"I*V\40+0`#L`%F$G(`
  1921. +M$BT`!;*$9PAR!A5!__U@7G(*L`%G!G(+L`%F4G(+L`%7P$0`2(!(P"H`<``0
  1922. +M+0`$YX"X@&PN(`1R"$ZZ0N)P`>.@'T``*"`$<@A.ND+2$B\`*!0U"`7$`6<*
  1923. +M2H57Q40%2(5(Q4J%9@9P!A5`__T@2E6(+T@#0'`&L"C__V<($7P`!/__8`11
  1924. +MKP"H(&\#0!`H``%(@$C`X8!R`!(0=`!&`L*"TH!2@='!0^@``2])`T!@`/I\
  1925. +M*F\`I"1O`*BUS69()F\`K"H-FHODA2@%V(0@!.6`+P!.NB&Z*D`B!>6!+H$O
  1926. +M"R\`3KI#W$_O``P@"I"+Y(#E@"1-U<`@!.6`($W1P"]-`*PO2`"D0I)!Z@`(
  1927. +M0JH`!"](`*A@`/]R(&\#3+'*9P#Z#"!O`#BQRF<`^@(J;P`TM<UF!DJ&9P#Y
  1928. +M]+7-9@IP`"!O`U00$&`$<``0$G0!0>P14+0P"`!7P40!2(%(P7``$"K__[0P
  1929. +M``!7PD0"2()(PK2!9P`"(&``^;0@;P-,L<IG``(2(&\`.+'*9P`"""IO`#2U
  1930. +MS68&2H9G``'ZM<UF"G``(&\#5!`08`1P`!`2=`%![!%0M#`(`%?!1`%(@4C!
  1931. +M<``0*O__M#```%?"1`)(@DC"M(%G`/E68``!NB!O`#BQRF<``;`J;P`TM<UF
  1932. +M!DJ&9P`!HKO*9@8@;P-48`(@2G``$!!R`4'L$5"R,```9@`!A+7O`TQG`/D4
  1933. +M<``0*O__<@%![!%0LC```&<``6A@`/C\(&\#3+'*9P`!6G``$"K__W(!0>P1
  1934. +M4+(P``!F``%&(&\`.+'*9P#XU"IO`#2US68&2H9G`/C&M<UF"G``(&\#5!`0
  1935. +M8`1P`!`2<@%![!%0LC`(`&<``0Y@`/BBN\MG``$$)&\#5"I++TT#,+7-9^Q!
  1936. +MZ@`!<``0$B](`S1![!%02C```&8`^'9@``#:N\MG``#4)&\#5"I++TT#,+7-
  1937. +M9^Q!Z@`!<``0$B](`S1![!%02C```&<`^$9@``"JM>\#3&8``*)@`/@V(&\`
  1938. +M.+'*9P#X++7O`#1F``",2H9F``"&8`#X&GH`(&\#0!H8+T@#0$JO`#!G2&`.
  1939. +MN\MG:"1O`U0J2R]-`S"US6?N<``0&B!O`#`4,```(F\#0+095L%$`4B!+TD#
  1940. +M0$H!9CI3A6;88"R[RV<P)&\#5"I++TT#,+7-9^X2&B!O`T"R&%;`1`!(@"](
  1941. +M`T!*`&8,4X5FXB]*`S1@`/>:*F\`J"!O`*RQS6<\2JW_^&8(48TO30"H8.8@
  1942. +M;?_\(DU1B2]1`T`O2`,T+TD`J+'O`TQE`/=DL>\`-&(`]UPO;P,\`S!@`/=2
  1943. +M</],WVS\WOP#'$YUO^P,?&4`0")(YR$T+B\`("IO`"0F;P`8)&\`'&`8<``0
  1944. +M&G(`$AL4-1``M#4``&<$<`%@"%.'2H=FY'``3-\LA$YU(`^0?``,L*P,?&4`
  1945. +M/]HO#2IO``@@#682("P24&8(0>P!\"`(8%QP`&!82JP24&8X2'@`R$ZZ0KA8
  1946. +M3RE`$E!F"$'L`A`@"&`Z*7P```#($E1(>`$`3KI"F%A/*4`27&8(0>P"(B`(
  1947. +M8!H@34H89OQ3B)'-2&P24"\(+PUA`.;,3^\`#"I?3G4@#Y!\`!BPK`Q\90`_
  1948. +M5")O``0@24H89OQ3B)')<``O`"\(+P`O""\)2&P24&$`\TQ*@%K!1`%(@4C!
  1949. +M3^\`&"`!3G4``+_L#'QE`#\62.<!!"XO`!`J;P`,8!`0%4B`2,"PAV8$(`U@
  1950. +M"%*-2A5F['``3-\@@$YUO^P,?&4`/N1(YP,4+B\`'"9O`!@J;P`4?`!@"!>U
  1951. +M:`!H`%*&O(=M]$S?*,!.=2`/D'P`#+"L#'QE`#ZP2.<!%"IO`!`N+!)TGJP2
  1952. +M<.6'+P=.NAT6)D`B+!)PY8$@3='!+H<O`"\(89@@+!)T(@#E@2!-T<$B+!)P
  1953. +MY8$B3=/!(BP".)*`Y8$N@2\)+PAA`/]R(BP2<-*L`CB2K!)TY8';P2Z'+PTO
  1954. +M"V$`_U@@+`(X2^P2<"(=TH"2E4_O`!PJP"E!$G!,WRB`3G4@#Y!\`"2PK`Q\
  1955. +M90`^%I[\`!!(YS\T*F\`1$*L`C1*K`(X9E1P`2E``CA"K!)H*4`2<"E`$G0@
  1956. +M;P!`$A!T+;("9@QT`BE"$FQ2KP!`8"IT*[("9@I"K!)L4J\`0&`:2&P"0$ZZ
  1957. +M0QY83TJ`9P9"K!)L8`9P`2E`$FPN+P`X2JP2:&<*(&P2:$H09@`!7'`!L*P2
  1958. +M;&9R("P2="(L$G"R@&<2L*P".&<,+R\`/&$`_KI83V`,(BP".+"!9P0I01)P
  1959. +M(BP"..6!)F\`/-?!8`92K`(X6(L@+`(XL(=L)"!+)%`0$G(ML`%F"")02BD`
  1960. +M`680(@UGVG(KL`%FU$HJ``%GSB`L`C@I0!)T("P".+Z`9U#E@$AL`E`@;P!`
  1961. +M+S`(`$ZZ/7!03TJ`9CA2K`(X("P2="(L$G"R@&<2L*P".&<,+R\`/&$`_B18
  1962. +M3V`,LH!F""`L`C@I0!)P(`<I0`(X*4`2="`L`CBPAV86("P2<"(L$G2R@&<$
  1963. +M*4`".'#_8``$9"(L`CCE@2!O`#PD<!@`%!)V+;0#9@HB<!@`2BD``68NNOP`
  1964. +M`&<,=BNT`V8&2BH``68<2JP2;&8&</]@``0F4JP"."EP&``"-'`!8``$%E**
  1965. +M(`UG#!`2<BVP`68$=`%@`G0`(DK3PBE)$F@@#6<``M(@+`(X(@#E@2!O`#PD
  1966. +M<!@`$!)T+;`"9A`@<!@`M"@``6<.2J\`3&8(<BNP`68``J(D;!)H0J\`+'P`
  1967. +M0J\`*&`"4HH0$F<&<CVP`6;T+TT`,'H`8&(@"I"L$F@O`"\L$F@@;P`X+Q!.
  1968. +MNCP*3^\`#$J`9CPN"IZL$F@@;P`P+Q!.NCO&6$^^@&82(&\`,"@%<`$O0``L
  1969. +M+T@`*&`D2J\`*&8,(&\`,"@%+T@`*&`"?`%P$-&O`#!2A2!O`#!*D&:62H9G
  1970. +M1$JO`"QF/DJL`CQG("(L`CCE@2!O`#PO,!@`+Q!(;`)42&P,"$ZZ0:!/[P`0
  1971. +M+RP2:$ZZ.U+1K!)H4JP".%A/<#]@``+N+B\`.$JO`"AG``$:4JP".$H29W@@
  1972. +M;P`H2J@`!&<,0^H``2E)`C1@``#`2JP"/&=((BP"..6!(F\`/"1Q&/QP+;`J
  1973. +M``%F%B\0+Q%(;`)R2&P,"$ZZ02Y/[P`08!P0$DB`2,`O$"\`+Q%(;`*@2&P,
  1974. +M"$ZZ01!/[P`4+RP2:$ZZ.L+1K!)H6$]P/V```F)P`2!O`"BPJ``$9E`B+`(X
  1975. +MLH=L$E*L`CCE@2!O`#PI<!@``C1@-DJL`CQG'.6!(&\`/"\P&/PO$$AL`LY(
  1976. +M;`P(3KI`M$_O`!`O+!)H3KHZ9M&L$FA83W`_8``"!B\L$FA.NCI26$_1K!)H
  1977. +M)&\`2"`*9P(DA"!O`"@@*``(9PXB*``,($`@@7``8``!UB!O`"@@*``,8``!
  1978. +MRDJO`$QG-B(L`CCE@2!O`#PD<!@`<"VP*@`!9R!P*[`29QH@;!)H$!!(@$C`
  1979. +M+P`O+P!$80#ZO%!/2H!F:DJL`CQG3"(L`CCE@2!O`#PD<!@`<"VP*@`!9A@O
  1980. +M+!)H+Q!(;`+T2&P,"$ZZ/_9/[P`08!X0$DB`2,`O+!)H+P`O$$AL`Q1(;`P(
  1981. +M3KH_UD_O`!0O+!)H3KHYB-&L$FA2K`(X6$]P/V```21+[!)H(%40&"J('T``
  1982. +M)TB`2,`O`"\O`$0JR&$`^BY03R1`(&P2:$H09@12K`(X(`IG"A`O`"=R.K`!
  1983. +M9E)*K`(\9T80+P`G<B"P`6T&<G^P`6T:2(!(P"\`(&\`0"\02&P#-$AL#`A.
  1984. +MNC]08!A(@$C`+P`@;P!`+Q!(;`-B2&P,"$ZZ/S9/[P`0<#]@``"6<#JP*@`!
  1985. +M9@``A+`J``)F'B!L$F@0$&<**4@"-%*L`CA@!$*L`C23R2E)$FA@7B!L$FA*
  1986. +M$&<**4@"-%*L`CA@2"`L`CBPAV8N2JP"/&<@$"\`)TB`2,`O`"!O`$`O$$AL
  1987. +M`X)(;`P(3KH^PD_O`!!P/Q]``"=@$E*L`C@B`.6!(&\`/"EP&``"-$*L$F@0
  1988. +M+P`G2(!(P$S?+/S>_``03G4@#Y!\`!BPK`Q\90`X+B`O``0@;P`,(F\`"$*G
  1989. +M0J="IR\(+PDO`&$`^?!/[P`83G4``"`/D'P`$+"L#'QE`#?\*7P``"``$I!P
  1990. +M8.^(+P`I0!*(3KHZ[EA/*4`2@&8J(BPM3.6!0>P)_B\P&``O+!)\2&P#K$AL
  1991. +M#`A.NCX22'@``DZZ/1Q/[P`43G4@#Y!\`!2PK`Q\90`WI$CG)A0L+P`8("P2
  1992. +MB)"&L*P2D&)@8!0B+!*(TH$D+!*0U((I01*(*4(2D"`L$HB0AK"L$I!CX"\L
  1993. +M$H@O+!*`3KHX/E!/*4`2@&8J(BPM3.6!0>P)_B\P&``O+!)\2&P#R$AL#`A.
  1994. +MNCV.2'@``DZZ/)A/[P`4("P2A"(L$HS2@)*&*@8J;!*`)DW7P)?&*4$2C&`"
  1995. +M&ML@!5.%2H!F]BE&$H1*K!*<9P1P`&!\(&P2@-'L$H0O+!*0+P@O+!*43KHL
  1996. +MX$_O``PL`&PV0>P$`"`L$IAG`B!`(BPM3.6!0^P)_B\Q&``O""\L$GQ(;`/D
  1997. +M2&P,"$ZZ/0)/[P`4<`$I0!)X2H9F'B`L$H1O&'(*(&P2@+(P"/]G#'P!=`$I
  1998. +M0A*<$8$(`-VL$H0@!DS?*&1.=2`/D'P`#+"L#'QE`#9J2.<'!"PO`!PN+P`8
  1999. +M*F\`%'H`2JP2M&<44H5R"K(=5L!$`$B`2,!F\&```.(@+!*89QY*K!*L9AAR
  2000. +M.DJ&9@)R+2\!+P!(;`0(3KH]!$_O``Q*K!*H9R)P.DJ&9@)P+2(-DJP2@-*L
  2001. +M$HPO`"\!2&P$#DZZ/-Q/[P`,2JP2L&<8<#I*AF8"<"TO`"\'2&P$%$ZZ/+Y/
  2002. +M[P`,4H4(+``!#`%G3%*L"_(@+`ORL*P+^FXF(&P+ZE*L"^H0%1"`<@JP`68^
  2003. +M""P`!@P!9S9(;`OF3KI`XEA/8"I3K`OR$!5(@$C`2&P+YB\`3KH\LE!/8!(0
  2004. +M%4B`2,!(;`OF+P!.NCR>4$]R"K(=5L!$`$B`2,!FBD*L$VPI31-H(`5,WR#@
  2005. +M3G4@#Y!\`)BPK`Q\90`U0)[\`'A(YR\T?@!\`'`!+T``E'H`0J\`A$*L$VQ@
  2006. +M``24)FP2@-?L$H1@`E.+M^P2@&,(<`JP*___9O`@2R](`"@B;!*`M\EF""XL
  2007. +M$H1@``1D$!,I21-HT\8J22]-`(@H+P"4'T``+&```O0D2V`"4XJUS6,(<`JP
  2008. +M*O__9O(@2BI+)F\`*"](`"2[RV0.<@JR'5;`1`!(@$C`9NX@32](`"Y*KP"0
  2009. +M9P``XGH`+`V<BE.&8```QB`&D(5(;P`T+P`O!2\&+PI(;!-23KKHCD_O`!@N
  2010. +M`%*`9P``J"`O`%R0ARH`2JP2O&<,2H=F``"4NH9F``".2JP2N&<``)!@=$J'
  2011. +M;R00,GC_<G^P`6(0=``4`'`'0>P*O<`P*`!F6A`R>/]T7[`"9U#:A[J&;%X0
  2012. +M,E@`<G^P`6(0<@`2`'`'0>P*O<`P&`!F"A`R6`!R7[`!9CH@!5.`+P!(;P`X
  2013. +M+P<O!B\*0J="ITAL$U).NNH<3^\`("H`2H5NB"H'4H6ZAF\`_SB[RV8``=I@
  2014. +M``'X+B\`C"HO`(0F;P"(2JP2P&8``,12AR]'`(Q@%B`$4H1"IR\`+PMA`/T8
  2015. +M3^\`#-?`4X5*A6<$M\IEXBHL$J1@%K7L$VAC"E.*<`JP*O__9O!3KP"44X5*
  2016. +MA6\&M>P3:&+@2JP2I&8&2JP2H&<B2JP2M&8<2JP$&F862JP3;&8&M>P3:&,*
  2017. +M2&P$'DZZ+<183T*L!!HJ;P`D8!@@+P"44J\`E$*G+P`O"F$`_)A/[P`,U<"U
  2018. +MS67D("\`E%*O`)1(>``!+P`O"F$`_'I/[P`,+VP2H`"$8```[+?*9B)*A6\6
  2019. +M4X5"IR\O`)@O"B]%`)!A`/Q23^\`#%*O`)1@``#&M<MC``"\*DLJ+!*D8!2[
  2020. +M[!-H8PI3C7`*L"W__V;P4X13A;OL$VAC!$J%9N)*K!*D9@9*K!*@9R)*K!*T
  2021. +M9AQ*K`0:9A9*K!-L9@:[[!-H8PI(;`0J3KHL_%A/0JP$&F`4(`12A$*G+P`O
  2022. +M#6$`^]A/[P`,V\"[RV7H8!A2AR`$4H1(>``!+P`O#6$`^[I/[P`,V\"[RF7D
  2023. +M+T<`C$JL$J!G&D*G+R\`F"\*80#[FD_O``P@+!*@4X`O0`"$4J\`E&`$3KHI
  2024. +M("@O`)0J;P`N+TT`B"9O`"B[RV<B2&\`D$AO`)A"IR\++PU(;!+(80`'^$_O
  2025. +M`!@F0$J`9@#\[BIO`"@:KP`L*B\`C"9O`(A*K!+`9BXN+P"$8!H@!%*$0J<O
  2026. +M`"\+80#[(D_O``S7P%.'+T<`A+?-9```MDJ'9MQ@``"NN\MC``"H)$LN+!*D
  2027. +M8!2U[!-H8PI3BG`*L"K__V;P4X13A[7L$VAC!$J'9N)*K!*D9@9*K!*@9R)*
  2028. +MK!*T9AQ*K`0:9A9*K!-L9@:U[!-H8PI(;`0V3KHKOEA/0JP$&F`4(`12A$*G
  2029. +M+P`O"F$`^II/[P`,U<"URV7H8!A2A2`$4H1(>``!+P`O"F$`^GQ/[P`,U<"U
  2030. +MS67D+VP2H`"$?``B#9*L$H`N+!*$GH%@1"XL$J0D36`0M>P3:&,*4XIP"K`J
  2031. +M__]F\+7L$VAC""`'4X=*@&;B+`TB"IR!(`&0K!*`+BP2A)Z`LJP3:&,&<`$I
  2032. +M0!-L+T4`C"\'80#XU%A/2H!N`/M>(`5,WRSTWOP`>$YU(`^0?``,L*P,?&4`
  2033. +M,&(O+!)\2&P$0DAL#`A.NC:D2'@``DZZ-:Y/[P`03G4@#Y!\`2BPK`Q\90`P
  2034. +M-I[\`11(YR\T+B\!.$*O`3";S9?+?`!Z`$*O`2PD;P$\2'@`+R\23KHP,%!/
  2035. +M2H!G#"!`0^@``2E)$GQ@!"E2$GQ"K`(\8``"*B`$<C"0@6<``*93@&<``*!3
  2036. +M@&<``)I3@&<``)13@&<``(Y3@&<``(A3@&<``()3@&=\4X!G>%.`9W1=@&=H
  2037. +M58!G``"84X!G``"Z4X!G``#<<A.0@6<``.)R#)"!9P``[E.`9P``\E6`9P``
  2038. +M^%.`9P`!`E6`9P`!#%.`9P`!$%>`9P`!7%6`9P`!8%N`9P`!8E>`9P`!9%.`
  2039. +M9P`!9E.`9P`!:&```6QA`/[68``!?$/L$J`@$2(`Y8'2@-*!TH1P,)*`(L$B
  2040. +M&20!Y8+4@=2"U(24@"E"$J1@``%02&P2H$AL!-0O+`(T3KHTO$_O``Q*@&<(
  2041. +M("P2H&H``3!A`/Z"8``!*$AL$J1(;`38+RP"-$ZZ-)1/[P`,2H!G""`L$J1J
  2042. +M``$(80#^6F```0!P`BE`$J0I0!*@8```\DAL!)M(;`3<2&P,"$ZZ-/A@``#:
  2043. +M<`$I0!*H8```U'P!<`$I0!*T8```R"`+9P1A`/X6*FP"-&```+@@#6<$80#^
  2044. +M!B9L`C1@``"H<`$I0!*L8```GG`!+T`!,'@`0>P*O0@P``!(`&<>"#```$@`
  2045. +M9P@@!'(@T(%@`B`$($_0_``L$8!(`&`,(`0@3]#\`"P1@`@`4H0,A````0!M
  2046. +MP$'O`"PI2!-B8$IZ`7`!*4`2M&!`<`$I0!*P8#AP`2E`$K1@,'`!*4`2P&`H
  2047. +M<`$I0!*X8"!P`2E`$KQ@&"\L$GQ(;`3@2&P,"$ZZ-"!A`/U<3^\`#$AL!+0O
  2048. +M"B\'3KKU@$_O``PH`%*`9@#]PB\O`3!(>``4+T8`,"]%`"Q.NJ@@2'@`%$ZZ
  2049. +MU-Y/[P`,(`MG``#$2&P$_"\+3KH[/E!/)$!\0.6.>@!*@&8L(BPM3.6!0>P)
  2050. +M_B\P&``O"R\L$GQ(;`3^2&P,"$ZZ,Z)(>``"3KHRK$_O`!A(>`$`3KHP1%A/
  2051. +M8!H@15*%(@@;A!@`NH9F#MR&+P8O#4ZZ+?Q03RI`""H````;9R93J@`(;18(
  2052. +M*@`-`!YF#B!J``12J@`$<``0$&`2+PI.NC666$]@""\*3KHUC%A/*`!2@&:H
  2053. +M+PI.NCCV6$]*A6\*<`JP-5C_9@)3A2P%8#(@#68B("P".+"';01A`/Q((BP"
  2054. +M.%*L`CCE@2IR&``@34H89OQ@!B!-2AAF_%.(D<TL"$JL$KAF"$JL$KQG``".
  2055. +M(`9R,M"!+P!.NB^"6$\F0$JL$KAG#$'L!0HB2Q+89OQ@"D'L!1XB2Q+89OP@
  2056. +M2TH89OQ3B)'+*`@@"")+T\`O!B\-+PE.NBSN3^\`#-B&)$O5Q$JL$KAG#$'L
  2057. +M!2(B2A+89OQ@"D'L!38B2A+89OP@2DH89OQ3B)'*V(A(>``!2&P2R"\$+PM.
  2058. +MNLAJ8!!(>``!2&P2R"\&+PU.NLA83^\`$$AL$U(O!B\-3KK3/$_O``Q*@&<(
  2059. +M+P!A``'$6$]*K!*P9F)*K!+`9EP@+!-.9QYR,K"!9QA"ITAL$QQ.NBO,4$]%
  2060. +M[!,<U>P33K"*9P9"K!+$8#)"$DAL!3I.NB!*6$]*@&<.2&P3'$AL!41.NB9(
  2061. +M4$\O+P$P2&P3'&$``R903W`!*4`2Q"`'D*P".'("L(%L!G`!*4`2K&$`\T0L
  2062. +M+P`H*B\`)+ZL`CAO``#.)&\!/&```+I"K!*<0JP2C"(L`CA2K`(XY8$@<A@`
  2063. +M<``O`"\`+P@I2!*83KH8ND_O``PI0!*4:BXB+"U,Y8%![`G^+S`8`"\L$I@O
  2064. +M+!)\2&P%5DAL#`A.NC$T3^\`%'`!*4`2>&!:80#UAB@`9P9P`2]``2PO+!*4
  2065. +M3KH'4%A/2H9G*$JL$JQF%"\$+RP2F$AL!6).NB5V3^\`#&`D+P1(;`5J3KHE
  2066. +M9E!/8!9*A6<22H1G#B\L$IA(;`5N3KHE3E!/("P".+"';0#_0&`R80#U("@`
  2067. +M9P9P`2]``2Q*AF<.+P1(;`5R3KHE)%!/8!)*A6<.2H1G"DAL!79.NB386$]*
  2068. +MK!)X9PI(>``"3KHOE%A/2J\!+&<(0J=.NB^&6$](>``!3KHO?%A/<`%,WRST
  2069. +MWOP!%$YU(`^0?``0L*P,?&4`*?P@;P`$+P@O+!)\2&P%@$AL#`A.NC`XWOP`
  2070. +M$'`"+T``!$[Z+SP@#Y!\`!RPK`Q\90`IREE/2.<!-"XO`"0J;P`<)DTD;P`@
  2071. +M2JP2Q&9J1^\`'";-)LHFQTS?+(!8CT[ZQ"(F2BIO`!Q@`E.+M\UC!G`*L!-F
  2072. +M]"I*)&\`(&`"4HV[RF0&<`JP%6;T4HT0%4(5+R\`+"\O`"PO!R\-+PLO+P`L
  2073. +M'T``*$ZZP]I/[P`8&J\`$$J`9A@F32`*D(TO`"\+80``%%!/)$!*@&:6<`!,
  2074. +MWRR`6$].=2`/64"PK`Q\90`I'%E/2.<"-"PO`!PJ;P`8("PK^+"&;@``MB9-
  2075. +MU\8@+"OX(@#E@;R!;PH@2Y'!+T@`$&`$+TT`$"1-U<!3BBIO`!!@(-7&<``0
  2076. +M$DC`Y8!#[!-PU?$(`'``$!)(P"(`Y8'5\1@`M<UD&'``$!)(P"(`Y8%![!-P
  2077. +M+#`8`&;(8`)2BK7+9!1P`!`22,`B`.6!0>P3<$JP&`!FYK?*9S(L+"OX4X8J
  2078. +M2E.&;1A3C7``$!5![!=P$C```$/L&'"R,6@`9^1*AFL&4HI@`/]V(`I@`G``
  2079. +M3-\L0%A/3G4@#Y!\``RPK`Q\90`H.$CG+A0L+P`@*F\`'"!-2AAF_%.(D<TI
  2080. +M2"OX2H9G4GH`*`A@1B9-U\40$TB`2,!![`J]"#````@`9QX(,```"`!G#!`3
  2081. +M2(!(P'(@T(%@#A`U6`!(@$C`8`00-5@`2(!(P$'L&'`1@%@`4H6ZA&VV8!(O
  2082. +M+"OX+PU(;!AP3KHH:D_O``QZ`$OL$W`H+"OX*L0@!4'L%W`1@`@`4H4,A0``
  2083. +M`0!MZGH`*"PK^%.$8")P`$'L&'`0,%@`2,`B`.6!("PK^)"%4X!![!-P(8`8
  2084. +M`%*%NH1MVDOL&&_;["OX<``0%4C`Y8!![!-P0K`(`$J&9P``I'P`8$)'[!AP
  2085. +M<``0,V@`0>P*O0@P``$(`&<J"#```0@`9PIR`!(`=""2@F`$<@`2`"`!Y8`B
  2086. +M+"OXDH93@4'L$W`A@0@`4H:\A&VZ<``0%4'L"KT(,``!"`!G(`@P``$(`&<*
  2087. +M<@`2`'0@DH)@!'(`$@#E@4'L$W!"L!@`?$%![`J]"#```&@`9P@@!G(@T(%@
  2088. +M`B`&0>P7<!&`:`!2AG!:O(!OVDS?*'1.=0``2.<@,B!O`!A#[P`<1?H`'"9O
  2089. +M`!0D"RQY````!$ZN_?8@"Y""3-],!$YU%L!.=0``3KH'O"`L+51.=0``(&\`
  2090. +M!")O``A93TCG,S8J2'X`(&PM*"PH`.`O20`@2H9F($JL#*1F&D'L!:`B""QL
  2091. +M+90D/````^U.KO_B+`!G`GX!2H9G-B(&0>P%JB0(0>P,K"8(+&PME$ZN_IXB
  2092. +M!B0-)B\`($ZN_IXB!G0*3J[^R$J'9U@B!DZN_]Q@4"!L+2@F:`"X,'S__[?(
  2093. +M9T!#[`6P<"4L>``$3J[]V"1`2H!G+"EL#*P%E"E-!9@O"B!++$I#[`6,E<HF
  2094. +M;P`D3J[]M$S?!``B2BQX``1.KOYB3-]LS%A/3G4@;P`$0^\`"&$`_RI.=2!O
  2095. +M``1#[P`(80#_''`43KHJUDYU``!(YP`&<`AR`"QX``1.KO\Z*D!*@&8$<`!@
  2096. +M+D*M``1(>``H<``O`$'L!<1R`9/)P4%.NA[^4$\J@&8,(DUP"$ZN_RYP`&`"
  2097. +M(`U,WV``3G4@;P`$2.<`!BI((`UG&"!-80``'B!53KH?0B)-<`@L>``$3J[_
  2098. +M+DS?8`!.=2!O``1(YP`&*DA*K0`$9Q0B52QX``1.KOX@(E5.KOXF0JT`!$S?
  2099. +M8`!.=2!O``0@4")H``YP`!`I``]R`>&A(`%.=2!O``0@+P`((B\`#$CG`P8L
  2100. +M`2X`*DAAJDJ'9@1*AF<>(E4C1P`@(T8`)#-\``D`'"QX``1.KOXR<`$K0``$
  2101. +M3-]@P$YU(&\`!$CG``8J2$JM``1G'")5+'@`!$ZN_BQ*0&<.(E5.KOXF0JT`
  2102. +M!'`!8`)P`$S?8`!.=2\.("PM-"(`2$%"0=*`("PM*+.`*4`L`$*L+`1#[`78
  2103. +M<``L>``$3J[]V"E`*_QP_TZN_K9(@$C`*4`%U$JL*_QG"$J`:P1P`6`"<``I
  2104. +M0"P(+%].=2\.("P%U&L(+'@`!$ZN_K`@+"O\9PHB0"QX``1.KOYB+%].=2`O
  2105. +M``113TCG`P`N`$ZZ!0`@!TZZ`9!*@&<H(D`@:0`<<D#EB<*1+T@`#"`!(&D`
  2106. +M!")O``Q.D2P`(`=.N@%((`9@`G#_3-\`P%!/3G4@+P`$+P<N'V"N```@;P`$
  2107. +M("\`"")O``PO;P`0``0O;P`4``@O;P`8``PO;P`<`!`O;P`@`!0O;P`D`!A1
  2108. +M3TCG!Q0N`$CO`P``%'P`*FPL#&`62JT`!&8*,'P``2M(``1@#%*&VOP`)+RL
  2109. +M+!!MY"`L+!"\@&9X<@K3K"P0("PL$"(`YX'2@.6!(`%.NB7P*D!*@&8,<`PI
  2110. +M0"U,</]@``".</;0K"P0(@#G@=*`Y8$@;"P,(DU@`A+84X%D^B`L+`QG!B!`
  2111. +M3KHD$BE-+`QZ]MJL+!`@!>>`T(7E@-O`E\LK2P`$4H7:_``DNJPL$&WP(`;G
  2112. +M@-"&Y8`@;"P,(:\`%`@$(8<(`"&O`!@("$OO`"`AG0@,(9T($"&="!1+[P`L
  2113. +M(9T(&"&="!PAG0@@(`9,WRC@4$].=2`O``0B`&L6LJPL$&P0(`'G@-"!Y8`@
  2114. +M;"P,0K`(!$YU("\`!$CG`00N`&L>OJPL$&P8(`?G@-"'Y8`J;"P,V\!*K0`$
  2115. +M9P0@#6`(<`DI0"U,<`!,WR"`3G4@+"P03G4``"`O``193RZ`0>P%["`(6$].
  2116. +M=2!O``193RZ(0>P%["`(6$].=2`L!>Q.=0``64]*K`8>9@Q![P`#*4@&'F'N
  2117. +M8!9![P`#(FP&'K/(9`1P`6`"</\I0"P46$].=5E/2.<!%"XO`!1*K"P49@)A
  2118. +MP"IL!B)@+B`L+!1O#$'O``\B;0`$L\AB$$J`:AQ![P`/(FT`!+/(9!`F52\-
  2119. +M3KHBIEA/*DL@#6;.*4T&(DJ'9@1P`&`B4(<O!TZZ)"X@0""L!B)#[P`3(4D`
  2120. +M!$/H``A83RE`!B(@"4S?*(!83TYU```@+P`$64\N@"`L+21G#B!`3KK\BDJ`
  2121. +M9P1R`6`"<@`@`5A/3G4@+P`$(&PM)'(`3OK\,$ZZ^V0I0"TD9@I(;`8H3KK[
  2122. +M0%A/(&PM)$ZZ^_2!K"P83G4@;"TD3OK[D`CL``PL&DYU("\`!`@```Q6P$0`
  2123. +M2(!(P$YU".P`#2P:3G4@+P`$"```#5;`1`!(@$C`3G5.NAE6<``@;"V$$"@`
  2124. +M#W(!X:&#K"P83G5.^AFH("\`!%E/2.<!%B]``!!^`&`N("T`%$ZZ&/XF0$J`
  2125. +M9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL>``$3J[_+B!L+80L>``$3J[^
  2126. +MC"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`<`'OH"P`<`F^@&8&<`!.N@L4
  2127. +M("PM',"&9P:-K"T@8'HJ!D:%RZPM($J':V9P(+Z`;&`@!^>`0>PL'"IP"``P
  2128. +M?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X48!G-&`*2&P&0$ZZ^?Q83W``
  2129. +M3KH*MF`@(`UG'"`'YX`H!D'L+!R(L`@$B:PM'"`'3I5&A,FL+1P@+"T@P(9F
  2130. +MBDS?(/!.=2`O``0O#B(L+!B"@'``+'@`!$ZN_LXL7TYU("\`!"\.(@`@+"P8
  2131. +M@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A`/X02H!G"'P!<`YA`/\,(`=A
  2132. +M`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!<`-A`/[H(`=A`/Z&2H!G"'P!
  2133. +M<!1A`/[6(`9,WP#`3G4@+P`$+P<I0`R$<`@N'V``_KQP`&$`_V!@D&#V2.<!
  2134. +M%'X`2^PL'#9\``$JBT*M``12AU"-<""^@&WP0JPM($*L+1Q"K"P880#]U&$`
  2135. +M_>IA`/VB3-\H@&``_?AA`/VX8`#^"```2&P&5$ZZ^-A83TYU("\`!"\-3KHA
  2136. +M5"I`2H!F`F'B(`TJ7TYU(&\`!"`O``@O"TZZ'Q`F0$J`9@)AQB`+)E].=2!O
  2137. +M``0O#2I((`UF!$OL!EX@34H89OQ3B)'-(`A2@$ZZ(0@@0$J`9@1P`&`((D@2
  2138. +MW6;\(`@J7TYU64](YP,T?@!\`"!L+2@F:`#08"Q**P`(9B0P/`4`P&L`#F8:
  2139. +M4H<@:P`*(`A*&&;\4XB1P"`(W(#<JP`45(8F4TJ39M`@!U*`Y8#0AF$`_THI
  2140. +M0"U`Y8<@0")`T\=%Z0`$+T``%&8*0>P&4"E(+4!@5B!L+2@J:`#08$)*+0`(
  2141. +M9CHP/`4`P&T`#F8P)FT`"BXM`!0@;P`4(,HO2``48`(4VTH39OH4_``])FT`
  2142. +M$&`"%-L@!U.'2H!F]D(:*E5*E6:Z(&\`%$*03-\LP%A/3G4@;P`$("\`""\-
  2143. +M*D@J@$*M``3E@&$`_K0K0``(*E].=2!O``0B;P`(("\`#$CG(C0F22I(2H!G
  2144. +M"B!+80#^PB1`8`(D2R`*9SXB%20M``2T@6TB+`'<AG00TH*\@6T"(@8J@2`!
  2145. +MY8`@;0`(3KH=CBM```AG$D?M``0B$U*;Y8$@6R&*&`!P`4S?+$1.=2!O``0B
  2146. +M;P`(("\`#&&22H!F!&$`_AI.=2!O``0B;P`(2.<`%"9)*D@@+0`$T*L`!+"5
  2147. +M;Q+0@"J`Y8`@;0`(80#^&BM```@B+0`$Y8$@;0`(T<$@*P`$(@#E@2)K``A@
  2148. +M`A#94X%D^M&M``0@:P`(3-\H`$[Z'7X@;P`$(F\`""]O``P`!"`O`!`B+P`4
  2149. +M64](YP(T+`$J221(+T@`$$J`9T13@&<*4X!G``"V8```]%.&9R(@+P`8(@V0
  2150. +M@2!O`!!",`@`($$B;P`08`(2V%.`9/I@``#.0>P&8")O`!`2V&;\8```OB9O
  2151. +M`!A@;G!<L!5F9DHM``%G8%2-<`&\@&8&%/P`86!4(`95@&9&$"W__TB`2,!R
  2152. +M(Y"!9RY5@&<J58!G)E.`9R)3@&<>4X!G&G(5D(%G%'(<D(%G#E6`9PIR'Y"!
  2153. +M9P15@&8$%/P`)Q3M__]@"!3M__]@`A3=N\MECF!`)F\`&&`V<"JP%68N2BT`
  2154. +M`6<H5(T0+?__2(!(P')ED(%G#'()D(%F#!3\``I@#A3\`!M@"!3M__]@`A3=
  2155. +MN\MEQD(23-\L0%A/3G6>_`$L2.<_-BIO`5@@;`R@#&@`)0`49`I(>``43KJ1
  2156. +MZEA/0JP+X'`!*4`+W"E`#`)P`BE`"_XI0`PD*7P```"$#""3R2QX``1.KO[:
  2157. +M*4`M*$ZZ]2@I0"TL9@I(;`9B3KKU!%A/(&PM+$ZZ];@I0"TP+&PM+"!6+&@`
  2158. +M%"E.+3Q![P$P3J[_OBEO`3`M-$ZZ]B!.NONL(&PM*"`H`*QG$.6`(D`B*0`T
  2159. +MY8$I02TX8`8I:`"$+3A*%68``.A![`9Z(@@L;"V4)#P```/N3J[_XBP`0>P&
  2160. +M@"((3J[_XBX`0>P&AB((3J[_XBH`2H9G"$J'9P1*A68B2H9G!B(&3J[_W$J'
  2161. +M9P8B!TZN_]Q*A6<&(@5.KO_<80#[<G`!+P`O!2\`+P<B!L%!3KH-;"!L#*0@
  2162. +M*``<0>\!6&$`_)Y/[P`0?`!^`&!0(FP,I"!I`"0@,'@`9SXB`$/O`#`D"2QL
  2163. +M+91V0.6+3J[^;DJ`9R8B;`RD(&D`)-''("@`!&<((@(D`$ZN_(Y![P%(0^\`
  2164. +M,'`!80#\V%*&4(<@;`RDO*@`'&VF8``"S"QL+91.KO_**`!.KO_$*@!^`"!L
  2165. +M+2@L*`#@9BA^`4'L!HPB""0\```#[4ZN_^(L`&820>P&CB((3J[_XBP`9@1A
  2166. +M`/JD+P<O!G``+P`O!2($P4%.N@R>0>\!6'`!80#[UB`\```%&F$`^HX@0#%\
  2167. +M!```$B]``#QP0.6(80#Z>D_O`!!^0.6/+T`!.&`"4HT0%4B`2,!![`J]"#``
  2168. +M`P@`9NP0%6<``A9R(K`!9C!2C29-8!!P*K`59@A*+0`!9P)2C5*-$!5G!G(B
  2169. +ML`%FYB1-$!5R(K`!9@)2C7P"8%1P)[`59B!2C29-8`)2C1`59P9R)[`!9O0D
  2170. +M37`GL!5F`E*-?`%@+B9-8!!P7+`59@A*+0`!9P)2C5*-$!5G$G(@L`%G#'(*
  2171. +ML`%G!G()L`%FVB1-?``@2RH*FHL@!5*`+T@`*&$`^;8F0$JO`4QF("`%($LB
  2172. +M;P`H3KH8AD(S6`!![P%((DMP`&$`^V!@`/\FVH5R$-J!NH=O%"!O`3A.NADP
  2173. +M(`5A`/EV+@4O0`$X+PH@!B!+(F\`+'(!80#[KEA/(@LD+P$X)@<L;"V43J[\
  2174. +MN"H`;!!"$B\O`"A(;`:43KKR"E!/2H5F(B\*(`8@2R)O`"QR`&$`^W1![P%,
  2175. +M(DMP`&$`^NA83V``_JQZ`2!O`"Q"J``(0B@`$4(H`!`O"B`&($LB;P`L<@)A
  2176. +M`/M`0>\!0'`080#Z)EA/(@LD+P`L+&PME$ZN_,HH`&8\8"IZ`")O`"S2_`$8
  2177. +M0>\!/'`!80#Z($J`9@1X9V`2(B\`+"QL+91.KOS$*`!*A&?2(B\`+"QL+91.
  2178. +MKOR^<'30@+B`9PI(;`:H3KKQ5EA/2H5G(B\*(`8@2R)O`"QR`&$`^L!![P%,
  2179. +M(DMP`&$`^C183V``_?@@+P%`(&\!1$ZZ$OI![P%(0^\!/&$`^BH@2TZZ%_9@
  2180. +M`/W6(&\!.$ZZ%^H@;P`L3KH7XF$`^))![`;"3KH+,BE`!>QF"$'L!L@I2`7L
  2181. +M0>P&SDZZ"QPI0`8`9@8I;`7L!@!![`;83KH+""E`!@1F"$'L!MXI2`8$0>P&
  2182. +MXDZZ"O(I0`8(9@A![`;H*4@&"$'L!O!.N@K<*4`M1&8(0>P&^BE(+40@+P%,
  2183. +M(&\!4")L+4!.NC$Z<`!.NAM<3-]L_-[\`2Q.=2`O``1(YP,`+@!*K"U(9P0@
  2184. +M!V!@?``@!P*````!)&<"?`@(!P`'9P0`1@`%"`<`!&<$",8``@@'``%G!`C&
  2185. +M```(!P`#9P0(Q@`!"`<``&<$",8`!B`'<DG`@7)`L(%F!`!&`$((!P`)9P0(
  2186. +MQ@`%(`8*0``/3-\`P$YU("\`!$CG!@`L`$JL+4AG""`&`D`/_V!>>@`*1@`/
  2187. +M"`8``V<$>DGEC2`&<@7`@5N`9@0(Q0`'"`8``F<$",4`!`@&``!G!`C%``$@
  2188. +M!G)"P(%G!`C%``8(!@`!9P0(Q0`#"`8`!F<$",4```@&``5G!`C%``D@!4S?
  2189. +M`&!.=0``2.<#`$ZZ\P8N`'P`8`HO!DZZ\6Y83U*&O(=M\DS?`,!.=2`O``0O
  2190. +M!RX`8=1.NO#B3KKV6"!L+2Q.NN^@+P=.NHO66$\N'TYU("\`!"\'+A]@U```
  2191. +MGOP`#$CG+S8J;P`T?@/.KP`X?`$@;"TH)F@`N"H\```#[$ZZ]<I*AV<*<`*^
  2192. +M@&<$<@!@`G(!+T$`*'`!OH!G"%6'9P1P`&`"<`$O0``L($U#[`<`3KH0SDJ`
  2193. +M9@9X_V```51P_R!L+2@A0`"X(@TL;"V4=/Y.KO^L+@`@;"TH(4L`N$J`9G@L
  2194. +M;"V43J[_?$ZZ"B0L`"`L#(!R+D8!L(%G!$J`9@I^`2H\```#[F`6(`95@&8,
  2195. +M""\`"``Z9P1P`6`"<``N`$J'9RQ\``@O``@`.F<<""\`#P`Z9P9X`F```-8@
  2196. +M+P`\3KK]TB@`8```R'C_8```PBE&+4QP_V```4)"IRQL+91R`B0/3J[_'$_O
  2197. +M``0D0$J`9PPB!R0*3J[_FDJ`9A8@"F<()`IR`DZN_Q9.N@I^</]@``$(*"H`
  2198. +M="0*<@).KO\6(@=.KO^F<%#IB,"O`#@,@```!0!F#'`1*4`M3'#_8```VDJO
  2199. +M`"AG!@@$``-F#$JO`"QG$@@$``)G#'`-*4`M3'#_8```M@@O``D`.F<B(@TD
  2200. +M/````^Y.KO_B2H!G""(`3J[_W&`*3KH*`G#_8```C`@O``@`.F<$(`5@!B`\
  2201. +M```#[20`(@TL;"V43J[_XBH`9@A.N@G6</]@8`@O``D`.F8$2H9F!"P$8`)\
  2202. +M_WX`2J\`*&<"?@%*KP`L9P0(QP`!""\``P`[9P0(QP`#+P<@!2(&3KH%GEA/
  2203. +M+@!L''#_(&PM*"%``+@B!2QL+91.KO_<(&PM*"%+`+@@!TS?;/3>_``,3G4@
  2204. +M;P`$+R\`#"\O``PO"&$`_:A/[P`,3G6>_``,2-<!`W#_WOP`#$YU44](UP,`
  2205. +M4$].=4CG,`(B$$HH``UG!'``8!PD"28`+&PME$ZN_]8B`%*`9@A.N@D0</]@
  2206. +M`B`!3-]`#$YU44](YS\V+@`J229(+!,O1@`H+T@`+$HK``UG!G``8```C$HK
  2207. +M``QG9B9-U\=Z`&!8)$U@`E**M<MD!G`*L!)F]+?*9@0H"F`&0>H``2@(F(TB
  2208. +M+P`H)`TF!"QL+91.KO_0+`!2@&8(3KH(FG#_8#[:AK:&9C9+Z@`!GH9P`$ZZ
  2209. +M\BA.NO)82H!F(DJ'9J1@'"(&)`TF!RQL+91.KO_0*@!2@&8(3KH(7G#_8`(@
  2210. +M!4S?;/Q03TYU64](YS\"+@`L$"]!`!Q**``-9P1P`&!24X$F`2(&)`<L;"V4
  2211. +M3J[_OBH`3J[_?"@`4H5G!$J$9PX@!$ZZ!Q@I0"U,</]@)"(&=``F`DZN_[XL
  2212. +M`%*`9P1*A&<.(`1.N@;V*4`M3'#_8`(@!DS?0/Q83TYUGOP!`$CG/P8N`"I(
  2213. +M+!4J+0`(("T`!&<*(@`L;"V43J[_IA@M``U(A$C$($U.NA($2H1G!'``8$0B
  2214. +M!D'O`"`D""QL+91V0.6+3J[^:"@`2H=F"B(&3J[_W$J`9QI*A&<2</^Z@&<,
  2215. +M(@(D!4ZN_T9*@&<$<`!@!DZZ!V1P_TS?8/S>_`$`3G4@+P`$2.<@`B(`+&PM
  2216. +ME'0`3J[_-$ZN_WQT+D8"L()7P40!2(%(P2`!3-]`!$YU("\`!"!O``@B;P`,
  2217. +MGOP`$$CG-Q8N`"9)*DA\`&&X2H!F?"('+&PME'0!3J[^5DJ`9VPB!T'L!P@D
  2218. +M"'8$3J[_T%F`9E(B!R0\```G$$ZN_S1*@&="(@=![P`@)`AV$$ZN_]9R";"!
  2219. +M;RYPF[`O`"!F)D'O`"4B""0+3J[\T"H`0>\`)M'`(@@D#4ZN_-!2@&<&4H5G
  2220. +M`GP!(@=T`$ZN_E8@!DS?:.S>_``03G4@+P`$(B\`")[\`A!(YS\&+@!P_R]`
  2221. +M`B@O00`D(@<L;"V4=`!V`4ZN_[XO0``@(@=.KO^^+`!.KO]\*@`O0`(L9@``
  2222. +MPB@O`"0B!R0$=O].KOXXL()F``"NO()L``">*@2:AB@%(`1R`4A!+'@`!$ZN
  2223. +M_SHJ0$J`9FIR`DA!3J[_*.*(*@`,A0```@!M$"`%<@%(04ZN_SHJ0$J`9D9Z
  2224. +M0.>-2^\`*#`\`?]R`$'O`"@0P5'(__Q@++B%;P0@!6`"(`0F`$ZZ[_HB!R0-
  2225. +M+&PME$ZN_]"P@V<*3J[_?"]``BQ@!IB#2H1NT$'O`"BQS6<,(DT@!2QX``1.
  2226. +MKO\N*B\"+&8$0J\"*"PO`""\KP`D;`XB!R0&+&PME';_3J[_OBPO`BAG"B`%
  2227. +M3KH$7BE`+4P@!DS?8/S>_`(03G6>_`$(2.<W%BX`)DDJ2"P52BT`#68``1@@
  2228. +M!P2````$`&<@!(````0`9TI3@&=84X!G7%.`9UY3@&=F4X!G;&```.Y*+0`,
  2229. +M9R8@!D'O`21#[P$@80#]UDJ`9Q0@+P$D-T```B`O`2`V@'``8```RG`98```
  2230. +MOB(&+&PME$ZN_R@F@'``8```LB:&<`!@``"J<`!@``"D(`8B$V$`_C9@``"8
  2231. +M*U,`"'``8```CBH32JT`!&8.(A4L;"V43J[^C"M```0@+0`$9V(D`"(%+&PM
  2232. +ME$ZN_EQ*@&92(@9![P`@)`AV0.6+3J[^:$J`9SXB!4ZN_Z8B+0`$3J[_IB(&
  2233. +M3J[_W"("=`!.KO]&&WP``0`-*H(K0@`$0>\`("((+&PME$ZN_[A*@&<$(`)@
  2234. +M#DZZ!!Q@!G`6*4`M3'#_3-]H[-[\`0A.=2`O``0B+P`(+V\`#``$2.</!BHO
  2235. +M`!PL`2X`<`Y.N@_B*D!*@&8*<`PI0"U,</]@3D/5(L="F2+&0BT`#2('+&PM
  2236. +ME$ZN_R@;0``,2'K^=$AZ^]I(>OMD2'KZK$AZ^G9(>OIH(`4@34/Z^E!.NNE4
  2237. +M3^\`&"@`;`8@34ZZ#>(@!$S?8/!.=2`O``0B+P`(+V\`#``$+V\`$``(+V\`
  2238. +M%``,+V\`&``02.<-`"@O`!0J+P`0+@!P`$J!9@1P0.6(`$```2\`(`=R_V$`
  2239. +M_T983TJ`9D!P`$J$9@1P0.6(`$```B\`(`5R_V$`_RA83U.`9B)P`$JO`!QF
  2240. +M!'!`Y8@`0``"+P`@+P`<<O]A`/\&6$]5@&<00>P'#B](`!!,WP"P3OKF6$S?
  2241. +M`+!.=0``("\`!"!O``@B+P`,64](YP,T+`$N`"I(3KKM!"`'3KKIE"9`2H!G
  2242. +M1`@K``$``V<V""L``P`#9Q8@:P`8+T@`%"!K``1P`'("(F\`%$Z1(&L`%"](
  2243. +M`!0@!B!K``0B321O`!1.DF`(<`TI0"U,</],WRS`6$].=2`O``0@;P`((B\`
  2244. +M#$CG`P1,WR#`8(`@;P`$GOP`0$CG.Q8J2$ZZ[((@#6=22A5G3B(-0>\`("0(
  2245. +M+&PME'9`>`!.KOQV+@!M-DZN_WPL`%*`3KH.$"9`2H!G)+Z&9Q0F!E*#(@TD
  2246. +M"TZN_'9*@&\0(`)@#B!"(DL2V&;\(`M@`G``3-]HW-[\`$!.=2`O``0B+P`(
  2247. +M+V\`#``$44](YP<`*B\`&"P!+@!.NNP`(`=.NNB02H!G&B)`(&D`&"](`!`@
  2248. +M!B(%(&D`!")O`!!.D6`"</],WP#@4$].=2`O``0B+P`(+V\`#``$2.<'`"HO
  2249. +M`!`O10`03-\`X&"@```@+P`$(&\`""(O``Q93TCG`S0L`2X`*DA.NNN4(`=.
  2250. +MNN@D)D!*@&<F""L````#9Q@@:P`0+T@`%"`&(&L`!")-)&\`%$Z28`AP#2E`
  2251. +M+4QP_TS?+,!83TYU("\`!"!O``@B+P`,2.<#!$S?(,!@G@``("\`!"E`#(!*
  2252. +M@&<``(9R9Y"!9P``@E6`9P``@'()D(%G?%.`9WA3@&=T4X!G<%.`9VQ3@&=H
  2253. +M4X!G:%.`9VAR49"!9V93@&=F4X!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G
  2254. +M9E.`9V95@&=F4X!G9E.`9V93@&=F4X!G9E.`9V95@&=F4X!G9E.`9V93@&=F
  2255. +M8&AP`&!F<`Q@8G`+8%YP%F!:<`=@5G`(8%)P$&!.<!%@2G`"8$9P`F!"<!9@
  2256. +M/G`'8#IP%F`V<"1@,G`68"YP%F`J<!Y@)G`28")P)6`><"9@&G`38!9P%F`2
  2257. +M<!Q@#G`-8`IP#6`&<`U@`G#_3G4O#BQL+91.KO]\80#^^BE`+4PL7TYU3KKJ
  2258. +M*$ZZ\^).NN)B<@9.^@#R```@;P`$("\`"%E/2.<!%BX`+T@`$"!O`!`J4&!D
  2259. +M<`VP+0`(9EH@+0"L9P;E@"!`8`*1R"9(("T`G+"'9S0@+0"@L(=G+"`M`."P
  2260. +MAV<D(`MG+B`K`!RPAV<8("L`(+"'9Q`@*P`XL(=G""`K`#"PAV8.(DUP8.^(
  2261. +M+'@`!$ZN_KPJ54J59IA,WVB`6$].=2`O``0B+P`(2.<!`BX`(`%3@&<,4X!G
  2262. +M"%.`9P1=@&8L+'@`!$ZN_WP@;`R@T/P!EB`'80#_2"!L#*#0_`&D(`=A`/\Z
  2263. +M3J[_=G``8`AP%BE`+4QP_TS?0(!.=2`O``0B+P`(2.<&!"P!*@!.NND>2H5J
  2264. +M`D2%NJPM5&8.2H9G!B`&3KKGPG``8$@@!4ZZ`&XJ0$J`9P9*K0`49PIP`RE`
  2265. +M+4QP_V`L(`9G*"(M`!#!06$`_U@B`'`)O(!F%'(!*T$`%"M``!AP%$ZZYWQP
  2266. +M`&`"(`%,WR!@3G4``"!O``1(YP`&*D@B32QX``1.KO\$($U,WV``3OH(K"`O
  2267. +M``1(YP$$+@`J;"U88`X@+0`,L(=F!"`-8`@J54J59NYP`$S?((!.=4CG(`)!
  2268. +M["U83KHA:B`L+2@B+"TT)`"S@@*"`'___RE"+512@BE"+5`O`2\`2&P*H$AL
  2269. +M+61.NN!&3^\`$"QX``1.KOUF*4`MB&<00>PM9'``3KHA?BE`+81F"DAL"JY.
  2270. +MNN$Z6$],WT`$3G5(YP`&("PMB&<*($`L>``$3J[]8$JL+81G."QX``1.KO]\
  2271. +M8`PB37`<+'@`!$ZN_RX@;"V$+'@`!$ZN_HPJ0$J`9N(@;"V$3KH@UBQX``1.
  2272. +MKO]V3-]@`$YU```@;P`$("\`""(O``PB;P`0+V\`%``$+V\`&``(64](YP\V
  2273. +M*"\`+"HO`"@L`2X`*DDO2``@+'@`!$ZN_68F0$J`9S`@2R`$3J[]<B1`2H!G
  2274. +M(B`-9P@E30`H)44`)"!O`"`@!R)*(@9.KOY$2@!F!"`*8!8@"F<&($I.KOUL
  2275. +M(`MG!B!+3KH@0'``3-]L\%A/3G4@;P`$2.<`!BI((`UG&")-+'@`!$ZN_CX@
  2276. +M;0`.3KH@%B!-3J[];$S?8`!.=5E/0?D`````+HAG""!Y_____$Z06$].=5E/
  2277. +M0?D`````+HAG""!Y_____$Z06$].=4CG`P0J;P`0($U*&&;\4XB1S2X(8`H@
  2278. +M!D'L"^9.N@R"?``<'4J&9NY![`OF3KH0AB`'3-\@P$YUGOP`$$CG!Q1^`$OO
  2279. +M`"Q@``":<"6P+P`49@``@"!O`"A2KP`H$!!R`!(`'T``%7!DDH!G.G`,DH!G
  2280. +M#E>!9P9;@6<&8$0F76`T+!U'[P`>>@<@!G(/P(%!^@!XT<`6D%.+Z(93A4J%
  2281. +M:NA"+P`?8`H@'4'O`!=.N@(:1^\`%R\+3KK_2%A/WH!@(E*'<``0+P`50>P+
  2282. +MYDZZ"])@$%*'<``0+P`40>P+YDZZ"\`@;P`H4J\`*!`0'T``%&8`_UA![`OF
  2283. +M3KH/NB`'3-\HX-[\`!!.=3`Q,C,T-38W.#E!0D-$148`````2.<#%RIL+8Q@
  2284. +M%"95<!30K0`$(DTL>``$3J[_+BI+(`UFZ$*L+8Q@3"IL+9APG-"L#'PF0"`M
  2285. +M``0I0"V8*6T`"`Q\+BT`&$J`9AX@;`R@#&@`)``491(@3RP(0>T`#"QX``1.
  2286. +MKOTD+D8B2R`'+'@`!$ZN_RY*K"V89JY,W^C`3G4@;P`$(F\`""!0(E$0&+`9
  2287. +M9@1*`&;VD"%(@$C`3G4@;P`$("\`"$/Z_^!R!$[Z""H@;P`$(F\`""`O``Q*
  2288. +M@&\*$A`0T1+!4X!F]DYU(&\`!")O``AP`'(`$!@2&0P``&%M"@P``'IN!`0`
  2289. +M`"`,`0!A;0H,`0!Z;@0$`0`@D(%F!$H!9M1.=0``("\`""!O``1.5?_T(D]R
  2290. +M"DZZ`G`&00`P$L%*@&;P(`D0X;_)9OI"$)"/3EU.=0``("\`""!O``1.5?_T
  2291. +M(D\B``)!``<&00`P$L'FB&;P(`D0X;_)9OI"$)"/3EU.=0``,#$R,S0U-C<X
  2292. +M.6%B8V1E9B`O``@@;P`$44\B3S(``D$`#Q+[$-SHB&;R(`D0X;_)9OI"$)")
  2293. +M4$].=0``("\`""!O``0O"$J`3E7_]")/;`80_``M1(!R"DZZ`<@&00`P$L%*
  2294. +M@&;P$.&_R6;Z0A`@"$Y=D)].=0``(&\`!")O``A(YS`@)$AR`"`!)@$,$``K
  2295. +M9P@,$``M9@1V`5)($!@$```P;1H,```);A0D`>6!TH+2@4H#9@32@&#BDH!@
  2296. +MWB*!(`B0BE.`3-\$#$YU(&\`!"\-*D@(+0`#`!MF,"`L#"Q.N@4.*T``!"M`
  2297. +M`!!F"G`,*4`M3'#_8!8K;`PL`!1P\\&M`!A"K0`,0JT`"'``*E].=0``(&\`
  2298. +M!$CG(!0J2"9-8"!P`!`30>P*O0@P``$(`&<*<@`2`'0@DH)@!'(`$@`6P4H3
  2299. +M9MP@#4S?*`1.=0``GOP`4$CG,39#^@"$<``L>``$3J[]V"I`2H!F!G`43KKL
  2300. +MJGX`(&P,K!XH__\@!T/O`!Q@`A+84X!D^D(W>!Q![P`<*4@,1$/L#$Q'[`Q@
  2301. +M+$V1R)7*<``B`'1]U()V*$ZN_J1P%$ZZ[&1,WVR,WOP`4$YU*BH@4W1A8VL@
  2302. +M3W9E<F9L;W<@*BH``$58250``&EN='5I=&EO;BYL:6)R87)Y`$J`:@``'D2`
  2303. +M2H%J```,1(%A```@1(%.=6$``!A$@$2!3G5*@6H```Q$@6$```9$@$YU+P)(
  2304. +M030!9@``(DA`2$%(0C0`9P``!H3!,`)(0#0`A,$P`DA",@(D'TYU+P-V$`Q!
  2305. +M`(!D```&X9E10PQ!"`!D```&Z9E90PQ!(`!D```&Y9E50TI!:P``!N.94T,T
  2306. +M`.:H2$)"0N:J2$.`P38`,`(T`TA!Q,&0@F0```930]"!<@`R`TA#Y[A(0,%!
  2307. +M)A\D'TYU``!(YW``)`!G($J!9@1"@&`8)@#&P4A"Q,%(0D)"UH)(0<#!2$!"
  2308. +M0-"#3-\`#DYU```@+`RH!$`!]"Y`3OK^8```(&\`!"`(2AAF_%-(D<`@"$YU
  2309. +M```@;P`$("\`"+`09PA*&&;X<`!.=2`(3G4@;P`$(F\`""`O``Q*@&<04X`2
  2310. +M&+(99@Q*`6<$4X!J\G``3G5N!'#_3G5P`4YU```@;P`$(F\`"!(8LAEF"$H!
  2311. +M9O9P`$YU;@1P_TYU<`%.=2)O``@@;P`$("\`#"((8`00V6<(4X!D^&`&0AA3
  2312. +M@&3Z(`%.=2)O``@@;P`$("\`#"((2H!O%K')90S3P-'`$2%3@&;Z8`80V5.`
  2313. +M9OH@`4YU(&\`!"`O``A(YP,4+@`J2&82(`UF!'``8&@@34ZZ`&YP`&!>(`UF
  2314. +M"B`'3-\HP$[Z`@`F356+,#Q__\!32,#E@"P`"!,`#V<,#&N``/_^9@0L*__R
  2315. +M(`=.N@'8)D!*@&8$<`!@'KR'8P0@!V`"(`8@32)+8`(2V%.`9/H@34ZZ``X@
  2316. +M"TS?*,!.=2!O``0@"&8"3G59@$CG/#(B+"V,9@XI?````!8M3$S?3#Q.=2)!
  2317. +ML(%O$B0!U*D`!`:"````%+"";`)@""(I``!GU&#@)@$&@P```!"P@VW&9Q(D
  2318. +M0T*"-"H``FNZY8K6@EB#8.@D0#0J``!JJ@BJ``<``$*#-BH``@)#?__EBTIJ
  2319. +M``)K0$?R.`1*:P``:S9"A#@K``("1'__Y8S8@UB$Y(Q8@TIK``)J!`!$@``U
  2320. +M1``":Q(J!.6,-#)(!`)"@`"*0C6%2`1"A#@J``!G3.6,1(1'\DC\2FL``&L^
  2321. +M0H0X*P`"Y8Q"A3HJ``("17__Y8W8A5B$6(/DC$IJ``)J!`!$@``W1``":Q(J
  2322. +M!.6,-#-(!`)"@`"*0C>%2`37J0`()BD`!+:L"KAN#+:I``AF.DJI``!G-"`L
  2323. +M+8P@0+*`9@PI:0``+8Q@$"!H``"RJ```9O8A:0`````@*0`$!H`````4+'@`
  2324. +M!$ZN_RY,WTP\3G4@+P`$(B\`"$CG#`1.NOSR*@!.N@`H*D!*@&8$<`!@$'@`
  2325. +M8`9"-4@`4H2XA67V(`U,WR`P3G4``"`O``1*@&8,*7P````6+4QP`$YU2.<^
  2326. +M,E:``H#____\#(```?_\;@``N+"L"KAN``"P)BPMC&<``*@B0["I``AN,B(L
  2327. +M+9"RJ0`,9BA%Z0`02E)K$$*$."H``@)$?__EC+"$;QI"A#@J``)K".6,1?)(
  2328. +M!&#<)BD``&=F(D-@O@CJ``<``$?R"`1"A;"$9SPL!)R`689F!"`$8##DCDIJ
  2329. +M``)J!`!&@``J`.2--T8``C=%```U10`">@1*1FL.-#)(!`)"@`",0C6&2`0F
  2330. +M*0`(EH"6A2-#``@@"EB`3-],?$YU*@"PK`JX:@0@+`JX*``&@````!0B+"V0
  2331. +M+'@`!$ZN_SI*@&8**7P````,+4Q@S")`1>D`$"-L+8P``"E)+8PC1``$(VPM
  2332. +MD``,)@26A6<H68-G)"-#``A'\E@$-7R`````Y(TU10`"-T4``.2+`$.``#=#
  2333. +M``)@%$*I``@U?(````#DC`!$@``U1``"(`I8@$S?3'Q.=2!O``0@+P`((B\`
  2334. +M#")O`!!93TCG#S8L`2X`*D@O20`@<`&^@&,``+(F3=?&(`=5@&8D+PLO#2!-
  2335. +M(DLL;P`H3I903TJ`;P``DB`&($TB2TZZ]Z1@``"$(`?BB"(&3KKZ]B)-T\`@
  2336. +M!B!-3KKWBB1->@!X`6`J+PTO"R!+(DTL;P`H3I903TJ`:A)2A=7&M<MG"B`&
  2337. +M($LB2DZZ]US7QE*$N(=ETK7-9PH@!B!-(DI.NO=&)F\`("`%(@8@32)+80#_
  2338. +M4B!*T<8@!Y"%4X`B!B)+3-]L\%B/8`#_.DS?;/!83TYU3OKO9D[Z[UX@+P`$
  2339. +M2.<!!"X`*FP,=&`((&T`!$Z0*E4@#6;T2^P+Q'`&P*T`&%6`9A@@+0`$D*T`
  2340. +M$&<.(BT`'"!M`!#!04ZZ[IP@32I0(`UFUB`'3-\@@$[ZY8`@;P`$0JPMG"E(
  2341. +M+:!(;P`,+R\`#$AL+9Q!^@`00_H`+$ZZ$K1/[P`,3G5#["V<4IEP`"!1$!@B
  2342. +MB'+_(LA*@&<"(@`@`4YU("\`!%E/+H!3K"V<4ZPMH%A/3G4``"`O``0@;P`(
  2343. +M+PTB`"I(4I5#[0`((!%2D1N!"`P@&0R````"`&T40>T`#")M``1R`<%!3KH#
  2344. +MU$*M``@J7TYUGOP"#"\-*F\"%$*O``Q"KP`$+TT`"$AO`APO+P(<0?K_JD/O
  2345. +M``Q.NA-V4$\@+P`,9Q!![P`0(F\`"'(!P4%.N@.*""T`!0`;9@@(+0`$`!MG
  2346. +M!'#_8`0@+P`$*E_>_`(,3G4O#2(`*DA#U5*9(!%2D1N!"`@@&0R````"`&T2
  2347. +M0>T`"$/L"^9R`4ZZ`T!"K0`$*E].=9[\`@A"KP`$0I=(;P(0+R\"$$'Z_[I#
  2348. +M[P`(3KH2[E!/("\`!&<00>\`"$/L"^9R`<%!3KH#`G`PP*P+_F<$</]@`B`7
  2349. +MWOP""$YU("\`!"!O``A93TCG`P0N`"I(?``?0``/<D'2@<*M`!AF#`CM``4`
  2350. +M&W#_8``!0'`SP*T`&%6`9U!P3$8`P*T`&')`TH&P@68,".T``0`;0JT`#&`T
  2351. +M""T`!0`;9P9P_V```0QP;D8`P*T`&')N1@&P@68,".T``0`;0JT`#&`*<``K
  2352. +M0``,8```YB`M``RPK0`4;#(@;0`$4JT`!"`'$(!2K0`,""T`!@`;9PYR"KZ!
  2353. +M9@@@34ZZ`V@L`$J&9P``JB`&8```J@@M``(`&V<N0JT`#"`M`!Q![P`/<@%.
  2354. +MNNPT+`!2@&8(".T`!0`;8'(@!E.`9VP([0`$`!M@9$JM`!1F("!-3KKUN$J`
  2355. +M9PH([0`%`!MP_V!8<``K0``,*VT`$``$("T`#+"M`!1M""!-3KH"[BP`".T`
  2356. +M`0`;(&T`!%*M``0@!Q"`4JT`#`@M``8`&V<.<@J^@68(($U.N@+"+`!*AF<$
  2357. +M(`9@!G(`$@<@`4S?(,!83TYU(&\`!%E/2.<!!"I(0>P+Q+O(9D1![`OF3KH"
  2358. +MC@@M``T`&F<T("T`'$'O``MR`4ZZ[-PN`&\*?@`>+P`+8``!($J'9@@([0`$
  2359. +M`!M@!@CM``4`&W[_8``!"%.M``AM$"!M``12K0`$<``0$&```/1P,\"M`!A3
  2360. +M@&<T<%Q&`,"M`!AR0-*!L(%F%`CM````&P@M``0`&V<6</]@``#&0JT`"`CM
  2361. +M``4`&W#_8```M@@M``(`&V=&0JT`"'X`'BT`($J'9PA"+0`@8```EB`M`!Q!
  2362. +M[P`+<@%.NNPV+@!O"'X`'B\`"V!Z2H=F"`CM``0`&V`&".T`!0`;?O]@9$JM
  2363. +M`!1F%"!-3KKT1$J`9PH([0`%`!MP_V!,(&T`$"M(``0@+0`<(BT`%"!M`!!.
  2364. +MNNOB*T``""X`;Q)3K0`((&T`!%*M``1^`!X08!A*AV8(".T`!``;8`H([0`%
  2365. +M`!M"K0`(?O\@!TS?((!83TYU(&\`!"`O``@B+P`,(F\`$%E/2.</$"P!+@`F
  2366. +M22](`!0@!B('3KKUGBH`>`!*AV<$2H9F!G``8```_'`PP*L`&&8*<$'0@,"K
  2367. +M`!AF#`CK``4`&W``8```WG`SP*L`&%6`9U!P3$8`P*L`&')`TH&P@68,".L`
  2368. +M`0`;0JL`#&`T""L`!0`;9P9P`&```*IP;D8`P*L`&')N1@&P@68,".L``0`;
  2369. +M0JL`#&`*0JL`#'``8```A$JK`!1F3`@K``(`&V9$($M.NO,<2H!G.@CK``4`
  2370. +M&W``8&`@;P`4$!@B:P`$$H!2JP`$4JL`#%.%4H0O2``4<@JP`68.""L`!@`;
  2371. +M9P8@2TZZ`#X@*P`,L*L`%&P$2H5NPDJ%;Q8@2TZZ`"8@*P`<(@4@;P`43KKI
  2372. +M#-B`(`0B!TZZ]`!,WPCP6$].=2!O``1(YP$$*D@@#6<``*!P0="`P*T`&&8L
  2373. +M(&T`$$/M``0BR$*90BT`('``(L`(+0`'`!MG!@BM````&PBM``0`&V```(I*
  2374. +MK0`49T0@+0`,:@9R`"M!``P@+0`,9R@B+0`<(&T`$,%!3KKHCBX`4H!F"`CM
  2375. +M``4`&V`,OJT`#&<&".T`!``;*VT`$``$0JT`#'`PP*T`&&82""T`!P`;9P9P
  2376. +M_,&M`!AP`&`D</]@('X`2^P+Q$JM`!AG#"!-80#_1DJ`9P)^_RI5(`UFZ"`'
  2377. +M3-\@@$YU(&\`!$CG`00J2'X`(`UG!B`M`!AF!'#_8$`(+0`!`!MG""!-3KK_
  2378. +M"BX`<`S`K0`89@Y*K0`49P@@;0`03KKU#D*M`!@@+0`<3KK/XE*'9P1*@&<$
  2379. +M</]@`G``3-\@@$YU(&\`!")O``@O;P`,``193TCG#Q0F;P`@*DDO2``8?@`L
  2380. +M+`PP>@!*JP`89P8@2TZZ_W1P`!`M``%R*Y"!9R!R-I"!9P93@&<$8"!\`'(K
  2381. +MLBT``E?`1`!(@$C`*@!@#'H!<&&P+0`"9@)\`'``$!5R89"!9PQR$9"!9QI;
  2382. +M@&<D8#9*A5;`<@&2``!!`0B,@7Y`X8]@*$J%5L!R`)(`D@",@6`:2H56P'(!
  2383. +MD@``00$``$$"`(R!8`9P`&```(`O+`PT+P8O+P`@3KK>($_O``PH`%*`9@1P
  2384. +M`&!B2H5G!@C'``=@,'``$!5R89"!9PQR$9"!9QI;@&<:8!H(QP`!2'@``B`$
  2385. +M<@!.NN?`6$]@!GX!8`)^`@@&``]F!`C'``^1R$OK`!`JR"K()T0`'"=(``0G
  2386. +M2``,)T@`""K'(`M,WRCP6$].=0``(&\`!")O``A13TCG`!1([P,```A+[`O$
  2387. +M8`0F32I3(`UG!DJM`!AF\B`-9AYP(DZZ]1PJ0$J`9@1P`&`>($TFB'`A<@`0
  2388. +MP5'(__PO#2!O``PB;P`03KK^=%A/3-\H`%!/3G4``"!O``0B;P`(+V\`#``$
  2389. +M+V\`$``(+V\`%``,+V\`&``0GOP`&$CG#S8F;P!$*DDO2``D)&\`2'X`?`!Z
  2390. +M`"`+9P9P`22`8`)"DG``(&\`)!`00>P*O0@P``((`&<P<`\@;P`DP!A(@$C`
  2391. +M(@?E@=*'TH'2@"X!+T@`)'``(&\`)!`00>P*O0@P``((`&;0(&\`)!`0<FRP
  2392. +M`6<4<FBP`68(4J\`)'P!8`QR3+`!9@92KP`D>@$O1@`P+T4`-$Z5*``@;P`D
  2393. +M$!!R8[`!9QYR;K`!9QAR6[`!9Q)@!$Z5*`!![`J]"#```T@`9O!P_[B`9@P@
  2394. +M;P!`((1P`&``!11P`"!O`"00$')8D(%G``'P5X!G``-D48!G``+T4X!G``#:
  2395. +M6X!G7EN`9R)3@&<``6)3@&<``;I7@&<``PY5@&<``)I7@&<``;A@``2V<``D
  2396. +M@"(+9P`$L"1O`#Q*AF802H5F#"!3(A)3@2"!8``$F"X24X<D4TJ&9P8TAV``
  2397. +M!(@DAV``!()Z`$J'9P9P`;Z`;QYP+;B`9P9R*[B!9A*X@&8$</]@`G``*@!.
  2398. +ME2@`4X=P,+B`9G!.E2@`0>P*O0@P``$(`&<((`1R()"!8`(@!')8L(%F``#4
  2399. +M8``!,'H`<"VX@&<&<BNX@68\N(!F!'#_8`)P`"H`3I4H`&`J>@!*AV<&<`&^
  2400. +M@&\><"VX@&<&<BNX@682N(!F!'#_8`)P`"H`3I4H`%.'0>P*O0@P``)(`&8,
  2401. +M(&\`0""$<`!@``/8?``@!'(/P($B!N6!TH;2@=*`+`%.E2@`4X=G#$'L"KT(
  2402. +M,``"2`!FVB`+9P`#G$J%:@)$AB132J\`-&<&)(9@``.(2J\`,&<&-(9@``-\
  2403. +M)(9@``-V<#"X@&T&<#>X@&\,(&\`0""$<`!@``-L?``@!'('P('GAMR`3I4H
  2404. +M`%.'9PQP,+B`;09P-[B`;^(@"V<``S@D4TJO`#1G!B2&8``#*DJO`#!G!C2&
  2405. +M8``#'B2&8``#&$J'9@)^"$*O`#!P`2]``#1Z`7`MN(!F!GK_3I4H`"1O`$`O
  2406. +M10`@0>P*O0@P``=(`&8()(1P`&```NPJ!$Z5*`!*AV<&<`*^@&\P<#"Z@&8J
  2407. +M<'BX@&<&<%BX@&8>3I4H`$'L"KT(,``'"`!F""2$<`!@``*R?`!3AV!H2H=G
  2408. +M!G`!OH!O+$7L"KW5Q0@2``)G!BP%<#"<@`@2``!G!BP%<#><@`@2``%G.BP%
  2409. +M<%><@&`R?`!@+NF&"!(``F<((`1R,)"!C(`($@``9P@@!'(WD(&,@`@2``%G
  2410. +M!G)7F(&,A$Z5*`!3AV<,1>P*O=7$"!(`!V;"(`MG``(@("\`(&H"1(8D4TJO
  2411. +M`#1G!B2&8``""DJO`#!G!C2&8``!_B2&8``!^"`+9QX@4U*3(`00@&`43I4H
  2412. +M`%*`9Q`@"V<((%-2DR`$$(!3AV[H</^X@&8``=`@;P!`((1P`&```<P@"V<&
  2413. +M(%-2DQ"$3I4H`%*`9Q!3AV<,0>P*O0@P``-(`&?>(`MG``&6(%-"$&```8Y2
  2414. +MKP`D<%X@;P`DL!!F#'P!4J\`)"!O`"1@`GP`+T@`+'!=L!!F'E*O`"1@&"!O
  2415. +M`"1*$&8,(F\`0"*$<`!@``%<4J\`)'!=(&\`)+`09MY*AF<``+`O;P`L`"A\
  2416. +M`&!X(&\`*!`0<BVP`69"2H9G/D7H``$B;P`DL\IG,BQ*>@`:$B].`"B\A6,&
  2417. +M(`8L!2H`N(9E0+B%8CP@"V<$(%-"$"!O`$`@A$'I``%@``#N<@`2`+*$9AHB
  2418. +M"V<$(E-"$2)O`$`BA")O`"12B2`)8```SGP`'!!2KP`H(&\`*+'O`"1F`/]^
  2419. +M(`MG!B!34I,0A$Z5*`!2@&<&4X=F`/]<(%-"$&```(PO;P`L`"A\`&!,(&\`
  2420. +M*!`0<BVP`68L2H9G*$7H``$B;P`DL\IG'")*>@`:$B])`"B\A6,&(`8L!2H`
  2421. +MN(9E!+B%8RA\`"!O`"@<$'``$!"PA&<84J\`*"!O`"BQ[P`D9JH@"V<F(%-"
  2422. +M$&`@(`MG!B!34I,0A$Z5*`!2@&<$4X=F@"!30A!@!'``8`X@;P!`((0@;P`D
  2423. +M4H@@"$S?;/#>_``83G4``"!O``0B;P`(+V\`#``$+V\`$``(GOP`-$CG+S8F
  2424. +M;P!@*F\`7$CO`P``+$(O`#M"+P`Z0B\`.4(O`#@??``@`#="KP!4</\O0`!0
  2425. +M0B\`-GX`?`!%[P`\8$IP`"!O`"P0$'(@D(%G(E>`9R91@&<258!G!E>`9R)@
  2426. +M,A]\``$`.V`>'WP``0`Z8!8??``!`#E@#A]\``$`.&`&'WP`,``W4J\`+"!O
  2427. +M`"Q*$&:N<`&P+P`[9@8??``@`#=R*B!O`"RR$&8>+&\`,")66)8B$2]!`%1L
  2428. +M"$2O`%0?0``[4J\`+&`,0^\`5$ZZZ'K1KP`L(&\`+!`0<BZP`69&4J\`+'`J
  2429. +M(&\`++`09APB;P`P(%%8D2`0+T``4&P&</\O0`!04J\`+&`60^\`4$ZZZ#@J
  2430. +M`&8&0J\`4&`$VZ\`+!]\`"``-W``(&\`+!`0<DR0@6<4<AR0@6<&68!G"F`2
  2431. +M'WP``@`V8`8??``!`#92KP`L(&\`+%*((F\`+!`1<@`2`!]``"0O2``F<%"2
  2432. +M@&<``1!1@6<``1QP"Y*`9P`!T%.!9U!;@6=,6X%G(E.!9P`!`E.!9P``ZE>!
  2433. +M9P`!@%6!9P``\%>!9P``ZF```;@D;P`P<`*P+P`V9@X@4EB2(E`@$S*`8``"
  2434. +M2B!26)(B4"*38``"/B)O`#`@45B1*!!J!'X!1(1*AV<,1>\`/1]\`"T`/&`B
  2435. +M2B\`.F<,1>\`/1]\`"L`/&`02B\`.6<,1>\`/1]\`"``/'P!(`0@2DZZYE(J
  2436. +M`"`O`%!F!DJ$9P`!Y"`O`%!J!G(!+T$`4"@O`%"8A6\<($K1Q"`%(DI.NNH<
  2437. +M<C`@2F`"$,%3A&3Z*B\`4-R%(`53@&8``000$K`O`#=F``#Z2J\`4&8``/)"
  2438. +M$F```.P@+P!0:@9P""]``%`??``!`#9P`K`O`#9F$")O`#`@45B1(!!X`#@`
  2439. +M8`HB;P`P(%%8D2@0$"\`)')UL`%G`/]:<F^P`68>2B\`.&<,1>\`/1]\`#``
  2440. +M/'P!(`0@2DZZY<)@`/\^2B\`.&<2'WP`,``\1>\`/A]\`'@`/7P"(`0@2DZZ
  2441. +MY=XJ``@O``4`)&8`_Q1![P`\3KKFRF``_P@B;P`P(%%8D210(`IF!$7Z`/(@
  2442. +M2DH89OQ3B)'**@@@+P!0:P2PA6\$+T4`4"PO`%!@('P!(F\`,"!16)$@$!]`
  2443. +M`#Q"+P`]8`9P`&```*Q%[P`\("\`5+"&;`AR`"]!`%1@!)VO`%1*+P`[9QY@
  2444. +M"'``$!H@2TZ54X9L]&`&($MP($Z54Z\`5&ST8&I*AV8,2B\`.68&2B\`.F=&
  2445. +M$!)R(+`!9PQT*[`"9P9T+;`"9C)*AFLNLB\`-V828`IP`!`O`#<@2TZ54Z\`
  2446. +M5&SP<``0&B!+3I53AF`*<``0+P`W($M.E5.O`%1L\&`(<``0&B!+3I53AFST
  2447. +M("\`)DS?;/3>_``T3G4``"!O``0B;P`(+V\`#``$+V\`$``(+V\`%``,GOP`
  2448. +M#$CG`S0J2"])`!1^`"9O`"Q@``$@0J\`&'P`(&\`*!P8)&\`%"](`"A#[`J]
  2449. +M"#$``V@`9@``VG`EO(!F``"H<"6P$&8@4J\`*$Z5+`!![`J]"#```V@`9O!P
  2450. +M);R`9P``U&```-IP*B!O`"BP$&<&)$M8BV`&E<I2KP`H0J\`'$AO`!@O"DAO
  2451. +M`"0O+P`P(&\`.")-3KKU'D_O`!`D0$J`5L%$`4B!2,$L`6<$+TH`*"`O`!QR
  2452. +M_["!9A!*AF<$WJ\`&$J';G@@`6!V("\`'&<,<@`2`"`!(&\`%$Z0(`IG7MZO
  2453. +M`!A@3DZ5+T``'"!O`!Q#[`J](`@(,0`#"`!FZ"`O`!R\@&<N<@`2`"`!3I)@
  2454. +M+DZ5+T``'"!O`!Q#[`J](`@(,0`#"`!FZ"`O`!QR`!(`(`%.DB!O`"A*$&8`
  2455. +M_MH@!TS?+,#>_``,3G4``"!O``0B;P`(+V\`#``$+V\`$``(GOP`#$CG`!0F
  2456. +M22I(+V\`'``08#AP);`O``QF)B!O`!BP$&8&4J\`&&`8+PLO#4/O`!A.NOHL
  2457. +M4$]*@&<&+T``&&`*<``0+P`,($M.E2!O`!@0&!]```PO2``82@!FMDS?*`#>
  2458. +M_``,3G4@;P`$((A8D$*H``0A2``(3G4``"!O``1(YP`&*DA*K0`*9PHB32QX
  2459. +M``1.KOZ8&WP`_P`(</\K0``4<``0+0`/+'@`!$ZN_K`B37`B3J[_+DS?8`!.
  2460. +M=0``(&\`!"`O``A(YP,6+@`J2'#_+'@`!$ZN_K8<`$B&2,8@!E*`9@1P`&!@
  2461. +M<"(B/``!``%.KO\Z)D!*@&8((`9.KOZP8$1!ZP`*(,T71P`)%WP`!``(0A@0
  2462. +MQI/)3J[^VB=``!`@#6<((DM.KOZ>8!I!ZP`8)T@`%$'K`!0G2``<0JL`&!=\
  2463. +M``(`("`+3-]HP$YU+P@O`$ZY``!:5E!/3G4``"`O``0@;P`((F\`#"(O`!!*
  2464. +M@&8:+P$O"2\(2'H`%$AL#`A.NNK>WOP`%$[ZVZQ.=4%S<V5R=&EO;B`H)7,I
  2465. +M(&9A:6QE9"!I;B!F:6QE("5S(&%T(&QI;F4@)60*`````````^P````-````
  2466. +M````I=X``#&.```Q<```,78``#&"```QB```,7P``#%J```Q7@``,60```)N
  2467. +M```"8@```F@````"`````0```!0````*`````````_(```/J```#'DUE;6]R
  2468. +M>2!E>&AA=7-T960``&X@(3T@,```9&9A+F,`365M;W)Y(&5X:&%U<W1E9```
  2469. +M;B`A/2`P``!D9F$N8P!-96UO<GD@97AH875S=&5D``!5;F9I;FES:&5D(%P@
  2470. +M<75O=&4``%5N9FEN:7-H960@7"!Q=6]T90``56YB86QA;F-E9"!;``!5;F)A
  2471. +M;&%N8V5D(%L``%5N8F%L86YC960@6P``56YB86QA;F-E9"!;``!5;F)A;&%N
  2472. +M8V5D(%L``%5N8F%L86YC960@6P``56YB86QA;F-E9"!;``!5;F)A;&%N8V5D
  2473. +M(%L``%5N8F%L86YC960@6P``56YB86QA;F-E9"!;``!5;F)A;&%N8V5D("@`
  2474. +M`$YO('-Y;G1A>"!S<&5C:69I960`56YB86QA;F-E9"`I``!O=70@;V8@;65M
  2475. +M;W)Y`````````````````$EN=F%L:60@<F5G=6QA<B!E>'!R97-S:6]N``!5
  2476. +M;FUA=&-H960@7"@``%5N;6%T8VAE9"!<*0``4')E;6%T=7)E(&5N9"!O9B!R
  2477. +M96=U;&%R(&5X<')E<W-I;VX`3F5S=&EN9R!T;V\@9&5E<```4F5G=6QA<B!E
  2478. +M>'!R97-S:6]N('1O;R!B:6<``$UE;6]R>2!E>&AA=7-T960`````!]!.;R!P
  2479. +M<F5V:6]U<R!R96=U;&%R(&5X<')E<W-I;VX``$UE;6]R>2!E>&AA=7-T960`
  2480. +M`$UE;6]R>2!E>&AA=7-T960``````````````````5!/4TE83%E?0T]24D5#
  2481. +M5``M+0``)7,Z(&]P=&EO;B!@)7,G(&ES(&%M8FEG=6]U<PH`)7,Z(&]P=&EO
  2482. +M;B!@+2TE<R<@9&]E<VXG="!A;&QO=R!A;B!A<F=U;65N=`H``"5S.B!O<'1I
  2483. +M;VX@8"5C)7,G(&1O97-N)W0@86QL;W<@86X@87)G=6UE;G0*```E<SH@;W!T
  2484. +M:6]N(&`E<R<@<F5Q=6ER97,@86X@87)G=6UE;G0*`"5S.B!U;G)E8V]G;FEZ
  2485. +M960@;W!T:6]N(&`M+25S)PH`)7,Z('5N<F5C;V=N:7IE9"!O<'1I;VX@8"5C
  2486. +M)7,G"@`E<SH@=6YR96-O9VYI>F5D(&]P=&EO;BP@8VAA<F%C=&5R(&-O9&4@
  2487. +M,"5O"@``)7,Z('5N<F5C;V=N:7IE9"!O<'1I;VX@8"TE8R<*```E<SH@;W!T
  2488. +M:6]N(&`M)6,G(')E<75I<F5S(&%N(&%R9W5M96YT"@`````E<SH@365M;W)Y
  2489. +M(&5X:&%U<W1E9"`H)7,I"@``)7,Z($UE;6]R>2!E>&AA=7-T960@*"5S*0H`
  2490. +M`"5S.B!R96%D(&]N("5S(&9A:6QE9"`H)7,I"@`\<W1D:6X^`"5S)6,``"5D
  2491. +M)6,``"5D)6,```````$M+2TM+2TM+2TM"@`M+2TM+2TM+2TM"@`M+2TM+2TM
  2492. +M+2TM"@!5<V%G93H@)7,@6RU#5F)C:&EL;G-V=WA=(%LM;G5M72!;+4$@;G5M
  2493. +M72!;+4(@;G5M72!;+68@9FEL95T*("`@("`@(%LM95T@97AP<B!;9FEL92XN
  2494. +M+ET*`$=.52!E/V=R97`L('9E<G-I;VX@,2XV```P,3(S-#4V-S@Y03I".D-6
  2495. +M8F-E.F8Z:&EL;G-V=W@``"5D```E9```)7,*`"5S.B!G971O<'0H,RD@;&5T
  2496. +M(&]N92!B>2$*``!R`"5S.B`E<SH@)7,*`%PH7EQ\6UY!+5IA+7I?75PI7"@`
  2497. +M7EPH`%PI7"A;7D$M6F$M>E]=7'PD7"D`7"DD`$U54U1$14)51P!M=7-T(&AA
  2498. +M=F4Z("(E<R(*```E<SH@)7,Z("5S"@`E<SHE9`H``"5D"@`E<PH`)60*`#QS
  2499. +M=&1I;CX*```E<SH@)7,*`$]K```````4```````````````````%B&-O;G-O
  2500. +M;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R>0```'1I;65R+F1E=FEC90``
  2501. +M``#_____9FEF;RYL:6)R87)Y```````````````````%Z``!```````````%
  2502. +MZ@```````````````$`H(REA;&QO8V$N8PDQ+C$```````````````!&86EL
  2503. +M960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=````````$YO(&UE
  2504. +M;6]R>0```&$`1F%I;&5D('1O(&-R96%T92!T:6UE<@``3DE,.@``3DE,.@``
  2505. +M3DE,.@``*@!.24PZ``!);G9A;&ED('=I;&1C87)D("5S`$5R<F]R(&5X<&%N
  2506. +M9&EN9R!A<F=U;65N=',`55-%4@``=7-E<@``55-%4DY!344``$A/344``',Z
  2507. +M``!32$5,3`!B:6XZ<V@``$A/4U1.04U%``!A;6EG80!.24PZ`````)LP('$`
  2508. +M`$9A:6QE9"!T;R!I;FET:6%L:7-E($DO3P``86UI9V$@<W!E8VEF:6,@97)R
  2509. +M;W(`````!RA5;FMN;W=N(&5R<F]R`&YO="!O=VYE<@!N;R!S=6-H(&9I;&4@
  2510. +M;W(@9&ER96-T;W)Y`&YO('-U8V@@<')O8V5S<P!I;G1E<G)U<'1E9"!S>7-T
  2511. +M96T@8V%L;`!I+V\@97)R;W(`;F\@<W5C:"!D979I8V4@;W(@861D<F5S<P!A
  2512. +M<F=U;65N="!L:7-T('1O;R!L;VYG``!E>&5C(&9O<FUA="!E<G)O<@!B860@
  2513. +M9FEL92!N=6UB97(`;F\@8VAI;&0@<')O8V5S<P``;F\@;6]R92!P<F]C97-S
  2514. +M97,`;F]T(&5N;W5G:"!M96UO<GD`<&5R;6ES<VEO;B!D96YI960`8F%D(&%D
  2515. +M9')E<W,`8FQO8VL@9&5V:6-E(')E<75I<F5D`&UO=6YT(&1E=FEC97,@8G5S
  2516. +M>0``9FEL92!E>&ES=',`8W)O<W,M9&5V:6-E(&QI;FL`;F\@<W5C:"!D979I
  2517. +M8V4``&YO="!A(&1I<F5C=&]R>0!I<R!A(&1I<F5C=&]R>0``:6YV86QI9"!A
  2518. +M<F=U;65N=```9FEL92!T86)L92!O=F5R9FQO=P!T;V\@;6%N>2!O<&5N(&9I
  2519. +M;&5S`&YO="!A('1Y<&5W<FET97(``'1E>'0@9FEL92!B=7-Y``!F:6QE('1O
  2520. +M;R!B:6<``&YO('-P86-E(&QE9G0@;VX@9&5V:6-E`&EL;&5G86P@<V5E:P``
  2521. +M<F5A9"UO;FQY(&9I;&4@<WES=&5M`'1O;R!M86YY(&QI;FMS``!B<F]K96X@
  2522. +M<&EP90!M871H(&%R9W5M96YT`')E<W5L="!T;V\@;&%R9V4``$DO3R!S=')E
  2523. +M86T@96UP='D``&9I;&4@;F%M92!T;V\@;&]N9P``9&ER96-T;W)Y(&YO="!E
  2524. +M;7!T>0!T;V\@;6%N>2!S;V9T(&QI;FMS("AL;V]P/RD````'0@``!U````=:
  2525. +M```'=```!X0```><```'I@``!\````?8```'Z@``!_H```@,```('@``"#``
  2526. +M``A"```(3@``"&0```AX```(A```")8```BF```(M@``",8```C8```([```
  2527. +M"0````D2```)(@``"3````E(```)5@``"6P```E\```)B```"98```FH```)
  2528. +MN@``"<X```GB````)@``9&]O<BXE;'@N)6QX``!.;R!M96UO<GD```!````@
  2529. +M("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0$!`0
  2530. +M$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!`0$!
  2531. +M$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0(```````````
  2532. +M````````````````````````````````````````````````````````````
  2533. +M````````````````````````````````````````````````````````````
  2534. +M```````````````````````````````````````````````/H```"^8`````
  2535. +M``````````````````````````````````````P(````````````````````
  2536. +M````````````````````````````````````````````````````````````
  2537. +M```````````"````@``````-__\````.``X```````````````#__P````0`
  2538. +M!````````(EV```,./__````!``$````````B8P``````````````^P````"
  2539. +M````````#&P```Q8````+@````$```Q<```+Y@``"\0```J6```*D@``"HX`
  2540. +M``J*```*A@``"H(```I^```*>@``"G8```IR```*;@``"FH```IF```*8@``
  2541. +M"EX```I:```*5@``"E(```I.```*2@``"D8```I"```*/@``"CH```HV```*
  2542. +M,@``"BX```HJ```*)@``"B(```H>```*&@``"A8```H2```*#@``"@H```H&
  2543. +@```*`@``"?X```<^```%_```!?````6<`````````_(2
  2544. +`
  2545. +end
  2546. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/ls.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/ls.uue
  2547. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/ls.uue    Wed Dec 31 17:00:00 1969
  2548. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/ls.uue    Sat Sep 28 00:00:00 1996
  2549. @@ -0,0 +1,929 @@
  2550. +begin 666 ls
  2551. +M```#\P`````````"``````````$``".[```$S````^D``".[2.=^_B1()`!)
  2552. +M^0`````L>``$+P)(YP#@)FX!%"(K`*QG#.6)($$B*``TY8E@!B(/DJL`.G0`
  2553. +M(#P``"H@LJP0[&0((BP0[-"!=`$F02(\``$``4ZN_SI*@&8(3-\'!&```D`@
  2554. +M0"1`(D`@/```!&>9_``````@W%.`9OH@'&<.($G1W-70((HD25.`8/`H2=G\
  2555. +M`````"E\```J(!'H3-\'`"E.$<1*`DS?``1([(``$<QG2"`,!(``````!H``
  2556. +M`"H@T*P0["(`!(````"`#&X`)``4;1@I0!'D*4$1X)*L$.Q![!'<((%.KOTD
  2557. +M8`(N0"`L$.PO0``$T:P1Z"(/DHL&@0```(`I01&@0JP1R'``(CP``#``3J[^
  2558. +MSB9N`11#^@&(<`!.KOW8*4`J%&8&<&1@``#F*6L`F!'`2JL`K&<``'X@:P"L
  2559. +MT<C1R")H`!#3R=/)(`)R`!(9*4D1T-"!7H`"0/_\*4`1V$CG0$`B/``!``%.
  2560. +MKO\Z3-\"`DJ`9@AP%"\`9P`!!"!`*4`1U"`"4X#4@1&R```@`E."4<C_]A&\
  2561. +M`"`@`E."$;P`(B`"$;$@`"`!4<K_^!"\`"(O"&!*0>L`7$ZN_H!!ZP!<3J[^
  2562. +MC"E`$<@O`"1`("H`)&<8+&PJ%"!`(B@``$ZN_Z`I0!'`(@!.KO^"(&P1R"\(
  2563. +M2&P1G"!H`"0I:``$$=!.NG:83KHV*G``8`0@+P`$)&P1S"4`+'@`!`QN`"0`
  2564. +M%&T22JP1W&<,0>P1W%FL$>1.KOTD+DH@+!&X9P0@0$Z03KIV<$ZZ=Z!*K!'(
  2565. +M9R`L;"H4(BP1P&<$3J[_IBQX``1.KO]\(FP1R$ZN_H9@$BQX``0@+!'89P@B
  2566. +M;!'43J[_+B)L*A1.KOYB("P1Z"),D_P`````3J[_+B`?3-]_?DYU9&]S+FQI
  2567. +M8G)A<GD````@#Y!\``RPK!&@90![>$CG`Q`N+P`0)F\`%$*L$FQP`4*L$?Q"
  2568. +MIRE`$F`I0!)<3KI<Z"E3$>PNBR\'*4`2`&$``<Q03RP`2JP2=&<:+RP'GDAL
  2569. +M`]Y(;!$T3KHA[D*73KHB!D_O``Q*K!)P9P1A`"&@("P2%'(#L(%G+%F`9RA*
  2570. +MK!((9R)*K!(T9AQ*K!(X9A9*K!(L9A!*K!(D9@I*K!(P9@1P`&`"<`%R9"E!
  2571. +M$?1(>"`(*4`2:$ZZ9GA"K!'X*4`1\&$`"!I83[R';`1"K!)<(`;E@-?`8!1(
  2572. +M;`/B2'@``2\;80`(3$_O``Q2AKR';>A*K!)<9RA*K!(\9Q9(;`/F2'@``4AL
  2573. +M`^1A``@F3^\`#&`,0J=(;`/H80`%EE!/2JP1^&<680`-\$JL$CQF#$*G2&P#
  2574. +MZF$`#')03TJL$?AG:&$`$/A*K!'\9P``K`@L``$1+6=$4JP1'B`L$1ZPK!$F
  2575. +M;B(@;!$64JP1%A"\``H(+``&$2UG``"`2&P1$DZZ(-983V!R4ZP1'DAL$1)(
  2576. +M>``*3KH@R%!/8%Y(;!$22'@`"DZZ(+A03V!.2JP1_&=((&P1_$JH``AF/D*L
  2577. +M$F!@."9L$?PI:P`($?PO*P`$+Q-A``4R+I-.NGM*4$\@*P`$9P@O`$ZZ>SQ8
  2578. +M3R\+3KI[-%A/<`$I0!)@2JP1_&;"("P2;"]``!!,WPC`3OI_%B`/D'P`'+"L
  2579. +M$:!E`'EL44](YR,4+B\`("IO`"1"K!)00JP23$AX``%.NEHB6$]*@&<.<`(I
  2580. +M0!((<`$I0!)08`IP`4*L$E`I0!((1^P2#$*;0IM"K!(80JP2($*L$B1(;`/L
  2581. +M)L!.NGYR2H!7P40!2(%(P4?L$BQ"FT*;0IM'[!(X0IM"FT*;0JP21$*L$DA"
  2582. +MK!)42&P#_"E!$BA.NGX\4$]*@&<*+P!.NGXT6$]@`G!02&\`%$AX!`!(>``!
  2583. +M*4`29$ZZ./I/[P`,4H!G#C`O`!9G"'(`,@`I01)D2&P$!$ZZ??A83TJ`9PHO
  2584. +M`$ZZ??!83V`"<`B7RRE`$EA@``-^(`9*@&<``W9R"I"!9P`"P%.`9P`"\%.`
  2585. +M9P`#(%.`9P`#4'(DD(%G``*<<A"0@6<``<Q3@&<``=!3@&<``>!7@&<``>13
  2586. +M@&<``>A5@&<``>Q7@&<``?15@&<``?A7@&<``?Y3@&<``@I3@&<``@Y3@&<`
  2587. +M`A)3@&<``CI7@&<``CQR"9"!9VY3@&=X4X!G``""4X!G``"&58!G``"*4X!G
  2588. +M``+<58!G``"N58!G``"R4X!G``"V4X!G``"X4X!G``"\58!G``#`4X!G``#$
  2589. +M4X!G``#,4X!G``#04X!G``#44X!G``#858!G``#<4X!G``$$8``"AG`!*4`2
  2590. +M1"E`$D!@``)\<`$I0!),0JP24&```FYP`2E`$@Q@``)D<`$I0!(\8``"6G`!
  2591. +M0JP2%"E`$D0I0!)`2JP2"&84+P!.NE@26$]*@%;!=`&4`2E"$@A"K!(D8``"
  2592. +M*G`!*4`2,&```B!P`2E`$BA@``(60JP2"&```@YP!"E`$@A@``($<`$I0!(@
  2593. +M8``!^G`"*4`2+&```?!P`2E`$E!"K!),8``!XG`!*4`2&&```=AP`2E`$B1@
  2594. +M``'.<`,I0!(48``!Q'`"*4`2#&```;HO+`Y43KI\%%A/*4`29'(!L(%L``&D
  2595. +M+RP.5$AL!#)"IR\!3KIO*D_O`!!@``&,<`,I0!((8``!@G`!*4`20&```7A(
  2596. +M;`1*80`#,$AL!$YA``,H4$]@``%B<`(I0!((8``!6'`!*4`2+&```4YP`2E`
  2597. +M$AQ@``%$+RP.5&$``OQ83V```39P`2E`$C1@``$L0JP23$*L$E!@``$@<`%"
  2598. +MK!)0*4`23"E`$E1@``$.<`$I0!(X8``!!'`$*4`2%&```/HO+`Y43KI[5%A/
  2599. +M*4`26'(!L(%L``#D+RP.5$AL!%)"IR\!3KIN:D_O`!!@``#,0JP2%&```,1P
  2600. +M`BE`$A1@``"Z<`$I0!((8```L$AL`VXO+`Y43KIO*E!/+`!L%B\&+RP.5$AL
  2601. +M!&A.NF^(80`<%$_O``SEAD'L`X(I<&@`$A1@>$AL`[(O+`Y43KIN]%!/+`!L
  2602. +M%B\&+RP.5$AL!').NF]280`;WD_O``SEAD'L`\HI<&@`$@Q@0DAL`Q8O+`Y4
  2603. +M3KINOE!/+`!L%B\&+RP.5$AL!'Q.NF\<80`;J$_O``SEAD'L`S8I<&@`$@A@
  2604. +M#'`!*4`4T&`$80`;BB\+2&P!!$AL!`PO#2\'3KICND_O`!0L`%*`9@#\:"`L
  2605. +M#EA,WRC$4$].=2`/64"PK!&@90!TRDCG`!0J;P`02'@`#$ZZ8&8F0"!`(6P1
  2606. +M_``(+J\`$"E`$?Q.NF`<6$\F@"`-9PXO#4ZZ8`Y83R=```1@!$*K``1,WR@`
  2607. +M3G4@#Y!\`!"PK!&@90!T=DCG`30J;P`4?@!"K"FL+PU.NA]06$\F0$J`9AXO
  2608. +M#4AL!(@O+"FL0J=.NFSB<`$I0!)L3^\`$&```/AA``&28!XO"F$``2!83TJ`
  2609. +M9Q(O#4*G2&H`#&$``<I/[P`,WH`O"TZZ(#)83R1`2H!FU"\+3KH?XF$`!Y)8
  2610. +M3TJL$CAG#$AX``$O#6$`!A)03TJL$F!G("1O`!@@"F<,+PI(;`203KINI&`*
  2611. +M+PU(;`263KINF%!/2JP2"&<&2JP2)&<,+P=(;`2<3KIZME!/2JP1^&<$80`*
  2612. +M6DJL$?QG6`@L``$1+6="4JP1'B`L$1ZPK!$F;B`@;!$64JP1%A"\``H(+``&
  2613. +M$2UG+DAL$1).NGV@6$]@(E.L$1Y(;!$22'@`"DZZ>MQ03V`.2&P1$DAX``I.
  2614. +MNGK,4$],WRR`3G4@#UE`L*P1H&4`<S0O#2IO``A(>``(3KI>TB!`((TA;!)(
  2615. +M``183RE`$D@J7TYU(`^0?``,L*P1H&4`<P1(YP`4*F\`#"9L$DA@&DAX``1(
  2616. +M;0`,+Q-.NEAL3^\`#$J`9S(F:P`$(`MFXDJL$D1F'G`NL"T`#&862JP20&<4
  2617. +M$BT`#6<.L@!F!DHM``YG!'`!8`)P`$S?*`!.=2`/64"PK!&@90!RG$CG`P!^
  2618. +M`'P`8"8@;!'P+S!H`$ZZ=")83R!L$?`@,&A&9P@O`$ZZ=!!83U*'<%+<@+ZL
  2619. +M$?AMU$*L$?AP!"E`$@1,WP#`3G4@#Y!\`%2PK!&@90!R2)[\`$1(YP8V+"\`
  2620. +M9"IO`&`D;P!H("P1]"(L$?BR@&8H(@#2@2`!Y8"0@="`D('G@-"!T(`O`"\L
  2621. +M$?`I01'T3KI=[%!/*4`1\"`L$?@B`.6!DH#2@9*`YX'2@-*!)FP1\-?!0JL`
  2622. +M1D*K`$I*AF8(2JP2:&<``MA*%6<22'@`.DAM``%.NG(&4$]*@&8$2A)F!"9-
  2623. +M8#`@34H89OQ3B)'-(@@@2DH89OQ3B)'*THA4@2\!3KHDSB9`+HTO"B\`80`7
  2624. +MND_O``P@+!'X(@#E@9*`TH&2@.>!TH#2@2!L$?#1P47H``1*K!(T9S@O"B\+
  2625. +M3KH:&E!/*@!L-B`L$?@B`.6!DH#2@9*`YX'2@-*!(&P1\-'!2&@`!"\+3KH:
  2626. +M*%!/*@!@#"\*+PM.NAH:4$\J`$J%:B`O"TAL!*8O+"FL0J=.NFF@<`$I0!)L
  2627. +M3^\`$'``8``"$"`L$?@B`.6!DH#2@9*`YX'2@-*!)&P1\-7!(#P``/``P*H`
  2628. +M#`R```"@`&8``09*AF8(2JP2"&8``/HO"B\+80`!V"`L$?@B`.6!DH#2@9*`
  2629. +MYX'2@-*!(&P1\"ZP&$8O"V$``B)/[P`,)D!*@&<``+A*AF<&2JP2"&8(2JP2
  2630. +M+&<``*9(;P`:+PM.NADN4$]*@&8``)1*AF=P2JP2"&=J(#P``/``P*\`(@R`
  2631. +M``!``&982JP2/&8D($TJ2R`L$?@B`.6!DH#2@9*`YX'2@-*!(FP1\"9Q&$8C
  2632. +MB!A&("P1^"(`Y8&2@-*!DH#G@=*`TH$B;!'PT\%-Z0`$0^\`&G(/+-E1R?_\
  2633. +M/-E@'B`L$?@B`.6!DH#2@9*`YX'2@-*!(&P1\"&O`"(82B`+9P@O"TZZ<618
  2634. +M3R`L$?@B`.6!DH#2@9*`YX'2@-*!)FP1\-?!*CP``/``RJL`#`R%``"@`&8&
  2635. +M0JL`3F`D#(4``$``9A9*AF<*2JP2/&8$<`)@"G`!)T``3F`&<`,G0`!.(#P`
  2636. +M``'_T*L`&G)`YXE.NFYJ+`!*K!(H9PP@!E*`:@)2@.*`8`(@!BP`#(```"<0
  2637. +M;1`,K`````42!&P&<`4I0!($#(8``8:@;1`,K`````82!&P&<`8I0!($#(8`
  2638. +M#T)`;10,K`````<2!&P*<`<I0!($8`)\`"\-3KI:;":`4JP1^%A/(`9,WVQ@
  2639. +MWOP`1$YU(`^0?``0L*P1H&4`;M)(YP$T)F\`&"IO`!0N*P`:(`=2@"\`3KI:
  2640. +M9"1`+H<O`"\-3KHA$$_O``PN`&PB+PU(;`2J+RPIK$*G3KIG+'`!*4`2;"Z*
  2641. +M3KIP)$_O`!!@"$(R>``G2@!&3-\L@$YU(`^0?``,L*P1H&4`;F9(YS$V)F\`
  2642. +M)"IO`"`@"V8$<`!@;DAX`"\O#4ZZ;FQ03R1`2H!F#DAX`#HO#4ZZ;EI03R1`
  2643. +M(`IF#"]+`"!,WVR,3OI9FBX*GHU2AR!+2AAF_%.(D<LF!]:(4H,O`TZZ6;(D
  2644. +M0"('(D!@`A+=4X%D^D(R>``B"B0++&PJ%$ZN_(Y83R`*3-]LC$YU(`^0?``,
  2645. +ML*P1H&4`;=!(YP\T+B\`)"IO`"`@34H89OQ3B)'-+`A4ABHL$?A3A2@%Y828
  2646. +MA=B$F(7GA-B%V(1@``"B)FP1\-?$("L`3G(!L(%G!E6`9@``ADJ'9PPO$V$`
  2647. +M`,983TJ`9W0F;!'PU\0D4W`OL!)G!$H59@XO*P!&+Q-A`/B&4$]@/B!*2AAF
  2648. +M_%.(D<H@"-"&+P!.NECN)D`@;!'P+K!(`"\-+P!A`!-B(&P1\"ZP2$8O"V$`
  2649. +M^$XNBTZZ;KA/[P`0<`(@;!'PL+!(3F8*+S!(`$ZZ;J!83U.%<*[8@$J%:@#_
  2650. +M7'P`>@`J;!'P)DU@(G`"L*T`3F<44H4@32)+<!,BV%'(__PRV-;\`%)2AMK\
  2651. +M`%*\K!'X;=@I11'X3-\L\$YU(`]10+"L$:!E`&RL+PTJ;P`(2'@`+R\-3KIL
  2652. +MP%!/2H!G!B!`2^@``7`NL!5F%!(M``%G"K(`9@I*+0`"9@1P`&`"<`$J7TYU
  2653. +M(`^0?``0L*P1H&4`;&(O#2`L$A0,@`````5D``"*T$`P.P`&3OL`!`"2`$P`
  2654. +M7``(`&P@+!(,2H!G&E.`9P93@&<B8&)!^@!Z2JP2&&=60?H`BF!00?H`GDJL
  2655. +M$AAG1D'Z`*Y@0$'Z`,)*K!(89P1!^@#2*DA@,$'Z`1A*K!(89R1!^@$X8!Y!
  2656. +M^@%<2JP2&&<40?H!\F`.0?H`Q$JL$AAG!$'Z`-0J2"\-2'@`4B\L$?@O+!'P
  2657. +M3KIP-$_O`!`J7TYUO^P1H&4`:Z@@;P`((F\`!"`H`"Z0J0`N3G6_[!&@90!K
  2658. +MCB!O``@B;P`$("D`+I"H`"Y.=;_L$:!E`&MT(&\`"")O``0@*``FD*D`)DYU
  2659. +MO^P1H&4`:UH@;P`((F\`!"`I`":0J``F3G6_[!&@90!K0"!O``@B;P`$("@`
  2660. +M'I"I`!Y.=;_L$:!E`&LF(&\`"")O``0@*0`>D*@`'DYUO^P1H&4`:PP@;P`(
  2661. +M(F\`!"`H`!J0J0`:3G6_[!&@90!J\B!O``@B;P`$("D`&I"H`!I.=2`/44"P
  2662. +MK!&@90!JU")O``@@;P`$(%`B41`8L!EF!$H`9O:0(4B`2,!.=2`/44"PK!&@
  2663. +M90!JJB!O``@B;P`$(%`B41`8L!EF!$H`9O:0(4B`2,!.=2`/44"PK!&@90!J
  2664. +M@$CG`38J;P`82'@`+B\53KIJDB9`2'@`+B!O`"@O$$ZZ:H)/[P`0)$`@"V8>
  2665. +M(`IF&B!5+&\`'")6$!BP&68$2@!F]I`A2(!(P&!$(`MF!'#_8#P@"F8$<`%@
  2666. +M-"!+(DH0&+`99@1*`&;VD"%(@$C`+@!F&B!5+&\`'")6$!BP&68$2@!F]I`A
  2667. +M2(!(P&`"(`=,WVR`3G4@#U%`L*P1H&4`:>!(YP$V*F\`'$AX`"XO%4ZZ:?(F
  2668. +M0$AX`"X@;P`D+Q!.NFGB3^\`$"1`(`MF'B`*9AH@52QO`!@B5A`8L!EF!$H`
  2669. +M9O:0(4B`2,!@1"`+9@1P_V`\(`IF!'`!8#0@2R)*$!BP&68$2@!F]I`A2(!(
  2670. +MP"X`9AH@52QO`!@B5A`8L!EF!$H`9O:0(4B`2,!@`B`'3-]L@$YU(`]10+"L
  2671. +M$:!E`&E`2.<#`"`L$@@,@`````5D``$@T$`P.P`&3OL`!`":``@`A`",`)1^
  2672. +M`'P`8&P@;!'PT<8O"&$`!EY83P@L``$1+6="4JP1'B`L$1ZPK!$F;B`@;!$6
  2673. +M4JP1%A"\``H(+``&$2UG+DAL$1).NG,(6$]@(E.L$1Y(;!$22'@`"DZZ<$10
  2674. +M3V`.2&P1$DAX``I.NG`T4$]2AW!2W("^K!'X;8Y@``"080`)4&```(AA``JR
  2675. +M8```@&$`#"!@>'X`?`!@;"!L$?#1QB\(80``;EA/""P``1$M9T)2K!$>("P1
  2676. +M'K"L$29N("!L$192K!$6$+P`"@@L``81+6<N2&P1$DZZ<G983V`B4ZP1'DAL
  2677. +M$1)(>``*3KIOLE!/8`Y(;!$22'@`"DZZ;Z)03U*'<%+<@+ZL$?AMCDS?`,!.
  2678. +M=2`/D'P`3+"L$:!E`&?\GOP`0$CG(00J;P!02&\`."\M``Q.NEXH4$]"+P!"
  2679. +M("P2#$J`9Q)3@&<&4X!G$F`6+VT`+@`,8`XO;0`F``Q@!B]M`!X`#$AO``Q.
  2680. +MNCN.6$\@0$/O`!`2V&;\2JP2$&<&0B\`*&`P(#P`[4X`T*\`#"(L$@"R@&X.
  2681. +M(#S___'PT*\`#+*`;`Q![P`C0^\`&Q+89OQ"+P`@2JP2,&<.+RT`"$AL!*Y.
  2682. +MNFY:4$]*K!(D9SH@/````?_0K0`:<D#GB4ZZ9D8N`$JL$BAG#"`'4H!J`E*`
  2683. +MXH!@`B`'+P`O+!($2&P$M$ZZ;AQ/[P`,<``P+0`0+P!(;P`\2&P$NDZZ;@1/
  2684. +M[P`,2JP2(&<2<``P+0`2+P!(;`3"3KIMZF`8<``P+0`2+P!.NE,>6$\O`$AL
  2685. +M!,A.NFW04$]*K!(<9C)*K!(@9Q)P`#`M`!0O`$AL!-!.NFVR8!AP`#`M`!0O
  2686. +M`$ZZ5"A83R\`2&P$UDZZ;9A03R`\``#P`,"M``P,@```(`!G"`R```!@`&8B
  2687. +M("T`%B(`X(ET`$8"PH+`@B\`+P%(;`3>3KIM8$_O``Q@#B\M`!I(;`3H3KIM
  2688. +M3E!/0>\`%$JL$A!G!$'O`!`O"$AL!.Y.NF#^+I5A``!24$]*K0!.9BY*K0!&
  2689. +M9SA(;!$22&P$\DZZ;5XNK0!&80``,%!/2JP2+&<<+RT`2F$``]183V`02JP2
  2690. +M+&<*+RT`#&$``\)83TS?((3>_`!`3G4@#Y!\``RPK!&@90!EREE/+PTJ;P`,
  2691. +M2JP25&<``K0(+``!$2UG-%*L$1X@+!$>L*P1)FX0(&P1%E*L$180O``B8``"
  2692. +MCE.L$1Y(;!$22'@`(DZZ;0A03V```GA(;!$22'@`(DZZ;/903V```F9*K!),
  2693. +M9P`!+'``$"\`!%&`9SQ3@&=44X!G)E6`9UI3@&<Z<A.0@6=>58!G:'(ZD(%F
  2694. +M<$AL!/A.NE_*6$]@``(F2&P$_$ZZ7[Q83V```AA(;`4`3KI?KEA/8``""DAL
  2695. +M!01.NE^@6$]@``'\2&P%"$ZZ7Y)83V```>Y(;`4,3KI?A%A/8``!X$AL!1!.
  2696. +MNE]V6$]@``'22&P%%$ZZ7VA83V```<00+P`$<B"P`6-R<G^P`61L""P``1$M
  2697. +M9U!2K!$>(BP1'K*L$29N*B!L$192K!$6$(!R"K`!9@`!C`@L``81+6<``8)(
  2698. +M;!$23KINM%A/8``!=%.L$1YR`!(`2&P1$B\!3KIK[%!/8``!7'(`$@!(;!$2
  2699. +M+P%.NFO84$]@``%(<@`2`"\!2&P%&$ZZ:T903V```300+P`$<B"P`65R<G^P
  2700. +M`61L""P``1$M9U!2K!$>(BP1'K*L$29N*B!L$192K!$6$(!R"K`!9@``_`@L
  2701. +M``81+6<``/)(;!$23KIN)%A/8```Y%.L$1YR`!(`2&P1$B\!3KIK7%!/8```
  2702. +MS'(`$@!(;!$2+P%.NFM(4$]@``"X2JP24&9J""P``1$M9U!2K!$>("P1'K"L
  2703. +M$29N*B!L$192K!$6$"\`!!"`<@JP`68``(8(+``&$2UG?$AL$1).NFVP6$]@
  2704. +M<%.L$1YP`!`O``1(;!$2+P!.NFKH4$]@6'(`$@!(;!$2+P%.NFK64$]@1@@L
  2705. +M``$1+6<P4JP1'B`L$1ZPK!$F;@X@;!$64JP1%A"\`#]@(E.L$1Y(;!$22'@`
  2706. +M/TZZ:IY03V`.2&P1$DAX`#].NFJ.4$\0'1]```1F`/V42JP25&=&""P``1$M
  2707. +M9S!2K!$>("P1'K"L$29N#B!L$192K!$6$+P`(F`B4ZP1'DAL$1)(>``B3KIJ
  2708. +M2%!/8`Y(;!$22'@`(DZZ:CA03RI?6$].=2`/D'P`#+"L$:!E`&*>2.<!!"IO
  2709. +M``Q*K!(P9PXO+0`(2&P%'DZZ:8I03TJL$B1G.B`\```!_]"M`!IR0.>)3KIA
  2710. +M=BX`2JP2*&<,(`=2@&H"4H#B@&`"(`<O`"\L$@1(;`4D3KII3$_O``PO%6$`
  2711. +M_&983TJL$BQG"B\M``QA```*6$],WR"`3G4@#U%`L*P1H&4`8AA(YR,`+B\`
  2712. +M$"P'`H8``/``#(8``$``9D8(+``!$2UG,%*L$1X@+!$>L*P1)FX.(&P1%E*L
  2713. +M$180O``O8")3K!$>2&P1$DAX`"].NFE04$]@#DAL$1)(>``O3KII0%!/#(8`
  2714. +M`*``9D8(+``!$2UG,%*L$1X@+!$>L*P1)FX.(&P1%E*L$180O`!`8")3K!$>
  2715. +M2&P1$DAX`$!.NFD"4$]@#DAL$1)(>`!`3KIH\E!/#(8``!``9D8(+``!$2UG
  2716. +M,%*L$1X@+!$>L*P1)FX.(&P1%E*L$180O`!\8")3K!$>2&P1$DAX`'Q.NFBT
  2717. +M4$]@#DAL$1)(>`!\3KIHI%!/#(8``,``9D8(+``!$2UG,%*L$1X@+!$>L*P1
  2718. +M)FX.(&P1%E*L$180O``]8")3K!$>2&P1$DAX`#U.NFAF4$]@#DAL$1)(>``]
  2719. +M3KIH5E!/#(8``(``9FIP`;"L$BQF8B(L%-!G#`@'``9F$`@'``%G"DJ!9DQT
  2720. +M2<Z"9T8(+``!$2UG,%*L$1XB+!$>LJP1)FX.(&P1%E*L$180O``J8")3K!$>
  2721. +M2&P1$DAX`"I.NF?T4$]@#DAL$1)(>``J3KIGY%!/3-\`Q$YU(`]90+"L$:!E
  2722. +M`&!,64](YP,4*F\`&"95?@!*K!(P9P)^!TJL$B1G"B`'T*P2!"X`4H=*K!)4
  2723. +M9UY4AV!:2JP23&=2$"\`$$B`2,!1@&<@4X!G'%.`9QA5@&<44X!G$'(3D(%G
  2724. +M"E6`9PIR.I"!9A)4AV`D2JP25&<$5(=@&E*'8!80+P`0<B"P`6T&<G^P`6T$
  2725. +M6(=@`E*'$!L?0``09IX@+!(L9UXL/```\`#,K0`,#(8``(``9BI3@&9(("P4
  2726. +MT&<0""T`!@`/9A0(+0`!``]G#$J`9BYP2<"M``QG)E*'8"(,A@``0`!G&`R&
  2727. +M``"@`&<0#(8``!``9P@,A@``P`!F`E*'(`=,WRC`6$].=2`/D'P`&+"L$:!E
  2728. +M`%\^GOP`$$CG#P!^`'H`?`!@&B!L$?#1QB\(80#^S%A/L(=O`BX`4H5P4MR`
  2729. +MNJP1^&W@5(<O1P`8("P29"(O`!A.NEX(+@!F`GX!("P1^"('3KI=^"]``!`@
  2730. +M+!'X(@=.NEWJ2H%6P$0`2(!(P"(O`!#2@$*O`!PO00`48```RBP%>``@!>6`
  2731. +MD(70@)"%YX#0A="`*@`@!^6`D(?0@)"'YX#0A]"`+T``$"!L$?#1Q2\(80#[
  2732. +MXB!L$?#1Q2Z(80#^*EA/+@#<KP`4VJ\`$+RL$?AL&"`'T(0N!-ZO`!@O!R\`
  2733. +M80`#HE!/*`=@O@@L``$1+6="4JP1'B`L$1ZPK!$F;B`@;!$64JP1%A"\``H(
  2734. +M+``&$2UG+DAL$1).NFA86$]@(E.L$1Y(;!$22'@`"DZZ99103V`.2&P1$DAX
  2735. +M``I.NF6$4$]2KP`<+B\`%"HO`!RZAVT`_RQ,WP#PWOP`$$YU(`^0?``0L*P1
  2736. +MH&4`7=113TCG#P!^`'H`?`!@&B!L$?#1QB\(80#]9%A/L(=O`BX`4H5P4MR`
  2737. +MNJP1^&W@5(<O1P`0("P29"(O`!!.NER@+T``%&8&<`$O0``4>@!^`'P`>`!@
  2738. +M``"J2H9G``""(`8B+P`43KI<>$J!9EP(+``!$2UG0E*L$1X@+!$>L*P1)FX@
  2739. +M(&P1%E*L$180O``*""P`!A$M9RY(;!$23KIG:EA/8")3K!$>2&P1$DAX``I.
  2740. +MNF2F4$]@#DAL$1)(>``*3KIDEE!/>@!@%B`'T(4N!=ZO`!`O!R\`80`"0%!/
  2741. +M*@<@;!'PT<0O"&$`^D`@;!'PT<0NB&$`_(A83RX`4H9P4MB`O*P1^&T`_U((
  2742. +M+``!$2UG0E*L$1X@+!$>L*P1)FX@(&P1%E*L$180O``*""P`!A$M9RY(;!$2
  2743. +M3KIFSEA/8")3K!$>2&P1$DAX``I.NF0*4$]@#DAL$1)(>``*3KIC^E!/3-\`
  2744. +M\%!/3G4@#U%`L*P1H&4`7&!(YP\`?@!\`&```30J!R@&Y828AMB$F(;GA-B&
  2745. +MV(0@;!'PT<0O"&$`^^!83]Z`4H:\K!'X;`)4ATJ%9V"^K!)D;5H(+``!$2UG
  2746. +M0E*L$1X@+!$>L*P1)FX@(&P1%E*L$180O``*""P`!A$M9RY(;!$23KIF(%A/
  2747. +M8")3K!$>2&P1$DAX``I.NF-<4$]@#DAL$1)(>``*3KIC3%!/GH4@;!'PT<0O
  2748. +M"&$`^0Y83[RL$?AL``".""P``1$M9S!2K!$>("P1'K"L$29N#B!L$192K!$6
  2749. +M$+P`+&`B4ZP1'DAL$1)(>``L3KIB_E!/8`Y(;!$22'@`+$ZZ8NY03P@L``$1
  2750. +M+6<P4JP1'B`L$1ZPK!$F;@X@;!$64JP1%A"\`"!@(E.L$1Y(;!$22'@`($ZZ
  2751. +M8KA03V`.2&P1$DAX`"!.NF*H4$^\K!'X;0#^R`@L``$1+6="4JP1'B`L$1ZP
  2752. +MK!$F;B`@;!$64JP1%A"\``H(+``&$2UG+DAL$1).NF4<6$]@(E.L$1Y(;!$2
  2753. +M2'@`"DZZ8EA03V`.2&P1$DAX``I.NF)(4$],WP#P3G4@#Y!\``RPK!&@90!:
  2754. +MKEE/2.<#`"PO`!0N+P`08```P"`'(BP26$ZZ69XO0``((`8B+!)83KI9D+"O
  2755. +M``AO6`@L``$1+6<P4JP1'B`L$1ZPK!$F;@X@;!$64JP1%A"\``E@(E.L$1Y(
  2756. +M;!$22'@`"4ZZ8<Y03V`.2&P1$DAX``E.NF&^4$\@!R(L$EA.NEDZWJP26)Z!
  2757. +M8$@(+``!$2UG,%*L$1X@+!$>L*P1)FX.(&P1%E*L$180O``@8")3K!$>2&P1
  2758. +M$DAX`"!.NF%V4$]@#DAL$1)(>``@3KIA9E!/4H>^AFT`_SY,WP#`6$].=;_L
  2759. +M$:!E`%G(2.<@-"9O`!PJ;P`4)&\`&'`NL!)F#B!O`!A**``!9R1@`AK:2A)F
  2760. +M^K7O`!AC%A`J__]R+[`!9PQT.K`"9P8:P6`"&MM*$V;Z0A5,WRP$3G4@#Y!\
  2761. +M``RPK!&@90!9:B\L$>Q(;`4J2&P1-$ZZ7\Q(;`942&P1-$ZZ7\!(>``!3KI>
  2762. +MXD_O`!A.=0``3OD``(2J3OD``(.83OD``(AL3OD``(6\3OD``(.<3OD``(/4
  2763. +M3OD``(6(3OD``(4^3OD``(*T<&%(YR`R(&\`&$/O`!Q%^@`<)F\`%"0++'D`
  2764. +M```$3J[]]B`+D(),WTP$3G46P$YU```@;P`$("\`"")O``PO;P`0``193TCG
  2765. +M(30N`"9O`!PJ2"1)+TD`%&`"&MI*$F<$4X=N]K7O`!1C&A`J__]R+[`!9Q!T
  2766. +M.K`"9PI3AV\&&L%@`AK;2A-G!%.';O9"%4J'7L!$`$B`2,!,WRR$6$].=2`O
  2767. +M``0@;P`((F\`#%E/2.<G-BX`*D@O20`@2JP3?&<``/X@;!-\)F@`#$ZZ!0XB
  2768. +M*P`$LH!F``#H(&P3@$AH`"Q!["BL(E-P`$8`80#_6%A/2H!G``#*0>PHK")-
  2769. +M$!BP&68``+Q*`&;T9@``M$J'9A`@;!.`("@`&'(#L(%G``"@(&P3@"`H`!AR
  2770. +M_+"!9P19@&8^(FP3?"(1+&PJ%$ZN_X(L`"!L$X#0_``L(@AT_DZN_ZPJ`&<2
  2771. +M(@5![!)X)`A.KO^:(@5.KO^F(@9.KO^"8`8I:``@$G@@;!.`*6@`!!+X*6@`
  2772. +M"!+T0^@`#$7L$OPDV239)-D@;!.`*6@`&!)\*6@`'!+L+R\`("\K`1@@34/L
  2773. +M$GAP`$ZZ-FA03W`!8`)P`$S?;.183TYU(&\`!")O``A(YP`4)DDJ2$ZZ#5X@
  2774. +M32)+<`!A`/[(2H!G!'``8`P@32)+3-\H`$[Z-SQ,WR@`3G4@;P`$(F\`"$CG
  2775. +M`!0F22I(3KH-)B!-(DMP`6$`_I!*@&9P2'@`_TAL**PO#4ZZ"3Q/[P`,2H!J
  2776. +M#"!-(DM,WR@`3OHV\DO30IU"JP`2<`$W0``.0FL`$"=\```"```R-T``#$*K
  2777. +M`#9!["BL(DA*&6;\4XF3R"=)`!9"G2`\#PP_`"=``"(G0``:)T``*BK\``"A
  2778. +M_W``3-\H`$YU(&\`!%E/2.<`%"](``@@;P`(*F@!#&`*)E4@34ZZ5^XJ2R`-
  2779. +M9O),WR@`6$].=2!O``2>_``02.<@-BI()FT`#$/K`0PO2``<+TD`("!+8;1"
  2780. +MK!-\0JL!#$*M``0@%>6`($`G:``,`1A!ZP`(+T@`&&```)Y!ZP`0(DA*&6;\
  2781. +M4XF3R"`)D<C0_``L<@`R`-*(4H%T`#0!/T``%C]!`!0@`DZZ6-8D0$J`9@9P
  2782. +M#&```)Q-TD*>(&\`(""*+U``("SK`(@LZP"$0>L`C$/J``PBV"+8(M@E:P`,
  2783. +M`!@E:P!\`!Q+Z@`@.V\`%``$.V\`%@`&(&\`'"`H``12J``$*T``"$'J`"Q#
  2784. +MZP`0$-EF_"JK``@J;P`<(A4D+P`8+&PJ%$ZN_Y1*@&8`_TXG:P$,`1!"K0`$
  2785. +M+&PJ%$ZN_WQR=-*!L(%F!'`!8`I.NC?0*4`IK'``3-]L!-[\`!!.=2!O``19
  2786. +M3TCG(#8O2``4<!!.NE@,*D!P1^6(3KI8`B9`(&\`%"`(2AAF_%.(D<`@"%*`
  2787. +M3KI7ZB1`3KH+"B`-9P``@B`*9WP@"V=X*TL`#"M\```!'``(D<@G2`$0)T@!
  2788. +M#"=(`10FBB!O`!04V&;\3KH!=B=```0B+P`4+&PJ%'3^3J[_K"J`9R)!ZP`(
  2789. +M(@`D""QL*A1.KO^:2H!G#B!-80#^.$J`9Q0@#6`^+&PJ%$ZN_WQ.NC<**4`I
  2790. +MK"!-80``-F`D<`PI0"FL(`UG!B!-3KI5XB`*9P8@2DZZ5=@@"V<&($M.NE7.
  2791. +M<`!,WVP$6$].=2!O``1(YP`6*D@F;0`,3KH*1$*L$WP@2V$`_:`@4TZZ5:(@
  2792. +M%6<*(@`L;"H43J[_IB!M``Q.NE6,($U,WV@`3OI5@B!O``193TCG`S0O2``4
  2793. +M(&\`%"IH``R7RTZZ"?A*K0$49R1^`"1M`0P@;P`4+"@`!&`$4H<D4KZ&;`0@
  2794. +M"F;T*TH!$$*M`10@+0$09R(F0-;\`"`I;P`4$WQ%[0$0(%(I2!.`(%(DT"!O
  2795. +M`!12J``$(`M,WRS`6$].=2!O``0O#2I(3KH)D"`M``0J7TYU(&\`!"`O``A(
  2796. +MYP$4+@`J2"9M``Q.N@EP<`$G0`$4*T<`!$S?*(!.=4CG`0(L;"H4<@!.KO^"
  2797. +M+@`B`$ZN_X(@!TS?0(!.=0``(&\`!")O``A93TCG,S8J2'X`(&P4L"PH`.`O
  2798. +M20`@2H9F($JL$<AF&D'L![PB""QL*A0D/````^U.KO_B+`!G`GX!2H9G-B(&
  2799. +M0>P'QB0(0>P1T"8(+&PJ%$ZN_IXB!B0-)B\`($ZN_IXB!G0*3J[^R$J'9U@B
  2800. +M!DZN_]Q@4"!L%+`F:`"X,'S__[?(9T!#[`?,<"4L>``$3J[]V"1`2H!G+"EL
  2801. +M$=`'L"E-![0O"B!++$I#[`>HE<HF;P`D3J[]M$S?!``B2BQX``1.KOYB3-]L
  2802. +MS%A/3G4@;P`$0^\`"&$`_RI.=2!O``1#[P`(80#_''`43KI7NDYU``!(YP`&
  2803. +M<`AR`"QX``1.KO\Z*D!*@&8$<`!@+D*M``1(>``H<``O`$'L!^!R`9/)P4%.
  2804. +MNC;&4$\J@&8,(DUP"$ZN_RYP`&`"(`U,WV``3G4@;P`$2.<`!BI((`UG&"!-
  2805. +M80``'B!53KHW"B)-<`@L>``$3J[_+DS?8`!.=2!O``1(YP`&*DA*K0`$9Q0B
  2806. +M52QX``1.KOX@(E5.KOXF0JT`!$S?8`!.=2!O``0@4")H``YP`!`I``]R`>&A
  2807. +M(`%.=2!O``0@+P`((B\`#$CG`P8L`2X`*DAAJDJ'9@1*AF<>(E4C1P`@(T8`
  2808. +M)#-\``D`'"QX``1.KOXR<`$K0``$3-]@P$YU(&\`!$CG``8J2$JM``1G'")5
  2809. +M+'@`!$ZN_BQ*0&<.(E5.KOXF0JT`!'`!8`)P`$S?8`!.=2\.("P4O"(`2$%"
  2810. +M0=*`("P4L+.`*4`3B$*L$XQ#[`?T<``L>``$3J[]V"E`$X1P_TZN_K9(@$C`
  2811. +M*4`'\$JL$X1G"$J`:P1P`6`"<``I0!.0+%].=2\.("P'\&L(+'@`!$ZN_K`@
  2812. +M+!.$9PHB0"QX``1.KOYB+%].=2`O``113TCG`P`N`$ZZ!HP@!TZZ`9!*@&<H
  2813. +M(D`@:0`<<D#EB<*1+T@`#"`!(&D`!")O``Q.D2P`(`=.N@%((`9@`G#_3-\`
  2814. +MP%!/3G4@+P`$+P<N'V"N```@;P`$("\`"")O``PO;P`0``0O;P`4``@O;P`8
  2815. +M``PO;P`<`!`O;P`@`!0O;P`D`!A13TCG!Q0N`$CO`P``%'P`*FP3E&`62JT`
  2816. +M!&8*,'P``2M(``1@#%*&VOP`)+RL$YAMY"`L$YB\@&9X<@K3K!.8("P3F"(`
  2817. +MYX'2@.6!(`%.NE*<*D!*@&8,<`PI0"FL</]@``".</;0K!.8(@#G@=*`Y8$@
  2818. +M;!.4(DU@`A+84X%D^B`L$Y1G!B!`3KI0]BE-$Y1Z]MJL$Y@@!>>`T(7E@-O`
  2819. +ME\LK2P`$4H7:_``DNJP3F&WP(`;G@-"&Y8`@;!.4(:\`%`@$(8<(`"&O`!@(
  2820. +M"$OO`"`AG0@,(9T($"&="!1+[P`L(9T(&"&="!PAG0@@(`9,WRC@4$].=2`O
  2821. +M``0B`&L6LJP3F&P0(`'G@-"!Y8`@;!.40K`(!$YU("\`!$CG`00N`&L>OJP3
  2822. +MF&P8(`?G@-"'Y8`J;!.4V\!*K0`$9P0@#6`(<`DI0"FL<`!,WR"`3G4@+!.8
  2823. +M3G4``"!O``1(YP`&*D@L;!3$3J[_O@:5#PP_`'``3-]@`$YU("\`!"!O``A9
  2824. +M3P2`#PP_`"(\``%1@"Z`3KI-6B"`(!<B/``!48!.NDU,(`$N@7(\3KI-0B%`
  2825. +M``0@%W(\3KI--B`!Y8"0@>>`T('0@"%```A83TYU(&\`!%E/2.<@!$O0(!TB
  2826. +M`.F!DH`@`>>`T($B`.6!TH#O@2`=)`#I@I2`Y8(@'2]!``AR,DZZ3.K0@M"O
  2827. +M``@&@`\,/P!,WR`$6$].=2`O``193RZ`0>P(""`(6$].=2!O``193RZ(0>P(
  2828. +M""`(6$].=2`L"`A.=0``(&\`!")O``@@+P`,64](YS\V+@`J2"])`"B7RTZZ
  2829. +M`[`B#20++&PJ%$ZN_7XF0"("3J[]>"`+9@9.NC$(8%XD;P`H0A(J!U*%(A,D
  2830. +M*P`$)@TH"BQL*A1.KOY*2H!G&"(+3J[]>$H29@1P`F`L+P1.NDT\6$]@*$ZN
  2831. +M_WPL`'(R1@&P@68(""L``0`+9I0B"TZN_7@@!DZZ+[(I0"FL</],WVS\6$].
  2832. +M=0``64]*K`@Z9@Q![P`#*4@(.F'N8!9![P`#(FP(.K/(9`1P`6`"</\I0!.<
  2833. +M6$].=5E/2.<!%"XO`!1*K!.<9@)AP"IL"#Y@+B`L$YQO#$'O``\B;0`$L\AB
  2834. +M$$J`:AQ![P`/(FT`!+/(9!`F52\-3KI.(EA/*DL@#6;.*4T(/DJ'9@1P`&`B
  2835. +M4(<O!TZZ3W(@0""L"#Y#[P`3(4D`!$/H``A83RE`"#X@"4S?*(!83TYU```@
  2836. +M+P`$64\N@$'L"%H@"%A/3G4@;P`$64\NB$'L"%H@"%A/3G4@+P`$64\N@"`L
  2837. +M%*QG#B!`3KKZ_DJ`9P1R`6`"<@`@`5A/3G4@+P`$(&P4K'(`3OKZI$ZZ^=@I
  2838. +M0!2L9@I(;`AH3KKYM%A/(&P4K$ZZ^FB!K!.@3G4@;!2L3OKZ!`CL``P3HDYU
  2839. +M("\`!`@```Q6P$0`2(!(P$YU".P`#1.B3G4@+P`$"```#5;`1`!(@$C`3G5.
  2840. +MNB^2<``@;"GD$"@`#W(!X:&#K!.@3G5.^B_D("\`!%E/2.<!%B]``!!^`&`N
  2841. +M("T`%$ZZ+SHF0$J`9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL>``$3J[_
  2842. +M+B!L*>0L>``$3J[^C"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`<`'OH"P`
  2843. +M<`F^@&8&<`!.N@L4("P4I,"&9P:-K!2H8'HJ!D:%RZP4J$J':V9P(+Z`;&`@
  2844. +M!^>`0>P3I"IP"``P?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X48!G-&`*
  2845. +M2&P(@$ZZ^'!83W``3KH*MF`@(`UG'"`'YX`H!D'L$Z2(L`@$B:P4I"`'3I5&
  2846. +MA,FL%*0@+!2HP(9FBDS?(/!.=2`O``0O#B(L$Z""@'``+'@`!$ZN_LXL7TYU
  2847. +M("\`!"\.(@`@+!.@@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A`/X02H!G
  2848. +M"'P!<`YA`/\,(`=A`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!<`-A`/[H
  2849. +M(`=A`/Z&2H!G"'P!<!1A`/[6(`9,WP#`3G4@+P`$+P<I0!&H<`@N'V``_KQP
  2850. +M`&$`_V!@D&#V2.<!%'X`2^P3I#9\``$JBT*M``12AU"-<""^@&WP0JP4J$*L
  2851. +M%*1"K!.@80#]U&$`_>IA`/VB3-\H@&``_?AA`/VX8`#^"```2&P(E$ZZ]TQ8
  2852. +M3TYU("\`!"\-3KI,="I`2H!F`F'B(`TJ7TYU(&\`!"`O``@O"TZZ2F@F0$J`
  2853. +M9@)AQB`+)E].=2!O``0O#2I((`UF!$OL")X@34H89OQ3B)'-(`A2@$ZZ3"@@
  2854. +M0$J`9@1P`&`((D@2W6;\(`@J7TYU64](YP,T?@!\`"!L%+`F:`#08"Q**P`(
  2855. +M9B0P/`4`P&L`#F8:4H<@:P`*(`A*&&;\4XB1P"`(W(#<JP`45(8F4TJ39M`@
  2856. +M!U*`Y8#0AF$`_THI0!3(Y8<@0")`T\=%Z0`$+T``%&8*0>P(D"E(%,A@5B!L
  2857. +M%+`J:`#08$)*+0`(9CHP/`4`P&T`#F8P)FT`"BXM`!0@;P`4(,HO2``48`(4
  2858. +MVTH39OH4_``])FT`$&`"%-L@!U.'2H!F]D(:*E5*E6:Z(&\`%$*03-\LP%A/
  2859. +M3G4@;P`$("\`""\-*D@J@$*M``3E@&$`_K0K0``(*E].=2!O``0B;P`(("\`
  2860. +M#$CG(C0F22I(2H!G"B!+80#^PB1`8`(D2R`*9SXB%20M``2T@6TB+`'<AG00
  2861. +MTH*\@6T"(@8J@2`!Y8`@;0`(3KI(YBM```AG$D?M``0B$U*;Y8$@6R&*&`!P
  2862. +M`4S?+$1.=2!O``0B;P`(("\`#&&22H!F!&$`_AI.=2!O``0B;P`(2.<`%"9)
  2863. +M*D@@+0`$T*L`!+"5;Q+0@"J`Y8`@;0`(80#^&BM```@B+0`$Y8$@;0`(T<$@
  2864. +M*P`$(@#E@2)K``A@`A#94X%D^M&M``0@:P`(3-\H`$[Z2-8@;P`$(F\`""]O
  2865. +M``P`!"`O`!`B+P`464](YP(T+`$J221(+T@`$$J`9T13@&<*4X!G``"V8```
  2866. +M]%.&9R(@+P`8(@V0@2!O`!!",`@`($$B;P`08`(2V%.`9/I@``#.0>P(H")O
  2867. +M`!`2V&;\8```OB9O`!A@;G!<L!5F9DHM``%G8%2-<`&\@&8&%/P`86!4(`95
  2868. +M@&9&$"W__TB`2,!R(Y"!9RY5@&<J58!G)E.`9R)3@&<>4X!G&G(5D(%G%'(<
  2869. +MD(%G#E6`9PIR'Y"!9P15@&8$%/P`)Q3M__]@"!3M__]@`A3=N\MECF!`)F\`
  2870. +M&&`V<"JP%68N2BT``6<H5(T0+?__2(!(P')ED(%G#'()D(%F#!3\``I@#A3\
  2871. +M`!M@"!3M__]@`A3=N\MEQD(23-\L0%A/3G6>_`$L2.<_-BIO`5@@;!'$#&@`
  2872. +M)0`49`I(>``43KK)OEA/0JP1#'`!*4`1""E`$2YP`BE`$2HI0!%0*7P```"$
  2873. +M$4R3R2QX``1.KO[:*4`4L$ZZ\YPI0!2T9@I(;`BB3KKS>%A/(&P4M$ZZ]"PI
  2874. +M0!2X+&P4M"!6+&@`%"E.%,1![P$P3J[_OBEO`3`4O$ZZ])1.NONL(&P4L"`H
  2875. +M`*QG$.6`(D`B*0`TY8$I013`8`8I:`"$%,!*%68``.A![`BZ(@@L;"H4)#P`
  2876. +M``/N3J[_XBP`0>P(P"((3J[_XBX`0>P(QB((3J[_XBH`2H9G"$J'9P1*A68B
  2877. +M2H9G!B(&3J[_W$J'9P8B!TZN_]Q*A6<&(@5.KO_<80#[<G`!+P`O!2\`+P<B
  2878. +M!L%!3KHC6"!L$<@@*``<0>\!6&$`_)Y/[P`0?`!^`&!0(FP1R"!I`"0@,'@`
  2879. +M9SXB`$/O`#`D"2QL*A1V0.6+3J[^;DJ`9R8B;!'((&D`)-''("@`!&<((@(D
  2880. +M`$ZN_(Y![P%(0^\`,'`!80#\V%*&4(<@;!'(O*@`'&VF8``"S"QL*A1.KO_*
  2881. +M*`!.KO_$*@!^`"!L%+`L*`#@9BA^`4'L",PB""0\```#[4ZN_^(L`&820>P(
  2882. +MSB((3J[_XBP`9@1A`/JD+P<O!G``+P`O!2($P4%.NB**0>\!6'`!80#[UB`\
  2883. +M```%&F$`^HX@0#%\!```$B]``#QP0.6(80#Z>D_O`!!^0.6/+T`!.&`"4HT0
  2884. +M%4B`2,!![`_I"#```P@`9NP0%6<``A9R(K`!9C!2C29-8!!P*K`59@A*+0`!
  2885. +M9P)2C5*-$!5G!G(BL`%FYB1-$!5R(K`!9@)2C7P"8%1P)[`59B!2C29-8`)2
  2886. +MC1`59P9R)[`!9O0D37`GL!5F`E*-?`%@+B9-8!!P7+`59@A*+0`!9P)2C5*-
  2887. +M$!5G$G(@L`%G#'(*L`%G!G()L`%FVB1-?``@2RH*FHL@!5*`+T@`*&$`^;8F
  2888. +M0$JO`4QF("`%($LB;P`H3KI#WD(S6`!![P%((DMP`&$`^V!@`/\FVH5R$-J!
  2889. +MNH=O%"!O`3A.ND2((`5A`/EV+@4O0`$X+PH@!B!+(F\`+'(!80#[KEA/(@LD
  2890. +M+P$X)@<L;"H43J[\N"H`;!!"$B\O`"A(;`C43KKP?E!/2H5F(B\*(`8@2R)O
  2891. +M`"QR`&$`^W1![P%,(DMP`&$`^NA83V``_JQZ`2!O`"Q"J``(0B@`$4(H`!`O
  2892. +M"B`&($LB;P`L<@)A`/M`0>\!0'`080#Z)EA/(@LD+P`L+&PJ%$ZN_,HH`&8\
  2893. +M8"IZ`")O`"S2_`$80>\!/'`!80#Z($J`9@1X9V`2(B\`+"QL*A1.KOS$*`!*
  2894. +MA&?2(B\`+"QL*A1.KOR^<'30@+B`9PI(;`CH3KKOREA/2H5G(B\*(`8@2R)O
  2895. +M`"QR`&$`^L!![P%,(DMP`&$`^C183V``_?@@+P%`(&\!1$ZZ/AI![P%(0^\!
  2896. +M/&$`^BH@2TZZ0TY@`/W6(&\!.$ZZ0T(@;P`L3KI#.F$`^))![`D"3KHC5BE`
  2897. +M"`AF"$'L"0@I2`@(0>P)#DZZ(T`I0`@<9@8I;`@("!Q![`D83KHC+"E`""!F
  2898. +M"$'L"1XI2`@@0>P)(DZZ(Q8I0`@D9@A![`DH*4@()$'L"3!.NB,`*4`4S&8(
  2899. +M0>P).BE(%,P@+P%,(&\!4")L%,A.NE&^<`!.ND:T3-]L_-[\`2Q.=2`O``1(
  2900. +MYP,`+@!*K!309P0@!V!@?``@!P*````!)&<"?`@(!P`'9P0`1@`%"`<`!&<$
  2901. +M",8``@@'``%G!`C&```(!P`#9P0(Q@`!"`<``&<$",8`!B`'<DG`@7)`L(%F
  2902. +M!`!&`$((!P`)9P0(Q@`%(`8*0``/3-\`P$YU("\`!$CG!@`L`$JL%-!G""`&
  2903. +M`D`/_V!>>@`*1@`/"`8``V<$>DGEC2`&<@7`@5N`9@0(Q0`'"`8``F<$",4`
  2904. +M!`@&``!G!`C%``$@!G)"P(%G!`C%``8(!@`!9P0(Q0`#"`8`!F<$",4```@&
  2905. +M``5G!`C%``D@!4S?`&!.=0``2.<#`$ZZ\7HN`'P`8`HO!DZZ[^)83U*&O(=M
  2906. +M\DS?`,!.=2`O``0O!RX`8=1.NN]63KKV6"!L%+1.NNX4+P=.NL.J6$\N'TYU
  2907. +M("\`!"\'+A]@U```("\`!"(O``@@;P`,44](YP,D+`$N`"I(3KKUU"`'3KKP
  2908. +MV$J`9QHB0"!I`"`O2``4(`8@:0`$(DTD;P`43I)@`G#_3-\DP%!/3G4``)[\
  2909. +M``Q(YR\V*F\`-'X#SJ\`.'P!(&P4L"9H`+@J/````^Q.NO5^2H=G"G`"OH!G
  2910. +M!'(`8`)R`2]!`"AP`;Z`9PA5AV<$<`!@`G`!+T``+"!-0^P)0$ZZ.Z)*@&8&
  2911. +M>/]@``%4</\@;!2P(4``N"(-+&PJ%'3^3J[_K"X`(&P4L"%+`+A*@&9X+&PJ
  2912. +M%$ZN_WQ.NB&,+``@+!&D<BY&`;"!9P1*@&8*?@$J/````^Y@%B`&58!F#`@O
  2913. +M``@`.F<$<`%@`G``+@!*AV<L?``(+P`(`#IG'`@O``\`.F<&>`)@``#6("\`
  2914. +M/$ZZ_88H`&```,AX_V```,(I1BFL</]@``%"0J<L;"H4<@(D#TZN_QQ/[P`$
  2915. +M)$!*@&<,(@<D"DZN_YI*@&86(`IG""0*<@).KO\63KHAYG#_8``!""@J`'0D
  2916. +M"G("3J[_%B('3J[_IG!0Z8C`KP`X#(````4`9@QP$2E`*:QP_V```-I*KP`H
  2917. +M9P8(!``#9@Q*KP`L9Q((!``"9PQP#2E`*:QP_V```+8(+P`)`#IG(B(-)#P`
  2918. +M``/N3J[_XDJ`9P@B`$ZN_]Q@"DZZ(6IP_V```(P(+P`(`#IG!"`%8`8@/```
  2919. +M`^TD`"(-+&PJ%$ZN_^(J`&8(3KHA/G#_8&`(+P`)`#IF!$J&9@0L!&`"?/]^
  2920. +M`$JO`"AG`GX!2J\`+&<$",<``0@O``,`.V<$",<``R\'(`4B!DZZ&SY83RX`
  2921. +M;!QP_R!L%+`A0`"X(@4L;"H43J[_W"!L%+`A2P"X(`=,WVSTWOP`#$YU(&\`
  2922. +M!"\O``PO+P`,+PAA`/VH3^\`#$YU(&\`!$CG.`!P_\`H``-R`!(`</_`*``"
  2923. +M=``4`'#_P"@``78`%@!P_\`0>``8`.&$B(/AA(B"X82(@2`$3-\`'$YU2.<C
  2924. +M-$OL%49![`ED1>P)5"3(0>P):"3(0JP)8$*:?@`L+!5.1^P<D&`\("L`!"(`
  2925. +MY8$@3='K``A#Z`?J1>P)5"6)&`!*@&<&<`$I0`E@2H=G!DJK``1F""`31(`I
  2926. +M0`E<4H?6_``0OH9MP'X`+"P52F`Z<``B!P:!```%V!`U&`!(P.F`($TB``:!
  2927. +M```'4M'U&``&@```!TXD-0@`Y8)#Z`?J1>P)5"6)*`!2A[Z&;<),WRS$3G4@
  2928. +M;P`$(F\`")[\"BA(YSLV+T@`*"])`"P@"&8(3>P);"].`"AP.B!O`"BP$&8$
  2929. +M4J\`*"!O`"AP.DZZ/"I*@&9.<`HB`"!O`"@@"$H89OQ3B)'`THA2@7!!LH!E
  2930. +M!G#_8``"3$'L"7A#[P`Q$MAF_$'O`#%#[`F$3KH\5$'O`#$B;P`H3KH\2$'O
  2931. +M`#$O2``H0J<O+P`L3KK^6E!/+@!2@&8&</]@``(((`=![P!R(CP```G:3KH>
  2932. +M`"P`(`=.NNM$2H!F!G`LO(!D!G#_8``!X$'O`(IA`/XX+@!![P".80#^+BIO
  2933. +M`"PJ@$'O`))A`/X@*T``!$'O`)9A`/X4*T``"$'O`)IA`/X(*T``#"(5:S!T
  2934. +M,K*";BHF+0`(;R1X"K:$;AXH+0`$:Q@,A````7)N$$J`:PRP@FX(MH=G"DJ'
  2935. +M9P9P_V```6K2@>6!("T`""0`U(+4@-2"("T`!"8`Y8/6@-:"UJT`#-:!UH=P
  2936. +M+-:`O(-D!G#_8``!.$?O`)Y\`"1-8!`@2V$`_8@E0``06(M2AEB*O*T`!&WJ
  2937. +M?`!@(!`;(@8&@0``!=@;@!@`<@`2`+*M``AM!G#_8```]E*&O*T`!&W:?`!!
  2938. +M[0=*)$@O2``D8$H@2V$`_3HD@$OK``40*P`$<@`2`"5!``1G"E.!9P9P_V``
  2939. +M`+Q'[0`!$!5R`!(`)4$`"&T**F\`++*M``QO!G#_8```G%*&U/P`$+RM``AM
  2940. +ML'P`8`X@!@:````'ZAN;"`!2AKRM``QM["`&!H````?J0C4(`'P`VOP('F`>
  2941. +M($MA`/R^*H!%ZP`$($IA`/RR*T``!$?J``12AE"-(&\`++R0;=I\`"1O`"0J
  2942. +M;P`L8"A*AV8&0JH`#&`8$!M(@$C`)4``#'(!L(%G"$J`9P1P_V`.4H;4_``0
  2943. +MO*T`"&W2<`!,WVS<WOP**$YU(&\`!%E/+PTJ2&`"4HT0%1]```1G)DB`2,!!
  2944. +M[`_I"#```@@`9A80+P`$<BRP`6<,<BVP`6<&<BNP`6;0(`TJ7UA/3G4@;P`$
  2945. +M(F\`""`O``PB+P`064](YP<4+`$N`"9)*D@@#6<2$!5(@$C`0>P/Z0@P``((
  2946. +M`&8$<`!@2GH`8"(0+P`42(!(P"(%Y8'2A=*!TH`J`7`PFH"ZAF\$<`!@)E*-
  2947. +M$!4?0``49Q!(@$C`0>P/Z0@P``((`&;&NH=L!'``8`0FA2`-3-\HX%A/3G4@
  2948. +M;P`$(F\`"%E/2.<`%"9)0^\`"'``<AAA`/]L*D!*@&8$<`!@:B`O``@B`.F!
  2949. +MDH`@`>F`D('I@":`<#JP%69.0>T``4/O``AP`'([80#_."I`2H!F!'``8#8@
  2950. +M+P`((@#I@9*`Y8'3DW`ZL!5F($'M``%#[P`(<`!R.V$`_PHJ0$J`9@1P`&`(
  2951. +M("\`"-&3(`U,WR@`6$].=2!O``0B;P`(64](YP$4*DDO2``,$!!R+;`!9@A^
  2952. +M`5*O``Q@,$B`2,!![`_I"#```@@`9AAR*R!O``RR&%?`1`!(@$C`+T@`#$J`
  2953. +M9P1^`&`$<`!@'"!O``PB36$`_Q0F0$J`9@1P`&`(2H=G`D25(`M,WRB`6$].
  2954. +M=2!O``0B;P`(GOP`#$CG`"0J22](`!!P2K`09BA"E4/H``%![0`$+T@`#"!)
  2955. +M(F\`#'`!(CP```%M80#^/"]``!!@``"T<$VP$&9\<`(J@$/H``%![0`,+T@`
  2956. +M#"!)(F\`#'`!<@QA`/X0(D!*@&8&<`!@``#`1>D``7`NL!%G!G``8```L$'M
  2957. +M``@B2"!*<`%R!6$`_>0B0$J`9@9P`&```)1%Z0`!<"ZP$6<&<`!@``"$0>T`
  2958. +M!")(($IP`'(&80#]N"]``!!@,!`02(!(P$/L#^D(,0`""`!G&G`!*H!#[0`$
  2959. +M<``B/````6UA`/V,+T``$&`$<`!@/"`O`!!F!'``8#)P+R!O`!"P$&8<0^@`
  2960. +M`4'M`!`O2``,($DB;P`,80#]VB]``!!@""M\```<(``0("\`$$S?)`#>_``,
  2961. +M3G4@+P`$(B\`""!O``PO;P`0``2>_``D2.<_%"I(*@`N`20'=@/$@R]``#@O
  2962. +M00`\2H)F#"`'<F1.NC4<2H%F$B`'<F3EB4ZZ-0Y*@6<$<`!@`G`!+``@%4J`
  2963. +M9PQ3@&=(4X!G9F```7X@+0`$(@!3@20!U(+4@28"Z8.6@B0#Z8*4@^^"+@7>
  2964. +M@B]'`$!*AF<``51R/+"!;0`!3`:'``%1@"]'`$!@``$^("T`!"(`TH'2@"0!
  2965. +MZ8*4@2("Z8&2@N^!VH$O10!`8``!'"@%?@`J+0`,4X4@!M"`T(;I@$?L"8;7
  2966. +MP"]``"!@&B`;(@#2@=*`)`'I@I2!(@+I@9*"[X'8@5*'OH5MXBXO`#PO1``D
  2967. +M(BT`#'0"LH)N!B8'4X-@`B8'(`-R9$ZZ-#`B`-*!2H!J`E:`Y(`O0``L(`,O
  2968. +M00`P<F1.NC04(`%J`E:`Y(!V"=:M``PO0``T(`,O00`H<@Q.NC/V4H$@`>>`
  2969. +MD('0@)"!T(!5@'(*3KHSX$?O`"C0F]"O`#30FY";4H!R!TZZ,\HN`6H"7H<L
  2970. +M+0`$G(=J`EZ&>@$H+0`(8!PN!EZ'(BT`#.6!0>P)@M'O`""^L!@`;`@L!U*%
  2971. +MNH1MX"`&T(#0AB(`Z8&2@"`!Z8"0@>^`(B\`)-*`+T$`0"`O`$#0K0`0T*\`
  2972. +M2$S?*/S>_``D3G4@;P`$(F\`""`O``R>_`!82.<_-BI(+$U'[P`T)L`FR";)
  2973. +M+TX`,$J`9QP@"$H89OQ3B)'`+`@B"-.O`#AP,[*`91Q\,F`880#ZJBP`G(TO
  2974. +M0``X<@.\@6P&</]@``-Z+T8`+"!O`#A*$&8&</]@``-H0^\`=&$`^^8O0``X
  2975. +M9@9P_V```U0F;P`\0>P)[B)+80#WL"X`9P)"DR!O`#A*$&<``KXJ2"](`'QA
  2976. +M`/I((@"2C2]``#@O00!X=@.R@VP&</]@``,4(&\`.!`09R!R++`!9QIR.[`!
  2977. +M9Q1#[P!P80#[?B]``#AF%'#_8``"["`\___Q\-"O`'0O0`!P(&\`.!`0<BRP
  2978. +M`6<(<CNP`68``5A#Z``!($E#[P!<80#[NBI`2H!F!G#_8``"L$7M``%P++`5
  2979. +M9P9P_V```J`@2D/O`$AA`/N4+T``.&8&</]@``**(&\`.$H09P9P_V```GP@
  2980. +M2W`"(4``""%\````B``$("\`<$2`3>@'2BS`<`$LP%*&+,8@+P!T1(!-Z`=:
  2981. +M+,!"GD*>UOP`$$7H!=AZ`"P\```'LB!*+R\`="](`"P@!2(&0>\`8&$`_&8N
  2982. +M`"ZO`'0@!2(&0>\`3&$`_%183R@`2^H``D7K``B^@&\:($L@A'`!(F\`*!*`
  2983. +M)DHA1P`$)$U"*0`!8!@@2R"'(F\`*$(1)DHA1``$)$T3?``!``$@!G(#P(%F
  2984. +M#"`&<F1.NC%$2H%F$B`&<F3EB4ZZ,39*@6<$<`!@`G`!(@#E@4'L">8@,!@`
  2985. +M(@#2@=*`)@'I@Y:!)`/I@I2#[X+:@E*&#(8```?U;P#_0F```1P@;P`X2A!G
  2986. +M!G#_8``!9DJ'9P9P_V```5QX`'P`>@!"KP!$?@`J2V!P2JT'3F<^("\`1"('
  2987. +MZ8$D+P!P!H$```=*)C,8`-:"+T,`1$J&9PJP@V<&</]@``$<1((K0@=*("\`
  2988. +M+%*`*T`'4GP!8"8@!2(O`'0J+0=*VH%*A&<*L(5G!G#_8```[D2!*T$'2D*M
  2989. +M!U)X`5*'VOP`$+ZK``AMBDJ&9P1*A&8&</]@``#(?`!^`"I+*"\`1&`Z<``B
  2990. +M!P:!```%V!`S&`!(P.F`($O1P$/H!THO20!`2H9G"DJI``QF!"`$8`(@!=&M
  2991. +M`!`L*0`$4H=8C;ZK``1MP&`@<`!R`2=!``@G0``$)"\`=$2"3>L'2BS"+,`L
  2992. +MP"]``'@J;P`\+B\`+"`'4H`K0``,+"\`>&<(T(92@"M```QR,["!8P1P_V`P
  2993. +MVOP'ZB`'($TB;P`P3KHQ;"!-T<=+Z``!0A!*AF<0(`8@32)O`'Q.NC%20C5H
  2994. +M`'``3-]L_-[\`%A.=2!O``0O#2I(0>P)2")-80#T4$J`9PQ![`E((DUP`6$`
  2995. +M_`PJ7TYU+PU![`GZ3KH2"BI`2H!F!BI?8```7'`!*4`HHDH59AY"K!5&0JP5
  2996. +M2D*L')!"K!R80>P)2$/L'3`2V&;\8"P@34/L%49A`//T2H!G'G`ZL!5G$"!-
  2997. +M0^P51G``80#[JDJ`9PA![!5&80#_=BI?8`#S#G`!*4`HHD/L%4:1R&$`\[Q*
  2998. +M@&<(0>P51F$`_U1@`/+N(&\`!"`O``@B;P`,GOP`$$CG`Q0J24CO`0$`$"!O
  2999. +M`!0O4``82JPHHF8$80#_1$JL%4IG"B`O`!BPK!56;"!^`$?L%49@$%*'UOP`
  3000. +M$+ZL%4YM!'X`8#)*JP=.9NI@*GX!1^P52BPL%4I@#B`O`!BPJP`0;0A2AUB+
  3001. +MOH9M[D/L%4;3QWX`'BD%U^F'0>P<D-''+PTO2``@(!!![P`<0^P51F$``,(@
  3002. +M;P`@(B@`!"M!`"#E@4'L'3`B;P`@T>D`"$/L"50CB!@`*T@`*%A/3-\HP-[\
  3003. +M`!!.=2!O``1#[!34<`!A`/\J0>P4U"`(3G4@;P`$("\`"")O``Q(YP$4+@`F
  3004. +M22I(2JPHIF8.<`$I0"BF0>P>]&$`_CHO"R`'($U#[![T80``0EA/2H=G!D'L
  3005. +M"@)@!$'L)MXG2``H3-\H@$YU(&\`!$/L%0!P`&&N0>P5`"`(3G4@;P`$("\`
  3006. +M"")O``PO;P`0``2>_``,2.</-"X`)F\`+"I(?`!Z`"@1(`3G@"])`"#3P$7I
  3007. +M"!Y@0"]*`"0@%;"2;38@;P`DL)!F*$J$9@8@*``$;AKGA"(H``0B;P`@!H0`
  3008. +M``@:LK%(`&X$<`!@`G`!*@`L*``$8`93A%&*;+H@%2(\``%1@$ZZ+.PH`"`5
  3009. +M(CP``5&`3KHLWM*'DH8L`6`(!H8``5&`4X1*AFOT8`@$A@`!48!2A`R&``%1
  3010. +M@&SP(`8B/```#A!.NBRL)T``""`&(CP```X03KHLG"`!+T$`''(\3KHLD"=`
  3011. +M``0@+P`<<CQ.NBR")H%*A6<"4I,@!%B`<@=.NBQP)T$`&&P$7JL`&"P\```'
  3012. +MLDJ$:T`@!G(#P(%F#"`&<F1.NBQ,2H%F$B`&<F3EB4ZZ+#Y*@6<$<`!@`G`!
  3013. +M*@`B`.6!1>P)YB`R&`"X@&U`4H:8@&#`4X8@!G(#P(%F#"`&<F1.NBP*2H%F
  3014. +M$B`&<F3EB4ZZ*_Q*@6<$<`!@`G`!*@#E@$'L">;8L`@`2H1KQ@2&```';"=&
  3015. +M`!0G1``<(`70@-"%Z8!%[`F&U<!"JP`08`XB*P`0Y8&8LA@`4JL`$"(K`!#E
  3016. +M@;BR&`!LYE*$)T0`#$*K`"`G1P`D3-\L\-[\``Q.=2!O``0O#2I(("T`&"(`
  3017. +MTH'2@$'L"@;1P2`M`!`B`-*!TH!#[`H;T\$@/```!VS0K0`4+P`O%2\M``0O
  3018. +M+0`(+RT`#"\)+PA(;`I`2&P5+$ZZ,C1/[P`D0>P5+"`(*E].=2!O``0O#6$`
  3019. +M_3@@0"I?8)0@;P`$(F\`""`O``PO!RX`(!&PAVT4(@=.NBL"T9`@$2('3KHJ
  3020. +M^"*!8"I*@&HF4Y#?D6P@(!%$@"('3KHJX"(0DH!3@2"!(!%$@"('3KHJSIZ!
  3021. +M(H<N'TYU(&\`!")O``A(YP$4)DDJ2"XM`!2>JP`49BPN+0`0GJL`$&8B+BT`
  3022. +M#)ZK``QF&"XM``B>JP`(9@XN+0`$GJL`!&8$+A6>DR`'3-\H@$YU(&\`!")O
  3023. +M``@@+P`,+V\`$``$GOP`<$CG/S0N`"IO`)@O20`L0I4O2``H0^\`7'`*(MA1
  3024. +MR/_\("\`7'(^L(%L!$J`:@Y![P!@0^\`7'`\80#_%D'O`&1#[P!@<#QA`/\(
  3025. +M0>\`:$/O`&1P&&$`_OI![P!P0^\`;'`,80#^[&!,("\`<%.O`'`&@```!VLB
  3026. +M`'0#PH)F"G)D3KHIWDJ!9AH@/```!VS0KP!P<F3EB4ZZ*<A*@6<$<`!@`G`!
  3027. +M(@#E@4'L">8@,!@`T:\`:"`O`&AOKBP\```';-RO`'`@!G(#P(%F#"`&<F1.
  3028. +MNBF.2H%F$B`&<F3EB4ZZ*8!*@6<$<`!@`G`!)"\`;.6")@#6@]:`Z8-![`F&
  3029. +MT<,L,"@`("\`:+"&;QI'[P!HG9M2DPR;````#&V>0J\`;%*O`'!@E"`O`%Q"
  3030. +MKP!<>@!R`2]!`(@O0``D4H4@+P"(T(`O0`"(("\`B&[N("\`B&H$<`!@!'`!
  3031. +MZZ`O0`"(2&\`,"\'2&\`D"!O`#A.D$'O`#Q#[P!H80#^+$_O``PH`&<N(`53
  3032. +MA4J`:@9P_V```1!*A6H&4Z\`B&#$<`'KH"P`2H1O!IVO`(A@M-VO`(A@KB`O
  3033. +M`'QK``#$(B\`4+*`9P``ND'Z^>(B;P`LL\AF!D'L%49@!$'L'O1\`"9(+T@`
  3034. +MD&```(@@*P=.L*\`?&9V>@`D;P"08&0@*@=.L*\`?&=4(`7I@"(O`(@@;P"0
  3035. +M!H````=*TK`(`)*K!THO00",2&\`,"\'2&\`E"!O`#A.D$'O`#Q#[P!H80#]
  3036. +M;$_O``Q*@&82("\`4+"O`'QF""]O`(P`B&`F4H74_``0(&\`D+JH``AMDE*&
  3037. +MUOP`$"!O`)"\J``(;0#_<'#_8"0@+P`DT:\`B"\O`"@O!TAO`)`@;P`X3I!P
  3038. +M`2J`3^\`#"`O`(A,WRS\WOP`<$YU(&\`!")O``@@+P`,GOP`#$CG!S0N`"I(
  3039. +M+TD`&`RM`````0`@;P9P`2M``"!(;P`<(`<@36$`_1Y83RP`2J\`'&8&("T`
  3040. +M(&H&(`9@``#&0?KXKB)O`!BSR&8&0>P51F`$0>P>]'P`)D@O2``@8```EB`K
  3041. +M!TZPK0`@9@``A'H`)&\`(&!P("T`("(J!TZR@&=>(`7I@"(5(&\`(`:````'
  3042. +M2M*P"`"2JP=**H%*K0`@5\!$`$B`2,`K0``@2&\`'"`'($TB;P`<80#\C%A/
  3043. +M2J\`'&9`(!60J@=*T*L'2BJ`2JT`(%?`1`!(@$C`*T``(%*%U/P`$"!O`""Z
  3044. +MJ``(;892AM;\`!`@;P`@O*@`"&T`_V)P_TS?+.#>_``,3G4@;P`$+PU#^O?:
  3045. +M<``J7V``_N!*K"BB9@1A`/<L3G4``)[\``Q(UP$#</_>_``,3G513TC7`P!0
  3046. +M3TYU2.<P`B(02B@`#6<$<`!@'"0))@`L;"H43J[_UB(`4H!F"$ZZ"MAP_V`"
  3047. +M(`%,WT`,3G513TCG/S8N`"I))D@L$R]&`"@O2``L2BL`#6<&<`!@``",2BL`
  3048. +M#&=F)DW7QWH`8%@D36`"4HJURV0&<`JP$F;TM\IF!"@*8`9!Z@`!*`B8C2(O
  3049. +M`"@D#28$+&PJ%$ZN_]`L`%*`9@A.N@IB</]@/MJ&MH9F-DOJ``&>AG``3KK<
  3050. +M/$ZZW&Q*@&8B2H=FI&`<(@8D#28'+&PJ%$ZN_]`J`%*`9@A.N@HF</]@`B`%
  3051. +M3-]L_%!/3G593TCG/P(N`"P0+T$`'$HH``UG!'``8%)3@28!(@8D!RQL*A1.
  3052. +MKO^^*@!.KO]\*`!2A6<$2H1G#B`$3KH(X"E`*:QP_V`D(@9T`"8"3J[_OBP`
  3053. +M4H!G!$J$9PX@!$ZZ"+XI0"FL</]@`B`&3-]`_%A/3G6>_`$`2.<_!BX`*D@L
  3054. +M%2HM``@@+0`$9PHB`"QL*A1.KO^F&"T`#4B$2,0@34ZZ)W!*A&<$<`!@1"(&
  3055. +M0>\`("0(+&PJ%'9`Y8M.KOYH*`!*AV8*(@9.KO_<2H!G&DJ$9Q)P_[J`9PPB
  3056. +M`B0%3J[_1DJ`9P1P`&`&3KH)+'#_3-]@_-[\`0!.=2`O``1(YR`"(@`L;"H4
  3057. +M=`!.KO\T3J[_?'0N1@*P@E?!1`%(@4C!(`%,WT`$3G4@+P`$(&\`"")O``R>
  3058. +M_``02.<W%BX`)DDJ2'P`8;A*@&9\(@<L;"H4=`%.KOY62H!G;"('0>P*:"0(
  3059. +M=@1.KO_068!F4B(')#P``"<03J[_-$J`9T(B!T'O`"`D"'803J[_UG()L(%O
  3060. +M+G";L"\`(&8F0>\`)2(()`M.KOS0*@!![P`FT<`B""0-3J[\T%*`9P92A6<"
  3061. +M?`$B!W0`3J[^5B`&3-]H[-[\`!!.=2`O``0B+P`(GOP"$$CG/P8N`'#_+T`"
  3062. +M*"]!`"0B!RQL*A1T`'8!3J[_OB]``"`B!TZN_[XL`$ZN_WPJ`"]``BQF``#"
  3063. +M*"\`)"(')`1V_TZN_CBP@F8``*Z\@FP``)XJ!)J&*`4@!'(!2$$L>``$3J[_
  3064. +M.BI`2H!F:G("2$%.KO\HXH@J``R%```"`&T0(`5R`4A!3J[_.BI`2H!F1GI`
  3065. +MYXU+[P`H,#P!_W(`0>\`*!#!4<C__&`LN(5O!"`%8`(@!"8`3KK:#B(')`TL
  3066. +M;"H43J[_T+"#9PI.KO]\+T`"+&`&F(-*A&[00>\`*+'-9PPB32`%+'@`!$ZN
  3067. +M_RXJ+P(L9@1"KP(H+"\`(+RO`"1L#B(')`8L;"H4=O].KO^^+"\"*&<*(`5.
  3068. +MN@8F*4`IK"`&3-]@_-[\`A!.=9[\`0A(YS<6+@`F22I(+!5*+0`-9@`!&"`'
  3069. +M!(````0`9R`$@```!`!G2E.`9UA3@&=<4X!G7E.`9V93@&=L8```[DHM``QG
  3070. +M)B`&0>\!)$/O`2!A`/W62H!G%"`O`20W0``"("\!(#:`<`!@``#*<!E@``"^
  3071. +M(@8L;"H43J[_*":`<`!@``"R)H9P`&```*IP`&```*0@!B(380#^-F```)@K
  3072. +M4P`(<`!@``".*A-*K0`$9@XB%2QL*A1.KOZ,*T``!"`M``1G8B0`(@4L;"H4
  3073. +M3J[^7$J`9E(B!D'O`"`D"'9`Y8M.KOYH2H!G/B(%3J[_IB(M``1.KO^F(@9.
  3074. +MKO_<(@)T`$ZN_T8;?``!``TJ@BM"``1![P`@(@@L;"H43J[_N$J`9P0@`F`.
  3075. +M3KH%Y&`&<!8I0"FL</],WVCLWOP!"$YU("\`!"(O``@O;P`,``1(YP\&*B\`
  3076. +M'"P!+@!P#DZZ)18J0$J`9@IP#"E`*:QP_V!.0]4BQT*9(L9"+0`-(@<L;"H4
  3077. +M3J[_*!M```Q(>OYT2'K[VDAZ^V1(>OJL2'KZ=DAZ^F@@!2!-0_KZ4$ZZT=Q/
  3078. +M[P`8*`!L!B!-3KHC3B`$3-]@\$YU("\`!"(O``@O;P`,``0O;P`0``@O;P`4
  3079. +M``PO;P`8`!!(YPT`*"\`%"HO`!`N`'``2H%F!'!`Y8@`0``!+P`@!W+_80#_
  3080. +M1EA/2H!F0'``2H1F!'!`Y8@`0``"+P`@!7+_80#_*%A/4X!F(G``2J\`'&8$
  3081. +M<$#EB`!```(O`"`O`!QR_V$`_P983U6`9Q!![`IN+T@`$$S?`+!.^L[@3-\`
  3082. +ML$YU```@;P`$(F\`""]O``P`!"`O`!`O;P`4``A(YP<T+@`D;P`@)DDJ2"PK
  3083. +M`'0DKP`<0JH`$G`!-4``#D)J`!`E?````@``,C5```PE:P"``#8@*P!\9A`B
  3084. +M*P`$;PHE?```"```%F`$)4``%B53``1!ZP"$3KK2?B5``"(E0``:)4``*B`K
  3085. +M``1:@&<^58!G4%F`9T!5@&9F(`UG'$AX`/](;"BL+PU.NM+`3^\`#"H`;P8E
  3086. +M10`68`@E?````0``%B5\``"@```(8$HE?```$```"&!`)7P``$````A\`&`T
  3087. +M2I-F$$HK``AF"B5\```@```(8"`E?```@```"&`6("L`!&\&<$#AB&`&(#P`
  3088. +M`(``)4``"$J'9P)\`"`&3KK?7(&J``A,WRS@3G4@;P`$(F\`"%E/2.<C%BI(
  3089. +M?@`O20`80J<L;"H4<@(D#TZN_QQ/[P`$)D!*@&=0(@UT_DZN_ZPN`&=$(@<D
  3090. +M"TZN_YI*@&<X(@=.KO\N2H!7QD0&2(9(QDJ`9P8B`$ZN_Z8@!^6`+R\`&"!`
  3091. +M+R@`#")"(`8@36$`_GQ03WP`8`Y\_TZN_WQ.N@(`*4`IK$J'9P8B!TZN_Z8@
  3092. +M"V<()`MR`DZN_Q8@!DS?:,183TYU```@+P`$64\O!RX`3KK54DAO``1(>`@`
  3093. +M+P=.NM]63^\`#$J`9P1P`&`$("\`!"X?6$].=0``("\`!"!O``@B+P`,64](
  3094. +MYP,T+`$N`"I(3KK5$"`'3KK0%"9`2H!G1`@K``$``V<V""L``P`#9Q8@:P`8
  3095. +M+T@`%"!K``1P`'("(F\`%$Z1(&L`%"](`!0@!B!K``0B321O`!1.DF`(<`TI
  3096. +M0"FL</],WRS`6$].=2`O``0@;P`((B\`#$CG`P1,WR#`8(`@;P`$44\O#2I(
  3097. +M0>\`!$ZZS]A*@&H$</]@#B`-9P8@+P`$*H`@+P`$*E]03TYU```@;P`$GOP`
  3098. +M0$CG.Q8J2$ZZU%X@#6=22A5G3B(-0>\`("0(+&PJ%'9`>`!.KOQV+@!M-DZN
  3099. +M_WPL`%*`3KHA#"9`2H!G)+Z&9Q0F!E*#(@TD"TZN_'9*@&\0(`)@#B!"(DL2
  3100. +MV&;\(`M@`G``3-]HW-[\`$!.=2`O``0@;P`((B\`#%E/2.<#-"P!+@`J2$ZZ
  3101. +MT^`@!TZZSN0F0$J`9R8(*P````-G&"!K`!`O2``4(`8@:P`$(DTD;P`43I)@
  3102. +M"'`-*4`IK'#_3-\LP%A/3G4@+P`$(&\`""(O``Q(YP,$3-\@P&">```@+P`$
  3103. +M*4`1I$J`9P``AG)GD(%G``""58!G``"`<@F0@6=\4X!G>%.`9W13@&=P4X!G
  3104. +M;%.`9VA3@&=H4X!G:')1D(%G9E.`9V93@&=F4X!G9E.`9V93@&=F58!G9E.`
  3105. +M9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G
  3106. +M9E.`9V9@:'``8&9P#&!B<`M@7G`68%IP!V!6<`A@4G`08$YP$6!*<`)@1G`"
  3107. +M8$)P%F`^<`=@.G`68#9P)&`R<!9@+G`68"IP'F`F<!)@(G`E8!YP)F`:<!-@
  3108. +M%G`68!)P'&`.<`U@"G`-8`9P#6`"</].=2\.+&PJ%$ZN_WQA`/[Z*4`IK"Q?
  3109. +M3G4@;P`$2.<`!BI((DTL>``$3J[_!"!-3-]@`$[Z'<@@+P`$2.<!!"X`*FPI
  3110. +MN&`.("T`#+"'9@0@#6`(*E5*E6;N<`!,WR"`3G5(YR`"0>PIN$ZZ*[(@+!2P
  3111. +M(BP4O"0`LX("@@!___\I0BFT4H(I0BFP+P$O`$AL#@!(;"G$3KK"PD_O`!`L
  3112. +M>``$3J[]9BE`*>AG$$'L*<1P`$ZZ*\8I0"GD9@I(;`X.3KK)<EA/3-]`!$YU
  3113. +M2.<`!B`L*>AG"B!`+'@`!$ZN_6!*K"GD9S@L>``$3J[_?&`,(DUP'"QX``1.
  3114. +MKO\N(&PIY"QX``1.KOZ,*D!*@&;B(&PIY$ZZ*QXL>``$3J[_=DS?8`!.=0``
  3115. +M(&\`!"`O``@B+P`,(F\`$"]O`!0`!"]O`!@`"%E/2.</-B@O`"PJ+P`H+`$N
  3116. +M`"I)+T@`("QX``1.KOUF)D!*@&<P($L@!$ZN_7(D0$J`9R(@#6<()4T`*"5%
  3117. +M`"0@;P`@(`<B2B(&3J[^1$H`9@0@"F`6(`IG!B!*3J[];"`+9P8@2TZZ*HAP
  3118. +M`$S?;/!83TYU(&\`!$CG``8J2"`-9Q@B32QX``1.KOX^(&T`#DZZ*EX@34ZN
  3119. +M_6Q,WV``3G4@#Y!\`!RPK!&@90`:<)[\`!!(YR<4+B\`-"IO`#`O;P`L`"0O
  3120. +M30`@8``%C@@'``1G,A`O`!E(@$C`1^P/Z=?`"!,``&<>"!,``&<.$"\`&4B`
  3121. +M2,!R(-"!8!(0+P`92(!(P&`($"\`&4B`2,`L`!`&2(!(P'(JD(%G``$(<A60
  3122. +M@6<0<AR0@6<``EA3@&=*8``$TB!O`"`0$&<`!4X(!P``9PH0$'(OL`%G``4^
  3123. +M"`<``F<`!0)P+K`09@`$^K'-9P`%*`@'``!G``3L<"^P*/__9@`$XF``!1((
  3124. +M!P`!9DP@;P`D$!@?0``8+T@`)`@'``1G+DB`2,!'[`_IU\`($P``9QX($P``
  3125. +M9PX0+P`82(!(P'(@T(%@$A`O`!A(@$C`8`@0+P`82(!(P"P`"`<`!&<X(&\`
  3126. +M(!`02(!(P$?L#^G7P`@3``!G(@@3``!G$"!O`"`0$$B`2,!R(-"!8!8@;P`@
  3127. +M$!!(@$C`8`H@;P`@$!!(@$C`$@9(@4C!L(%G``0X8``$:`@'``)G('`N(&\`
  3128. +M(+`09A:QS6<`!%((!P``9PIP+[`H__]G``1"(&\`)!P88"X(!P``9PX@;P`@
  3129. +M$!!R+[`!9P`$)G`_O`!F"B!O`"!*$&<`!!8@;P`D'!A2KP`@+T@`)'`_O`!G
  3130. +MR'`JO`!GPDH&9@9P`&```_0(!P`!9@YP7+P`9@@@;P`D$!!@`A`&2(!(P!]`
  3131. +M`!@(!P`$9RY(@$C`2^P/Z=O`"!4``&<>"!4``&<.$"\`&$B`2,!R(-"!8!(0
  3132. +M+P`82(!(P&`($"\`&$B`2,`J;P`D4XT?0``88'9P6[P`9TP(!P`$9S`@;P`@
  3133. +M$!!(@$C`1^P/Z=?`"!,``&<:"!,``&<,$!!(@$C`<B#0@6`2$!!(@$C`8`H@
  3134. +M;P`@$!!(@$C`$B\`&$B!2,&P@68@(`<"0/_[+P`O+P`D+PUA`/U`3^\`#$J`
  3135. +M9@9P`&```QQ2KP`@(&\`($H09H)@``,*(&\`(!`09P`#``@'``)G''`NL!!F
  3136. +M%K'-9P`"[@@'``!G"G`OL"C__V<``MX@;P`D$!!R(;`!9PIR7K`!9P1P`&`"
  3137. +M<`$J`&<$4J\`)"!O`"0<&"](`"0?1@`?"`<``684<%R\`&8.(&\`)!(8'T$`
  3138. +M'R](`"0(!P`$9S(0+P`?2(!(P$?L#^G7P`@3``!G'@@3``!G#A`O`!](@$C`
  3139. +M<B#0@6`2$"\`'TB`2,!@"!`O`!](@$C`'T``&A]``!Y*!F<``D@@;P`D$!@?
  3140. +M0``8+T@`)`@'``1G+DB`2,!'[`_IU\`($P``9QX($P``9PX0+P`82(!(P'(@
  3141. +MT(%@$A`O`!A(@$C`8`@0+P`82(!(P"P`"`<``&<(<"^\`&<``>YP+;P`9GAP
  3142. +M7;`09W(2&!]!`!XO2``D"`<``680=%RR`F8*%!@?0@`>+T@`)!(O`!YG``&Z
  3143. +M"`<`!&<N2(%(P4?L#^G7P0@3``!G'@@3``!G#A`O`!Y(@$C`<B#0@6`2$"\`
  3144. +M'DB`2,!@"!`O`!Y(@$C`(&\`)!P8'T``'B](`"0(!P`$9S@@;P`@$!!(@$C`
  3145. +M1^P/Z=?`"!,``&<B"!,``&<0(F\`(!`12(!(P'(@T(%@%B)O`"`0$4B`2,!@
  3146. +M"B!O`"`0$$B`2,`2+P`:2(%(P;"!;50(!P`$9S@@;P`@$!!(@$C`1^P/Z=?`
  3147. +M"!,``&<B"!,``&<0(&\`(!`02(!(P'(@T(%@%B!O`"`0$$B`2,!@"B!O`"`0
  3148. +M$$B`2,`2+P`>2(%(P;"!;S)P7;P`9@#^#DJ%9@``AF```+9*!F<``+`@;P`D
  3149. +M'!@O2``D"`<``68*<%R\`&8$4J\`)'!=O`!FVDJ%9U9@``"("`<`!&<X(&\`
  3150. +M(!`02(!(P$?L#^G7P`@3``!G(@@3``!G$"!O`"`0$$B`2,!R(-"!8!8@;P`@
  3151. +M$!!(@$C`8`H@;P`@$!!(@$C`$@9(@4C!LH!F-%*O`"`@;P`D$!@?0``9+T@`
  3152. +M)$H`9@#Z8B!O`"`0$&8$<`!@$@@'``-G"G`OL!!F!'``8`)P`4S?*.3>_``0
  3153. +M3G4@#U%`L*P1H&4`%'XO#2IO``@@34H89OQ3B)'-(`A2@"\`3KH`$")`$MUF
  3154. +M_%A/*E].=0``(`^0?``,L*P1H&4`%$@O#2`O``@O`$ZZ%T183RI`2H!F$DAL
  3155. +M#AA"ITAX``).N@R^3^\`#"`-*E].=2`/D'P`#+"L$:!E`!0.2.<!%"XO`!0F
  3156. +M;P`0(`MF"B]'`!!,WRB`8)Y*AV8,+PM.NA6&6$]P`&`D+P<O"TZZ%/!03R9`
  3157. +M2H!F$DAL#C)"ITAX``).N@Q>3^\`#"`+3-\H@$YU(`^0?``@L*P1H&4`$ZR>
  3158. +M_``42.<!%#XO`"8J;"GL8!`P%;!'9@8@+0`"8&(J;0`&(`UF['``,`<O`$ZZ
  3159. +MQ;0J0$AX``I.NO\>4$\F0"!`,(<@#68@<``P!R\`2&P.3$AO`!1.NAE82&\`
  3160. +M&$ZZ_L1/[P`08`@O%4ZZ_KA83R=```(G;"GL``8I2RGL("L``DS?*(#>_``4
  3161. +M3G4@#U%`L*P1H&4`$Q9(YP`T*F\`$"9L*>Q@("!K``(0$+`59A(B31`8L!EF
  3162. +M"DH`9O9F!"`+8&XF:P`&(`MFW"9L*?!@'"!K``(0$+`59@XB31`8L!EF!DH`
  3163. +M9O9G1B9K``8@"V;@+PU.NL4")D!(>``*3KK^6B1`+HU.NOX>4$\E0``"(`MG
  3164. +M$C2K``A+["GL)54`!BJ*(!U@#"5L*?``!BE**?!P`$S?+`!.=2`/D'P`(+"L
  3165. +M$:!E`!)JGOP`%$CG`10^+P`F*FPI]&`0,!6P1V8&("T``F!B*FT`!B`-9NQP
  3166. +M`#`'+P!.NL7V*D!(>``*3KK]W%!/)D`@0#"'(`UF('``,`<O`$AL#E!(;P`4
  3167. +M3KH8%DAO`!A.NOV"3^\`$&`(+Q5.NOUV6$\G0``")VPI]``&*4LI]"`K``),
  3168. +MWRB`WOP`%$YU(`]10+"L$:!E`!'42.<`-"IO`!`F;"GT8"`@:P`"$!"P%682
  3169. +M(DT0&+`99@I*`&;V9@0@"V!N)FL`!B`+9MPF;"GX8!P@:P`"$!"P%68.(DT0
  3170. +M&+`99@9*`&;V9T8F:P`&(`MFX"\-3KK%1"9`2'@`"DZZ_1@D0"Z-3KK\W%!/
  3171. +M)4```B`+9Q(TJP`(2^PI]"55``8JBB`=8`PE;"GX``8I2BGX<`!,WRP`3G4@
  3172. +M#Y!\`!BPK!&@90`1*"`O``0@;P`,(F\`"$*G+R\`&"\O`!@O""\)+P!.N@$Z
  3173. +M3^\`&$YU(`^0?``8L*P1H&4`$/0@+P`$(&\`#")O``A(>``!+R\`&"\O`!@O
  3174. +M""\)+P!.N@$$3^\`&$YU``"_[!&@90`0PDCG`00N+P`0*F\`#&`0$!5(@$C`
  3175. +ML(=F!"`-8`A2C4H59NQP`$S?((!.=;_L$:!E`!"02.<#%"XO`!PF;P`8*F\`
  3176. +M%'P`8`@7M6@`:`!2AKR';?1,WRC`3G4@#Y!\``RPK!&@90`07$CG`10J;P`0
  3177. +M+BPJ")ZL*@3EAR\'3KK#?B9`(BPJ!.6!($W1P2Z'+P`O"&&8("PJ""(`Y8$@
  3178. +M3='!(BPJ!.6!(DW3P2(L#EB2@.6!+H$O"2\(80#_<B(L*@32K`Y8DJPJ".6!
  3179. +MV\$NAR\-+PMA`/]8("P.6$OL*@0B'=*`DI5/[P`<*L`I02H$3-\H@$YU(`^0
  3180. +M?``DL*P1H&4`#\*>_``02.<_-"IO`$@D;P!$0JP.5$JL#EAF5'`!*4`.6$*L
  3181. +M*?PI0"H$*4`J""!O`$`2$'0ML@)F#'0"*4(J`%*O`$!@*G0KL@)F"D*L*@!2
  3182. +MKP!`8!I(;`YD3KH4QEA/2H!G!D*L*@!@!G`!*4`J`"XO`#A*K"G\9PH@;"G\
  3183. +M2A!F``$P<`&PK"H`9EP@+"H((BPJ!+*`9Q*PK`Y89PPO+P`\80#^MEA/8`PB
  3184. +M+`Y8L(%G!"E!*@0B+`Y8Y8$F;P`\U\%@!E*L#EA8BR`L#EBPAVP.(E-P+;`1
  3185. +M9NI**0`!9^0@+`Y8*4`J""`L#EB^@&=0Y8!(;`YT(&\`0"\P"`!.N@].4$]*
  3186. +M@&8X4JP.6"`L*@@B+"H$LH!G$K"L#EAG#"\O`#QA`/XV6$]@#+*`9@@@+`Y8
  3187. +M*4`J!"`'*4`.6"E`*@@@+`Y8L(=F%B`L*@0B+"H(LH!G!"E`#EAP_V``!$0B
  3188. +M+`Y8Y8$@;P`\)G`8`!03=BVT`V8*(G`8`$HI``%F'$JL*@!F!G#_8``$&%*L
  3189. +M#E@I<!@`#E1P`6``!`A2BR`*9PBV$V8$<`%@`G``(DO3P"E)*?P@"F<``L8B
  3190. +M+`Y8Y8$@;P`\('`8`'`ML!!F``*PL"@``6<(2J\`3&<``J(F;"G\0J\`+'P`
  3191. +M0J\`*&`"4HL0$V<&<CVP`6;T+TH`,'H`8&(@"Y"L*?PO`"\L*?P@;P`X+Q!.
  3192. +MN@X*3^\`#$J`9CPN"YZL*?P@;P`P+Q!.N@VF6$^^@&82(&\`,"@%<`$O0``L
  3193. +M+T@`*&`D2J\`*&8,(&\`,"@%+T@`*&`"?`%P$-&O`#!2A2!O`#!*D&:62H9G
  3194. +M1$JO`"QF/DJL#EQG("(L#ECE@2!O`#PO,!@`+Q!(;`YX2&P1-$ZZ$Z!/[P`0
  3195. +M+RPI_$ZZ#3+1K"G\4JP.6%A/<#]@``+P+B\`.$JO`"AG``$F4JP.6$H39W@@
  3196. +M;P`H2J@`!&<,0^L``2E)#E1@``#02JP.7&=((BP.6.6!(F\`/"1Q&/QP+;`J
  3197. +M``%F%B\0+Q%(;`Z62&P1-$ZZ$RY/[P`08!P0$DB`2,`O$"\`+Q%(;`[$2&P1
  3198. +M-$ZZ$Q!/[P`4+RPI_$ZZ#*+1K"G\6$]P/V```F1P`2!O`"BPJ``$9F`B+`Y8
  3199. +MLH=L$E*L#ECE@2!O`#PI<!@`#E1@1DJL#EQG'.6!(&\`/"\P&/PO$$AL#O)(
  3200. +M;!$T3KH2M$_O`!`O+"G\3KH,1EA/T:PI_'`Z(&\`0+`09@9P.F```?YP/V``
  3201. +M`?@O+"G\3KH,(EA/T:PI_"`-9P(JA"!O`"@@*``(9PXB*``,($`@@7``8``!
  3202. +MS"!O`"@@*``,8``!P$JO`$QG,"(L#ECE@2!O`#P@<!@`<"VP*``!9QH@;"G\
  3203. +M$!!(@$C`+P`O+P!$80#ZZE!/2H!F9$JL#EQG3"(L#ECE@2!O`#PD<!@`<"VP
  3204. +M*@`!9A@O+"G\+Q!(;`\82&P1-$ZZ$?!/[P`08!X0$DB`2,`O+"G\+P`O$$AL
  3205. +M#SA(;!$T3KH1T$_O`!1![`]84JP.6"E(*?QP/V```29+["G\(%40&"J('T``
  3206. +M)TB`2,`O`"\O`$0JR&$`^F)03R1`(&PI_$H09@12K`Y8(`IG"A`O`"=R.K`!
  3207. +M9CA*K`Y<9R`0+P`G2(!(P"\`(&\`0"\02&P/6DAL$31.NA%<3^\`$!`O`"=(
  3208. +M@$C`*4`.8'`_8```LG`ZL"H``68``*"P*@`"9AX@;"G\$!!G"BE(#E12K`Y8
  3209. +M8`1"K`Y4D\DI22G\8'H@;"G\2A!G"BE(#E12K`Y88&0@+`Y8L(=F2DJL#EQG
  3210. +M(!`O`"=(@$C`+P`@;P!`+Q!(;`]T2&P1-$ZZ$-Q/[P`0$"\`)TB`2,`I0`Y@
  3211. +M<#H@;P!`L!!F!A]``"=@&G`_'T``)V`24JP.6"(`Y8$@;P`\*7`8``Y40JPI
  3212. +M_!`O`"=(@$C`3-\L_-[\`!!.=2`/D'P`&+"L$:!E``H,("\`!"!O``PB;P`(
  3213. +M0J="IT*G+P@O"2\`80#Z(D_O`!A.=2`/44"PK!&@90`)WDCG`!0@;P`0(F\`
  3214. +M#"`I``@O0``,+T@`$$S?*`!@```"(`]10+"L$:!E``FR2.<!!#XO``XJ;P`0
  3215. +M<``P!R\`80``[%A/&H!*K!309P``B@@'``=G!'!H8`)P+1M```$(!P`&9P1P
  3216. +M<V`"<"T;0``""`<`!6<$<'!@`G`M&T```P@'``1G!'!A8`)P+1M```0(!P`#
  3217. +M9P1P+6`"<'(;0``%"`<``F<$<"U@`G!W&T``!@@'``%G!'`M8`)P91M```<(
  3218. +M!P``9P1P+6`"<&0;0``(&WP`(``)8%`P!P)``<!R`#(`2&T``2\!80``KC`'
  3219. +M`D``.$C`YX!![0`$+H@O`&$``)@P!P)```=(P.V`0>T`!RZ(+P!A``""<``P
  3220. +M!RZ-+P!A``"^3^\`%$S?((!.=;_L$:!E``BJ("\`!`*```#P``R```!@`&8$
  3221. +M<&)@2@R````@`&8$<&-@/@R```!``&8$<&1@,@R```"``&8$<"U@)@R````0
  3222. +M`&8$<'!@&@R```"@`&8$<&Q@#@R```#``&8$<'-@`G`_3G6_[!&@90`(0$CG
  3223. +M`00^+P`.*F\`$`@'``AG!'!R8`)P+1J`"`<`!V<$<'=@`G`M&T```0@'``9G
  3224. +M!'!X8`)P+1M```),WR"`3G6_[!&@90`'^$CG`00^+P`.*F\`$`@'``MG$G!X
  3225. +ML"T``V<$<E-@`G)S&T$``P@'``IG%G!XL"T`!F<(&WP`4P`&8`8;?`!S``8(
  3226. +M!P`)9Q9P>+`M``EG"!M\`%0`"6`&&WP`=``)3-\@@$YUO^P1H&4`!XXO!RXO
  3227. +M``AO$KZL#?IN#.6'0>P-7B`P>`!@!D'L#YP@""X?3G4@#Y!\`"BPK!&@90`'
  3228. +M7$CG`Q0L+P`8+B\`%"9O`"`J;P`<+RP1[$AL#[)(;!$T3KH-JBZO`$@O+P!$
  3229. +M+R\`1"\O`$0O+P!$+R\`1"\O`$0O"R\-2&P1-$ZZ#8)/[P`P2H9G&"\&80#_
  3230. +M;BZ`2&P/N$AL$31.N@UF3^\`#`@L``$13V="4JP10"`L$4"PK!%(;B`@;!$X
  3231. +M4JP1.!"\``H(+``&$4]G+DAL$31.NA#R6$]@(E.L$4!(;!$T2'@`"DZZ#BY0
  3232. +M3V`.2&P1-$AX``I.N@X>4$](;!$T3KH0Q%A/2H=G""\'3KH,(%A/3-\HP$YU
  3233. +M```@#Y!\``RPK!&@90`&;$CG#Q0J;P`<?O]\`"\-3KH&:EA/*@!X`"9O`"!@
  3234. +M,B\%+PTO$TZZ!J!/[P`,2H!F'"\33KH&1EA/L(5F!"`$8!X@!U*`9@0N!&`"
  3235. +M?`%2A%B+2I-FRDJ&9P1P_F`"(`=,WRCP3G4@#Y!\`!"PK!&@90`%^DCG`10N
  3236. +M+P`8)F\`%"IO`!`O+!'L2&P/P$AL$31.N@Q,3^\`#%*'9@Y(;`_&2&P1-$ZZ
  3237. +M##A@#$AL#\Y(;!$T3KH,*E!/+PLO#4AL#]A(;!$T3KH,&$_O`!!,WRB`3G4`
  3238. +M`%E/0?D`````+HAG""!Y_____$Z06$].=5E/0?D`````+HAG""!Y_____$Z0
  3239. +M6$].=4CG`P0J;P`0($U*&&;\4XB1S2X(8`H@!D'L$1).N@S6?``<'4J&9NY!
  3240. +M[!$23KH/<B`'3-\@P$YUGOP`$$CG!Q1^`$OO`"Q@``":<"6P+P`49@``@"!O
  3241. +M`"A2KP`H$!!R`!(`'T``%7!DDH!G.G`,DH!G#E>!9P9;@6<&8$0F76`T+!U'
  3242. +M[P`>>@<@!G(/P(%!^@!XT<`6D%.+Z(93A4J%:NA"+P`?8`H@'4'O`!=.N@(:
  3243. +M1^\`%R\+3KK_2%A/WH!@(E*'<``0+P`50>P1$DZZ#"9@$%*'<``0+P`40>P1
  3244. +M$DZZ#!0@;P`H4J\`*!`0'T``%&8`_UA![!$23KH.IB`'3-\HX-[\`!!.=3`Q
  3245. +M,C,T-38W.#E!0D-$148`````2.<#%RIL*@Q@%"95<!30K0`$(DTL>``$3J[_
  3246. +M+BI+(`UFZ$*L*@Q@3"IL*AAPG-"L$:`F0"`M``0I0"H8*6T`"!&@+BT`&$J`
  3247. +M9AX@;!'$#&@`)``491(@3RP(0>T`#"QX``1.KOTD+D8B2R`'+'@`!$ZN_RY*
  3248. +MK"H89JY,W^C`3G4@;P`$(F\`""!0(E$0&+`99@1*`&;VD"%(@$C`3G4@;P`$
  3249. +M("\`"$/Z_^!R!$[Z""H@;P`$(F\`""`O``Q*@&\*$A`0T1+!4X!F]DYU(&\`
  3250. +M!")O``AP`'(`$!@2&0P``&%M"@P``'IN!`0``"`,`0!A;0H,`0!Z;@0$`0`@
  3251. +MD(%F!$H!9M1.=0``("\`""!O``1.5?_T(D]R"DZZ`G`&00`P$L%*@&;P(`D0
  3252. +MX;_)9OI"$)"/3EU.=0``("\`""!O``1.5?_T(D\B``)!``<&00`P$L'FB&;P
  3253. +M(`D0X;_)9OI"$)"/3EU.=0``,#$R,S0U-C<X.6%B8V1E9B`O``@@;P`$44\B
  3254. +M3S(``D$`#Q+[$-SHB&;R(`D0X;_)9OI"$)")4$].=0``("\`""!O``0O"$J`
  3255. +M3E7_]")/;`80_``M1(!R"DZZ`<@&00`P$L%*@&;P$.&_R6;Z0A`@"$Y=D)].
  3256. +M=0``(&\`!")O``A(YS`@)$AR`"`!)@$,$``K9P@,$``M9@1V`5)($!@$```P
  3257. +M;1H,```);A0D`>6!TH+2@4H#9@32@&#BDH!@WB*!(`B0BE.`3-\$#$YU(&\`
  3258. +M!"\-*D@(+0`#`!MF,"`L$5A.N@4.*T``!"M``!!F"G`,*4`IK'#_8!8K;!%8
  3259. +M`!1P\\&M`!A"K0`,0JT`"'``*E].=0``(&\`!$CG(!0J2"9-8"!P`!`30>P/
  3260. +MZ0@P``$(`&<*<@`2`'0@DH)@!'(`$@`6P4H39MP@#4S?*`1.=0``GOP`4$CG
  3261. +M,39#^@"$<``L>``$3J[]V"I`2H!F!G`43KK!BGX`(&P1T!XH__\@!T/O`!Q@
  3262. +M`A+84X!D^D(W>!Q![P`<*4@1:$/L$7!'[!&$+$V1R)7*<``B`'1]U()V*$ZN
  3263. +M_J1P%$ZZP41,WVR,WOP`4$YU*BH@4W1A8VL@3W9E<F9L;W<@*BH``$58250`
  3264. +M`&EN='5I=&EO;BYL:6)R87)Y`$J`:@``'D2`2H%J```,1(%A```@1(%.=6$`
  3265. +M`!A$@$2!3G5*@6H```Q$@6$```9$@$YU+P)(030!9@``(DA`2$%(0C0`9P``
  3266. +M!H3!,`)(0#0`A,$P`DA",@(D'TYU+P-V$`Q!`(!D```&X9E10PQ!"`!D```&
  3267. +MZ9E90PQ!(`!D```&Y9E50TI!:P``!N.94T,T`.:H2$)"0N:J2$.`P38`,`(T
  3268. +M`TA!Q,&0@F0```930]"!<@`R`TA#Y[A(0,%!)A\D'TYU``!(YW``)`!G($J!
  3269. +M9@1"@&`8)@#&P4A"Q,%(0D)"UH)(0<#!2$!"0-"#3-\`#DYU```@+!',!$`!
  3270. +M]"Y`3OK^8```(&\`!"`(2AAF_%-(D<`@"$YU```@;P`$("\`"")\`````$H0
  3271. +M9PJP&&;X0^C__V#R(`E.=2!O``0@+P`(L!!G"$H89OAP`$YU(`A.=2!O``0B
  3272. +M;P`(("\`#$J`9Q!3@!(8LAEF#$H!9P13@&KR<`!.=6X$</].=7`!3G4``"!O
  3273. +M``0B;P`($ABR&68(2@%F]G``3G5N!'#_3G5P`4YU(F\`""!O``0@"$H89OQ3
  3274. +MB!#99OQ.=0``(F\`""!O``0@+P`,(@A@!!#99PA3@&3X8`9"&%.`9/H@`4YU
  3275. +M(F\`""!O``0@+P`,(@A*@&\6L<EE#-/`T<`1(5.`9OI@!A#94X!F^B`!3G4@
  3276. +M;P`$("\`"$CG`Q0N`"I(9A(@#68$<`!@:"!-3KH`;G``8%X@#68*(`=,WRC`
  3277. +M3OH!R"9-58LP/'__P%-(P.6`+``($P`/9PP,:X``__YF!"PK__(@!TZZ`:`F
  3278. +M0$J`9@1P`&`>O(=C!"`'8`(@!B!-(DM@`A+84X!D^B!-3KH`#B`+3-\HP$YU
  3279. +M(&\`!"`(9@).=5F`2.<\,B(L*@QF#BE\````%BFL3-],/$YU(D&P@6\2)`'4
  3280. +MJ0`$!H(````4L()L`F`((BD``&?48.`F`0:#````$+"#;<9G$B1#0H(T*@`"
  3281. +M:[KEBM:"6(-@Z"1`-"H``&JJ"*H`!P``0H,V*@`"`D-__^6+2FH``FM`1_(X
  3282. +M!$IK``!K-D*$."L``@)$?__EC-B#6(3DC%B#2FL``FH$`$2``#5$``)K$BH$
  3283. +MY8PT,D@$`D*``(I"-85(!$*$."H``&=,Y8Q$A$?R2/Q*:P``:SY"A#@K``+E
  3284. +MC$*%.BH``@)%?__EC=B%6(18@^2,2FH``FH$`$2``#=$``)K$BH$Y8PT,T@$
  3285. +M`D*``(I"-X5(!->I``@F*0`$MJP/Y&X,MJD`"&8Z2JD``&<T("PJ#"!`LH!F
  3286. +M#"EI```J#&`0(&@``+*H``!F]B%I`````"`I``0&@````!0L>``$3J[_+DS?
  3287. +M3#Q.=2`O``1*@&8,*7P````6*:QP`$YU2.<^,E:``H#____\#(```?_\;@``
  3288. +MN+"L#^1N``"P)BPJ#&<``*@B0["I``AN,B(L*A"RJ0`,9BA%Z0`02E)K$$*$
  3289. +M."H``@)$?__EC+"$;QI"A#@J``)K".6,1?)(!&#<)BD``&=F(D-@O@CJ``<`
  3290. +M`$?R"`1"A;"$9SPL!)R`689F!"`$8##DCDIJ``)J!`!&@``J`.2--T8``C=%
  3291. +M```U10`">@1*1FL.-#)(!`)"@`",0C6&2`0F*0`(EH"6A2-#``@@"EB`3-],
  3292. +M?$YU*@"PK`_D:@0@+`_D*``&@````!0B+"H0+'@`!$ZN_SI*@&8**7P````,
  3293. +M*:Q@S")`1>D`$"-L*@P``"E)*@PC1``$(VPJ$``,)@26A6<H68-G)"-#``A'
  3294. +M\E@$-7R`````Y(TU10`"-T4``.2+`$.``#=#``)@%$*I``@U?(````#DC`!$
  3295. +M@``U1``"(`I8@$S?3'Q.=2!O``0@+P`((B\`#")O`!!93TCG#S8L`2X`*D@O
  3296. +M20`@<`&^@&,``+(F3=?&(`=5@&8D+PLO#2!-(DLL;P`H3I903TJ`;P``DB`&
  3297. +M($TB2TZZ]Z1@``"$(`?BB"(&3KKZ]B)-T\`@!B!-3KKWBB1->@!X`6`J+PTO
  3298. +M"R!+(DTL;P`H3I903TJ`:A)2A=7&M<MG"B`&($LB2DZZ]US7QE*$N(=ETK7-
  3299. +M9PH@!B!-(DI.NO=&)F\`("`%(@8@32)+80#_4B!*T<8@!Y"%4X`B!B)+3-]L
  3300. +M\%B/8`#_.DS?;/!83TYU3OK<:D[ZW&(@;P`$64\O"R`(9R0F0&`"4HMP`!`3
  3301. +M0>P/Z0@P``,(`&;N($M#[P`$3KKX#B`O``0F7UA/3G4``"`O``1(YP$$+@`J
  3302. +M;!&88`@@;0`$3I`J52`-9O1+[!#P<`;`K0`858!F&"`M``20K0`09PXB+0`<
  3303. +M(&T`$,%!3KK;."!-*E`@#6;6(`=,WR"`3OJZ*"`O``0@;P`(0]!2F2!14ID0
  3304. +M@$YU44\@;P`,0I<O2``$2&\`%"\O`!1!^O_>0^\`"$ZZ"3(@;P`,0A!03R`7
  3305. +M4$].=0``("\`!"!O``@O#2(`*DA2E4/M``@@$5*1&X$(#"`9#(````(`;11!
  3306. +M[0`,(FT`!'(!P4%.N@*@0JT`""I?3G6>_`(,+PTJ;P(40J\`#$*O``0O30`(
  3307. +M2&\"'"\O`AQ!^O^J0^\`#$ZZ"+I03R`O``QG$$'O`!`B;P`(<@'!04ZZ`E8(
  3308. +M+0`%`!MF"`@M``0`&V<$</]@!"`O``0J7][\`@Q.=2\-(@`J2$/54ID@$5*1
  3309. +M&X$(""`9#(````(`;1)![0`(0^P1$G(!3KH"#$*M``0J7TYUGOP""$*O``1"
  3310. +METAO`A`O+P(00?K_ND/O``A.N@@R4$\@+P`$9Q!![P`(0^P1$G(!P4%.N@'.
  3311. +M<##`K!$J9P1P_V`"(!?>_`((3G4@;P`$(F\`"$CG`10F22I(8!`@!R!+3KH`
  3312. +M)%*`9@1P_V`*?@`>'4J'9NAP`$S?*(!.=0``("\`!"!O``A93TCG`P0N`"I(
  3313. +M?``?0``/<D'2@<*M`!AF#`CM``4`&W#_8``!0'`SP*T`&%6`9U!P3$8`P*T`
  3314. +M&')`TH&P@68,".T``0`;0JT`#&`T""T`!0`;9P9P_V```0QP;D8`P*T`&')N
  3315. +M1@&P@68,".T``0`;0JT`#&`*<``K0``,8```YB`M``RPK0`4;#(@;0`$4JT`
  3316. +M!"`'$(!2K0`,""T`!@`;9PYR"KZ!9@@@34ZZ`@`L`$J&9P``JB`&8```J@@M
  3317. +M``(`&V<N0JT`#"`M`!Q![P`/<@%.NMBT+`!2@&8(".T`!0`;8'(@!E.`9VP(
  3318. +M[0`$`!M@9$JM`!1F("!-3KKU9$J`9PH([0`%`!MP_V!8<``K0``,*VT`$``$
  3319. +M("T`#+"M`!1M""!-3KH!ABP`".T``0`;(&T`!%*M``0@!Q"`4JT`#`@M``8`
  3320. +M&V<.<@J^@68(($U.N@%:+`!*AF<$(`9@!G(`$@<@`4S?(,!83TYU(&\`!"`O
  3321. +M``@B+P`,(F\`$%E/2.</$"P!+@`F22](`!0@!B('3KKVLBH`>`!*AV<$2H9F
  3322. +M!G``8```_'`PP*L`&&8*<$'0@,"K`!AF#`CK``4`&W``8```WG`SP*L`&%6`
  3323. +M9U!P3$8`P*L`&')`TH&P@68,".L``0`;0JL`#&`T""L`!0`;9P9P`&```*IP
  3324. +M;D8`P*L`&')N1@&P@68,".L``0`;0JL`#&`*0JL`#'``8```A$JK`!1F3`@K
  3325. +M``(`&V9$($M.NO0P2H!G.@CK``4`&W``8&`@;P`4$!@B:P`$$H!2JP`$4JL`
  3326. +M#%.%4H0O2``4<@JP`68.""L`!@`;9P8@2TZZ`#X@*P`,L*L`%&P$2H5NPDJ%
  3327. +M;Q8@2TZZ`"8@*P`<(@4@;P`43KK6]-B`(`0B!TZZ]11,WPCP6$].=2!O``1(
  3328. +MYP$$*D@@#6<``*!P0="`P*T`&&8L(&T`$$/M``0BR$*90BT`('``(L`(+0`'
  3329. +M`!MG!@BM````&PBM``0`&V```(I*K0`49T0@+0`,:@9R`"M!``P@+0`,9R@B
  3330. +M+0`<(&T`$,%!3KK6=BX`4H!F"`CM``4`&V`,OJT`#&<&".T`!``;*VT`$``$
  3331. +M0JT`#'`PP*T`&&82""T`!P`;9P9P_,&M`!AP`&`D</]@('X`2^P0\$JM`!AG
  3332. +M#"!-80#_1DJ`9P)^_RI5(`UFZ"`'3-\@@$YU(&\`!")O``@O;P`,``0O;P`0
  3333. +M``B>_``T2.<O-B9O`&`J;P!<2.\#```L0B\`.T(O`#I"+P`Y0B\`.!]\`"``
  3334. +M-T*O`%1P_R]``%!"+P`V?@!\`$7O`#Q@2G``(&\`+!`0<B"0@6<B5X!G)E&`
  3335. +M9Q)5@&<&5X!G(F`R'WP``0`[8!X??``!`#I@%A]\``$`.6`.'WP``0`X8`8?
  3336. +M?``P`#=2KP`L(&\`+$H09JYP`;`O`#MF!A]\`"``-W(J(&\`++(09AXL;P`P
  3337. +M(E98EB(1+T$`5&P(1*\`5!]``#M2KP`L8`Q#[P!43KKQKM&O`"P@;P`L$!!R
  3338. +M+K`!9D92KP`L<"H@;P`LL!!F'")O`#`@45B1(!`O0`!0;`9P_R]``%!2KP`L
  3339. +M8!9#[P!03KKQ;"H`9@9"KP!08`3;KP`L'WP`(``W<``@;P`L$!!R3)"!9Q1R
  3340. +M')"!9P99@&<*8!(??``"`#9@!A]\``$`-E*O`"P@;P`L4H@B;P`L$!%R`!(`
  3341. +M'T``)"](`"9P4)*`9P`!$%&!9P`!''`+DH!G``'04X%G4%N!9TQ;@6<B4X%G
  3342. +M``$"4X%G``#J5X%G``&`58%G``#P5X%G``#J8``!N"1O`#!P`K`O`#9F#B!2
  3343. +M6)(B4"`3,H!@``)*(%)8DB)0(I-@``(^(F\`,"!16)$H$&H$?@%$A$J'9PQ%
  3344. +M[P`]'WP`+0`\8")*+P`Z9PQ%[P`]'WP`*P`\8!!*+P`Y9PQ%[P`]'WP`(``\
  3345. +M?`$@!"!*3KKOABH`("\`4&8&2H1G``'D("\`4&H&<@$O00!0*"\`4)B%;QP@
  3346. +M2M'$(`4B2DZZ\XAR,"!*8`(0P5.$9/HJ+P!0W(4@!5.`9@`!!!`2L"\`-V8`
  3347. +M`/I*KP!09@``\D(28```["`O`%!J!G`(+T``4!]\``$`-G`"L"\`-F80(F\`
  3348. +M,"!16)$@$'@`.`!@"B)O`#`@45B1*!`0+P`D<G6P`6<`_UIR;[`!9AY*+P`X
  3349. +M9PQ%[P`]'WP`,``\?`$@!"!*3KKN]F``_SY*+P`X9Q(??``P`#Q%[P`^'WP`
  3350. +M>``]?`(@!"!*3KKO$BH`""\`!0`D9@#_%$'O`#Q.NN_^8`#_"")O`#`@45B1
  3351. +M)%`@"F8$1?H`\B!*2AAF_%.(D<HJ""`O`%!K!+"%;P0O10!0+"\`4&`@?`$B
  3352. +M;P`P(%%8D2`0'T``/$(O`#U@!G``8```K$7O`#P@+P!4L(9L"'(`+T$`5&`$
  3353. +MG:\`5$HO`#MG'F`(<``0&B!+3I53AFST8`8@2W`@3I53KP!4;/1@:DJ'9@Q*
  3354. +M+P`Y9@9*+P`Z9T80$G(@L`%G#'0KL`)G!G0ML`)F,DJ&:RZR+P`W9A)@"G``
  3355. +M$"\`-R!+3I53KP!4;/!P`!`:($M.E5.&8`IP`!`O`#<@2TZ54Z\`5&SP8`AP
  3356. +M`!`:($M.E5.&;/0@+P`F3-]L]-[\`#1.=0``(&\`!")O``@O;P`,``0O;P`0
  3357. +M``B>_``,2.<`%"9)*D@O;P`<`!!@.'`EL"\`#&8F(&\`&+`09@92KP`88!@O
  3358. +M"R\-0^\`&$ZZ^Y103TJ`9P8O0``88`IP`!`O``P@2TZ5(&\`&!`8'T``#"](
  3359. +M`!A*`&:V3-\H`-[\``Q.=2!O``0@B%B00J@`!"%(``A.=0``(&\`!$CG``8J
  3360. +M2$JM``IG"B)-+'@`!$ZN_I@;?`#_``AP_RM``!1P`!`M``\L>``$3J[^L")-
  3361. +M<").KO\N3-]@`$YU```@;P`$("\`"$CG`Q8N`"I(</\L>``$3J[^MAP`2(9(
  3362. +MQB`&4H!F!'``8&!P(B(\``$``4ZN_SHF0$J`9@@@!DZN_K!@1$'K``H@S1='
  3363. +M``D7?``$``A"&!#&D\E.KO[:)T``$"`-9P@B2TZN_IY@&D'K`!@G2``40>L`
  3364. +M%"=(`!Q"JP`8%WP``@`@(`M,WVC`3G4O""\`3KD```*T4$].=0`````#[```
  3365. +M``H```````".X@``)2(``"4N```E*```)18``"4$```E$```)0H``"4<```D
  3366. +M_@````$````!````"@````````/R```#Z@``!,QA;&P`97-C87!E``!D:7)E
  3367. +M8W1O<GD`9G5L;"UT:6UE`&EN;V1E`&MI;&]B>71E<P!N=6UE<FEC+75I9"UG
  3368. +M:60`;F\M9W)O=7```&AI9&4M8V]N=')O;"UC:&%R<P``<F5V97)S90!S:7IE
  3369. +M``!W:61T:`!A;&UO<W0M86QL``!I9VYO<F4M8F%C:W5P<P``8VQA<W-I9GD`
  3370. +M`&9I;&4M='EP90!I9VYO<F4``&1E<F5F97)E;F-E`&QI=&5R86P`<75O=&4M
  3371. +M;F%M90``<F5C=7)S:79E`&9O<FUA=```<V]R=```=&%B<VEZ90!T:6UE``!H
  3372. +M96QP``!V97)S:6]N`&%M:6=A`````````````````````&$````$````````
  3373. +M``````!B````#```````````````9````!8````````2$`````$````@````
  3374. +M``````````!I````)@``````````````:P```#```````````````&X```!`
  3375. +M``````````````!'````2@``````````````<0```%X``````````````'(`
  3376. +M``!F``````````````!S````;`````$`````````=P```'(`````````````
  3377. +M`$$```!^``````````````!"````C@``````````````1@```)@`````````
  3378. +M`````$8```"B`````0````````!)````J@``````````````3````+8`````
  3379. +M`````````$X```"^``````````````!1````R@``````````````4@```-0`
  3380. +M```!``````````P```#<`````0`````````*````X@````$`````````5```
  3381. +M`.H````!``````````L```#P````````$G`````!````]@```````!)T````
  3382. +M`0```/X```````````````T`````````````````````=F5R8F]S90!L;VYG
  3383. +M``!C;VUM87,``&AO<FEZ;VYT86P``&%C<F]S<P``=F5R=&EC86P``'-I;F=L
  3384. +M92UC;VQU;6X````"U````MP```+B```"Z@```O8```+^```#"```````````
  3385. +M``````````0````#`````P````(````!;F]N90``=&EM90``<VEZ90``97AT
  3386. +M96YS:6]N`````U(```-8```#7@```V0```````````````,````$`````F%T
  3387. +M:6UE`&%C8V5S<P``=7-E`&-T:6UE`'-T871U<P`````#D@```Y@```.@```#
  3388. +MI````ZH``````````@````(````"`````0````$E<PH``````````````%!/
  3389. +M4TE83%E?0T]24D5#5`!#3TQ534Y3`%1!0E-)6D4`86)C9&9G:6ML;6YP<7)S
  3390. +M='5W.GA!0D-&1TDZ3$Y14E-4.E58,0!I;G9A;&ED(&QI;F4@=VED=&@Z("5S
  3391. +M```J(0``+BHA`&EN=F%L:60@=&%B('-I>F4Z("5S``!S;W)T('1Y<&4`=&EM
  3392. +M92!T>7!E`&9O<FUA="!T>7!E`"5S```E<P``)7,Z"@``)7,Z"@``=&]T86P@
  3393. +M)74*`"5S```E<P``)39U(```)2IU(```)7,@)3-U(``E+3AU(``E+3@N.',@
  3394. +M`"4M.'4@`"4M."XX<R``)3-U+"`E,W4@`"4X;'4@`"5S(``@+3X@``!<7```
  3395. +M7&X``%QB``!<<@``7'0``%QF``!<(```7"(``%PE,#-O`"4V=2```"4J=2``
  3396. +M`%5S86=E.B`E<R!;+6%B8V1G:6ML;6YP<7)S='5X04)#1D=,3E%24U58,5T@
  3397. +M6RUW(&-O;'-=(%LM5"!C;VQS72!;+4D@<&%T=&5R;ET*("`@("`@(%LM+6%L
  3398. +M;%T@6RTM97-C87!E72!;+2UD:7)E8W1O<GE=(%LM+6EN;V1E72!;+2UK:6QO
  3399. +M8GET97-=(%LM+6QI=&5R86Q="B`@("`@("!;+2UN=6UE<FEC+75I9"UG:61=
  3400. +M(%LM+6AI9&4M8V]N=')O;"UC:&%R<UT@6RTM<F5V97)S95T@6RTM<VEZ95T*
  3401. +M("`@("`@(%LM+7=I9'1H/6-O;'-=(%LM+71A8G-I>F4]8V]L<UT@6RTM86QM
  3402. +M;W-T+6%L;%T@6RTM:6=N;W)E+6)A8VMU<'-="@`@("`@("`@6RTM8VQA<W-I
  3403. +M9GE=(%LM+69I;&4M='EP95T@6RTM:6=N;W)E/7!A='1E<FY=(%LM+61E<F5F
  3404. +M97)E;F-E70H@("`@("`@6RTM<75O=&4M;F%M95T@6RTM<F5C=7)S:79E72!;
  3405. +M+2US;W)T/7MN;VYE+'1I;64L<VEZ92QE>'1E;G-I;VY]70H@("`@("`@6RTM
  3406. +M9F]R;6%T/7ML;VYG+'9E<F)O<V4L8V]M;6%S+&%C<F]S<RQV97)T:6-A;"QS
  3407. +M:6YG;&4M8V]L=6UN?5T*("`@("`@(%LM+71I;64]>V%T:6UE+&%C8V5S<RQU
  3408. +M<V4L8W1I;64L<W1A='5S?5T@6RTM;F\M9W)O=7!="B`@("`@("!;+2UH96QP
  3409. +M72!;+2UV97)S:6]N72!;<&%T:"XN+ET*``!'3E4@9FEL975T:6QS(#,N-@``
  3410. +M``>,``!/:P``````%```````````````````!Z1C;VYS;VQE.@``)7,Z(```
  3411. +M:6YT=6ET:6]N+FQI8G)A<GD```!T:6UE<BYD979I8V4`````_____V9I9F\N
  3412. +M;&EB<F%R>0``````````````````"`0``0``````````"`8`````````````
  3413. +M``!`*",I86QL;V-A+F,),2XQ````````````````=7-E<@`````(1`````!W
  3414. +M:&5E;```````"%(```A8``````A*1F%I;&5D('1O(&-R96%T92!T:6UE<@``
  3415. +M=7-E<B!I;G1E<G)U<'0```````!.;R!M96UO<GD```!A`$9A:6QE9"!T;R!C
  3416. +M<F5A=&4@=&EM97(``$Y)3#H``$Y)3#H``$Y)3#H``"H`3DE,.@``26YV86QI
  3417. +M9"!W:6QD8V%R9"`E<P!%<G)O<B!E>'!A;F1I;F<@87)G=6UE;G1S`%5315(`
  3418. +M`'5S97(``%5315).04U%``!(3TU%``!S.@``4TA%3$P`8FEN.G-H``!(3U-4
  3419. +M3D%-10``86UI9V$`3DE,.@````!'350`("`@`"`@(`````E,```)4```````
  3420. +M````("`@`"`@(`!S.FQO8V%L=&EM90!S.GIO;F5I;F9O```O`````!\````<
  3421. +M````'P```!X````?````'@```!\````?````'@```!\````>````'P```!\`
  3422. +M```=````'P```!X````?````'@```!\````?````'@```!\````>````'P``
  3423. +M`6T```%N<&]S:7AR=6QE<P``54Y)6%1:```@("``4W5N36]N5'5E5V5D5&AU
  3424. +M1G)I4V%T2F%N1F5B36%R07!R36%Y2G5N2G5L075G4V5P3V-T3F]V1&5C`"4N
  3425. +M,W,@)2XS<R4S9"`E,#(N,F0Z)3`R+C)D.B4P,BXR9"`E9`H```";,"!Q``!&
  3426. +M86EL960@=&\@:6YI=&EA;&ES92!)+T\``&%M:6=A('-P96-I9FEC(&5R<F]R
  3427. +M``````J(56YK;F]W;B!E<G)O<@!N;W0@;W=N97(`;F\@<W5C:"!F:6QE(&]R
  3428. +M(&1I<F5C=&]R>0!N;R!S=6-H('!R;V-E<W,`:6YT97)R=7!T960@<WES=&5M
  3429. +M(&-A;&P`:2]O(&5R<F]R`&YO('-U8V@@9&5V:6-E(&]R(&%D9')E<W,`87)G
  3430. +M=6UE;G0@;&ES="!T;V\@;&]N9P``97AE8R!F;W)M870@97)R;W(`8F%D(&9I
  3431. +M;&4@;G5M8F5R`&YO(&-H:6QD('!R;V-E<W,``&YO(&UO<F4@<')O8V5S<V5S
  3432. +M`&YO="!E;F]U9V@@;65M;W)Y`'!E<FUI<W-I;VX@9&5N:65D`&)A9"!A9&1R
  3433. +M97-S`&)L;V-K(&1E=FEC92!R97%U:7)E9`!M;W5N="!D979I8V5S(&)U<WD`
  3434. +M`&9I;&4@97AI<W1S`&-R;W-S+61E=FEC92!L:6YK`&YO('-U8V@@9&5V:6-E
  3435. +M``!N;W0@82!D:7)E8W1O<GD`:7,@82!D:7)E8W1O<GD``&EN=F%L:60@87)G
  3436. +M=6UE;G0``&9I;&4@=&%B;&4@;W9E<F9L;W<`=&]O(&UA;GD@;W!E;B!F:6QE
  3437. +M<P!N;W0@82!T>7!E=W)I=&5R``!T97AT(&9I;&4@8G5S>0``9FEL92!T;V\@
  3438. +M8FEG``!N;R!S<&%C92!L969T(&]N(&1E=FEC90!I;&QE9V%L('-E96L``')E
  3439. +M860M;VYL>2!F:6QE('-Y<W1E;0!T;V\@;6%N>2!L:6YK<P``8G)O:V5N('!I
  3440. +M<&4`;6%T:"!A<F=U;65N=`!R97-U;'0@=&]O(&QA<F=E``!)+T\@<W1R96%M
  3441. +M(&5M<'1Y``!F:6QE(&YA;64@=&]O(&QO;F<``&1I<F5C=&]R>2!N;W0@96UP
  3442. +M='D`=&]O(&UA;GD@<V]F="!L:6YK<R`H;&]O<#\I````"J(```JP```*N@``
  3443. +M"M0```KD```*_```"P8```L@```+.```"TH```M:```+;```"WX```N0```+
  3444. +MH@``"ZX```O$```+V```"^0```OV```,!@``#!8```PF```,.```#$P```Q@
  3445. +M```,<@``#((```R0```,J```#+8```S,```,W```#.@```SV```-"```#1H`
  3446. +M``TN```-0@```"8``&1O;W(N)6QX+B5L>```3F\@;65M;W)Y`'9I<G1U86P@
  3447. +M;65M;W)Y(&5X:&%U<W1E9```=FER='5A;"!M96UO<GD@97AH875S=&5D```E
  3448. +M=0``)74``````````````````0```#]03U-)6$Q97T-/4E)%0U0`+2T``"5S
  3449. +M.B!O<'1I;VX@8"5S)R!I<R!A;6)I9W5O=7,*`"5S.B!O<'1I;VX@8"TM)7,G
  3450. +M(&1O97-N)W0@86QL;W<@86X@87)G=6UE;G0*```E<SH@;W!T:6]N(&`E8R5S
  3451. +M)R!D;V5S;B=T(&%L;&]W(&%N(&%R9W5M96YT"@``)7,Z(&]P=&EO;B!@)7,G
  3452. +M(')E<75I<F5S(&%N(&%R9W5M96YT"@`E<SH@=6YR96-O9VYI>F5D(&]P=&EO
  3453. +M;B!@+2TE<R<*`"5S.B!U;G)E8V]G;FEZ960@;W!T:6]N(&`E8R5S)PH````E
  3454. +M<SH@:6QL96=A;"!O<'1I;VX@+2T@)6,*`"5S.B!O<'1I;VX@<F5Q=6ER97,@
  3455. +M86X@87)G=6UE;G0@+2T@)6,*``!5;FMN;W=N('-Y<W1E;2!E<G)O<@``)7,Z
  3456. +M(```.B`E<P`````E<SH@``!I;G9A;&ED`&%M8FEG=6]U<P`@)7,@8"5S)PH`
  3457. +M`````$```"`@("`@("`@("@H*"@H("`@("`@("`@("`@("`@("`@2!`0$!`0
  3458. +M$!`0$!`0$!`0$(2$A(2$A(2$A(00$!`0$!`0@8&!@8&!`0$!`0$!`0$!`0$!
  3459. +M`0$!`0$!`0$0$!`0$!""@H*"@H("`@("`@("`@("`@("`@("`@("`A`0$!`@
  3460. +M````````````````````````````````````````````````````````````
  3461. +M````````````````````````````````````````````````````````````
  3462. +M``````````````````````````````````````````````````````````^@
  3463. +M```1$@``````````````````````````````````````````$30`````````
  3464. +M````````````````````````````````````````````````````````````
  3465. +M``````````````````````(`__\````.``X```````````````#__P````0`
  3466. +M!````````'T6```17/__````!``$````````?2P``````````````&0```/"
  3467. +M```#O@```[H```.V```#L@```WH```-V```#<@```VX```,N```#*@```R8`
  3468. +M``,B```#'@```QH```,6```"M````J0```*4```"A````G0```)D```"5```
  3469. +M`D0```(T```")````A0```($```!]````>0```'4```!Q````;0```&D```!
  3470. +ME````80```%T```!9````50```%$```!-````20```$4```!!````JP```*<
  3471. +M```!/```!YX```>X```(&```"`P```AD```(7@``"%H```A*```)6```"50`
  3472. +M``WV```-\@``#>X```WJ```-Y@``#>(```W>```-V@``#=8```W2```-S@``
  3473. +M#<H```W&```-P@``#;X```VZ```-M@``#;(```VN```-J@``#:8```VB```-
  3474. +MG@``#9H```V6```-D@``#8X```V*```-A@``#8(```U^```->@``#78```UR
  3475. +M```-;@``#6H```UF```-8@``#5X```J>```1$@``$/```!&````#[`````(`
  3476. +3```````1D```$7P````````#\EX`
  3477. +`
  3478. +end
  3479. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/rmdir.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/rmdir.uue
  3480. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/rmdir.uue    Wed Dec 31 17:00:00 1969
  3481. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/rmdir.uue    Sat Sep 28 00:00:00 1996
  3482. @@ -0,0 +1,404 @@
  3483. +begin 666 rmdir
  3484. +M```#\P`````````"``````````$```\'```"=````^D```\'2.=^_B1()`!)
  3485. +M^0`````L>``$+P)(YP#@)FX!%"(K`*QG#.6)($$B*``TY8E@!B(/DJL`.G0`
  3486. +M(#P```L$LJP(2&0((BP(2-"!=`$F02(\``$``4ZN_SI*@&8(3-\'!&```D`@
  3487. +M0"1`(D`@/````CZ9_``````@W%.`9OH@'&<.($G1W-70((HD25.`8/`H2=G\
  3488. +M`````"E\```+!`E$3-\'`"E."2!*`DS?``1([(``"2AG2"`,!(``````!H``
  3489. +M``L$T*P(2"(`!(````"`#&X`)``4;1@I0`E`*4$)/)*L"$A![`DX((%.KOTD
  3490. +M8`(N0"`L"$@O0``$T:P)1"(/DHL&@0```(`I00C\0JP))'``(CP``#``3J[^
  3491. +MSB9N`11#^@&(<`!.KOW8*4`*_&8&<&1@``#F*6L`F`D<2JL`K&<``'X@:P"L
  3492. +MT<C1R")H`!#3R=/)(`)R`!(9*4D)+-"!7H`"0/_\*4`)-$CG0$`B/``!``%.
  3493. +MKO\Z3-\"`DJ`9@AP%"\`9P`!!"!`*4`),"`"4X#4@1&R```@`E."4<C_]A&\
  3494. +M`"`@`E."$;P`(B`"$;$@`"`!4<K_^!"\`"(O"&!*0>L`7$ZN_H!!ZP!<3J[^
  3495. +MC"E`"20O`"1`("H`)&<8+&P*_"!`(B@``$ZN_Z`I0`D<(@!.KO^"(&P))"\(
  3496. +M2&P(^"!H`"0I:``$"2Q.NB:X3KH-TG``8`0@+P`$)&P)*"4`+'@`!`QN`"0`
  3497. +M%&T22JP).&<,0>P).%FL"4!.KOTD+DH@+`D49P0@0$Z03KHFD$ZZ)J1*K`DD
  3498. +M9R`L;`K\(BP)'&<$3J[_IBQX``1.KO]\(FP))$ZN_H9@$BQX``0@+`DT9P@B
  3499. +M;`DP3J[_+B)L"OQ.KOYB("P)1"),D_P`````3J[_+B`?3-]_?DYU9&]S+FQI
  3500. +M8G)A<GD````@#Y!\`!2PK`C\90`J!$CG!Q0N+P`8*F\`''P`*54)2$*L"4R7
  3501. +MRV`:(`5*@&<4<G"0@6<"8`AP`2E`"4Q@!&$``1`O"TAL`!1(;`!4+PTO!TZZ
  3502. +M'5)/[P`4*@!2@&;*2JP)5&<:+RP`IDAL`%9(;`B03KHO9$*73KHNS$_O``Q*
  3503. +MK`E09P1A``#*("P%V+"'9F)A``"^8%PB+`78Y8$O-1@`3KH<PB(L!=CE@2ZU
  3504. +M&`!.NA@X6$]*@&<@(BP%V.6!+S48`$AL`%HO+`JD0J=.NB1.3^\`$'P!8!9*
  3505. +MK`E,9Q`B+`78Y8$O-1@`80``'%A/4JP%V"`L!=BPAVV<+T8`&$S?*.!.^BY`
  3506. +M(`]10+"L"/QE`"D`2.<`%"IO``Q(>``O+PU.NBD24$\F0$J`9@1@'%.+M\UC
  3507. +M!G`OL!-G]$(K``$O#4ZZ%Z983TJ`9]!,WR@`3G4@#Y!\``RPK`C\90`HM"\L
  3508. +M"4A(;`!>2&P(D$ZZ+FI(>``!3KHMT$_O`!!.=4CG(#(@;P`80^\`'$7Z`!PF
  3509. +M;P`4)`LL>0````1.KOWV(`N0@DS?3`1.=1;`3G4``"!O``0B;P`(64](YS,V
  3510. +M*DA^`"!L"H0L*`#@+TD`($J&9B!*K`DD9AI![`#$(@@L;`K\)#P```/M3J[_
  3511. +MXBP`9P)^`4J&9S8B!D'L`,XD"$'L"2PF""QL"OQ.KOZ>(@8D#28O`"!.KOZ>
  3512. +M(@9T"DZN_LA*AV=8(@9.KO_<8%`@;`J$)F@`N#!\__^WR&=`0^P`U'`E+'@`
  3513. +M!$ZN_=@D0$J`9RPI;`DL`+@I30"\+PH@2RQ*0^P`L)7*)F\`)$ZN_;1,WP0`
  3514. +M(DHL>``$3J[^8DS?;,Q83TYU(&\`!$/O``AA`/\J3G4@;P`$0^\`"&$`_QQP
  3515. +M%$ZZ+*I.=0``2.<`!G`(<@`L>``$3J[_.BI`2H!F!'``8"Y"K0`$2'@`*'``
  3516. +M+P!![`#H<@&3R<%!3KH9[E!/*H!F#")-<`A.KO\N<`!@`B`-3-]@`$YU(&\`
  3517. +M!$CG``8J2"`-9Q@@36$``!X@54ZZ&C(B37`(+'@`!$ZN_RY,WV``3G4@;P`$
  3518. +M2.<`!BI(2JT`!&<4(E4L>``$3J[^(")53J[^)D*M``1,WV``3G4@;P`$(%`B
  3519. +M:``.<``0*0`/<@'AH2`!3G4@;P`$("\`""(O``Q(YP,&+`$N`"I(8:I*AV8$
  3520. +M2H9G'B)5(T<`("-&`"0S?``)`!PL>``$3J[^,G`!*T``!$S?8,!.=2!O``1(
  3521. +MYP`&*DA*K0`$9QPB52QX``1.KOXL2D!G#B)53J[^)D*M``1P`6`"<`!,WV``
  3522. +M3G4O#B`L"I`B`$A!0D'2@"`L"H2S@"E`"5Q"K`E@0^P`_'``+'@`!$ZN_=@I
  3523. +M0`E8</].KOZV2(!(P"E``/A*K`E89PA*@&L$<`%@`G``*4`)9"Q?3G4O#B`L
  3524. +M`/AK""QX``1.KOZP("P)6&<*(D`L>``$3J[^8BQ?3G4@+P`$44](YP,`+@!.
  3525. +MN@4`(`=.N@&02H!G*")`(&D`'')`Y8G"D2](``P@`2!I``0B;P`,3I$L`"`'
  3526. +M3KH!2"`&8`)P_TS?`,!03TYU("\`!"\'+A]@K@``(&\`!"`O``@B;P`,+V\`
  3527. +M$``$+V\`%``(+V\`&``,+V\`'``0+V\`(``4+V\`)``844](YP<4+@!([P,`
  3528. +M`!1\`"IL"6A@%DJM``1F"C!\``$K2``$8`Q2AMK\`"2\K`EL;>0@+`ELO(!F
  3529. +M>'(*TZP);"`L"6PB`.>!TH#E@2`!3KHGQ"I`2H!F#'`,*4`*I'#_8```CG#V
  3530. +MT*P);"(`YX'2@.6!(&P):")-8`(2V%.!9/H@+`EH9P8@0$ZZ)AXI30EH>O;:
  3531. +MK`EL(`7G@-"%Y8#;P)?+*TL`!%*%VOP`)+JL"6QM\"`&YX#0AN6`(&P):"&O
  3532. +M`!0(!"&'"``AKP`8"`A+[P`@(9T(#"&="!`AG0@42^\`+"&="!@AG0@<(9T(
  3533. +M("`&3-\HX%!/3G4@+P`$(@!K%K*L"6QL$"`!YX#0@>6`(&P):$*P"`1.=2`O
  3534. +M``1(YP$$+@!K'KZL"6QL&"`'YX#0A^6`*FP):-O`2JT`!&<$(`U@"'`)*4`*
  3535. +MI'``3-\@@$YU("P);$YU```@+P`$64\N@$'L`1`@"%A/3G4@;P`$64\NB$'L
  3536. +M`1`@"%A/3G4@+`$03G4``%E/2JP!0F8,0>\``RE(`4)A[F`60>\``R)L`4*S
  3537. +MR&0$<`%@`G#_*4`)<%A/3G593TCG`10N+P`42JP)<&8"8<`J;`%&8"X@+`EP
  3538. +M;PQ![P`/(FT`!+/(8A!*@&H<0>\`#R)M``2SR&00)E4O#4ZZ)+)83RI+(`UF
  3539. +MSBE-`49*AV8$<`!@(E"'+P=.NB8"($`@K`%&0^\`$R%)``1#Z``(6$\I0`%&
  3540. +M(`E,WRB`6$].=0``("\`!%E/+H`@+`J`9PX@0$ZZ_(I*@&<$<@%@`G(`(`%8
  3541. +M3TYU("\`!"!L"H!R`$[Z_#!.NOMD*4`*@&8*2&P!3$ZZ^T!83R!L"H!.NOOT
  3542. +M@:P)=$YU(&P*@$[Z^Y`([``,"79.=2`O``0(```,5L!$`$B`2,!.=0CL``T)
  3543. +M=DYU("\`!`@```U6P$0`2(!(P$YU3KH41G``(&P*W!`H``]R`>&A@ZP)=$YU
  3544. +M3OH4F"`O``193TCG`18O0``0?@!@+B`M`!1.NA/N)D!*@&<42JL`%&8.?@%P
  3545. +M`2=``!0G;0`8`!@B37`<+'@`!$ZN_RX@;`K<+'@`!$ZN_HPJ0$J`9L`@!TS?
  3546. +M:(!83TYU("\`!$CG#P0N`'`![Z`L`'`)OH!F!G``3KH*'"`L"GC`AF<&C:P*
  3547. +M?&!Z*@9&A<NL"GQ*AVMF<""^@&Q@(`?G@$'L"7@J<`@`,'P``;O(9BP@!U6`
  3548. +M9Q13@&<0<@V0@6<\68!G.%&`9S1@"DAL`61.NOG\6$]P`$ZZ";Y@("`-9QP@
  3549. +M!^>`*`9![`EXB+`(!(FL"G@@!TZ51H3)K`IX("P*?,"&9HI,WR#P3G4@+P`$
  3550. +M+PXB+`ET@H!P`"QX``1.KO[.+%].=2`O``0O#B(`("P)=("!+'@`!$ZN_L(L
  3551. +M7TYU("\`!$CG`P`N`'P`80#^$$J`9PA\`7`.80#_#"`'80#^8DJ`9PA\`7`"
  3552. +M80#^^B`'80#^:DJ`9PA\`7`#80#^Z"`'80#^ADJ`9PA\`7`480#^UB`&3-\`
  3553. +MP$YU("\`!"\'*4`)!'`(+A]@`/Z\<`!A`/]@8)!@]DCG`11^`$OL"7@V?``!
  3554. +M*HM"K0`$4H=0C7`@OH!M\$*L"GQ"K`IX0JP)=&$`_=1A`/WJ80#]HDS?*(!@
  3555. +M`/WX80#]N&``_@@``$AL`7A.NOC86$].=2`O``0O#4ZZ(R@J0$J`9@)AXB`-
  3556. +M*E].=2!O``0@+P`(+PM.NB$<)D!*@&8"8<8@"R9?3G4@;P`$+PTJ2"`-9@1+
  3557. +M[`&"($U*&&;\4XB1S2`(4H!.NB+<($!*@&8$<`!@"")($MUF_"`(*E].=5E/
  3558. +M2.<#-'X`?``@;`J$)F@`T&`L2BL`"&8D,#P%`,!K``YF&E*'(&L`"B`(2AAF
  3559. +M_%.(D<`@"-R`W*L`%%2&)E-*DV;0(`=2@.6`T(9A`/]**4`*G.6'($`B0-/'
  3560. +M1>D`!"]``!1F"D'L`70I2`J<8%8@;`J$*F@`T&!"2BT`"&8Z,#P%`,!M``YF
  3561. +M,"9M``HN+0`4(&\`%"#*+T@`%&`"%-M*$V;Z%/P`/29M`!!@`A3;(`=3ATJ`
  3562. +M9O9"&BI52I5FNB!O`!1"D$S?+,!83TYU(&\`!"`O``@O#2I(*H!"K0`$Y8!A
  3563. +M`/ZT*T``""I?3G4@;P`$(F\`""`O``Q(YR(T)DDJ2$J`9PH@2V$`_L(D0&`"
  3564. +M)$L@"F<^(A4D+0`$M(%M(BP!W(9T$-*"O(%M`B(&*H$@`>6`(&T`"$ZZ'YHK
  3565. +M0``(9Q)'[0`$(A-2F^6!(%LABA@`<`%,WRQ$3G4@;P`$(F\`""`O``QADDJ`
  3566. +M9@1A`/X:3G4@;P`$(F\`"$CG`!0F22I(("T`!-"K``2PE6\2T(`J@.6`(&T`
  3567. +M"&$`_AHK0``((BT`!.6!(&T`"-'!("L`!"(`Y8$B:P`(8`(0V5.!9/K1K0`$
  3568. +M(&L`"$S?*`!.^A^*(&\`!")O``@O;P`,``0@+P`0(B\`%%E/2.<"-"P!*DDD
  3569. +M2"](`!!*@&=$4X!G"E.`9P``MF```/13AF<B("\`&"(-D($@;P`00C`(`"!!
  3570. +M(F\`$&`"$MA3@&3Z8```SD'L`80B;P`0$MAF_&```+XF;P`88&YP7+`59F9*
  3571. +M+0`!9V!4C7`!O(!F!A3\`&%@5"`&58!F1A`M__](@$C`<B.0@6<N58!G*E6`
  3572. +M9R93@&<B4X!G'E.`9QIR%9"!9Q1R')"!9PY5@&<*<A^0@6<$58!F!!3\`"<4
  3573. +M[?__8`@4[?__8`(4W;O+98Y@0"9O`!A@-G`JL!5F+DHM``%G*%2-$"W__TB`
  3574. +M2,!R99"!9PQR"9"!9@P4_``*8`X4_``;8`@4[?__8`(4W;O+9<9"$DS?+$!8
  3575. +M3TYUGOP!+$CG/S8J;P%8(&P)(`QH`"4`%&0*2'@`%$ZZ\A983T*L"&AP`2E`
  3576. +M"&0I0`B*<`(I0`B&*4`(K"E\````A`BHD\DL>``$3J[^VBE`"H1.NO4H*4`*
  3577. +MB&8*2&P!ADZZ]0183R!L"HA.NO6X*4`*C"QL"H@@5BQH`!0I3@J80>\!,$ZN
  3578. +M_[XI;P$P"I!.NO8@3KK[K"!L"H0@*`"L9Q#E@")`(BD`-.6!*4$*E&`&*6@`
  3579. +MA`J42A5F``#H0>P!GB((+&P*_"0\```#[DZN_^(L`$'L`:0B"$ZN_^(N`$'L
  3580. +M`:HB"$ZN_^(J`$J&9PA*AV<$2H5F(DJ&9P8B!DZN_]Q*AV<&(@=.KO_<2H5G
  3581. +M!B(%3J[_W&$`^W)P`2\`+P4O`"\'(@;!04ZZ"A0@;`DD("@`'$'O`5AA`/R>
  3582. +M3^\`$'P`?@!@4")L"20@:0`D(#!X`&<^(@!#[P`P)`DL;`K\=D#EBTZN_FY*
  3583. +M@&<F(FP))"!I`"31QR`H``1G""(")`!.KOR.0>\!2$/O`#!P`6$`_-A2AE"'
  3584. +M(&P))+RH`!QMIF```LPL;`K\3J[_RB@`3J[_Q"H`?@`@;`J$+"@`X&8H?@%!
  3585. +M[`&P(@@D/````^U.KO_B+`!F$D'L`;(B"$ZN_^(L`&8$80#ZI"\'+P9P`"\`
  3586. +M+P4B!,%!3KH)1D'O`5AP`6$`^]8@/```!1IA`/J.($`Q?`0``!(O0``\<$#E
  3587. +MB&$`^GI/[P`0?D#ECR]``3A@`E*-$!5(@$C`0>P'10@P``,(`&;L$!5G``(6
  3588. +M<B*P`68P4HTF36`0<"JP%68(2BT``6<"4HU2C1`59P9R(K`!9N8D31`5<B*P
  3589. +M`68"4HU\`F!4<">P%68@4HTF36`"4HT0%6<&<B>P`6;T)$UP)[`59@)2C7P!
  3590. +M8"XF36`0<%RP%68(2BT``6<"4HU2C1`59Q)R(+`!9PQR"K`!9P9R";`!9MHD
  3591. +M37P`($LJ"IJ+(`52@"](`"AA`/FV)D!*KP%,9B`@!2!+(F\`*$ZZ&I)",U@`
  3592. +M0>\!2")+<`!A`/M@8`#_)MJ%<A#:@;J';Q0@;P$X3KH;/"`%80#Y=BX%+T`!
  3593. +M."\*(`8@2R)O`"QR`6$`^ZY83R(+)"\!."8'+&P*_$ZN_+@J`&P00A(O+P`H
  3594. +M2&P!N$ZZ\@I03TJ%9B(O"B`&($LB;P`L<@!A`/MT0>\!3")+<`!A`/KH6$]@
  3595. +M`/ZL>@$@;P`L0J@`"$(H`!%"*``0+PH@!B!+(F\`+'("80#[0$'O`4!P$&$`
  3596. +M^B983R(+)"\`+"QL"OQ.KOS**`!F/&`J>@`B;P`LTOP!&$'O`3QP`6$`^B!*
  3597. +M@&8$>&=@$B(O`"PL;`K\3J[\Q"@`2H1GTB(O`"PL;`K\3J[\OG!TT("X@&<*
  3598. +M2&P!S$ZZ\5983TJ%9R(O"B`&($LB;P`L<@!A`/K`0>\!3")+<`!A`/HT6$]@
  3599. +M`/WX("\!0"!O`41.NA5V0>\!2$/O`3QA`/HJ($M.NAH"8`#]UB!O`3A.NAGV
  3600. +M(&\`+$ZZ&>YA`/B20>P!YDZZ"'HI0`$09@A![`'L*4@!$$'L`?).N@AD*4`!
  3601. +M)&8&*6P!$`$D0>P!_$ZZ"%`I0`$H9@A![`("*4@!*$'L`@9.N@@Z*4`!+&8(
  3602. +M0>P"#"E(`2Q![`(43KH()"E`"J!F"$'L`AXI2`J@("\!3"!O`5`B;`J<3KHG
  3603. +M1G``3KH=,$S?;/S>_`$L3G5(YP,`3KKS_BX`?`!@"B\&3KKR9EA/4H:\AVWR
  3604. +M3-\`P$YU("\`!"\'+@!AU$ZZ\=I.NO=0(&P*B$ZZ\)@O!TZZ[/I83RX?3G4@
  3605. +M+P`$+P<N'V#4``">_``,2-<!`W#_WOP`#$YU44](UP,`4$].=4CG,`(B$$HH
  3606. +M``UG!'``8!PD"28`+&P*_$ZN_]8B`%*`9@A.N@C0</]@`B`!3-]`#$YU44](
  3607. +MYS\V+@`J229(+!,O1@`H+T@`+$HK``UG!G``8```C$HK``QG9B9-U\=Z`&!8
  3608. +M)$U@`E**M<MD!G`*L!)F]+?*9@0H"F`&0>H``2@(F(TB+P`H)`TF!"QL"OQ.
  3609. +MKO_0+`!2@&8(3KH(6G#_8#[:AK:&9C9+Z@`!GH9P`$ZZ]8!.NO6P2H!F(DJ'
  3610. +M9J1@'"(&)`TF!RQL"OQ.KO_0*@!2@&8(3KH('G#_8`(@!4S?;/Q03TYU64](
  3611. +MYS\"+@`L$"]!`!Q**``-9P1P`&!24X$F`2(&)`<L;`K\3J[_OBH`3J[_?"@`
  3612. +M4H5G!$J$9PX@!$ZZ!M@I0`JD</]@)"(&=``F`DZN_[XL`%*`9P1*A&<.(`1.
  3613. +MN@:V*4`*I'#_8`(@!DS?0/Q83TYUGOP!`$CG/P8N`"I(+!4J+0`(("T`!&<*
  3614. +M(@`L;`K\3J[_IA@M``U(A$C$($U.NA=H2H1G!'``8$0B!D'O`"`D""QL"OQV
  3615. +M0.6+3J[^:"@`2H=F"B(&3J[_W$J`9QI*A&<2</^Z@&<,(@(D!4ZN_T9*@&<$
  3616. +M<`!@!DZZ!R1P_TS?8/S>_`$`3G4@+P`$2.<@`B(`+&P*_'0`3J[_-$ZN_WQT
  3617. +M+D8"L()7P40!2(%(P2`!3-]`!$YU("\`!"!O``@B;P`,GOP`$$CG-Q8N`"9)
  3618. +M*DA\`&&X2H!F?"('+&P*_'0!3J[^5DJ`9VPB!T'L`B0D"'8$3J[_T%F`9E(B
  3619. +M!R0\```G$$ZN_S1*@&="(@=![P`@)`AV$$ZN_]9R";"!;RYPF[`O`"!F)D'O
  3620. +M`"4B""0+3J[\T"H`0>\`)M'`(@@D#4ZN_-!2@&<&4H5G`GP!(@=T`$ZN_E8@
  3621. +M!DS?:.S>_``03G4@+P`$(B\`")[\`A!(YS\&+@!P_R]``B@O00`D(@<L;`K\
  3622. +M=`!V`4ZN_[XO0``@(@=.KO^^+`!.KO]\*@`O0`(L9@``PB@O`"0B!R0$=O].
  3623. +MKOXXL()F``"NO()L``">*@2:AB@%(`1R`4A!+'@`!$ZN_SHJ0$J`9FIR`DA!
  3624. +M3J[_*.*(*@`,A0```@!M$"`%<@%(04ZN_SHJ0$J`9D9Z0.>-2^\`*#`\`?]R
  3625. +M`$'O`"@0P5'(__Q@++B%;P0@!6`"(`0F`$ZZ\U(B!R0-+&P*_$ZN_]"P@V<*
  3626. +M3J[_?"]``BQ@!IB#2H1NT$'O`"BQS6<,(DT@!2QX``1.KO\N*B\"+&8$0J\"
  3627. +M*"PO`""\KP`D;`XB!R0&+&P*_';_3J[_OBPO`BAG"B`%3KH$'BE`"J0@!DS?
  3628. +M8/S>_`(03G6>_`$(2.<W%BX`)DDJ2"P52BT`#68``1@@!P2````$`&<@!(``
  3629. +M``0`9TI3@&=84X!G7%.`9UY3@&=F4X!G;&```.Y*+0`,9R8@!D'O`21#[P$@
  3630. +M80#]UDJ`9Q0@+P$D-T```B`O`2`V@'``8```RG`98```OB(&+&P*_$ZN_R@F
  3631. +M@'``8```LB:&<`!@``"J<`!@``"D(`8B$V$`_C9@``"8*U,`"'``8```CBH3
  3632. +M2JT`!&8.(A4L;`K\3J[^C"M```0@+0`$9V(D`"(%+&P*_$ZN_EQ*@&92(@9!
  3633. +M[P`@)`AV0.6+3J[^:$J`9SXB!4ZN_Z8B+0`$3J[_IB(&3J[_W"("=`!.KO]&
  3634. +M&WP``0`-*H(K0@`$0>\`("((+&P*_$ZN_[A*@&<$(`)@#DZZ`]Q@!G`6*4`*
  3635. +MI'#_3-]H[-[\`0A.=2`O``0B+P`(+V\`#``$2.</!BHO`!PL`2X`<`Y.NA4.
  3636. +M*D!*@&8*<`PI0`JD</]@3D/5(L="F2+&0BT`#2('+&P*_$ZN_R@;0``,2'K^
  3637. +M=$AZ^]I(>OMD2'KZK$AZ^G9(>OIH(`4@34/Z^E!.NNRL3^\`&"@`;`8@34ZZ
  3638. +M$T8@!$S?8/!.=2`O``0B+P`(+V\`#``$+V\`$``(+V\`%``,+V\`&``02.<-
  3639. +M`"@O`!0J+P`0+@!P`$J!9@1P0.6(`$```2\`(`=R_V$`_T983TJ`9D!P`$J$
  3640. +M9@1P0.6(`$```B\`(`5R_V$`_RA83U.`9B)P`$JO`!QF!'!`Y8@`0``"+P`@
  3641. +M+P`<<O]A`/\&6$]5@&<00>P"*B](`!!,WP"P3OKIL$S?`+!.=0``(&\`!$CG
  3642. +M(Q8J2'X`0J<L;`K\<@(D#TZN_QQ/[P`$)D!*@&=2(@UT_DZN_ZPN`&=&(@<D
  3643. +M"TZN_YI*@&<Z(BL`!%[`1`!(@$C`+``B!TZN_Z9R`DZN_Q9*AF<4(@U.KO^X
  3644. +M2H!G!'``8#).N@(T8"IP%"E`"J1@(DZN_WQ.N@$H*4`*I$J'9P8B!TZN_Z8@
  3645. +M"V<()`MR`DZN_Q9P_TS?:,1.=2`O``0@;P`((B\`#%E/2.<#-"P!+@`J2$ZZ
  3646. +M[[P@!TZZ[$PF0$J`9T0(*P`!``-G-@@K``,``V<6(&L`&"](`!0@:P`$<`!R
  3647. +M`B)O`!1.D2!K`!0O2``4(`8@:P`$(DTD;P`43I)@"'`-*4`*I'#_3-\LP%A/
  3648. +M3G4@+P`$(&\`""(O``Q(YP,$3-\@P&"`(&\`!)[\`$!(YSL6*DA.NN\Z(`UG
  3649. +M4DH59TXB#4'O`"`D""QL"OQV0'@`3J[\=BX`;39.KO]\+`!2@$ZZ$IPF0$J`
  3650. +M9R2^AF<4)@92@R(-)`M.KOQV2H!O$"`"8`X@0B)+$MAF_"`+8`)P`$S?:-S>
  3651. +M_`!`3G4@+P`$*4`)`$J`9P``AG)GD(%G``""58!G``"`<@F0@6=\4X!G>%.`
  3652. +M9W13@&=P4X!G;%.`9VA3@&=H4X!G:')1D(%G9E.`9V93@&=F4X!G9E.`9V93
  3653. +M@&=F58!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V93@&=F4X!G9E6`
  3654. +M9V93@&=F4X!G9E.`9V9@:'``8&9P#&!B<`M@7G`68%IP!V!6<`A@4G`08$YP
  3655. +M$6!*<`)@1G`"8$)P%F`^<`=@.G`68#9P)&`R<!9@+G`68"IP'F`F<!)@(G`E
  3656. +M8!YP)F`:<!-@%G`68!)P'&`.<`U@"G`-8`9P#6`"</].=2\.+&P*_$ZN_WQA
  3657. +M`/[Z*4`*I"Q?3G4@;P`$2.<`!BI((DTL>``$3J[_!"!-3-]@`$[Z#\@@+P`$
  3658. +M2.<!!"X`*FP*L&`.("T`#+"'9@0@#6`(*E5*E6;N<`!,WR"`3G5(YR`"0>P*
  3659. +ML$ZZ'(8@+`J$(BP*D"0`LX("@@!___\I0@JL4H(I0@JH+P$O`$AL!;Q(;`J\
  3660. +M3KKE8D_O`!`L>``$3J[]9BE`"N!G$$'L"KQP`$ZZ')HI0`K<9@I(;`7*3KKF
  3661. +M2EA/3-]`!$YU2.<`!B`L"N!G"B!`+'@`!$ZN_6!*K`K<9S@L>``$3J[_?&`,
  3662. +M(DUP'"QX``1.KO\N(&P*W"QX``1.KOZ,*D!*@&;B(&P*W$ZZ&_(L>``$3J[_
  3663. +M=DS?8`!.=0``(&\`!"`O``@B+P`,(F\`$"]O`!0`!"]O`!@`"%E/2.</-B@O
  3664. +M`"PJ+P`H+`$N`"I)+T@`("QX``1.KOUF)D!*@&<P($L@!$ZN_7(D0$J`9R(@
  3665. +M#6<()4T`*"5%`"0@;P`@(`<B2B(&3J[^1$H`9@0@"F`6(`IG!B!*3J[];"`+
  3666. +M9P8@2TZZ&UQP`$S?;/!83TYU(&\`!$CG``8J2"`-9Q@B32QX``1.KOX^(&T`
  3667. +M#DZZ&S(@34ZN_6Q,WV``3G4@#UE`L*P(_&4`#*)(YP$$*F\`#"!-2AAF_%.(
  3668. +MD<TN"%.'8`H@1U.'(`A"-0@`2H=O"'`OL#5X`&?J3-\@@$YU(`^0?``8L*P(
  3669. +M_&4`#&`@+P`$(&\`#")O``A"IR\O`!@O+P`8+P@O"2\`3KH!.D_O`!A.=2`/
  3670. +MD'P`&+"L"/QE``PL("\`!"!O``PB;P`(2'@``2\O`!@O+P`8+P@O"2\`3KH!
  3671. +M!$_O`!A.=0``O^P(_&4`"_I(YP$$+B\`$"IO``Q@$!`52(!(P+"'9@0@#6`(
  3672. +M4HU*%6;L<`!,WR"`3G6_[`C\90`+R$CG`Q0N+P`<)F\`&"IO`!1\`&`(%[5H
  3673. +M`&@`4H:\AVWT3-\HP$YU(`^0?``,L*P(_&4`"Y1(YP$4*F\`$"XL"O">K`KL
  3674. +MY8<O!TZZY_8F0"(L"NSE@2!-T<$NAR\`+PAAF"`L"O`B`.6!($W1P2(L"NSE
  3675. +M@2)-T\$B+`78DH#E@2Z!+PDO"&$`_W(B+`KLTJP%V)*L"O#E@=O!+H<O#2\+
  3676. +M80#_6"`L!=A+[`KL(AW2@)*53^\`'"K`*4$*[$S?*(!.=2`/D'P`)+"L"/QE
  3677. +M``KZGOP`$$CG/S0J;P!()&\`1$*L!=1*K`789E1P`2E`!=A"K`KD*4`*["E`
  3678. +M"O`@;P!`$A!T+;("9@QT`BE""NA2KP!`8"IT*[("9@I"K`KH4J\`0&`:2&P%
  3679. +MY$ZZ#\Y83TJ`9P9"K`KH8`9P`2E`"N@N+P`X2JP*Y&<*(&P*Y$H09@`!,'`!
  3680. +ML*P*Z&9<("P*\"(L"NRR@&<2L*P%V&<,+R\`/&$`_K983V`,(BP%V+"!9P0I
  3681. +M00KL(BP%V.6!)F\`/-?!8`92K`786(L@+`78L(=L#B)3<"VP$6;J2BD``6?D
  3682. +M("P%V"E`"O`@+`78OH!G4.6`2&P%]"!O`$`O,`@`3KH*;E!/2H!F.%*L!=@@
  3683. +M+`KP(BP*[+*`9Q*PK`789PPO+P`\80#^-EA/8`RR@&8(("P%V"E`"NP@!RE`
  3684. +M!=@I0`KP("P%V+"'9A8@+`KL(BP*\+*`9P0I0`78</]@``1$(BP%V.6!(&\`
  3685. +M/"9P&``4$W8MM`-F"B)P&`!**0`!9AQ*K`KH9@9P_V``!!A2K`78*7`8``74
  3686. +M<`%@``0(4HL@"F<(MA-F!'`!8`)P`")+T\`I20KD(`IG``+&(BP%V.6!(&\`
  3687. +M/"!P&`!P+;`09@`"L+`H``%G"$JO`$QG``*B)FP*Y$*O`"Q\`$*O`"A@`E*+
  3688. +M$!-G!G(]L`%F]"]*`#!Z`&!B(`N0K`KD+P`O+`KD(&\`."\03KH)*D_O``Q*
  3689. +M@&8\+@N>K`KD(&\`,"\03KH(WEA/OH!F$B!O`#`H!7`!+T``+"](`"A@)$JO
  3690. +M`"AF#"!O`#`H!2](`"A@`GP!<!#1KP`P4H4@;P`P2I!FEDJ&9T1*KP`L9CY*
  3691. +MK`7<9R`B+`78Y8$@;P`\+S`8`"\02&P%^$AL")!.N@XL3^\`$"\L"N1.N@AJ
  3692. +MT:P*Y%*L!=A83W`_8``"\"XO`#A*KP`H9P`!)E*L!=A*$V=X(&\`*$JH``1G
  3693. +M#$/K``$I20748```T$JL!=QG2"(L!=CE@2)O`#PD<1C\<"VP*@`!9A8O$"\1
  3694. +M2&P&%DAL")!.N@VZ3^\`$&`<$!)(@$C`+Q`O`"\12&P&1$AL")!.N@V<3^\`
  3695. +M%"\L"N1.N@?:T:P*Y%A/<#]@``)D<`$@;P`HL*@`!&9@(BP%V+*';!)2K`78
  3696. +MY8$@;P`\*7`8``748$9*K`7<9QSE@2!O`#PO,!C\+Q!(;`9R2&P(D$ZZ#4!/
  3697. +M[P`0+RP*Y$ZZ!WY83]&L"N1P.B!O`$"P$&8&<#I@``'^<#]@``'X+RP*Y$ZZ
  3698. +M!UI83]&L"N0@#6<"*H0@;P`H("@`"&<.(B@`#"!`((%P`&```<P@;P`H("@`
  3699. +M#&```<!*KP!,9S`B+`78Y8$@;P`\('`8`'`ML"@``6<:(&P*Y!`02(!(P"\`
  3700. +M+R\`1&$`^NI03TJ`9F1*K`7<9TPB+`78Y8$@;P`\)'`8`'`ML"H``688+RP*
  3701. +MY"\02&P&F$AL")!.N@Q\3^\`$&`>$!)(@$C`+RP*Y"\`+Q!(;`:X2&P(D$ZZ
  3702. +M#%Q/[P`40>P&V%*L!=@I2`KD<#]@``$F2^P*Y"!5$!@JB!]``"=(@$C`+P`O
  3703. +M+P!$*LAA`/IB4$\D0"!L"N1*$&8$4JP%V"`*9PH0+P`G<CJP`68X2JP%W&<@
  3704. +M$"\`)TB`2,`O`"!O`$`O$$AL!MI(;`B03KH+Z$_O`!`0+P`G2(!(P"E`!>!P
  3705. +M/V```+)P.K`J``%F``"@L"H``F8>(&P*Y!`09PHI2`744JP%V&`$0JP%U)/)
  3706. +M*4D*Y&!Z(&P*Y$H09PHI2`744JP%V&!D("P%V+"'9DI*K`7<9R`0+P`G2(!(
  3707. +MP"\`(&\`0"\02&P&]$AL")!.N@MH3^\`$!`O`"=(@$C`*4`%X'`Z(&\`0+`0
  3708. +M9@8?0``G8!IP/Q]``"=@$E*L!=@B`.6!(&\`/"EP&``%U$*L"N00+P`G2(!(
  3709. +MP$S?+/S>_``03G4@#Y!\`!BPK`C\90`%1"`O``0@;P`,(F\`"$*G0J="IR\(
  3710. +M+PDO`&$`^B)/[P`83G6_[`C\90`%&B\'+B\`"&\2OJP%MFX,Y8=![`4:(#!X
  3711. +M`&`&0>P''"`(+A].=2`/D'P`*+"L"/QE``3H2.<#%"PO`!@N+P`4)F\`("IO
  3712. +M`!PO+`E(2&P',DAL")!.N@J*+J\`2"\O`$0O+P!$+R\`1"\O`$0O+P!$+R\`
  3713. +M1"\++PU(;`B03KH*8D_O`#!*AF<8+P9A`/]N+H!(;`<X2&P(D$ZZ"D9/[P`,
  3714. +M""P``0BK9T)2K`B<("P(G+"L"*1N("!L")12K`B4$+P`"@@L``8(JV<N2&P(
  3715. +MD$ZZ#2)83V`B4ZP(G$AL")!(>``*3KH*7E!/8`Y(;`B02'@`"DZZ"DY03TAL
  3716. +M")!.N@ST6$]*AV<(+P=.N@E$6$],WRC`3G4``%E/0?D`````+HAG""!Y____
  3717. +M_$Z06$].=5E/0?D`````+HAG""!Y_____$Z06$].=4CG`Q<J;`KT8!0F57`4
  3718. +MT*T`!")-+'@`!$ZN_RXJ2R`-9NA"K`KT8$PJ;`L`<)S0K`C\)D`@+0`$*4`+
  3719. +M`"EM``@(_"XM`!A*@&8>(&P)(`QH`"0`%&42($\L"$'M``PL>``$3J[])"Y&
  3720. +M(DL@!RQX``1.KO\N2JP+`&:N3-_HP$YU(&\`!")O``@@4")1$!BP&68$2@!F
  3721. +M]I`A2(!(P$YU(&\`!"`O``A#^O_@<@1.^@>"(&\`!")O``@@+P`,2H!O"A(0
  3722. +M$-$2P5.`9O9.=2`O``@@;P`$3E7_]")/<@I.N@(T!D$`,!+!2H!F\"`)$.&_
  3723. +MR6;Z0A"0CTY=3G4``"`O``@@;P`$3E7_]")/(@`"00`'!D$`,!+!YHAF\"`)
  3724. +M$.&_R6;Z0A"0CTY=3G4``#`Q,C,T-38W.#EA8F-D968@+P`((&\`!%%/(D\R
  3725. +M``)!``\2^Q#<Z(AF\B`)$.&_R6;Z0A"0B5!/3G4``"!O``0B;P`(2.<P("1(
  3726. +M<@`@`28!#!``*V<(#!``+68$=@%22!`8!```,&T:#```"6X4)`'E@=*"TH%*
  3727. +M`V8$TH!@XI*`8-XB@2`(D(I3@$S?!`Q.=2!O``0O#2I(""T``P`;9C`@+`BT
  3728. +M3KH$WBM```0K0``09@IP#"E`"J1P_V`6*VP(M``4<//!K0`80JT`#$*M``AP
  3729. +M`"I?3G4``"!O``1(YR`4*D@F36`@<``0$T'L!T4(,``!"`!G"G(`$@!T()*"
  3730. +M8`1R`!(`%L%*$V;<(`U,WR@$3G4``)[\`%!(YS$V0_H`A'``+'@`!$ZN_=@J
  3731. +M0$J`9@9P%$ZZZ:Y^`"!L"2P>*/__(`=#[P`<8`(2V%.`9/I"-W@<0>\`'"E(
  3732. +M",1#[`C,1^P(X"Q-D<B5RG``(@!T?=2"=BA.KOZD<!1.NNEH3-]LC-[\`%!.
  3733. +M=2HJ(%-T86-K($]V97)F;&]W("HJ``!%6$E4``!I;G1U:71I;VXN;&EB<F%R
  3734. +M>0!*@&H``!Y$@$J!:@``#$2!80``($2!3G5A```81(!$@4YU2H%J```,1(%A
  3735. +M```&1(!.=2\"2$$T`68``")(0$A!2$(T`&<```:$P3`"2$`T`(3!,`)(0C("
  3736. +M)!].=2\#=A`,00"`9```!N&944,,00@`9```!NF964,,02``9```!N6954-*
  3737. +M06L```;CF5-#-`#FJ$A"0D+FJDA#@,$V`#`"-`-(0<3!D()D```&4T/0@7(`
  3738. +M,@-(0^>X2$#!028?)!].=0``2.=P`"0`9R!*@68$0H!@&"8`QL%(0L3!2$)"
  3739. +M0M:"2$'`P4A`0D#0@TS?``Y.=0``("P)*`1``?0N0$[Z_F```"!O``0@"$H8
  3740. +M9OQ32)'`(`A.=0``(&\`!"`O``@B?`````!*$&<*L!AF^$/H__]@\B`)3G4@
  3741. +M;P`$(F\`""`O``Q*@&<04X`2&+(99@Q*`6<$4X!J\G``3G5N!'#_3G5P`4YU
  3742. +M```@;P`$(F\`"!(8LAEF"$H!9O9P`$YU;@1P_TYU<`%.=2)O``@@;P`$("\`
  3743. +M#"((8`00V6<(4X!D^&`&0AA3@&3Z(`%.=2)O``@@;P`$("\`#"((2H!O%K')
  3744. +M90S3P-'`$2%3@&;Z8`80V5.`9OH@`4YU(&\`!"`O``A(YP,4+@`J2&82(`UF
  3745. +M!'``8&@@34ZZ`&YP`&!>(`UF"B`'3-\HP$[Z`<@F356+,#Q__\!32,#E@"P`
  3746. +M"!,`#V<,#&N``/_^9@0L*__R(`=.N@&@)D!*@&8$<`!@'KR'8P0@!V`"(`8@
  3747. +M32)+8`(2V%.`9/H@34ZZ``X@"TS?*,!.=2!O``0@"&8"3G59@$CG/#(B+`KT
  3748. +M9@XI?````!8*I$S?3#Q.=2)!L(%O$B0!U*D`!`:"````%+"";`)@""(I``!G
  3749. +MU&#@)@$&@P```!"P@VW&9Q(D0T*"-"H``FNZY8K6@EB#8.@D0#0J``!JJ@BJ
  3750. +M``<``$*#-BH``@)#?__EBTIJ``)K0$?R.`1*:P``:S9"A#@K``("1'__Y8S8
  3751. +M@UB$Y(Q8@TIK``)J!`!$@``U1``":Q(J!.6,-#)(!`)"@`"*0C6%2`1"A#@J
  3752. +M``!G3.6,1(1'\DC\2FL``&L^0H0X*P`"Y8Q"A3HJ``("17__Y8W8A5B$6(/D
  3753. +MC$IJ``)J!`!$@``W1``":Q(J!.6,-#-(!`)"@`"*0C>%2`37J0`()BD`!+:L
  3754. +M!T!N#+:I``AF.DJI``!G-"`L"O0@0+*`9@PI:0``"O1@$"!H``"RJ```9O8A
  3755. +M:0`````@*0`$!H`````4+'@`!$ZN_RY,WTP\3G4@+P`$2H!F#"E\````%@JD
  3756. +M<`!.=4CG/C)6@`*`_____`R```'__&X``+BPK`=`;@``L"8L"O1G``"H(D.P
  3757. +MJ0`(;C(B+`KXLJD`#&8H1>D`$$I2:Q!"A#@J``("1'__Y8RPA&\:0H0X*@`"
  3758. +M:PCEC$7R2`1@W"8I``!G9B)#8+X(Z@`'``!'\@@$0H6PA&<\+`2<@%F&9@0@
  3759. +M!&`PY(Y*:@`":@0`1H``*@#DC3=&``(W10``-44``GH$2D9K#C0R2`0"0H``
  3760. +MC$(UAD@$)BD`"):`EH4C0P`((`I8@$S?3'Q.=2H`L*P'0&H$("P'0"@`!H``
  3761. +M```4(BP*^"QX``1.KO\Z2H!F"BE\````#`JD8,PB0$7I`!`C;`KT```I20KT
  3762. +M(T0`!"-L"O@`#"8$EH5G*%F#9R0C0P`(1_)8!#5\@````.2--44``C=%``#D
  3763. +MBP!#@``W0P`"8!1"J0`(-7R`````Y(P`1(``-40``B`*6(!,WTQ\3G4@;P`$
  3764. +M("\`""(O``PB;P`064](YP\V+`$N`"I(+TD`('`!OH!C``"R)DW7QB`'58!F
  3765. +M)"\++PT@32)++&\`*$Z64$]*@&\``)(@!B!-(DM.NOA,8```A"`'XH@B!DZZ
  3766. +M^R8B3=/`(`8@34ZZ^#(D37H`>`%@*B\-+PL@2R)-+&\`*$Z64$]*@&H24H75
  3767. +MQK7+9PH@!B!+(DI.NO@$U\92A+B'9=*US6<*(`8@32)*3KKW[B9O`"`@!2(&
  3768. +M($TB2V$`_U(@2M'&(`>0A5.`(@8B2TS?;/!8CV``_SI,WVSP6$].=4[ZZMI.
  3769. +M^NK2("\`!$CG`00N`"IL"/1@""!M``1.D"I5(`UF]$OL"$QP!L"M`!A5@&88
  3770. +M("T`!)"M`!!G#B(M`!P@;0`0P4%.NNH0($TJ4"`-9M8@!TS?((!.^N*T("\`
  3771. +M!"!O``@O#2(`*DA2E4/M``@@$5*1&X$(#"`9#(````(`;11![0`,(FT`!'(!
  3772. +MP4%.N@'P0JT`""I?3G6>_`(,+PTJ;P(40J\`#$*O``0O30`(2&\"'"\O`AQ!
  3773. +M^O^J0^\`#$ZZ"`I03R`O``QG$$'O`!`B;P`(<@'!04ZZ`:8(+0`%`!MF"`@M
  3774. +M``0`&V<$</]@!"`O``0J7][\`@Q.=2`O``0@;P`(64](YP,$+@`J2'P`'T``
  3775. +M#W)!TH'"K0`89@P([0`%`!MP_V```4!P,\"M`!A5@&=0<$Q&`,"M`!AR0-*!
  3776. +ML(%F#`CM``$`&T*M``Q@-`@M``4`&V<&</]@``$,<&Y&`,"M`!AR;D8!L(%F
  3777. +M#`CM``$`&T*M``Q@"G``*T``#&```.8@+0`,L*T`%&PR(&T`!%*M``0@!Q"`
  3778. +M4JT`#`@M``8`&V<.<@J^@68(($U.N@(`+`!*AF<``*H@!F```*H(+0`"`!MG
  3779. +M+D*M``P@+0`<0>\`#W(!3KKH@"P`4H!F"`CM``4`&V!R(`93@&=L".T`!``;
  3780. +M8&1*K0`49B`@34ZZ]L!*@&<*".T`!0`;</]@6'``*T``#"MM`!``!"`M``RP
  3781. +MK0`4;0@@34ZZ`88L``CM``$`&R!M``12K0`$(`<0@%*M``P(+0`&`!MG#G(*
  3782. +MOH%F""!-3KH!6BP`2H9G!"`&8`9R`!('(`%,WR#`6$].=2!O``0@+P`((B\`
  3783. +M#")O`!!93TCG#Q`L`2X`)DDO2``4(`8B!TZZ^`XJ`'@`2H=G!$J&9@9P`&``
  3784. +M`/QP,,"K`!AF"G!!T(#`JP`89@P(ZP`%`!MP`&```-YP,\"K`!A5@&=0<$Q&
  3785. +M`,"K`!AR0-*!L(%F#`CK``$`&T*K``Q@-`@K``4`&V<&<`!@``"J<&Y&`,"K
  3786. +M`!AR;D8!L(%F#`CK``$`&T*K``Q@"D*K``QP`&```(1*JP`49DP(*P`"`!MF
  3787. +M1"!+3KKUC$J`9SH(ZP`%`!MP`&!@(&\`%!`8(FL`!!*`4JL`!%*K``Q3A5*$
  3788. +M+T@`%'(*L`%F#@@K``8`&V<&($M.N@`^("L`#+"K`!1L!$J%;L)*A6\6($M.
  3789. +MN@`F("L`'"(%(&\`%$ZZYL#8@"`$(@=.NO9P3-\(\%A/3G4@;P`$2.<!!"I(
  3790. +M(`UG``"@<$'0@,"M`!AF+"!M`!!#[0`$(LA"F4(M`"!P`"+`""T`!P`;9P8(
  3791. +MK0```!L(K0`$`!M@``"*2JT`%&=$("T`#&H&<@`K00`,("T`#&<H(BT`'"!M
  3792. +M`!#!04ZZYD(N`%*`9@@([0`%`!M@#+ZM``QG!@CM``0`&RMM`!``!$*M``QP
  3793. +M,,"M`!AF$@@M``<`&V<&</S!K0`8<`!@)'#_8"!^`$OL"$Q*K0`89PP@36$`
  3794. +M_T9*@&<"?O\J52`-9N@@!TS?((!.=2!O``0B;P`(+V\`#``$+V\`$``(GOP`
  3795. +M-$CG+S8F;P!@*F\`7$CO`P``+$(O`#M"+P`Z0B\`.4(O`#@??``@`#="KP!4
  3796. +M</\O0`!00B\`-GX`?`!%[P`\8$IP`"!O`"P0$'(@D(%G(E>`9R91@&<258!G
  3797. +M!E>`9R)@,A]\``$`.V`>'WP``0`Z8!8??``!`#E@#A]\``$`.&`&'WP`,``W
  3798. +M4J\`+"!O`"Q*$&:N<`&P+P`[9@8??``@`#=R*B!O`"RR$&8>+&\`,")66)8B
  3799. +M$2]!`%1L"$2O`%0?0``[4J\`+&`,0^\`5$ZZ\PK1KP`L(&\`+!`0<BZP`69&
  3800. +M4J\`+'`J(&\`++`09APB;P`P(%%8D2`0+T``4&P&</\O0`!04J\`+&`60^\`
  3801. +M4$ZZ\L@J`&8&0J\`4&`$VZ\`+!]\`"``-W``(&\`+!`0<DR0@6<4<AR0@6<&
  3802. +M68!G"F`2'WP``@`V8`8??``!`#92KP`L(&\`+%*((F\`+!`1<@`2`!]``"0O
  3803. +M2``F<%"2@&<``1!1@6<``1QP"Y*`9P`!T%.!9U!;@6=,6X%G(E.!9P`!`E.!
  3804. +M9P``ZE>!9P`!@%6!9P``\%>!9P``ZF```;@D;P`P<`*P+P`V9@X@4EB2(E`@
  3805. +M$S*`8``"2B!26)(B4"*38``"/B)O`#`@45B1*!!J!'X!1(1*AV<,1>\`/1]\
  3806. +M`"T`/&`B2B\`.F<,1>\`/1]\`"L`/&`02B\`.6<,1>\`/1]\`"``/'P!(`0@
  3807. +M2DZZ\1XJ`"`O`%!F!DJ$9P`!Y"`O`%!J!G(!+T$`4"@O`%"8A6\<($K1Q"`%
  3808. +M(DI.NO2T<C`@2F`"$,%3A&3Z*B\`4-R%(`53@&8``000$K`O`#=F``#Z2J\`
  3809. +M4&8``/)"$F```.P@+P!0:@9P""]``%`??``!`#9P`K`O`#9F$")O`#`@45B1
  3810. +M(!!X`#@`8`HB;P`P(%%8D2@0$"\`)')UL`%G`/]:<F^P`68>2B\`.&<,1>\`
  3811. +M/1]\`#``/'P!(`0@2DZZ\(Y@`/\^2B\`.&<2'WP`,``\1>\`/A]\`'@`/7P"
  3812. +M(`0@2DZZ\*HJ``@O``4`)&8`_Q1![P`\3KKQ6F``_P@B;P`P(%%8D210(`IF
  3813. +M!$7Z`/(@2DH89OQ3B)'**@@@+P!0:P2PA6\$+T4`4"PO`%!@('P!(F\`,"!1
  3814. +M6)$@$!]``#Q"+P`]8`9P`&```*Q%[P`\("\`5+"&;`AR`"]!`%1@!)VO`%1*
  3815. +M+P`[9QY@"'``$!H@2TZ54X9L]&`&($MP($Z54Z\`5&ST8&I*AV8,2B\`.68&
  3816. +M2B\`.F=&$!)R(+`!9PQT*[`"9P9T+;`"9C)*AFLNLB\`-V828`IP`!`O`#<@
  3817. +M2TZ54Z\`5&SP<``0&B!+3I53AF`*<``0+P`W($M.E5.O`%1L\&`(<``0&B!+
  3818. +M3I53AFST("\`)DS?;/3>_``T3G4``"!O``0B;P`(+V\`#``$+V\`$``(GOP`
  3819. +M#$CG`!0F22I(+V\`'``08#AP);`O``QF)B!O`!BP$&8&4J\`&&`8+PLO#4/O
  3820. +M`!A.NON44$]*@&<&+T``&&`*<``0+P`,($M.E2!O`!@0&!]```PO2``82@!F
  3821. +MMDS?*`#>_``,3G4@;P`$((A8D$*H``0A2``(3G4``"!O``1(YP`&*DA*K0`*
  3822. +M9PHB32QX``1.KOZ8&WP`_P`(</\K0``4<``0+0`/+'@`!$ZN_K`B37`B3J[_
  3823. +M+DS?8`!.=0``(&\`!"`O``A(YP,6+@`J2'#_+'@`!$ZN_K8<`$B&2,8@!E*`
  3824. +M9@1P`&!@<"(B/``!``%.KO\Z)D!*@&8((`9.KOZP8$1!ZP`*(,T71P`)%WP`
  3825. +M!``(0A@0QI/)3J[^VB=``!`@#6<((DM.KOZ>8!I!ZP`8)T@`%$'K`!0G2``<
  3826. +M0JL`&!=\``(`("`+3-]HP$YU+P@O`$ZY```"M%!/3G4``````^P````!````
  3827. +M````/!(````!`````0````H````````#\@```^H```)T<&%T:```:&5L<```
  3828. +M=F5R<VEO;@``````````````"4P````!````!@````````E0`````0````P`
  3829. +M```````)5`````$`````````````````````<``E<PH`)7,``%5S86=E.B`E
  3830. +M<R!;+7!=(%LM+7!A=&A=(%LM+6AE;'!=(%LM+79E<G-I;VY=(&1I<BXN+@H`
  3831. +M`$=.52!F:6QE=71I;',@,RXV`````)0``$]K```````4````````````````
  3832. +M````K&-O;G-O;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R>0```'1I;65R
  3833. +M+F1E=FEC90````#_____9FEF;RYL:6)R87)Y```````````````````!#``!
  3834. +M```````````!#@```````````````$`H(REA;&QO8V$N8PDQ+C$`````````
  3835. +M``````!&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=```
  3836. +M`````$YO(&UE;6]R>0```&$`1F%I;&5D('1O(&-R96%T92!T:6UE<@``3DE,
  3837. +M.@``3DE,.@``3DE,.@``*@!.24PZ``!);G9A;&ED('=I;&1C87)D("5S`$5R
  3838. +M<F]R(&5X<&%N9&EN9R!A<F=U;65N=',`55-%4@``=7-E<@``55-%4DY!344`
  3839. +M`$A/344``',Z``!32$5,3`!B:6XZ<V@``$A/4U1.04U%``!A;6EG80";,"!Q
  3840. +M``!&86EL960@=&\@:6YI=&EA;&ES92!)+T\``&%M:6=A('-P96-I9FEC(&5R
  3841. +M<F]R``````)$56YK;F]W;B!E<G)O<@!N;W0@;W=N97(`;F\@<W5C:"!F:6QE
  3842. +M(&]R(&1I<F5C=&]R>0!N;R!S=6-H('!R;V-E<W,`:6YT97)R=7!T960@<WES
  3843. +M=&5M(&-A;&P`:2]O(&5R<F]R`&YO('-U8V@@9&5V:6-E(&]R(&%D9')E<W,`
  3844. +M87)G=6UE;G0@;&ES="!T;V\@;&]N9P``97AE8R!F;W)M870@97)R;W(`8F%D
  3845. +M(&9I;&4@;G5M8F5R`&YO(&-H:6QD('!R;V-E<W,``&YO(&UO<F4@<')O8V5S
  3846. +M<V5S`&YO="!E;F]U9V@@;65M;W)Y`'!E<FUI<W-I;VX@9&5N:65D`&)A9"!A
  3847. +M9&1R97-S`&)L;V-K(&1E=FEC92!R97%U:7)E9`!M;W5N="!D979I8V5S(&)U
  3848. +M<WD``&9I;&4@97AI<W1S`&-R;W-S+61E=FEC92!L:6YK`&YO('-U8V@@9&5V
  3849. +M:6-E``!N;W0@82!D:7)E8W1O<GD`:7,@82!D:7)E8W1O<GD``&EN=F%L:60@
  3850. +M87)G=6UE;G0``&9I;&4@=&%B;&4@;W9E<F9L;W<`=&]O(&UA;GD@;W!E;B!F
  3851. +M:6QE<P!N;W0@82!T>7!E=W)I=&5R``!T97AT(&9I;&4@8G5S>0``9FEL92!T
  3852. +M;V\@8FEG``!N;R!S<&%C92!L969T(&]N(&1E=FEC90!I;&QE9V%L('-E96L`
  3853. +M`')E860M;VYL>2!F:6QE('-Y<W1E;0!T;V\@;6%N>2!L:6YK<P``8G)O:V5N
  3854. +M('!I<&4`;6%T:"!A<F=U;65N=`!R97-U;'0@=&]O(&QA<F=E``!)+T\@<W1R
  3855. +M96%M(&5M<'1Y``!F:6QE(&YA;64@=&]O(&QO;F<``&1I<F5C=&]R>2!N;W0@
  3856. +M96UP='D`=&]O(&UA;GD@<V]F="!L:6YK<R`H;&]O<#\I`````EX```)L```"
  3857. +M=@```I````*@```"N````L(```+<```"]````P8```,6```#*````SH```-,
  3858. +M```#7@```VH```.````#E````Z````.R```#P@```](```/B```#]```!`@`
  3859. +M``0<```$+@``!#X```1,```$9```!'(```2(```$F```!*0```2R```$Q```
  3860. +M!-8```3J```$_@```"8``&1O;W(N)6QX+B5L>```3F\@;65M;W)Y````````
  3861. +M`````````0```#]03U-)6$Q97T-/4E)%0U0`+2T``"5S.B!O<'1I;VX@8"5S
  3862. +M)R!I<R!A;6)I9W5O=7,*`"5S.B!O<'1I;VX@8"TM)7,G(&1O97-N)W0@86QL
  3863. +M;W<@86X@87)G=6UE;G0*```E<SH@;W!T:6]N(&`E8R5S)R!D;V5S;B=T(&%L
  3864. +M;&]W(&%N(&%R9W5M96YT"@``)7,Z(&]P=&EO;B!@)7,G(')E<75I<F5S(&%N
  3865. +M(&%R9W5M96YT"@`E<SH@=6YR96-O9VYI>F5D(&]P=&EO;B!@+2TE<R<*`"5S
  3866. +M.B!U;G)E8V]G;FEZ960@;W!T:6]N(&`E8R5S)PH````E<SH@:6QL96=A;"!O
  3867. +M<'1I;VX@+2T@)6,*`"5S.B!O<'1I;VX@<F5Q=6ER97,@86X@87)G=6UE;G0@
  3868. +M+2T@)6,*``!5;FMN;W=N('-Y<W1E;2!E<G)O<@``)7,Z(```.B`E<P``````
  3869. +M`$```"`@("`@("`@("@H*"@H("`@("`@("`@("`@("`@("`@2!`0$!`0$!`0
  3870. +M$!`0$!`0$(2$A(2$A(2$A(00$!`0$!`0@8&!@8&!`0$!`0$!`0$!`0$!`0$!
  3871. +M`0$!`0$0$!`0$!""@H*"@H("`@("`@("`@("`@("`@("`@("`A`0$!`@````
  3872. +M````````````````````````````````````````````````````````````
  3873. +M````````````````````````````````````````````````````````````
  3874. +M``````````````````````````````````````````````````````^@```(
  3875. +M;@``````````````````````````````````````````")``````````````
  3876. +M````````````````````````````````````````````````````````````
  3877. +M``````````````````(`__\````.``X```````````````#__P````0`!```
  3878. +M`````"NB```(N/__````!``$````````*[@``````````````#4````T````
  3879. +M)````!0````\````+````!P```"F````P````2````$4```%L@``!:X```6J
  3880. +M```%I@``!:(```6>```%F@``!98```62```%C@``!8H```6&```%@@``!7X`
  3881. +M``5Z```%=@``!7(```5N```%:@``!68```5B```%7@``!5H```56```%4@``
  3882. +M!4X```5*```%1@``!4(```4^```%.@``!38```4R```%+@``!2H```4F```%
  3883. +M(@``!1X```4:```"6@``"&X```A,```(W````^P````"````````".P```C8
  3884. +(`````````_(:
  3885. +`
  3886. +end
  3887. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/sort.uue amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/sort.uue
  3888. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/c/sort.uue    Wed Dec 31 17:00:00 1969
  3889. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/c/sort.uue    Sat Sep 28 00:00:00 1996
  3890. @@ -0,0 +1,650 @@
  3891. +begin 666 sort
  3892. +M```#\P`````````"``````````$``!F=```"L@```^D``!F=2.=^_B1()`!)
  3893. +M^0`````L>``$+P)(YP#@)FX!%"(K`*QG#.6)($$B*``TY8E@!B(/DJL`.G0`
  3894. +M(#P``!T<LJP)(&0((BP)(-"!=`$F02(\``$``4ZN_SI*@&8(3-\'!&```D`@
  3895. +M0"1`(D`@/````G:9_``````@W%.`9OH@'&<.($G1W-70((HD25.`8/`H2=G\
  3896. +M`````"E\```='`HD3-\'`"E."@!*`DS?``1([(``"@AG2"`,!(``````!H``
  3897. +M`!T<T*P)("(`!(````"`#&X`)``4;1@I0`H@*4$*')*L"2!![`H8((%.KOTD
  3898. +M8`(N0"`L"2`O0``$T:P*)"(/DHL&@0```(`I00G<0JP*!'``(CP``#``3J[^
  3899. +MSB9N`11#^@&(<`!.KOW8*4`=%&8&<&1@``#F*6L`F`G\2JL`K&<``'X@:P"L
  3900. +MT<C1R")H`!#3R=/)(`)R`!(9*4D*#-"!7H`"0/_\*4`*%$CG0$`B/``!``%.
  3901. +MKO\Z3-\"`DJ`9@AP%"\`9P`!!"!`*4`*$"`"4X#4@1&R```@`E."4<C_]A&\
  3902. +M`"`@`E."$;P`(B`"$;$@`"`!4<K_^!"\`"(O"&!*0>L`7$ZN_H!!ZP!<3J[^
  3903. +MC"E`"@0O`"1`("H`)&<8+&P=%"!`(B@``$ZN_Z`I0`G\(@!.KO^"(&P*!"\(
  3904. +M2&P)V"!H`"0I:``$"@Q.NDPD3KHVGG``8`0@+P`$)&P*""4`+'@`!`QN`"0`
  3905. +M%&T22JP*&&<,0>P*&%FL"B!.KOTD+DH@+`GT9P0@0$Z03KI+_$ZZ32Q*K`H$
  3906. +M9R`L;!T4(BP)_&<$3J[_IBQX``1.KO]\(FP*!$ZN_H9@$BQX``0@+`H49P@B
  3907. +M;`H03J[_+B)L'11.KOYB("P*)"),D_P`````3J[_+B`?3-]_?DYU9&]S+FQI
  3908. +M8G)A<GD````@#UE`L*P)W&4`408O#2IL&WI@#"\53KHO2%A/*FT`!"`-9O`J
  3909. +M7TYU(`^0?``,L*P)W&4`4-PO#2`O``@O`$ZZ4TA83RI`2H!F'$AL`)QP`"\`
  3910. +M+P!.NBA"8:9(>``"3KI5?$_O`!`@#2I?3G4@#Y!\``RPK`G<90!0F$CG`10N
  3911. +M+P`4)F\`$"`+9@HO1P`03-\H@&"42H=F#"\+3KI1@%A/<`!@,"\'+PM.NE#J
  3912. +M4$\F0$J`9AY(;`"V<``O`"\`3KHGV&$`_SQ(>``"3KI5$$_O`!`@"TS?*(!.
  3913. +M=2`/D'P`$+"L"=QE`%`J2.<`%"IO``P@34/L`-`0&+`99@9*`&;V9Q`O+P`0
  3914. +M+PU.NERF4$\@0&`$0>P))"9((`AF("\-2&P`TB\L',Q"ITZZ)VYA`/[22'@`
  3915. +M`DZZ5*9/[P`40>P))+'+9@9P`2E`&T(@"TS?*`!.=2`/D'P`#+"L"=QE`$^R
  3916. +M+PTJ;P`(+PU.NEG.6$]![`DDL<UG-$'L"4:QS6<L+PU.NEJ*6$]*@&<F2&P`
  3917. +MUB\L',Q"ITZZ)P)A`/YF2'@``DZZ5#I/[P`08`9PS\&M`!@J7TYU(`^0?``0
  3918. +ML*P)W&4`3U`O!BPO`!`@+P`,(&\`%")O``@O""\&+P`O"4ZZ5JI/[P`0L(9G
  3919. +M'DAL`.HO+!S,0J=.NB:D80#^"$AX``).NE/<3^\`$"P?3G4@#Y!\`!2PK`G<
  3920. +M90!.^DCG`10@;!LP(`A*&&;\4XB1P"X((`AR$-"!+P!A`/WR*D!(>``(80#]
  3921. +MZ%!/)D!*AV<J<"\@;!LPL#!X_V<>3KHG8%*L"B@O+`HH+P`O+!LP2&P`]B\-
  3922. +M3KI3U&`<3KHG0E*L"B@O+`HH+P`O+!LP2&P!""\-3KI3MD_O`!0FC2=L&WH`
  3923. +M!"E+&WH@#4S?*(!.=2`/44"PK`G<90!.7DCG`#0F;P`02^P;=F`6(&T`!")+
  3924. +M)%`0&;`:9@9*`&;V9P@J2$JM``1FY"9M``0@"V<:+Q-.NBQV+I-.ND\L*VL`
  3925. +M!``$+HM.ND\@6$],WRP`3G6_[`G<90!.!$CG(P1^`'P`<""^@&<&<@F^@68*
  3926. +M<@%![`XP(8%H`')_OH%B%D'L"!T(,``">`!G"G0!0^P*,".":`"^@6(,=%=!
  3927. +M[`@=Q#!X`&8*=`%![!(P(8)H`+Z!8@QT!T'L"!W$,'@`9A2^@&<0=`F^@F<*
  3928. +M=`%![!8P(8)H`+Z!8B9+[`@=V\<(%0`!9QH(%0`!9P@@!W(@D(%@`B`'0>P:
  3929. +M,!&`>`!@"B`'0>P:,!&`"`!2AUB&#(<```$`;0#_4$S?(,1.=2`/64"PK`G<
  3930. +M90!-."\-("\`#"IO``@K0``(+P!A`/P\*H!"K0`,0JT`!%A/*E].=2`/D'P`
  3931. +M$+"L"=QE`$T&2.<!%"9O`!0J;P`0(%4B2-/M``0@+0`,D\`O`"\)+PA.NDTZ
  3932. +M3^\`#"MM``P`!&!J("T`""(M``2R@&82T(`K0``(+P`O%6$`_!A03RJ`("T`
  3933. +M!"!5T<`B+0`(DH`O"R\!2'@``2\(3KI54$_O`!`N``@K``4`&V<>2&P!&B\L
  3934. +M',Q"ITZZ)`AA`/ML2'@``DZZ44!/[P`0WZT`!`@K``0`&V8<("T`!&>(+P!(
  3935. +M>``*+Q5.NDQB3^\`#$J`9P#_=`@K``0`&V=`2JT`!&<Z("T`!")5T\!R"K(I
  3936. +M__]G*B(M``BP@682TH$K00`(+P$O%6$`^W!03RJ`("T`!%*M``0@51&\``H(
  3937. +M`"`M``1,WRB`3G4@#UE`L*P)W&4`2^I(YP($+"\`%"(O`!`J;P`,*T$`".F!
  3938. +M+P%A`/KF*H!"K0`$*T8`#%A/3-\@0$YUO^P)W&4`2[1(YP,T*F\`'"!O`!@F
  3939. +M4"1+(F\`&-7I``0N%2PM``1*+!L\9UY@%%*+M\ID"!`3L"P;/&;RM\ID`E*+
  3940. +MM\ID4"`'4X=*@&;B8$92B[?*9!H0$W(`$@!(P2`!Y8!![`XP2K`(`&;D8`)2
  3941. +MB[?*9!80$W(`$@!(P2`!Y8!![`XP2K`(`&?DM\ID""`'4X=*@&:\2JT`"&<B
  3942. +M8`)2B[?*9!H0$W(`$@!(P2`!Y8!![`XP2K`(`&;D8`)2B[?*9`@@!E.&2H!F
  3943. +M\B`+3-\LP$YUO^P)W&4`2N)(YP,T*F\`'"!O`!@F4"1+(F\`&-7I``0N+0`,
  3944. +M+"T`$$HL&SQG:&`>4HNWRF0($!.P+!L\9O*WRF0,2H=F!DJM`!1G`E*+M\ID
  3945. +M4"`'4X=*@&;88$92B[?*9!H0$W(`$@!(P2`!Y8!![`XP2K`(`&;D8`)2B[?*
  3946. +M9!80$W(`$@!(P2`!Y8!![`XP2K`(`&?DM\ID""`'4X=*@&:\2JT`%&<B8`)2
  3947. +MB[?*9!H0$W(`$@!(P2`!Y8!![`XP2K`(`&;D8`)2B[?*9`@@!E.&2H!F\B`+
  3948. +M3-\LP$YU(`^0?``8L*P)W&4`2?Z>_``,2.<@-"IO`"0@;P`@)E`@2R)O`"#1
  3949. +MZ0`$(FP;<D*M``0O2``8+TD`$&```.1"$B`M``@B+0`$LH!F%-"`*T``".F`
  3950. +M+P`O%6$`^0Q03RJ`(BT`!.F!(E73P2*+(`J0BR-```0D;P`0(`IG``"(("H`
  3951. +M#&L<("T`!.F`)%75P"\O`!`O"F$`_HQ03R5```Q@$"0M``3I@B)5T\(C;P`4
  3952. +M``PD;P`0(!)K'"(M``3I@215U<$O+P`0+PIA`/V&4$\E0``(8$)*J@`(9QI@
  3953. +M`E*+$!-R`!(`2,$@`>6`0>P.,$JP"`!FZ"(M``3I@2)5T\$C2P`(8!(B+0`$
  3954. +MZ8$@5='!0J@`"$*H``Q2K0`$)F\`%%*+)&\`&+?*9"H@"B(+D($O`$AX``HO
  3955. +M`4ZZ2.)/[P`,)$`O0``49PPB+0`$LJT`#&T`_NX@+P`8D(L@;P`@(4``#$S?
  3956. +M+`3>_``,3G6_[`G<90!(FDCG`S0F;P`<*F\`&!`5?@`>`!`3?``<`'`NOH!F
  3957. +M``">O(!F``"84HT0%7X`'@!2BQ`3?``<`+R'9@X@!^6`0>P*,$JP"`!FWB`'
  3958. +MY8!![`HP)$C5P"`29Q(B!N6!2K`8`&<((`>0AF```)Y*DF<@8`A2C1`5?@`>
  3959. +M`'`POH!G\N6'0>P*,$JP>`!G>G`!8'@@!N6`0>P*,$JP"`!G:&`(4HL0$WP`
  3960. +M'`!P,+R`9_+EAD'L"C!*L&@`9TQP_V!*<"Z^@&8>4HT0%7X`'@!P,+Z`9_+E
  3961. +MAT'L"C!*L'@`9RAP`6`F<"Z\@&8>4HL0$WX`'@!P,+Z`9_+EAT'L"C!*L'@`
  3962. +M9P1P_V`"<`!,WRS`3G4@#U%`L*P)W&4`1X)(YR\4)F\`)"IO`"`0%7X`'@`0
  3963. +M$WP`'`!@"%*-$!5^`!X`(`?E@$'L#C!*L`@`9NI@"%*+$!-\`!P`(`;E@$'L
  3964. +M#C!*L`@`9NIP+;Z`9@`!)E*-$A5^`!X!O(!G(.6'0>P*,$JP>`!G#N6&2K!H
  3965. +M`&<&</]@``(><`!@``(84HL0$WP`'`!@"%*-$!5^`!X`<#"^@&?R8`A2BQ`3
  3966. +M?``<`'`PO(!G\F`04HT0%7X`'@!2BQ`3?``<`+R'9@X@!^6`0>P*,$JP"`!F
  3967. +MWG`NOH!F#B(&Y8%![`HP2K`8`&<2O(!F'B`'Y8!![`HP2K`(`&80+PLO#6$`
  3968. +M_>Q$@%!/8``!EB`'Y8!![`HP2K`(`&<@>@%@`E*%4HT0%7(`$@!(P2`!Y8!!
  3969. +M[`HP2K`(`&;F8`)Z`"`&Y8!![`HP2K`(`&<@>`%@`E*$4HL0$W(`$@!(P2`!
  3970. +MY8!![`HP2K`(`&;F8`)X`"`$D(5F``$N(`5G``$H(`:0AV```2!P+;R`9CIR
  3971. +M`!('2,$D`>6"0>P*,$JP*`!G&!(K``%T`!0!2,+E@DJP*`!G!G`!8```[G``
  3972. +M8```Z%*-$!5^`!X`<#"^@&?R8`A2BQ`3?``<`'`PO(!G\F`04HT0%7X`'@!2
  3973. +MBQ`3?``<`+R'9@X@!^6`0>P*,$JP"`!FWG`NOH!F#B(&Y8%![`HP2K`8`&<2
  3974. +MO(!F'B`'Y8!![`HP2K`(`&80+TT`("]+`"1,WRCT8`#\OB`'Y8!![`HP2K`(
  3975. +M`&<@>@%@`E*%4HT0%7(`$@!(P2`!Y8!![`HP2K`(`&;F8`)Z`"`&Y8!![`HP
  3976. +M2K`(`&<@>`%@`E*$4HL0$W(`$@!(P2`!Y8!![`HP2K`(`&;F8`)X`"`%D(1F
  3977. +M""`%9P0@!Y"&3-\H]$YU(`^0?``,L*P)W&4`1-Q93TCG#A0H+P`@)F\`''P`
  3978. +M>@Q@!%*+4X1*A&\6$!-R`!(`2,$@`>6`0>P.,$JP"`!FXG`#N(!M``"$2],0
  3979. +M'7(`$@!![!HP1^\`%!;P$``0'7(`$@`6\!``$!UR`!(`%O`0`$(;*`;8A6H"
  3980. +M4H3BA"`$YX!![P`40^P`,")Q"``2&+(99@1*`6;V;`0J!&`"+`0@!9"&<@&P
  3981. +M@6[*(`;G@$?L`##7P$'O`!0B4Q`8L!EF#$H`9O9F!B`K``1@`G``3-\H<%A/
  3982. +M3G4@#Y!\`""PK`G<90!$")[\`!1(YS\V?@!\`"]L&W(`,&```Y@F;0`8(&T`
  3983. +M'"1O`$`O2``J2H9F$DJJ``AG#")O`$1*J0`(9@``MB`M``QK("\-+PIA`/C6
  3984. +M+HTO+P!,+T``1&$`^,A/[P`,+T``-&`8(E+3Z@`$(&\`1"Q0W>@`!"])`#@O
  3985. +M3@`T(!5K'B\-+PIA`/?(*D`NKP`X+R\`3&$`][I/[P`,)$!@<"I2(&\`1"10
  3986. +M(&\`,$JH``AG7F`"4HV[[P`X9!H0%7(`$@!(P2`!Y8!![`XP2K`(`&;B8`)2
  3987. +MBK7O`#1D-!`2<@`2`$C!(`'E@$'L#C!*L`@`9N)@'"IJ``@@:@`,+&\`1"1N
  3988. +M``@B;@`,+T@`."])`#0J+P`X(@V:@2`O`#0D`"8*E(,H`DJ%:@)Z`$J$:@)X
  3989. +M`"!O`#!*J``@9UHF0"!O`#@0$&8$2A-G(A030A-"$"\#+P$?0``Q80#[)E!/
  3990. +M+@`@;P`X$*\`*1:"8`PO`R\!80#[#E!/+@!*AV<``BH@;P`P2J@`*&<((`=$
  3991. +M@&```C`@!V```BH@;P`P2J@`)&<T+P4O#6$`_7XN`"Z$+P-A`/UT3^\`#)Z`
  3992. +M9P`!["!O`#!*J``H9P@@!T2`8``!\B`'8``!["`+9P``I$JO`"IG``"<8```
  3993. +MA%*-N^\`.&06$!5R`!(`2,$@`>6`2K,(`&;F8`)2BK7O`#1D$A`2<@`2`$C!
  3994. +M(`'E@$JS"`!FYKOO`#AD1K7O`#1D0!`:<@`2`!`==``4`"!O`"H0,"``L#`0
  3995. +M`&<F$"K__W(`$@`0,!``2(!(P!(M__]T`!0!$C`@`$B!2,&2@&```0J[[P`X
  3996. +M9``!!+7O`#1E`/]R8```^"`+9WA@9E*-N^\`.&06$!5R`!(`2,$@`>6`2K,(
  3997. +M`&;F8`)2BK7O`#1D$A`2<@`2`$C!(`'E@$JS"`!FYKOO`#AD*K7O`#1D)!(=
  3998. +MLAI6P$0`2(!*`&<6$"K__TB`2,`2+?__2(%(P9*`8```BKOO`#AD``"$M>\`
  3999. +M-&6.8'I*KP`J9U`F;P`T8#X0&G(`$@`0'70`%``@;P`J$#`@`+`P$`!G)!`J
  4000. +M__]R`!(`$#`0`$B`2,`2+?__=``4`1(P(`!(@4C!DH!@+KOO`#AD*K7+9;A@
  4001. +M)+J$;`0@!6`"(`0@32)*<@!*@&<.$AB2&68$4X!F]DB!2,$N`4J'9Q8@;P`P
  4002. +M("@`*&<&(@=$@6`"(@<@`6`R+@6>A&<4(&\`,$JH`"AG!B`'1(!@'"`'8!@@
  4003. +M;P`P+V@`+``P4H8J;P`P(`UF`/QB<`!,WVS\WOP`%$YU(`^0?``,L*P)W&4`
  4004. +M0#A(YR\4)F\`)"IO`"!*K!MR9QXO"R\-80#\"E!/2H!F:$JL&SYF!DJL&SAG
  4005. +M!'``8%@N+0`$+"L`!+Z&;`0@!V`"(`8J`&<P(%4B4Q`1<@`2`!`0=``4`)2!
  4006. +M*`)F'B`%<@!*@&<.$AB2&68$4X!F]DB!2,$H`68$*`>8ADJL&S1G!B`$1(!@
  4007. +M`B`$3-\H]$YU(`^0?`!`L*P)W&4`/YR>_``T2.</!"IO`$QP`2]``!0O+`"4
  4008. +M2&\`/&$`\CP@+`"4(BP`F$ZZ/GY2@$AX`@`O`$AO`#AA`/-N+BP`F"Z'80#N
  4009. +M<"]``"PNC4AO`$QA`/(X+`!(;P!`2&\`5&$`]3)/[P`@2H9G``#R?`!Z`&`P
  4010. +M(&\`*-'%2&@`$"\(80#^V%!/*`!*K!L^9P1*A&H$2H1O"$*O`!1@``#"4H9P
  4011. +M$-J`("\`+%.`O(!MQB(O`"SI@2!O`"C1P9#\`!`@*``$L(=O'"P`4H9@`MZ'
  4012. +MO(=N^B\'+R\`'&$`[B!03R]``!@B+P`LZ8$@;P`HT<$@*/_T4H`O`"\H__`O
  4013. +M+P`@3KH^]B(O`#CI@2!O`#31P2]H__0`*"Z-2&\`1&$`\7!/[P`0+`!G,DAO
  4014. +M`"A(;P`\80#T9"ZO`#!(;P`@80#^'D_O``PJ`$JL&SYG!$J%:@1*A6\&0J\`
  4015. +M%&`&2H9F`/\2+PUA`.Y^+J\`/$ZZ/T`NKP`L3KH_."ZO`!Q.NC\P6$\@+P`4
  4016. +M3-\@\-[\`#1.=2`/D'P"M+"L"=QE`#X&GOP"I$CG+S8N+P+0*F\"U$*O`+1*
  4017. +MK!L^9Q0@+`"8+P`O0`"T80#L]EA/+T``N'H`?`!X`&```*!'[P'(U\8O+`"4
  4018. +M+PMA`/!\4$]@)"\280#M]EA/4X<L!2`&Y8`D;P+,U<!@""2J``12AEB*O(=M
  4019. +M]+J';!0D;P+,U<0O$B\+80#P<E!/2H!GQ"PO`"RZAV8*+Q-.NCY\6$]@-$7O
  4020. +M`,C5QB`L`)0B+`"83KH\9E*`2'@"`"\`+PIA`/%8+HHO"V$`\SI/[P`00>\`
  4021. +M<$*P2`!2A7`0W(!8A"]&`"RZAVT`_UI\`$7O`#!@!"3&4H:\AVWX?`%@7B`&
  4022. +MY8!%[P`PU<`@*O_\(@#E@4/O`'#I@$WO`,@@3B(Q&`#I@2)P"`#3P2`2(@#E
  4023. +M@4'O`'#I@"(P&`#I@2!V"`#1P2\(+PEA`/R$4$]*@&\,("K__"52__PD@'P`
  4024. +M4H:\AVV>)&\"S&```[Q*K!L^9P`!?DJ&9P``GB`O`#`B`.6!0>\`<.F`0^\`
  4025. +MR"(P&`#I@2!Q"`#1P2\(2&\`O&$`_"Y03TJ`9VXO#2\O`,!(>``!+R\`Q&$`
  4026. +M[/Y/[P`0""T``0`;9SY2K0`,("T`#+"M`!1N'B!M``12K0`$$+P`"@@M``8`
  4027. +M&V<H+PU.ND9.6$]@'E.M``PO#4AX``I.ND(84$]@#"\-2'@`"DZZ0@I03WP`
  4028. +M0J\`M$J&9@`!6B`O`#`B`.6!0>\`<"0P&`#I@NF`0>\`R")P"`#3PBPI``12
  4029. +MABHO`+"ZAFP<8`+:A;J&;?HO10"P+P4O+P"\80#K$E!/+T``N"`O`#`B`.6!
  4030. +M0>\`<.F`0^\`R"(P&`#I@2!Q"`#1P2`H``0O0`"\4H`O`"\0+R\`P$ZZ.]1/
  4031. +M[P`,("\`,"(`Y8%-[P!P(C88`.F!Z8!-[P#(W<`O3@`H(F\`*"91U\$B*P`(
  4032. +M9PR2DRQO`+C=P2].`,`B*P`,9PR2DR)O`+C3P2])`,1R`2]!`+1@``"&("\`
  4033. +M,"(`Y8%![P!PZ8!#[P#((C`8`.F!('$(`-'!+PTO*``$2'@``2\080#KFD_O
  4034. +M`!`(+0`!`!MG/E*M``P@+0`,L*T`%&X>(&T`!%*M``00O``*""T`!@`;9R@O
  4035. +M#4ZZ1.I83V`>4ZT`#"\-2'@`"DZZ0+103V`,+PU(>``*3KI`IE!/(B\`,.6!
  4036. +M0>\`<-'!4I`D+P`PZ8)#[P#(T\(@$+"I``1F``$$0>\!R-'"+S(8`"\(80#M
  4037. +M6E!/2H!G+B(O`##I@4'O`<C1P4/O`,C3P2\)+PAA`/!"4$\B+P`PY8%![P!P
  4038. +M0K`8`&```,!\`4?O`#1@#B`3L*\`,&\"4Y-2AEB+O(=M[E.'(B\`,.6!+S(8
  4039. +M`&$`ZE`B+P`TZ8%![P',+K`8`$ZZ.P@B+P`TZ8%![P#,+K`8`$ZZ.O983RPO
  4040. +M`#`J!N6%*`;IA&`\);)8!%@`0>\!R-'$0^@`$"#9(-D@V2#90>\`R-'$0^@`
  4041. +M$"#9(-D@V2#90>\`<-'%(*@`!%*&6(5P$-B`O(=MP'P`1^\`-&`0(`;E@"!/
  4042. +MT/P`,"&;"`!2AKR';>Q@``".>@%'[P`T8%0@+P`P(@#E@4/O`'#I@$WO`,@@
  4043. +M3B(Q&`#I@2)P"`#3P2`3(@#E@4'O`'#I@"(P&`#I@2!V"`#1P2\(+PEA`/CN
  4044. +M4$\L`&8&+"\`,)R32H9K"%*%6(NZAVVH*"\`,'P!1^\`,&`0(`;E@"!/T/P`
  4045. +M,";P"`!2AKR%;>SEA2!/T/P`+"&$6``L+P"T2H=F`/P^2JP;/F=V2H9G<B\-
  4046. +M+R\`P$AX``$O+P#$80#I;$_O`!`(+0`!`!MG/E*M``P@+0`,L*T`%&X>(&T`
  4047. +M!%*M``00O``*""T`!@`;9R@O#4ZZ0KQ83V`>4ZT`#"\-2'@`"DZZ/H903V`,
  4048. +M+PU(>``*3KH^>%!/+R\`N$ZZ.7983TS?;/3>_`*D3G4@#Y!\`!"PK`G<90`X
  4049. +M4%E/2.<.-"PO`"0J;P`@)F\`*"`&58!F.$AM`!`O#6$`]^I03TJ`;P``^B!-
  4050. +M(DLBV"+8(M@BV$'M`!`B2"K9*MDJV2K9(-L@VR#;(-M@``#4*@9J`E*%XH4D
  4051. +M32@&F(4@!>F`V\`O30`8<`&Z@&\.+PLO!2\*80#_?$_O``QP`;B`;PXO"R\$
  4052. +M+PUA`/]H3^\`#"I+8$(O+P`8+PIA`/=N4$]'[0`02H!N%B!-*DLB2B#9(-D@
  4053. +MV2#9U/P`$%.%8!@@32I+(F\`&"#9(-D@V2#9<!#1KP`84X1*A6<:2H1FMF`4
  4054. +M($HB32+8(M@BV"+8U/P`$-K\`!`@!5.%2H!FY"IO`""<A"9O`"A@%B!+(DTB
  4055. +MV"+8(M@BV-K\`!#6_``04X9*AF;F3-\L<%A/3G4@#Y!\``RPK`G<90`W&$CG
  4056. +M!Q`N+P`8)F\`%'P`>@!@+DAL`28O$V$`YL8N@&$`]TY03TJ`9A0O$R\L"BQ(
  4057. +M;`$H3KHQLD_O``Q2AE*%6(NZAVW.(`9,WPC@3G4@#Y!\`%2PK`G<90`VOI[\
  4058. +M`$A(YP\T*F\`:&```1I^`"`&<A!.NC6P>@`O30`@+T``'&!X1^\`)"(%TH;E
  4059. +M@4AL`3PO-1@`80#F3%!/)L!2AG`0O(!MXF$`YVPD0$AL`3XO`&$`YC`F0"Z`
  4060. +M2'@`$$AO`#!A`/A$+HMA`.:23^\`$'P`(@72AN6!+S48`&$`Y]183U*&<!"\
  4061. +M@&WH4H<@;P`@(,I2A'`0VH`O2``@?`"XKP`<;8`@+P!L<A!.NC4:*@%'[P`D
  4062. +M8!HB!.F!TH;E@4AL`4`O-1@`80#EO%!/)L!2AKR%;>)A`.;>)D!(;`%"+P!A
  4063. +M`.6B)$`N@"\%2&\`,&$`][@NBF$`Y@9/[P`0?`!@%"($Z8'2AN6!+S48`&$`
  4064. +MYT183U*&O(5MZ"`'Y8`KBP@`4H<O1P!L>``L+P!L<!"\@&X`_MQZ`&`<2&P!
  4065. +M1"\U6`!A`.5"4$\@3]#\`"0A@%@`4H18A;B&;>`O+P!P+P1(;P`L80#W1$_O
  4066. +M``QZ`"9-8`HO&V$`YMY83U*%NH9M\DS?+/#>_`!(3G4@#Y!\`#2PK`G<90`U
  4067. +M)I[\`"1(YR\T?@`O+`"02&\`.&$`Y\X@+`"0(BP`F$ZZ-!!2@$AX0``O`$AO
  4068. +M`#1A`.D`+"\`0"`&Z8`N@&$`X_Y/[P`4*D`H+P!,8``!9"!O`$A8KP!(2&P!
  4069. +M1B\080#DD%!/)D!@``$L2&\`)$AO`#AA`.JH4$\@+P`HL(9O&BH`8`+<AKJ&
  4070. +M;OH@!NF`+P`O#6$`X^Y03RI`+PTO+P`L+R\`+&$`_"1/[P`,""L`!``;9Q1*
  4071. +MA&802H=F#$JO`$!F!B1O`%!@%%*'80#E5$AL`4@O`&$`Y!I03R1`>`!Z`&``
  4072. +M`)I*K!L^9R!*A&<<(&\`)-'%+T@`($AH__`O+P`D80#SX%!/2H!G;"!O`"31
  4073. +MQ2\*+R@`!$AX``$O$&$`Y*Q/[P`0""H``0`;9SY2J@`,("H`#+"J`!1N'B!J
  4074. +M``12J@`$$+P`"@@J``8`&V<H+PI.NCW\6$]@'E.J``PO"DAX``I.NCG&4$]@
  4075. +M#"\*2'@`"DZZ.;A03U*$<!#:@+BO`"AM`/]B(&\`4+'*9P@O"F$`X]A83R\+
  4076. +M2&\`.&$`YGA03R@O`$Q*@&8`_L(O"V$`X[I83R`$4X`O0`!,2H1F`/Z2+R\`
  4077. +M-$ZZ-&PNKP`H3KHT9"Z-3KHT7EA/2H=G1"`'Y8`O`&$`XEI83R9`*`<D;!MZ
  4078. +M)`=3@N6"*D#;PF`*4X0JDB1J``19C4J$;O(O+P!0+P<O"V$`_$@NBTZZ-!A/
  4079. +M[P`,3-\L]-[\`"1.=;_L"=QE`#+V2.<`%"IO``Q'[!M&8`0F:P`L2JL`+&;V
  4080. +M)TT`+$*M`"Q,WR@`3G4@#Y!\`!"PK`G<90`RPB!O``0O"$AL`4I"ITAX``).
  4081. +MN@HV3^\`$$YU(`]10+"L"=QE`#*<+P<N+P`(,'P``2\(+P=.N@N880#A=DZZ
  4082. +M"RHNAR\`3KHJG$_O``PN'TYUO^P)W&4`,FI(YP$4+B\`&"9O`!0J;P`08```
  4083. +M@A`52(!(P')-D(%G7'(5D(%G%E6`9S15@&<Z5X!G0%N`9TY9@&=28%Y*AV<&
  4084. +M<`*^@&8&<`$G0``(<`&^@&<&(@=5@68Z)T``%&`T0>P6,"=(`!A@*D'L&C`G
  4085. +M2``<8"!![!(P)T@`&&`6<`$G0``D8`YP`2=``"!@!G`!)T``*%*-2A5F`/]\
  4086. +M(`U,WRB`3G4@#Y!\(&2PK`G<90`QNI[\(%1(YP\T+B\@=)?+0J\@/$*O(#A"
  4087. +MKR`T0>P!;"]((#`J;R!X*54*+$*L&T(O2"`L80#C>DAL`6Y.NB906$\I0!LP
  4088. +M9@A![`%V*4@;,$*G2'@``DZZ"G!03TJ`9PY(>OZR2'@``DZZ"EY03T*G2'@`
  4089. +M`4ZZ"E)03TJ`9PY(>OZ42'@``4ZZ"D!03T*G2'@`#4ZZ"C103TJ`9PY(>OYV
  4090. +M2'@`#4ZZ"B)03T*G2'@`#TZZ"A903TJ`9PY(>OY82'@`#TZZ"@103W#_+T`@
  4091. +M3"]`($!#[R!80IE"F4*O(&A"KR!D0IE"KR!40J\@2"`'Y8`O`&$`W]Y83W@!
  4092. +M1>T`!$'M``@O0``@+T`@*"](`"1@``56(%)P*[`09@``_B`+9P@O"V$`_9I8
  4093. +M3TAX`#!A`-^D6$\F0'+_($`A00`,0^@`&$*90IE"J``40J@`"$*H`"A"J``D
  4094. +M0ID@4DOH``$0%7(`$@!(P2`!Y8!#[`HP2K$(`&8(+PAA`/UV6$]Z`&`6$!U(
  4095. +M@$C`(@7E@=*%TH'2@"H!<#":@!`5<@`2`$C!(`'E@$'L"C!*L`@`9M1\`'`N
  4096. +ML!5F,%*-8!80'4B`2,`B!N6!TH;2@=*`+`%P,)R`$!5R`!(`2,$@`>6`0>P*
  4097. +M,$JP"`!FU$J&9@1*A6<()H4G1@`$8`1P_R:`0J<O"R\-80#]3$_O``P@0$H0
  4098. +M9P`$5"\280#\W%A/8``$2"I2$!5R+;`!9@`$+"!22B@``6<`!")2C1`5<@`2
  4099. +M`$C!Y8%![`HP2K`8`&<`!`(@"V8$80`&GGH`8!80'4B`2,`B!>6!TH72@=*`
  4100. +M*@%P,)J`$!5R`!(`2,$@`>6`0>P*,$JP"`!FU'P`<"ZP%68P4HU@%A`=2(!(
  4101. +MP"(&Y8'2AM*!TH`L`7`PG(`0%7(`$@!(P2`!Y8!![`HP2K`(`&;4)T4`#"=&
  4102. +M`!!(>``!+PLO#6$`_()/[P`,($!*$&<(+Q)A`/P46$\O"V$`^]Y83Y?+8``#
  4103. +M=DAX``)(;R!$+PUA`/Q43^\`#"I`($`2$$B!2,%*@6<``S9P5)*`9P`"R'`/
  4104. +MDH!G)E&!9RQ5@6<``AY5@6<``B)9@6<``F!3@6<``F13@6<``MQ@``+@<`$O
  4105. +M0"`\8``"^$HM``%G!%*-8"H@!U.`N(!F%$AL`7Q"ITAX``).N@7:3^\`#&`.
  4106. +M4H0@;P`D*EA8BB](`"0@2B](`!P@"V<(+PMA`/LR6$](>``P80#=/%A/)D!R
  4107. +M_R!`(4$`#$/H`!A"F4*90J@`%$*H``A"J``H0J@`)$*9$!5R`!(`2,$@`>6`
  4108. +M0>P*,$JP"`!F""\280#[%%A/>@!@%A`=2(!(P"(%Y8'2A=*!TH`J`7`PFH`0
  4109. +M%7(`$@!(P2`!Y8!![`HP2K`(`&;42H5G`E.%?`!P+K`59C92C6`6$!U(@$C`
  4110. +M(@;E@=*&TH'2@"P!<#"<@!`5<@`2`$C!(`'E@$'L"C!*L`@`9M1*AF<"4X9*
  4111. +MAF8$2H5G"":%)T8`!&`$</\F@$*G+PLO#6$`^MY/[P`,)$`@0$H09Q1P++`2
  4112. +M9PXD;P`<+Q)A`/ID8```I"!*2^@``21O`!Q*$&<``)9Z`&`6$!U(@$C`(@7E
  4113. +M@=*%TH'2@"H!<#":@!`5<@`2`$C!(`'E@$'L"C!*L`@`9M1\`'`NL!5F-E*-
  4114. +M8!80'4B`2,`B!N6!TH;2@=*`+`%P,)R`$!5R`!(`2,$@`>6`0>P*,$JP"`!F
  4115. +MU$J&9P)3A2=%``PG1@`02'@``2\++PUA`/HL3^\`#"!`2A!G""\280#YOEA/
  4116. +M+PMA`/F(6$^7RV```2!P`2]`(#A@``#X2BT``6<,0>T``2](("Q@``$$(`=3
  4117. +M@+B`9A9(;`&>0J=(>``"3KH#TD_O``Q@``#F4H0@;P`D+U@@+%B*+T@`)&``
  4118. +M`-)P`2E`&SA@``"J2BT``6<*4HT951L\8```FB`'4X"X@&P64H0B;P`D(%D9
  4119. +M4!L\6(HO20`D8```FDAL`<!"ITAX``).N@-P3^\`#&!F2BT``6<(4HTI31LP
  4120. +M8%@@!U.`N(!L$E*$(&\`)"E8&S!8BB](`"1@7$AL`>)"ITAX``).N@,T3^\`
  4121. +M#&`J<`$I0!L^8"(0%4B`2,`O`"!O('PO$$AL`@1(;`EH3KHQ)F$``K!/[P`0
  4122. +M2A5G`E*-2A5F`/R@8!!2AB!O`"`@S2]&(#0O2``@4H18BEBO`"0L+R`TN(=M
  4123. +M`/JD(`MG""\+80#X1EA/*FP;<F!42JT`&&9*2JT`'&9$2JT`"&8^2JT`*&8X
  4124. +M2JT`%&8R2JT`)&8L2JT`(&8F1^\@6$7M`!@DVR3;*V\@2``(*V\@5``4*V\@
  4125. +M9``D)-LK;R!H`"@J;0`L(`UFJ$JL&W)F+DJO(%AF'DJO(%QF&$JO($AF$DJO
  4126. +M(%1F#$JO(&1F!DJO(&!G"DAO($!A`/>T6$\I;R!H&S1*AF8*?`%![R`P+T@@
  4127. +M*"1O("A*KR`\9QHO!B\*80#S9$J`5L%$`4B!2,$N@4ZZ+T103RIO("P@34/L
  4128. +M`B00&+`99@A*`&;V9P``W'H`8!0@32)2$!BP&68&2@!F]F<(4H58BKJ&;>BZ
  4129. +MAF822&P")B\-80#9_E!/)D!@``"N2&P"*"\-80#9["1`80#;%B9`2&P"*B\`
  4130. +M80#9VD_O`!`J0&`4+PTO!$AX``%(;P`T80#:G$_O`!`O"DAX(`!(>``!2&\`
  4131. +M-$ZZ,I9/[P`0*`!NT@@J``4`&V<B+R\@+$AL`BPO+!S,0J=.N@%(80#8K$AX
  4132. +M``).NBZ`3^\`%"\-80#9["Z*80#9YN6%(&\@+"&+6``J;R`P2&P","\-80#9
  4133. +M5D_O``PF0&`$1^P)1B!O("A*KR`X9PPO"R\&+PAA`/*B8`HO"R\&+PAA`/0N
  4134. +M3^\`#&$`V$@O"TZZ,WI83TJ`:A8O#4AL`C(O+!S,2'@``4ZZ`,)/[P`02JP;
  4135. +M0F<B2&P))$ZZ-"183U*`9A1(;`(Z+RP<S$AX``%.N@":3^\`#`@L``4)868.
  4136. +M2&P)1DZZ,_I83U*`9A1(;`(\+RP<S$AX``%.N@!P3^\`#$*G3KHMJEA/3-\L
  4137. +M\-[\(%1.=2`/D'P`#+"L"=QE`"C$+RP*+$AL`DA(;`EH3KHN5DAX``).NBUX
  4138. +M3^\`$$YUO^P)W&4`*)XO!RXO``AO$KZL!_IN#.6'0>P'7B`P>`!@!D'L`N`@
  4139. +M""X?3G4@#Y!\`"BPK`G<90`H;$CG`Q0L+P`8+B\`%"9O`"`J;P`<+RP*+$AL
  4140. +M`O9(;`EH3KHMZBZO`$@O+P!$+R\`1"\O`$0O+P!$+R\`1"\O`$0O"R\-2&P)
  4141. +M:$ZZ+<)/[P`P2H9G&"\&80#_;BZ`2&P"_$AL"6A.NBVF3^\`#`@L``$)@V="
  4142. +M4JP)="`L"72PK`E\;B`@;`EL4JP);!"\``H(+``&"8-G+DAL"6A.NC'V6$]@
  4143. +M(E.L"71(;`EH2'@`"DZZ+;Y03V`.2&P):$AX``I.NBVN4$](;`EH3KHQR%A/
  4144. +M2H=G""\'3KHL8%A/3-\HP$YU``!(YR`R(&\`&$/O`!Q%^@`<)F\`%"0++'D`
  4145. +M```$3J[]]B`+D(),WTP$3G46P$YU``!.N@AP("P<U$YU```@+P`$(&\`"")O
  4146. +M``Q(YP$4+@`F22I(3KH(3G`!OH!M+'`@OH!L)B`+9PX@!^>`0^P;G-/`)MDF
  4147. +MV2`-9PSGAT'L&YS1QR#=(-UP`&`(<!8I0!S,</],WRB`3G4@+P`$(&\`")[\
  4148. +M`!`O2``(0J\`#$'O``A#UV&62H!G"#!\__\@"&`"(!?>_``03G4``"!O``0B
  4149. +M;P`(64](YS,V*DA^`"!L'*@L*`#@+TD`($J&9B!*K`H$9AI![`,<(@@L;!T4
  4150. +M)#P```/M3J[_XBP`9P)^`4J&9S8B!D'L`R8D"$'L"@PF""QL'11.KOZ>(@8D
  4151. +M#28O`"!.KOZ>(@9T"DZN_LA*AV=8(@9.KO_<8%`@;!RH)F@`N#!\__^WR&=`
  4152. +M0^P#+'`E+'@`!$ZN_=@D0$J`9RPI;`H,`Q`I30,4+PH@2RQ*0^P#")7*)F\`
  4153. +M)$ZN_;1,WP0`(DHL>``$3J[^8DS?;,Q83TYU(&\`!$/O``AA`/\J3G4@;P`$
  4154. +M0^\`"&$`_QQP%$ZZ*IY.=0``2.<`!G`(<@`L>``$3J[_.BI`2H!F!'``8"Y"
  4155. +MK0`$2'@`*'``+P!![`-`<@&3R<%!3KH?7E!/*H!F#")-<`A.KO\N<`!@`B`-
  4156. +M3-]@`$YU(&\`!$CG``8J2"`-9Q@@36$``!X@54ZZ'Z(B37`(+'@`!$ZN_RY,
  4157. +MWV``3G4@;P`$2.<`!BI(2JT`!&<4(E4L>``$3J[^(")53J[^)D*M``1,WV``
  4158. +M3G4@;P`$(%`B:``.<``0*0`/<@'AH2`!3G4@;P`$("\`""(O``Q(YP,&+`$N
  4159. +M`"I(8:I*AV8$2H9G'B)5(T<`("-&`"0S?``)`!PL>``$3J[^,G`!*T``!$S?
  4160. +M8,!.=2!O``1(YP`&*DA*K0`$9QPB52QX``1.KOXL2D!G#B)53J[^)D*M``1P
  4161. +M`6`"<`!,WV``3G4O#B`L'+0B`$A!0D'2@"`L'*BS@"E`&X1"K!N(0^P#5'``
  4162. +M+'@`!$ZN_=@I0!N`</].KOZV2(!(P"E``U!*K!N`9PA*@&L$<`%@`G``*4`;
  4163. +MC"Q?3G4O#B`L`U!K""QX``1.KOZP("P;@&<*(D`L>``$3J[^8BQ?3G4@+P`$
  4164. +M44](YP,`+@!.N@4H(`=.N@&02H!G*")`(&D`'')`Y8G"D2](``P@`2!I``0B
  4165. +M;P`,3I$L`"`'3KH!2"`&8`)P_TS?`,!03TYU("\`!"\'+A]@K@``(&\`!"`O
  4166. +M``@B;P`,+V\`$``$+V\`%``(+V\`&``,+V\`'``0+V\`(``4+V\`)``844](
  4167. +MYP<4+@!([P,``!1\`"IL&Y!@%DJM``1F"C!\``$K2``$8`Q2AMK\`"2\K!N4
  4168. +M;>0@+!N4O(!F>'(*TZP;E"`L&Y0B`.>!TH#E@2`!3KHEP"I`2H!F#'`,*4`<
  4169. +MS'#_8```CG#VT*P;E"(`YX'2@.6!(&P;D")-8`(2V%.!9/H@+!N09P8@0$ZZ
  4170. +M)!HI31N0>O;:K!N4(`7G@-"%Y8#;P)?+*TL`!%*%VOP`)+JL&Y1M\"`&YX#0
  4171. +MAN6`(&P;D"&O`!0(!"&'"``AKP`8"`A+[P`@(9T(#"&="!`AG0@42^\`+"&=
  4172. +M"!@AG0@<(9T(("`&3-\HX%!/3G4@+P`$(@!K%K*L&Y1L$"`!YX#0@>6`(&P;
  4173. +MD$*P"`1.=2`O``1(YP$$+@!K'KZL&Y1L&"`'YX#0A^6`*FP;D-O`2JT`!&<$
  4174. +M(`U@"'`)*4`<S'``3-\@@$YU("P;E$YU```@+P`$64\N@$'L`V@@"%A/3G4@
  4175. +M;P`$64\NB$'L`V@@"%A/3G4@+`-H3G4``"!O``193TCG(P(B""QL'11T_DZN
  4176. +M_ZPO0``09SHN+!S,3KK_JBP`8!Y(;P`02'@(!2\&3KH-"$_O``Q*@&8(*4<<
  4177. +MS'``8!)3AFS>(B\`$"QL'11.KO^F</],WT#$6$].=2!O``1(YR$&*DA.N@*^
  4178. +M(@TL;!T43J[_N$J`9P1P`&!03J[_?"X`<F_2@;"!9B`B#70`3J[_1DJ`9PXB
  4179. +M#4ZN_[A*@&<$(`)@*$ZN_WPN`'!ET("^@&8.($UA`/]*2H!F!'``8`P@!TZZ
  4180. +M%W0I0!S,</],WV"$3G4``"`O``193RZ`("P<I&<.($!.NOQB2H!G!'(!8`)R
  4181. +M`"`!6$].=2`O``0@;!RD<@!.^OP(3KK[/"E`'*1F"DAL`XA.NOL86$\@;!RD
  4182. +M3KK[S(&L&YA.=2!L'*1.^OMH".P`#!N:3G4@+P`$"```#%;`1`!(@$C`3G4(
  4183. +M[``-&YI.=2`O``0(```-5L!$`$B`2,!.=4ZZ&8YP`"!L'000*``/<@'AH8.L
  4184. +M&YA.=4[Z&>`@+P`$64](YP$6+T``$'X`8"X@+0`43KH9-B9`2H!G%$JK`!1F
  4185. +M#GX!<`$G0``4)VT`&``8(DUP'"QX``1.KO\N(&P=!"QX``1.KOZ,*D!*@&;`
  4186. +M(`=,WVB`6$].=2`O``1(YP\$+@!P`>^@+`!P";Z`9@9P`$ZZ"Q0@+!R<P(9G
  4187. +M!HVL'*!@>BH&1H7+K!R@2H=K9G`@OH!L8"`'YX!![!N<*G`(`#!\``&[R&8L
  4188. +M(`=5@&<44X!G$'(-D(%G/%F`9SA1@&<T8`I(;`.@3KKYU%A/<`!.N@JV8"`@
  4189. +M#6<<(`?G@"@&0>P;G(BP"`2)K!R<(`=.E4:$R:P<G"`L'*#`AF:*3-\@\$YU
  4190. +M("\`!"\.(BP;F(*`<``L>``$3J[^SBQ?3G4@+P`$+PXB`"`L&YB`@2QX``1.
  4191. +MKO["+%].=2`O``1(YP,`+@!\`&$`_A!*@&<(?`%P#F$`_PP@!V$`_F)*@&<(
  4192. +M?`%P`F$`_OH@!V$`_FI*@&<(?`%P`V$`_N@@!V$`_H9*@&<(?`%P%&$`_M8@
  4193. +M!DS?`,!.=2`O``0O!RE`">1P""X?8`#^O'``80#_8&"08/9(YP$4?@!+[!N<
  4194. +M-GP``2J+0JT`!%*'4(UP(+Z`;?!"K!R@0JP<G$*L&YAA`/W480#]ZF$`_:),
  4195. +MWRB`8`#]^&$`_;A@`/X(``!(;`.T3KKXL%A/3G4@+P`$+PU.NB#\*D!*@&8"
  4196. +M8>(@#2I?3G4@;P`$("\`""\+3KH>\"9`2H!F`F'&(`LF7TYU(&\`!"\-*D@@
  4197. +M#68$2^P#OB!-2AAF_%.(D<T@"%*`3KH@L"!`2H!F!'``8`@B2!+=9OP@""I?
  4198. +M3G593TCG`S1^`'P`(&P<J"9H`-!@+$HK``AF)#`\!0#`:P`.9AI2AR!K``H@
  4199. +M"$H89OQ3B)'`(`C<@-RK`!14AB932I-FT"`'4H#E@-"&80#_2BE`',#EAR!`
  4200. +M(D#3QT7I``0O0``49@I![`.P*4@<P&!6(&P<J"IH`-!@0DHM``AF.C`\!0#`
  4201. +M;0`.9C`F;0`*+BT`%"!O`!0@RB](`!1@`A3;2A-F^A3\`#TF;0`08`(4VR`'
  4202. +M4X=*@&;V0AHJ54J59KH@;P`40I!,WRS`6$].=2!O``0@+P`(+PTJ2"J`0JT`
  4203. +M!.6`80#^M"M```@J7TYU(&\`!")O``@@+P`,2.<B-"9)*DA*@&<*($MA`/["
  4204. +M)$!@`B1+(`IG/B(5)"T`!+2!;2(L`=R&=!#2@KR!;0(B!BJ!(`'E@"!M``A.
  4205. +MNAUN*T``"&<21^T`!"(34IOE@2!;(8H8`'`!3-\L1$YU(&\`!")O``@@+P`,
  4206. +M89)*@&8$80#^&DYU(&\`!")O``A(YP`4)DDJ2"`M``30JP`$L)5O$M"`*H#E
  4207. +M@"!M``AA`/X:*T``""(M``3E@2!M``C1P2`K``0B`.6!(FL`"&`"$-E3@63Z
  4208. +MT:T`!"!K``A,WR@`3OH=7B!O``0B;P`(+V\`#``$("\`$"(O`!193TCG`C0L
  4209. +M`2I))$@O2``02H!G1%.`9PI3@&<``+9@``#T4X9G(B`O`!@B#9"!(&\`$$(P
  4210. +M"``@02)O`!!@`A+84X!D^F```,Y![`/`(F\`$!+89OQ@``"^)F\`&&!N<%RP
  4211. +M%69F2BT``6=@5(UP`;R`9@84_`!A8%0@!E6`9D80+?__2(!(P'(CD(%G+E6`
  4212. +M9RI5@&<F4X!G(E.`9QY3@&<:<A60@6<4<AR0@6<.58!G"G(?D(%G!%6`9@04
  4213. +M_``G%.W__V`(%.W__V`"%-V[RV6.8$`F;P`88#9P*K`59BY*+0`!9RA4C1`M
  4214. +M__](@$C`<F60@6<,<@F0@68,%/P`"F`.%/P`&V`(%.W__V`"%-V[RV7&0A),
  4215. +MWRQ`6$].=9[\`2Q(YS\V*F\!6"!L"@`,:``E`!1D"DAX`!1.NLE*6$]"K`E`
  4216. +M<`$I0`D\*4`)8G`"*4`)7BE`"80I?````(0)@)/)+'@`!$ZN_MHI0!RH3KKU
  4217. +M`"E`'*QF"DAL`\).NO3<6$\@;!RL3KKUD"E`'+`L;!RL(%8L:``4*4X<O$'O
  4218. +M`3!.KO^^*6\!,!RT3KKU^$ZZ^ZP@;!RH("@`K&<0Y8`B0"(I`#3E@2E!'+A@
  4219. +M!BEH`(0<N$H59@``Z$'L`]HB""QL'10D/````^Y.KO_B+`!![`/@(@A.KO_B
  4220. +M+@!![`/F(@A.KO_B*@!*AF<(2H=G!$J%9B)*AF<&(@9.KO_<2H=G!B('3J[_
  4221. +MW$J%9P8B!4ZN_]QA`/MR<`$O`"\%+P`O!R(&P4%.N@VX(&P*!"`H`!Q![P%8
  4222. +M80#\GD_O`!!\`'X`8%`B;`H$(&D`)"`P>`!G/B(`0^\`,"0)+&P=%'9`Y8M.
  4223. +MKOYN2H!G)B)L"@0@:0`DT<<@*``$9P@B`B0`3J[\CD'O`4A#[P`P<`%A`/S8
  4224. +M4H90AR!L"@2\J``<;:9@``+,+&P=%$ZN_\HH`$ZN_\0J`'X`(&P<J"PH`.!F
  4225. +M*'X!0>P#["(()#P```/M3J[_XBP`9A)![`/N(@A.KO_B+`!F!&$`^J0O!R\&
  4226. +M<``O`"\%(@3!04ZZ#.I![P%8<`%A`/O6(#P```4:80#ZCB!`,7P$```2+T``
  4227. +M/'!`Y8AA`/IZ3^\`$'Y`Y8\O0`$X8`)2C1`52(!(P$'L"!T(,``#"`!F[!`5
  4228. +M9P`"%G(BL`%F,%*-)DU@$'`JL!5F"$HM``%G`E*-4HT0%6<&<B*P`6;F)$T0
  4229. +M%7(BL`%F`E*-?`)@5'`GL!5F(%*-)DU@`E*-$!5G!G(GL`%F]"1-<">P%68"
  4230. +M4HU\`6`N)DU@$'!<L!5F"$HM``%G`E*-4HT0%6<2<B"P`6<,<@JP`6<&<@FP
  4231. +M`6;:)$U\`"!+*@J:BR`%4H`O2``H80#YMB9`2J\!3&8@(`4@2R)O`"A.NAAF
  4232. +M0C-8`$'O`4@B2W``80#[8&``_R;:A7(0VH&ZAV\4(&\!.$ZZ&1`@!6$`^78N
  4233. +M!2]``3@O"B`&($LB;P`L<@%A`/NN6$\B"R0O`3@F!RQL'11.KORX*@!L$$(2
  4234. +M+R\`*$AL`_1.NO'B4$]*A68B+PH@!B!+(F\`+'(`80#[=$'O`4PB2W``80#Z
  4235. +MZ%A/8`#^K'H!(&\`+$*H``A"*``10B@`$"\*(`8@2R)O`"QR`F$`^T!![P%`
  4236. +M<!!A`/HF6$\B"R0O`"PL;!T43J[\RB@`9CQ@*GH`(F\`+-+\`1A![P$\<`%A
  4237. +M`/H@2H!F!'AG8!(B+P`L+&P=%$ZN_,0H`$J$9](B+P`L+&P=%$ZN_+YP=-"`
  4238. +MN(!G"DAL!`A.NO$N6$]*A6<B+PH@!B!+(F\`+'(`80#ZP$'O`4PB2W``80#Z
  4239. +M-%A/8`#]^"`O`4`@;P%$3KH3,D'O`4A#[P$\80#Z*B!+3KH7UF``_=8@;P$X
  4240. +M3KH7RB!O`"Q.NA?"80#XDD'L!").N@M^*4`#:&8(0>P$*"E(`VA![`0N3KH+
  4241. +M:"E``WQF!BEL`V@#?$'L!#A.N@M4*4`#@&8(0>P$/BE(`X!![`1"3KH+/BE`
  4242. +M`X1F"$'L!$@I2`.$0>P$4$ZZ"R@I0!S$9@A![`1:*4@<Q"`O`4P@;P%0(FP<
  4243. +MP$ZZ*-)P`$ZZ&OQ,WVS\WOP!+$YU("\`!$CG`P`N`$JL',AG!"`'8&!\`"`'
  4244. +M`H````$D9P)\"`@'``=G!`!&``4(!P`$9P0(Q@`""`<``6<$",8```@'``-G
  4245. +M!`C&``$(!P``9P0(Q@`&(`=R2<"!<D"P@68$`$8`0@@'``EG!`C&``4@!@I`
  4246. +M``],WP#`3G4@+P`$2.<&`"P`2JP<R&<((`8"0`__8%YZ``I&``\(!@`#9P1Z
  4247. +M2>6-(`9R!<"!6X!F!`C%``<(!@`"9P0(Q0`$"`8``&<$",4``2`&<D+`@6<$
  4248. +M",4`!@@&``%G!`C%``,(!@`&9P0(Q0``"`8`!6<$",4`"2`%3-\`8$YU``!(
  4249. +MYP,`3KKRWBX`?`!@"B\&3KKQ1EA/4H:\AVWR3-\`P$YU("\`!"\'+@!AU$ZZ
  4250. +M\+I.NO98(&P<K$ZZ[W@O!TZZPS983RX?3G4@+P`$+P<N'V#4```@+P`$(B\`
  4251. +M""!O``Q13TCG`R0L`2X`*DA.NO74(`=.NO(\2H!G&B)`(&D`("](`!0@!B!I
  4252. +M``0B321O`!1.DF`"</],WR3`4$].=0``GOP`#$CG+S8J;P`T?@/.KP`X?`$@
  4253. +M;!RH)F@`N"H\```#[$ZZ]7Y*AV<*<`*^@&<$<@!@`G(!+T$`*'`!OH!G"%6'
  4254. +M9P1P`&`"<`$O0``L($U#[`1@3KH0NDJ`9@9X_V```51P_R!L'*@A0`"X(@TL
  4255. +M;!T4=/Y.KO^L+@`@;!RH(4L`N$J`9G@L;!T43J[_?$ZZ"B0L`"`L">!R+D8!
  4256. +ML(%G!$J`9@I^`2H\```#[F`6(`95@&8,""\`"``Z9P1P`6`"<``N`$J'9RQ\
  4257. +M``@O``@`.F<<""\`#P`Z9P9X`F```-8@+P`\3KK]AB@`8```R'C_8```PBE&
  4258. +M',QP_V```4)"IRQL'11R`B0/3J[_'$_O``0D0$J`9PPB!R0*3J[_FDJ`9A8@
  4259. +M"F<()`IR`DZN_Q9.N@I^</]@``$(*"H`="0*<@).KO\6(@=.KO^F<%#IB,"O
  4260. +M`#@,@```!0!F#'`1*4`<S'#_8```VDJO`"AG!@@$``-F#$JO`"QG$@@$``)G
  4261. +M#'`-*4`<S'#_8```M@@O``D`.F<B(@TD/````^Y.KO_B2H!G""(`3J[_W&`*
  4262. +M3KH*`G#_8```C`@O``@`.F<$(`5@!B`\```#[20`(@TL;!T43J[_XBH`9@A.
  4263. +MN@G6</]@8`@O``D`.F8$2H9F!"P$8`)\_WX`2J\`*&<"?@%*KP`L9P0(QP`!
  4264. +M""\``P`[9P0(QP`#+P<@!2(&3KH%GEA/+@!L''#_(&P<J"%``+@B!2QL'11.
  4265. +MKO_<(&P<J"%+`+@@!TS?;/3>_``,3G4@;P`$+R\`#"\O``PO"&$`_:A/[P`,
  4266. +M3G6>_``,2-<!`W#_WOP`#$YU44](UP,`4$].=4CG,`(B$$HH``UG!'``8!PD
  4267. +M"28`+&P=%$ZN_]8B`%*`9@A.N@D0</]@`B`!3-]`#$YU44](YS\V+@`J229(
  4268. +M+!,O1@`H+T@`+$HK``UG!G``8```C$HK``QG9B9-U\=Z`&!8)$U@`E**M<MD
  4269. +M!G`*L!)F]+?*9@0H"F`&0>H``2@(F(TB+P`H)`TF!"QL'11.KO_0+`!2@&8(
  4270. +M3KH(FG#_8#[:AK:&9C9+Z@`!GH9P`$ZZ\=Q.NO(,2H!F(DJ'9J1@'"(&)`TF
  4271. +M!RQL'11.KO_0*@!2@&8(3KH(7G#_8`(@!4S?;/Q03TYU64](YS\"+@`L$"]!
  4272. +M`!Q**``-9P1P`&!24X$F`2(&)`<L;!T43J[_OBH`3J[_?"@`4H5G!$J$9PX@
  4273. +M!$ZZ!Q@I0!S,</]@)"(&=``F`DZN_[XL`%*`9P1*A&<.(`1.N@;V*4`<S'#_
  4274. +M8`(@!DS?0/Q83TYUGOP!`$CG/P8N`"I(+!4J+0`(("T`!&<*(@`L;!T43J[_
  4275. +MIA@M``U(A$C$($U.NA&82H1G!'``8$0B!D'O`"`D""QL'11V0.6+3J[^:"@`
  4276. +M2H=F"B(&3J[_W$J`9QI*A&<2</^Z@&<,(@(D!4ZN_T9*@&<$<`!@!DZZ!V1P
  4277. +M_TS?8/S>_`$`3G4@+P`$2.<@`B(`+&P=%'0`3J[_-$ZN_WQT+D8"L()7P40!
  4278. +M2(%(P2`!3-]`!$YU("\`!"!O``@B;P`,GOP`$$CG-Q8N`"9)*DA\`&&X2H!F
  4279. +M?"('+&P=%'0!3J[^5DJ`9VPB!T'L!&@D"'8$3J[_T%F`9E(B!R0\```G$$ZN
  4280. +M_S1*@&="(@=![P`@)`AV$$ZN_]9R";"!;RYPF[`O`"!F)D'O`"4B""0+3J[\
  4281. +MT"H`0>\`)M'`(@@D#4ZN_-!2@&<&4H5G`GP!(@=T`$ZN_E8@!DS?:.S>_``0
  4282. +M3G4@+P`$(B\`")[\`A!(YS\&+@!P_R]``B@O00`D(@<L;!T4=`!V`4ZN_[XO
  4283. +M0``@(@=.KO^^+`!.KO]\*@`O0`(L9@``PB@O`"0B!R0$=O].KOXXL()F``"N
  4284. +MO()L``">*@2:AB@%(`1R`4A!+'@`!$ZN_SHJ0$J`9FIR`DA!3J[_*.*(*@`,
  4285. +MA0```@!M$"`%<@%(04ZN_SHJ0$J`9D9Z0.>-2^\`*#`\`?]R`$'O`"@0P5'(
  4286. +M__Q@++B%;P0@!6`"(`0F`$ZZ[ZXB!R0-+&P=%$ZN_]"P@V<*3J[_?"]``BQ@
  4287. +M!IB#2H1NT$'O`"BQS6<,(DT@!2QX``1.KO\N*B\"+&8$0J\"*"PO`""\KP`D
  4288. +M;`XB!R0&+&P=%';_3J[_OBPO`BAG"B`%3KH$7BE`',P@!DS?8/S>_`(03G6>
  4289. +M_`$(2.<W%BX`)DDJ2"P52BT`#68``1@@!P2````$`&<@!(````0`9TI3@&=8
  4290. +M4X!G7%.`9UY3@&=F4X!G;&```.Y*+0`,9R8@!D'O`21#[P$@80#]UDJ`9Q0@
  4291. +M+P$D-T```B`O`2`V@'``8```RG`98```OB(&+&P=%$ZN_R@F@'``8```LB:&
  4292. +M<`!@``"J<`!@``"D(`8B$V$`_C9@``"8*U,`"'``8```CBH32JT`!&8.(A4L
  4293. +M;!T43J[^C"M```0@+0`$9V(D`"(%+&P=%$ZN_EQ*@&92(@9![P`@)`AV0.6+
  4294. +M3J[^:$J`9SXB!4ZN_Z8B+0`$3J[_IB(&3J[_W"("=`!.KO]&&WP``0`-*H(K
  4295. +M0@`$0>\`("((+&P=%$ZN_[A*@&<$(`)@#DZZ!!Q@!G`6*4`<S'#_3-]H[-[\
  4296. +M`0A.=2`O``0B+P`(+V\`#``$2.</!BHO`!PL`2X`<`Y.N@\^*D!*@&8*<`PI
  4297. +M0!S,</]@3D/5(L="F2+&0BT`#2('+&P=%$ZN_R@;0``,2'K^=$AZ^]I(>OMD
  4298. +M2'KZK$AZ^G9(>OIH(`4@34/Z^E!.NNC@3^\`&"@`;`8@34ZZ#78@!$S?8/!.
  4299. +M=2`O``0B+P`(+V\`#``$+V\`$``(+V\`%``,+V\`&``02.<-`"@O`!0J+P`0
  4300. +M+@!P`$J!9@1P0.6(`$```2\`(`=R_V$`_T983TJ`9D!P`$J$9@1P0.6(`$``
  4301. +M`B\`(`5R_V$`_RA83U.`9B)P`$JO`!QF!'!`Y8@`0``"+P`@+P`<<O]A`/\&
  4302. +M6$]5@&<00>P$;B](`!!,WP"P3OKEY$S?`+!.=0``("\`!"!O``@B+P`,64](
  4303. +MYP,T+`$N`"I(3KKLN"`'3KKI("9`2H!G1`@K``$``V<V""L``P`#9Q8@:P`8
  4304. +M+T@`%"!K``1P`'("(F\`%$Z1(&L`%"](`!0@!B!K``0B321O`!1.DF`(<`TI
  4305. +M0!S,</],WRS`6$].=2`O``0@;P`((B\`#$CG`P1,WR#`8(`@;P`$GOP`0$CG
  4306. +M.Q8J2$ZZ[#8@#6=22A5G3B(-0>\`("0(+&P=%'9`>`!.KOQV+@!M-DZN_WPL
  4307. +M`%*`3KH-;"9`2H!G)+Z&9Q0F!E*#(@TD"TZN_'9*@&\0(`)@#B!"(DL2V&;\
  4308. +M(`M@`G``3-]HW-[\`$!.=2`O``0B+P`(+V\`#``$44](YP<`*B\`&"P!+@!.
  4309. +MNNNT(`=.NN@<2H!G&B)`(&D`&"](`!`@!B(%(&D`!")O`!!.D6`"</],WP#@
  4310. +M4$].=2`O``0B+P`(+V\`#``$2.<'`"HO`!`O10`03-\`X&"@```@+P`$(&\`
  4311. +M""(O``Q93TCG`S0L`2X`*DA.NNM((`=.NN>P)D!*@&<F""L````#9Q@@:P`0
  4312. +M+T@`%"`&(&L`!")-)&\`%$Z28`AP#2E`',QP_TS?+,!83TYU("\`!"!O``@B
  4313. +M+P`,2.<#!$S?(,!@G@``("\`!"E`">!*@&<``(9R9Y"!9P``@E6`9P``@'()
  4314. +MD(%G?%.`9WA3@&=T4X!G<%.`9VQ3@&=H4X!G:%.`9VAR49"!9V93@&=F4X!G
  4315. +M9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V95@&=F4X!G9E.`9V93@&=F
  4316. +M4X!G9E.`9V95@&=F4X!G9E.`9V93@&=F8&AP`&!F<`Q@8G`+8%YP%F!:<`=@
  4317. +M5G`(8%)P$&!.<!%@2G`"8$9P`F!"<!9@/G`'8#IP%F`V<"1@,G`68"YP%F`J
  4318. +M<!Y@)G`28")P)6`><"9@&G`38!9P%F`2<!Q@#G`-8`IP#6`&<`U@`G#_3G4O
  4319. +M#BQL'11.KO]\80#^^BE`',PL7TYU(&\`!"`O``A93TCG`18N`"](`!`@;P`0
  4320. +M*E!@9'`-L"T`"&9:("T`K&<&Y8`@0&`"D<@F2"`M`)RPAV<T("T`H+"'9RP@
  4321. +M+0#@L(=G)"`+9RX@*P`<L(=G&"`K`""PAV<0("L`.+"'9P@@*P`PL(=F#B)-
  4322. +M<&#OB"QX``1.KOZ\*E5*E6:83-]H@%A/3G4@+P`$(B\`"$CG`0(N`"`!4X!G
  4323. +M#%.`9PA3@&<$78!F+"QX``1.KO]\(&P*`-#\`98@!V$`_T@@;`H`T/P!I"`'
  4324. +M80#_.DZN_W9P`&`(<!8I0!S,</],WT"`3G4@+P`$(B\`"$CG!@0L`2H`3KKH
  4325. +MYDJ%:@)$A;JL'-1F#DJ&9P8@!DZZYXIP`&!((`5.N@!N*D!*@&<&2JT`%&<*
  4326. +M<`,I0!S,</]@+"`&9R@B+0`0P4%A`/]8(@!P";R`9A1R`2M!`!0K0``8<!1.
  4327. +MNN=$<`!@`B`!3-\@8$YU```@;P`$2.<`!BI((DTL>``$3J[_!"!-3-]@`$[Z
  4328. +M"%0@+P`$2.<!!"X`*FP<V&`.("T`#+"'9@0@#6`(*E5*E6;N<`!,WR"`3G5(
  4329. +MYR`"0>P<V$ZZ&,H@+!RH(BP<M"0`LX("@@!___\I0AS44H(I0AS0+P$O`$AL
  4330. +M"`!(;!SD3KK?6D_O`!`L>``$3J[]9BE`'0AG$$'L'.1P`$ZZ&-XI0!T$9@I(
  4331. +M;`@.3KK@VEA/3-]`!$YU2.<`!B`L'0AG"B!`+'@`!$ZN_6!*K!T$9S@L>``$
  4332. +M3J[_?&`,(DUP'"QX``1.KO\N(&P=!"QX``1.KOZ,*D!*@&;B(&P=!$ZZL
  4333. +M>``$3J[_=DS?8`!.=0``(&\`!"`O``@B+P`,(F\`$"]O`!0`!"]O`!@`"%E/
  4334. +M2.</-B@O`"PJ+P`H+`$N`"I)+T@`("QX``1.KOUF)D!*@&<P($L@!$ZN_7(D
  4335. +M0$J`9R(@#6<()4T`*"5%`"0@;P`@(`<B2B(&3J[^1$H`9@0@"F`6(`IG!B!*
  4336. +M3J[];"`+9P8@2TZZ%Z!P`$S?;/!83TYU(&\`!$CG``8J2"`-9Q@B32QX``1.
  4337. +MKOX^(&T`#DZZ%W8@34ZN_6Q,WV``3G593T'Y`````"Z(9P@@>?____Q.D%A/
  4338. +M3G593T'Y`````"Z(9P@@>?____Q.D%A/3G5(YP,$*F\`$"!-2AAF_%.(D<TN
  4339. +M"&`*(`9![`E&3KH+5GP`'!U*AF;N0>P)1DZZ#V8@!TS?(,!.=9[\`!!(YP<4
  4340. +M?@!+[P`L8```FG`EL"\`%&8``(`@;P`H4J\`*!`0<@`2`!]``!5P9)*`9SIP
  4341. +M#)*`9PY7@6<&6X%G!F!$)EU@-"P=1^\`'GH'(`9R#\"!0?H`>-'`%I!3B^B&
  4342. +M4X5*A6KH0B\`'V`*(!U![P`73KH"&D?O`!<O"TZZ_TA83]Z`8")2AW``$"\`
  4343. +M%4'L"49.N@JF8!!2AW``$"\`%$'L"49.N@J4(&\`*%*O`"@0$!]``!1F`/]8
  4344. +M0>P)1DZZ#IH@!TS?*.#>_``03G4P,3(S-#4V-S@Y04)#1$5&`````$CG`Q<J
  4345. +M;!T,8!0F57`4T*T`!")-+'@`!$ZN_RXJ2R`-9NA"K!T,8$PJ;!T8<)S0K`G<
  4346. +M)D`@+0`$*4`=&"EM``@)W"XM`!A*@&8>(&P*``QH`"0`%&42($\L"$'M``PL
  4347. +M>``$3J[])"Y&(DL@!RQX``1.KO\N2JP=&&:N3-_HP$YU(&\`!")O``@@4")1
  4348. +M$!BP&68$2@!F]I`A2(!(P$YU(&\`!"`O``A#^O_@<@1.^@>:(&\`!")O``@@
  4349. +M+P`,2H!O"A(0$-$2P5.`9O9.=2!O``0B;P`(<`!R`!`8$AD,``!A;0H,``!Z
  4350. +M;@0$```@#`$`86T*#`$`>FX$!`$`()"!9@1*`6;43G4``"`O``@@;P`$3E7_
  4351. +M]")/<@I.N@)P!D$`,!+!2H!F\"`)$.&_R6;Z0A"0CTY=3G4``"`O``@@;P`$
  4352. +M3E7_]")/(@`"00`'!D$`,!+!YHAF\"`)$.&_R6;Z0A"0CTY=3G4``#`Q,C,T
  4353. +M-38W.#EA8F-D968@+P`((&\`!%%/(D\R``)!``\2^Q#<Z(AF\B`)$.&_R6;Z
  4354. +M0A"0B5!/3G4``"`O``@@;P`$+PA*@$Y5__0B3VP&$/P`+42`<@I.N@'(!D$`
  4355. +M,!+!2H!F\!#AO\EF^D(0(`A.79"?3G4``"!O``0B;P`(2.<P("1(<@`@`28!
  4356. +M#!``*V<(#!``+68$=@%22!`8!```,&T:#```"6X4)`'E@=*"TH%*`V8$TH!@
  4357. +MXI*`8-XB@2`(D(I3@$S?!`Q.=2!O``0O#2I(""T``P`;9C`@+`F,3KH$?BM`
  4358. +M``0K0``09@IP#"E`',QP_V`6*VP)C``4<//!K0`80JT`#$*M``AP`"I?3G4`
  4359. +M`"!O``1(YR`4*D@F36`@<``0$T'L"!T(,``!"`!G"G(`$@!T()*"8`1R`!(`
  4360. +M%L%*$V;<(`U,WR@$3G4``)[\`%!(YS$V0_H`A'``+'@`!$ZN_=@J0$J`9@9P
  4361. +M%$ZZ[')^`"!L"@P>*/__(`=#[P`<8`(2V%.`9/I"-W@<0>\`'"E(":1#[`FL
  4362. +M1^P)P"Q-D<B5RG``(@!T?=2"=BA.KOZD<!1.NNPL3-]LC-[\`%!.=2HJ(%-T
  4363. +M86-K($]V97)F;&]W("HJ``!%6$E4``!I;G1U:71I;VXN;&EB<F%R>0!*@&H`
  4364. +M`!Y$@$J!:@``#$2!80``($2!3G5A```81(!$@4YU2H%J```,1(%A```&1(!.
  4365. +M=2\"2$$T`68``")(0$A!2$(T`&<```:$P3`"2$`T`(3!,`)(0C(")!].=2\#
  4366. +M=A`,00"`9```!N&944,,00@`9```!NF964,,02``9```!N6954-*06L```;C
  4367. +MF5-#-`#FJ$A"0D+FJDA#@,$V`#`"-`-(0<3!D()D```&4T/0@7(`,@-(0^>X
  4368. +M2$#!028?)!].=0``2.=P`"0`9R!*@68$0H!@&"8`QL%(0L3!2$)"0M:"2$'`
  4369. +MP4A`0D#0@TS?``Y.=0``("P*"`1``?0N0$[Z_F```"!O``0@+P`((B\`#%.!
  4370. +M:P2P&&;X4TA2@4J!9@``!)'((`A.=2)O``@@;P`$("\`#"((8`00V6<(4X!D
  4371. +M^&`&0AA3@&3Z(`%.=2)O``@@;P`$("\`#"((2H!O%K')90S3P-'`$2%3@&;Z
  4372. +M8`80V5.`9OH@`4YU(&\`!"`O``A(YP,4+@`J2&82(`UF!'``8&@@34ZZ`&YP
  4373. +M`&!>(`UF"B`'3-\HP$[Z`<@F356+,#Q__\!32,#E@"P`"!,`#V<,#&N``/_^
  4374. +M9@0L*__R(`=.N@&@)D!*@&8$<`!@'KR'8P0@!V`"(`8@32)+8`(2V%.`9/H@
  4375. +M34ZZ``X@"TS?*,!.=2!O``0@"&8"3G59@$CG/#(B+!T,9@XI?````!8<S$S?
  4376. +M3#Q.=2)!L(%O$B0!U*D`!`:"````%+"";`)@""(I``!GU&#@)@$&@P```!"P
  4377. +M@VW&9Q(D0T*"-"H``FNZY8K6@EB#8.@D0#0J``!JJ@BJ``<``$*#-BH``@)#
  4378. +M?__EBTIJ``)K0$?R.`1*:P``:S9"A#@K``("1'__Y8S8@UB$Y(Q8@TIK``)J
  4379. +M!`!$@``U1``":Q(J!.6,-#)(!`)"@`"*0C6%2`1"A#@J``!G3.6,1(1'\DC\
  4380. +M2FL``&L^0H0X*P`"Y8Q"A3HJ``("17__Y8W8A5B$6(/DC$IJ``)J!`!$@``W
  4381. +M1``":Q(J!.6,-#-(!`)"@`"*0C>%2`37J0`()BD`!+:L"!AN#+:I``AF.DJI
  4382. +M``!G-"`L'0P@0+*`9@PI:0``'0Q@$"!H``"RJ```9O8A:0`````@*0`$!H``
  4383. +M```4+'@`!$ZN_RY,WTP\3G4@+P`$2H!F#"E\````%AS,<`!.=4CG/C)6@`*`
  4384. +M_____`R```'__&X``+BPK`@8;@``L"8L'0QG``"H(D.PJ0`(;C(B+!T0LJD`
  4385. +M#&8H1>D`$$I2:Q!"A#@J``("1'__Y8RPA&\:0H0X*@`":PCEC$7R2`1@W"8I
  4386. +M``!G9B)#8+X(Z@`'``!'\@@$0H6PA&<\+`2<@%F&9@0@!&`PY(Y*:@`":@0`
  4387. +M1H``*@#DC3=&``(W10``-44``GH$2D9K#C0R2`0"0H``C$(UAD@$)BD`"):`
  4388. +MEH4C0P`((`I8@$S?3'Q.=2H`L*P(&&H$("P(&"@`!H`````4(BP=$"QX``1.
  4389. +MKO\Z2H!F"BE\````#!S,8,PB0$7I`!`C;!T,```I21T,(T0`!"-L'1``#"8$
  4390. +MEH5G*%F#9R0C0P`(1_)8!#5\@````.2--44``C=%``#DBP!#@``W0P`"8!1"
  4391. +MJ0`(-7R`````Y(P`1(``-40``B`*6(!,WTQ\3G4@;P`$("\`""(O``PB;P`0
  4392. +M64](YP\V+`$N`"I(+TD`('`!OH!C``"R)DW7QB`'58!F)"\++PT@32)++&\`
  4393. +M*$Z64$]*@&\``)(@!B!-(DM.NO@T8```A"`'XH@B!DZZ^X8B3=/`(`8@34ZZ
  4394. +M^!HD37H`>`%@*B\-+PL@2R)-+&\`*$Z64$]*@&H24H75QK7+9PH@!B!+(DI.
  4395. +MNO?LU\92A+B'9=*US6<*(`8@32)*3KKWUB9O`"`@!2(&($TB2V$`_U(@2M'&
  4396. +M(`>0A5.`(@8B2TS?;/!8CV``_SI,WVSP6$].=2`O``1(YP$$+@`J;`G48`@@
  4397. +M;0`$3I`J52`-9O1+[`DD<`;`K0`858!F&"`M``20K0`09PXB+0`<(&T`$,%!
  4398. +M3KKO2"!-*E`@#6;6(`=,WR"`3OKEX"`O``0@;P`(0]!2F2!14ID0@$YU44\@
  4399. +M;P`,0I<O2``$2&\`%"\O`!1!^O_>0^\`"$ZZ"_X@;P`,0A!03R`74$].=0``
  4400. +M("\`!"!O``@O#2(`*DA2E4/M``@@$5*1&X$(#"`9#(````(`;11![0`,(FT`
  4401. +M!'(!P4%.N@'P0JT`""I?3G6>_`(,+PTJ;P(40J\`#$*O``0O30`(2&\"'"\O
  4402. +M`AQ!^O^J0^\`#$ZZ"X903R`O``QG$$'O`!`B;P`(<@'!04ZZ`:8(+0`%`!MF
  4403. +M"`@M``0`&V<$</]@!"`O``0J7][\`@Q.=2`O``0@;P`(64](YP,$+@`J2'P`
  4404. +M'T``#W)!TH'"K0`89@P([0`%`!MP_V```4!P,\"M`!A5@&=0<$Q&`,"M`!AR
  4405. +M0-*!L(%F#`CM``$`&T*M``Q@-`@M``4`&V<&</]@``$,<&Y&`,"M`!AR;D8!
  4406. +ML(%F#`CM``$`&T*M``Q@"G``*T``#&```.8@+0`,L*T`%&PR(&T`!%*M``0@
  4407. +M!Q"`4JT`#`@M``8`&V<.<@J^@68(($U.N@-T+`!*AF<``*H@!F```*H(+0`"
  4408. +M`!MG+D*M``P@+0`<0>\`#W(!3KKM="P`4H!F"`CM``4`&V!R(`93@&=L".T`
  4409. +M!``;8&1*K0`49B`@34ZZ]N1*@&<*".T`!0`;</]@6'``*T``#"MM`!``!"`M
  4410. +M``RPK0`4;0@@34ZZ`OHL``CM``$`&R!M``12K0`$(`<0@%*M``P(+0`&`!MG
  4411. +M#G(*OH%F""!-3KH"SBP`2H9G!"`&8`9R`!('(`%,WR#`6$].=2!O``0@+P`(
  4412. +M(B\`#")O`!!93TCG#Q`L`2X`)DDO2``4(`8B!TZZ^#(J`'@`2H=G!$J&9@9P
  4413. +M`&```/QP,,"K`!AF"G!!T(#`JP`89@P(ZP`%`!MP`&```-YP,\"K`!A5@&=0
  4414. +M<$Q&`,"K`!AR0-*!L(%F#`CK``$`&T*K``Q@-`@K``4`&V<&<`!@``"J<&Y&
  4415. +M`,"K`!AR;D8!L(%F#`CK``$`&T*K``Q@"D*K``QP`&```(1*JP`49DP(*P`"
  4416. +M`!MF1"!+3KKUL$J`9SH(ZP`%`!MP`&!@(&\`%!`8(FL`!!*`4JL`!%*K``Q3
  4417. +MA5*$+T@`%'(*L`%F#@@K``8`&V<&($M.N@&R("L`#+"K`!1L!$J%;L)*A6\6
  4418. +M($M.N@&:("L`'"(%(&\`%$ZZZ[38@"`$(@=.NO:43-\(\%A/3G4@;P`$("\`
  4419. +M""(O``PB;P`044](YP\4+@`J22P!)D@O00`8+T@`'$J'9P1*AF8&<`!@``$X
  4420. +M(`8B!TZZ]N(L`'H`<##`K0`89P9P`&```1YP?D8`P*T`&&<``1)P,\"M`!A3
  4421. +M@&<T<%Q&`,"M`!AR0-*!L(%F%`CM````&P@M``0`&V<6<`!@``#D0JT`"`CM
  4422. +M``4`&W``8```U$JM`!1F+@@M``(`&V8F($U.NO2.2H!G'`CM``4`&W``8```
  4423. +ML$/M``0@41;04IE3F5.&4H5*K0`(9P1*AF[F2H9O``"(""T``@`;9@:\K0`4
  4424. +M;S`@+0`<(@8@2TZZ[!PH`$J&:A`([0`%`!L@!2('3KKU@F!>N(9L!@CM``0`
  4425. +M&]J$8$@@;0`0*T@`!"`M`!PB+0`4(&T`$$ZZZ^`H`&P0".T`!0`;(`4B!TZZ
  4426. +M]4A@)$J$9A`([0`$`!L@!2('3KKU-&`0*T0`"&``_VP@!2('3KKU(DS?*/!0
  4427. +M3TYU```@;P`$2.<!!"I((`UG``"@<$'0@,"M`!AF+"!M`!!#[0`$(LA"F4(M
  4428. +M`"!P`"+`""T`!P`;9P8(K0```!L(K0`$`!M@``"*2JT`%&=$("T`#&H&<@`K
  4429. +M00`,("T`#&<H(BT`'"!M`!#!04ZZZ<(N`%*`9@@([0`%`!M@#+ZM``QG!@CM
  4430. +M``0`&RMM`!``!$*M``QP,,"M`!AF$@@M``<`&V<&</S!K0`8<`!@)'#_8"!^
  4431. +M`$OL"21*K0`89PP@36$`_T9*@&<"?O\J52`-9N@@!TS?((!.=2!O``1(YP$$
  4432. +M*DA^`"`-9P8@+0`89@1P_V!`""T``0`;9P@@34ZZ_PHN`'`,P*T`&&8.2JT`
  4433. +M%&<((&T`$$ZZ]=9"K0`8("T`'$ZZT*)2AV<$2H!G!'#_8`)P`$S?((!.=2!O
  4434. +M``0B;P`(+V\`#``$64](YP\4)F\`("I)+T@`&'X`+"P)D'H`2JL`&&<&($M.
  4435. +MNO]T<``0+0`!<BN0@6<@<C:0@6<&4X!G!&`@?`!R*[(M``)7P$0`2(!(P"H`
  4436. +M8`QZ`7!AL"T``F8"?`!P`!`5<F&0@6<,<A&0@6<:6X!G)&`V2H56P'(!D@``
  4437. +M00$(C(%^0.&/8"A*A5;`<@"2`)(`C(%@&DJ%5L!R`9(``$$!``!!`@",@6`&
  4438. +M<`!@``"`+RP)E"\&+R\`($ZZWU1/[P`,*`!2@&8$<`!@8DJ%9P8(QP`'8#!P
  4439. +M`!`5<F&0@6<,<A&0@6<:6X!G&F`:",<``4AX``(@!'(`3KKH]%A/8`9^`6`"
  4440. +M?@((!@`/9@0(QP`/D<A+ZP`0*L@JR"=$`!PG2``$)T@`#"=(``@JQR`+3-\H
  4441. +M\%A/3G4``"!O``0B;P`(44](YP`42.\#```(2^P))&`$)DTJ4R`-9P9*K0`8
  4442. +M9O(@#68><").NO6L*D!*@&8$<`!@'B!-)HAP(7(`$,%1R/_\+PT@;P`,(F\`
  4443. +M$$ZZ_G183TS?*`!03TYU```@;P`$(F\`""]O``P`!"]O`!``")[\`#1(YR\V
  4444. +M)F\`8"IO`%Q([P,``"Q"+P`[0B\`.D(O`#E"+P`X'WP`(``W0J\`5'#_+T``
  4445. +M4$(O`#9^`'P`1>\`/&!*<``@;P`L$!!R()"!9R)7@&<F48!G$E6`9P97@&<B
  4446. +M8#(??``!`#M@'A]\``$`.F`6'WP``0`Y8`X??``!`#A@!A]\`#``-U*O`"P@
  4447. +M;P`L2A!FKG`!L"\`.V8&'WP`(``W<BH@;P`LLA!F'BQO`#`B5EB6(A$O00!4
  4448. +M;`A$KP!4'T``.U*O`"Q@#$/O`%1.NN^RT:\`+"!O`"P0$'(NL`%F1E*O`"QP
  4449. +M*B!O`"RP$&8<(F\`,"!16)$@$"]``%!L!G#_+T``4%*O`"Q@%D/O`%!.NN]P
  4450. +M*@!F!D*O`%!@!-NO`"P??``@`#=P`"!O`"P0$'),D(%G%'(<D(%G!EF`9PI@
  4451. +M$A]\``(`-F`&'WP``0`V4J\`+"!O`"Q2B")O`"P0$7(`$@`?0``D+T@`)G!0
  4452. +MDH!G``$048%G``$<<`N2@&<``=!3@6=06X%G3%N!9R)3@6<``0)3@6<``.I7
  4453. +M@6<``8!5@6<``/!7@6<``.I@``&X)&\`,'`"L"\`-F8.(%)8DB)0(!,R@&``
  4454. +M`DH@4EB2(E`BDV```CXB;P`P(%%8D2@0:@1^`42$2H=G#$7O`#T??``M`#Q@
  4455. +M(DHO`#IG#$7O`#T??``K`#Q@$$HO`#EG#$7O`#T??``@`#Q\`2`$($I.NNV*
  4456. +M*@`@+P!09@9*A&<``>0@+P!0:@9R`2]!`%`H+P!0F(5O'"!*T<0@!2)*3KKP
  4457. +M_'(P($I@`A#!4X1D^BHO`%#<A2`%4X!F``$$$!*P+P`W9@``^DJO`%!F``#R
  4458. +M0A)@``#L("\`4&H&<`@O0`!0'WP``0`V<`*P+P`V9A`B;P`P(%%8D2`0>``X
  4459. +M`&`*(F\`,"!16)$H$!`O`"1R=;`!9P#_6G)OL`%F'DHO`#AG#$7O`#T??``P
  4460. +M`#Q\`2`$($I.NNSZ8`#_/DHO`#AG$A]\`#``/$7O`#X??`!X`#U\`B`$($I.
  4461. +MNNT6*@`(+P`%`"1F`/\40>\`/$ZZ[@)@`/\((F\`,"!16)$D4"`*9@1%^@#R
  4462. +M($I*&&;\4XB1RBH(("\`4&L$L(5O!"]%`%`L+P!08"!\`2)O`#`@45B1(!`?
  4463. +M0``\0B\`/6`&<`!@``"L1>\`/"`O`%2PAFP(<@`O00!48`2=KP!42B\`.V<>
  4464. +M8`AP`!`:($M.E5.&;/1@!B!+<"!.E5.O`%1L]&!J2H=F#$HO`#EF!DHO`#IG
  4465. +M1A`2<B"P`6<,="NP`F<&="VP`F8R2H9K+K(O`#=F$F`*<``0+P`W($M.E5.O
  4466. +M`%1L\'``$!H@2TZ54X9@"G``$"\`-R!+3I53KP!4;/!@"'``$!H@2TZ54X9L
  4467. +M]"`O`"9,WVSTWOP`-$YU```@;P`$(F\`""]O``P`!"]O`!``")[\``Q(YP`4
  4468. +M)DDJ2"]O`!P`$&`X<"6P+P`,9B8@;P`8L!!F!E*O`!A@&"\++PU#[P`83KK[
  4469. +ME%!/2H!G!B]``!A@"G``$"\`#"!+3I4@;P`8$!@?0``,+T@`&$H`9K9,WR@`
  4470. +MWOP`#$YU(&\`!""(6)!"J``$(4@`"$YU```@;P`$2.<`!BI(2JT`"F<*(DTL
  4471. +M>``$3J[^F!M\`/\`"'#_*T``%'``$"T`#RQX``1.KOZP(DUP(DZN_RY,WV``
  4472. +M3G4``"!O``0@+P`(2.<#%BX`*DAP_RQX``1.KOZV'`!(ADC&(`92@&8$<`!@
  4473. +M8'`B(CP``0`!3J[_.B9`2H!F""`&3J[^L&!$0>L`"B#-%T<`"1=\``0`"$(8
  4474. +M$,:3R4ZN_MHG0``0(`UG"")+3J[^GF`:0>L`&"=(`!1!ZP`4)T@`'$*K`!@7
  4475. +M?``"`"`@"TS?:,!.=2\(+P!.N0``(?Y03TYU``````/L`````0```````&9J
  4476. +M`````0````$````*`````````_(```/J```"LD%04@!!54<`1$5#`$9%0@!*
  4477. +M04X`2E5,`$I53@!-05(`34%9`$Y/5@!/0U0`4T50```````````$````!```
  4478. +M``@````(````#`````P````"````$`````$````4````!P```!@````&````
  4479. +M'`````,````@````!0```"0````+````*`````H````L````"0`(`````$``
  4480. +M````'G9I<G1U86P@;65M;W)Y(&5X:&%U<W1E9```=FER='5A;"!M96UO<GD@
  4481. +M97AH875S=&5D```M`"5S``!E<G)O<B!C;&]S:6YG(&9I;&4``'=R:71E(&5R
  4482. +M<F]R`"5S+W-O<G0E-2XU9"4U+C5D`"5S<V]R="4U+C5D)34N-60``')E860@
  4483. +M97)R;W(``'(`)7,Z(&1I<V]R9&5R(&]N("5S"@!R`'<`<@!W`'(`<@!W`&EN
  4484. +M=F%L:60@9FEE;&0@<W!E8VEF:6-A=&EO;B!@)7,G```M`%1-4$1)4@``+W1M
  4485. +M<```;W!T:6]N(&`M:R<@<F5Q=6ER97,@86X@87)G=6UE;G0``&]P=&EO;B!@
  4486. +M+6\G(')E<75I<F5S(&%N(&%R9W5M96YT``!O<'1I;VX@8"UT)R!R97%U:7)E
  4487. +M<R!A;B!A<F=U;65N=```;W!T:6]N(&`M5"<@<F5Q=6ER97,@86X@87)G=6UE
  4488. +M;G0``"5S.B!U;G)E8V]G;FEZ960@;W!T:6]N(&`M)6,G"@``+0!W`'(`=P`E
  4489. +M<P``=P!F9FQU<V@``"T`=W)I=&4@97)R;W(`57-A9V4Z("5S(%LM8VUU<UT@
  4490. +M6RUT('-E<&%R871O<ET@6RUO(&]U='!U="UF:6QE72!;+50@=&5M<&1I<ET@
  4491. +M6RUB9&9I36YR70H@("`@("`@6RM03U,Q(%LM4$]3,EU=(%LM:R!03U,Q6RQ0
  4492. +M3U,R75T@6V9I;&4N+BY="@````!'3E4@=&5X='5T:6QS(#$N-@````+(``!5
  4493. +M;FMN;W=N('-Y<W1E;2!E<G)O<@``)7,Z(```.B`E<P````!/:P``````%```
  4494. +M`````````````````P1C;VYS;VQE.@``)7,Z(```:6YT=6ET:6]N+FQI8G)A
  4495. +M<GD```!T:6UE<BYD979I8V4`````_____V9I9F\N;&EB<F%R>0``````````
  4496. +M`````````V0``0```````````V8```````````````!&86EL960@=&\@8W)E
  4497. +M871E('1I;65R``!U<V5R(&EN=&5R<G5P=````````$YO(&UE;6]R>0```&$`
  4498. +M1F%I;&5D('1O(&-R96%T92!T:6UE<@``3DE,.@``3DE,.@``3DE,.@``*@!.
  4499. +M24PZ``!);G9A;&ED('=I;&1C87)D("5S`$5R<F]R(&5X<&%N9&EN9R!A<F=U
  4500. +M;65N=',`55-%4@``=7-E<@``55-%4DY!344``$A/344``',Z``!32$5,3`!B
  4501. +M:6XZ<V@``$A/4U1.04U%``!A;6EG80!.24PZ`````)LP('$``$9A:6QE9"!T
  4502. +M;R!I;FET:6%L:7-E($DO3P``86UI9V$@<W!E8VEF:6,@97)R;W(`````!(A5
  4503. +M;FMN;W=N(&5R<F]R`&YO="!O=VYE<@!N;R!S=6-H(&9I;&4@;W(@9&ER96-T
  4504. +M;W)Y`&YO('-U8V@@<')O8V5S<P!I;G1E<G)U<'1E9"!S>7-T96T@8V%L;`!I
  4505. +M+V\@97)R;W(`;F\@<W5C:"!D979I8V4@;W(@861D<F5S<P!A<F=U;65N="!L
  4506. +M:7-T('1O;R!L;VYG``!E>&5C(&9O<FUA="!E<G)O<@!B860@9FEL92!N=6UB
  4507. +M97(`;F\@8VAI;&0@<')O8V5S<P``;F\@;6]R92!P<F]C97-S97,`;F]T(&5N
  4508. +M;W5G:"!M96UO<GD`<&5R;6ES<VEO;B!D96YI960`8F%D(&%D9')E<W,`8FQO
  4509. +M8VL@9&5V:6-E(')E<75I<F5D`&UO=6YT(&1E=FEC97,@8G5S>0``9FEL92!E
  4510. +M>&ES=',`8W)O<W,M9&5V:6-E(&QI;FL`;F\@<W5C:"!D979I8V4``&YO="!A
  4511. +M(&1I<F5C=&]R>0!I<R!A(&1I<F5C=&]R>0``:6YV86QI9"!A<F=U;65N=```
  4512. +M9FEL92!T86)L92!O=F5R9FQO=P!T;V\@;6%N>2!O<&5N(&9I;&5S`&YO="!A
  4513. +M('1Y<&5W<FET97(``'1E>'0@9FEL92!B=7-Y``!F:6QE('1O;R!B:6<``&YO
  4514. +M('-P86-E(&QE9G0@;VX@9&5V:6-E`&EL;&5G86P@<V5E:P``<F5A9"UO;FQY
  4515. +M(&9I;&4@<WES=&5M`'1O;R!M86YY(&QI;FMS``!B<F]K96X@<&EP90!M871H
  4516. +M(&%R9W5M96YT`')E<W5L="!T;V\@;&%R9V4``$DO3R!S=')E86T@96UP='D`
  4517. +M`&9I;&4@;F%M92!T;V\@;&]N9P``9&ER96-T;W)Y(&YO="!E;7!T>0!T;V\@
  4518. +M;6%N>2!S;V9T(&QI;FMS("AL;V]P/RD````$H@``!+````2Z```$U```!.0`
  4519. +M``3\```%!@``!2````4X```%2@``!5H```5L```%?@``!9````6B```%K@``
  4520. +M!<0```78```%Y```!?8```8&```&%@``!B8```8X```&3```!F````9R```&
  4521. +M@@``!I````:H```&M@``!LP```;<```&Z```!O8```<(```'&@``!RX```="
  4522. +M````)@``9&]O<BXE;'@N)6QX``!.;R!M96UO<GD```!````@("`@("`@("`H
  4523. +M*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0$!`0$!"$A(2$A(2$
  4524. +MA(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!`0$!$!`0$!`0@H*"
  4525. +M@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0(```````````````````````
  4526. +M````````````````````````````````````````````````````````````
  4527. +M````````````````````````````````````````````````````````````
  4528. +M```````````````````````````````````/H```"48`````````````````
  4529. +M``````````````````````````EH````````````````````````````````
  4530. +M```````````````````````````````````````````````````````````"
  4531. +M````@``````-__\````.``X```````````````#__P````0`!````````%*B
  4532. +M```)F/__````!``$````````4K@``````````````#L```"(````@````'@`
  4533. +M``!P````:````&````!8````4````$@```!`````.````#````+:```#&```
  4534. +M`W@```-L```']@``!_(```?N```'Z@``!^8```?B```'W@``!]H```?6```'
  4535. +MT@``!\X```?*```'Q@``!\(```>^```'N@``![8```>R```'K@``!ZH```>F
  4536. +M```'H@``!YX```>:```'E@``!Y(```>.```'B@``!X8```>"```'?@``!WH`
  4537. +M``=V```'<@``!VX```=J```'9@``!V(```=>```$G@``"48```DD```)O```
  4538. +:`^P````"````````"<P```FX`````````_)>
  4539. +`
  4540. +end
  4541. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/compile.doc amiga/fsf/emacs18/amiga/amiga-extra/amiga/compile.doc
  4542. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/compile.doc    Wed Dec 31 17:00:00 1969
  4543. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/compile.doc    Sat Sep 28 00:00:00 1996
  4544. @@ -0,0 +1,34 @@
  4545. +To compile emacs, you will need SAS C 6.01. If you try to make it work
  4546. +with Aztec C or gcc, you might run into difficulties with the dumping code:
  4547. +- The "small" data model (A4-relative) is used, to get all the variables
  4548. +  in one hunk.
  4549. +- Some variables are declared with the "far" attribute to get them out
  4550. +  of this hunk (and the dumping code depends on this). Move these to
  4551. +  the amiga_data.c module (which is for variables that shouldn't be
  4552. +  dumped).
  4553. +
  4554. +To compile:
  4555. +
  4556. +a) Install my 'unix compatibility' library (available by ftp and on fish
  4557. +   disks).
  4558. +
  4559. +b) Install as usual (see INSTALLATION).
  4560. +
  4561. +c) Compile the C preprocessor (SAS's one has a few problems ...):
  4562. +
  4563. +     cd gnuemacs:cpp
  4564. +     smake
  4565. +
  4566. +d) Compile & dump emacs
  4567. +
  4568. +     stack 20000
  4569. +     cd gnuemacs:src
  4570. +     smake
  4571. +     copy temacs /
  4572. +
  4573. +   (This takes around 20 minutes from scratch on an A2500/30).
  4574. +
  4575. +If all goes well, you should have a new version of emacs ...
  4576. +
  4577. +[Note: The DOC strings are not remade systematically. To change this,
  4578. +edit ymakefile and remove the comment from the rule for xemacs]
  4579. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el
  4580. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el    Wed Dec 31 17:00:00 1969
  4581. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el    Sat Sep 28 00:00:00 1996
  4582. @@ -0,0 +1,23 @@
  4583. +;;
  4584. +;;  User-Name.el.
  4585. +;;  ------------
  4586. +;;   -ch3/11/93.
  4587. +;;
  4588. +;;  This is a replacement for the (user-full-name) function that comes
  4589. +;;  comes with emacs, so that it fetches the login name from $USERNAME
  4590. +;;  and the full name from $REALNAME.  As is the default on most amiga
  4591. +;;  systems that are running UUCP and related utils.
  4592. +;;
  4593. +;;  It will also check $USER for the login name.
  4594. +;;
  4595. +
  4596. +(defun user-login-name ()
  4597. +  (if (eq nil (getenv "UserName"))
  4598. +      (getenv "User")
  4599. +    (getenv "UserName")))
  4600. +
  4601. +(defun user-full-name ()
  4602. +  (if (eq nil (getenv "RealName"))
  4603. +      (user-login-name)
  4604. +    (getenv "RealName")))
  4605. +
  4606. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el
  4607. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el    Wed Dec 31 17:00:00 1969
  4608. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el    Sat Sep 28 00:00:00 1996
  4609. @@ -0,0 +1,14 @@
  4610. +;;
  4611. +;;  This small bit of lisp will fix the so common #endif somthing
  4612. +;; (with no comment) code.
  4613. +;;
  4614. +
  4615. +(defun fix-endif-no-comment ()
  4616. +  (interactive)
  4617. +  (save-excursion
  4618. +    (beginning-of-buffer)
  4619. +    (replace-regexp "^#endif \\(.*\\)" "#endif /* \\1 */")
  4620. +    (beginning-of-buffer)
  4621. +    (replace-regexp "^#endif /\\* /\\* \\(.*\\) \\*/ \\*/" "#endif /* \\1 */")))
  4622. +
  4623. +    
  4624. \ No newline at end of file
  4625. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker
  4626. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker    Wed Dec 31 17:00:00 1969
  4627. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker    Sat Sep 28 00:00:00 1996
  4628. @@ -0,0 +1,286 @@
  4629. +From: chopps@ro-chp.UUCP (Chris Hopps)
  4630. +Subject: Emacs invoker.
  4631. +
  4632. +    This is the newest invoker of mine I am very pleased with it
  4633. +and think it would be good for inclusion in the main distribution.
  4634. +With the included rexx file (and some of the mods to emacs I sent you
  4635. +earlier,) this invoker supports multiple files on the cmd line.  It
  4636. +also supports turning backups off for the files loaded on that line,
  4637. +and a WAIT command that will have Emacs return the prompt only after
  4638. +the files specified on the command line have been killed.  The invoker
  4639. +also checks to see if Emacs is iconified if so it will de-iconify it.
  4640. +It brings emacs to the front and activates it (my mods needed for
  4641. +this.)
  4642. +
  4643. +This makes leaving GNUEmacs up and running all the time very feasable.
  4644. +The invoker can be used for programs like ``Arn'', ``Elm'' or whatever
  4645. +else kind of program that does something with a file after the editor
  4646. +returns.
  4647. +
  4648. +Here is the lisp code required for using the ``WAIT'' option of the
  4649. +invoker.  It should be loaded in the .emacs file.
  4650. +
  4651. +-------8<-------------8<-------------8<-------------8<-------------8<--
  4652. +;; [notify-rexx-wait.el] notification of kill of a buffer to rexx.
  4653. +;; Copyright © 1993 Christian E. Hopps.
  4654. +
  4655. +;; This program is free software; you can redistribute it and/or modify
  4656. +;; it under the terms of the GNU General Public License as published by
  4657. +;; the Free Software Foundation; either version 2 of the License, or
  4658. +;; (at your option) any later version.
  4659. +
  4660. +;; This program is distributed in the hope that it will be useful,
  4661. +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  4662. +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  4663. +;; GNU General Public License for more details.
  4664. +
  4665. +;; You should have received a copy of the GNU General Public License
  4666. +;; along with this program; if not, write to the Free Software
  4667. +;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  4668. +
  4669. +;; I can be contacted at:
  4670. +;; bix: chopps
  4671. +;; uucp: chopps@ro-chp.UUCP (sycom.mi.org!ro-chp!chopps)
  4672. +
  4673. +(provide 'notify-rexx-wait)
  4674. +
  4675. +(make-variable-buffer-local 'notify-rexx-port)
  4676. +(set-default 'notify-rexx-port nil)
  4677. +
  4678. +;;; Set old-kill-buffer to the internal version
  4679. +;; first check to see if it has already been bound.
  4680. +;; if not then bind it to the internal.
  4681. +;;
  4682. +(if (not (fboundp 'old-rexx-notify-kill-buffer ))
  4683. +    (fset 'old-rexx-notify-kill-buffer (symbol-function 'kill-buffer)))
  4684. +
  4685. +;;; redefine kill-buffer to check to see if it should
  4686. +;;  notify rexx that the buffer is being killed.
  4687. +;;
  4688. +(defun kill-buffer (buffer-strp)
  4689. +  "Notifys rexx that the current buffer is about to be killed. If it has one."
  4690. +  (interactive "bBuffer:")
  4691. +  (let ((buf nil))
  4692. +    (setq buf (get-buffer buffer-strp))
  4693. +    (switch-to-buffer buf)
  4694. +    (if (eq notify-rexx-port nil)
  4695. +    (old-rexx-notify-kill-buffer buffer-strp)
  4696. +      (amiga-arexx-send-command (concat "ADDRESS " notify-rexx-port "; QUIT") t)
  4697. +      (old-rexx-notify-kill-buffer buf))))
  4698. +-------8<-------------8<-------------8<-------------8<-------------8<--
  4699. +
  4700. +Here is the rexx code for the invoker, it can be copied to ``rexx:g.rexx''
  4701. +to be called from wshell with ``[prompt]g myfile.c WAIT'' or copied
  4702. +to ``s:g'' (or somewhere in path) to be called from the AmigaShell 
  4703. +(make sure to set the ``s'' script bit.
  4704. +-------8<-------------8<-------------8<-------------8<-------------8<--
  4705. +/***[g.rexx]***************************************************/
  4706. +/* An invoker for GNU Emacs.
  4707. + * Copyright © 1993 Christian E. Hopps
  4708. + *
  4709. + * FILES/M,WAIT=STICKY/S,NOBACKUPS/S"
  4710. + *
  4711. + * use WAIT or STICKY option to have g.rexx wait for buffers 
  4712. + * to be killed before returning (same as TurboText's ``WAIT''
  4713. + * option or CED's ``STICKY'')
  4714. + *
  4715. + * NOBACKUPS will cause the files loaded by g.rexx not
  4716. + * to perform backup saves.
  4717. + *
  4718. + * all options aply only to FILES that are specified on this
  4719. + * invocation of g.rexx.
  4720. + *
  4721. + * This program is free software; you can redistribute it and/or modify
  4722. + * it under the terms of the GNU General Public License as published by
  4723. + * the Free Software Foundation; either version 2 of the License, or
  4724. + * (at your option) any later version.
  4725. + *
  4726. + * This program is distributed in the hope that it will be useful,
  4727. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  4728. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  4729. + * GNU General Public License for more details.
  4730. + *
  4731. + * You should have received a copy of the GNU General Public License
  4732. + * along with this program; if not, write to the Free Software
  4733. + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  4734. + *
  4735. + * I can be contacted at:
  4736. + * bix: chopps
  4737. + * uucp: chopps@ro-chp.UUCP (sycom.mi.org!ro-chp!chopps)
  4738. + * 
  4739. + */
  4740. +options results
  4741. +PARSE ARG argv
  4742. +
  4743. +/* wait for buffer to be killed */
  4744. +wait = 0
  4745. +/* files that are being waited on. */
  4746. +waitingfiles = 0
  4747. +
  4748. +/* do not make backups */
  4749. +nobackups = 0
  4750. +
  4751. +/* Parse the args from command line. */
  4752. +idx = 0
  4753. +DO WHILE argv ~= ""
  4754. +    carg = GetNextItem()
  4755. +    uarg = UPPER(carg)
  4756. +    IF uarg = "STICKY" | uarg = "WAIT" THEN
  4757. +    wait = 1
  4758. +    ELSE IF uarg = "NOBACKUPS" THEN
  4759. +    nobackups = 1
  4760. +    ELSE IF uarg = "?" THEN DO
  4761. +    SAY "template: FILES/M,WAIT=STICKY/S,NOBACKUPS/S"
  4762. +    EXIT 0
  4763. +    END
  4764. +    ELSE IF uarg ~= "" THEN DO
  4765. +    IF SUBSTR(uarg,1,5) = "FILES" THEN DO
  4766. +        IF uarg = "FILES" THEN DO
  4767. +        file = GetNextItem()
  4768. +        IF file = "" THEN DO
  4769. +            SAY "template: FILES/M,WAIT=STICKY/S,NOBACKUPS/S"
  4770. +            EXIT 0
  4771. +        END
  4772. +        END
  4773. +        ELSE IF SUBSTR(uarg,6,1) = "=" THEN DO
  4774. +        file = SUBSTR(carg,7)
  4775. +        IF file = "" THEN DO
  4776. +            SAY "template: FILES/M,WAIT=STICKY/S,NOBACKUPS/S"
  4777. +            EXIT 0
  4778. +        END
  4779. +        END
  4780. +
  4781. +    END
  4782. +    ELSE DO
  4783. +        file = carg
  4784. +        IF file = "" THEN DO
  4785. +        SAY "template: FILES/M,WAIT=STICKY/S,NOBACKUPS/S"
  4786. +        EXIT 0
  4787. +        END
  4788. +    END
  4789. +    dir = PRAGMA('Directory')
  4790. +    IF 0 = pos(':',file) THEN DO
  4791. +        IF lc ~= '/' & lc ~= ':' THEN
  4792. +        dir = dir || '/'
  4793. +        filename = dir || file
  4794. +    END
  4795. +    ELSE DO
  4796. +        IF lc ~= '/' & lc ~= ':' THEN
  4797. +        dir = dir || '/'
  4798. +        filename = dir || file
  4799. +    END
  4800. +    filestoload.idx = filename
  4801. +    idx = idx + 1
  4802. +    END
  4803. +END
  4804. +
  4805. +IF wait = 1 THEN DO
  4806. +    start = 1
  4807. +    notifyport = "EMACS_NOTIFY" || start
  4808. +    DO WHILE SHOW('P',notifyport)
  4809. +    start = start + 1
  4810. +    notifyport = "EMACS_NOTIFY" || start
  4811. +    END
  4812. +
  4813. +    notifymp = OPENPORT(notifyport)
  4814. +    IF ~SHOW('P',notifyport) THEN DO
  4815. +    SAY "Cannot initialize the notification port."
  4816. +    EXIT 20
  4817. +    END
  4818. +END
  4819. +
  4820. +/* Load emacs if it is not already running */
  4821. +if (~show('p', 'EMACS1')) THEN DO
  4822. +    ADDRESS COMMAND
  4823. +    'run >NIL: emacs'
  4824. +    'waitforport EMACS1'
  4825. +END
  4826. +
  4827. +ADDRESS EMACS1
  4828. +
  4829. +IF wait = 1 THEN
  4830. +    "(require 'notify-rexx-wait)"
  4831. +
  4832. +/* will return either nil or t */
  4833. +"(symbol-value 'amiga-emacs-iconified)"
  4834. +
  4835. +IF result = "t" THEN
  4836. +    '(amiga-iconify)'
  4837. +
  4838. +fileidx = 0
  4839. +DO WHILE fileidx < idx
  4840. +    '(buffer-name)'
  4841. +    curbuf = RESULT
  4842. +
  4843. +    lisp = ' (progn '
  4844. +    IF curbuf ~= '"*scratch*"' THEN
  4845. +    lisp = lisp || ' (find-file-other-window "' || filestoload.fileidx || '"))'
  4846. +    ELSE
  4847. +    lisp = lisp || ' (find-file "' || filestoload.fileidx || '"))'
  4848. +
  4849. +    ADDRESS EMACS1 lisp
  4850. +
  4851. +    IF nobackups = 1 THEN DO
  4852. +    "(make-local-variable 'make-backup-files)"
  4853. +    '(setq make-backup-files nil)'
  4854. +    END
  4855. +
  4856. +    IF wait = 1 THEN DO
  4857. +    '(setq notify-rexx-port "' || notifyport || '")'
  4858. +    waitingfiles = waitingfiles + 1;
  4859. +    END
  4860. +    fileidx = fileidx + 1
  4861. +END
  4862. +
  4863. +'(amiga-window-to-front)'
  4864. +'(amiga-activate-window)'
  4865. +
  4866. +IF wait = 1 THEN DO
  4867. +    quitflag = 0
  4868. +    DO FOREVER
  4869. +    IF waitingfiles = 0 THEN
  4870. +        EXIT 0
  4871. +    t = WAITPKT(notifyport)
  4872. +
  4873. +    DO FOREVER
  4874. +        p = GETPKT(notifyport)
  4875. +        IF C2D(p) = 0 THEN BREAK
  4876. +        args = GETARG(p)
  4877. +
  4878. +        PARSE VAR args argval args
  4879. +        IF argval = "QUIT" THEN
  4880. +        waitingfiles = waitingfiles - 1
  4881. +
  4882. +        t = REPLY(p,1)
  4883. +    END
  4884. +    END
  4885. +END
  4886. +
  4887. +EXIT 0
  4888. +
  4889. +GetNextItem: PROCEDURE EXPOSE argv
  4890. +ch = LEFT(argv,1)
  4891. +DO WHILE ch = " " | ch = "    "
  4892. +    argv = SUBSTR(argv,2)
  4893. +    ch = LEFT(argv,1)
  4894. +END
  4895. +ch = LEFT(argv,1)
  4896. +IF ch = '"' THEN
  4897. +    PARSE VAR argv '"'string'"' argv
  4898. +ELSE
  4899. +    PARSE VAR argv string argv
  4900. +RETURN string
  4901. +
  4902. +
  4903. +
  4904. +StripWS: PROCEDURE
  4905. +
  4906. +ARG string
  4907. +RETURN string
  4908. +-------8<-------------8<-------------8<-------------8<-------------8<--
  4909. +------------------------
  4910. +The Royal Oak Chophouse >> Chris Hopps
  4911. +Royal Oak, Michigan     >> sycom.mi.org!ro-chp!chopps
  4912. +
  4913. +
  4914. \ No newline at end of file
  4915. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx
  4916. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx    Wed Dec 31 17:00:00 1969
  4917. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx    Sat Sep 28 00:00:00 1996
  4918. @@ -0,0 +1,29 @@
  4919. +/* sayval.rexx
  4920. + * -----------
  4921. + *  -ch3/18/93.
  4922. + *
  4923. + *  call from dos prompt:
  4924. + *
  4925. + *  sayval <some-emacs-symbol-name>
  4926. + *
  4927. + * ex:  sayval amiga-emacs-iconified
  4928. + * 
  4929. + *  Christian E. Hopps.
  4930. + */
  4931. +
  4932. +/* get the first arg from the command line and store in symbol */
  4933. +parse arg symbol
  4934. +
  4935. +/* address the emacs port */
  4936. +address EMACS1
  4937. +
  4938. +/* ask for full results */
  4939. +options results 
  4940. +
  4941. +/* construct lisp inside emacs this will look like this
  4942. + *
  4943. + * (symbol-value 'some-variable-name) */
  4944. +
  4945. +/* call function by quoting the lisp code. */
  4946. +"(symbol-value '" || symbol || ")"
  4947. +say RESULT
  4948. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/README amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/README
  4949. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/README    Wed Dec 31 17:00:00 1969
  4950. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/README    Sat Sep 28 00:00:00 1996
  4951. @@ -0,0 +1,50 @@
  4952. +dtags allows you to quickly lookup the autodocs for the AmigaOS functions
  4953. +while programming. It is a modification of the emacs TAGS facility.
  4954. +
  4955. +For example, you have forgotten the parameters for MakeLink. Your buffer contains:
  4956. +
  4957. +  if (MakeLink(
  4958. +
  4959. +you press the magic key (in my case M-g), and you get in an other buffer:
  4960. +
  4961. +dos.library/MakeLink                                     dos.library/MakeLink
  4962. +
  4963. +   NAME
  4964. +    MakeLink -- Creates a filesystem link (V36)
  4965. +
  4966. +   SYNOPSIS
  4967. +   [...]
  4968. +
  4969. +which should solve all your problems ...
  4970. +
  4971. +To install this facility, you must:
  4972. +
  4973. +a) Have an assign of DOCS: to the directory containing the AmigaOS 2.0 autodocs.
  4974. +
  4975. +b) Copy dtags.el and dtags.elc to your lisp directory (probably gnuemacs:lisp).
  4976. +
  4977. +c) Execute the make-dtags.el file once (with M-x load-file). This will create
  4978. +a file called DTAGS in DOCS: to help emacs find the functions in the autodocs.
  4979. +
  4980. +d) Add the following lines to your .emacs file:
  4981. +
  4982. +(autoload 'visit-dtags-table "dtags" nil t)
  4983. +(autoload 'doc-tag "dtags" nil t)
  4984. +(autoload 'dtags-search "dtags" nil t)
  4985. +(autoload 'list-dtags "dtags" nil t)
  4986. +(autoload 'dtags-apropos "dtags" nil t)
  4987. +(autoload 'make-dtags "dtags" nil t)
  4988. +
  4989. +and optionally a key definition to execute doc-tag (the autodoc lookup function):
  4990. +
  4991. +(define-key global-map "\M-g" 'doc-tag)
  4992. +
  4993. +Usage:
  4994. +-----
  4995. +
  4996. +You just press M-g (if you chose that key). Emacs will prompt you for the
  4997. +function to lookup, but it will propose as a default a word near your
  4998. +cursor. Once this has been chosen, emacs will display the appropriate autodoc.
  4999. +You can enter a substring of the function name, in which case emacs will display
  5000. +the first one that matches it. If you want to see other functions containing the
  5001. +same substring, press M-, (or M-x tags-loop-continue).
  5002. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.el
  5003. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.el    Wed Dec 31 17:00:00 1969
  5004. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.el    Sat Sep 28 00:00:00 1996
  5005. @@ -0,0 +1,237 @@
  5006. +;; Dtags facility for Emacs.
  5007. +;; Copyright (C) 1985, 1986, 1988 Free Software Foundation, Inc.
  5008. +
  5009. +;; This file is part of GNU Emacs.
  5010. +
  5011. +;; GNU Emacs is distributed in the hope that it will be useful,
  5012. +;; but WITHOUT ANY WARRANTY.  No author or distributor
  5013. +;; accepts responsibility to anyone for the consequences of using it
  5014. +;; or for whether it serves any particular purpose or works at all,
  5015. +;; unless he says so in writing.  Refer to the GNU Emacs General Public
  5016. +;; License for full details.
  5017. +
  5018. +;; Everyone is granted permission to copy, modify and redistribute
  5019. +;; GNU Emacs, but only under the conditions described in the
  5020. +;; GNU Emacs General Public License.   A copy of this license is
  5021. +;; supposed to have been given to you along with GNU Emacs so you
  5022. +;; can know your rights and responsibilities.  It should be in a
  5023. +;; file named COPYING.  Among other things, the copyright notice
  5024. +;; and this notice must be preserved on all copies.
  5025. +
  5026. +
  5027. +(provide 'dtags)
  5028. +(load "tags")
  5029. +
  5030. +(defvar dtag-table-files nil
  5031. +  "List of file names covered by current dtag table.
  5032. +nil means it has not been computed yet; do (dtag-table-files) to compute it.")
  5033. +
  5034. +(defvar dtags-file-name "docs:DTAGS"
  5035. +  "Where to find the doc tags, use visit-dtags-table to change it.")
  5036. +
  5037. +(defun visit-dtags-table (file)
  5038. +  "Tell dtags commands to use tag table file FILE.
  5039. +FILE should be the name of a file created with the `etags' program.
  5040. +A directory name is ok too; it means file TAGS in that directory."
  5041. +  (interactive (list (read-file-name "Visit tags table: (default TAGS) "
  5042. +                     default-directory
  5043. +                     (concat default-directory "TAGS")
  5044. +                     t)))
  5045. +  (setq file (expand-file-name file))
  5046. +  (if (file-directory-p file)
  5047. +      (setq file (concat file "DTAGS")))
  5048. +  (setq dtag-table-files nil
  5049. +    dtags-file-name file))
  5050. +
  5051. +(defun visit-dtags-table-buffer ()
  5052. +  "Select the buffer containing the current tag table.
  5053. +This is a file whose name is in the variable tags-file-name."
  5054. +  (or dtags-file-name
  5055. +      (call-interactively 'visit-dtags-table))
  5056. +  (set-buffer (or (get-file-buffer dtags-file-name)
  5057. +          (progn
  5058. +            (setq dtag-table-files nil)
  5059. +            (find-file-noselect dtags-file-name))))
  5060. +  (or (verify-visited-file-modtime (get-file-buffer dtags-file-name))
  5061. +      (cond ((yes-or-no-p "Dtags file has changed, read new contents? ")
  5062. +         (revert-buffer t t)
  5063. +         (setq dtag-table-files nil))))
  5064. +  (or (eq (char-after 1) ?\^L)
  5065. +      (error "File %s not a valid dtag table" dtags-file-name)))
  5066. +
  5067. +(defun dtag-table-files ()
  5068. +  "Return a list of files in the current dtag table.
  5069. +File names returned are absolute."
  5070. +  (save-excursion
  5071. +   (visit-dtags-table-buffer)
  5072. +   (or dtag-table-files
  5073. +       (let (files)
  5074. +    (goto-char (point-min))
  5075. +    (while (not (eobp))
  5076. +      (forward-line 1)
  5077. +      (end-of-line)
  5078. +      (skip-chars-backward "^,\n")
  5079. +      (setq prev (point))
  5080. +      (setq size (read (current-buffer)))
  5081. +      (goto-char prev)
  5082. +      (setq files (cons (expand-file-name
  5083. +                 (buffer-substring (1- (point))
  5084. +                           (save-excursion
  5085. +                         (beginning-of-line)
  5086. +                         (point)))
  5087. +                 (file-name-directory dtags-file-name))
  5088. +                files))
  5089. +      (forward-line 1)
  5090. +      (forward-char size))
  5091. +    (setq dtag-table-files (nreverse files))))))
  5092. +
  5093. +(defun doc-tag (tagname &optional next)
  5094. +  "Find tag (in current tag table) whose name contains TAGNAME.
  5095. + Selects the buffer that the tag is contained in
  5096. +and puts point at its definition.
  5097. + If TAGNAME is a null string, the expression in the buffer
  5098. +around or before point is used as the tag name.
  5099. + If second arg NEXT is non-nil (interactively, with prefix arg),
  5100. +searches for the next tag in the tag table
  5101. +that matches the tagname used in the previous find-tag.
  5102. +
  5103. +See documentation of variable tags-file-name."
  5104. +  (interactive (if current-prefix-arg
  5105. +           '(nil t)
  5106. +         (find-tag-tag "Find tag: ")))
  5107. +  (let (buffer file linebeg startpos)
  5108. +    (save-excursion
  5109. +     (visit-dtags-table-buffer)
  5110. +     (if (not next)
  5111. +     (goto-char (point-min))
  5112. +       (setq tagname last-tag))
  5113. +     (setq last-tag tagname)
  5114. +     (while (progn
  5115. +          (if (not (search-forward tagname nil t))
  5116. +          (error "No %sentries containing %s"
  5117. +             (if next "more " "") tagname))
  5118. +          (not (looking-at "[^\n\177]*\177"))))
  5119. +     (search-forward "\177")
  5120. +     (setq file (expand-file-name (file-of-tag)
  5121. +                  (file-name-directory dtags-file-name)))
  5122. +     (setq linebeg
  5123. +       (buffer-substring (1- (point))
  5124. +                 (save-excursion (beginning-of-line) (point))))
  5125. +     (search-forward ",")
  5126. +     (setq startpos (read (current-buffer))))
  5127. +    (let ((win (selected-window)))
  5128. +      (find-file-other-window file)
  5129. +      (widen)
  5130. +      (push-mark)
  5131. +      (let ((offset 1000)
  5132. +        found
  5133. +        (pat (concat (regexp-quote linebeg) "[ \t]")))
  5134. +    (or startpos (setq startpos (point-min)))
  5135. +    (while (and (not found)
  5136. +            (progn
  5137. +              (goto-char (- startpos offset))
  5138. +              (not (bobp))))
  5139. +      (setq found
  5140. +        (re-search-forward pat (+ startpos offset) t))
  5141. +      (setq offset (* 3 offset)))
  5142. +    (or found
  5143. +        (re-search-forward pat nil t)
  5144. +        (error "%s not found in %s" pat file)))
  5145. +      (beginning-of-line)
  5146. +      (recenter 0)
  5147. +      (select-window win)))
  5148. +  (setq tags-loop-form '(doc-tag nil t))
  5149. +  ;; Return t in case used as the tags-loop-form.
  5150. +  t)
  5151. +
  5152. +(defun dtags-search (regexp)
  5153. +  "Search through all files listed in tag table for match for REGEXP.
  5154. +Stops when a match is found.
  5155. +To continue searching for next match, use command \\[tags-loop-continue].
  5156. +
  5157. +See documentation of variable tags-file-name."
  5158. +  (interactive "sTags search (regexp): ")
  5159. +  (if (and (equal regexp "")
  5160. +       (eq (car tags-loop-form) 're-search-forward))
  5161. +      (tags-loop-continue nil)
  5162. +    (setq tags-loop-form
  5163. +      (list 're-search-forward regexp nil t))
  5164. +    (setq next-file-list (dtag-table-files))
  5165. +    (next-file)
  5166. +    (tags-loop-continue)))
  5167. +
  5168. +(defun list-dtags (string)
  5169. +  "Display list of dtags in file FILE.
  5170. +FILE should not contain a directory spec
  5171. +unless it has one in the dtag table."
  5172. +  (interactive "sList dtags (in file): ")
  5173. +  (with-output-to-temp-buffer "*Dtags List*"
  5174. +    (princ "Dtags in file ")
  5175. +    (princ string)
  5176. +    (terpri)
  5177. +    (save-excursion
  5178. +     (visit-dtags-table-buffer)
  5179. +     (goto-char 1)
  5180. +     (search-forward (concat "\f\n" string ","))
  5181. +     (forward-line 1)
  5182. +     (while (not (or (eobp) (looking-at "\f")))
  5183. +       (princ (buffer-substring (point)
  5184. +                (progn (skip-chars-forward "^\177")
  5185. +                       (point))))
  5186. +       (terpri)
  5187. +       (forward-line 1)))))
  5188. +
  5189. +(defun dtags-apropos (string)
  5190. +  "Display list of all dtags in dtag table REGEXP matches."
  5191. +  (interactive "sDtag apropos (regexp): ")
  5192. +  (with-output-to-temp-buffer "*Dtags List*"
  5193. +    (princ "Dtags matching regexp ")
  5194. +    (prin1 string)
  5195. +    (terpri)
  5196. +    (save-excursion
  5197. +     (visit-dtags-table-buffer)
  5198. +     (goto-char 1)
  5199. +     (while (re-search-forward string nil t)
  5200. +       (beginning-of-line)
  5201. +       (princ (buffer-substring (point)
  5202. +                (progn (skip-chars-forward "^\177")
  5203. +                       (point))))
  5204. +       (terpri)
  5205. +       (forward-line 1)))))
  5206. +
  5207. +(defun make-dtags (file)
  5208. +  (interactive "FDoc file: ")
  5209. +  (setq file (expand-file-name file))
  5210. +  (save-excursion
  5211. +    (find-file-noselect dtags-file-name)
  5212. +    (let ((buf-doc (get-buffer-create "*make-doc-temp*"))
  5213. +      (buf-tags (get-buffer-create dtags-file-name)))
  5214. +      ; First, create the header for the tags
  5215. +      (set-buffer buf-tags)
  5216. +      (goto-char (point-max))
  5217. +      (insert ?\f ?\n file ?,)
  5218. +      (let ((size-pos (point)))
  5219. +    (insert ?\n)
  5220. +    ; Now, we prepare the doc file
  5221. +    (set-buffer buf-doc)
  5222. +        (erase-buffer)
  5223. +    (insert-file file)
  5224. +    (goto-char (point-min))
  5225. +        ; We are now ready to find entries
  5226. +    (while (and (search-forward "\f" nil t)
  5227. +            (progn
  5228. +              (skip-chars-forward "\n")
  5229. +              (not (eobp))))
  5230. +      (let ((beg (point)))
  5231. +        (skip-chars-forward "^ \t")
  5232. +        (let ((fn (buffer-substring beg (point)))
  5233. +          (line (1+ (count-lines 1 beg))))
  5234. +          (set-buffer buf-tags)
  5235. +          (insert fn 127 (int-to-string line) ?, (int-to-string beg) ?\n)
  5236. +          (set-buffer buf-doc))))
  5237. +    (set-buffer buf-tags)
  5238. +    (let ((size (- (point) size-pos 1)))
  5239. +      (goto-char size-pos)
  5240. +      (insert (int-to-string size))))))
  5241. +  (pop-to-buffer (get-buffer dtags-file-name) t))
  5242. +
  5243. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.elc and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.elc differ
  5244. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el
  5245. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el    Wed Dec 31 17:00:00 1969
  5246. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el    Sat Sep 28 00:00:00 1996
  5247. @@ -0,0 +1,47 @@
  5248. +(require 'dtags)
  5249. +(make-dtags "docs:amiga.lib.doc")
  5250. +(make-dtags "docs:asl.doc")
  5251. +(make-dtags "docs:audio.doc")
  5252. +(make-dtags "docs:battclock.doc")
  5253. +(make-dtags "docs:battmem.doc")
  5254. +(make-dtags "docs:cia.doc")
  5255. +(make-dtags "docs:clipboard.doc")
  5256. +(make-dtags "docs:commodities.doc")
  5257. +(make-dtags "docs:console.doc")
  5258. +(make-dtags "docs:cx_lib.doc")
  5259. +(make-dtags "docs:debug.doc")
  5260. +(make-dtags "docs:disk.doc")
  5261. +(make-dtags "docs:diskfont.doc")
  5262. +(make-dtags "docs:dos.doc")
  5263. +(make-dtags "docs:exec.doc")
  5264. +(make-dtags "docs:expansion.doc")
  5265. +(make-dtags "docs:filesysres.doc")
  5266. +(make-dtags "docs:gadtools.doc")
  5267. +(make-dtags "docs:gameport.doc")
  5268. +(make-dtags "docs:graphics.doc")
  5269. +(make-dtags "docs:icon.doc")
  5270. +(make-dtags "docs:iffparse.doc")
  5271. +(make-dtags "docs:input.doc")
  5272. +(make-dtags "docs:intuition.doc")
  5273. +(make-dtags "docs:keyboard.doc")
  5274. +(make-dtags "docs:keymap.doc")
  5275. +(make-dtags "docs:layers.doc")
  5276. +(make-dtags "docs:mathffp.doc")
  5277. +(make-dtags "docs:mathieeedoubbas.doc")
  5278. +(make-dtags "docs:mathieeedoubtrans.doc")
  5279. +(make-dtags "docs:mathieeesingbas.doc")
  5280. +(make-dtags "docs:mathieeesingtrans.doc")
  5281. +(make-dtags "docs:mathtrans.doc")
  5282. +(make-dtags "docs:misc.doc")
  5283. +(make-dtags "docs:narrator.doc")
  5284. +(make-dtags "docs:parallel.doc")
  5285. +(make-dtags "docs:potgo.doc")
  5286. +(make-dtags "docs:printer.doc")
  5287. +(make-dtags "docs:rexxsyslib.doc")
  5288. +(make-dtags "docs:serial.doc")
  5289. +(make-dtags "docs:timer.doc")
  5290. +(make-dtags "docs:trackdisk.doc")
  5291. +(make-dtags "docs:translator.doc")
  5292. +(make-dtags "docs:utility.doc")
  5293. +(make-dtags "docs:wb.doc")
  5294. +
  5295. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/README amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/README
  5296. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/README    Wed Dec 31 17:00:00 1969
  5297. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/README    Sat Sep 28 00:00:00 1996
  5298. @@ -0,0 +1,45 @@
  5299. +This directory contains several utilities sent by Tapio Hesikanen.
  5300. +
  5301. +Here follow a few explanations:
  5302. +
  5303. +From: hessu@fipnet.fi (Tapio Heiskanen)
  5304. +To: dgay@di.epfl.ch
  5305. +Subject: Here's a couple of software for you
  5306. +
  5307. +I was in need of fakemail and movemail, so I made them with some help of my
  5308. +friend. Both of those programs are in GNUEmacs distibution, so I thought if
  5309. +you'd like to include them.
  5310. +
  5311. +They should be developed further, but they fill my needs.
  5312. +If you make any changes to them, please send sources and binaries to me.
  5313. +
  5314. +I suppose you know how the progs should work so I won't write any docs for
  5315. +them.
  5316. +
  5317. +I also have an AREXX version of inews made up. If you would like to have,
  5318. +I could send to you. Maybe it should be in C, but REXX was enough for me.
  5319. +
  5320. +--
  5321. + Tapio (hessu) Heiskanen  _|_  Internet: hessu@diode.fipnet.fi
  5322. +  Sarkiniementie 11 B 18  \ /  ICBM: 60 08 58 N / 24 52 53 E
  5323. +         00210  HELSINKI  _Y_  Telephone: +358 0 678284
  5324. +                 FINLAND   |   Data: +358 0 6822206
  5325. +
  5326. +From: hessu@fipnet.fi (Tapio Heiskanen)
  5327. +To: dgay@di.epfl.ch
  5328. +Subject: Re: GNU Emacs 18.58, Amiga port 1.24
  5329. +
  5330. +[...]
  5331. +
  5332. +BTW: Included is a emacs.rexx script I made to ease my life. It checks first
  5333. +if the REXX-port exists and then starts emacs or just sends a rexx command
  5334. +respectively.
  5335. +
  5336. +--
  5337. + Tapio (hessu) Heiskanen  _|_  Internet: hessu@diode.fipnet.fi
  5338. +  Sarkiniementie 11 B 18  \ /  ICBM: 60 08 58 N / 24 52 53 E
  5339. +         00210  HELSINKI  _Y_  Telephone: +358 0 678284
  5340. +                 FINLAND   |   Data: +358 0 6822206
  5341. +
  5342. +distinews.lha contains directions for installing GNUS, the emacs news-reader,
  5343. +and a replacement for the inews command.
  5344. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/distinews.lha and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/distinews.lha differ
  5345. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx
  5346. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx    Wed Dec 31 17:00:00 1969
  5347. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx    Sat Sep 28 00:00:00 1996
  5348. @@ -0,0 +1,25 @@
  5349. +/* emacs.rexx */
  5350. +
  5351. +
  5352. +parse arg params
  5353. +id=pragma('id')
  5354. +
  5355. +if ~show('P', 'EMACS1') then do
  5356. +    if ~open(out, 't:emacs', 'w') then do
  5357. +        say "EMACS.REXX: Can't open temporary file!"
  5358. +        exit 5
  5359. +    end
  5360. +    call writeln(out, 'stack 49152')
  5361. +    call writeln(out, 'run >nil: <nil: temacs' params)
  5362. +    call writeln(out, 'stack 16384')
  5363. +    call close(out)
  5364. +    address command 'execute t:emacs'
  5365. +    exit
  5366. +end
  5367. +
  5368. +
  5369. +if word(params,1)='-f' then do
  5370. +    address 'EMACS1' '('subword(params, 2)')'
  5371. +    exit
  5372. +end
  5373. +address 'EMACS1' '(find-file "'params'")'
  5374. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc
  5375. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc    Wed Dec 31 17:00:00 1969
  5376. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc    Sat Sep 28 00:00:00 1996
  5377. @@ -0,0 +1,6 @@
  5378. +older fakemail.o fakemail.c
  5379. +if warn
  5380. +   incver version.h
  5381. +endif
  5382. +lc -L -M -E fakemail.c
  5383. +protect fakemail +p
  5384. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail differ
  5385. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c
  5386. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c    Wed Dec 31 17:00:00 1969
  5387. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c    Sat Sep 28 00:00:00 1996
  5388. @@ -0,0 +1,68 @@
  5389. +/*
  5390. + * FAKEMAIL.C
  5391. + *
  5392. + * compile: cc
  5393. + *
  5394. + * Written by Tapio Heiskanen
  5395. + *
  5396. + * Copyright (c) 1992 Ferry Island Technologies
  5397. + * All rights reserved
  5398. + *
  5399. + * Created: 20-Jul-92
  5400. + */
  5401. +
  5402. +#include "version.h"
  5403. +
  5404. +#include <proto/dos.h>
  5405. +#include <stdio.h>
  5406. +#include <stdlib.h>
  5407. +
  5408. +char *version="$VER: fakemail V"VERSION;
  5409. +
  5410. +void main(int ac, char **arg)
  5411. +    {
  5412. +    char buf[256], hdr[256], name[256];
  5413. +    FILE *fifo, *sign;
  5414. +    int header=1;
  5415. +
  5416. +    sprintf(name, "T:fakemail%d", (int)name);
  5417. +
  5418. +    if(!(fifo=fopen(name, "w")))
  5419. +        {
  5420. +        printf("FAKEMAIL: Can't open temporary file %s\n", name);
  5421. +        exit(10);
  5422. +        }
  5423. +
  5424. +/* pipe stdin to t:<name> */
  5425. +
  5426. +    while(fgets(buf, 256, stdin))
  5427. +        {
  5428. +        if(*buf=='\n' && header)
  5429. +            if(sign=fopen("uulib:.fakemailhdrs", "r"))
  5430. +                {        
  5431. +                while(fgets(hdr, 256, sign))
  5432. +                    fputs(hdr, fifo);
  5433. +                fclose(sign);
  5434. +                header=0;
  5435. +                }
  5436. +        fputs(buf, fifo);
  5437. +        }
  5438. +
  5439. +
  5440. +/* cat uulib:.signature to t:<name> */
  5441. +
  5442. +    if(sign=fopen("uulib:.signature", "r"))
  5443. +        {        
  5444. +        while(fgets(buf, 256, sign))
  5445. +            fputs(buf, fifo);
  5446. +        fclose(sign);
  5447. +        }
  5448. +    fclose(fifo);
  5449. +
  5450. +/* give the file for sendmail */
  5451. +
  5452. +    sprintf(name, "sendmail -f $user <T:fakemail%d", (int)name);
  5453. +    Execute(name, 0, 0);
  5454. +    sprintf(name, "T:fakemail%d", (int)name);
  5455. +    remove(name);
  5456. +    }
  5457. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts
  5458. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts    Wed Dec 31 17:00:00 1969
  5459. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts    Sat Sep 28 00:00:00 1996
  5460. @@ -0,0 +1,7 @@
  5461. +-rr
  5462. +-v
  5463. +-cs
  5464. +-ms
  5465. +-Lc
  5466. +-Ld
  5467. +-Pfakemail
  5468. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h
  5469. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h    Wed Dec 31 17:00:00 1969
  5470. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h    Sat Sep 28 00:00:00 1996
  5471. @@ -0,0 +1 @@
  5472. +#define VERSION "0.06"
  5473. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc
  5474. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc    Wed Dec 31 17:00:00 1969
  5475. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc    Sat Sep 28 00:00:00 1996
  5476. @@ -0,0 +1,6 @@
  5477. +older movemail.o movemail.c
  5478. +if warn
  5479. +   incver version.h
  5480. +endif
  5481. +lc -L -M -E movemail.c
  5482. +protect movemail +p
  5483. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail differ
  5484. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c
  5485. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c    Wed Dec 31 17:00:00 1969
  5486. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c    Sat Sep 28 00:00:00 1996
  5487. @@ -0,0 +1,44 @@
  5488. +/*
  5489. + * MOVEMAIL.C
  5490. + *
  5491. + * compile: cc
  5492. + *
  5493. + * Written by Tapio Heiskanen
  5494. + *
  5495. + * Copyright (c) 1992 Ferry Island Technologies
  5496. + * All rights reserved
  5497. + *
  5498. + * Created: 22-Jul-92
  5499. + */
  5500. +
  5501. +#include "version.h"
  5502. +
  5503. +#include <proto/dos.h>
  5504. +#include <stdio.h>
  5505. +#include <stdlib.h>
  5506. +
  5507. +char *version="$VER: movemail V"VERSION;
  5508. +
  5509. +void main(int ac, char **arg)
  5510. +    {
  5511. +    char buf[256];
  5512. +    FILE *tofile, *spoolfile;
  5513. +
  5514. +    if(!(spoolfile=fopen(arg[1], "r")))
  5515. +        {
  5516. +        printf("movemail: Can't open spool file %s\n", arg[1]);
  5517. +        exit(10);
  5518. +        }
  5519. +
  5520. +    if(!(tofile=fopen(arg[2], "a")))
  5521. +        {
  5522. +        printf("movemail: Can't open to file %s\n", arg[2]);
  5523. +        exit(10);
  5524. +        }
  5525. +
  5526. +    while(fgets(buf, 256, spoolfile))
  5527. +        fputs(buf, tofile);
  5528. +
  5529. +    fcloseall();
  5530. +    remove(arg[1]);
  5531. +    }
  5532. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts
  5533. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts    Wed Dec 31 17:00:00 1969
  5534. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts    Sat Sep 28 00:00:00 1996
  5535. @@ -0,0 +1,7 @@
  5536. +-rr
  5537. +-v
  5538. +-cs
  5539. +-ms
  5540. +-Lc
  5541. +-Ld
  5542. +-Pmovemail
  5543. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h
  5544. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h    Wed Dec 31 17:00:00 1969
  5545. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h    Sat Sep 28 00:00:00 1996
  5546. @@ -0,0 +1 @@
  5547. +#define VERSION "0.02"
  5548. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/README amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/README
  5549. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/README    Wed Dec 31 17:00:00 1969
  5550. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/README    Sat Sep 28 00:00:00 1996
  5551. @@ -0,0 +1,24 @@
  5552. +Hi David !
  5553. +
  5554. +Just got your Emacs-port for my A 3000 - good work ! As I didn't have a
  5555. +tool for creating public screens, too, I simply wrote one. It's appended
  5556. +here (uuencoded). If you like it, include it in your next distribution.
  5557. +
  5558. +Regards, Michael
  5559. +
  5560. +------------------------------------------------------------------------------
  5561. +Michael Kaiser                                     / Only my personal opinions
  5562. +Universitaet Karlsruhe
  5563. +Institut fuer Prozessrechentechnik und Robotik    Internet : kaiser@ira.uka.de
  5564. +Postfach 6980                                     Tel.     : +49 721 608-4051
  5565. +D-7500 Karlsruhe 1, FR Germany                    FAX      : +49 721 606-740
  5566. +------------------------------------------------------------------------------
  5567. +Privat:
  5568. +Rintheimer Strasse 59                                     // Have you
  5569. +D-7500 Karlsruhe 1, FR Germany                           // hugged
  5570. +                                                     \\ // your 
  5571. +Tel.  : (+49) (721) 61 18 19                          \X/ Amiga today ?
  5572. +Komm. : Michael_Kaiser@KA.maus.de                        [A3000/20/260]
  5573. +------------------------------------------------------------------------------
  5574. +"Die schiessen auf mein schoenes Auto ... !"                         (Canardo)
  5575. +------------------------------------------------------------------------------
  5576. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/pub and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/pub differ
  5577. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING
  5578. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING    Wed Dec 31 17:00:00 1969
  5579. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING    Sat Sep 28 00:00:00 1996
  5580. @@ -0,0 +1,339 @@
  5581. +            GNU GENERAL PUBLIC LICENSE
  5582. +               Version 2, June 1991
  5583. +
  5584. + Copyright (C) 1989, 1991 Free Software Foundation, Inc.
  5585. +                          675 Mass Ave, Cambridge, MA 02139, USA
  5586. + Everyone is permitted to copy and distribute verbatim copies
  5587. + of this license document, but changing it is not allowed.
  5588. +
  5589. +                Preamble
  5590. +
  5591. +  The licenses for most software are designed to take away your
  5592. +freedom to share and change it.  By contrast, the GNU General Public
  5593. +License is intended to guarantee your freedom to share and change free
  5594. +software--to make sure the software is free for all its users.  This
  5595. +General Public License applies to most of the Free Software
  5596. +Foundation's software and to any other program whose authors commit to
  5597. +using it.  (Some other Free Software Foundation software is covered by
  5598. +the GNU Library General Public License instead.)  You can apply it to
  5599. +your programs, too.
  5600. +
  5601. +  When we speak of free software, we are referring to freedom, not
  5602. +price.  Our General Public Licenses are designed to make sure that you
  5603. +have the freedom to distribute copies of free software (and charge for
  5604. +this service if you wish), that you receive source code or can get it
  5605. +if you want it, that you can change the software or use pieces of it
  5606. +in new free programs; and that you know you can do these things.
  5607. +
  5608. +  To protect your rights, we need to make restrictions that forbid
  5609. +anyone to deny you these rights or to ask you to surrender the rights.
  5610. +These restrictions translate to certain responsibilities for you if you
  5611. +distribute copies of the software, or if you modify it.
  5612. +
  5613. +  For example, if you distribute copies of such a program, whether
  5614. +gratis or for a fee, you must give the recipients all the rights that
  5615. +you have.  You must make sure that they, too, receive or can get the
  5616. +source code.  And you must show them these terms so they know their
  5617. +rights.
  5618. +
  5619. +  We protect your rights with two steps: (1) copyright the software, and
  5620. +(2) offer you this license which gives you legal permission to copy,
  5621. +distribute and/or modify the software.
  5622. +
  5623. +  Also, for each author's protection and ours, we want to make certain
  5624. +that everyone understands that there is no warranty for this free
  5625. +software.  If the software is modified by someone else and passed on, we
  5626. +want its recipients to know that what they have is not the original, so
  5627. +that any problems introduced by others will not reflect on the original
  5628. +authors' reputations.
  5629. +
  5630. +  Finally, any free program is threatened constantly by software
  5631. +patents.  We wish to avoid the danger that redistributors of a free
  5632. +program will individually obtain patent licenses, in effect making the
  5633. +program proprietary.  To prevent this, we have made it clear that any
  5634. +patent must be licensed for everyone's free use or not licensed at all.
  5635. +
  5636. +  The precise terms and conditions for copying, distribution and
  5637. +modification follow.
  5638. +
  5639. +            GNU GENERAL PUBLIC LICENSE
  5640. +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  5641. +
  5642. +  0. This License applies to any program or other work which contains
  5643. +a notice placed by the copyright holder saying it may be distributed
  5644. +under the terms of this General Public License.  The "Program", below,
  5645. +refers to any such program or work, and a "work based on the Program"
  5646. +means either the Program or any derivative work under copyright law:
  5647. +that is to say, a work containing the Program or a portion of it,
  5648. +either verbatim or with modifications and/or translated into another
  5649. +language.  (Hereinafter, translation is included without limitation in
  5650. +the term "modification".)  Each licensee is addressed as "you".
  5651. +
  5652. +Activities other than copying, distribution and modification are not
  5653. +covered by this License; they are outside its scope.  The act of
  5654. +running the Program is not restricted, and the output from the Program
  5655. +is covered only if its contents constitute a work based on the
  5656. +Program (independent of having been made by running the Program).
  5657. +Whether that is true depends on what the Program does.
  5658. +
  5659. +  1. You may copy and distribute verbatim copies of the Program's
  5660. +source code as you receive it, in any medium, provided that you
  5661. +conspicuously and appropriately publish on each copy an appropriate
  5662. +copyright notice and disclaimer of warranty; keep intact all the
  5663. +notices that refer to this License and to the absence of any warranty;
  5664. +and give any other recipients of the Program a copy of this License
  5665. +along with the Program.
  5666. +
  5667. +You may charge a fee for the physical act of transferring a copy, and
  5668. +you may at your option offer warranty protection in exchange for a fee.
  5669. +
  5670. +  2. You may modify your copy or copies of the Program or any portion
  5671. +of it, thus forming a work based on the Program, and copy and
  5672. +distribute such modifications or work under the terms of Section 1
  5673. +above, provided that you also meet all of these conditions:
  5674. +
  5675. +    a) You must cause the modified files to carry prominent notices
  5676. +    stating that you changed the files and the date of any change.
  5677. +
  5678. +    b) You must cause any work that you distribute or publish, that in
  5679. +    whole or in part contains or is derived from the Program or any
  5680. +    part thereof, to be licensed as a whole at no charge to all third
  5681. +    parties under the terms of this License.
  5682. +
  5683. +    c) If the modified program normally reads commands interactively
  5684. +    when run, you must cause it, when started running for such
  5685. +    interactive use in the most ordinary way, to print or display an
  5686. +    announcement including an appropriate copyright notice and a
  5687. +    notice that there is no warranty (or else, saying that you provide
  5688. +    a warranty) and that users may redistribute the program under
  5689. +    these conditions, and telling the user how to view a copy of this
  5690. +    License.  (Exception: if the Program itself is interactive but
  5691. +    does not normally print such an announcement, your work based on
  5692. +    the Program is not required to print an announcement.)
  5693. +
  5694. +These requirements apply to the modified work as a whole.  If
  5695. +identifiable sections of that work are not derived from the Program,
  5696. +and can be reasonably considered independent and separate works in
  5697. +themselves, then this License, and its terms, do not apply to those
  5698. +sections when you distribute them as separate works.  But when you
  5699. +distribute the same sections as part of a whole which is a work based
  5700. +on the Program, the distribution of the whole must be on the terms of
  5701. +this License, whose permissions for other licensees extend to the
  5702. +entire whole, and thus to each and every part regardless of who wrote it.
  5703. +
  5704. +Thus, it is not the intent of this section to claim rights or contest
  5705. +your rights to work written entirely by you; rather, the intent is to
  5706. +exercise the right to control the distribution of derivative or
  5707. +collective works based on the Program.
  5708. +
  5709. +In addition, mere aggregation of another work not based on the Program
  5710. +with the Program (or with a work based on the Program) on a volume of
  5711. +a storage or distribution medium does not bring the other work under
  5712. +the scope of this License.
  5713. +
  5714. +  3. You may copy and distribute the Program (or a work based on it,
  5715. +under Section 2) in object code or executable form under the terms of
  5716. +Sections 1 and 2 above provided that you also do one of the following:
  5717. +
  5718. +    a) Accompany it with the complete corresponding machine-readable
  5719. +    source code, which must be distributed under the terms of Sections
  5720. +    1 and 2 above on a medium customarily used for software interchange; or,
  5721. +
  5722. +    b) Accompany it with a written offer, valid for at least three
  5723. +    years, to give any third party, for a charge no more than your
  5724. +    cost of physically performing source distribution, a complete
  5725. +    machine-readable copy of the corresponding source code, to be
  5726. +    distributed under the terms of Sections 1 and 2 above on a medium
  5727. +    customarily used for software interchange; or,
  5728. +
  5729. +    c) Accompany it with the information you received as to the offer
  5730. +    to distribute corresponding source code.  (This alternative is
  5731. +    allowed only for noncommercial distribution and only if you
  5732. +    received the program in object code or executable form with such
  5733. +    an offer, in accord with Subsection b above.)
  5734. +
  5735. +The source code for a work means the preferred form of the work for
  5736. +making modifications to it.  For an executable work, complete source
  5737. +code means all the source code for all modules it contains, plus any
  5738. +associated interface definition files, plus the scripts used to
  5739. +control compilation and installation of the executable.  However, as a
  5740. +special exception, the source code distributed need not include
  5741. +anything that is normally distributed (in either source or binary
  5742. +form) with the major components (compiler, kernel, and so on) of the
  5743. +operating system on which the executable runs, unless that component
  5744. +itself accompanies the executable.
  5745. +
  5746. +If distribution of executable or object code is made by offering
  5747. +access to copy from a designated place, then offering equivalent
  5748. +access to copy the source code from the same place counts as
  5749. +distribution of the source code, even though third parties are not
  5750. +compelled to copy the source along with the object code.
  5751. +
  5752. +  4. You may not copy, modify, sublicense, or distribute the Program
  5753. +except as expressly provided under this License.  Any attempt
  5754. +otherwise to copy, modify, sublicense or distribute the Program is
  5755. +void, and will automatically terminate your rights under this License.
  5756. +However, parties who have received copies, or rights, from you under
  5757. +this License will not have their licenses terminated so long as such
  5758. +parties remain in full compliance.
  5759. +
  5760. +  5. You are not required to accept this License, since you have not
  5761. +signed it.  However, nothing else grants you permission to modify or
  5762. +distribute the Program or its derivative works.  These actions are
  5763. +prohibited by law if you do not accept this License.  Therefore, by
  5764. +modifying or distributing the Program (or any work based on the
  5765. +Program), you indicate your acceptance of this License to do so, and
  5766. +all its terms and conditions for copying, distributing or modifying
  5767. +the Program or works based on it.
  5768. +
  5769. +  6. Each time you redistribute the Program (or any work based on the
  5770. +Program), the recipient automatically receives a license from the
  5771. +original licensor to copy, distribute or modify the Program subject to
  5772. +these terms and conditions.  You may not impose any further
  5773. +restrictions on the recipients' exercise of the rights granted herein.
  5774. +You are not responsible for enforcing compliance by third parties to
  5775. +this License.
  5776. +
  5777. +  7. If, as a consequence of a court judgment or allegation of patent
  5778. +infringement or for any other reason (not limited to patent issues),
  5779. +conditions are imposed on you (whether by court order, agreement or
  5780. +otherwise) that contradict the conditions of this License, they do not
  5781. +excuse you from the conditions of this License.  If you cannot
  5782. +distribute so as to satisfy simultaneously your obligations under this
  5783. +License and any other pertinent obligations, then as a consequence you
  5784. +may not distribute the Program at all.  For example, if a patent
  5785. +license would not permit royalty-free redistribution of the Program by
  5786. +all those who receive copies directly or indirectly through you, then
  5787. +the only way you could satisfy both it and this License would be to
  5788. +refrain entirely from distribution of the Program.
  5789. +
  5790. +If any portion of this section is held invalid or unenforceable under
  5791. +any particular circumstance, the balance of the section is intended to
  5792. +apply and the section as a whole is intended to apply in other
  5793. +circumstances.
  5794. +
  5795. +It is not the purpose of this section to induce you to infringe any
  5796. +patents or other property right claims or to contest validity of any
  5797. +such claims; this section has the sole purpose of protecting the
  5798. +integrity of the free software distribution system, which is
  5799. +implemented by public license practices.  Many people have made
  5800. +generous contributions to the wide range of software distributed
  5801. +through that system in reliance on consistent application of that
  5802. +system; it is up to the author/donor to decide if he or she is willing
  5803. +to distribute software through any other system and a licensee cannot
  5804. +impose that choice.
  5805. +
  5806. +This section is intended to make thoroughly clear what is believed to
  5807. +be a consequence of the rest of this License.
  5808. +
  5809. +  8. If the distribution and/or use of the Program is restricted in
  5810. +certain countries either by patents or by copyrighted interfaces, the
  5811. +original copyright holder who places the Program under this License
  5812. +may add an explicit geographical distribution limitation excluding
  5813. +those countries, so that distribution is permitted only in or among
  5814. +countries not thus excluded.  In such case, this License incorporates
  5815. +the limitation as if written in the body of this License.
  5816. +
  5817. +  9. The Free Software Foundation may publish revised and/or new versions
  5818. +of the General Public License from time to time.  Such new versions will
  5819. +be similar in spirit to the present version, but may differ in detail to
  5820. +address new problems or concerns.
  5821. +
  5822. +Each version is given a distinguishing version number.  If the Program
  5823. +specifies a version number of this License which applies to it and "any
  5824. +later version", you have the option of following the terms and conditions
  5825. +either of that version or of any later version published by the Free
  5826. +Software Foundation.  If the Program does not specify a version number of
  5827. +this License, you may choose any version ever published by the Free Software
  5828. +Foundation.
  5829. +
  5830. +  10. If you wish to incorporate parts of the Program into other free
  5831. +programs whose distribution conditions are different, write to the author
  5832. +to ask for permission.  For software which is copyrighted by the Free
  5833. +Software Foundation, write to the Free Software Foundation; we sometimes
  5834. +make exceptions for this.  Our decision will be guided by the two goals
  5835. +of preserving the free status of all derivatives of our free software and
  5836. +of promoting the sharing and reuse of software generally.
  5837. +
  5838. +                NO WARRANTY
  5839. +
  5840. +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  5841. +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
  5842. +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  5843. +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
  5844. +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  5845. +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
  5846. +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  5847. +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
  5848. +REPAIR OR CORRECTION.
  5849. +
  5850. +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  5851. +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  5852. +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  5853. +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
  5854. +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
  5855. +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
  5856. +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
  5857. +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
  5858. +POSSIBILITY OF SUCH DAMAGES.
  5859. +
  5860. +             END OF TERMS AND CONDITIONS
  5861. +
  5862. +    Appendix: How to Apply These Terms to Your New Programs
  5863. +
  5864. +  If you develop a new program, and you want it to be of the greatest
  5865. +possible use to the public, the best way to achieve this is to make it
  5866. +free software which everyone can redistribute and change under these terms.
  5867. +
  5868. +  To do so, attach the following notices to the program.  It is safest
  5869. +to attach them to the start of each source file to most effectively
  5870. +convey the exclusion of warranty; and each file should have at least
  5871. +the "copyright" line and a pointer to where the full notice is found.
  5872. +
  5873. +    <one line to give the program's name and a brief idea of what it does.>
  5874. +    Copyright (C) 19yy  <name of author>
  5875. +
  5876. +    This program is free software; you can redistribute it and/or modify
  5877. +    it under the terms of the GNU General Public License as published by
  5878. +    the Free Software Foundation; either version 2 of the License, or
  5879. +    (at your option) any later version.
  5880. +
  5881. +    This program is distributed in the hope that it will be useful,
  5882. +    but WITHOUT ANY WARRANTY; without even the implied warranty of
  5883. +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  5884. +    GNU General Public License for more details.
  5885. +
  5886. +    You should have received a copy of the GNU General Public License
  5887. +    along with this program; if not, write to the Free Software
  5888. +    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  5889. +
  5890. +Also add information on how to contact you by electronic and paper mail.
  5891. +
  5892. +If the program is interactive, make it output a short notice like this
  5893. +when it starts in an interactive mode:
  5894. +
  5895. +    Gnomovision version 69, Copyright (C) 19yy name of author
  5896. +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
  5897. +    This is free software, and you are welcome to redistribute it
  5898. +    under certain conditions; type `show c' for details.
  5899. +
  5900. +The hypothetical commands `show w' and `show c' should show the appropriate
  5901. +parts of the General Public License.  Of course, the commands you use may
  5902. +be called something other than `show w' and `show c'; they could even be
  5903. +mouse-clicks or menu items--whatever suits your program.
  5904. +
  5905. +You should also get your employer (if you work as a programmer) or your
  5906. +school, if any, to sign a "copyright disclaimer" for the program, if
  5907. +necessary.  Here is a sample; alter the names:
  5908. +
  5909. +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  5910. +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
  5911. +
  5912. +  <signature of Ty Coon>, 1 April 1989
  5913. +  Ty Coon, President of Vice
  5914. +
  5915. +This General Public License does not permit incorporating your program into
  5916. +proprietary programs.  If your program is a subroutine library, you may
  5917. +consider it more useful to permit linking proprietary applications with the
  5918. +library.  If this is what you want to do, use the GNU Library General
  5919. +Public License instead of this License.
  5920. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING.info differ
  5921. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/Emacs.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/Emacs.info differ
  5922. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_asm.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_asm.info differ
  5923. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_c.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_c.info differ
  5924. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_el.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_el.info differ
  5925. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_emacs.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_emacs.info differ
  5926. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_h.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_h.info differ
  5927. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_rexx.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_rexx.info differ
  5928. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.el
  5929. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.el    Wed Dec 31 17:00:00 1969
  5930. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.el    Sat Sep 28 00:00:00 1996
  5931. @@ -0,0 +1,49 @@
  5932. +;;
  5933. +;;      A new icon-creating scheme.
  5934. +;;  When creating icons, the following replacement routine searches
  5935. +;;  for icons of the name "def_<extension>.info".
  5936. +;;  The routine searches first in the directories specified by the
  5937. +;;  user in the variable "amiga-icon-path" and then in "env:Icons/".
  5938. +;;  The directories in the list must contain the trailing slash.
  5939. +;;
  5940. +;;  If it can't find any appropriate icons, and the file
  5941. +;;  "env:Icons/def_emacs.info" exists, it is used. Otherwise
  5942. +;;  the original function is called.
  5943. +;;
  5944. +;;  Note that icons are only created when the variable
  5945. +;;  "amiga-create-icons" is non-nil.
  5946. +;;
  5947. +;;  Example: If the user would like to use the icons supplied by
  5948. +;;           the SAS C-complier, the following lines could be placed
  5949. +;;           in his or hers .emacs file:
  5950. +;;      (setq amiga-icon-path '("sc:Icons/"))
  5951. +;;      (setq amiga-create-icons t)
  5952. +;;
  5953. +
  5954. +(defvar amiga-icon-path '()
  5955. +  "A list of directories to scan when searching for new icons.")
  5956. +
  5957. +(if (not (fboundp 'old-amiga-put-icon))
  5958. +    (fset 'old-amiga-put-icon (symbol-function 'amiga-put-icon)))
  5959. +
  5960. +(defun amiga-put-icon (file force)
  5961. +  (if (or force (not (file-readable-p (concat file ".info"))))
  5962. +      (let ((extpos (string-match "\\.[a-zA-Z]\\'" file))
  5963. +            (iconname nil)
  5964. +            (path (append amiga-icon-path '("env:icons/")))
  5965. +            (found nil))
  5966. +        (if (and extpos (< 0 extpos))
  5967. +            (while (and (not found) path)
  5968. +              (setq iconname (concat (car path) "def_" (substring file (+ 1 extpos)) ".in\
  5969. +fo"))
  5970. +              (if (and iconname (file-readable-p iconname))
  5971. +                  (progn
  5972. +                    (copy-file iconname (concat file ".info"))
  5973. +                    (setq found t)))
  5974. +              (setq path (cdr path))))
  5975. +        (if (not found)
  5976. +            (if (file-readable-p "env:Icons/def_emacs.info")
  5977. +                (copy-file "env:Icons/def_emacs.info" (concat file ".info"))
  5978. +              (old-amiga-put-icon file force))))))
  5979. +
  5980. +
  5981. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.info differ
  5982. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el
  5983. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el    Wed Dec 31 17:00:00 1969
  5984. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el    Sat Sep 28 00:00:00 1996
  5985. @@ -0,0 +1,91 @@
  5986. +;;
  5987. +;;  FILE
  5988. +;;    newicon.el        $VER: V1.00 newicon.el
  5989. +;;
  5990. +;;  DESCRIPTION
  5991. +;;      A new icon-creating scheme.
  5992. +;;
  5993. +;;    When creating icons, the following replacement routine searches
  5994. +;;      for icons of the name "def_<extension>.info". 
  5995. +;;      The routine searches first in the directories specified a _list_
  5996. +;;      by the user in the variable "amiga-icon-path" and then in 
  5997. +;;      "Gnuemacs:Icons/". The directories in the list must contain the 
  5998. +;;    trailing slash.
  5999. +;;
  6000. +;;      If it can't find any appropriate icons, and the file 
  6001. +;;      "Gnuemacs:Icons/def_emacs.info" exists, it is used. Otherwise
  6002. +;;      the original function is called.
  6003. +;;
  6004. +;;      Note: icons are only created when the variable
  6005. +;;      "amiga-create-icons" is non-nil.
  6006. +;;
  6007. +;;  INSTALLATION
  6008. +;;    Copy this file to a lisp-directory, for example Gnuemacs:lisp
  6009. +;;
  6010. +;;    Create a directory called Gnuemacs:icons and copy the icons to it.
  6011. +;;
  6012. +;;    Place the following line in your s:.emacs
  6013. +;;            (setq amiga-create-icons t)
  6014. +;;        (load "newicon")
  6015. +;;
  6016. +;;      Example: If the user would like to use the icons supplied by
  6017. +;;    the SAS C-complier, the following lines could be placed
  6018. +;;    in his or hers .emacs file:
  6019. +;;      (setq amiga-icon-path '("sc:Icons/"))
  6020. +;;
  6021. +;;  LICENSE
  6022. +;;      Copyright (C) 1993  Anders Lindgren
  6023. +;;
  6024. +;;    This program is free software; you can redistribute it and/or modify
  6025. +;;    it under the terms of the GNU General Public License as published by
  6026. +;;    the Free Software Foundation; either version 2 of the License,or
  6027. +;;    (at your option) any later version.
  6028. +;;
  6029. +;;    This program is distributed in the hope that it will be useful,
  6030. +;;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  6031. +;;    MERCHANTABILITY of FITNESS FOR A PARTICULAR PURPOSE. See the
  6032. +;;    GNU General Public License for more details.
  6033. +;;
  6034. +;;    You should have received a copy of the GNU General Public License
  6035. +;;    along with this program; if not, write to the Free Software
  6036. +;;    Foundation, Inc., 675 Mass Ave, Cambridge, Ma 02139, USA.
  6037. +;;
  6038. +;;  HOW TO CONTACT ME:
  6039. +;;    voice:   Scream  Anders Lindgren  LOUD
  6040. +;;    email:   d91ali@csd.uu.se
  6041. +;;    mail:    Anders Lindgren
  6042. +;;             Kantorsg. 2-331
  6043. +;;             S-754 24 Uppsala
  6044. +;;    SUGA BBS:+46 (0)8 34 85 23
  6045. +;;         +46 (0)8 34 32 76  
  6046. +;;
  6047. +
  6048. +(defvar amiga-icon-path '()
  6049. +  "A list of directories to scan when searching for new icons.")
  6050. +
  6051. +(if (not (fboundp 'old-amiga-put-icon))
  6052. +    (fset 'old-amiga-put-icon (symbol-function 'amiga-put-icon)))
  6053. +
  6054. +(defun amiga-put-icon (file force)
  6055. +  (if (or force (not (file-readable-p (concat file ".info"))))
  6056. +      (let ((extpos (string-match "\\.[a-zA-Z]*\\'" file))
  6057. +        (iconname nil)
  6058. +        (path (append amiga-icon-path '("gnuemacs:icons/")))
  6059. +        (found nil))
  6060. +    (if (and extpos (< 0 extpos))
  6061. +        (while (and (not found) path)
  6062. +          (setq iconname (concat (car path) "def_" (substring file (+ 1 extpos)) ".info"))
  6063. +          (if (and iconname (file-readable-p iconname))
  6064. +          (progn
  6065. +            (copy-file iconname (concat file ".info"))
  6066. +            (setq found t)))
  6067. +          (setq path (cdr path))))
  6068. +    (if (not found)
  6069. +        (if (file-readable-p "gnuemacs:Icons/def_emacs.info")
  6070. +        (copy-file "gnuemacs:Icons/def_emacs.info" (concat file ".info"))
  6071. +          (old-amiga-put-icon file force))))))
  6072. +      
  6073. +
  6074. +
  6075. +        
  6076. +        
  6077. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el.info differ
  6078. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc differ
  6079. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc.info differ
  6080. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el
  6081. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el    Wed Dec 31 17:00:00 1969
  6082. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el    Sat Sep 28 00:00:00 1996
  6083. @@ -0,0 +1,70 @@
  6084. +;;;
  6085. +;;; FILE
  6086. +;;;    sticky.el        $VER: V1.00 sticky.el
  6087. +;;;
  6088. +;;; DESCRIPTION
  6089. +;;;    ELisp part of Emacs Starter Deluxe. This code 
  6090. +;;;    is loaded when Emacs is invoked in "sticky" mode.
  6091. +;;;
  6092. +;;;    Place this file somewhere in your lisp-path, for example
  6093. +;;;    in the directory GnuEmacs:lisp.
  6094. +;;;
  6095. +;;;    Please read the file "starter.doc".
  6096. +;;;
  6097. +;;; AUTHORS
  6098. +;;;    Anders Lindgren, d91ali@csd.uu.se
  6099. +;;;    Bo Liljegren, bo-lilje@dsv.su.se
  6100. +;;;
  6101. +;;; LICENSE
  6102. +;;;     Copyright (C) 1993  Anders Lindgren  and  Bo Liljegren
  6103. +;;;
  6104. +;;;    This program is free software; you can redistribute it and/or modify
  6105. +;;;    it under the terms of the GNU General Public License as published by
  6106. +;;;    the Free Software Foundation; either version 2 of the License, or
  6107. +;;;    (at your option) any later version.
  6108. +;;;
  6109. +;;;    This program is distributed in the hope that it will be useful,
  6110. +;;;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  6111. +;;;    MERCHANTABILITY of FITNESS FOR A PARTICULAR PURPOSE. See the
  6112. +;;;    GNU General Public License for more details.
  6113. +;;;
  6114. +;;;    You should have received a copy of the GNU General Public License
  6115. +;;;    along with this program; if not, write to the Free Software
  6116. +;;;    Foundation, Inc., 675 Mass Ave, Cambridge, Ma 02139, USA.
  6117. +;;;
  6118. +;;; HISTORY
  6119. +;;;    24-Sep-93 ALi  Created this file.
  6120. +;;;
  6121. +
  6122. +
  6123. +(provide 'sticky)
  6124. +
  6125. +(make-variable-buffer-local 'sticky-rexx-port)
  6126. +(set-default 'sticky-rexx-port nil)
  6127. +
  6128. +(if (not (fboundp 'old-kill-buffer))
  6129. +    (fset 'old-kill-buffer (symbol-function 'kill-buffer)))
  6130. +
  6131. +;;; Redefine the kill-buffer function.
  6132. +;;; If the buffer is in "sticky" mode, notify the client that this buffer is no more.
  6133. +;;; The reason why we're asking whether to kill the buffer or not, is to avoid a situation
  6134. +;;; where the client is notified but the user answers no.
  6135. +(defun kill-buffer (buffer)
  6136. +  "One arg, a string or a buffer.  Get rid of the specified buffer.
  6137. +Any processes that have this buffer as the `process-buffer' are killed
  6138. +with `delete-process'.
  6139. +Patched to notify client."
  6140. +  (interactive "bKill buffer: ")
  6141. +  (if (eq (setq buffer (get-buffer buffer)) nil)
  6142. +      nil
  6143. +    (save-excursion
  6144. +      (set-buffer buffer)
  6145. +      (if (or (not (buffer-modified-p buffer))
  6146. +          (not (buffer-file-name))
  6147. +          noninteractive
  6148. +          (yes-or-no-p (format "Buffer %s modified; kill anyway? " (buffer-name))))
  6149. +      (progn
  6150. +        (set-buffer-modified-p nil)
  6151. +        (if sticky-rexx-port
  6152. +        (amiga-arexx-send-command (concat "ADDRESS " sticky-rexx-port " TERMINATING") t))
  6153. +        (old-kill-buffer buffer))))))
  6154. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el.info differ
  6155. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc differ
  6156. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc.info differ
  6157. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp.info differ
  6158. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx
  6159. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx    Wed Dec 31 17:00:00 1969
  6160. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx    Sat Sep 28 00:00:00 1996
  6161. @@ -0,0 +1,286 @@
  6162. +/*
  6163. +FILE         Emacs.rexx
  6164. +VERSION      $VER: V1.06 Emacs.rexx
  6165. +DESCRIPTION  Load a file into a (running) emacs.
  6166. +             emacs [flags and files]
  6167. +
  6168. +         The following options are supported:
  6169. +         -[not]tofront    (Don't) move the Emacs window and screen
  6170. +                     to the front.
  6171. +         -[not]sticky    Do not terminate until the files on the
  6172. +                command line are killed.
  6173. +         -[no]screen    Open a public screen (Requiers ScreenManager)
  6174. +
  6175. +             where the third and fourth argument corresponds to the
  6176. +             the screensize.
  6177. +AUTHOR       Anders Lindgren, d91ali@csd.uu.se
  6178. +             Bo Liljegren, bo-lilje@dsv.su.se
  6179. +STATUS       This file is in the public domain
  6180. +HISTORY
  6181. +  11-Aug-92 ALi        Created this file
  6182. +  13-Aug-92 ALi        Replaced "runwsh" with "run".
  6183. +                       "else nop" added.
  6184. +  14-Aug-92 ALi  1.00  V1.0 released.
  6185. +  20-Aug-92 Bo L 1.01  Added ScreenManager stuff.
  6186. +  03-Jan-93 ALi  1.02  MODE edited. COLOURS removed.
  6187. +                       amiga-set-geometry moved to .emacs
  6188. +  13-Jan-93 ALi  1.03  TOBACK added. SHANGHAI and DEFAULT removed,
  6189. +                       emacs can now open itself correctly.
  6190. +                       -nottofront flag added.
  6191. +  20-Jan-93 Bo L 1.04  Replaced the static portname with the dynamic
  6192. +                       in the 'WaitForPort'-line
  6193. +  16 aug 93 Bo L 1.05  Changed screenresolution argument to DISPID.
  6194. +                       To avoid nameconflict with different languages.
  6195. +                       Changed ScrenManager parse part for those
  6196. +                       (unblessed) who don't have WShell.
  6197. +  22-Sep-93 ALi     1.06  Real option and filename parser added.
  6198. +                 (amiga-window-to-front) and
  6199. +               (amiga-activate-window) called instead of
  6200. +               ScreenManager.
  6201. +               (cd ) removed. (Why should emacs move directry?)
  6202. +               Sticky option added.
  6203. +               Files loaded by (load-file ), even when Emacs
  6204. +               is started by the script.
  6205. +               Temporary file which sets the window size and
  6206. +               screen name added. (No use for anything in .emacs)
  6207. +               POPPUB option removed.
  6208. +               Now gets screen font from WB.
  6209. +*/
  6210. +
  6211. +OPTIONS RESULTS
  6212. +OPTIONS FAILAT 21
  6213. +
  6214. +/* Make sure required libraries are present */
  6215. +IF ~SHOW('l',"rexxsupport.library") THEN DO
  6216. +    IF ~ADDLIB("rexxsupport.library",0,-30,0) THEN DO
  6217. +    SAY "Can't find rexxsupport.library"
  6218. +    EXIT
  6219. +    END
  6220. +    END
  6221. +
  6222. +
  6223. +/* The name for the public screen */
  6224. +screenname = 'Emacs'
  6225. +
  6226. +portname = 'EMACS1'
  6227. +args = ARG(1)  
  6228. +
  6229. +/* The commandline to send to a new emacs */
  6230. +cmd = ""
  6231. +
  6232. +/* A stem containing the options, the defaults are set here */
  6233. +flags.batch   = 0        /* Batch mode, always start a new Emacs */
  6234. +flags.kill    = 0        /* Kill a running emacs. */
  6235. +flags.screen  = 1        /* Use a public screen (Requiers ScreenManager) */
  6236. +flags.sticky  = 0        /* Wait until the buffers are terminated */
  6237. +flags.tofront = 1        /* Send the screen to the front */
  6238. +
  6239. +/* Argument parser */
  6240. +
  6241. +filesidx = 0
  6242. +DO WHILE LENGTH(args) > 1
  6243. +    args = strip(args, 'L')    /* Strip leading blanks */
  6244. +    IF LEFT(args,1) = '"' THEN DO
  6245. +    filesidx = filesidx + 1
  6246. +    PARSE VAR args  '"' files.filesidx '"' args
  6247. +    END
  6248. +    ELSE DO
  6249. +    PARSE VAR args  onearg args
  6250. +    IF LEFT(onearg,1) = '-' THEN DO
  6251. +        SELECT
  6252. +        WHEN onearg = "-tofront"    THEN flags.tofront = 1
  6253. +        WHEN onearg = "-nottofront" THEN flags.tofront = 0
  6254. +        WHEN onearg = "-sticky"     THEN flags.sticky = 1
  6255. +        WHEN onearg = "-notsticky"  THEN flags.sticky = 0
  6256. +        WHEN onearg = "-screen"     THEN flags.screen = 1
  6257. +        WHEN onearg = "-noscreen"   THEN flags.screen = 0
  6258. +        WHEN onearg = "-batch"        THEN flags.batch = 1
  6259. +        WHEN onearg = "-kill"        THEN DO
  6260. +            flags.kill = 1
  6261. +            cmd = cmd onearg
  6262. +            END
  6263. +        /* Emacs options with one argument */
  6264. +        WHEN (onearg = "-l" | onearg = "-load" | onearg = "-f",
  6265. +              | onearg = "-funcall" | onearg = "-i" | onearg = "-insert",
  6266. +              | onearg = "-t" | onearg = "-u" | onearg = "-user") THEN DO
  6267. +            PARSE VAR args  optarg args
  6268. +            cmd = cmd onearg optarg
  6269. +            END
  6270. +        /* Emacs options with two arguments */
  6271. +        WHEN (onearg = "-dev" | onearg = "-fn") THEN DO
  6272. +            PARSE VAR args  optarg1 optarg2 args
  6273. +            cmd = cmd onearg optarg1 optarg2
  6274. +            END
  6275. +        OTHERWISE cmd = cmd onearg
  6276. +        END
  6277. +        END
  6278. +    ELSE IF LEFT(onearg,1) = '+' THEN DO
  6279. +        PARSE VAR onearg  '+' flags.linenumber
  6280. +        END
  6281. +    ELSE DO
  6282. +        filesidx = filesidx + 1
  6283. +        files.filesidx = onearg
  6284. +        END
  6285. +    END
  6286. +    END
  6287. +
  6288. +/* If in batch-mode, start a new Emacs synchronous using the
  6289. + * original options */
  6290. +IF flags.batch THEN DO
  6291. +    ADDRESS COMMAND "temacs" arg(1)
  6292. +    EXIT rc
  6293. +    END
  6294. +
  6295. +
  6296. +/* If an Emacs Screen doesn't exists, create one */
  6297. +IF flags.screen & ~SHOWLIST('W',screenname||'-Demon') THEN DO 
  6298. +    filnamn = 'T:SM'||d2x(random(256,1024,time('s')))
  6299. +    ADDRESS COMMAND 'ScreenManager INFO Workbench EXPERT >'||filnamn
  6300. +    IF ~OPEN(fil,filnamn,'R') THEN EXIT 20
  6301. +    cnt = 4
  6302. +    rad = READLN(fil)
  6303. +    IF EOF(fil) THEN cnt = 0
  6304. +    DO WHILE cnt ~= 0
  6305. +    ord = WORD(rad,1)
  6306. +    SELECT
  6307. +        WHEN ord = 'Position:' THEN DO
  6308. +        PARSE VAR rad . '=' xpos ' ' . '=' ypos ' ' .
  6309. +        cnt = cnt - 1
  6310. +        END
  6311. +        WHEN ord = 'Size:' THEN DO
  6312. +        PARSE VAR rad . '=' xsize ' ' . '=' ysize ' ' .
  6313. +        cnt = cnt - 1
  6314. +        END
  6315. +        WHEN ord = 'DisplayID:' THEN DO
  6316. +        resmode = WORD(rad,2)
  6317. +        cnt = cnt - 1
  6318. +        END
  6319. +        WHEN ord = 'Font:' THEN DO
  6320. +        PARSE VAR rad  'Font:'  font '.font ' fontsize
  6321. +        font = strip(font)
  6322. +        cnt = cnt - 1
  6323. +            END
  6324. +        OTHERWISE
  6325. +        NOP
  6326. +        END
  6327. +    rad = READLN(fil)
  6328. +    IF EOF(fil) THEN cnt = 0
  6329. +    END
  6330. +    CALL CLOSE(fil)
  6331. +    CALL DELETE(filnamn)
  6332. +    menubar = fontsize + 2
  6333. +    ypos = ypos + menubar
  6334. +    ysize = ysize - menubar
  6335. +    ScrMng = ' OPEN '||screenname||' TITLE="'||screenname||' Screen"'
  6336. +    ScrMng = ScrMng||' DISPID='||resmode
  6337. +    ScrMng = ScrMng||' PLANES=2'
  6338. +    ScrMng = ScrMng||' PENS=011213103'
  6339. +    ScrMng = ScrMng||' FONT='||font||'.'||fontsize
  6340. +    ScrMng = ScrMng||' AUTOCLOSE' /* close screen when Emacs exists */
  6341. +    ScrMng = ScrMng||' TOBACK'      /* It's moved to the front below  */
  6342. +    ScrMng = ScrMng||' CX_TOFRONT="LCOMMAND e"'
  6343. +    ScrMng = ScrMng||' CX_DEFAULT="LCOMMAND SHIFT e"'
  6344. +    ADDRESS COMMAND 'ScreenManager' ScrMng
  6345. +
  6346. +    /* Create a small elisp file which sets the screen and size of Emacs */
  6347. +    sizefilename = 't:size' || d2x(random(256,1024,time('s'))) || '.el'
  6348. +    IF ~OPEN(fil, sizefilename, 'W') THEN EXIT 20
  6349. +    CALL WRITELN(fil, ';; Automagically created by Emacs.rexx')
  6350. +    CALL WRITELN(fil, '(amiga-set-geometry 0' fontsize+3 xsize ysize '"' || screenname || '")')
  6351. +    CALL CLOSE(fil)
  6352. +    cmd = cmd '-load' sizefilename
  6353. +    END
  6354. +    
  6355. +/* Start a new Emacs, if no one exists. */
  6356. +IF SHOW('P', portname) = 0 THEN DO
  6357. +    
  6358. +    CALL PRAGMA('stack', 40000)
  6359. +
  6360. +    ADDRESS COMMAND 'run <nil: >nil: temacs' cmd
  6361. +    ADDRESS COMMAND 'WaitForPort' portname
  6362. +    flags.kill = 0
  6363. +
  6364. +    END
  6365. +
  6366. +
  6367. +ADDRESS VALUE portname
  6368. +
  6369. +/* This no-op call doesn't return until after the 
  6370. + * t:sizeXX file has been read */
  6371. +"()"
  6372. +
  6373. +/* Delete the temporary file, if it was created. */
  6374. +IF SYMBOL('sizefilename') = 'VAR' THEN CALL DELETE(sizefilename)
  6375. +
  6376. +/* If in sticky mode, load sticky module into Emacs and
  6377. + * open a communication port */
  6378. +IF flags.sticky THEN DO
  6379. +    "(require 'sticky)"
  6380. +
  6381. +    count = 1
  6382. +    DO UNTIL ~SHOW('P', stickyportname)
  6383. +    stickyportname = "EMACS_CLIENT" || count
  6384. +    count = count + 1
  6385. +    END
  6386. +
  6387. +    CALL OPENPORT(stickyportname)
  6388. +    IF ~SHOW('P', stickyportname) THEN DO
  6389. +    SAY "Emacs client: Can't open sticky port."
  6390. +    EXIT 20
  6391. +    END
  6392. +    END
  6393. +
  6394. +/* Get the current diretory. (There is no point in building a correct
  6395. + * filename, since Emacs does that for us.) */
  6396. +dir = PRAGMA('directory')
  6397. +IF RIGHT(dir,1) ~= ':' THEN dir = dir || '/'
  6398. +
  6399. +stickycount = 0            /* The number of files to wait for */
  6400. +
  6401. +/* Load the files into emacs */
  6402. +DO i = 1 TO filesidx
  6403. +    '(find-file "' || dir || files.i || '")'
  6404. +
  6405. +    IF flags.sticky THEN DO
  6406. +    '(setq sticky-rexx-port "' || stickyportname || '")'
  6407. +    stickycount = stickycount + 1
  6408. +    END
  6409. +    END
  6410. +
  6411. +/* If the +linenumber option was given, go to the correct line */
  6412. +IF SYMBOL('flags.linenumber') = 'VAR' THEN '(goto-line ' || flags.linenumber || ')'
  6413. +
  6414. +/* Bring an activated Emacs window and screen to the front */
  6415. +IF flags.tofront THEN DO
  6416. +    '(amiga-window-to-front)'
  6417. +    '(amiga-activate-window)'
  6418. +    END
  6419. +
  6420. +/* If in sticky mode, wait for the buffers to be deleted */
  6421. +IF flags.sticky THEN DO
  6422. +    DO WHILE stickycount > 0
  6423. +
  6424. +    CALL WAITPKT(stickyportname)
  6425. +    pkt = GETPKT(stickyportname)
  6426. +    IF pkt = NULL() then iterate
  6427. +
  6428. +    IF GETARG(pkt) = "TERMINATING" THEN
  6429. +        stickycount = stickycount - 1
  6430. +
  6431. +    CALL REPLY(pkt, 0)
  6432. +
  6433. +    END
  6434. +
  6435. +    CALL CLOSEPORT(stickyportname)
  6436. +    END
  6437. +
  6438. +
  6439. +IF flags.kill THEN DO
  6440. +    '(save-buffers-kill-emacs)'
  6441. +    /* Screen normally closed automatically, but this won't hurt */
  6442. +    IF flags.screen THEN DO
  6443. +        ADDRESS COMMAND 'ScreenManager close' screenname
  6444. +        END
  6445. +    END
  6446. +
  6447. +EXIT 0
  6448. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx.info differ
  6449. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx.info differ
  6450. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexxmode10.lha and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexxmode10.lha differ
  6451. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/sas-c-emacs.lha and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/sas-c-emacs.lha differ
  6452. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc
  6453. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc    Wed Dec 31 17:00:00 1969
  6454. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc    Sat Sep 28 00:00:00 1996
  6455. @@ -0,0 +1,260 @@
  6456. +
  6457. +
  6458. +
  6459. +        #### #   #   #    ###  ### 
  6460. +        #    ## ##  # #  #    #
  6461. +        ##   # # # #   # #     ##
  6462. +        #    #   # ##### #       #
  6463. +        #### #   # #   #  ### ### 
  6464. +              ###  #####   #   ###  ##### #### ###
  6465. +             #       #    # #  #  #   #   #    #  #
  6466. +              ###    #   #   # ###    #   ##   ###
  6467. +                 #   #   ##### # #    #   #    # #
  6468. +              ###    #   #   # #  #   #   #### #  #
  6469. +
  6470. +                        ***  **** *    *  * *   * ****
  6471. +                        *  * *    *    *  *  * *  *
  6472. +                           *  * **   *    *  *   *   **
  6473. +                       *  * *    *    *  *  * *  *
  6474. +                           ***  **** **** **** *   * ****
  6475. +
  6476. +
  6477. +    ------------------------------------------------------
  6478. +                  Release 1
  6479. +                   
  6480. +                 Written by:
  6481. +               Anders Lindgren
  6482. +                 Bo Liljegren
  6483. +                   
  6484. +         A (in our humble opinion) good Emacs starter
  6485. +    ------------------------------------------------------
  6486. +                  FEATURING
  6487. +
  6488. +    o Load files into a running Emacs.
  6489. +
  6490. +    o Option to use a public screen (requiers ScreenManager).
  6491. +
  6492. +    o Full WB support; double-click icons into a running Emacs.
  6493. +
  6494. +    o New icon creating scheme, use different icons depending on what
  6495. +      type of file you are editing.
  6496. +
  6497. +    o Sticky flag, the script doesn't terminate until the requested
  6498. +      buffers are terminated.
  6499. +
  6500. +
  6501. +                   LICENSE
  6502. +
  6503. +        Copyright (C) 1993  Anders Lindgren  and  Bo Liljegren
  6504. +     This program is free software; you can redistribute it and/or modify
  6505. +     it under the terms of the GNU General Public License as published by
  6506. +     the Free Software Foundation; either version 2 of the License, or
  6507. +     (at your option) any later version.
  6508. +     This program is distributed in the hope that it will be useful,
  6509. +     but WITHOUT ANY WARRANTY; without even the implied warranty of
  6510. +     MERCHANTABILITY of FITNESS FOR A PARTICULAR PURPOSE. See the
  6511. +     GNU General Public License for more details.
  6512. +     You should have received a copy of the GNU General Public License
  6513. +     along with this program; if not, write to the Free Software
  6514. +     Foundation, Inc., 675 Mass Ave, Cambridge, Ma 02139, USA.
  6515. +
  6516. +
  6517. +
  6518. +                   CONTENTS
  6519. +
  6520. +The following files are contained in the archive:
  6521. +
  6522. +COPYING            -- The Gnu General Public License
  6523. +starter.doc         -- This file
  6524. +Emacs.info        -- A nice Emacs icon drawn by Bo Liljegren
  6525. +rexx/emacs.rexx V1.06    -- The main starter script
  6526. +lisp/sticky.el    V1.00    -- ELisp code used when a buffer is started with
  6527. +               the "-sticky" flag
  6528. +lisp/newicon.el    V1.00    -- The ELisp code for the new icon creating scheme
  6529. +lisp/#?.elc        -- Bytecompiled versions of the above files
  6530. +wbarg/wbarg    V1.00    -- A utility which converts WB arguments 
  6531. +               to shell dito
  6532. +wbarg/wbarg.c        -- Source code for the above utility
  6533. +wbarg/makefile        -- Rules for building the above with SAS/C 6.x.
  6534. +icons/def_#?.info    -- Icons. All but def_el drawn by Christian A. Weber.
  6535. +
  6536. +
  6537. +
  6538. +
  6539. +
  6540. +                  NEWSFLASH
  6541. +
  6542. +SUGA, Swedish User Group of Amiga is a non-profit nation wide club for
  6543. +Amiga-freaks in Sweden. It has been operating for many years (I joined
  6544. +in around -87, and have been more or less active ever since.) A
  6545. +newspaper with 16 to 20 pages is beeing distrubuted quaterly. A BBS is
  6546. +runed using the command line program NiKom, which is written by a
  6547. +member of the club. (Too bad for you non swedish speaking people that
  6548. +it isn't translated yet.) For the members in Stockholm we have a
  6549. +meeting every sunday between 11am and 3pm.
  6550. +
  6551. +Join by inserting only 150:- (less than $20) into the PostGiro account
  6552. +13 43 32-2. You can also just show up at the "Verksta'n" to see what
  6553. +it's all about!
  6554. +
  6555. +    Address: SUGA
  6556. +         Disponentvillan, Verkstan
  6557. +         Norrtullsgatan 12k
  6558. +         S-113 27 Stockholm
  6559. +
  6560. +    SUGA BBS:+46 (0)8 34 85 23
  6561. +         +46 (0)8 34 32 76  
  6562. +
  6563. +                 INSTALLATION
  6564. +
  6565. +Copy the files in the "lisp" directory into a directory in the
  6566. +Emacs load path, for example GnuEmacs:lisp.
  6567. +
  6568. +Copy the file in the "rexx" directory to REXX:
  6569. +
  6570. +Copy the file "wbarg/wbarg" into the GnuEmacs:etc directory.
  6571. +
  6572. +
  6573. +If you would like to use the new icon creating scheme then
  6574. +create a directory named GnuEmacs:icons and copy the contents
  6575. +of the "icons" to it and add the following line to your 
  6576. +s:.emacs file.
  6577. +
  6578. +    (load "newicon")
  6579. +    (setq amiga-create-icons t)
  6580. +
  6581. +Older revisions of the script Emacs.rexx required that the command
  6582. +(amiga-set-geometry ) were executed in s:.emacs. This is no longer the
  6583. +case, hence the line should be removed.
  6584. +
  6585. +If the -screen option should be used, the program ScreenManager must
  6586. +be installed. The program is not included in this archive since its
  6587. +license does not allow it to be fully freely distributable, it can be
  6588. +found one ONE (yes, ONE I understood the license correctly) PD disk
  6589. +serie, and on AmiNet. If you can't find it you can order it from the
  6590. +author (you can also inform him of the existence of the Gnu General
  6591. +Public License):
  6592. +
  6593. +    Bernhard Möllemann
  6594. +    Luisenstraße 17
  6595. +    D-7500 Karlsruhe 1
  6596. +    Germany
  6597. +
  6598. +In the future we might rewrite Emacs.rexx so it uses some other screen
  6599. +opener, if it turns out that ScreenManager is too difficult to find.
  6600. +
  6601. +
  6602. +                  EMACS.REXX
  6603. +
  6604. +The heart of the Emacs Starter Deluxe is the script emacs.rexx. It loads
  6605. +files into a running Emacs or starts a new Emacs. It is capable of opening
  6606. +a public screen by the help of the utility ScreenManager. The resolution
  6607. +and color of the screen is cloned from the Workbench, although the depth 
  6608. +will always be two bitplanes.
  6609. +
  6610. +
  6611. +    Usage:   [rx] emacs [options|+linenumber] [filenames]
  6612. +
  6613. +
  6614. +    -[not]tofront    Bring the Emacs window and screes to the front.
  6615. +            Default is -tofront.
  6616. +
  6617. +    -[not]sticky    Wait until the filenames requested are killed by
  6618. +            Emacs. Default is -notsticky.
  6619. +
  6620. +    -[no]screen        Open a public screen and place Emacs on it.
  6621. +            This option requiers the program "ScreenManager".
  6622. +            Default is -screen.
  6623. +
  6624. +The script also handles standard Emacs options, even though some are
  6625. +implemented as no-ops when loading files into a running Emacs.
  6626. +
  6627. +The meaning of the standard option "-kill" is extended; if a running Emacs
  6628. +exists it is terminated.
  6629. +
  6630. +
  6631. +              WORKBENCH SUPPORT
  6632. +
  6633. +The Emacs Starter Deluxe has full Workbench support. This means that a
  6634. +file conneted to an icon can be loaded into a running Emacs.
  6635. +
  6636. +This feature requiers a project icon with the default tool set to
  6637. +"GnuEmacs:etc/wbarg" and the tooltype:
  6638. +    COMMAND=sys:rexxc/rx emacs
  6639. +
  6640. +A number of icons with this setup can be found in the icons directory
  6641. +of this archive.
  6642. +
  6643. +If no file is connected to an icon which is double-clicked Emacs will
  6644. +be started, or brought to front, but no file would be loaded.
  6645. +
  6646. +Note that the icons Emacs normally creates does NOT have the tool and
  6647. +tooltype set correctly. But, gentle reader, a solution to this problem
  6648. +can be found in the next section.
  6649. +
  6650. +
  6651. +               NEW ICON SCHEME
  6652. +
  6653. +To make as life simple as possible for workbench users a new icon
  6654. +creating scheme has been invented. To activate it please place the
  6655. +following lines in your s:.emacs file:
  6656. +
  6657. +    (load "newicon")
  6658. +    (setq amiga-create-icons t)
  6659. +
  6660. +The new scheme checks the extension of the file edited and tries to
  6661. +find an icon with the name "def_<extension>.el" in the icon path. If
  6662. +no one is found an icon named "GnuEmacs:icons/def_emacs.el" is used.
  6663. +As an emergency exit, the old icon creation routine is called.
  6664. +
  6665. +The icon path is defined to be the directories contained in the list
  6666. +"amiga-icon-path" and in the directory "GnuEmacs:Icons". Note that the
  6667. +directories in the list must end in a colon or slash.
  6668. +
  6669. +Example: If the user would like to use the icons supplied by the SAS
  6670. +C-complier and the icons supplied by DefaultIcon, the following lines
  6671. +could be placed in his or hers .emacs file:
  6672. +    (setq amiga-icon-path '("sc:Icons/" "Env:Icons/"))
  6673. +
  6674. +
  6675. +               SO WHAT'S THE DARK SIDE?
  6676. +
  6677. +All programs must have something which isn't working properly, and yes,
  6678. +there is one thing we don't recomend:
  6679. +Don't iconify Emacs, since the screen closes automatically when the Emacs
  6680. +window is closed. There is a way around it though; execute the emacs.rexx
  6681. +script again to open a new screen and then deiconify Emacs.
  6682. +
  6683. +If for some reason Emacs fails to start but the screen shows up it must
  6684. +be closed before the next attempt to start Emacs. This is done by issuing
  6685. +the command "ScreenManager CLOSE Emacs".
  6686. +
  6687. +
  6688. +              HOW TO CONTACT US
  6689. +
  6690. +If you would like new features to be added to Emacs Starter Deluxe, or if
  6691. +you whould discover a bug, don't hesitate to contact us:
  6692. +
  6693. +email:   d91ali@csd.uu.se        bo-lilje@dsv.su.se
  6694. +     
  6695. +mail:    Anders Lindgren        Bo Liljegren
  6696. +         Kantorsg. 2-331        Skogvaktarg. 12
  6697. +         S-754 24 Uppsala        115 42 Stockholm
  6698. +
  6699. +voice:   Scream  Anders or Bosse  LOUD
  6700. +
  6701. +
  6702. +                 OTHER TITLES
  6703. +
  6704. +The following Emacs applications has been written by Anders Lindgren:
  6705. +
  6706. +rexx-mode        -- A Complete editing mode and a source level 
  6707. +               debugger for REXX. (Machine independent, but 
  6708. +               it works on the Amiga.)
  6709. +sas-c-mode        -- A minor mode for communication with the SAS/C
  6710. +               6.x message browser SCMSG and more.
  6711. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc.info differ
  6712. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile
  6713. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile    Wed Dec 31 17:00:00 1969
  6714. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile    Sat Sep 28 00:00:00 1996
  6715. @@ -0,0 +1,12 @@
  6716. +
  6717. +wbarg:    wbarg.o
  6718. +    slink TO wbarg FROM lib:c.o wbarg.o LIB lib:sc.lib MAP wbarg.map hsflo
  6719. +    copy wbarg gnuemacs:etc
  6720. +
  6721. +wbarg.o: wbarg.c
  6722. +    sc wbarg.c
  6723. +
  6724. +release:
  6725. +    lha -x -a -r a wbarg.lha wbarg wbarg.c icons/\#? sc/\#? makefile newicon.el def_emacs.info README
  6726. +
  6727. +                   
  6728. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile.info differ
  6729. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg differ
  6730. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c
  6731. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c    Wed Dec 31 17:00:00 1969
  6732. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c    Sat Sep 28 00:00:00 1996
  6733. @@ -0,0 +1,379 @@
  6734. +/*
  6735. + *  FILE
  6736. + *    wbarg V1.0    by Anders Lindgren
  6737. + *
  6738. + *  DESCRIPTION
  6739. + *    Convert WB arguments into shell dito.
  6740. + *
  6741. + *    This programs looks for a tooltype of the name COMMAND, to which
  6742. + *    if adds the WB arguments, before executing the command as a shell
  6743. + *    process.
  6744. + *
  6745. + *    One area of use is to set the COMMAND tooltype to:
  6746. + *      COMMAND=sys:rexxc/rx rexxscript
  6747. + *    to run the rexx script "rexxscript" with WB arguments. 
  6748. + *
  6749. + *  WARNING
  6750. + *    This is a HACK, it might stop to work on future OS-releases, if
  6751. + *    Commodore would change the path mechanism.
  6752. + *
  6753. + *    This program should work under 1.3, but it hasn't been tested. If
  6754. + *    it is runed under V39 it takes advantage of new features. (under 
  6755. + *    V37 AllocDosObject(DOS_CLI, ...) is buggy.)
  6756. + *
  6757. + *  LICENSE
  6758. + *      Copyright (C) 1993  Anders Lindgren
  6759. + *
  6760. + *    This program is free software; you can redistribute it and/or modify
  6761. + *    it under the terms of the GNU General Public License as published by
  6762. + *    the Free Software Foundation; either version 2 of the License,or
  6763. + *    (at your option) any later version.
  6764. + *
  6765. + *    This program is distributed in the hope that it will be useful,
  6766. + *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  6767. + *    MERCHANTABILITY of FITNESS FOR A PARTICULAR PURPOSE. See the
  6768. + *    GNU General Public License for more details.
  6769. + *
  6770. + *    You should have received a copy of the GNU General Public License
  6771. + *    along with this program; if not, write to the Free Software
  6772. + *    Foundation, Inc., 675 Mass Ave, Cambridge, Ma 02139, USA.
  6773. + *
  6774. + *  HOW TO CONTACT ME:
  6775. + *    voice:   Scream  Anders Lindgren  LOUD
  6776. + *    email:   d91ali@csd.uu.se
  6777. + *    mail:    Anders Lindgren
  6778. + *             Kantorsg. 2-331
  6779. + *             S-754 24 Uppsala
  6780. + *    SUGA BBS:+46 (0)8 34 85 23
  6781. + *         +46 (0)8 34 32 76  
  6782. + *
  6783. + *  TODO
  6784. + *    Define a STACK tooltype to set the stack size.
  6785. + *
  6786. + *  HISTORY
  6787. + *    09-Sep-93    Wrote the program.
  6788. + *    28-Sep-93    Added the add/free_cli functions
  6789. + *                V1.0 Released
  6790. + */
  6791. +
  6792. +#include <exec/types.h>
  6793. +
  6794. +#include <exec/memory.h>
  6795. +#include <exec/execbase.h>
  6796. +#include <dos/dos.h>
  6797. +#include <dos/dostags.h>
  6798. +#include <workbench/startup.h>
  6799. +
  6800. +#define __USE_SYSBASE
  6801. +
  6802. +#include <proto/exec.h>
  6803. +#include <proto/dos.h>
  6804. +#include <proto/icon.h>
  6805. +
  6806. +#include <stdio.h>
  6807. +#include <strings.h>
  6808. +
  6809. +
  6810. +#define CMDLINE 512        /* Length of the command line */
  6811. +
  6812. +
  6813. +/* Forward references */
  6814. +
  6815. +int  get_command(struct WBArg * wbarg, char buffer[], int maxlen);
  6816. +void name_of_lock(BPTR lock, char buffer[], int maxlen);
  6817. +void usage(void);
  6818. +int  add_cli(void);
  6819. +void free_cli(void);
  6820. +
  6821. +
  6822. +/* The version string */
  6823. +UBYTE *vers="\0$VER: wbarg 1.0 (" __DATE__ ")";
  6824. +
  6825. +/* The (secret?) structure of path */
  6826. +
  6827. +struct path {
  6828. +    BPTR next;
  6829. +    BPTR lock;
  6830. +};
  6831. +
  6832. +
  6833. +/* A combined cli-structure and BSTR:s used when KS < 39 */
  6834. +struct mycli {
  6835. +    struct CommandLineInterface cli; /* Must be the first entry in the structure! */
  6836. +    UBYTE set_name[80];
  6837. +    UBYTE command_name[80];
  6838. +    UBYTE prompt[80];
  6839. +    UBYTE command_file[80];
  6840. +};
  6841. +
  6842. +
  6843. +void
  6844. +main(int argc, char *argv[])
  6845. +{
  6846. +    char commandline[CMDLINE];    /* The commandline to issue */
  6847. +    char args[CMDLINE];
  6848. +
  6849. +    struct WBStartup * argmsg;
  6850. +    struct WBArg     * wbarg;
  6851. +
  6852. +    BPTR olddir;
  6853. +    BPTR lock;
  6854. +
  6855. +    int found_cmd = FALSE;    /* Flag: TRUE when a COMMAND tooltype is found */
  6856. +    int created_cli = FALSE;    /* Flag: TRUE when we created our own cli-structure */
  6857. +
  6858. +    int i;
  6859. +
  6860. +    /* If we haven't got a Cli-structure, create one */
  6861. +    if (Cli() == NULL) {
  6862. +    if (add_cli()) {
  6863. +        created_cli = TRUE;
  6864. +    }
  6865. +    else {
  6866. +        puts("wbarg: Error while creating Cli-structure and path\n");
  6867. +    }
  6868. +
  6869. +    }
  6870. +
  6871. +
  6872. +    if (argc) {
  6873. +    usage();        /* It's no point in running it from the shell */
  6874. +    }
  6875. +    else {
  6876. +    argmsg = (struct WBStartup *)argv;
  6877. +    wbarg = argmsg->sm_ArgList;
  6878. +
  6879. +    args[0] = '\0';
  6880. +
  6881. +    for (i=0; i<argmsg->sm_NumArgs; i++) {
  6882. +
  6883. +        olddir = -1;
  6884. +        if ((wbarg->wa_Lock) && (*wbarg->wa_Name)) {
  6885. +        olddir = CurrentDir(wbarg->wa_Lock);
  6886. +        }
  6887. +
  6888. +        /* Get the command to execute */
  6889. +        if (get_command(wbarg, commandline, CMDLINE)) {
  6890. +        found_cmd = TRUE;
  6891. +        }
  6892. +
  6893. +        /* Build all the arguments */
  6894. +        if ((i>0) && *wbarg->wa_Name) {
  6895. +        if (lock = Lock(wbarg->wa_Name, ACCESS_READ)) {
  6896. +            strncat(args, " \"", CMDLINE);
  6897. +            name_of_lock(lock, args, CMDLINE);
  6898. +            strncat(args, "\"", CMDLINE);
  6899. +            UnLock(lock);
  6900. +        }
  6901. +        }
  6902. +
  6903. +        if (olddir != -1) {
  6904. +        CurrentDir(olddir);
  6905. +        }
  6906. +
  6907. +        wbarg++;    /* Use the next argument to the next loop iteration */
  6908. +    }
  6909. +
  6910. +    if (found_cmd) {
  6911. +        strncat(commandline, args, CMDLINE);
  6912. +        Execute(commandline, NULL, NULL);
  6913. +    }
  6914. +    else {
  6915. +        usage();        /* No COMMAND tooltype found */
  6916. +    }
  6917. +    }
  6918. +    if (created_cli) {
  6919. +    /* ((struct Process *) FindTask(NULL))->pr_CLI = NULL; */
  6920. +    free_cli();
  6921. +    }
  6922. +}
  6923. +
  6924. +
  6925. +/*
  6926. + *  FUNCTION
  6927. + *    get_command
  6928. + *
  6929. + *  DESCRIPTION
  6930. + *    Find a icon with the COMMAND tooltype set.
  6931. + */
  6932. +
  6933. +int
  6934. +get_command(struct WBArg * wbarg, char buffer[], int maxlen)
  6935. +{
  6936. +    struct DiskObject * dobj;
  6937. +    char ** toolarray;
  6938. +    char * s = NULL;
  6939. +
  6940. +    if ((*wbarg->wa_Name) && (dobj = GetDiskObject(wbarg->wa_Name))) {
  6941. +    toolarray = (char **)dobj->do_ToolTypes;
  6942. +
  6943. +    if (s = (char *)FindToolType(toolarray, "COMMAND")) {
  6944. +        s[maxlen-1] = '\0';    /* Make sure the string is nullterminated */
  6945. +        strncpy(buffer, s, maxlen-1);
  6946. +    }
  6947. +    FreeDiskObject(dobj);
  6948. +    }
  6949. +    return(s == NULL ? FALSE : TRUE);
  6950. +}
  6951. +
  6952. +
  6953. +/*
  6954. + *  FUNCTION
  6955. + *    name_of_lock
  6956. + *
  6957. + *  DESCRIPTION
  6958. + *      Create the filename from the lock supplied.
  6959. + *      NOTE: The name is ADDED to the string in the buffer.
  6960. + */
  6961. +
  6962. +void
  6963. +name_of_lock(BPTR lock, char buffer[], int maxlen)
  6964. +{
  6965. +    BPTR newlock;
  6966. +        /* Static to save space on the stack during recursion */
  6967. +    static __aligned struct FileInfoBlock fib; 
  6968. +    int root;
  6969. +
  6970. +    if (newlock = ParentDir(lock)) {
  6971. +    name_of_lock(newlock, buffer, maxlen);
  6972. +    UnLock(newlock);
  6973. +    root = FALSE;
  6974. +    }
  6975. +    else {
  6976. +    root = TRUE;
  6977. +    }
  6978. +
  6979. +    if (Examine(lock, & fib)) {
  6980. +    strncat(buffer, fib.fib_FileName, maxlen);
  6981. +    if (fib.fib_DirEntryType > 0) {
  6982. +        strncat(buffer, root ? ":" : "/", maxlen);
  6983. +    }
  6984. +    }
  6985. +}
  6986. +    
  6987. +
  6988. +/*
  6989. + *  FUNCTION
  6990. + *    usage
  6991. + *
  6992. + *  DESCRIPTION
  6993. + *    Write a small information text.
  6994. + */
  6995. +
  6996. +void
  6997. +usage(void)
  6998. +{
  6999. +    puts("WBARG  A program which converts workbench");
  7000. +    puts("       arguments to command line dito.");
  7001. +    puts("Usage: Create a project icon and set"); 
  7002. +    puts("       the tooltype named COMMAND to the");
  7003. +    puts("       command you would like to run");
  7004. +    puts("Example: COMMAND=sys:rexxc/rx someprogram");
  7005. +}
  7006. +
  7007. +
  7008. +/*
  7009. + *  FUNCTION
  7010. + *    add_cli
  7011. + *
  7012. + *  DESCRIPTION
  7013. + *    Attaches a CommandLineInterface-structure to the current (WB-started)
  7014. + *    process and copies the path from the Workbench task.
  7015. + *
  7016. + *    Return non-FALSE on success;
  7017. + */
  7018. +
  7019. +int
  7020. +add_cli()
  7021. +{
  7022. +    struct CommandLineInterface * cli = NULL;
  7023. +    struct mycli * mycli;
  7024. +    struct Process * wb;
  7025. +    BPTR p;            /* The path structure to copy from */
  7026. +    struct path * newp;        /* The new path structure */
  7027. +    BPTR * prev;
  7028. +
  7029. +    /*
  7030. +     * Under 1.3 AllocDosObject does not exists, under <39 the DOS_CLI option is buggy 
  7031. +     */
  7032. +    if (SysBase->LibNode.lib_Version < 39) {
  7033. +    if (mycli = (struct mycli *)AllocMem(sizeof(struct mycli), MEMF_CLEAR|MEMF_PUBLIC)) {
  7034. +        cli = & mycli->cli;
  7035. +        mycli->cli.cli_FailLevel   = 10;
  7036. +        mycli->cli.cli_Background  = DOSTRUE;
  7037. +        mycli->cli.cli_SetName     = MKBADDR(& mycli->set_name);
  7038. +        mycli->cli.cli_CommandName = MKBADDR(& mycli->command_name);
  7039. +        mycli->cli.cli_Prompt      = MKBADDR(& mycli->prompt);
  7040. +        mycli->cli.cli_CommandFile = MKBADDR(& mycli->command_file);
  7041. +    }
  7042. +    }
  7043. +    else {
  7044. +    cli = (struct CommandLineInterface *)AllocDosObjectTags(DOS_CLI, TAG_DONE);
  7045. +    }
  7046. +    if (cli) {
  7047. +    cli->cli_DefaultStack = 4096;
  7048. +    ((struct Process *) FindTask(NULL))->pr_CLI = MKBADDR(cli);
  7049. +
  7050. +    if (wb = (struct Process *)FindTask("Workbench")) {
  7051. +        prev = & cli->cli_CommandDir;
  7052. +    
  7053. +        p = ((struct CommandLineInterface *)BADDR(wb->pr_CLI))->cli_CommandDir;
  7054. +        while(p){
  7055. +        if (newp = AllocMem(sizeof(struct path), MEMF_PUBLIC)) {
  7056. +            newp->lock = DupLock(((struct path *)BADDR(p))->lock);
  7057. +        
  7058. +            * prev = MKBADDR(newp);
  7059. +            prev = & newp->next;
  7060. +        }
  7061. +        else {
  7062. +            * prev = NULL;
  7063. +            free_cli();
  7064. +            return(FALSE);
  7065. +        }
  7066. +        p = ((struct path *)BADDR(p))->next;
  7067. +        }
  7068. +        * prev = NULL;    /* Terminate the linked list */
  7069. +    }
  7070. +        return(TRUE);        /* OK */
  7071. +    }
  7072. +    return(FALSE);        /* No cli structure allocated */
  7073. +}
  7074. +
  7075. +
  7076. +/*
  7077. + *  FUNCTION
  7078. + *    free_cli
  7079. + *
  7080. + *  DESCRIPTION
  7081. + *    Undo the work of add_cli
  7082. + */
  7083. +
  7084. +void
  7085. +free_cli()
  7086. +{
  7087. +    struct CommandLineInterface * cli;
  7088. +    struct path * p;
  7089. +    struct path * p_next;
  7090. +
  7091. +    if (cli = Cli()) {
  7092. +    p = (struct path *)BADDR(cli->cli_CommandDir);
  7093. +    cli->cli_CommandDir = NULL;
  7094. +
  7095. +    while (p) {
  7096. +        p_next = (struct path *)BADDR(p->next);
  7097. +        if (p->lock) {
  7098. +        UnLock(p->lock);
  7099. +        }
  7100. +        FreeMem((void *)p, sizeof(struct path));
  7101. +        p = p_next;
  7102. +    }
  7103. +    if (SysBase->LibNode.lib_Version < 39) {
  7104. +        FreeMem((void *)cli, sizeof(struct mycli));
  7105. +    }
  7106. +    else {
  7107. +        FreeDosObject(DOS_CLI, (void *)cli);
  7108. +    }
  7109. +
  7110. +    ((struct Process *) FindTask(NULL))->pr_CLI = NULL;
  7111. +    }
  7112. +}
  7113. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c.info differ
  7114. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.info differ
  7115. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg.info and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg.info differ
  7116. Binary files baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/xsh11.lha and amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/xsh11.lha differ
  7117. diff -rup --new-file baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/schinz/functions.el amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/schinz/functions.el
  7118. --- baseline/fsf/emacs18/amiga/amiga-extra/amiga/contrib/schinz/functions.el    Wed Dec 31 17:00:00 1969
  7119. +++ amiga/fsf/emacs18/amiga/amiga-extra/amiga/contrib/schinz/functions.el    Sat Sep 28 00:00:00 1996
  7120. @@ -0,0 +1,88 @@
  7121. +;; Code contributed by :
  7122. +;;   Michel Schinz     | INTERNET: Week-end: schinz@guano.alphanet.ch
  7123. +;;   Epinettes 10a     |           Week    : schinz@di.epfl.ch
  7124. +;;   CH-2013 COLOMBIER | FIDONET:  2:302/562 (Michel Schinz)
  7125. +
  7126. +
  7127. +   (defun amiga-arexx-add-lib (lib entry)
  7128. +     "Adds the specified ARexx library, with given entry point."
  7129. +     (interactive "sLibrary name: \nnOffset: ")
  7130. +     (amiga-arexx-do-command (concat "CALL ADDLIB('" lib "',0," entry ")") t))
  7131. +
  7132. +   (defun amiga-reqtools-find-file ()
  7133. +     "Like find-file, but with RexxReqTools' file requester."
  7134. +     (interactive)
  7135. +     (amiga-arexx-add-lib "rexxreqtools.library" -30)
  7136. +     (amiga-arexx-do-command (concat "f = rtFileRequest('" default-directory
  7137. +                     "',,'Find file')\n"
  7138. +                     "IF f ~= '' THEN"
  7139. +                     "   '(find-file \"'||f||'\")'") t))
  7140. +
  7141. +   (defun amiga-reqtools-insert-file ()
  7142. +     "Like insert-file, but with RexxReqTools' file requester."
  7143. +     (interactive)
  7144. +     (amiga-arexx-add-lib "rexxreqtools.library" -30)
  7145. +     (amiga-arexx-do-command (concat "f = rtFileRequest('" default-directory
  7146. +                     "',,'Insert file')\n"
  7147. +                     "IF f ~= '' THEN"
  7148. +                     "   '(insert-file \"'||f||'\")'") t))
  7149. +
  7150. +   (defun amiga-reqtools-write-file ()
  7151. +     "Like write-file, but with RexxReqTools' file requester."
  7152. +     (interactive)
  7153. +     (let ((dir (file-name-directory buffer-file-name))
  7154. +       (file (file-name-nondirectory buffer-file-name)))
  7155. +       (amiga-arexx-add-lib "rexxreqtools.library" -30)
  7156. +       (amiga-arexx-do-command (concat "f = rtFileRequest('" dir "','" file
  7157. +                       "','Write file',,"
  7158. +                       "'rtfi_flags=freqf_save')\n"
  7159. +                       "IF f ~= '' THEN"
  7160. +                       "   '(write-file \"'||f||'\")'") t)))
  7161. +
  7162. +   ;;; amiga-update-version-string
  7163. +   ;;; Michel Schinz
  7164. +   ;;; $VER: amiga_verstring.el 1.0 (7.05.1993)
  7165. +
  7166. +   (defun amiga-update-version-string ()
  7167. +     "Create/update a version string (CBM style) on the current line.
  7168. +   If no version string is present on the current line, create a new one
  7169. +   that looks like `$VER: <buffer-name> 1.0 (<current_date>)' at the
  7170. +   point position. If a version string is already present on the current
  7171. +   line, the date is ... updated and the revision is incremented.
  7172. +   Please note that currently, no spaces are allowed in the `name' field."
  7173. +     (interactive)
  7174. +     (save-excursion
  7175. +       (let (end-of-line-pos
  7176. +         name version revision date
  7177. +         (old-point-pos (point-marker)))
  7178. +     (let* ((date-string (current-time-string))
  7179. +        (garbage (string-match
  7180. +              " \\([A-Z][a-z][a-z]\\) *\\([0-9]*\\) .* \\([0-9]*\\)$"
  7181. +              date-string))
  7182. +        (day (substring date-string (match-beginning 2) (match-end 2)))
  7183. +        (month
  7184. +         (cdr (assoc
  7185. +               (substring date-string (match-beginning 1) (match-end 1))
  7186. +               '(("Jan" . "01") ("Feb" . "02") ("Mar" . "03") ("Apr" . "04")
  7187. +             ("May" . "05") ("Jun" . "06") ("Jul" . "07") ("Aug" . "08")
  7188. +             ("Sep" . "09") ("Oct" . "10") ("Nov" . "11") ("Dec" . "12")))))
  7189. +        (year (substring date-string (match-beginning 3) (match-end 3))))
  7190. +       (setq date (concat day "." month "." year)))
  7191. +     (end-of-line)
  7192. +     (setq end-of-line-pos (point))
  7193. +     (beginning-of-line)
  7194. +     (if (search-forward "$VER: " end-of-line-pos t)
  7195. +         (let ((start-of-version-string (- (point) 6)))
  7196. +           (re-search-forward
  7197. +        " *\\([^ ]*\\) *\\([0-9]*\\)\.\\([0-9]*\\) *([0-9.]*)" end-of-line-pos t)
  7198. +           (setq name (buffer-substring (match-beginning 1) (match-end 1))
  7199. +             version (buffer-substring (match-beginning 2) (match-end 2))
  7200. +             revision (+ 1 (string-to-int
  7201. +                    (buffer-substring (match-beginning 3) (match-end 3)))))
  7202. +           (delete-region start-of-version-string (point)))
  7203. +       (progn (setq name (file-name-nondirectory (buffer-name))
  7204. +            version 1
  7205. +            revision 0)
  7206. +          (goto-char old-point-pos)))
  7207. +     (insert (concat "$VER: " name " " version "." revision " (" date ")")))))
  7208. +
  7209. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/alloca.h amiga/fsf/emacs18/amiga/unix/include/alloca.h
  7210. --- baseline/fsf/emacs18/amiga/unix/include/alloca.h    Wed Dec 31 17:00:00 1969
  7211. +++ amiga/fsf/emacs18/amiga/unix/include/alloca.h    Sat Sep 28 00:00:00 1996
  7212. @@ -0,0 +1,8 @@
  7213. +#ifndef ALLOCA_H
  7214. +#define ALLOCA_H
  7215. +
  7216. +#include <stddef.h>
  7217. +
  7218. +void *alloca(size_t size);
  7219. +
  7220. +#endif
  7221. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/amiga/ioctl.h amiga/fsf/emacs18/amiga/unix/include/amiga/ioctl.h
  7222. --- baseline/fsf/emacs18/amiga/unix/include/amiga/ioctl.h    Wed Dec 31 17:00:00 1969
  7223. +++ amiga/fsf/emacs18/amiga/unix/include/amiga/ioctl.h    Sat Sep 28 00:00:00 1996
  7224. @@ -0,0 +1,15 @@
  7225. +#ifndef _AMIGA_H
  7226. +#define _AMIGA_H
  7227. +
  7228. +/* Amiga specific ioctl's */
  7229. +
  7230. +#define _AMIGA_IOCTL_BASE 2048
  7231. +
  7232. +#define _AMIGA_INTERACTIVE (_AMIGA_IOCTL_BASE + 0) /* Is file Interactive ? */
  7233. +#define _AMIGA_GET_FH (_AMIGA_IOCTL_BASE + 1) /* Get an AmigaOS fh for file */
  7234. +#define _AMIGA_FREE_FH (_AMIGA_IOCTL_BASE + 2) /* Free a fh obtained by GET_FH */
  7235. +#define _AMIGA_TRUNCATE (_AMIGA_IOCTL_BASE + 3) /* Truncate file to given size */
  7236. +#define _AMIGA_SETPROTECTION (_AMIGA_IOCTL_BASE + 4) /* Set (amiga) protection on file */
  7237. +#define _AMIGA_DELETE_IF_ME (_AMIGA_IOCTL_BASE + 5) /* Delete myself if I am the file whose lock is passed as parameter */
  7238. +
  7239. +#endif
  7240. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/errno.h amiga/fsf/emacs18/amiga/unix/include/errno.h
  7241. --- baseline/fsf/emacs18/amiga/unix/include/errno.h    Wed Dec 31 17:00:00 1969
  7242. +++ amiga/fsf/emacs18/amiga/unix/include/errno.h    Sat Sep 28 00:00:00 1996
  7243. @@ -0,0 +1,51 @@
  7244. +/**
  7245. +*
  7246. +* The following symbols are the error codes returned by the UNIX system
  7247. +* functions.  Typically, a UNIX function returns -1 when an error occurs,
  7248. +* and the global integer named errno contains one of these values.
  7249. +*
  7250. +*/
  7251. +#define EOSERR -1    /* Operating system error */
  7252. +
  7253. +#define EPERM 1        /* User is not owner */
  7254. +#define ENOENT 2    /* No such file or directory */
  7255. +#define ESRCH 3        /* No such process */
  7256. +#define EINTR 4        /* Interrupted system call */
  7257. +#define EIO 5        /* I/O error */
  7258. +#define ENXIO 6        /* No such device or address */
  7259. +#define E2BIG 7        /* Arg list is too long */
  7260. +#define ENOEXEC 8    /* Exec format error */
  7261. +#define EBADF 9        /* Bad file number */
  7262. +#define ECHILD 10    /* No child process */
  7263. +#define EAGAIN 11    /* No more processes allowed */
  7264. +#define ENOMEM 12    /* No memory available */
  7265. +#define EACCES 13    /* Access denied */
  7266. +#define EFAULT 14    /* Bad address */
  7267. +#define ENOTBLK 15    /* Bulk device required */
  7268. +#define EBUSY 16    /* Resource is busy */
  7269. +#define EEXIST 17    /* File already exists */
  7270. +#define EXDEV 18    /* Cross-device link */
  7271. +#define ENODEV 19    /* No such device */
  7272. +#define ENOTDIR 20    /* Not a directory */
  7273. +#define EISDIR 21    /* Is a directory */
  7274. +#define EINVAL 22    /* Invalid argument */
  7275. +#define ENFILE 23    /* No more files (units) allowed */
  7276. +#define EMFILE 24    /* No more files (units) allowed for this process */
  7277. +#define ENOTTY 25    /* Not a terminal */
  7278. +#define ETXTBSY 26    /* Text file is busy */
  7279. +#define EFBIG 27    /* File is too large */
  7280. +#define ENOSPC 28    /* No space left */
  7281. +#define ESPIPE 29    /* Seek issued to pipe */
  7282. +#define EROFS 30    /* Read-only file system */
  7283. +#define EMLINK 31    /* Too many links */
  7284. +#define EPIPE 32    /* Broken pipe */
  7285. +#define EDOM 33        /* Math function argument error */
  7286. +#define ERANGE 34    /* Math function result is out of range */
  7287. +#define EWOULDBLOCK 35    /* Operation would block */
  7288. +#define ENAMETOOLONG 36 /* File name is too long */
  7289. +#define ENOTEMPTY 37    /* Directory is not empty */
  7290. +#define ELOOP 38    /* Too many soft links found */
  7291. +
  7292. +extern int errno, _OSERR;
  7293. +extern int sys_nerr;
  7294. +extern char *sys_errlist[];
  7295. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/fcntl.h amiga/fsf/emacs18/amiga/unix/include/fcntl.h
  7296. --- baseline/fsf/emacs18/amiga/unix/include/fcntl.h    Wed Dec 31 17:00:00 1969
  7297. +++ amiga/fsf/emacs18/amiga/unix/include/fcntl.h    Sat Sep 28 00:00:00 1996
  7298. @@ -0,0 +1 @@
  7299. +#include <sys/fcntl.h>
  7300. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/grp.h amiga/fsf/emacs18/amiga/unix/include/grp.h
  7301. --- baseline/fsf/emacs18/amiga/unix/include/grp.h    Wed Dec 31 17:00:00 1969
  7302. +++ amiga/fsf/emacs18/amiga/unix/include/grp.h    Sat Sep 28 00:00:00 1996
  7303. @@ -0,0 +1,12 @@
  7304. +#ifndef _GRP_H
  7305. +#define _GRP_H
  7306. +
  7307. +struct group {
  7308. +  char *gr_name;        /* name of the group */
  7309. +  char *gr_passwd;        /* encrypted password of the group */
  7310. +  gid_t gr_gid;            /* numerical group ID */
  7311. +  char **gr_mem;        /* null-terminated array of pointers to the
  7312. +                   individual member names */
  7313. +};
  7314. +
  7315. +#endif
  7316. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/internal/devices.h amiga/fsf/emacs18/amiga/unix/include/internal/devices.h
  7317. --- baseline/fsf/emacs18/amiga/unix/include/internal/devices.h    Wed Dec 31 17:00:00 1969
  7318. +++ amiga/fsf/emacs18/amiga/unix/include/internal/devices.h    Sat Sep 28 00:00:00 1996
  7319. @@ -0,0 +1,9 @@
  7320. +#ifndef DEVICES_H
  7321. +#define DEVICES_H
  7322. +
  7323. +struct IORequest *_device_open(char *name, unsigned long unit, unsigned long flags,
  7324. +                   void *data, unsigned long data_len, int req_size);
  7325. +
  7326. +void _device_close(struct IORequest *ioreq);
  7327. +
  7328. +#endif
  7329. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/internal/files.h amiga/fsf/emacs18/amiga/unix/include/internal/files.h
  7330. --- baseline/fsf/emacs18/amiga/unix/include/internal/files.h    Wed Dec 31 17:00:00 1969
  7331. +++ amiga/fsf/emacs18/amiga/unix/include/internal/files.h    Sat Sep 28 00:00:00 1996
  7332. @@ -0,0 +1,35 @@
  7333. +#ifndef FILES_H
  7334. +#define FILES_H
  7335. +
  7336. +struct fileinfo {
  7337. +  int flags;
  7338. +  void *userinfo;
  7339. +  unsigned long (*__regargs select_start)(void *userinfo, int rd, int wr);
  7340. +  void (*__regargs select_poll)(void *userinfo, int *rd, int *wr);
  7341. +  int (*__regargs read)(void *userinfo, void *buffer, unsigned int length);
  7342. +  int (*__regargs write)(void *userinfo, void *buffer, unsigned int length);
  7343. +  int (*__regargs lseek)(void *userinfo, long rpos, int mode);
  7344. +  int (*__regargs close)(void *userinfo, int internal);
  7345. +  int (*__regargs ioctl)(void *userinfo, int request, void *data);
  7346. +};
  7347. +
  7348. +/* FI_READ & WRITE replace O_RDONLY, WRONLY & RDWR. Other flags are left untouched */
  7349. +#define FI_READ 1
  7350. +#define FI_WRITE 2
  7351. +
  7352. +int _alloc_fd(void *userinfo, int flags,
  7353. +  unsigned long (*__regargs select_start)(void *userinfo, int rd, int wr),
  7354. +  void (*__regargs select_poll)(void *userinfo, int *rd, int *wr),
  7355. +  int (*__regargs read)(void *userinfo, void *buffer, unsigned int length),
  7356. +  int (*__regargs write)(void *userinfo, void *buffer, unsigned int length),
  7357. +  int (*__regargs lseek)(void *userinfo, long rpos, int mode),
  7358. +  int (*__regargs close)(void *userinfo, int internal),
  7359. +  int (*__regargs ioctl)(void *userinfo, int request, void *data)
  7360. +);
  7361. +
  7362. +void _free_fd(int fd);
  7363. +
  7364. +struct fileinfo *_find_fd(int fd);
  7365. +int _last_fd(void);
  7366. +
  7367. +#endif
  7368. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/internal/messages.h amiga/fsf/emacs18/amiga/unix/include/internal/messages.h
  7369. --- baseline/fsf/emacs18/amiga/unix/include/internal/messages.h    Wed Dec 31 17:00:00 1969
  7370. +++ amiga/fsf/emacs18/amiga/unix/include/internal/messages.h    Sat Sep 28 00:00:00 1996
  7371. @@ -0,0 +1,9 @@
  7372. +void _message(char *format, ...);
  7373. +/* Display a message which is as visible as possible (either to the console
  7374. +   or to a requester).
  7375. +   Assume very little about library state */
  7376. +void _fail(char *format, ...);
  7377. +/* Display a message which is as visible as possible (either to the console
  7378. +   or to a requester).
  7379. +   Assume very little about library state.
  7380. +   Exit with error code RETURN_FAIL after that. */
  7381. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/internal/timers.h amiga/fsf/emacs18/amiga/unix/include/internal/timers.h
  7382. --- baseline/fsf/emacs18/amiga/unix/include/internal/timers.h    Wed Dec 31 17:00:00 1969
  7383. +++ amiga/fsf/emacs18/amiga/unix/include/internal/timers.h    Sat Sep 28 00:00:00 1996
  7384. @@ -0,0 +1,20 @@
  7385. +#ifndef TIMERS_H
  7386. +#define TIMERS_H
  7387. +
  7388. +struct timeinfo {
  7389. +  struct timerequest *io;
  7390. +  int sent;
  7391. +};
  7392. +
  7393. +struct timeinfo *_alloc_timer(void);
  7394. +void _free_timer(struct timeinfo *timer);
  7395. +void _timer_abort(struct timeinfo *timer);
  7396. +ULONG _timer_sig(struct timeinfo *timer);
  7397. +
  7398. +void _timer_start(struct timeinfo *timer, int secs, int micros);
  7399. +/* _timer_start(timer, 0) stops a timer */
  7400. +
  7401. +int _timer_expired(struct timeinfo *timer);
  7402. +/* A non-started timer is defined to not have expired */
  7403. +
  7404. +#endif
  7405. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/internal/vars.h amiga/fsf/emacs18/amiga/unix/include/internal/vars.h
  7406. --- baseline/fsf/emacs18/amiga/unix/include/internal/vars.h    Wed Dec 31 17:00:00 1969
  7407. +++ amiga/fsf/emacs18/amiga/unix/include/internal/vars.h    Sat Sep 28 00:00:00 1996
  7408. @@ -0,0 +1,11 @@
  7409. +#ifndef VARS_H
  7410. +#define VARS_H
  7411. +
  7412. +/* <_us, _startup_time> should be a pretty good unique identifier of
  7413. +   this process */
  7414. +extern struct Process *_us;
  7415. +extern long _stack_size;
  7416. +extern long _startup_time;
  7417. +extern int use_amiga_flags;
  7418. +
  7419. +#endif
  7420. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/pwd.h amiga/fsf/emacs18/amiga/unix/include/pwd.h
  7421. --- baseline/fsf/emacs18/amiga/unix/include/pwd.h    Wed Dec 31 17:00:00 1969
  7422. +++ amiga/fsf/emacs18/amiga/unix/include/pwd.h    Sat Sep 28 00:00:00 1996
  7423. @@ -0,0 +1,19 @@
  7424. +#ifndef _PWD_H
  7425. +#define _PWD_H
  7426. +
  7427. +struct    passwd {
  7428. +  char *pw_name;
  7429. +  char *pw_passwd;
  7430. +  uid_t pw_uid;
  7431. +  gid_t pw_gid;
  7432. +  int  pw_quota;
  7433. +  char *pw_comment;
  7434. +  char *pw_gecos;
  7435. +  char *pw_dir;
  7436. +  char *pw_shell;
  7437. +};
  7438. +
  7439. +struct passwd *getpwuid(uid_t uid);
  7440. +struct passwd *getpwnam(char *name);
  7441. +
  7442. +#endif
  7443. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/setjmp.h amiga/fsf/emacs18/amiga/unix/include/setjmp.h
  7444. --- baseline/fsf/emacs18/amiga/unix/include/setjmp.h    Wed Dec 31 17:00:00 1969
  7445. +++ amiga/fsf/emacs18/amiga/unix/include/setjmp.h    Sat Sep 28 00:00:00 1996
  7446. @@ -0,0 +1,55 @@
  7447. +/*-
  7448. + * Copyright (c) 1990 The Regents of the University of California.
  7449. + * All rights reserved.
  7450. + *
  7451. + * Redistribution and use in source and binary forms, with or without
  7452. + * modification, are permitted provided that the following conditions
  7453. + * are met:
  7454. + * 1. Redistributions of source code must retain the above copyright
  7455. + *    notice, this list of conditions and the following disclaimer.
  7456. + * 2. Redistributions in binary form must reproduce the above copyright
  7457. + *    notice, this list of conditions and the following disclaimer in the
  7458. + *    documentation and/or other materials provided with the distribution.
  7459. + * 3. All advertising materials mentioning features or use of this software
  7460. + *    must display the following acknowledgement:
  7461. + *    This product includes software developed by the University of
  7462. + *    California, Berkeley and its contributors.
  7463. + * 4. Neither the name of the University nor the names of its contributors
  7464. + *    may be used to endorse or promote products derived from this software
  7465. + *    without specific prior written permission.
  7466. + *
  7467. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  7468. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  7469. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  7470. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  7471. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  7472. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  7473. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  7474. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  7475. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  7476. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  7477. + * SUCH DAMAGE.
  7478. + *
  7479. + *    @(#)setjmp.h    5.5 (Berkeley) 6/8/91
  7480. + */
  7481. +
  7482. +#ifndef _SETJMP_H_
  7483. +#define _SETJMP_H_
  7484. +
  7485. +#define _JBLEN 14
  7486. +
  7487. +typedef int jmp_buf[_JBLEN];
  7488. +
  7489. +#include <sys/cdefs.h>
  7490. +
  7491. +__BEGIN_DECLS
  7492. +int    setjmp __P((jmp_buf));
  7493. +void    longjmp __P((jmp_buf, int));
  7494. +
  7495. +#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
  7496. +int    _setjmp __P((jmp_buf));
  7497. +void    _longjmp __P((jmp_buf, int));
  7498. +#endif /* neither ANSI nor POSIX */
  7499. +__END_DECLS
  7500. +
  7501. +#endif /* !_SETJMP_H_ */
  7502. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/signal.h amiga/fsf/emacs18/amiga/unix/include/signal.h
  7503. --- baseline/fsf/emacs18/amiga/unix/include/signal.h    Wed Dec 31 17:00:00 1969
  7504. +++ amiga/fsf/emacs18/amiga/unix/include/signal.h    Sat Sep 28 00:00:00 1996
  7505. @@ -0,0 +1,59 @@
  7506. +#ifndef _SIGNAL_H
  7507. +#define _SIGNAL_H
  7508. +
  7509. +#define NSIG 32            /* We define lots of signals (though most are never
  7510. +                   generated) */
  7511. +
  7512. +/* Signal number definitions */
  7513. +/* Those which can be generated other than by kill are described with
  7514. +    <name>, amiga: <cause> */
  7515. +   
  7516. +
  7517. +#define SIGHUP 1        /* hangup */
  7518. +#define SIGINT 2        /* interrupt, amiga: ctrl-c */
  7519. +#define SIGQUIT 3        /* quit, amiga: ctrl-d */
  7520. +#define SIGILL 4        /* illegal instruction */
  7521. +#define SIGTRAP 5        /* trace trap */
  7522. +#define SIGIOT 6        /* abort, amiga: abort() called */
  7523. +#define SIGEMT 7        /* emulator trap */
  7524. +#define SIGFPE 8        /* arithmetic exception, amiga: arith op */
  7525. +#define SIGKILL 9        /* kill */
  7526. +#define SIGBUS 10        /* bus error */
  7527. +#define SIGSEGV 11        /* segmentation violation */
  7528. +#define SIGSYS 12        /* bad argument to system call */
  7529. +#define SIGPIPE 13        /* write on pipe or socket with no reader,
  7530. +                   amiga: generated for 'pipe's or 'sktpair's */
  7531. +#define SIGALRM 14        /* alarm clock, amiga: see alarm */
  7532. +#define SIGTERM 15        /* software termination */
  7533. +#define SIGURG 16        /* urgent condition on socket */
  7534. +/* SIGSTOP, SIGTSTP, SIGCONT, SIGTTIN, SIGTTOU undefined to avoid creating the
  7535. +   belief that we support stopped processes */
  7536. +#define SIGCHLD 20        /* child status has changed */
  7537. +#define SIGIO 23        /* I/O possible on a descriptor */
  7538. +/* Less usual signals: SIGXCPU, SIGXFSZ, SIGVTALARM, SIGPROF, SIGLOST not defined */
  7539. +#define SIGWINCH 28        /* window changed */
  7540. +#define SIGUSR1 30        /* user-defined signal 1 */
  7541. +#define SIGUSR2 31        /* user-defined signal 2 */
  7542. +
  7543. +#define SIG_IGN (void *)0
  7544. +#define SIG_DFL (void *)1
  7545. +
  7546. +struct sigvec {
  7547. +  void (*sv_handler)();
  7548. +  long sv_mask;
  7549. +  /*int sv_flags;*/ /* Not implemented */
  7550. +};
  7551. +
  7552. +void (*signal(int sig,void (*fn)(int)))(int);
  7553. +int sigvec(int sig, struct sigvec *vec, struct sigvec *ovec);
  7554. +long sigsetmask(long mask);
  7555. +long sigblock(long mask);
  7556. +
  7557. +#define sigmask(s) (1 << (s))
  7558. +
  7559. +/* Only kill(getpid(), sig) works */
  7560. +/* Also, getpid() is a unique number for this process */
  7561. +int getpid(void);
  7562. +int kill(int pid, int sig);
  7563. +
  7564. +#endif
  7565. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/stat.h amiga/fsf/emacs18/amiga/unix/include/stat.h
  7566. --- baseline/fsf/emacs18/amiga/unix/include/stat.h    Wed Dec 31 17:00:00 1969
  7567. +++ amiga/fsf/emacs18/amiga/unix/include/stat.h    Sat Sep 28 00:00:00 1996
  7568. @@ -0,0 +1 @@
  7569. +#include <sys/stat.h>
  7570. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/stdio.h amiga/fsf/emacs18/amiga/unix/include/stdio.h
  7571. --- baseline/fsf/emacs18/amiga/unix/include/stdio.h    Wed Dec 31 17:00:00 1969
  7572. +++ amiga/fsf/emacs18/amiga/unix/include/stdio.h    Sat Sep 28 00:00:00 1996
  7573. @@ -0,0 +1,7 @@
  7574. +/* Avoid problems with conflicting declarations for mkdir */
  7575. +#define mkdir __fake_mkdir
  7576. +#include "include:stdio.h"
  7577. +
  7578. +#define P_tmpdir "t:"
  7579. +
  7580. +#undef mkdir
  7581. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/stdlib.h amiga/fsf/emacs18/amiga/unix/include/stdlib.h
  7582. --- baseline/fsf/emacs18/amiga/unix/include/stdlib.h    Wed Dec 31 17:00:00 1969
  7583. +++ amiga/fsf/emacs18/amiga/unix/include/stdlib.h    Sat Sep 28 00:00:00 1996
  7584. @@ -0,0 +1,4 @@
  7585. +/* Avoid problems with conflicting declarations for mkdir */
  7586. +#define mkdir __fake_mkdir
  7587. +#include "include:stdlib.h"
  7588. +#undef mkdir
  7589. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/strings.h amiga/fsf/emacs18/amiga/unix/include/strings.h
  7590. --- baseline/fsf/emacs18/amiga/unix/include/strings.h    Wed Dec 31 17:00:00 1969
  7591. +++ amiga/fsf/emacs18/amiga/unix/include/strings.h    Sat Sep 28 00:00:00 1996
  7592. @@ -0,0 +1 @@
  7593. +#include <string.h>
  7594. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/cdefs.h amiga/fsf/emacs18/amiga/unix/include/sys/cdefs.h
  7595. --- baseline/fsf/emacs18/amiga/unix/include/sys/cdefs.h    Wed Dec 31 17:00:00 1969
  7596. +++ amiga/fsf/emacs18/amiga/unix/include/sys/cdefs.h    Sat Sep 28 00:00:00 1996
  7597. @@ -0,0 +1,78 @@
  7598. +/*
  7599. + * Copyright (c) 1991 The Regents of the University of California.
  7600. + * All rights reserved.
  7601. + *
  7602. + * Redistribution and use in source and binary forms, with or without
  7603. + * modification, are permitted provided that the following conditions
  7604. + * are met:
  7605. + * 1. Redistributions of source code must retain the above copyright
  7606. + *    notice, this list of conditions and the following disclaimer.
  7607. + * 2. Redistributions in binary form must reproduce the above copyright
  7608. + *    notice, this list of conditions and the following disclaimer in the
  7609. + *    documentation and/or other materials provided with the distribution.
  7610. + * 3. All advertising materials mentioning features or use of this software
  7611. + *    must display the following acknowledgement:
  7612. + *    This product includes software developed by the University of
  7613. + *    California, Berkeley and its contributors.
  7614. + * 4. Neither the name of the University nor the names of its contributors
  7615. + *    may be used to endorse or promote products derived from this software
  7616. + *    without specific prior written permission.
  7617. + *
  7618. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  7619. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  7620. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  7621. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  7622. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  7623. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  7624. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  7625. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  7626. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  7627. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  7628. + * SUCH DAMAGE.
  7629. + *
  7630. + *    @(#)cdefs.h    7.6 (Berkeley) 5/4/91
  7631. + */
  7632. +
  7633. +#ifndef    _CDEFS_H_
  7634. +#define    _CDEFS_H_
  7635. +
  7636. +#if defined(__cplusplus)
  7637. +#define    __BEGIN_DECLS    extern "C" {
  7638. +#define    __END_DECLS    };
  7639. +#else
  7640. +#define    __BEGIN_DECLS
  7641. +#define    __END_DECLS
  7642. +#endif
  7643. +
  7644. +/*
  7645. + * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
  7646. + * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
  7647. + * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
  7648. + * in between its arguments.  __CONCAT can also concatenate double-quoted
  7649. + * strings produced by the __STRING macro, but this only works with ANSI C.
  7650. + */
  7651. +#if defined(__STDC__) || defined(__cplusplus)
  7652. +#define    __P(protos)    protos        /* full-blown ANSI C */
  7653. +#define    __CONCAT(x,y)    x ## y
  7654. +#define    __STRING(x)    #x
  7655. +
  7656. +#else    /* !(__STDC__ || __cplusplus) */
  7657. +#define    __P(protos)    ()        /* traditional C preprocessor */
  7658. +#define    __CONCAT(x,y)    x/**/y
  7659. +#define    __STRING(x)    "x"
  7660. +
  7661. +#ifdef __GNUC__
  7662. +#define    const        __const        /* GCC: ANSI C with -traditional */
  7663. +#define    inline        __inline
  7664. +#define    signed        __signed
  7665. +#define    volatile    __volatile
  7666. +
  7667. +#else    /* !__GNUC__ */
  7668. +#define    const                /* delete ANSI C keywords */
  7669. +#define    inline
  7670. +#define    signed
  7671. +#define    volatile
  7672. +#endif    /* !__GNUC__ */
  7673. +#endif    /* !(__STDC__ || __cplusplus) */
  7674. +
  7675. +#endif /* !_CDEFS_H_ */
  7676. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/fcntl.h amiga/fsf/emacs18/amiga/unix/include/sys/fcntl.h
  7677. --- baseline/fsf/emacs18/amiga/unix/include/sys/fcntl.h    Wed Dec 31 17:00:00 1969
  7678. +++ amiga/fsf/emacs18/amiga/unix/include/sys/fcntl.h    Sat Sep 28 00:00:00 1996
  7679. @@ -0,0 +1,193 @@
  7680. +/*-
  7681. + * Copyright (c) 1983, 1990 The Regents of the University of California.
  7682. + * All rights reserved.
  7683. + *
  7684. + * Redistribution and use in source and binary forms, with or without
  7685. + * modification, are permitted provided that the following conditions
  7686. + * are met:
  7687. + * 1. Redistributions of source code must retain the above copyright
  7688. + *    notice, this list of conditions and the following disclaimer.
  7689. + * 2. Redistributions in binary form must reproduce the above copyright
  7690. + *    notice, this list of conditions and the following disclaimer in the
  7691. + *    documentation and/or other materials provided with the distribution.
  7692. + * 3. All advertising materials mentioning features or use of this software
  7693. + *    must display the following acknowledgement:
  7694. + *    This product includes software developed by the University of
  7695. + *    California, Berkeley and its contributors.
  7696. + * 4. Neither the name of the University nor the names of its contributors
  7697. + *    may be used to endorse or promote products derived from this software
  7698. + *    without specific prior written permission.
  7699. + *
  7700. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  7701. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  7702. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  7703. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  7704. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  7705. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  7706. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  7707. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  7708. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  7709. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  7710. + * SUCH DAMAGE.
  7711. + *
  7712. + *    @(#)fcntl.h    5.14 (Berkeley) 7/1/91
  7713. + */
  7714. +
  7715. +#ifndef _FCNTL_H_
  7716. +#define    _FCNTL_H_
  7717. +
  7718. +/*
  7719. + * This file includes the definitions for open and fcntl
  7720. + * described by POSIX for <fcntl.h>; it also includes
  7721. + * related kernel definitions.
  7722. + */
  7723. +
  7724. +#ifndef KERNEL
  7725. +#include <sys/types.h>
  7726. +#endif
  7727. +
  7728. +/*
  7729. + * File status flags: these are used by open(2), fcntl(2).
  7730. + * They are also used (indirectly) in the kernel file structure f_flags,
  7731. + * which is a superset of the open/fcntl flags.  Open flags and f_flags
  7732. + * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
  7733. + * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
  7734. + */
  7735. +/* open-only flags */
  7736. +#define    O_RDONLY    0x0000        /* open for reading only */
  7737. +#define    O_WRONLY    0x0001        /* open for writing only */
  7738. +#define    O_RDWR        0x0002        /* open for reading and writing */
  7739. +#define    O_ACCMODE    0x0003        /* mask for above modes */
  7740. +
  7741. +#ifdef KERNEL
  7742. +/*
  7743. + * Kernel encoding of open mode; separate read and write bits
  7744. + * that are independently testable: 1 greater than the above.
  7745. + */
  7746. +#define    FREAD        0x0001
  7747. +#define    FWRITE        0x0002
  7748. +#endif
  7749. +#define    O_NONBLOCK    0x0004        /* no delay */
  7750. +#define    O_APPEND    0x0008        /* set append mode */
  7751. +#ifndef _POSIX_SOURCE
  7752. +#define    O_SHLOCK    0x0010        /* open with shared file lock */
  7753. +#define    O_EXLOCK    0x0020        /* open with exclusive file lock */
  7754. +#define    O_ASYNC        0x0040        /* signal pgrp when data ready */
  7755. +#define    O_FSYNC        0x0080        /* synchronous writes */
  7756. +#endif
  7757. +#define    O_CREAT        0x0100        /* create if nonexistant */
  7758. +#define    O_TRUNC        0x0200        /* truncate to zero length */
  7759. +#define    O_EXCL        0x0400        /* error if already exists */
  7760. +#ifdef KERNEL
  7761. +#define    FMARK        0x1000        /* mark during gc() */
  7762. +#define    FDEFER        0x2000        /* defer for next gc pass */
  7763. +#define    FHASLOCK    0x4000        /* descriptor holds advisory lock */
  7764. +#endif
  7765. +
  7766. +/* defined by POSIX 1003.1; BSD default, so no bit required */
  7767. +#define    O_NOCTTY    0        /* don't assign controlling terminal */
  7768. +
  7769. +#ifdef KERNEL
  7770. +/* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */
  7771. +#define    FFLAGS(oflags)    ((oflags) + 1)
  7772. +#define    OFLAGS(fflags)    ((fflags) - 1)
  7773. +
  7774. +/* bits to save after open */
  7775. +#define    FMASK        (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
  7776. +/* bits settable by fcntl(F_SETFL, ...) */
  7777. +#define    FCNTLFLAGS    (FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
  7778. +#endif
  7779. +
  7780. +/*
  7781. + * The O_* flags used to have only F* names, which were used in the kernel
  7782. + * and by fcntl.  We retain the F* names for the kernel f_flags field
  7783. + * and for backward compatibility for fcntl.
  7784. + */
  7785. +#ifndef _POSIX_SOURCE
  7786. +#define    FAPPEND        O_APPEND    /* kernel/compat */
  7787. +#define    FASYNC        O_ASYNC        /* kernel/compat */
  7788. +#define    FFSYNC        O_FSYNC        /* kernel */
  7789. +#define    FNONBLOCK    O_NONBLOCK    /* kernel */
  7790. +#define    FNDELAY        O_NONBLOCK    /* compat */
  7791. +#define    O_NDELAY    O_NONBLOCK    /* compat */
  7792. +#endif
  7793. +
  7794. +/*
  7795. + * Constants used for fcntl(2)
  7796. + */
  7797. +
  7798. +/* command values */
  7799. +#define    F_DUPFD        0        /* duplicate file descriptor */
  7800. +#define    F_GETFD        1        /* get file descriptor flags */
  7801. +#define    F_SETFD        2        /* set file descriptor flags */
  7802. +#define    F_GETFL        3        /* get file status flags */
  7803. +#define    F_SETFL        4        /* set file status flags */
  7804. +#ifndef _POSIX_SOURCE
  7805. +#define    F_GETOWN    5        /* get SIGIO/SIGURG proc/pgrp */
  7806. +#define F_SETOWN    6        /* set SIGIO/SIGURG proc/pgrp */
  7807. +#endif
  7808. +#define    F_GETLK        7        /* get record locking information */
  7809. +#define    F_SETLK        8        /* set record locking information */
  7810. +#define    F_SETLKW    9        /* F_SETLK; wait if blocked */
  7811. +
  7812. +/* file descriptor flags (F_GETFD, F_SETFD) */
  7813. +#define    FD_CLOEXEC    1        /* close-on-exec flag */
  7814. +
  7815. +/* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
  7816. +#define    F_RDLCK        1        /* shared or read lock */
  7817. +#define    F_UNLCK        2        /* unlock */
  7818. +#define    F_WRLCK        3        /* exclusive or write lock */
  7819. +#ifdef KERNEL
  7820. +#define    F_WAIT        0x010        /* Wait until lock is granted */
  7821. +#define    F_FLOCK        0x020         /* Use flock(2) semantics for lock */
  7822. +#define    F_POSIX        0x040         /* Use POSIX semantics for lock */
  7823. +#endif
  7824. +
  7825. +/*
  7826. + * Advisory file segment locking data type -
  7827. + * information passed to system by user
  7828. + */
  7829. +struct flock {
  7830. +    short    l_type;        /* lock type: read/write, etc. */
  7831. +    short    l_whence;    /* type of l_start */
  7832. +    off_t    l_start;    /* starting offset */
  7833. +    off_t    l_len;        /* len = 0 means until end of file */
  7834. +    pid_t    l_pid;        /* lock owner */
  7835. +};
  7836. +
  7837. +
  7838. +#ifndef _POSIX_SOURCE
  7839. +/* lock operations for flock(2) */
  7840. +#define    LOCK_SH        0x01        /* shared file lock */
  7841. +#define    LOCK_EX        0x02        /* exclusive file lock */
  7842. +#define    LOCK_NB        0x04        /* don't block when locking */
  7843. +#define    LOCK_UN        0x08        /* unlock file */
  7844. +#endif
  7845. +
  7846. +
  7847. +#ifndef KERNEL
  7848. +#include <sys/cdefs.h>
  7849. +
  7850. +__BEGIN_DECLS
  7851. +int    open __P((const char *, int, ...));
  7852. +int    creat __P((const char *, mode_t));
  7853. +int    fcntl __P((int, int, ...));
  7854. +#ifndef _POSIX_SOURCE
  7855. +int    flock __P((int, int));
  7856. +#endif /* !_POSIX_SOURCE */
  7857. +__END_DECLS
  7858. +#endif
  7859. +
  7860. +#ifdef AMIGA
  7861. +#define O_NO_CLOSE 0x100    /* An available value, means don't close
  7862. +                   underlying resource */
  7863. +/* Note: S_ISVTX (sticky) is mapped to the pure bit.
  7864. +         The amiga script bit is mapped to world execute ...
  7865. +     user S_IWRITE is the and of the amiga write & delete bits.
  7866. +     group S_IWRITE is the amiga write bit.
  7867. +     world S_IWRITE is the amiga delete bit.
  7868. +     We always set the archive bit off.
  7869. +*/
  7870. +#endif
  7871. +
  7872. +#endif /* !_FCNTL_H_ */
  7873. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/file.h amiga/fsf/emacs18/amiga/unix/include/sys/file.h
  7874. --- baseline/fsf/emacs18/amiga/unix/include/sys/file.h    Wed Dec 31 17:00:00 1969
  7875. +++ amiga/fsf/emacs18/amiga/unix/include/sys/file.h    Sat Sep 28 00:00:00 1996
  7876. @@ -0,0 +1,2 @@
  7877. +#include <fcntl.h>
  7878. +#include <sys/unistd.h>
  7879. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/filio.h amiga/fsf/emacs18/amiga/unix/include/sys/filio.h
  7880. --- baseline/fsf/emacs18/amiga/unix/include/sys/filio.h    Wed Dec 31 17:00:00 1969
  7881. +++ amiga/fsf/emacs18/amiga/unix/include/sys/filio.h    Sat Sep 28 00:00:00 1996
  7882. @@ -0,0 +1,3 @@
  7883. +#define FIONBIO 0        /* ioctl to change non blocking mode
  7884. +                   data (an int *) is a pointer a boolean,
  7885. +                   TRUE for non-blocking io */
  7886. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/ioctl.h amiga/fsf/emacs18/amiga/unix/include/sys/ioctl.h
  7887. --- baseline/fsf/emacs18/amiga/unix/include/sys/ioctl.h    Wed Dec 31 17:00:00 1969
  7888. +++ amiga/fsf/emacs18/amiga/unix/include/sys/ioctl.h    Sat Sep 28 00:00:00 1996
  7889. @@ -0,0 +1 @@
  7890. +#include <sys/termios.h>
  7891. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/param.h amiga/fsf/emacs18/amiga/unix/include/sys/param.h
  7892. --- baseline/fsf/emacs18/amiga/unix/include/sys/param.h    Wed Dec 31 17:00:00 1969
  7893. +++ amiga/fsf/emacs18/amiga/unix/include/sys/param.h    Sat Sep 28 00:00:00 1996
  7894. @@ -0,0 +1,11 @@
  7895. +#ifndef _PARAM_H
  7896. +#define _PARAM_H
  7897. +
  7898. +#define MAXPATHLEN 1024
  7899. +#define DEV_BSIZE 512
  7900. +
  7901. +#ifndef NULL
  7902. +#define NULL (0)
  7903. +#endif
  7904. +
  7905. +#endif
  7906. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/socket.h amiga/fsf/emacs18/amiga/unix/include/sys/socket.h
  7907. --- baseline/fsf/emacs18/amiga/unix/include/sys/socket.h    Wed Dec 31 17:00:00 1969
  7908. +++ amiga/fsf/emacs18/amiga/unix/include/sys/socket.h    Sat Sep 28 00:00:00 1996
  7909. @@ -0,0 +1,4 @@
  7910. +/* Support for socket pairs only */
  7911. +
  7912. +#define AF_UNIX 0
  7913. +#define SOCK_STREAM 0
  7914. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/stat.h amiga/fsf/emacs18/amiga/unix/include/sys/stat.h
  7915. --- baseline/fsf/emacs18/amiga/unix/include/sys/stat.h    Wed Dec 31 17:00:00 1969
  7916. +++ amiga/fsf/emacs18/amiga/unix/include/sys/stat.h    Sat Sep 28 00:00:00 1996
  7917. @@ -0,0 +1,133 @@
  7918. +#ifndef _STAT_H
  7919. +#define _STAT_H
  7920. +
  7921. +/*-
  7922. + * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
  7923. + * All rights reserved.
  7924. + *
  7925. + * Redistribution and use in source and binary forms, with or without
  7926. + * modification, are permitted provided that the following conditions
  7927. + * are met:
  7928. + * 1. Redistributions of source code must retain the above copyright
  7929. + *    notice, this list of conditions and the following disclaimer.
  7930. + * 2. Redistributions in binary form must reproduce the above copyright
  7931. + *    notice, this list of conditions and the following disclaimer in the
  7932. + *    documentation and/or other materials provided with the distribution.
  7933. + * 3. All advertising materials mentioning features or use of this software
  7934. + *    must display the following acknowledgement:
  7935. + *    This product includes software developed by the University of
  7936. + *    California, Berkeley and its contributors.
  7937. + * 4. Neither the name of the University nor the names of its contributors
  7938. + *    may be used to endorse or promote products derived from this software
  7939. + *    without specific prior written permission.
  7940. + *
  7941. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  7942. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  7943. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  7944. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  7945. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  7946. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  7947. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  7948. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  7949. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  7950. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  7951. + * SUCH DAMAGE.
  7952. + *
  7953. + *    @(#)stat.h    7.11 (Berkeley) 3/3/91
  7954. + */
  7955. +
  7956. +struct stat
  7957. +{
  7958. +    dev_t    st_dev;            /* inode's device */
  7959. +    ino_t    st_ino;            /* inode's number */
  7960. +    mode_t    st_mode;        /* inode protection mode */
  7961. +    nlink_t    st_nlink;        /* number of hard links */
  7962. +    uid_t    st_uid;            /* user ID of the file's owner */
  7963. +    gid_t    st_gid;            /* group ID of the file's group */
  7964. +    dev_t    st_rdev;        /* device type */
  7965. +    off_t    st_size;        /* file size, in bytes */
  7966. +    time_t    st_atime;        /* time of last access */
  7967. +    long    st_spare1;
  7968. +    time_t    st_mtime;        /* time of last data modification */
  7969. +    long    st_spare2;
  7970. +    time_t    st_ctime;        /* time of last file status change */
  7971. +    long    st_spare3;
  7972. +    long    st_blksize;        /* optimal blocksize for I/O */
  7973. +    long    st_blocks;        /* blocks allocated for file */
  7974. +    u_long    st_flags;        /* user defined flags for file */
  7975. +    u_long    st_gen;            /* file generation number */
  7976. +};
  7977. +
  7978. +#define    S_ISUID    0004000            /* set user id on execution */
  7979. +#define    S_ISGID    0002000            /* set group id on execution */
  7980. +#ifndef _POSIX_SOURCE
  7981. +#define    S_ISTXT    0001000            /* sticky bit */
  7982. +#endif
  7983. +
  7984. +#define    S_IRWXU    0000700            /* RWX mask for owner */
  7985. +#define    S_IRUSR    0000400            /* R for owner */
  7986. +#define    S_IWUSR    0000200            /* W for owner */
  7987. +#define    S_IXUSR    0000100            /* X for owner */
  7988. +
  7989. +#ifndef _POSIX_SOURCE
  7990. +#define    S_IREAD        S_IRUSR
  7991. +#define    S_IWRITE    S_IWUSR
  7992. +#define    S_IEXEC        S_IXUSR
  7993. +#endif
  7994. +
  7995. +#define    S_IRWXG    0000070            /* RWX mask for group */
  7996. +#define    S_IRGRP    0000040            /* R for group */
  7997. +#define    S_IWGRP    0000020            /* W for group */
  7998. +#define    S_IXGRP    0000010            /* X for group */
  7999. +
  8000. +#define    S_IRWXO    0000007            /* RWX mask for other */
  8001. +#define    S_IROTH    0000004            /* R for other */
  8002. +#define    S_IWOTH    0000002            /* W for other */
  8003. +#define    S_IXOTH    0000001            /* X for other */
  8004. +
  8005. +#ifndef _POSIX_SOURCE
  8006. +#define    S_IFMT     0170000        /* type of file */
  8007. +#define    S_IFIFO     0010000        /* named pipe (fifo) */
  8008. +#define    S_IFCHR     0020000        /* character special */
  8009. +#define    S_IFDIR     0040000        /* directory */
  8010. +#define    S_IFBLK     0060000        /* block special */
  8011. +#define    S_IFREG     0100000        /* regular */
  8012. +#define    S_IFLNK     0120000        /* symbolic link */
  8013. +#define    S_IFSOCK 0140000        /* socket */
  8014. +
  8015. +#define    S_ISVTX     0001000        /* save swapped text even after use */
  8016. +
  8017. +#define S_BLKSIZE    512        /* block size used in the stat struct */
  8018. +
  8019. +                    /* 0666 */
  8020. +#define    DEFFILEMODE    (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
  8021. +#endif
  8022. +
  8023. +#define    S_ISDIR(m)    ((m & 0170000) == 0040000)    /* directory */
  8024. +#define    S_ISCHR(m)    ((m & 0170000) == 0020000)    /* char special */
  8025. +#define    S_ISBLK(m)    ((m & 0170000) == 0060000)    /* block special */
  8026. +#define    S_ISREG(m)    ((m & 0170000) == 0100000)    /* regular file */
  8027. +#define    S_ISFIFO(m)    ((m & 0170000) == 0010000)    /* fifo */
  8028. +#ifndef _POSIX_SOURCE
  8029. +#define    S_ISLNK(m)    ((m & 0170000) == 0120000)    /* symbolic link */
  8030. +#define    S_ISSOCK(m)    ((m & 0170000) == 0140000)    /* socket */
  8031. +#endif
  8032. +
  8033. +#ifndef KERNEL
  8034. +#include <sys/cdefs.h>
  8035. +
  8036. +__BEGIN_DECLS
  8037. +mode_t    umask __P((mode_t));
  8038. +int    chmod __P((const char *, mode_t));
  8039. +int    fstat __P((int, struct stat *));
  8040. +int    mkdir __P((char *, mode_t));
  8041. +int    mkfifo __P((char *, mode_t));
  8042. +int    stat __P((char *, struct stat *));
  8043. +#ifndef _POSIX_SOURCE
  8044. +int    fchmod __P((int, mode_t));
  8045. +int    lstat __P((char *, struct stat *));
  8046. +#endif /* not POSIX */
  8047. +__END_DECLS
  8048. +#endif
  8049. +
  8050. +#endif
  8051. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/termios.h amiga/fsf/emacs18/amiga/unix/include/sys/termios.h
  8052. --- baseline/fsf/emacs18/amiga/unix/include/sys/termios.h    Wed Dec 31 17:00:00 1969
  8053. +++ amiga/fsf/emacs18/amiga/unix/include/sys/termios.h    Sat Sep 28 00:00:00 1996
  8054. @@ -0,0 +1,15 @@
  8055. +#ifndef _TERMIOS_H
  8056. +#define _TERMIOS_H
  8057. +
  8058. +struct winsize {
  8059. +  unsigned short ws_row;    /* rows, in characters */
  8060. +  unsigned short ws_col;    /* columns, in characters */
  8061. +  unsigned short ws_xpixel;    /* horizontal size, pixels - not used */
  8062. +  unsigned short ws_ypixel;    /* vertical size, pixels - not used */
  8063. +};
  8064. +
  8065. +#define _TERMIO_IOCTL_BASE 1024
  8066. +
  8067. +#define TIOCGWINSZ (_TERMIO_IOCTL_BASE + 0)
  8068. +
  8069. +#endif
  8070. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/time.h amiga/fsf/emacs18/amiga/unix/include/sys/time.h
  8071. --- baseline/fsf/emacs18/amiga/unix/include/sys/time.h    Wed Dec 31 17:00:00 1969
  8072. +++ amiga/fsf/emacs18/amiga/unix/include/sys/time.h    Sat Sep 28 00:00:00 1996
  8073. @@ -0,0 +1,90 @@
  8074. +/*
  8075. + * Copyright (c) 1982, 1986 The Regents of the University of California.
  8076. + * All rights reserved.
  8077. + *
  8078. + * Redistribution and use in source and binary forms, with or without
  8079. + * modification, are permitted provided that the following conditions
  8080. + * are met:
  8081. + * 1. Redistributions of source code must retain the above copyright
  8082. + *    notice, this list of conditions and the following disclaimer.
  8083. + * 2. Redistributions in binary form must reproduce the above copyright
  8084. + *    notice, this list of conditions and the following disclaimer in the
  8085. + *    documentation and/or other materials provided with the distribution.
  8086. + * 3. All advertising materials mentioning features or use of this software
  8087. + *    must display the following acknowledgement:
  8088. + *    This product includes software developed by the University of
  8089. + *    California, Berkeley and its contributors.
  8090. + * 4. Neither the name of the University nor the names of its contributors
  8091. + *    may be used to endorse or promote products derived from this software
  8092. + *    without specific prior written permission.
  8093. + *
  8094. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  8095. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  8096. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  8097. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  8098. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  8099. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  8100. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  8101. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  8102. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  8103. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  8104. + * SUCH DAMAGE.
  8105. + *
  8106. + *    @(#)time.h    7.6 (Berkeley) 2/22/91
  8107. + */
  8108. +
  8109. +#ifndef _SYS_TIME_H_
  8110. +#define _SYS_TIME_H_
  8111. +
  8112. +/*
  8113. + * Structure returned by gettimeofday(2) system call,
  8114. + * and used in other calls.
  8115. + */
  8116. +/* This defines a struct timeval, with basically equivalent fields. So we use it */
  8117. +#undef LONGBITS            /* This is for emacs's sake */
  8118. +#include <devices/timer.h>
  8119. +#undef LONGBITS
  8120. +/* But we need these defines */
  8121. +#define tv_sec tv_secs
  8122. +#define tv_usec tv_micro
  8123. +
  8124. +struct timezone {
  8125. +    int    tz_minuteswest;    /* minutes west of Greenwich */
  8126. +    int    tz_dsttime;    /* type of dst correction */
  8127. +};
  8128. +#define    DST_NONE    0    /* not on dst */
  8129. +#define    DST_USA        1    /* USA style dst */
  8130. +#define    DST_AUST    2    /* Australian style dst */
  8131. +#define    DST_WET        3    /* Western European dst */
  8132. +#define    DST_MET        4    /* Middle European dst */
  8133. +#define    DST_EET        5    /* Eastern European dst */
  8134. +#define    DST_CAN        6    /* Canada */
  8135. +
  8136. +/*
  8137. + * Operations on timevals.
  8138. + *
  8139. + * NB: timercmp does not work for >= or <=.
  8140. + */
  8141. +#define    timerisset(tvp)        ((tvp)->tv_sec || (tvp)->tv_usec)
  8142. +#define    timercmp(tvp, uvp, cmp)    \
  8143. +    ((tvp)->tv_sec cmp (uvp)->tv_sec || \
  8144. +     (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
  8145. +#define    timerclear(tvp)        (tvp)->tv_sec = (tvp)->tv_usec = 0
  8146. +
  8147. +#ifndef KERNEL
  8148. +#include <time.h>
  8149. +
  8150. +#ifndef _POSIX_SOURCE
  8151. +#include <sys/cdefs.h>
  8152. +
  8153. +__BEGIN_DECLS
  8154. +int    adjtime __P((const struct timeval *, struct timeval *));
  8155. +int    gettimeofday __P((struct timeval *, struct timezone *));
  8156. +int    settimeofday __P((const struct timeval *, const struct timezone *));
  8157. +int    utimes __P((const char *, const struct timeval *));
  8158. +__END_DECLS
  8159. +#endif /* !POSIX */
  8160. +
  8161. +#endif /* !KERNEL */
  8162. +
  8163. +#endif /* !_SYS_TIME_H_ */
  8164. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/timeb.h amiga/fsf/emacs18/amiga/unix/include/sys/timeb.h
  8165. --- baseline/fsf/emacs18/amiga/unix/include/sys/timeb.h    Wed Dec 31 17:00:00 1969
  8166. +++ amiga/fsf/emacs18/amiga/unix/include/sys/timeb.h    Sat Sep 28 00:00:00 1996
  8167. @@ -0,0 +1,12 @@
  8168. +#ifndef _TIMEB_H
  8169. +#define _TIMEB_H
  8170. +
  8171. +struct timeb
  8172. +{
  8173. +  time_t   time;
  8174. +  unsigned short millitm;
  8175. +  short    timezone;
  8176. +  short    dstflag;
  8177. +};
  8178. +
  8179. +#endif
  8180. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/types.h amiga/fsf/emacs18/amiga/unix/include/sys/types.h
  8181. --- baseline/fsf/emacs18/amiga/unix/include/sys/types.h    Wed Dec 31 17:00:00 1969
  8182. +++ amiga/fsf/emacs18/amiga/unix/include/sys/types.h    Sat Sep 28 00:00:00 1996
  8183. @@ -0,0 +1,90 @@
  8184. +/*-
  8185. + * Copyright (c) 1982, 1986, 1991 The Regents of the University of California.
  8186. + * All rights reserved.
  8187. + *
  8188. + * Redistribution and use in source and binary forms, with or without
  8189. + * modification, are permitted provided that the following conditions
  8190. + * are met:
  8191. + * 1. Redistributions of source code must retain the above copyright
  8192. + *    notice, this list of conditions and the following disclaimer.
  8193. + * 2. Redistributions in binary form must reproduce the above copyright
  8194. + *    notice, this list of conditions and the following disclaimer in the
  8195. + *    documentation and/or other materials provided with the distribution.
  8196. + * 3. All advertising materials mentioning features or use of this software
  8197. + *    must display the following acknowledgement:
  8198. + *    This product includes software developed by the University of
  8199. + *    California, Berkeley and its contributors.
  8200. + * 4. Neither the name of the University nor the names of its contributors
  8201. + *    may be used to endorse or promote products derived from this software
  8202. + *    without specific prior written permission.
  8203. + *
  8204. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  8205. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  8206. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  8207. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  8208. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  8209. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  8210. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  8211. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  8212. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  8213. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  8214. + * SUCH DAMAGE.
  8215. + *
  8216. + *    @(#)types.h    7.17 (Berkeley) 5/6/91
  8217. + */
  8218. +
  8219. +#ifndef _TYPES_H_
  8220. +#define    _TYPES_H_
  8221. +
  8222. +typedef    unsigned char    u_char;
  8223. +typedef    unsigned short    u_short;
  8224. +typedef    unsigned int    u_int;
  8225. +typedef    unsigned long    u_long;
  8226. +typedef    unsigned short    ushort;        /* Sys V compatibility */
  8227. +
  8228. +typedef    char *    caddr_t;        /* core address */
  8229. +typedef    long    daddr_t;        /* disk address */
  8230. +typedef    long    dev_t;            /* device number */
  8231. +typedef    u_long    ino_t;            /* inode number */
  8232. +typedef    long    off_t;            /* file offset (should be a quad) */
  8233. +typedef    u_short    nlink_t;        /* link count */
  8234. +typedef    long    swblk_t;        /* swap offset */
  8235. +typedef    long    segsz_t;        /* segment size */
  8236. +typedef    u_short    uid_t;            /* user id */
  8237. +typedef    u_short    gid_t;            /* group id */
  8238. +typedef    int    pid_t;            /* process id */
  8239. +typedef    int    mode_t;            /* permissions */
  8240. +typedef u_long    fixpt_t;        /* fixed point number */
  8241. +
  8242. +#ifndef _POSIX_SOURCE
  8243. +typedef    struct    _uquad    { u_long val[2]; } u_quad;
  8244. +typedef    struct    _quad    {   long val[2]; } quad;
  8245. +typedef    long *    qaddr_t;    /* should be typedef quad * qaddr_t; */
  8246. +
  8247. +#define    major(x)    ((int)(((u_int)(x) >> 8)&0xff))    /* major number */
  8248. +#define    minor(x)    ((int)((x)&0xff))        /* minor number */
  8249. +#define    makedev(x,y)    ((dev_t)(((x)<<8) | (y)))    /* create dev_t */
  8250. +#endif
  8251. +
  8252. +typedef    long clock_t;
  8253. +typedef long time_t;
  8254. +#ifndef _SIZE_T
  8255. +#define _SIZE_T
  8256. +typedef    unsigned int size_t;
  8257. +#endif
  8258. +
  8259. +#ifndef _POSIX_SOURCE
  8260. +/*
  8261. + * My implementation only allows 32 fds in select.
  8262. + */
  8263. +#define    FD_SETSIZE    32
  8264. +
  8265. +typedef    long fd_set;
  8266. +
  8267. +#define    FD_SET(n, p)    (*(p) |= (1 << (n)))
  8268. +#define    FD_CLR(n, p)    (*(p) &= ~(1 << (n)))
  8269. +#define    FD_ISSET(n, p)    (*(p) & (1 << (n)))
  8270. +#define    FD_ZERO(p)    bzero((char *)(p), sizeof(*(p)))
  8271. +
  8272. +#endif /* !_POSIX_SOURCE */
  8273. +#endif /* !_TYPES_H_ */
  8274. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/unistd.h amiga/fsf/emacs18/amiga/unix/include/sys/unistd.h
  8275. --- baseline/fsf/emacs18/amiga/unix/include/sys/unistd.h    Wed Dec 31 17:00:00 1969
  8276. +++ amiga/fsf/emacs18/amiga/unix/include/sys/unistd.h    Sat Sep 28 00:00:00 1996
  8277. @@ -0,0 +1,61 @@
  8278. +/*
  8279. + * Copyright (c) 1989 The Regents of the University of California.
  8280. + * All rights reserved.
  8281. + *
  8282. + * Redistribution and use in source and binary forms, with or without
  8283. + * modification, are permitted provided that the following conditions
  8284. + * are met:
  8285. + * 1. Redistributions of source code must retain the above copyright
  8286. + *    notice, this list of conditions and the following disclaimer.
  8287. + * 2. Redistributions in binary form must reproduce the above copyright
  8288. + *    notice, this list of conditions and the following disclaimer in the
  8289. + *    documentation and/or other materials provided with the distribution.
  8290. + * 3. All advertising materials mentioning features or use of this software
  8291. + *    must display the following acknowledgement:
  8292. + *    This product includes software developed by the University of
  8293. + *    California, Berkeley and its contributors.
  8294. + * 4. Neither the name of the University nor the names of its contributors
  8295. + *    may be used to endorse or promote products derived from this software
  8296. + *    without specific prior written permission.
  8297. + *
  8298. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  8299. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  8300. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  8301. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  8302. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  8303. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  8304. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  8305. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  8306. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  8307. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  8308. + * SUCH DAMAGE.
  8309. + *
  8310. + *    @(#)unistd.h    5.14 (Berkeley) 4/1/91
  8311. + */
  8312. +
  8313. +#ifndef _SYS_UNISTD_H_
  8314. +#define    _SYS_UNISTD_H_
  8315. +
  8316. +/* compile-time symbolic constants */
  8317. +
  8318. +/* access function */
  8319. +#ifndef F_OK
  8320. +#define    F_OK        0    /* test for existence of file */
  8321. +#define    X_OK        0x01    /* test for execute or search permission */
  8322. +#define    W_OK        0x02    /* test for write permission */
  8323. +#define    R_OK        0x04    /* test for read permission */
  8324. +#endif
  8325. +
  8326. +/* whence values for lseek(2) */
  8327. +#define    SEEK_SET    0    /* set file offset to offset */
  8328. +#define    SEEK_CUR    1    /* set file offset to current plus offset */
  8329. +#define    SEEK_END    2    /* set file offset to EOF plus offset */
  8330. +
  8331. +#ifndef _POSIX_SOURCE
  8332. +/* whence values for lseek(2); renamed by POSIX 1003.1 */
  8333. +#define    L_SET        SEEK_SET
  8334. +#define    L_INCR        SEEK_CUR
  8335. +#define    L_XTND        SEEK_END
  8336. +#endif
  8337. +
  8338. +#endif /* !_SYS_UNISTD_H_ */
  8339. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/vlimit.h amiga/fsf/emacs18/amiga/unix/include/sys/vlimit.h
  8340. --- baseline/fsf/emacs18/amiga/unix/include/sys/vlimit.h    Wed Dec 31 17:00:00 1969
  8341. +++ amiga/fsf/emacs18/amiga/unix/include/sys/vlimit.h    Sat Sep 28 00:00:00 1996
  8342. @@ -0,0 +1,2 @@
  8343. +/* Dummy for Emacs so that we can run on VMS... */
  8344. +#define LIM_DATA 0
  8345. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/sys/wait.h amiga/fsf/emacs18/amiga/unix/include/sys/wait.h
  8346. --- baseline/fsf/emacs18/amiga/unix/include/sys/wait.h    Wed Dec 31 17:00:00 1969
  8347. +++ amiga/fsf/emacs18/amiga/unix/include/sys/wait.h    Sat Sep 28 00:00:00 1996
  8348. @@ -0,0 +1,82 @@
  8349. +/*
  8350. + * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
  8351. + * All rights reserved.
  8352. + *
  8353. + * Redistribution and use in source and binary forms, with or without
  8354. + * modification, are permitted provided that the following conditions
  8355. + * are met:
  8356. + * 1. Redistributions of source code must retain the above copyright
  8357. + *    notice, this list of conditions and the following disclaimer.
  8358. + * 2. Redistributions in binary form must reproduce the above copyright
  8359. + *    notice, this list of conditions and the following disclaimer in the
  8360. + *    documentation and/or other materials provided with the distribution.
  8361. + * 3. All advertising materials mentioning features or use of this software
  8362. + *    must display the following acknowledgement:
  8363. + *    This product includes software developed by the University of
  8364. + *    California, Berkeley and its contributors.
  8365. + * 4. Neither the name of the University nor the names of its contributors
  8366. + *    may be used to endorse or promote products derived from this software
  8367. + *    without specific prior written permission.
  8368. + *
  8369. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  8370. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  8371. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  8372. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  8373. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  8374. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  8375. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  8376. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  8377. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  8378. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  8379. + * SUCH DAMAGE.
  8380. + *
  8381. + *    @(#)wait.h    7.17 (Berkeley) 6/19/91
  8382. + */
  8383. +
  8384. +/*
  8385. + * This file holds definitions relevent to the wait4 system call
  8386. + * and the alternate interfaces that use it (wait, wait3, waitpid).
  8387. + */
  8388. +
  8389. +/*
  8390. + * Macros to test the exit status returned by wait
  8391. + * and extract the relevant values.
  8392. + */
  8393. +#define    _W_INT(i)    (i)
  8394. +
  8395. +#define    _WSTATUS(x)    (_W_INT(x) & 0177)
  8396. +#define    _WSTOPPED    0177        /* _WSTATUS if process is stopped */
  8397. +#define WIFSTOPPED(x)    (_WSTATUS(x) == _WSTOPPED)
  8398. +#define WSTOPSIG(x)    (_W_INT(x) >> 8)
  8399. +#define WIFSIGNALED(x)    (_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
  8400. +#define WTERMSIG(x)    (_WSTATUS(x))
  8401. +#define WIFEXITED(x)    (_WSTATUS(x) == 0)
  8402. +#define WEXITSTATUS(x)    (_W_INT(x) >> 8)
  8403. +#define    W_EXITCODE(ret, sig)    ((ret) << 8 | (sig))
  8404. +#define    W_STOPCODE(sig)        ((sig) << 8 | _WSTOPPED)
  8405. +
  8406. +/*
  8407. + * Option bits for the second argument of wait4.  WNOHANG causes the
  8408. + * wait to not hang if there are no stopped or terminated processes, rather
  8409. + * returning an error indication in this case (pid==0).  WUNTRACED
  8410. + * indicates that the caller should receive status about untraced children
  8411. + * which stop due to signals.  If children are stopped and a wait without
  8412. + * this option is done, it is as though they were still running... nothing
  8413. + * about them is returned.
  8414. + */
  8415. +#define WNOHANG        1    /* dont hang in wait */
  8416. +#define WUNTRACED    2    /* tell about stopped, untraced children */
  8417. +
  8418. +#ifndef KERNEL
  8419. +#include <sys/types.h>
  8420. +#include <sys/cdefs.h>
  8421. +
  8422. +__BEGIN_DECLS
  8423. +struct rusage;    /* forward declaration */
  8424. +
  8425. +pid_t    wait __P((int *));
  8426. +pid_t    waitpid __P((pid_t, int *, int));
  8427. +pid_t    wait3 __P((int *, int, struct rusage *));
  8428. +pid_t    wait4 __P((pid_t, int *, int, struct rusage *));
  8429. +__END_DECLS
  8430. +#endif
  8431. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/time.h amiga/fsf/emacs18/amiga/unix/include/time.h
  8432. --- baseline/fsf/emacs18/amiga/unix/include/time.h    Wed Dec 31 17:00:00 1969
  8433. +++ amiga/fsf/emacs18/amiga/unix/include/time.h    Sat Sep 28 00:00:00 1996
  8434. @@ -0,0 +1,78 @@
  8435. +/*
  8436. + * Copyright (c) 1989 The Regents of the University of California.
  8437. + * All rights reserved.
  8438. + *
  8439. + * Redistribution and use in source and binary forms, with or without
  8440. + * modification, are permitted provided that the following conditions
  8441. + * are met:
  8442. + * 1. Redistributions of source code must retain the above copyright
  8443. + *    notice, this list of conditions and the following disclaimer.
  8444. + * 2. Redistributions in binary form must reproduce the above copyright
  8445. + *    notice, this list of conditions and the following disclaimer in the
  8446. + *    documentation and/or other materials provided with the distribution.
  8447. + * 3. All advertising materials mentioning features or use of this software
  8448. + *    must display the following acknowledgement:
  8449. + *    This product includes software developed by the University of
  8450. + *    California, Berkeley and its contributors.
  8451. + * 4. Neither the name of the University nor the names of its contributors
  8452. + *    may be used to endorse or promote products derived from this software
  8453. + *    without specific prior written permission.
  8454. + *
  8455. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  8456. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  8457. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  8458. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  8459. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  8460. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  8461. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  8462. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  8463. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  8464. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  8465. + * SUCH DAMAGE.
  8466. + *
  8467. + *    @(#)time.h    5.12 (Berkeley) 3/9/91
  8468. + */
  8469. +
  8470. +#ifndef _TIME_H_
  8471. +#define    _TIME_H_
  8472. +
  8473. +#include <sys/types.h>
  8474. +
  8475. +struct tm {
  8476. +    int    tm_sec;        /* seconds after the minute [0-60] */
  8477. +    int    tm_min;        /* minutes after the hour [0-59] */
  8478. +    int    tm_hour;    /* hours since midnight [0-23] */
  8479. +    int    tm_mday;    /* day of the month [1-31] */
  8480. +    int    tm_mon;        /* months since January [0-11] */
  8481. +    int    tm_year;    /* years since 1900 */
  8482. +    int    tm_wday;    /* days since Sunday [0-6] */
  8483. +    int    tm_yday;    /* days since January 1 [0-365] */
  8484. +    int    tm_isdst;    /* Daylight Savings Time flag */
  8485. +    long    tm_gmtoff;    /* offset from CUT in seconds */
  8486. +    char    *tm_zone;    /* timezone abbreviation */
  8487. +};
  8488. +
  8489. +#include <sys/cdefs.h>
  8490. +
  8491. +__BEGIN_DECLS
  8492. +char *asctime __P((const struct tm *));
  8493. +clock_t clock __P((void));
  8494. +char *ctime __P((const time_t *));
  8495. +double difftime __P((time_t, time_t));
  8496. +struct tm *gmtime __P((const time_t *));
  8497. +struct tm *localtime __P((const time_t *));
  8498. +time_t mktime __P((struct tm *));
  8499. +size_t strftime __P((char *, size_t, const char *, const struct tm *));
  8500. +time_t time __P((time_t *));
  8501. +
  8502. +#ifndef _ANSI_SOURCE
  8503. +void tzset __P((void));
  8504. +#endif /* not ANSI */
  8505. +
  8506. +#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
  8507. +/*char *timezone __P((int, int));*/
  8508. +void tzsetwall __P((void));
  8509. +#endif /* neither ANSI nor POSIX */
  8510. +__END_DECLS
  8511. +
  8512. +#endif /* !_TIME_H_ */
  8513. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/tzfile.h amiga/fsf/emacs18/amiga/unix/include/tzfile.h
  8514. --- baseline/fsf/emacs18/amiga/unix/include/tzfile.h    Wed Dec 31 17:00:00 1969
  8515. +++ amiga/fsf/emacs18/amiga/unix/include/tzfile.h    Sat Sep 28 00:00:00 1996
  8516. @@ -0,0 +1,151 @@
  8517. +/*
  8518. + * Copyright (c) 1988 Regents of the University of California.
  8519. + * All rights reserved.
  8520. + *
  8521. + * This code is derived from software contributed to Berkeley by
  8522. + * Arthur David Olson of the National Cancer Institute.
  8523. + *
  8524. + * Redistribution and use in source and binary forms, with or without
  8525. + * modification, are permitted provided that the following conditions
  8526. + * are met:
  8527. + * 1. Redistributions of source code must retain the above copyright
  8528. + *    notice, this list of conditions and the following disclaimer.
  8529. + * 2. Redistributions in binary form must reproduce the above copyright
  8530. + *    notice, this list of conditions and the following disclaimer in the
  8531. + *    documentation and/or other materials provided with the distribution.
  8532. + * 3. All advertising materials mentioning features or use of this software
  8533. + *    must display the following acknowledgement:
  8534. + *    This product includes software developed by the University of
  8535. + *    California, Berkeley and its contributors.
  8536. + * 4. Neither the name of the University nor the names of its contributors
  8537. + *    may be used to endorse or promote products derived from this software
  8538. + *    without specific prior written permission.
  8539. + *
  8540. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  8541. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  8542. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  8543. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  8544. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  8545. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  8546. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  8547. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  8548. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  8549. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  8550. + * SUCH DAMAGE.
  8551. + *
  8552. + *    @(#)tzfile.h    5.10 (Berkeley) 4/3/91
  8553. + */
  8554. +
  8555. +#ifndef _TZFILE_H_
  8556. +#define    _TZFILE_H_
  8557. +
  8558. +/*
  8559. + * Information about time zone files.
  8560. + */
  8561. +            /* Time zone object file directory */
  8562. +#define TZDIR        "s:zoneinfo"
  8563. +#define TZDEFAULT    "s:localtime"
  8564. +#define TZDEFRULES    "posixrules"
  8565. +
  8566. +/*
  8567. +** Each file begins with. . .
  8568. +*/
  8569. +
  8570. +struct tzhead {
  8571. +    char    tzh_reserved[24];    /* reserved for future use */
  8572. +    char    tzh_ttisstdcnt[4];    /* coded number of trans. time flags */
  8573. +    char    tzh_leapcnt[4];        /* coded number of leap seconds */
  8574. +    char    tzh_timecnt[4];        /* coded number of transition times */
  8575. +    char    tzh_typecnt[4];        /* coded number of local time types */
  8576. +    char    tzh_charcnt[4];        /* coded number of abbr. chars */
  8577. +};
  8578. +
  8579. +/*
  8580. +** . . .followed by. . .
  8581. +**
  8582. +**    tzh_timecnt (char [4])s        coded transition times a la time(2)
  8583. +**    tzh_timecnt (unsigned char)s    types of local time starting at above
  8584. +**    tzh_typecnt repetitions of
  8585. +**        one (char [4])        coded GMT offset in seconds
  8586. +**        one (unsigned char)    used to set tm_isdst
  8587. +**        one (unsigned char)    that's an abbreviation list index
  8588. +**    tzh_charcnt (char)s        '\0'-terminated zone abbreviations
  8589. +**    tzh_leapcnt repetitions of
  8590. +**        one (char [4])        coded leap second transition times
  8591. +**        one (char [4])        total correction after above
  8592. +**    tzh_ttisstdcnt (char)s        indexed by type; if TRUE, transition
  8593. +**                    time is standard time, if FALSE,
  8594. +**                    transition time is wall clock time
  8595. +**                    if absent, transition times are
  8596. +**                    assumed to be wall clock time
  8597. +*/
  8598. +
  8599. +/*
  8600. +** In the current implementation, "tzset()" refuses to deal with files that
  8601. +** exceed any of the limits below.
  8602. +*/
  8603. +
  8604. +/*
  8605. +** The TZ_MAX_TIMES value below is enough to handle a bit more than a
  8606. +** year's worth of solar time (corrected daily to the nearest second) or
  8607. +** 138 years of Pacific Presidential Election time
  8608. +** (where there are three time zone transitions every fourth year).
  8609. +*/
  8610. +#define TZ_MAX_TIMES    370
  8611. +
  8612. +#define NOSOLAR            /* 4BSD doesn't currently handle solar time */
  8613. +
  8614. +#ifndef NOSOLAR
  8615. +#define TZ_MAX_TYPES    256    /* Limited by what (unsigned char)'s can hold */
  8616. +#else
  8617. +#define TZ_MAX_TYPES    10    /* Maximum number of local time types */
  8618. +#endif
  8619. +
  8620. +#define TZ_MAX_CHARS    50    /* Maximum number of abbreviation characters */
  8621. +
  8622. +#define    TZ_MAX_LEAPS    50    /* Maximum number of leap second corrections */
  8623. +
  8624. +#define SECSPERMIN    60
  8625. +#define MINSPERHOUR    60
  8626. +#define HOURSPERDAY    24
  8627. +#define DAYSPERWEEK    7
  8628. +#define DAYSPERNYEAR    365
  8629. +#define DAYSPERLYEAR    366
  8630. +#define SECSPERHOUR    (SECSPERMIN * MINSPERHOUR)
  8631. +#define SECSPERDAY    ((long) SECSPERHOUR * HOURSPERDAY)
  8632. +#define MONSPERYEAR    12
  8633. +
  8634. +#define TM_SUNDAY    0
  8635. +#define TM_MONDAY    1
  8636. +#define TM_TUESDAY    2
  8637. +#define TM_WEDNESDAY    3
  8638. +#define TM_THURSDAY    4
  8639. +#define TM_FRIDAY    5
  8640. +#define TM_SATURDAY    6
  8641. +
  8642. +#define TM_JANUARY    0
  8643. +#define TM_FEBRUARY    1
  8644. +#define TM_MARCH    2
  8645. +#define TM_APRIL    3
  8646. +#define TM_MAY        4
  8647. +#define TM_JUNE        5
  8648. +#define TM_JULY        6
  8649. +#define TM_AUGUST    7
  8650. +#define TM_SEPTEMBER    8
  8651. +#define TM_OCTOBER    9
  8652. +#define TM_NOVEMBER    10
  8653. +#define TM_DECEMBER    11
  8654. +
  8655. +#define TM_YEAR_BASE    1900
  8656. +
  8657. +#define EPOCH_YEAR    1970
  8658. +#define EPOCH_WDAY    TM_THURSDAY
  8659. +
  8660. +/*
  8661. +** Accurate only for the past couple of centuries;
  8662. +** that will probably do.
  8663. +*/
  8664. +
  8665. +#define isleap(y) (((y) % 4) == 0 && ((y) % 100) != 0 || ((y) % 400) == 0)
  8666. +
  8667. +#endif /* !_TZFILE_H_ */
  8668. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/unistd.h amiga/fsf/emacs18/amiga/unix/include/unistd.h
  8669. --- baseline/fsf/emacs18/amiga/unix/include/unistd.h    Wed Dec 31 17:00:00 1969
  8670. +++ amiga/fsf/emacs18/amiga/unix/include/unistd.h    Sat Sep 28 00:00:00 1996
  8671. @@ -0,0 +1,178 @@
  8672. +/*-
  8673. + * Copyright (c) 1991 The Regents of the University of California.
  8674. + * All rights reserved.
  8675. + *
  8676. + * Redistribution and use in source and binary forms, with or without
  8677. + * modification, are permitted provided that the following conditions
  8678. + * are met:
  8679. + * 1. Redistributions of source code must retain the above copyright
  8680. + *    notice, this list of conditions and the following disclaimer.
  8681. + * 2. Redistributions in binary form must reproduce the above copyright
  8682. + *    notice, this list of conditions and the following disclaimer in the
  8683. + *    documentation and/or other materials provided with the distribution.
  8684. + * 3. All advertising materials mentioning features or use of this software
  8685. + *    must display the following acknowledgement:
  8686. + *    This product includes software developed by the University of
  8687. + *    California, Berkeley and its contributors.
  8688. + * 4. Neither the name of the University nor the names of its contributors
  8689. + *    may be used to endorse or promote products derived from this software
  8690. + *    without specific prior written permission.
  8691. + *
  8692. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  8693. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  8694. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  8695. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  8696. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  8697. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  8698. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  8699. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  8700. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  8701. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  8702. + * SUCH DAMAGE.
  8703. + *
  8704. + *    @(#)unistd.h    5.13 (Berkeley) 6/17/91
  8705. + */
  8706. +
  8707. +#ifndef _UNISTD_H_
  8708. +#define    _UNISTD_H_
  8709. +
  8710. +#include <sys/cdefs.h>
  8711. +#include <sys/types.h>
  8712. +#include <sys/unistd.h>
  8713. +
  8714. +#define     STDIN_FILENO    0    /* standard input file descriptor */
  8715. +#define    STDOUT_FILENO    1    /* standard output file descriptor */
  8716. +#define    STDERR_FILENO    2    /* standard error file descriptor */
  8717. +
  8718. +#ifndef NULL
  8719. +#define    NULL        0    /* null pointer constant */
  8720. +#endif
  8721. +
  8722. +typedef    int ssize_t;        /* count of bytes or error indication */
  8723. +
  8724. +__BEGIN_DECLS
  8725. +void     _exit __P((int));
  8726. +int     access __P((const char *, int));
  8727. +u_int     alarm __P((u_int));
  8728. +int     chdir __P((const char *));
  8729. +int     chown __P((const char *, uid_t, gid_t));
  8730. +int     close __P((int));
  8731. +char    *cuserid __P((char *));
  8732. +int     dup __P((int));
  8733. +int     dup2 __P((int, int));
  8734. +int     execl __P((const char *, const char *, ...));
  8735. +int     execle __P((const char *, const char *, ...));
  8736. +int     execlp __P((const char *, const char *, ...));
  8737. +int     execv __P((const char *, char * const *));
  8738. +int     execve __P((const char *, char * const *, char * const *));
  8739. +int     execvp __P((const char *, char * const *));
  8740. +pid_t     fork __P((void));
  8741. +long     fpathconf __P((int, int));        /* not yet */
  8742. +char    *getcwd __P((const char *, int));
  8743. +gid_t     getegid __P((void));
  8744. +uid_t     geteuid __P((void));
  8745. +gid_t     getgid __P((void));
  8746. +int     getgroups __P((int, int *));        /* XXX (gid_t *) */
  8747. +char    *getlogin __P((void));
  8748. +pid_t     getpgrp __P((void));
  8749. +pid_t     getpid __P((void));
  8750. +pid_t     getppid __P((void));
  8751. +uid_t     getuid __P((void));
  8752. +int     isatty __P((int));
  8753. +int     link __P((const char *, const char *));
  8754. +off_t     lseek __P((int, off_t, int));
  8755. +long     pathconf __P((const char *, int));    /* not yet */
  8756. +int     pause __P((void));
  8757. +int     pipe __P((int *));
  8758. +ssize_t     read __P((int, void *, size_t));
  8759. +int     rmdir __P((const char *));
  8760. +int     setgid __P((gid_t));
  8761. +int     setpgid __P((pid_t, pid_t));
  8762. +pid_t     setsid __P((void));
  8763. +int     setuid __P((uid_t));
  8764. +u_int     sleep __P((u_int));
  8765. +long     sysconf __P((int));            /* not yet */
  8766. +pid_t     tcgetpgrp __P((int));
  8767. +int     tcsetpgrp __P((int, pid_t));
  8768. +char    *ttyname __P((int));
  8769. +int     unlink __P((const char *));
  8770. +ssize_t     write __P((int, const void *, size_t));
  8771. +
  8772. +#ifndef    _POSIX_SOURCE
  8773. +
  8774. +/* structure timeval required for select() */
  8775. +#include <sys/time.h>
  8776. +
  8777. +int     acct __P((const char *));
  8778. +int     async_daemon __P((void));
  8779. +char    *brk __P((const char *));
  8780. +int     chflags __P((const char *, long));
  8781. +int     chroot __P((const char *));
  8782. +char    *crypt __P((const char *, const char *));
  8783. +int     des_cipher __P((const char *, char *, long, int));
  8784. +int     des_setkey __P((const char *key));
  8785. +int     encrypt __P((char *, int));
  8786. +void     endusershell __P((void));
  8787. +int     exect __P((const char *, char * const *, char * const *));
  8788. +int     fchdir __P((int));
  8789. +int     fchflags __P((int, long));
  8790. +int     fchown __P((int, int, int));
  8791. +int     fnmatch __P((const char *, const char *, int));
  8792. +int     fsync __P((int));
  8793. +int     ftruncate __P((int, off_t));
  8794. +int     getdtablesize __P((void));
  8795. +long     gethostid __P((void));
  8796. +int     gethostname __P((char *, int));
  8797. +mode_t     getmode __P((const void *, mode_t));
  8798. +int     getpagesize __P((void));
  8799. +char    *getpass __P((const char *));
  8800. +char    *getusershell __P((void));
  8801. +char    *getwd __P((char *));            /* obsoleted by getcwd() */
  8802. +int     initgroups __P((const char *, int));
  8803. +int     mknod __P((const char *, mode_t, dev_t));
  8804. +int     mkstemp __P((char *));
  8805. +char    *mktemp __P((char *));
  8806. +int     nfssvc __P((int));
  8807. +int     nice __P((int));
  8808. +void     psignal __P((u_int, const char *));
  8809. +extern char *sys_siglist[];
  8810. +int     profil __P((char *, int, int, int));
  8811. +int     rcmd __P((char **, int, const char *,
  8812. +        const char *, const char *, int *));
  8813. +char    *re_comp __P((const char *));
  8814. +int     re_exec __P((const char *));
  8815. +int     readlink __P((const char *, char *, int));
  8816. +int     reboot __P((int));
  8817. +int     revoke __P((const char *));
  8818. +int     rresvport __P((int *));
  8819. +int     ruserok __P((const char *, int, const char *, const char *));
  8820. +void    *sbrk __P((unsigned));
  8821. +int     select __P((int, fd_set *, fd_set *, fd_set *, struct timeval *));
  8822. +int     setegid __P((gid_t));
  8823. +int     seteuid __P((uid_t));
  8824. +int     setgroups __P((int, const int *));
  8825. +void     sethostid __P((long));
  8826. +int     sethostname __P((const char *, int));
  8827. +int     setkey __P((const char *));
  8828. +int     setlogin __P((const char *));
  8829. +void    *setmode __P((const char *));
  8830. +int     setpgrp __P((pid_t pid, pid_t pgrp));    /* obsoleted by setpgid() */
  8831. +int     setregid __P((int, int));
  8832. +int     setreuid __P((int, int));
  8833. +int     setrgid __P((gid_t));
  8834. +int     setruid __P((uid_t));
  8835. +void     setusershell __P((void));
  8836. +int     swapon __P((const char *));
  8837. +int     symlink __P((const char *, const char *));
  8838. +void     sync __P((void));
  8839. +int     syscall __P((int, ...));
  8840. +int     truncate __P((const char *, off_t));
  8841. +int     ttyslot __P((void));
  8842. +u_int     ualarm __P((u_int, u_int));
  8843. +void     usleep __P((u_int));
  8844. +int     vfork __P((void));
  8845. +
  8846. +#endif /* !_POSIX_SOURCE */
  8847. +__END_DECLS
  8848. +
  8849. +#endif /* !_UNISTD_H_ */
  8850. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/include/utime.h amiga/fsf/emacs18/amiga/unix/include/utime.h
  8851. --- baseline/fsf/emacs18/amiga/unix/include/utime.h    Wed Dec 31 17:00:00 1969
  8852. +++ amiga/fsf/emacs18/amiga/unix/include/utime.h    Sat Sep 28 00:00:00 1996
  8853. @@ -0,0 +1,3 @@
  8854. +struct utimbuf { time_t actime, modtime; };
  8855. +
  8856. +int utime(char *path, struct utimbuf *times);
  8857. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/intro.doc amiga/fsf/emacs18/amiga/unix/intro.doc
  8858. --- baseline/fsf/emacs18/amiga/unix/intro.doc    Wed Dec 31 17:00:00 1969
  8859. +++ amiga/fsf/emacs18/amiga/unix/intro.doc    Sat Sep 28 00:00:00 1996
  8860. @@ -0,0 +1,44 @@
  8861. +A quick guide to programs compiled with the unix library
  8862. +--------------------------------------------------------
  8863. +
  8864. +If you are using programs compiled with my unix library, you should note
  8865. +the following points:
  8866. +
  8867. +a) The following environment variables are taken into account by the unix library,
  8868. +and therefore by any program compiled with it:
  8869. +
  8870. +USER - A user name for the sole Amiga user (default "user").
  8871. +USERNAME - The full name of the sole Amiga user (default $USER).
  8872. +HOME - A "home" directory (default "s:") for programs that want one. Configuration
  8873. +       files will probably end up here ...
  8874. +SHELL - A program which behaves reasonably like a Unix shell (default "bin:sh").
  8875. +    You should copy the sh executable there if you don't have a Unix-like shell.
  8876. +HOSTNAME - The name of your machine (default "amiga").
  8877. +
  8878. +b) Command line parsing is a mixture of AmigaOS and Unix conventions (this
  8879. +explanation assumes familiarity with Unix terminology ...) :
  8880. +
  8881. +- Arguments in single quotes (') are left as is.
  8882. +
  8883. +- Within arguments in double quotes ("), * acts as an escape character. Arguments
  8884. +cotaining wildcards are expanded into several arguments (note that this is a
  8885. +different from the Unix behaviour). ' must be used to escape wildcards (this is the
  8886. +standard AmigaOS convention).
  8887. +
  8888. +- Within unquoted arguments, \ acts as an escape character for wildcards, spaces, 
  8889. +etc. Arguments containing wildcards are expanded into several arguments.
  8890. +
  8891. +As an example, assume that uecho is an unix-like echo command compiled with the
  8892. +unix library, and that the current directory contains one file, echo.c. Then
  8893. +
  8894. +  uecho 'f*un\' "#?.c" "*.c" "\mad" \*.c \\ \n
  8895. +
  8896. +displays
  8897. +
  8898. +  f*un\ echo.c .c \mad *.c \ n
  8899. +
  8900. +c) Timezones. If you install the timezone information (provided with the
  8901. +unix library), you must set your system clock to GMT. Otherwise the times
  8902. +displayed or set by the unix library will be incorrect. To compensate, you
  8903. +won't have to adjust your system clock for daylight savings time (the local
  8904. +time calculated from GMT will always be correct).
  8905. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/mkmkf amiga/fsf/emacs18/amiga/unix/mkmkf
  8906. --- baseline/fsf/emacs18/amiga/unix/mkmkf    Wed Dec 31 17:00:00 1969
  8907. +++ amiga/fsf/emacs18/amiga/unix/mkmkf    Sat Sep 28 00:00:00 1996
  8908. @@ -0,0 +1,2 @@
  8909. +copy smakefile smakefile!
  8910. +perl src:unix/mkmkf.perl `glob *.c` >smakefile
  8911. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/mkmkf.perl amiga/fsf/emacs18/amiga/unix/mkmkf.perl
  8912. --- baseline/fsf/emacs18/amiga/unix/mkmkf.perl    Wed Dec 31 17:00:00 1969
  8913. +++ amiga/fsf/emacs18/amiga/unix/mkmkf.perl    Sat Sep 28 00:00:00 1996
  8914. @@ -0,0 +1,72 @@
  8915. +print "OBJS= ";
  8916. +for ($i = $#ARGV; $i >= 0; $i--)
  8917. +{
  8918. +    ($objs[$i] = $ARGV[$i]) =~ s/\.\w*$/\.o/;
  8919. +}
  8920. +&colprint(6, " ", @objs);
  8921. +print "\n\n";
  8922. +
  8923. +if (-f "smakefile.base")
  8924. +{
  8925. +    open(BASE, "smakefile.base");
  8926. +    print while (<BASE>);
  8927. +    close(BASE);
  8928. +}
  8929. +
  8930. +foreach $file (@ARGV)
  8931. +{
  8932. +    $dest = $file;
  8933. +    $dest =~ s/\.\w*$/\.o/;
  8934. +    if ($file =~ /\.c$/)
  8935. +    {
  8936. +    printf("%s: %s", $dest, $file);
  8937. +    $colto = length($dest) + length($file) + 2;
  8938. +    # Search for included files
  8939. +    %seen = ();
  8940. +    &included($file, 0);
  8941. +    &colprint($colto, " ", keys(%seen));
  8942. +    print "\n";
  8943. +    }
  8944. +    else
  8945. +    {
  8946. +    printf("%s: %s\n\n", $dest, $file);
  8947. +    }
  8948. +}
  8949. +
  8950. +sub colprint
  8951. +{
  8952. +    local($colto, $sep, @names) = @_;
  8953. +    $col = $colto;
  8954. +    $sl = length($sep);
  8955. +    foreach $name (@names)
  8956. +    {
  8957. +    $nl = length($name);
  8958. +    if ($col + $nl + $sl > 78)
  8959. +    {
  8960. +        print " \\\n", " " x $colto;
  8961. +        $col = $colto;
  8962. +    }
  8963. +    print $sep, $name;
  8964. +    $col += $sl + $nl;
  8965. +    }
  8966. +}
  8967. +
  8968. +sub included
  8969. +{
  8970. +    local($file, $input) = @_;
  8971. +    $input++;
  8972. +    if (!open($input, $file))
  8973. +    {
  8974. +    print STDERR "Can't open $file: $!\n";
  8975. +    return;
  8976. +    }
  8977. +    while (<$input>)
  8978. +    {
  8979. +    if (/^#\s*include\s*"([^"]*)"/ && !$seen{$1} && -e $1)
  8980. +        {
  8981. +        $seen{$1} = 1;
  8982. +        &included($1, $input);
  8983. +    }
  8984. +    }
  8985. +    close($input);
  8986. +}
  8987. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/SCOPTIONS amiga/fsf/emacs18/amiga/unix/src/SCOPTIONS
  8988. --- baseline/fsf/emacs18/amiga/unix/src/SCOPTIONS    Wed Dec 31 17:00:00 1969
  8989. +++ amiga/fsf/emacs18/amiga/unix/src/SCOPTIONS    Sat Sep 28 00:00:00 1996
  8990. @@ -0,0 +1,9 @@
  8991. +PARAMETERS=BOTH
  8992. +NOSTACKCHECK
  8993. +STRUCTUREEQUIVALENCE
  8994. +NOVERSION
  8995. +NOICONS
  8996. +INCLUDEDIR=/include/internal/
  8997. +INCLUDEDIR=/include/
  8998. +IGNORE=104
  8999. +IGNORE=74
  9000. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/_exit.c amiga/fsf/emacs18/amiga/unix/src/_exit.c
  9001. --- baseline/fsf/emacs18/amiga/unix/src/_exit.c    Wed Dec 31 17:00:00 1969
  9002. +++ amiga/fsf/emacs18/amiga/unix/src/_exit.c    Sat Sep 28 00:00:00 1996
  9003. @@ -0,0 +1,30 @@
  9004. +#include "amiga.h"
  9005. +#include "files.h"
  9006. +#include "fifofd.h"
  9007. +#include "signals.h"
  9008. +#include "timers.h"
  9009. +#include <fcntl.h>
  9010. +
  9011. +void _close_all(void)
  9012. +{
  9013. +  int fd, lfd = _last_fd();
  9014. +
  9015. +  for (fd = 0; fd < lfd; fd++) close(fd);
  9016. +}
  9017. +
  9018. +#undef _exit
  9019. +
  9020. +void __exit(int rc)
  9021. +{
  9022. +  _close_all();
  9023. +  _cleanup_fifo();
  9024. +  _cleanup_signals();
  9025. +  _free_timer(_odd_timer);
  9026. +  XCEXIT(rc);
  9027. +}
  9028. +
  9029. +void _exit(int rc)
  9030. +{
  9031. +  return __exit(rc);
  9032. +}
  9033. +
  9034. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/_main.c amiga/fsf/emacs18/amiga/unix/src/_main.c
  9035. --- baseline/fsf/emacs18/amiga/unix/src/_main.c    Wed Dec 31 17:00:00 1969
  9036. +++ amiga/fsf/emacs18/amiga/unix/src/_main.c    Sat Sep 28 00:00:00 1996
  9037. @@ -0,0 +1,471 @@
  9038. +#include "amiga.h"
  9039. +#include "signals.h"
  9040. +#include "fifofd.h"
  9041. +#include "timers.h"
  9042. +#include "amigaos.h"
  9043. +#include <exec/execbase.h>
  9044. +#include <dos/var.h>
  9045. +#include <workbench/startup.h>
  9046. +#include <proto/timer.h>
  9047. +#include <stdlib.h>
  9048. +#include <string.h>
  9049. +#include <ctype.h>
  9050. +#include <sys/time.h>
  9051. +#include <pwd.h>
  9052. +
  9053. +struct Process *_us;
  9054. +struct timeinfo *_odd_timer;
  9055. +ULONG _odd_sig;
  9056. +long _startup_time;
  9057. +long _stack_size;
  9058. +struct Library *TimerBase;
  9059. +
  9060. +static char *empty_env = 0;    /* A default empty environment */
  9061. +char **environ;            /* Unix style environment variable list */
  9062. +char *_system_name;
  9063. +
  9064. +extern struct ExecBase *SysBase;
  9065. +extern struct passwd _amiga_user;
  9066. +extern main(int argc, char **argv, char **envp);
  9067. +
  9068. +static void nomem(void)
  9069. +{
  9070. +  _fail("No memory");
  9071. +}
  9072. +
  9073. +static void *_xmalloc(unsigned n)
  9074. +{
  9075. +    void *p = malloc(n);
  9076. +
  9077. +    if (!p) nomem();
  9078. +
  9079. +    return p;
  9080. +}
  9081. +
  9082. +static void *_xrealloc(void *p, unsigned n)
  9083. +{
  9084. +    void *p2 = realloc(p, n);
  9085. +
  9086. +    if (!p2) nomem();
  9087. +
  9088. +    return p2;
  9089. +}
  9090. +
  9091. +static char *safe_copystr(char *str)
  9092. +{
  9093. +    char *new;
  9094. +
  9095. +    if (!str) str = "";
  9096. +    new = malloc(strlen(str) + 1);
  9097. +    if (!new) return 0;
  9098. +    return strcpy(new, str);
  9099. +}
  9100. +
  9101. +static char *copystr(char *str)
  9102. +{
  9103. +    char *new = safe_copystr(str);
  9104. +
  9105. +    if (!new) nomem();
  9106. +
  9107. +    return new;
  9108. +}
  9109. +
  9110. +void make_environ(void)
  9111. +/* Effect: Builds a UNIX style environ variable from the AmigaOS environment.
  9112. +*/
  9113. +{
  9114. +    int env_count = 0;
  9115. +    long env_len = 0;
  9116. +    struct LocalVar *scan_env;
  9117. +    char **new_environ, *env_text;
  9118. +
  9119. +    for (scan_env = (struct LocalVar *)_us->pr_LocalVars.mlh_Head;
  9120. +     scan_env->lv_Node.ln_Succ;
  9121. +     scan_env = (struct LocalVar *)scan_env->lv_Node.ln_Succ)
  9122. +    if (scan_env->lv_Node.ln_Type == LV_VAR &&
  9123. +        !(scan_env->lv_Flags & (GVF_GLOBAL_ONLY | GVF_BINARY_VAR)))
  9124. +    {
  9125. +        /* We only handle local text variables */
  9126. +        env_count++;
  9127. +        env_len += 2 + strlen(scan_env->lv_Node.ln_Name) + scan_env->lv_Len;
  9128. +    }
  9129. +
  9130. +    new_environ = environ = (char **)_xmalloc(sizeof(char *) * (1 + env_count) +
  9131. +                          env_len);
  9132. +    env_text = (char *)(environ + (1 + env_count));
  9133. +    if (!environ) environ = &empty_env;
  9134. +    else
  9135. +    {
  9136. +    for (scan_env = (struct LocalVar *)_us->pr_LocalVars.mlh_Head;
  9137. +         scan_env->lv_Node.ln_Succ;
  9138. +         scan_env = (struct LocalVar *)scan_env->lv_Node.ln_Succ)
  9139. +        if (scan_env->lv_Node.ln_Type == LV_VAR &&
  9140. +        !(scan_env->lv_Flags & (GVF_GLOBAL_ONLY | GVF_BINARY_VAR)))
  9141. +        {
  9142. +        /* We only handle local text variables */
  9143. +        char *env_name = scan_env->lv_Node.ln_Name;
  9144. +        int env_len = scan_env->lv_Len;
  9145. +
  9146. +        *new_environ++ = env_text;
  9147. +        while (*env_name) *env_text++ = *env_name++;
  9148. +        *env_text++ = '=';
  9149. +        env_name = scan_env->lv_Value;
  9150. +        while (env_len--) *env_text++ = *env_name++;
  9151. +        *env_text++ = '\0';
  9152. +        }
  9153. +    *new_environ = 0;
  9154. +    }
  9155. +}
  9156. +
  9157. +/* _main routine.
  9158. +   Hides the differences between wb & cli.
  9159. +   Provides a unix-like environment (including coomand-line parsing &
  9160. +   wildcard expansion)
  9161. +*/
  9162. +
  9163. +#define DEFPATLEN 256
  9164. +#define NAMELEN 1024
  9165. +
  9166. +struct args
  9167. +{
  9168. +    int size;
  9169. +    int argc;
  9170. +    char **argv;
  9171. +};
  9172. +
  9173. +static void make_argv(struct args *args, int argc)
  9174. +{
  9175. +    args->size = argc;
  9176. +    args->argc = 0;
  9177. +    args->argv = _xmalloc(sizeof(char *) * argc);
  9178. +}
  9179. +
  9180. +static int safe_add_arg(struct args *args, char *argument, int copy)
  9181. +{
  9182. +    char *arg_copy;
  9183. +
  9184. +    if (copy) arg_copy = safe_copystr(argument);
  9185. +    else arg_copy = argument;
  9186. +    if (!arg_copy) return 0;
  9187. +
  9188. +    if (args->argc >= args->size)
  9189. +    {
  9190. +    /* Make argv bigger */
  9191. +    if (args->size * 2 < args->size + 16) args->size += 16;
  9192. +    else args->size *= 2;
  9193. +    args->argv = realloc(args->argv, sizeof(char *) * args->size);
  9194. +    if (!args->argv) return 0;
  9195. +    }
  9196. +    args->argv[args->argc++] = arg_copy;
  9197. +    return 1;
  9198. +}
  9199. +
  9200. +static void add_arg(struct args *args, char *argument, int copy)
  9201. +{
  9202. +    if (!safe_add_arg(args, argument, copy)) nomem();
  9203. +}
  9204. +
  9205. +static void concat_args(struct args *args, struct args *add)
  9206. +{
  9207. +    if (args->argc + add->argc > args->size)
  9208. +    {
  9209. +    args->size = (args->argc + add->argc) * 2;
  9210. +    args->argv = _xrealloc(args->argv, sizeof(char *) * args->size);
  9211. +    }
  9212. +    memcpy(args->argv + args->argc, add->argv, add->argc * sizeof(char *));
  9213. +    args->argc += add->argc;
  9214. +    free(add->argv);
  9215. +}
  9216. +
  9217. +typedef enum { quote_none, quote_single, quote_double } quote_type;
  9218. +typedef enum { extract_normal, extract_test, extract_pattern } extract_type;
  9219. +
  9220. +static void extract(char *buf, char *start, char *end,
  9221. +            quote_type type, extract_type extract)
  9222. +{
  9223. +  char *res = buf;
  9224. +
  9225. +  switch (type)
  9226. +    {
  9227. +    case quote_single:
  9228. +      if (extract != extract_test)
  9229. +    {
  9230. +      buf[end - start] = '\0';
  9231. +      memcpy(buf, start, end - start);
  9232. +    }
  9233. +      else strcpy(buf, "a");    /* Things in quotes are never patterns */
  9234. +      break;
  9235. +
  9236. +    case quote_none:
  9237. +      while (start < end)
  9238. +    {
  9239. +      if (start[0] == '\\' && start[1])
  9240. +        {
  9241. +          start += 2;
  9242. +          /* Wildcard are escaped */
  9243. +          if (extract == extract_test) *res++ = 'a';
  9244. +          else if (extract == extract_pattern)
  9245. +        switch (start[-1])
  9246. +          {
  9247. +          case '?': case '#': case '(': case ')': case '|': case '[':
  9248. +          case ']': case '~': case '%': case '*': case '\'':
  9249. +            *res++ = '\'';
  9250. +          default:
  9251. +            *res++ = start[-1];
  9252. +            break;
  9253. +          }
  9254. +          else *res++ = start[-1];
  9255. +        }
  9256. +      else *res++ = *start++;
  9257. +    }
  9258. +      *res++ = '\0';
  9259. +      break;
  9260. +
  9261. +    case quote_double:
  9262. +      while (start < end)
  9263. +    {
  9264. +      if (start[0] == '*' && start[1])
  9265. +        {
  9266. +          start += 2;
  9267. +          switch (start[-1])
  9268. +        {
  9269. +        case 'n': *res++ = '\n'; break;
  9270. +        case 'e': *res++ = '\x1b'; break;
  9271. +        default: *res++ = start[-1]; break;
  9272. +        }
  9273. +        }
  9274. +      else *res++ = *start++;
  9275. +    }
  9276. +      *res++ = '\0';
  9277. +      break;
  9278. +    }
  9279. +}
  9280. +
  9281. +void __stdargs _main(char *line)
  9282. +/* Effect: Call unix_main with wildcards in argc & argv expanded (like unix)
  9283. +     Also, do some early amiga initialisation for emacs.
  9284. +*/
  9285. +{
  9286. +  struct args args, wildargs;
  9287. +  char *pattern, *arg_start, *arg_end, *arg;
  9288. +  quote_type arg_quoted;
  9289. +  long patlen = DEFPATLEN;
  9290. +  struct AnchorPath *anchor;
  9291. +  struct timeval now;
  9292. +
  9293. +  if (SysBase->LibNode.lib_Version < 37) XCEXIT(20);
  9294. +
  9295. +  stdin->_file = 0;
  9296. +  stdin->_flag = _IOREAD;
  9297. +  stdout->_file = 1;
  9298. +  stdout->_flag = _IOWRT;
  9299. +  stderr->_file = 2;
  9300. +  stderr->_flag = _IORW | _IONBF;
  9301. +
  9302. +  _us = (struct Process *)FindTask(0);
  9303. +  _odd_timer = _alloc_timer();
  9304. +  if (!_odd_timer) _fail("Failed to create timer");
  9305. +  _odd_sig = _timer_sig(_odd_timer);
  9306. +  TimerBase = _odd_timer->io->tr_node.io_Device;
  9307. +  GetSysTime(&now);
  9308. +  _startup_time = now.tv_secs;
  9309. +
  9310. +  /* These use _startup_time, so must be here */
  9311. +  _init_fifo();
  9312. +  _init_signals();
  9313. +
  9314. +  if (_us->pr_CLI) _stack_size = ((struct CommandLineInterface *)BADDR(_us->pr_CLI))->cli_DefaultStack << 2;
  9315. +  else _stack_size = _us->pr_StackSize;
  9316. +
  9317. +  /* Make unix-like argc, argv (expand wildcards) */
  9318. +  if (!line[0])            /* Workbench, create argc & argv from files passed */
  9319. +    {
  9320. +      extern struct WBStartup *_WBenchMsg;
  9321. +      int i;
  9322. +      BPTR nilin = Open("NIL:",MODE_NEWFILE);
  9323. +      BPTR nilout = Open("NIL:",MODE_NEWFILE);
  9324. +      BPTR nilerr = Open("NIL:",MODE_NEWFILE);
  9325. +
  9326. +      /* Initialise I/O. Nothing is available */
  9327. +      if (!nilin || !nilout || !nilerr)
  9328. +    {
  9329. +      if (nilin) Close(nilin);
  9330. +      if (nilout) Close(nilout);
  9331. +      if (nilerr) Close(nilerr);
  9332. +      nomem();
  9333. +    }
  9334. +      _init_unixio(nilin, TRUE, nilout, TRUE, nilerr, TRUE);
  9335. +
  9336. +      /* Make argc, argv from Workbench parameters */
  9337. +      make_argv(&args, _WBenchMsg->sm_NumArgs);
  9338. +
  9339. +      for (i = 0; i < _WBenchMsg->sm_NumArgs; i++)
  9340. +    {
  9341. +      char filename[256];
  9342. +
  9343. +      if (_WBenchMsg->sm_ArgList[i].wa_Lock &&
  9344. +          NameFromLock(_WBenchMsg->sm_ArgList[i].wa_Lock, filename, 256))
  9345. +        {
  9346. +          if (_WBenchMsg->sm_ArgList[i].wa_Name)
  9347. +        AddPart(filename, _WBenchMsg->sm_ArgList[i].wa_Name, 256);
  9348. +          add_arg(&args, filename, TRUE);
  9349. +        }
  9350. +      /* else A parameter was lost, cry, cry, cry */
  9351. +    }
  9352. +    }
  9353. +  else                /* From CLI expand wildcards (with unix-like command line parsing) */
  9354. +    {
  9355. +      int close_error;
  9356. +      BPTR in, out, error;
  9357. +
  9358. +      /* Initialise I/O. Copy CLI info */
  9359. +      in = Input();
  9360. +      out = Output();
  9361. +      close_error = FALSE;
  9362. +      if ((error = _us->pr_CES) == 0)
  9363. +    {
  9364. +      close_error = TRUE;
  9365. +      if ((error = Open("*", MODE_OLDFILE)) == 0)
  9366. +        if ((error = Open("NIL:", MODE_OLDFILE)) == 0) nomem();
  9367. +    }
  9368. +      _init_unixio(in, FALSE, out, FALSE, error, close_error);
  9369. +
  9370. +      make_argv(&args, 1);
  9371. +
  9372. +      anchor = _xmalloc(sizeof(struct AnchorPath) + NAMELEN);
  9373. +      anchor->ap_Strlen = NAMELEN;
  9374. +      pattern = _xmalloc(DEFPATLEN);
  9375. +      while (1)
  9376. +    {
  9377. +      long new_patlen;
  9378. +      int wild;
  9379. +
  9380. +      /* Skip white space */
  9381. +      while (isspace(*line)) line++;
  9382. +      if (!*line) break;    /* End of command line */
  9383. +
  9384. +      /* Extract next word */
  9385. +      /* Words in double quotes are handled AmigaOS style
  9386. +         (+ filename expansion) */
  9387. +      if (*line == '"')
  9388. +        {
  9389. +          line++;
  9390. +          arg_start = line;
  9391. +          /* Find end of word */
  9392. +          while (*line && *line != '"')
  9393. +        {
  9394. +          /* * is an escape character inside double quotes
  9395. +             (AmigaOS compatibility) */
  9396. +          if ((*line == '*') && line[1]) line++;
  9397. +          line++;
  9398. +        }
  9399. +          arg_end = line;
  9400. +          if (*line == '"') line++;
  9401. +          arg_quoted = quote_double;
  9402. +        }
  9403. +      /* Words in single quotes are handled unix style */
  9404. +      else if (*line == '\'')
  9405. +        {
  9406. +          line++;
  9407. +          arg_start = line;
  9408. +          /* Find end of word */
  9409. +          while (*line && *line != '\'') line++;
  9410. +          arg_end = line;
  9411. +          if (*line == '\'') line++;
  9412. +          arg_quoted = quote_single;
  9413. +        }
  9414. +      /* Unquoted words are handled unix style */
  9415. +      else            /* Plain word */
  9416. +        {
  9417. +          arg_start = line;
  9418. +          /* Find end of word */
  9419. +          while (*line && *line != ' ' && *line != '\n' && *line != '\t')
  9420. +        {
  9421. +          if (*line == '\\' && line[1]) line++;
  9422. +          line++;
  9423. +        }
  9424. +          arg_end = line;
  9425. +          arg_quoted = quote_none;
  9426. +        }
  9427. +      arg = _xmalloc(arg_end - arg_start + 1);
  9428. +      if (args.argc == 0)    /* Command name is left untouched */
  9429. +        {
  9430. +          strncpy(arg, arg_start, arg_end - arg_start);
  9431. +          arg[arg_end - arg_start] = 0;
  9432. +          add_arg(&args, arg, FALSE);
  9433. +        }
  9434. +      else
  9435. +        {
  9436. +          new_patlen = (arg_end - arg_start) * 2 + 16;
  9437. +          if (new_patlen > patlen)
  9438. +        {
  9439. +          free(pattern);
  9440. +          pattern = _xmalloc(new_patlen);
  9441. +          patlen = new_patlen;
  9442. +        }
  9443. +          extract(arg, arg_start, arg_end, arg_quoted, extract_test);
  9444. +          wild = ParsePattern(arg, pattern, patlen);
  9445. +          if (wild < 0)
  9446. +        {
  9447. +          *arg_end = 0;
  9448. +          _fail("Invalid wildcard %s", arg_start);
  9449. +        }
  9450. +          if (!wild)
  9451. +        {
  9452. +          extract(arg, arg_start, arg_end, arg_quoted, extract_normal);
  9453. +          add_arg(&args, arg, FALSE);
  9454. +        }
  9455. +          else
  9456. +        {
  9457. +          int none = TRUE;
  9458. +          long error;
  9459. +
  9460. +          anchor->ap_Flags = anchor->ap_Reserved = anchor->ap_BreakBits = 0;
  9461. +          extract(arg, arg_start, arg_end, arg_quoted, extract_pattern);
  9462. +          make_argv(&wildargs, 16);
  9463. +          if (!(error = MatchFirst(arg, anchor)))
  9464. +            {
  9465. +              while (!error)
  9466. +            {
  9467. +              none = FALSE;
  9468. +              if (!safe_add_arg(&wildargs, anchor->ap_Buf, TRUE))
  9469. +                {
  9470. +                  error = ERROR_NO_FREE_STORE;
  9471. +                  break;
  9472. +                }
  9473. +              error = MatchNext(anchor);
  9474. +            }
  9475. +              MatchEnd(anchor);
  9476. +            }
  9477. +          if (error != ERROR_NO_MORE_ENTRIES)
  9478. +              _fail("Error expanding arguments");
  9479. +          if (none)
  9480. +            {
  9481. +              extract(arg, arg_start, arg_end, arg_quoted, extract_normal);
  9482. +              add_arg(&args, arg, FALSE);
  9483. +            }
  9484. +          else
  9485. +            {
  9486. +              tqsort(wildargs.argv, wildargs.argc);
  9487. +              concat_args(&args, &wildargs);
  9488. +              free(arg);
  9489. +            }
  9490. +        }
  9491. +        }
  9492. +    }
  9493. +      free(pattern);
  9494. +      free(anchor);
  9495. +    }
  9496. +
  9497. +  make_environ();
  9498. +
  9499. +  if (!(_amiga_user.pw_name = getenv("USER"))) _amiga_user.pw_name = "user";
  9500. +  if (!(_amiga_user.pw_gecos = getenv("USERNAME")))
  9501. +    _amiga_user.pw_gecos = _amiga_user.pw_name;
  9502. +  if (!(_amiga_user.pw_dir = getenv("HOME"))) _amiga_user.pw_dir = "s:";
  9503. +  if (!(_amiga_user.pw_shell = getenv("SHELL"))) _amiga_user.pw_shell = "bin:sh";
  9504. +  if (!(_system_name = getenv("HOSTNAME"))) _system_name = "amiga";
  9505. +    
  9506. +  main(args.argc, args.argv, environ);
  9507. +  exit(0);
  9508. +}
  9509. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/_setjmp.asm amiga/fsf/emacs18/amiga/unix/src/_setjmp.asm
  9510. --- baseline/fsf/emacs18/amiga/unix/src/_setjmp.asm    Wed Dec 31 17:00:00 1969
  9511. +++ amiga/fsf/emacs18/amiga/unix/src/_setjmp.asm    Sat Sep 28 00:00:00 1996
  9512. @@ -0,0 +1,27 @@
  9513. +    XDEF    __setjmp
  9514. +    XDEF    __longjmp
  9515. +    XDEF    @_setjmp
  9516. +    XDEF    @_longjmp
  9517. +    
  9518. +    csect    text,0,,2,2
  9519. +
  9520. +__setjmp:
  9521. +    move.l    4(a7),a0        ; Get jmp_buf
  9522. +@_setjmp
  9523. +    move.l    (a7),(a0)+        ; Save return address
  9524. +    movem.l    a2-a7/d2-d7,(a0)    ; Save registers
  9525. +    moveq    #0,d0
  9526. +    rts
  9527. +
  9528. +__longjmp:
  9529. +    move.l    4(a7),a0        ; Get jmp_buf
  9530. +    move.l    8(a7),d0        ; Get result
  9531. +@_longjmp
  9532. +    bne.s    ok
  9533. +    moveq    #1,d0            ; Return must be != 0
  9534. +ok    move.l    (a0)+,a1        ; Get return address
  9535. +    movem.l    (a0),a2-a7/d2-d7    ; Get registers
  9536. +    addq.l    #4,a7            ; Pop return address
  9537. +    jmp    (a1)            ; And return to setjmp call
  9538. +
  9539. +    end
  9540. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/abort.c amiga/fsf/emacs18/amiga/unix/src/abort.c
  9541. --- baseline/fsf/emacs18/amiga/unix/src/abort.c    Wed Dec 31 17:00:00 1969
  9542. +++ amiga/fsf/emacs18/amiga/unix/src/abort.c    Sat Sep 28 00:00:00 1996
  9543. @@ -0,0 +1,11 @@
  9544. +#include "amiga.h"
  9545. +#include <signal.h>
  9546. +
  9547. +extern void _close_all(void);
  9548. +
  9549. +void abort(void)
  9550. +{
  9551. +  chkabort();
  9552. +  _close_all();
  9553. +  kill(getpid(), SIGIOT);
  9554. +}
  9555. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/access.c amiga/fsf/emacs18/amiga/unix/src/access.c
  9556. --- baseline/fsf/emacs18/amiga/unix/src/access.c    Wed Dec 31 17:00:00 1969
  9557. +++ amiga/fsf/emacs18/amiga/unix/src/access.c    Sat Sep 28 00:00:00 1996
  9558. @@ -0,0 +1,29 @@
  9559. +#include "amiga.h"
  9560. +#include "fibstat.h"
  9561. +#include <sys/types.h>
  9562. +#include <sys/stat.h>
  9563. +
  9564. +#undef access
  9565. +
  9566. +int __access(const char *name, int mode)
  9567. +{
  9568. +  int ret = -1;
  9569. +  struct stat sbuf;
  9570. +
  9571. +  chkabort();
  9572. +  if (_fibstat(name, &sbuf) == 0)
  9573. +    {
  9574. +      int fmode = (sbuf.st_mode & (S_IREAD | S_IEXEC)) >> 6 |
  9575. +    (sbuf.st_mode & (S_IWRITE >> 3)) >> 3;
  9576. +
  9577. +      if ((fmode & mode) == mode) ret = 0;
  9578. +      else errno = EACCES;
  9579. +    }
  9580. +  return ret;
  9581. +}
  9582. +
  9583. +int access(const char *name, int mode)
  9584. +{
  9585. +  return __access(name, mode);
  9586. +}
  9587. +
  9588. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/alloca.c amiga/fsf/emacs18/amiga/unix/src/alloca.c
  9589. --- baseline/fsf/emacs18/amiga/unix/src/alloca.c    Wed Dec 31 17:00:00 1969
  9590. +++ amiga/fsf/emacs18/amiga/unix/src/alloca.c    Sat Sep 28 00:00:00 1996
  9591. @@ -0,0 +1,194 @@
  9592. +/*
  9593. +    alloca -- (mostly) portable public-domain implementation -- D A Gwyn
  9594. +
  9595. +    last edit:    86/05/30    rms
  9596. +       include config.h, since on VMS it renames some symbols.
  9597. +       Use xmalloc instead of malloc.
  9598. +
  9599. +    This implementation of the PWB library alloca() function,
  9600. +    which is used to allocate space off the run-time stack so
  9601. +    that it is automatically reclaimed upon procedure exit, 
  9602. +    was inspired by discussions with J. Q. Johnson of Cornell.
  9603. +
  9604. +    It should work under any C implementation that uses an
  9605. +    actual procedure stack (as opposed to a linked list of
  9606. +    frames).  There are some preprocessor constants that can
  9607. +    be defined when compiling for your specific system, for
  9608. +    improved efficiency; however, the defaults should be okay.
  9609. +
  9610. +    The general concept of this implementation is to keep
  9611. +    track of all alloca()-allocated blocks, and reclaim any
  9612. +    that are found to be deeper in the stack than the current
  9613. +    invocation.  This heuristic does not reclaim storage as
  9614. +    soon as it becomes invalid, but it will do so eventually.
  9615. +
  9616. +    As a special case, alloca(0) reclaims storage without
  9617. +    allocating any.  It is a good idea to use alloca(0) in
  9618. +    your main control loop, etc. to force garbage collection.
  9619. +*/
  9620. +#ifndef lint
  9621. +static char    SCCSid[] = "@(#)alloca.c    1.1";    /* for the "what" utility */
  9622. +#endif
  9623. +
  9624. +#ifdef emacs
  9625. +#include "config.h"
  9626. +#ifdef static
  9627. +/* actually, only want this if static is defined as ""
  9628. +   -- this is for usg, in which emacs must undefine static
  9629. +   in order to make unexec workable
  9630. +   */
  9631. +#ifndef STACK_DIRECTION
  9632. +you
  9633. +lose
  9634. +-- must know STACK_DIRECTION at compile-time
  9635. +#endif /* STACK_DIRECTION undefined */
  9636. +#endif static
  9637. +#endif emacs
  9638. +
  9639. +#ifndef alloca  /* If compiling with GCC, this file's not needed.  */
  9640. +
  9641. +#ifdef __STDC__
  9642. +typedef void    *pointer;        /* generic pointer type */
  9643. +#else
  9644. +typedef char    *pointer;        /* generic pointer type */
  9645. +#endif
  9646. +
  9647. +#define    NULL    0            /* null pointer constant */
  9648. +
  9649. +extern void    free();
  9650. +extern pointer    malloc();
  9651. +
  9652. +/*
  9653. +    Define STACK_DIRECTION if you know the direction of stack
  9654. +    growth for your system; otherwise it will be automatically
  9655. +    deduced at run-time.
  9656. +
  9657. +    STACK_DIRECTION > 0 => grows toward higher addresses
  9658. +    STACK_DIRECTION < 0 => grows toward lower addresses
  9659. +    STACK_DIRECTION = 0 => direction of growth unknown
  9660. +*/
  9661. +
  9662. +#ifndef STACK_DIRECTION
  9663. +#define    STACK_DIRECTION    0        /* direction unknown */
  9664. +#endif
  9665. +
  9666. +#if (STACK_DIRECTION) != 0
  9667. +
  9668. +#define    STACK_DIR    STACK_DIRECTION    /* known at compile-time */
  9669. +
  9670. +#else    /* STACK_DIRECTION == 0; need run-time code */
  9671. +
  9672. +static int    stack_dir;        /* 1 or -1 once known */
  9673. +#define    STACK_DIR    stack_dir
  9674. +
  9675. +static void
  9676. +find_stack_direction (/* void */)
  9677. +{
  9678. +  static char    *addr = NULL;    /* address of first
  9679. +                   `dummy', once known */
  9680. +  auto char    dummy;        /* to get stack address */
  9681. +
  9682. +  if (addr == NULL)
  9683. +    {                /* initial entry */
  9684. +      addr = &dummy;
  9685. +
  9686. +      find_stack_direction ();    /* recurse once */
  9687. +    }
  9688. +  else                /* second entry */
  9689. +    if (&dummy > addr)
  9690. +      stack_dir = 1;        /* stack grew upward */
  9691. +    else
  9692. +      stack_dir = -1;        /* stack grew downward */
  9693. +}
  9694. +
  9695. +#endif    /* STACK_DIRECTION == 0 */
  9696. +
  9697. +/*
  9698. +    An "alloca header" is used to:
  9699. +    (a) chain together all alloca()ed blocks;
  9700. +    (b) keep track of stack depth.
  9701. +
  9702. +    It is very important that sizeof(header) agree with malloc()
  9703. +    alignment chunk size.  The following default should work okay.
  9704. +*/
  9705. +
  9706. +#ifndef    ALIGN_SIZE
  9707. +#define    ALIGN_SIZE    sizeof(double)
  9708. +#endif
  9709. +
  9710. +typedef union hdr
  9711. +{
  9712. +  char    align[ALIGN_SIZE];    /* to force sizeof(header) */
  9713. +  struct
  9714. +    {
  9715. +      union hdr *next;        /* for chaining headers */
  9716. +      char *deep;        /* for stack depth measure */
  9717. +    } h;
  9718. +} header;
  9719. +
  9720. +/*
  9721. +    alloca( size ) returns a pointer to at least `size' bytes of
  9722. +    storage which will be automatically reclaimed upon exit from
  9723. +    the procedure that called alloca().  Originally, this space
  9724. +    was supposed to be taken from the current stack frame of the
  9725. +    caller, but that method cannot be made to work for some
  9726. +    implementations of C, for example under Gould's UTX/32.
  9727. +*/
  9728. +
  9729. +static header *last_alloca_header = NULL; /* -> last alloca header */
  9730. +
  9731. +pointer
  9732. +alloca (size)            /* returns pointer to storage */
  9733. +     unsigned    size;        /* # bytes to allocate */
  9734. +{
  9735. +  auto char    probe;        /* probes stack depth: */
  9736. +  register char    *depth = &probe;
  9737. +
  9738. +#if STACK_DIRECTION == 0
  9739. +  if (STACK_DIR == 0)        /* unknown growth direction */
  9740. +    find_stack_direction ();
  9741. +#endif
  9742. +
  9743. +                /* Reclaim garbage, defined as all alloca()ed storage that
  9744. +                   was allocated from deeper in the stack than currently. */
  9745. +
  9746. +  {
  9747. +    register header    *hp;    /* traverses linked list */
  9748. +
  9749. +    for (hp = last_alloca_header; hp != NULL;)
  9750. +      if (STACK_DIR > 0 && hp->h.deep > depth
  9751. +      || STACK_DIR < 0 && hp->h.deep < depth)
  9752. +    {
  9753. +      register header    *np = hp->h.next;
  9754. +
  9755. +      free ((pointer) hp);    /* collect garbage */
  9756. +
  9757. +      hp = np;        /* -> next header */
  9758. +    }
  9759. +      else
  9760. +    break;            /* rest are not deeper */
  9761. +
  9762. +    last_alloca_header = hp;    /* -> last valid storage */
  9763. +  }
  9764. +
  9765. +  if (size == 0)
  9766. +    return NULL;        /* no allocation required */
  9767. +
  9768. +  /* Allocate combined header + user data storage. */
  9769. +
  9770. +  {
  9771. +    register pointer    new = malloc (sizeof (header) + size);
  9772. +    /* address of header */
  9773. +
  9774. +    ((header *)new)->h.next = last_alloca_header;
  9775. +    ((header *)new)->h.deep = depth;
  9776. +
  9777. +    last_alloca_header = (header *)new;
  9778. +
  9779. +    /* User storage begins just after header. */
  9780. +
  9781. +    return (pointer)((char *)new + sizeof(header));
  9782. +  }
  9783. +}
  9784. +
  9785. +#endif /* no alloca */
  9786. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/allocdos.c amiga/fsf/emacs18/amiga/unix/src/allocdos.c
  9787. --- baseline/fsf/emacs18/amiga/unix/src/allocdos.c    Wed Dec 31 17:00:00 1969
  9788. +++ amiga/fsf/emacs18/amiga/unix/src/allocdos.c    Sat Sep 28 00:00:00 1996
  9789. @@ -0,0 +1,6 @@
  9790. +#include <proto/dos.h>
  9791. +
  9792. +void *AllocDosObjectTags(ULONG type, ULONG tag1, ...)
  9793. +{
  9794. +  return AllocDosObject(type, &tag1);
  9795. +}
  9796. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/amiga.h amiga/fsf/emacs18/amiga/unix/src/amiga.h
  9797. --- baseline/fsf/emacs18/amiga/unix/src/amiga.h    Wed Dec 31 17:00:00 1969
  9798. +++ amiga/fsf/emacs18/amiga/unix/src/amiga.h    Sat Sep 28 00:00:00 1996
  9799. @@ -0,0 +1,39 @@
  9800. +#include <exec/types.h>
  9801. +#include <dos/dos.h>
  9802. +#include <proto/dos.h>
  9803. +#include <proto/exec.h>
  9804. +
  9805. +#include <errno.h>
  9806. +#include <stddef.h>
  9807. +#include <stdlib.h>
  9808. +#include <stdio.h>
  9809. +#include <sys/types.h>
  9810. +#include <internal/vars.h>
  9811. +
  9812. +extern struct timeinfo *_odd_timer;
  9813. +extern ULONG _odd_sig;
  9814. +extern struct Library *TimerBase;
  9815. +
  9816. +int convert_oserr(int ioerr);
  9817. +void _seterr(void);
  9818. +void chkabort(void);
  9819. +
  9820. +#define ERROR do { _seterr(); return -1; } while(0)
  9821. +#define AMIGA_UID 1
  9822. +#define AMIGA_GID 0
  9823. +
  9824. +int _make_protection(int mode);
  9825. +int _make_mode(int protection);
  9826. +
  9827. +void _message(char *format, ...);
  9828. +/* Display a message which is as visible as possible (either to the console
  9829. +   or to as a requester).
  9830. +   Assume very little about library state */
  9831. +
  9832. +void _fail(char *format, ...);
  9833. +/* Display a message which is as visible as possible (either to the console
  9834. +   or to as a requester).
  9835. +   Assume very little about library state.
  9836. +   Exit with error code RETURN_FAIL after that. */
  9837. +
  9838. +void _sprintf(char *dest, char *format, ...);
  9839. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/amigaos.c amiga/fsf/emacs18/amiga/unix/src/amigaos.c
  9840. --- baseline/fsf/emacs18/amiga/unix/src/amigaos.c    Wed Dec 31 17:00:00 1969
  9841. +++ amiga/fsf/emacs18/amiga/unix/src/amigaos.c    Sat Sep 28 00:00:00 1996
  9842. @@ -0,0 +1,299 @@
  9843. +#include "amiga.h"
  9844. +#include "files.h"
  9845. +#include "signals.h"
  9846. +#include <exec/memory.h>
  9847. +#include <fcntl.h>
  9848. +#include <sys/termios.h>
  9849. +#include <amiga/ioctl.h>
  9850. +#include <string.h>
  9851. +
  9852. +/* Code for fd's describing AmigaOS files */
  9853. +
  9854. +struct amigainfo
  9855. +{
  9856. +    BPTR fh;
  9857. +    BPTR lock;            /* A lock on the file (may be null) */
  9858. +    long protection;        /* To be set when file is closed, -1 for none */
  9859. +    char interactive;        /* True if file was interactive */
  9860. +    char deleted;        /* True if file has been deleted but not closed */
  9861. +};
  9862. +
  9863. +static ULONG __regargs file_select_start(void *userinfo, int rd, int wr)
  9864. +{
  9865. +  /* Input always immediately available, gniark */
  9866. +  return (ULONG)-1;
  9867. +}
  9868. +
  9869. +static void __regargs file_select_poll(void *userinfo, int *rd, int *wr)
  9870. +{
  9871. +  /* Input always immediately available, gniark */
  9872. +}
  9873. +
  9874. +static int __regargs file_read(void *userinfo, void *buffer, unsigned int length)
  9875. +{
  9876. +  struct amigainfo *info = userinfo;
  9877. +  BPTR fh = info->fh;
  9878. +  LONG cnt;
  9879. +
  9880. +  if (info->deleted) return 0;
  9881. +  if ((cnt = Read(fh, buffer, length)) == -1) ERROR;
  9882. +  return (int)cnt;
  9883. +}
  9884. +
  9885. +static int __regargs file_write(void *userinfo, void *buffer, unsigned int length)
  9886. +{
  9887. +  struct amigainfo *info = userinfo;
  9888. +  BPTR fh = info->fh;
  9889. +  int cnt;
  9890. +
  9891. +  if (info->deleted) return 0;
  9892. +  if (info->interactive)
  9893. +    {
  9894. +      char *bufend = (char *)buffer + length;
  9895. +
  9896. +      /* Write by lines, more pleasant for user */
  9897. +      cnt = 0;
  9898. +      while (length)
  9899. +    {
  9900. +      char *end = buffer;
  9901. +      long nb;
  9902. +      unsigned len;
  9903. +
  9904. +      while (end < bufend && *end != '\n') end++;
  9905. +      if (end == bufend) len = end - (char *)buffer;
  9906. +      else len = end + 1 - (char *)buffer;
  9907. +
  9908. +      if ((nb = Write(fh, buffer, len)) == -1) ERROR;
  9909. +      cnt += nb;
  9910. +      if (nb != len) break;
  9911. +
  9912. +      buffer = end + 1;
  9913. +      length -= nb;
  9914. +      /* Interrupt write ? */
  9915. +      if (_handle_signals(_check_signals(0))) break;
  9916. +    }
  9917. +    }
  9918. +  else if ((cnt = Write(fh, buffer, length)) == -1) ERROR;
  9919. +  return cnt;
  9920. +}
  9921. +
  9922. +static int __regargs file_lseek(void *userinfo, long rpos, int mode)
  9923. +{
  9924. +  struct amigainfo *info = userinfo;
  9925. +  BPTR fh = info->fh;
  9926. +  LONG pos, err;
  9927. +
  9928. +  if (info->deleted) return 0;
  9929. +  pos = Seek(fh, rpos, mode - 1);
  9930. +  err = IoErr();
  9931. +  if (pos == -1 || err)
  9932. +    {
  9933. +      errno = convert_oserr(err);
  9934. +      return -1;
  9935. +    }
  9936. +  pos = Seek(fh, 0, OFFSET_CURRENT);
  9937. +  if (pos == -1 || err)
  9938. +    {
  9939. +      errno = convert_oserr(err);
  9940. +      return -1;
  9941. +    }
  9942. +  return pos;
  9943. +}
  9944. +
  9945. +static int __regargs file_close(void *userinfo, int internal)
  9946. +{
  9947. +  struct amigainfo *info = userinfo;
  9948. +  BPTR fh = info->fh;
  9949. +  long protection = info->protection;
  9950. +  char name[256];
  9951. +  int ok, deleted;
  9952. +
  9953. +  if (info->lock) UnLock(info->lock);
  9954. +  deleted = info->deleted;
  9955. +  free(info);
  9956. +  if (deleted) return 0;
  9957. +
  9958. +  ok = NameFromFH(fh, name, 256);
  9959. +  if (internal || Close(fh))
  9960. +    if (!ok || protection == -1 || SetProtection(name, protection)) return 0;
  9961. +  ERROR;
  9962. +}
  9963. +
  9964. +static int isfifo(BPTR fh)
  9965. +/* Requires: IsInteractive(fh) */
  9966. +/* Try & find out if fh is a fifo: file */
  9967. +{
  9968. +    WaitForChar(fh, 0);
  9969. +
  9970. +    return IoErr() == ERROR_ACTION_NOT_KNOWN;
  9971. +}
  9972. +
  9973. +static int GetWinBounds (BPTR fh, long *width, long *height)
  9974. +{
  9975. +  char buffer[16];
  9976. +  int ok = 0;
  9977. +
  9978. +  if (!isfifo(fh) && SetMode (fh, 1))
  9979. +    {
  9980. +      if ((Write (fh, "\x9b" "0 q", 4) == 4) &&
  9981. +      WaitForChar (fh, 10000L) &&
  9982. +      (Read (fh, buffer, sizeof (buffer)) > 9) &&
  9983. +      (buffer[0] == '\x9b'))
  9984. +    {
  9985. +      int y = StrToLong (buffer+5, height);
  9986. +      int x = StrToLong (buffer+5+y+1, width);
  9987. +      if ((x != -1) && (y != -1)) ok = 1;
  9988. +    }
  9989. +      SetMode (fh, 0);
  9990. +    }
  9991. +  return ok;
  9992. +}
  9993. +
  9994. +int _do_truncate(BPTR fh, off_t length)
  9995. +{
  9996. +  int err, ret = -1;
  9997. +  long oldsize, oldpos;
  9998. +
  9999. +  oldpos = Seek(fh, 0, OFFSET_END);
  10000. +  oldsize = Seek(fh, 0, OFFSET_END);
  10001. +
  10002. +  if (!(err = IoErr()) &&
  10003. +      SetFileSize(fh, length, OFFSET_BEGINNING) == length)
  10004. +    {
  10005. +      if (oldsize < length)
  10006. +    {
  10007. +      /* Zero extra bytes */
  10008. +      off_t bufsize = length - oldsize, left = bufsize;
  10009. +      char *buf;
  10010. +      char reserve[512];
  10011. +
  10012. +      if (!(buf = AllocMem(bufsize, MEMF_CLEAR)))
  10013. +        {
  10014. +          bufsize = AvailMem(MEMF_LARGEST) / 2;
  10015. +
  10016. +          if (bufsize < 512 || !(buf = AllocMem(bufsize, MEMF_CLEAR)))
  10017. +        {
  10018. +          bufsize = 512;
  10019. +          buf = reserve;
  10020. +          memset(reserve, 0, 512);
  10021. +        }
  10022. +        }
  10023. +      while (left > 0)
  10024. +        {
  10025. +          long count = left > bufsize ? bufsize : left;
  10026. +
  10027. +          chkabort();
  10028. +          if (Write(fh, buf, count) != count)
  10029. +        {
  10030. +          err = IoErr();
  10031. +          break;
  10032. +        }
  10033. +          left -= count;
  10034. +        }
  10035. +      if (buf != reserve) FreeMem(buf, bufsize);
  10036. +    }
  10037. +      if (!err) ret = 0;
  10038. +    }
  10039. +  if (oldpos < length) Seek(fh, oldpos, OFFSET_BEGINNING);
  10040. +
  10041. +  if (ret) errno = convert_oserr(err);
  10042. +  return ret;
  10043. +}
  10044. +
  10045. +static int __regargs file_ioctl(void *userinfo, int request, void *data)
  10046. +{
  10047. +  struct amigainfo *info = userinfo;
  10048. +  BPTR fh = info->fh;
  10049. +
  10050. +  if (!info->deleted)
  10051. +    switch (request)
  10052. +      {
  10053. +      case TIOCGWINSZ: {
  10054. +    struct winsize *ws = data;
  10055. +    long col, row;
  10056. +
  10057. +    if (info->interactive && GetWinBounds(fh, &col, &row))
  10058. +      {
  10059. +        ws->ws_col = col; ws->ws_row = row;
  10060. +        return 0;
  10061. +      }
  10062. +    errno = ENOTTY;
  10063. +    return -1;
  10064. +      }
  10065. +      case _AMIGA_INTERACTIVE: {
  10066. +    int *inter = data;
  10067. +
  10068. +    *inter = IsInteractive(fh);
  10069. +    return 0;
  10070. +      }
  10071. +      case _AMIGA_GET_FH: {
  10072. +    BPTR *gotfh = data;
  10073. +
  10074. +    *gotfh = fh;
  10075. +    return 0;
  10076. +      }
  10077. +      case _AMIGA_FREE_FH: return 0;
  10078. +      case _AMIGA_TRUNCATE: {
  10079. +    off_t length = *(off_t *)data;
  10080. +
  10081. +    return _do_truncate(fh, length);
  10082. +      }
  10083. +      case _AMIGA_SETPROTECTION:
  10084. +    info->protection = *(long *)data;
  10085. +    return 0;
  10086. +      case _AMIGA_DELETE_IF_ME: {
  10087. +    BPTR nlock = *(BPTR *)data;
  10088. +
  10089. +    if (!info->lock) info->lock = DupLockFromFH(info->fh);
  10090. +    if (info->lock && SameLock(nlock, info->lock) == LOCK_SAME)
  10091. +      {
  10092. +        char name[256];
  10093. +
  10094. +        if (NameFromFH(fh, name, 256))
  10095. +          {
  10096. +        UnLock(nlock);
  10097. +        UnLock(info->lock);
  10098. +        Close(fh);
  10099. +        SetProtection(name, 0);
  10100. +        info->deleted = TRUE;
  10101. +        info->lock = info->fh = 0;
  10102. +        if (DeleteFile(name)) return 0;
  10103. +          }
  10104. +      }
  10105. +    ERROR;
  10106. +      }
  10107. +      }
  10108. +  errno = EINVAL;
  10109. +  return -1;
  10110. +}
  10111. +
  10112. +int _alloc_amigafd(BPTR fh, long protection, long flags)
  10113. +{
  10114. +  struct amigainfo *new = (struct amigainfo *)malloc(sizeof(struct amigainfo));
  10115. +  int fd;
  10116. +
  10117. +  if (!new) { errno = ENOMEM; return -1; }
  10118. +  new->fh = fh;
  10119. +  new->lock = NULL;
  10120. +  new->protection = protection;
  10121. +  new->deleted = FALSE;
  10122. +  new->interactive = IsInteractive(fh);
  10123. +
  10124. +  fd = _alloc_fd(new, flags,
  10125. +         file_select_start, file_select_poll, file_read, file_write,
  10126. +         file_lseek, file_close, file_ioctl);
  10127. +  if (fd < 0) free(new);
  10128. +
  10129. +  return fd;
  10130. +}
  10131. +
  10132. +void _init_unixio(BPTR in, int close_in, BPTR out, int close_out,
  10133. +          BPTR error, int close_error)
  10134. +{
  10135. +  if (_alloc_amigafd(in, -1, FI_READ | (close_in ? 0 : O_NO_CLOSE)) == 0 &&
  10136. +      _alloc_amigafd(out, -1, FI_WRITE | (close_out ? 0 : O_NO_CLOSE)) == 1 &&
  10137. +      _alloc_amigafd(error, -1, FI_WRITE | (close_error ? 0 : O_NO_CLOSE)) == 2)
  10138. +      return;
  10139. +
  10140. +  _fail("Failed to initialise I/O");
  10141. +}
  10142. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/amigaos.h amiga/fsf/emacs18/amiga/unix/src/amigaos.h
  10143. --- baseline/fsf/emacs18/amiga/unix/src/amigaos.h    Wed Dec 31 17:00:00 1969
  10144. +++ amiga/fsf/emacs18/amiga/unix/src/amigaos.h    Sat Sep 28 00:00:00 1996
  10145. @@ -0,0 +1,10 @@
  10146. +#ifndef AMIGAOS_H
  10147. +#define AMIGAOS_H
  10148. +
  10149. +int _alloc_amigafd(BPTR fh, long protection, long flags);
  10150. +
  10151. +void _init_unixio(BPTR in, int close_in, BPTR out, int close_out,
  10152. +          BPTR error, int close_error);
  10153. +int _do_truncate(BPTR fh, off_t length);
  10154. +
  10155. +#endif
  10156. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/amigatime.c amiga/fsf/emacs18/amiga/unix/src/amigatime.c
  10157. --- baseline/fsf/emacs18/amiga/unix/src/amigatime.c    Wed Dec 31 17:00:00 1969
  10158. +++ amiga/fsf/emacs18/amiga/unix/src/amigatime.c    Sat Sep 28 00:00:00 1996
  10159. @@ -0,0 +1,55 @@
  10160. +#include "amiga.h"
  10161. +#include "timeconvert.h"
  10162. +#include <sys/time.h>
  10163. +#include <sys/timeb.h>
  10164. +#include <string.h>
  10165. +
  10166. +extern char *tzname[2];
  10167. +extern int daylight;
  10168. +
  10169. +int gettimeofday(struct timeval *tp, struct timezone *tzp)
  10170. +{
  10171. +  struct timeval now;
  10172. +
  10173. +  chkabort();
  10174. +
  10175. +  _gettime(&now);
  10176. +  if (tp) *tp = now;
  10177. +
  10178. +  if (tzp)
  10179. +    {
  10180. +      int dst;
  10181. +      struct tm *local;
  10182. +
  10183. +      local = localtime(&now.tv_secs);
  10184. +      
  10185. +      tzp->tz_minuteswest = -local->tm_gmtoff / 60;
  10186. +      /* Guess a value for tz_dsttime, based on tzname[1] */
  10187. +      /* These guesses are not very good. */
  10188. +      dst = DST_NONE;
  10189. +      if (!strcmp(tzname[1], "MET DST")) dst = DST_MET;
  10190. +      else if (!strcmp(tzname[1], "WET DST")) dst = DST_WET;
  10191. +      else if (!strcmp(tzname[1], "EET DST")) dst = DST_EET;
  10192. +      else if (!strcmp(tzname[1], "EDT")) dst = DST_USA;
  10193. +      else if (!strcmp(tzname[1], "CDT")) dst = DST_USA;
  10194. +      else if (!strcmp(tzname[1], "MDT")) dst = DST_USA;
  10195. +      else if (!strcmp(tzname[1], "PDT")) dst = DST_USA;
  10196. +      else if (!strcmp(tzname[1], "AKDT")) dst = DST_USA;
  10197. +      tzp->tz_dsttime = dst;
  10198. +    }
  10199. +  return 0;
  10200. +}
  10201. +
  10202. +int ftime(struct timeb *ft)
  10203. +{
  10204. +  struct timeval now;
  10205. +  struct timezone zone;
  10206. +
  10207. +  gettimeofday(&now, &zone);
  10208. +  ft->time = now.tv_sec;
  10209. +  ft->millitm = now.tv_usec;
  10210. +  ft->timezone = zone.tz_minuteswest;
  10211. +  ft->dstflag = daylight;
  10212. +
  10213. +  return 0;
  10214. +}
  10215. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/bcmp.c amiga/fsf/emacs18/amiga/unix/src/bcmp.c
  10216. --- baseline/fsf/emacs18/amiga/unix/src/bcmp.c    Wed Dec 31 17:00:00 1969
  10217. +++ amiga/fsf/emacs18/amiga/unix/src/bcmp.c    Sat Sep 28 00:00:00 1996
  10218. @@ -0,0 +1,9 @@
  10219. +#include "amiga.h"
  10220. +#include <string.h>
  10221. +
  10222. +#undef bcmp
  10223. +
  10224. +int bcmp(char *b1, char *b2, int length)
  10225. +{
  10226. +  return length == 0 ? 0 : memcmp(b2, b1, length);
  10227. +}
  10228. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/bcopy.c amiga/fsf/emacs18/amiga/unix/src/bcopy.c
  10229. --- baseline/fsf/emacs18/amiga/unix/src/bcopy.c    Wed Dec 31 17:00:00 1969
  10230. +++ amiga/fsf/emacs18/amiga/unix/src/bcopy.c    Sat Sep 28 00:00:00 1996
  10231. @@ -0,0 +1,10 @@
  10232. +#include "amiga.h"
  10233. +#include <string.h>
  10234. +
  10235. +#undef bcopy
  10236. +
  10237. +void bcopy(char *b1, char *b2, int length)
  10238. +{
  10239. +  /* Unoptimised version */
  10240. +  memmove(b2, b1, length);
  10241. +}
  10242. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/bzero.c amiga/fsf/emacs18/amiga/unix/src/bzero.c
  10243. --- baseline/fsf/emacs18/amiga/unix/src/bzero.c    Wed Dec 31 17:00:00 1969
  10244. +++ amiga/fsf/emacs18/amiga/unix/src/bzero.c    Sat Sep 28 00:00:00 1996
  10245. @@ -0,0 +1,9 @@
  10246. +#include "amiga.h"
  10247. +#include <string.h>
  10248. +
  10249. +#undef bzero
  10250. +
  10251. +void bzero(char *b, int length)
  10252. +{
  10253. +  memset(b, 0, length);
  10254. +}
  10255. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/chmod.c amiga/fsf/emacs18/amiga/unix/src/chmod.c
  10256. --- baseline/fsf/emacs18/amiga/unix/src/chmod.c    Wed Dec 31 17:00:00 1969
  10257. +++ amiga/fsf/emacs18/amiga/unix/src/chmod.c    Sat Sep 28 00:00:00 1996
  10258. @@ -0,0 +1,8 @@
  10259. +#include "amiga.h"
  10260. +
  10261. +int chmod(const char *name, int mode)
  10262. +{
  10263. +  chkabort();
  10264. +  if (SetProtection(name, _make_protection(mode))) return 0;
  10265. +  ERROR;
  10266. +}
  10267. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/chown.c amiga/fsf/emacs18/amiga/unix/src/chown.c
  10268. --- baseline/fsf/emacs18/amiga/unix/src/chown.c    Wed Dec 31 17:00:00 1969
  10269. +++ amiga/fsf/emacs18/amiga/unix/src/chown.c    Sat Sep 28 00:00:00 1996
  10270. @@ -0,0 +1,4 @@
  10271. +#include "amiga.h"
  10272. +
  10273. +int chown(char *path, int owner, int group) { return 0; }
  10274. +int fchown(int fd, int owner, int group) { return 0; }
  10275. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/close.c amiga/fsf/emacs18/amiga/unix/src/close.c
  10276. --- baseline/fsf/emacs18/amiga/unix/src/close.c    Wed Dec 31 17:00:00 1969
  10277. +++ amiga/fsf/emacs18/amiga/unix/src/close.c    Sat Sep 28 00:00:00 1996
  10278. @@ -0,0 +1,26 @@
  10279. +#include "amiga.h"
  10280. +#include "files.h"
  10281. +#include <fcntl.h>
  10282. +
  10283. +#undef close
  10284. +
  10285. +int __close(int fd)
  10286. +{
  10287. +  struct fileinfo *fi;
  10288. +
  10289. +  chkabort();
  10290. +  if (fi = _find_fd(fd))
  10291. +    {
  10292. +      int err = fi->close(fi->userinfo, fi->flags & O_NO_CLOSE);
  10293. +
  10294. +      _free_fd(fd);
  10295. +      return err;
  10296. +    }
  10297. +  return -1;
  10298. +}
  10299. +
  10300. +int close(int fd)
  10301. +{
  10302. +  return __close(fd);
  10303. +}
  10304. +
  10305. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/creat.c amiga/fsf/emacs18/amiga/unix/src/creat.c
  10306. --- baseline/fsf/emacs18/amiga/unix/src/creat.c    Wed Dec 31 17:00:00 1969
  10307. +++ amiga/fsf/emacs18/amiga/unix/src/creat.c    Sat Sep 28 00:00:00 1996
  10308. @@ -0,0 +1,17 @@
  10309. +#include "amiga.h"
  10310. +#include "files.h"
  10311. +#include <fcntl.h>
  10312. +
  10313. +#undef creat
  10314. +
  10315. +int __creat(const char *file, int prot)
  10316. +{
  10317. +  chkabort();
  10318. +  return open(file, O_WRONLY | O_CREAT | O_TRUNC, prot);
  10319. +}
  10320. +
  10321. +int creat(const char *file, int prot)
  10322. +{
  10323. +  return __creat(file, prot);
  10324. +}
  10325. +
  10326. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/ctime.c amiga/fsf/emacs18/amiga/unix/src/ctime.c
  10327. --- baseline/fsf/emacs18/amiga/unix/src/ctime.c    Wed Dec 31 17:00:00 1969
  10328. +++ amiga/fsf/emacs18/amiga/unix/src/ctime.c    Sat Sep 28 00:00:00 1996
  10329. @@ -0,0 +1,1381 @@
  10330. +/*
  10331. + * Copyright (c) 1987, 1989 Regents of the University of California.
  10332. + * All rights reserved.
  10333. + *
  10334. + * This code is derived from software contributed to Berkeley by
  10335. + * Arthur David Olson of the National Cancer Institute.
  10336. + *
  10337. + * Redistribution and use in source and binary forms, with or without
  10338. + * modification, are permitted provided that the following conditions
  10339. + * are met:
  10340. + * 1. Redistributions of source code must retain the above copyright
  10341. + *    notice, this list of conditions and the following disclaimer.
  10342. + * 2. Redistributions in binary form must reproduce the above copyright
  10343. + *    notice, this list of conditions and the following disclaimer in the
  10344. + *    documentation and/or other materials provided with the distribution.
  10345. + * 3. All advertising materials mentioning features or use of this software
  10346. + *    must display the following acknowledgement:
  10347. + *    This product includes software developed by the University of
  10348. + *    California, Berkeley and its contributors.
  10349. + * 4. Neither the name of the University nor the names of its contributors
  10350. + *    may be used to endorse or promote products derived from this software
  10351. + *    without specific prior written permission.
  10352. + *
  10353. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  10354. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  10355. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  10356. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  10357. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  10358. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  10359. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  10360. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  10361. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  10362. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  10363. + * SUCH DAMAGE.
  10364. + */
  10365. +
  10366. +#if defined(LIBC_SCCS) && !defined(lint)
  10367. +static char sccsid[] = "@(#)ctime.c    5.26 (Berkeley) 2/23/91";
  10368. +#endif /* LIBC_SCCS and not lint */
  10369. +
  10370. +/*
  10371. +** Leap second handling from Bradley White (bww@k.gp.cs.cmu.edu).
  10372. +** POSIX-style TZ environment variable handling from Guy Harris
  10373. +** (guy@auspex.com).
  10374. +*/
  10375. +
  10376. +/*LINTLIBRARY*/
  10377. +
  10378. +#include <sys/param.h>
  10379. +#include <fcntl.h>
  10380. +#include <time.h>
  10381. +#include <tzfile.h>
  10382. +#include <string.h>
  10383. +#include <ctype.h>
  10384. +#include <stdio.h>
  10385. +#include <unistd.h>
  10386. +
  10387. +#ifdef __STDC__
  10388. +#include <stdlib.h>
  10389. +
  10390. +#define P(s)        s
  10391. +#define alloc_size_t    size_t
  10392. +#define qsort_size_t    size_t
  10393. +#define fread_size_t    size_t
  10394. +#define fwrite_size_t    size_t
  10395. +
  10396. +#else /* !defined __STDC__ */
  10397. +
  10398. +#define P(s)        ()
  10399. +
  10400. +typedef char *        genericptr_t;
  10401. +typedef unsigned    alloc_size_t;
  10402. +typedef int        qsort_size_t;
  10403. +typedef int        fread_size_t;
  10404. +typedef int        fwrite_size_t;
  10405. +
  10406. +extern char *    calloc();
  10407. +extern char *    malloc();
  10408. +extern char *    realloc();
  10409. +extern char *    getenv();
  10410. +
  10411. +#endif /* !defined __STDC__ */
  10412. +
  10413. +extern time_t    time();
  10414. +
  10415. +#define ACCESS_MODE    O_RDONLY
  10416. +#define OPEN_MODE    O_RDONLY
  10417. +
  10418. +#ifndef WILDABBR
  10419. +/*
  10420. +** Someone might make incorrect use of a time zone abbreviation:
  10421. +**    1.    They might reference tzname[0] before calling tzset (explicitly
  10422. +**         or implicitly).
  10423. +**    2.    They might reference tzname[1] before calling tzset (explicitly
  10424. +**         or implicitly).
  10425. +**    3.    They might reference tzname[1] after setting to a time zone
  10426. +**        in which Daylight Saving Time is never observed.
  10427. +**    4.    They might reference tzname[0] after setting to a time zone
  10428. +**        in which Standard Time is never observed.
  10429. +**    5.    They might reference tm.TM_ZONE after calling offtime.
  10430. +** What's best to do in the above cases is open to debate;
  10431. +** for now, we just set things up so that in any of the five cases
  10432. +** WILDABBR is used.  Another possibility:  initialize tzname[0] to the
  10433. +** string "tzname[0] used before set", and similarly for the other cases.
  10434. +** And another:  initialize tzname[0] to "ERA", with an explanation in the
  10435. +** manual page of what this "time zone abbreviation" means (doing this so
  10436. +** that tzname[0] has the "normal" length of three characters).
  10437. +*/
  10438. +#define WILDABBR    "   "
  10439. +#endif /* !defined WILDABBR */
  10440. +
  10441. +#ifndef TRUE
  10442. +#define TRUE        1
  10443. +#define FALSE        0
  10444. +#endif /* !defined TRUE */
  10445. +
  10446. +static const char GMT[] = "GMT";
  10447. +
  10448. +struct ttinfo {                /* time type information */
  10449. +    long        tt_gmtoff;    /* GMT offset in seconds */
  10450. +    int        tt_isdst;    /* used to set tm_isdst */
  10451. +    int        tt_abbrind;    /* abbreviation list index */
  10452. +    int        tt_ttisstd;    /* TRUE if transition is std time */
  10453. +};
  10454. +
  10455. +struct lsinfo {                /* leap second information */
  10456. +    time_t        ls_trans;    /* transition time */
  10457. +    long        ls_corr;    /* correction to apply */
  10458. +};
  10459. +
  10460. +struct state {
  10461. +    int        leapcnt;
  10462. +    int        timecnt;
  10463. +    int        typecnt;
  10464. +    int        charcnt;
  10465. +    time_t        ats[TZ_MAX_TIMES];
  10466. +    unsigned char    types[TZ_MAX_TIMES];
  10467. +    struct ttinfo    ttis[TZ_MAX_TYPES];
  10468. +    char        chars[(TZ_MAX_CHARS + 1 > sizeof GMT) ?
  10469. +                TZ_MAX_CHARS + 1 : sizeof GMT];
  10470. +    struct lsinfo    lsis[TZ_MAX_LEAPS];
  10471. +};
  10472. +
  10473. +struct rule {
  10474. +    int        r_type;        /* type of rule--see below */
  10475. +    int        r_day;        /* day number of rule */
  10476. +    int        r_week;        /* week number of rule */
  10477. +    int        r_mon;        /* month number of rule */
  10478. +    long        r_time;        /* transition time of rule */
  10479. +};
  10480. +
  10481. +#define    JULIAN_DAY        0    /* Jn - Julian day */
  10482. +#define    DAY_OF_YEAR        1    /* n - day of year */
  10483. +#define    MONTH_NTH_DAY_OF_WEEK    2    /* Mm.n.d - month, week, day of week */
  10484. +
  10485. +/*
  10486. +** Prototypes for static functions.
  10487. +*/
  10488. +
  10489. +static long        detzcode P((const char * codep));
  10490. +static const char *    getzname P((const char * strp));
  10491. +static const char *    getnum P((const char * strp, int * nump, int min,
  10492. +                int max));
  10493. +static const char *    getsecs P((const char * strp, long * secsp));
  10494. +static const char *    getoffset P((const char * strp, long * offsetp));
  10495. +static const char *    getrule P((const char * strp, struct rule * rulep));
  10496. +static void        gmtload P((struct state * sp));
  10497. +static void        gmtsub P((const time_t * timep, long offset,
  10498. +                struct tm * tmp));
  10499. +static void        localsub P((const time_t * timep, long offset,
  10500. +                struct tm * tmp));
  10501. +static void        normalize P((int * tensptr, int * unitsptr, int base));
  10502. +static void        settzname P((void));
  10503. +static time_t        time1 P((struct tm * tmp, void (* funcp)(),
  10504. +                long offset));
  10505. +static time_t        time2 P((struct tm *tmp, void (* funcp)(),
  10506. +                long offset, int * okayp));
  10507. +static void        timesub P((const time_t * timep, long offset,
  10508. +                const struct state * sp, struct tm * tmp));
  10509. +static int        tmcomp P((const struct tm * atmp,
  10510. +                const struct tm * btmp));
  10511. +static time_t        transtime P((time_t janfirst, int year,
  10512. +                const struct rule * rulep, long offset));
  10513. +static int        tzload P((const char * name, struct state * sp));
  10514. +static int        tzparse P((const char * name, struct state * sp,
  10515. +                int lastditch));
  10516. +
  10517. +#ifdef ALL_STATE
  10518. +static struct state *    lclptr;
  10519. +static struct state *    gmtptr;
  10520. +#endif /* defined ALL_STATE */
  10521. +
  10522. +#ifndef ALL_STATE
  10523. +static struct state    lclmem;
  10524. +static struct state    gmtmem;
  10525. +#define lclptr        (&lclmem)
  10526. +#define gmtptr        (&gmtmem)
  10527. +#endif /* State Farm */
  10528. +
  10529. +static int        lcl_is_set;
  10530. +static int        gmt_is_set;
  10531. +
  10532. +char *            tzname[2] = {
  10533. +    WILDABBR,
  10534. +    WILDABBR
  10535. +};
  10536. +
  10537. +time_t            timezone = 0;
  10538. +int            daylight = 0;
  10539. +
  10540. +#ifdef ALTZONE
  10541. +time_t            altzone = 0;
  10542. +#endif /* defined ALTZONE */
  10543. +
  10544. +static long
  10545. +detzcode(codep)
  10546. +const char * const    codep;
  10547. +{
  10548. +    register long    result;
  10549. +    register int    i;
  10550. +
  10551. +    result = 0;
  10552. +    for (i = 0; i < 4; ++i)
  10553. +        result = (result << 8) | (codep[i] & 0xff);
  10554. +    return result;
  10555. +}
  10556. +
  10557. +static void
  10558. +settzname()
  10559. +{
  10560. +    register const struct state * const    sp = lclptr;
  10561. +    register int                i;
  10562. +
  10563. +    tzname[0] = WILDABBR;
  10564. +    tzname[1] = WILDABBR;
  10565. +    daylight = 0;
  10566. +    timezone = 0;
  10567. +#ifdef ALTZONE
  10568. +    altzone = 0;
  10569. +#endif /* defined ALTZONE */
  10570. +#ifdef ALL_STATE
  10571. +    if (sp == NULL) {
  10572. +        tzname[0] = tzname[1] = GMT;
  10573. +        return;
  10574. +    }
  10575. +#endif /* defined ALL_STATE */
  10576. +    for (i = 0; i < sp->typecnt; ++i) {
  10577. +        register const struct ttinfo * const    ttisp = &sp->ttis[i];
  10578. +
  10579. +        tzname[ttisp->tt_isdst] =
  10580. +            (char *) &sp->chars[ttisp->tt_abbrind];
  10581. +        if (ttisp->tt_isdst)
  10582. +            daylight = 1;
  10583. +        if (i == 0 || !ttisp->tt_isdst)
  10584. +            timezone = -(ttisp->tt_gmtoff);
  10585. +#ifdef ALTZONE
  10586. +        if (i == 0 || ttisp->tt_isdst)
  10587. +            altzone = -(ttisp->tt_gmtoff);
  10588. +#endif /* defined ALTZONE */
  10589. +    }
  10590. +    /*
  10591. +    ** And to get the latest zone names into tzname. . .
  10592. +    */
  10593. +    for (i = 0; i < sp->timecnt; ++i) {
  10594. +        register const struct ttinfo * const    ttisp =
  10595. +                            &sp->ttis[sp->types[i]];
  10596. +
  10597. +        tzname[ttisp->tt_isdst] =
  10598. +            (char *) &sp->chars[ttisp->tt_abbrind];
  10599. +    }
  10600. +}
  10601. +
  10602. +static int
  10603. +tzload(name, sp)
  10604. +register const char *        name;
  10605. +register struct state * const    sp;
  10606. +{
  10607. +    register const char *    p;
  10608. +    register int        i;
  10609. +    register int        fid;
  10610. +
  10611. +    if (name == NULL && (name = TZDEFAULT) == NULL)
  10612. +        return -1;
  10613. +    {
  10614. +        char        fullname[FILENAME_MAX + 1];
  10615. +
  10616. +        if (name[0] == ':')
  10617. +            ++name;
  10618. +        if (!strchr(name, ':')) {
  10619. +            if ((p = TZDIR) == NULL)
  10620. +                return -1;
  10621. +            if ((strlen(p) + strlen(name) + 1) >= sizeof fullname)
  10622. +                return -1;
  10623. +            (void) strcpy(fullname, p);
  10624. +            (void) strcat(fullname, "/");
  10625. +            (void) strcat(fullname, name);
  10626. +            name = fullname;
  10627. +        }
  10628. +        if ((fid = open(name, OPEN_MODE)) == -1)
  10629. +            return -1;
  10630. +    }
  10631. +    {
  10632. +        register const struct tzhead *    tzhp;
  10633. +        char                buf[sizeof *sp + sizeof *tzhp];
  10634. +        int                ttisstdcnt;
  10635. +
  10636. +        i = read(fid, buf, sizeof buf);
  10637. +        if (close(fid) != 0 || i < sizeof *tzhp)
  10638. +            return -1;
  10639. +        tzhp = (struct tzhead *) buf;
  10640. +        ttisstdcnt = (int) detzcode(tzhp->tzh_ttisstdcnt);
  10641. +        sp->leapcnt = (int) detzcode(tzhp->tzh_leapcnt);
  10642. +        sp->timecnt = (int) detzcode(tzhp->tzh_timecnt);
  10643. +        sp->typecnt = (int) detzcode(tzhp->tzh_typecnt);
  10644. +        sp->charcnt = (int) detzcode(tzhp->tzh_charcnt);
  10645. +        if (sp->leapcnt < 0 || sp->leapcnt > TZ_MAX_LEAPS ||
  10646. +            sp->typecnt <= 0 || sp->typecnt > TZ_MAX_TYPES ||
  10647. +            sp->timecnt < 0 || sp->timecnt > TZ_MAX_TIMES ||
  10648. +            sp->charcnt < 0 || sp->charcnt > TZ_MAX_CHARS ||
  10649. +            (ttisstdcnt != sp->typecnt && ttisstdcnt != 0))
  10650. +                return -1;
  10651. +        if (i < sizeof *tzhp +
  10652. +            sp->timecnt * (4 + sizeof (char)) +
  10653. +            sp->typecnt * (4 + 2 * sizeof (char)) +
  10654. +            sp->charcnt * sizeof (char) +
  10655. +            sp->leapcnt * 2 * 4 +
  10656. +            ttisstdcnt * sizeof (char))
  10657. +                return -1;
  10658. +        p = buf + sizeof *tzhp;
  10659. +        for (i = 0; i < sp->timecnt; ++i) {
  10660. +            sp->ats[i] = detzcode(p);
  10661. +            p += 4;
  10662. +        }
  10663. +        for (i = 0; i < sp->timecnt; ++i) {
  10664. +            sp->types[i] = (unsigned char) *p++;
  10665. +            if (sp->types[i] >= sp->typecnt)
  10666. +                return -1;
  10667. +        }
  10668. +        for (i = 0; i < sp->typecnt; ++i) {
  10669. +            register struct ttinfo *    ttisp;
  10670. +
  10671. +            ttisp = &sp->ttis[i];
  10672. +            ttisp->tt_gmtoff = detzcode(p);
  10673. +            p += 4;
  10674. +            ttisp->tt_isdst = (unsigned char) *p++;
  10675. +            if (ttisp->tt_isdst != 0 && ttisp->tt_isdst != 1)
  10676. +                return -1;
  10677. +            ttisp->tt_abbrind = (unsigned char) *p++;
  10678. +            if (ttisp->tt_abbrind < 0 ||
  10679. +                ttisp->tt_abbrind > sp->charcnt)
  10680. +                    return -1;
  10681. +        }
  10682. +        for (i = 0; i < sp->charcnt; ++i)
  10683. +            sp->chars[i] = *p++;
  10684. +        sp->chars[i] = '\0';    /* ensure '\0' at end */
  10685. +        for (i = 0; i < sp->leapcnt; ++i) {
  10686. +            register struct lsinfo *    lsisp;
  10687. +
  10688. +            lsisp = &sp->lsis[i];
  10689. +            lsisp->ls_trans = detzcode(p);
  10690. +            p += 4;
  10691. +            lsisp->ls_corr = detzcode(p);
  10692. +            p += 4;
  10693. +        }
  10694. +        for (i = 0; i < sp->typecnt; ++i) {
  10695. +            register struct ttinfo *    ttisp;
  10696. +
  10697. +            ttisp = &sp->ttis[i];
  10698. +            if (ttisstdcnt == 0)
  10699. +                ttisp->tt_ttisstd = FALSE;
  10700. +            else {
  10701. +                ttisp->tt_ttisstd = *p++;
  10702. +                if (ttisp->tt_ttisstd != TRUE &&
  10703. +                    ttisp->tt_ttisstd != FALSE)
  10704. +                        return -1;
  10705. +            }
  10706. +        }
  10707. +    }
  10708. +    return 0;
  10709. +}
  10710. +
  10711. +static const int    mon_lengths[2][MONSPERYEAR] = {
  10712. +    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
  10713. +    31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  10714. +};
  10715. +
  10716. +static const int    year_lengths[2] = {
  10717. +    DAYSPERNYEAR, DAYSPERLYEAR
  10718. +};
  10719. +
  10720. +/*
  10721. +** Given a pointer into a time zone string, scan until a character that is not
  10722. +** a valid character in a zone name is found.  Return a pointer to that
  10723. +** character.
  10724. +*/
  10725. +
  10726. +static const char *
  10727. +getzname(strp)
  10728. +register const char *    strp;
  10729. +{
  10730. +    register char    c;
  10731. +
  10732. +    while ((c = *strp) != '\0' && !isdigit(c) && c != ',' && c != '-' &&
  10733. +        c != '+')
  10734. +            ++strp;
  10735. +    return strp;
  10736. +}
  10737. +
  10738. +/*
  10739. +** Given a pointer into a time zone string, extract a number from that string.
  10740. +** Check that the number is within a specified range; if it is not, return
  10741. +** NULL.
  10742. +** Otherwise, return a pointer to the first character not part of the number.
  10743. +*/
  10744. +
  10745. +static const char *
  10746. +getnum(strp, nump, min, max)
  10747. +register const char *    strp;
  10748. +int * const        nump;
  10749. +const int        min;
  10750. +const int        max;
  10751. +{
  10752. +    register char    c;
  10753. +    register int    num;
  10754. +
  10755. +    if (strp == NULL || !isdigit(*strp))
  10756. +        return NULL;
  10757. +    num = 0;
  10758. +    while ((c = *strp) != '\0' && isdigit(c)) {
  10759. +        num = num * 10 + (c - '0');
  10760. +        if (num > max)
  10761. +            return NULL;    /* illegal value */
  10762. +        ++strp;
  10763. +    }
  10764. +    if (num < min)
  10765. +        return NULL;        /* illegal value */
  10766. +    *nump = num;
  10767. +    return strp;
  10768. +}
  10769. +
  10770. +/*
  10771. +** Given a pointer into a time zone string, extract a number of seconds,
  10772. +** in hh[:mm[:ss]] form, from the string.
  10773. +** If any error occurs, return NULL.
  10774. +** Otherwise, return a pointer to the first character not part of the number
  10775. +** of seconds.
  10776. +*/
  10777. +
  10778. +static const char *
  10779. +getsecs(strp, secsp)
  10780. +register const char *    strp;
  10781. +long * const        secsp;
  10782. +{
  10783. +    int    num;
  10784. +
  10785. +    strp = getnum(strp, &num, 0, HOURSPERDAY);
  10786. +    if (strp == NULL)
  10787. +        return NULL;
  10788. +    *secsp = num * SECSPERHOUR;
  10789. +    if (*strp == ':') {
  10790. +        ++strp;
  10791. +        strp = getnum(strp, &num, 0, MINSPERHOUR - 1);
  10792. +        if (strp == NULL)
  10793. +            return NULL;
  10794. +        *secsp += num * SECSPERMIN;
  10795. +        if (*strp == ':') {
  10796. +            ++strp;
  10797. +            strp = getnum(strp, &num, 0, SECSPERMIN - 1);
  10798. +            if (strp == NULL)
  10799. +                return NULL;
  10800. +            *secsp += num;
  10801. +        }
  10802. +    }
  10803. +    return strp;
  10804. +}
  10805. +
  10806. +/*
  10807. +** Given a pointer into a time zone string, extract an offset, in
  10808. +** [+-]hh[:mm[:ss]] form, from the string.
  10809. +** If any error occurs, return NULL.
  10810. +** Otherwise, return a pointer to the first character not part of the time.
  10811. +*/
  10812. +
  10813. +static const char *
  10814. +getoffset(strp, offsetp)
  10815. +register const char *    strp;
  10816. +long * const        offsetp;
  10817. +{
  10818. +    register int    neg;
  10819. +
  10820. +    if (*strp == '-') {
  10821. +        neg = 1;
  10822. +        ++strp;
  10823. +    } else if (isdigit(*strp) || *strp++ == '+')
  10824. +        neg = 0;
  10825. +    else    return NULL;        /* illegal offset */
  10826. +    strp = getsecs(strp, offsetp);
  10827. +    if (strp == NULL)
  10828. +        return NULL;        /* illegal time */
  10829. +    if (neg)
  10830. +        *offsetp = -*offsetp;
  10831. +    return strp;
  10832. +}
  10833. +
  10834. +/*
  10835. +** Given a pointer into a time zone string, extract a rule in the form
  10836. +** date[/time].  See POSIX section 8 for the format of "date" and "time".
  10837. +** If a valid rule is not found, return NULL.
  10838. +** Otherwise, return a pointer to the first character not part of the rule.
  10839. +*/
  10840. +
  10841. +static const char *
  10842. +getrule(strp, rulep)
  10843. +const char *            strp;
  10844. +register struct rule * const    rulep;
  10845. +{
  10846. +    if (*strp == 'J') {
  10847. +        /*
  10848. +        ** Julian day.
  10849. +        */
  10850. +        rulep->r_type = JULIAN_DAY;
  10851. +        ++strp;
  10852. +        strp = getnum(strp, &rulep->r_day, 1, DAYSPERNYEAR);
  10853. +    } else if (*strp == 'M') {
  10854. +        /*
  10855. +        ** Month, week, day.
  10856. +        */
  10857. +        rulep->r_type = MONTH_NTH_DAY_OF_WEEK;
  10858. +        ++strp;
  10859. +        strp = getnum(strp, &rulep->r_mon, 1, MONSPERYEAR);
  10860. +        if (strp == NULL)
  10861. +            return NULL;
  10862. +        if (*strp++ != '.')
  10863. +            return NULL;
  10864. +        strp = getnum(strp, &rulep->r_week, 1, 5);
  10865. +        if (strp == NULL)
  10866. +            return NULL;
  10867. +        if (*strp++ != '.')
  10868. +            return NULL;
  10869. +        strp = getnum(strp, &rulep->r_day, 0, DAYSPERWEEK - 1);
  10870. +    } else if (isdigit(*strp)) {
  10871. +        /*
  10872. +        ** Day of year.
  10873. +        */
  10874. +        rulep->r_type = DAY_OF_YEAR;
  10875. +        strp = getnum(strp, &rulep->r_day, 0, DAYSPERLYEAR - 1);
  10876. +    } else    return NULL;        /* invalid format */
  10877. +    if (strp == NULL)
  10878. +        return NULL;
  10879. +    if (*strp == '/') {
  10880. +        /*
  10881. +        ** Time specified.
  10882. +        */
  10883. +        ++strp;
  10884. +        strp = getsecs(strp, &rulep->r_time);
  10885. +    } else    rulep->r_time = 2 * SECSPERHOUR;    /* default = 2:00:00 */
  10886. +    return strp;
  10887. +}
  10888. +
  10889. +/*
  10890. +** Given the Epoch-relative time of January 1, 00:00:00 GMT, in a year, the
  10891. +** year, a rule, and the offset from GMT at the time that rule takes effect,
  10892. +** calculate the Epoch-relative time that rule takes effect.
  10893. +*/
  10894. +
  10895. +static time_t
  10896. +transtime(janfirst, year, rulep, offset)
  10897. +const time_t                janfirst;
  10898. +const int                year;
  10899. +register const struct rule * const    rulep;
  10900. +const long                offset;
  10901. +{
  10902. +    register int    leapyear;
  10903. +    register time_t    value;
  10904. +    register int    i;
  10905. +    int        d, m1, yy0, yy1, yy2, dow;
  10906. +
  10907. +    leapyear = isleap(year);
  10908. +    switch (rulep->r_type) {
  10909. +
  10910. +    case JULIAN_DAY:
  10911. +        /*
  10912. +        ** Jn - Julian day, 1 == January 1, 60 == March 1 even in leap
  10913. +        ** years.
  10914. +        ** In non-leap years, or if the day number is 59 or less, just
  10915. +        ** add SECSPERDAY times the day number-1 to the time of
  10916. +        ** January 1, midnight, to get the day.
  10917. +        */
  10918. +        value = janfirst + (rulep->r_day - 1) * SECSPERDAY;
  10919. +        if (leapyear && rulep->r_day >= 60)
  10920. +            value += SECSPERDAY;
  10921. +        break;
  10922. +
  10923. +    case DAY_OF_YEAR:
  10924. +        /*
  10925. +        ** n - day of year.
  10926. +        ** Just add SECSPERDAY times the day number to the time of
  10927. +        ** January 1, midnight, to get the day.
  10928. +        */
  10929. +        value = janfirst + rulep->r_day * SECSPERDAY;
  10930. +        break;
  10931. +
  10932. +    case MONTH_NTH_DAY_OF_WEEK:
  10933. +        /*
  10934. +        ** Mm.n.d - nth "dth day" of month m.
  10935. +        */
  10936. +        value = janfirst;
  10937. +        for (i = 0; i < rulep->r_mon - 1; ++i)
  10938. +            value += mon_lengths[leapyear][i] * SECSPERDAY;
  10939. +
  10940. +        /*
  10941. +        ** Use Zeller's Congruence to get day-of-week of first day of
  10942. +        ** month.
  10943. +        */
  10944. +        m1 = (rulep->r_mon + 9) % 12 + 1;
  10945. +        yy0 = (rulep->r_mon <= 2) ? (year - 1) : year;
  10946. +        yy1 = yy0 / 100;
  10947. +        yy2 = yy0 % 100;
  10948. +        dow = ((26 * m1 - 2) / 10 +
  10949. +            1 + yy2 + yy2 / 4 + yy1 / 4 - 2 * yy1) % 7;
  10950. +        if (dow < 0)
  10951. +            dow += DAYSPERWEEK;
  10952. +
  10953. +        /*
  10954. +        ** "dow" is the day-of-week of the first day of the month.  Get
  10955. +        ** the day-of-month (zero-origin) of the first "dow" day of the
  10956. +        ** month.
  10957. +        */
  10958. +        d = rulep->r_day - dow;
  10959. +        if (d < 0)
  10960. +            d += DAYSPERWEEK;
  10961. +        for (i = 1; i < rulep->r_week; ++i) {
  10962. +            if (d + DAYSPERWEEK >=
  10963. +                mon_lengths[leapyear][rulep->r_mon - 1])
  10964. +                    break;
  10965. +            d += DAYSPERWEEK;
  10966. +        }
  10967. +
  10968. +        /*
  10969. +        ** "d" is the day-of-month (zero-origin) of the day we want.
  10970. +        */
  10971. +        value += d * SECSPERDAY;
  10972. +        break;
  10973. +    }
  10974. +
  10975. +    /*
  10976. +    ** "value" is the Epoch-relative time of 00:00:00 GMT on the day in
  10977. +    ** question.  To get the Epoch-relative time of the specified local
  10978. +    ** time on that day, add the transition time and the current offset
  10979. +    ** from GMT.
  10980. +    */
  10981. +    return value + rulep->r_time + offset;
  10982. +}
  10983. +
  10984. +/*
  10985. +** Given a POSIX section 8-style TZ string, fill in the rule tables as
  10986. +** appropriate.
  10987. +*/
  10988. +
  10989. +static int
  10990. +tzparse(name, sp, lastditch)
  10991. +const char *            name;
  10992. +register struct state * const    sp;
  10993. +const int            lastditch;
  10994. +{
  10995. +    const char *            stdname;
  10996. +    const char *            dstname;
  10997. +    int                stdlen;
  10998. +    int                dstlen;
  10999. +    long                stdoffset;
  11000. +    long                dstoffset;
  11001. +    register time_t *        atp;
  11002. +    register unsigned char *    typep;
  11003. +    register char *            cp;
  11004. +    register int            load_result;
  11005. +
  11006. +    stdname = name;
  11007. +    if (lastditch) {
  11008. +        stdlen = strlen(name);    /* length of standard zone name */
  11009. +        name += stdlen;
  11010. +        if (stdlen >= sizeof sp->chars)
  11011. +            stdlen = (sizeof sp->chars) - 1;
  11012. +    } else {
  11013. +        name = getzname(name);
  11014. +        stdlen = name - stdname;
  11015. +        if (stdlen < 3)
  11016. +            return -1;
  11017. +    }
  11018. +    if (*name == '\0')
  11019. +        return -1;
  11020. +    else {
  11021. +        name = getoffset(name, &stdoffset);
  11022. +        if (name == NULL)
  11023. +            return -1;
  11024. +    }
  11025. +    load_result = tzload(TZDEFRULES, sp);
  11026. +    if (load_result != 0)
  11027. +        sp->leapcnt = 0;        /* so, we're off a little */
  11028. +    if (*name != '\0') {
  11029. +        dstname = name;
  11030. +        name = getzname(name);
  11031. +        dstlen = name - dstname;    /* length of DST zone name */
  11032. +        if (dstlen < 3)
  11033. +            return -1;
  11034. +        if (*name != '\0' && *name != ',' && *name != ';') {
  11035. +            name = getoffset(name, &dstoffset);
  11036. +            if (name == NULL)
  11037. +                return -1;
  11038. +        } else    dstoffset = stdoffset - SECSPERHOUR;
  11039. +        if (*name == ',' || *name == ';') {
  11040. +            struct rule    start;
  11041. +            struct rule    end;
  11042. +            register int    year;
  11043. +            register time_t    janfirst;
  11044. +            time_t        starttime;
  11045. +            time_t        endtime;
  11046. +
  11047. +            ++name;
  11048. +            if ((name = getrule(name, &start)) == NULL)
  11049. +                return -1;
  11050. +            if (*name++ != ',')
  11051. +                return -1;
  11052. +            if ((name = getrule(name, &end)) == NULL)
  11053. +                return -1;
  11054. +            if (*name != '\0')
  11055. +                return -1;
  11056. +            sp->typecnt = 2;    /* standard time and DST */
  11057. +            /*
  11058. +            ** Two transitions per year, from EPOCH_YEAR to 2037.
  11059. +            */
  11060. +            sp->timecnt = 2 * (2037 - EPOCH_YEAR + 1);
  11061. +            if (sp->timecnt > TZ_MAX_TIMES)
  11062. +                return -1;
  11063. +            sp->ttis[0].tt_gmtoff = -dstoffset;
  11064. +            sp->ttis[0].tt_isdst = 1;
  11065. +            sp->ttis[0].tt_abbrind = stdlen + 1;
  11066. +            sp->ttis[1].tt_gmtoff = -stdoffset;
  11067. +            sp->ttis[1].tt_isdst = 0;
  11068. +            sp->ttis[1].tt_abbrind = 0;
  11069. +            atp = sp->ats;
  11070. +            typep = sp->types;
  11071. +            janfirst = 0;
  11072. +            for (year = EPOCH_YEAR; year <= 2037; ++year) {
  11073. +                starttime = transtime(janfirst, year, &start,
  11074. +                    stdoffset);
  11075. +                endtime = transtime(janfirst, year, &end,
  11076. +                    dstoffset);
  11077. +                if (starttime > endtime) {
  11078. +                    *atp++ = endtime;
  11079. +                    *typep++ = 1;    /* DST ends */
  11080. +                    *atp++ = starttime;
  11081. +                    *typep++ = 0;    /* DST begins */
  11082. +                } else {
  11083. +                    *atp++ = starttime;
  11084. +                    *typep++ = 0;    /* DST begins */
  11085. +                    *atp++ = endtime;
  11086. +                    *typep++ = 1;    /* DST ends */
  11087. +                }
  11088. +                janfirst +=
  11089. +                    year_lengths[isleap(year)] * SECSPERDAY;
  11090. +            }
  11091. +        } else {
  11092. +            int        sawstd;
  11093. +            int        sawdst;
  11094. +            long        stdfix;
  11095. +            long        dstfix;
  11096. +            long        oldfix;
  11097. +            int        isdst;
  11098. +            register int    i;
  11099. +
  11100. +            if (*name != '\0')
  11101. +                return -1;
  11102. +            if (load_result != 0)
  11103. +                return -1;
  11104. +            /*
  11105. +            ** Compute the difference between the real and
  11106. +            ** prototype standard and summer time offsets
  11107. +            ** from GMT, and put the real standard and summer
  11108. +            ** time offsets into the rules in place of the
  11109. +            ** prototype offsets.
  11110. +            */
  11111. +            sawstd = FALSE;
  11112. +            sawdst = FALSE;
  11113. +            stdfix = 0;
  11114. +            dstfix = 0;
  11115. +            for (i = 0; i < sp->typecnt; ++i) {
  11116. +                if (sp->ttis[i].tt_isdst) {
  11117. +                    oldfix = dstfix;
  11118. +                    dstfix =
  11119. +                        sp->ttis[i].tt_gmtoff + dstoffset;
  11120. +                    if (sawdst && (oldfix != dstfix))
  11121. +                        return -1;
  11122. +                    sp->ttis[i].tt_gmtoff = -dstoffset;
  11123. +                    sp->ttis[i].tt_abbrind = stdlen + 1;
  11124. +                    sawdst = TRUE;
  11125. +                } else {
  11126. +                    oldfix = stdfix;
  11127. +                    stdfix =
  11128. +                        sp->ttis[i].tt_gmtoff + stdoffset;
  11129. +                    if (sawstd && (oldfix != stdfix))
  11130. +                        return -1;
  11131. +                    sp->ttis[i].tt_gmtoff = -stdoffset;
  11132. +                    sp->ttis[i].tt_abbrind = 0;
  11133. +                    sawstd = TRUE;
  11134. +                }
  11135. +            }
  11136. +            /*
  11137. +            ** Make sure we have both standard and summer time.
  11138. +            */
  11139. +            if (!sawdst || !sawstd)
  11140. +                return -1;
  11141. +            /*
  11142. +            ** Now correct the transition times by shifting
  11143. +            ** them by the difference between the real and
  11144. +            ** prototype offsets.  Note that this difference
  11145. +            ** can be different in standard and summer time;
  11146. +            ** the prototype probably has a 1-hour difference
  11147. +            ** between standard and summer time, but a different
  11148. +            ** difference can be specified in TZ.
  11149. +            */
  11150. +            isdst = FALSE;    /* we start in standard time */
  11151. +            for (i = 0; i < sp->timecnt; ++i) {
  11152. +                register const struct ttinfo *    ttisp;
  11153. +
  11154. +                /*
  11155. +                ** If summer time is in effect, and the
  11156. +                ** transition time was not specified as
  11157. +                ** standard time, add the summer time
  11158. +                ** offset to the transition time;
  11159. +                ** otherwise, add the standard time offset
  11160. +                ** to the transition time.
  11161. +                */
  11162. +                ttisp = &sp->ttis[sp->types[i]];
  11163. +                sp->ats[i] +=
  11164. +                    (isdst && !ttisp->tt_ttisstd) ?
  11165. +                        dstfix : stdfix;
  11166. +                isdst = ttisp->tt_isdst;
  11167. +            }
  11168. +        }
  11169. +    } else {
  11170. +        dstlen = 0;
  11171. +        sp->typecnt = 1;        /* only standard time */
  11172. +        sp->timecnt = 0;
  11173. +        sp->ttis[0].tt_gmtoff = -stdoffset;
  11174. +        sp->ttis[0].tt_isdst = 0;
  11175. +        sp->ttis[0].tt_abbrind = 0;
  11176. +    }
  11177. +    sp->charcnt = stdlen + 1;
  11178. +    if (dstlen != 0)
  11179. +        sp->charcnt += dstlen + 1;
  11180. +    if (sp->charcnt > sizeof sp->chars)
  11181. +        return -1;
  11182. +    cp = sp->chars;
  11183. +    (void) strncpy(cp, stdname, stdlen);
  11184. +    cp += stdlen;
  11185. +    *cp++ = '\0';
  11186. +    if (dstlen != 0) {
  11187. +        (void) strncpy(cp, dstname, dstlen);
  11188. +        *(cp + dstlen) = '\0';
  11189. +    }
  11190. +    return 0;
  11191. +}
  11192. +
  11193. +static void
  11194. +gmtload(sp)
  11195. +struct state * const    sp;
  11196. +{
  11197. +    if (tzload(GMT, sp) != 0)
  11198. +        (void) tzparse(GMT, sp, TRUE);
  11199. +}
  11200. +
  11201. +void
  11202. +tzset()
  11203. +{
  11204. +    register const char *    name;
  11205. +    void tzsetwall();
  11206. +
  11207. +    name = getenv("UNIXTZ");
  11208. +    if (name == NULL) {
  11209. +        tzsetwall();
  11210. +        return;
  11211. +    }
  11212. +    lcl_is_set = TRUE;
  11213. +#ifdef ALL_STATE
  11214. +    if (lclptr == NULL) {
  11215. +        lclptr = (struct state *) malloc(sizeof *lclptr);
  11216. +        if (lclptr == NULL) {
  11217. +            settzname();    /* all we can do */
  11218. +            return;
  11219. +        }
  11220. +    }
  11221. +#endif /* defined ALL_STATE */
  11222. +    if (*name == '\0') {
  11223. +        /*
  11224. +        ** User wants it fast rather than right.
  11225. +        */
  11226. +        lclptr->leapcnt = 0;        /* so, we're off a little */
  11227. +        lclptr->timecnt = 0;
  11228. +        lclptr->ttis[0].tt_gmtoff = 0;
  11229. +        lclptr->ttis[0].tt_abbrind = 0;
  11230. +        (void) strcpy(lclptr->chars, GMT);
  11231. +    } else if (tzload(name, lclptr) != 0)
  11232. +        if (name[0] == ':' || tzparse(name, lclptr, FALSE) != 0)
  11233. +            (void) gmtload(lclptr);
  11234. +    settzname();
  11235. +}
  11236. +
  11237. +void
  11238. +tzsetwall()
  11239. +{
  11240. +    lcl_is_set = TRUE;
  11241. +#ifdef ALL_STATE
  11242. +    if (lclptr == NULL) {
  11243. +        lclptr = (struct state *) malloc(sizeof *lclptr);
  11244. +        if (lclptr == NULL) {
  11245. +            settzname();    /* all we can do */
  11246. +            return;
  11247. +        }
  11248. +    }
  11249. +#endif /* defined ALL_STATE */
  11250. +    if (tzload((char *) NULL, lclptr) != 0)
  11251. +        gmtload(lclptr);
  11252. +    settzname();
  11253. +}
  11254. +
  11255. +/*
  11256. +** The easy way to behave "as if no library function calls" localtime
  11257. +** is to not call it--so we drop its guts into "localsub", which can be
  11258. +** freely called.  (And no, the PANS doesn't require the above behavior--
  11259. +** but it *is* desirable.)
  11260. +**
  11261. +** The unused offset argument is for the benefit of mktime variants.
  11262. +*/
  11263. +
  11264. +/*ARGSUSED*/
  11265. +static void
  11266. +localsub(timep, offset, tmp)
  11267. +const time_t * const    timep;
  11268. +const long        offset;
  11269. +struct tm * const    tmp;
  11270. +{
  11271. +    register struct state *    sp;
  11272. +    register const struct ttinfo *    ttisp;
  11273. +    register int            i;
  11274. +    const time_t            t = *timep;
  11275. +
  11276. +    if (!lcl_is_set)
  11277. +        tzset();
  11278. +    sp = lclptr;
  11279. +#ifdef ALL_STATE
  11280. +    if (sp == NULL) {
  11281. +        gmtsub(timep, offset, tmp);
  11282. +        return;
  11283. +    }
  11284. +#endif /* defined ALL_STATE */
  11285. +    if (sp->timecnt == 0 || t < sp->ats[0]) {
  11286. +        i = 0;
  11287. +        while (sp->ttis[i].tt_isdst)
  11288. +            if (++i >= sp->typecnt) {
  11289. +                i = 0;
  11290. +                break;
  11291. +            }
  11292. +    } else {
  11293. +        for (i = 1; i < sp->timecnt; ++i)
  11294. +            if (t < sp->ats[i])
  11295. +                break;
  11296. +        i = sp->types[i - 1];
  11297. +    }
  11298. +    ttisp = &sp->ttis[i];
  11299. +    /*
  11300. +    ** To get (wrong) behavior that's compatible with System V Release 2.0
  11301. +    ** you'd replace the statement below with
  11302. +    **    t += ttisp->tt_gmtoff;
  11303. +    **    timesub(&t, 0L, sp, tmp);
  11304. +    */
  11305. +    timesub(&t, ttisp->tt_gmtoff, sp, tmp);
  11306. +    tmp->tm_isdst = ttisp->tt_isdst;
  11307. +    tzname[tmp->tm_isdst] = (char *) &sp->chars[ttisp->tt_abbrind];
  11308. +    tmp->tm_zone = &sp->chars[ttisp->tt_abbrind];
  11309. +}
  11310. +
  11311. +struct tm *
  11312. +localtime(timep)
  11313. +const time_t * const    timep;
  11314. +{
  11315. +    static struct tm    tm;
  11316. +
  11317. +    localsub(timep, 0L, &tm);
  11318. +    return &tm;
  11319. +}
  11320. +
  11321. +/*
  11322. +** gmtsub is to gmtime as localsub is to localtime.
  11323. +*/
  11324. +
  11325. +static void
  11326. +gmtsub(timep, offset, tmp)
  11327. +const time_t * const    timep;
  11328. +const long        offset;
  11329. +struct tm * const    tmp;
  11330. +{
  11331. +    if (!gmt_is_set) {
  11332. +        gmt_is_set = TRUE;
  11333. +#ifdef ALL_STATE
  11334. +        gmtptr = (struct state *) malloc(sizeof *gmtptr);
  11335. +        if (gmtptr != NULL)
  11336. +#endif /* defined ALL_STATE */
  11337. +            gmtload(gmtptr);
  11338. +    }
  11339. +    timesub(timep, offset, gmtptr, tmp);
  11340. +    /*
  11341. +    ** Could get fancy here and deliver something such as
  11342. +    ** "GMT+xxxx" or "GMT-xxxx" if offset is non-zero,
  11343. +    ** but this is no time for a treasure hunt.
  11344. +    */
  11345. +    if (offset != 0)
  11346. +        tmp->tm_zone = WILDABBR;
  11347. +    else {
  11348. +#ifdef ALL_STATE
  11349. +        if (gmtptr == NULL)
  11350. +            tmp->TM_ZONE = GMT;
  11351. +        else    tmp->TM_ZONE = gmtptr->chars;
  11352. +#endif /* defined ALL_STATE */
  11353. +#ifndef ALL_STATE
  11354. +        tmp->tm_zone = gmtptr->chars;
  11355. +#endif /* State Farm */
  11356. +    }
  11357. +}
  11358. +
  11359. +struct tm *
  11360. +gmtime(timep)
  11361. +const time_t * const    timep;
  11362. +{
  11363. +    static struct tm    tm;
  11364. +
  11365. +    gmtsub(timep, 0L, &tm);
  11366. +    return &tm;
  11367. +}
  11368. +
  11369. +static void
  11370. +timesub(timep, offset, sp, tmp)
  11371. +const time_t * const            timep;
  11372. +const long                offset;
  11373. +register const struct state * const    sp;
  11374. +register struct tm * const        tmp;
  11375. +{
  11376. +    register const struct lsinfo *    lp;
  11377. +    register long            days;
  11378. +    register long            rem;
  11379. +    register int            y;
  11380. +    register int            yleap;
  11381. +    register const int *        ip;
  11382. +    register long            corr;
  11383. +    register int            hit;
  11384. +    register int            i;
  11385. +
  11386. +    corr = 0;
  11387. +    hit = FALSE;
  11388. +#ifdef ALL_STATE
  11389. +    i = (sp == NULL) ? 0 : sp->leapcnt;
  11390. +#endif /* defined ALL_STATE */
  11391. +#ifndef ALL_STATE
  11392. +    i = sp->leapcnt;
  11393. +#endif /* State Farm */
  11394. +    while (--i >= 0) {
  11395. +        lp = &sp->lsis[i];
  11396. +        if (*timep >= lp->ls_trans) {
  11397. +            if (*timep == lp->ls_trans)
  11398. +                hit = ((i == 0 && lp->ls_corr > 0) ||
  11399. +                    lp->ls_corr > sp->lsis[i - 1].ls_corr);
  11400. +            corr = lp->ls_corr;
  11401. +            break;
  11402. +        }
  11403. +    }
  11404. +    days = *timep / SECSPERDAY;
  11405. +    rem = *timep % SECSPERDAY;
  11406. +#ifdef mc68k
  11407. +    if (*timep == 0x80000000) {
  11408. +        /*
  11409. +        ** A 3B1 muffs the division on the most negative number.
  11410. +        */
  11411. +        days = -24855;
  11412. +        rem = -11648;
  11413. +    }
  11414. +#endif /* mc68k */
  11415. +    rem += (offset - corr);
  11416. +    while (rem < 0) {
  11417. +        rem += SECSPERDAY;
  11418. +        --days;
  11419. +    }
  11420. +    while (rem >= SECSPERDAY) {
  11421. +        rem -= SECSPERDAY;
  11422. +        ++days;
  11423. +    }
  11424. +    tmp->tm_hour = (int) (rem / SECSPERHOUR);
  11425. +    rem = rem % SECSPERHOUR;
  11426. +    tmp->tm_min = (int) (rem / SECSPERMIN);
  11427. +    tmp->tm_sec = (int) (rem % SECSPERMIN);
  11428. +    if (hit)
  11429. +        /*
  11430. +        ** A positive leap second requires a special
  11431. +        ** representation.  This uses "... ??:59:60".
  11432. +        */
  11433. +        ++(tmp->tm_sec);
  11434. +    tmp->tm_wday = (int) ((EPOCH_WDAY + days) % DAYSPERWEEK);
  11435. +    if (tmp->tm_wday < 0)
  11436. +        tmp->tm_wday += DAYSPERWEEK;
  11437. +    y = EPOCH_YEAR;
  11438. +    if (days >= 0)
  11439. +        for ( ; ; ) {
  11440. +            yleap = isleap(y);
  11441. +            if (days < (long) year_lengths[yleap])
  11442. +                break;
  11443. +            ++y;
  11444. +            days = days - (long) year_lengths[yleap];
  11445. +        }
  11446. +    else do {
  11447. +        --y;
  11448. +        yleap = isleap(y);
  11449. +        days = days + (long) year_lengths[yleap];
  11450. +    } while (days < 0);
  11451. +    tmp->tm_year = y - TM_YEAR_BASE;
  11452. +    tmp->tm_yday = (int) days;
  11453. +    ip = mon_lengths[yleap];
  11454. +    for (tmp->tm_mon = 0; days >= (long) ip[tmp->tm_mon]; ++(tmp->tm_mon))
  11455. +        days = days - (long) ip[tmp->tm_mon];
  11456. +    tmp->tm_mday = (int) (days + 1);
  11457. +    tmp->tm_isdst = 0;
  11458. +    tmp->tm_gmtoff = offset;
  11459. +}
  11460. +
  11461. +/*
  11462. +** A la X3J11
  11463. +*/
  11464. +
  11465. +char *
  11466. +asctime(timeptr)
  11467. +register const struct tm *    timeptr;
  11468. +{
  11469. +    static const char    wday_name[DAYSPERWEEK][3] = {
  11470. +        "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
  11471. +    };
  11472. +    static const char    mon_name[MONSPERYEAR][3] = {
  11473. +        "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  11474. +        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
  11475. +    };
  11476. +    static char    result[26];
  11477. +
  11478. +    (void) sprintf(result, "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %d\n",
  11479. +        wday_name[timeptr->tm_wday],
  11480. +        mon_name[timeptr->tm_mon],
  11481. +        timeptr->tm_mday, timeptr->tm_hour,
  11482. +        timeptr->tm_min, timeptr->tm_sec,
  11483. +        TM_YEAR_BASE + timeptr->tm_year);
  11484. +    return result;
  11485. +}
  11486. +
  11487. +char *
  11488. +ctime(timep)
  11489. +const time_t * const    timep;
  11490. +{
  11491. +    return asctime(localtime(timep));
  11492. +}
  11493. +
  11494. +/*
  11495. +** Adapted from code provided by Robert Elz, who writes:
  11496. +**    The "best" way to do mktime I think is based on an idea of Bob
  11497. +**    Kridle's (so its said...) from a long time ago. (mtxinu!kridle now).
  11498. +**    It does a binary search of the time_t space.  Since time_t's are
  11499. +**    just 32 bits, its a max of 32 iterations (even at 64 bits it
  11500. +**    would still be very reasonable).
  11501. +*/
  11502. +
  11503. +#ifndef WRONG
  11504. +#define WRONG    (-1)
  11505. +#endif /* !defined WRONG */
  11506. +
  11507. +static void
  11508. +normalize(tensptr, unitsptr, base)
  11509. +int * const    tensptr;
  11510. +int * const    unitsptr;
  11511. +const int    base;
  11512. +{
  11513. +    if (*unitsptr >= base) {
  11514. +        *tensptr += *unitsptr / base;
  11515. +        *unitsptr %= base;
  11516. +    } else if (*unitsptr < 0) {
  11517. +        --*tensptr;
  11518. +        *unitsptr += base;
  11519. +        if (*unitsptr < 0) {
  11520. +            *tensptr -= 1 + (-*unitsptr) / base;
  11521. +            *unitsptr = base - (-*unitsptr) % base;
  11522. +        }
  11523. +    }
  11524. +}
  11525. +
  11526. +static int
  11527. +tmcomp(atmp, btmp)
  11528. +register const struct tm * const atmp;
  11529. +register const struct tm * const btmp;
  11530. +{
  11531. +    register int    result;
  11532. +
  11533. +    if ((result = (atmp->tm_year - btmp->tm_year)) == 0 &&
  11534. +        (result = (atmp->tm_mon - btmp->tm_mon)) == 0 &&
  11535. +        (result = (atmp->tm_mday - btmp->tm_mday)) == 0 &&
  11536. +        (result = (atmp->tm_hour - btmp->tm_hour)) == 0 &&
  11537. +        (result = (atmp->tm_min - btmp->tm_min)) == 0)
  11538. +            result = atmp->tm_sec - btmp->tm_sec;
  11539. +    return result;
  11540. +}
  11541. +
  11542. +static time_t
  11543. +time2(tmp, funcp, offset, okayp)
  11544. +struct tm * const    tmp;
  11545. +void (* const        funcp)();
  11546. +const long        offset;
  11547. +int * const        okayp;
  11548. +{
  11549. +    register const struct state *    sp;
  11550. +    register int            dir;
  11551. +    register int            bits;
  11552. +    register int            i, j ;
  11553. +    register int            saved_seconds;
  11554. +    time_t                newt;
  11555. +    time_t                t;
  11556. +    struct tm            yourtm, mytm;
  11557. +
  11558. +    *okayp = FALSE;
  11559. +    yourtm = *tmp;
  11560. +    if (yourtm.tm_sec >= SECSPERMIN + 2 || yourtm.tm_sec < 0)
  11561. +        normalize(&yourtm.tm_min, &yourtm.tm_sec, SECSPERMIN);
  11562. +    normalize(&yourtm.tm_hour, &yourtm.tm_min, MINSPERHOUR);
  11563. +    normalize(&yourtm.tm_mday, &yourtm.tm_hour, HOURSPERDAY);
  11564. +    normalize(&yourtm.tm_year, &yourtm.tm_mon, MONSPERYEAR);
  11565. +    while (yourtm.tm_mday <= 0) {
  11566. +        --yourtm.tm_year;
  11567. +        yourtm.tm_mday +=
  11568. +            year_lengths[isleap(yourtm.tm_year + TM_YEAR_BASE)];
  11569. +    }
  11570. +    for ( ; ; ) {
  11571. +        i = mon_lengths[isleap(yourtm.tm_year +
  11572. +            TM_YEAR_BASE)][yourtm.tm_mon];
  11573. +        if (yourtm.tm_mday <= i)
  11574. +            break;
  11575. +        yourtm.tm_mday -= i;
  11576. +        if (++yourtm.tm_mon >= MONSPERYEAR) {
  11577. +            yourtm.tm_mon = 0;
  11578. +            ++yourtm.tm_year;
  11579. +        }
  11580. +    }
  11581. +    saved_seconds = yourtm.tm_sec;
  11582. +    yourtm.tm_sec = 0;
  11583. +    /*
  11584. +    ** Calculate the number of magnitude bits in a time_t
  11585. +    ** (this works regardless of whether time_t is
  11586. +    ** signed or unsigned, though lint complains if unsigned).
  11587. +    */
  11588. +    for (bits = 0, t = 1; t > 0; ++bits, t <<= 1)
  11589. +        ;
  11590. +    /*
  11591. +    ** If time_t is signed, then 0 is the median value,
  11592. +    ** if time_t is unsigned, then 1 << bits is median.
  11593. +    */
  11594. +    t = (t < 0) ? 0 : ((time_t) 1 << bits);
  11595. +    for ( ; ; ) {
  11596. +        (*funcp)(&t, offset, &mytm);
  11597. +        dir = tmcomp(&mytm, &yourtm);
  11598. +        if (dir != 0) {
  11599. +            if (bits-- < 0)
  11600. +                return WRONG;
  11601. +            if (bits < 0)
  11602. +                --t;
  11603. +            else if (dir > 0)
  11604. +                t -= (time_t) 1 << bits;
  11605. +            else    t += (time_t) 1 << bits;
  11606. +            continue;
  11607. +        }
  11608. +        if (yourtm.tm_isdst < 0 || mytm.tm_isdst == yourtm.tm_isdst)
  11609. +            break;
  11610. +        /*
  11611. +        ** Right time, wrong type.
  11612. +        ** Hunt for right time, right type.
  11613. +        ** It's okay to guess wrong since the guess
  11614. +        ** gets checked.
  11615. +        */
  11616. +        sp = (const struct state *)
  11617. +            ((funcp == localsub) ? lclptr : gmtptr);
  11618. +#ifdef ALL_STATE
  11619. +        if (sp == NULL)
  11620. +            return WRONG;
  11621. +#endif /* defined ALL_STATE */
  11622. +        for (i = 0; i < sp->typecnt; ++i) {
  11623. +            if (sp->ttis[i].tt_isdst != yourtm.tm_isdst)
  11624. +                continue;
  11625. +            for (j = 0; j < sp->typecnt; ++j) {
  11626. +                if (sp->ttis[j].tt_isdst == yourtm.tm_isdst)
  11627. +                    continue;
  11628. +                newt = t + sp->ttis[j].tt_gmtoff -
  11629. +                    sp->ttis[i].tt_gmtoff;
  11630. +                (*funcp)(&newt, offset, &mytm);
  11631. +                if (tmcomp(&mytm, &yourtm) != 0)
  11632. +                    continue;
  11633. +                if (mytm.tm_isdst != yourtm.tm_isdst)
  11634. +                    continue;
  11635. +                /*
  11636. +                ** We have a match.
  11637. +                */
  11638. +                t = newt;
  11639. +                goto label;
  11640. +            }
  11641. +        }
  11642. +        return WRONG;
  11643. +    }
  11644. +label:
  11645. +    t += saved_seconds;
  11646. +    (*funcp)(&t, offset, tmp);
  11647. +    *okayp = TRUE;
  11648. +    return t;
  11649. +}
  11650. +
  11651. +static time_t
  11652. +time1(tmp, funcp, offset)
  11653. +struct tm * const    tmp;
  11654. +void (* const        funcp)();
  11655. +const long        offset;
  11656. +{
  11657. +    register time_t            t;
  11658. +    register const struct state *    sp;
  11659. +    register int            samei, otheri;
  11660. +    int                okay;
  11661. +
  11662. +    if (tmp->tm_isdst > 1)
  11663. +        tmp->tm_isdst = 1;
  11664. +    t = time2(tmp, funcp, offset, &okay);
  11665. +    if (okay || tmp->tm_isdst < 0)
  11666. +        return t;
  11667. +    /*
  11668. +    ** We're supposed to assume that somebody took a time of one type
  11669. +    ** and did some math on it that yielded a "struct tm" that's bad.
  11670. +    ** We try to divine the type they started from and adjust to the
  11671. +    ** type they need.
  11672. +    */
  11673. +    sp = (const struct state *) ((funcp == localsub) ? lclptr : gmtptr);
  11674. +#ifdef ALL_STATE
  11675. +    if (sp == NULL)
  11676. +        return WRONG;
  11677. +#endif /* defined ALL_STATE */
  11678. +    for (samei = 0; samei < sp->typecnt; ++samei) {
  11679. +        if (sp->ttis[samei].tt_isdst != tmp->tm_isdst)
  11680. +            continue;
  11681. +        for (otheri = 0; otheri < sp->typecnt; ++otheri) {
  11682. +            if (sp->ttis[otheri].tt_isdst == tmp->tm_isdst)
  11683. +                continue;
  11684. +            tmp->tm_sec += sp->ttis[otheri].tt_gmtoff -
  11685. +                    sp->ttis[samei].tt_gmtoff;
  11686. +            tmp->tm_isdst = !tmp->tm_isdst;
  11687. +            t = time2(tmp, funcp, offset, &okay);
  11688. +            if (okay)
  11689. +                return t;
  11690. +            tmp->tm_sec -= sp->ttis[otheri].tt_gmtoff -
  11691. +                    sp->ttis[samei].tt_gmtoff;
  11692. +            tmp->tm_isdst = !tmp->tm_isdst;
  11693. +        }
  11694. +    }
  11695. +    return WRONG;
  11696. +}
  11697. +
  11698. +time_t
  11699. +mktime(tmp)
  11700. +struct tm * const    tmp;
  11701. +{
  11702. +    return time1(tmp, localsub, 0L);
  11703. +}
  11704. +
  11705. +/* Call tzset() if necessary */
  11706. +void _tzset(void)
  11707. +{
  11708. +  if (!lcl_is_set) tzset();
  11709. +}
  11710. +
  11711. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/devices.c amiga/fsf/emacs18/amiga/unix/src/devices.c
  11712. --- baseline/fsf/emacs18/amiga/unix/src/devices.c    Wed Dec 31 17:00:00 1969
  11713. +++ amiga/fsf/emacs18/amiga/unix/src/devices.c    Sat Sep 28 00:00:00 1996
  11714. @@ -0,0 +1,33 @@
  11715. +#include "amiga.h"
  11716. +#include "devices.h"
  11717. +
  11718. +struct IORequest *_device_open(char *name, ULONG unit, ULONG flags,
  11719. +                   APTR data, ULONG data_len, int req_size)
  11720. +{
  11721. +    struct MsgPort *port;
  11722. +    struct IORequest *ioreq;
  11723. +
  11724. +    if ((port = CreateMsgPort()) && (ioreq = CreateIORequest(port, req_size)))
  11725. +    {
  11726. +    if (data)
  11727. +    {
  11728. +        struct IOStdReq *io2 = (struct IOStdReq *)ioreq;
  11729. +        io2->io_Data = data;
  11730. +        io2->io_Length = data_len;
  11731. +    }
  11732. +    if (OpenDevice(name, unit, ioreq, flags) == 0) return ioreq;
  11733. +    }
  11734. +    if (ioreq) DeleteIORequest(ioreq);
  11735. +    if (port) DeletePort(port);
  11736. +    return 0;
  11737. +}
  11738. +
  11739. +void _device_close(struct IORequest *ioreq)
  11740. +{
  11741. +    if (ioreq)
  11742. +    {
  11743. +    CloseDevice(ioreq);
  11744. +    DeletePort(ioreq->io_Message.mn_ReplyPort);
  11745. +    DeleteIORequest(ioreq);
  11746. +    }
  11747. +}
  11748. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/dir.c amiga/fsf/emacs18/amiga/unix/src/dir.c
  11749. --- baseline/fsf/emacs18/amiga/unix/src/dir.c    Wed Dec 31 17:00:00 1969
  11750. +++ amiga/fsf/emacs18/amiga/unix/src/dir.c    Sat Sep 28 00:00:00 1996
  11751. @@ -0,0 +1,177 @@
  11752. +#include "amiga.h"
  11753. +#include "dir_data.h"
  11754. +#include <string.h>
  11755. +
  11756. +/* opendir/readdir/etc ... emulation w/ stat support hack */
  11757. +
  11758. +static void free_entries(iDIR *info)
  11759. +{
  11760. +  struct idirent *scan = info->files;
  11761. +  
  11762. +  while (scan)
  11763. +    {
  11764. +      struct idirent *next = scan->next;
  11765. +      
  11766. +      free(scan);
  11767. +      scan = next;
  11768. +    }
  11769. +}
  11770. +
  11771. +static int gobble_dir(DIR *dir)
  11772. +{
  11773. +  iDIR *info = (iDIR *)dir->dd_buf;
  11774. +  long ioerr;
  11775. +  struct idirent **last = &info->files;
  11776. +  struct FileLock *dirlock;
  11777. +  
  11778. +  free_entries(info);
  11779. +  last_dir = 0;
  11780. +  info->files = 0;
  11781. +  dir->dd_loc = 0;
  11782. +  /* Find a value for st_dev of stat() calls */
  11783. +  dirlock = BADDR(dir->dd_fd);
  11784. +  info->task = dirlock->fl_Task;
  11785. +  while (ExNext(dir->dd_fd, &info->fib))
  11786. +    {
  11787. +      u_short namlen = strlen(info->fib.fib_FileName);
  11788. +      u_short reclen = namlen + 1 + offsetof(struct idirent, entry.d_name);
  11789. +      struct idirent *newentry = (struct idirent *)malloc(reclen);
  11790. +      struct dirent *entry;
  11791. +      
  11792. +      if (!newentry)
  11793. +    {
  11794. +      errno = ENOMEM;
  11795. +      return 0;
  11796. +    }
  11797. +      newentry->next = 0;
  11798. +      *last = newentry;
  11799. +      last = &newentry->next;
  11800. +      
  11801. +      newentry->numblocks = info->fib.fib_NumBlocks;
  11802. +      newentry->size = info->fib.fib_Size;
  11803. +      newentry->date = info->fib.fib_Date;
  11804. +      newentry->type = info->fib.fib_DirEntryType;
  11805. +      newentry->protection = info->fib.fib_Protection;
  11806. +      
  11807. +      entry = &newentry->entry;
  11808. +      entry->d_reclen = reclen;
  11809. +      entry->d_namlen = namlen;
  11810. +      entry->d_off = dir->dd_loc++;
  11811. +      strcpy(entry->d_name, info->fib.fib_FileName);
  11812. +      entry->d_ino = info->fib.fib_DiskKey;
  11813. +    }
  11814. +  info->pos = info->files;
  11815. +  dir->dd_loc = 0;
  11816. +  ioerr = IoErr();
  11817. +  if (ioerr == ERROR_NO_MORE_ENTRIES) return 1;
  11818. +  
  11819. +  errno = convert_oserr(ioerr);
  11820. +  return 0;
  11821. +}
  11822. +
  11823. +DIR *opendir(char *dirname)
  11824. +{
  11825. +  DIR *new = (DIR *)malloc(sizeof *new);
  11826. +  iDIR *info = (iDIR *)malloc(sizeof *info);
  11827. +  char *dircopy = malloc(strlen(dirname) + 1);
  11828. +
  11829. +  chkabort();
  11830. +  if (new && dircopy && info)
  11831. +    {
  11832. +      new->dd_buf = (char *)info;
  11833. +      new->dd_size = sizeof *info;
  11834. +      
  11835. +      info->files = info->pos = 0;
  11836. +      info->seeked = 0;
  11837. +      info->dirname = dircopy;
  11838. +      strcpy(dircopy, dirname);
  11839. +      info->cdir = _get_cd();
  11840. +      
  11841. +      if ((new->dd_fd = Lock(dirname, ACCESS_READ)) &&
  11842. +      Examine(new->dd_fd, &info->fib))
  11843. +    {
  11844. +      if (gobble_dir(new)) return new;
  11845. +    }
  11846. +      else errno = convert_oserr(IoErr());
  11847. +      closedir(new);
  11848. +      return 0;
  11849. +    }
  11850. +  
  11851. +  errno = ENOMEM;
  11852. +  if (new) free(new);
  11853. +  if (dircopy) free(dircopy);
  11854. +  if (info) free(info);
  11855. +  
  11856. +  return 0;
  11857. +}
  11858. +
  11859. +void closedir(DIR *dir)
  11860. +{
  11861. +  iDIR *info = (iDIR *)dir->dd_buf;
  11862. +  
  11863. +  chkabort();
  11864. +  last_dir = 0;
  11865. +  free_entries(info);
  11866. +  free(info->dirname);
  11867. +  if (dir->dd_fd) UnLock(dir->dd_fd);
  11868. +  free(dir->dd_buf);
  11869. +  free(dir);
  11870. +}
  11871. +
  11872. +struct dirent *readdir(DIR *dir)
  11873. +{
  11874. +  iDIR *info = (iDIR *)dir->dd_buf;
  11875. +  struct dirent *entry = 0;
  11876. +  
  11877. +  chkabort();
  11878. +  if (info->seeked)
  11879. +    {
  11880. +      long cloc = 0;
  11881. +      struct idirent *pos;
  11882. +      
  11883. +      pos = info->files;
  11884. +      
  11885. +      while (cloc < dir->dd_loc && pos)
  11886. +    {
  11887. +      cloc++; pos = pos->next;
  11888. +    }
  11889. +      /*if (cloc != dir->dd_loc) error ...
  11890. +    This doesn't seem to be defined very precisely */
  11891. +      info->pos = pos;
  11892. +      info->seeked = 0;
  11893. +    }
  11894. +  if (info->pos)
  11895. +    {
  11896. +      entry = &info->pos->entry;
  11897. +      
  11898. +      last_dir = dir;
  11899. +      last_entry = info->pos;
  11900. +      
  11901. +      info->pos = info->pos->next;
  11902. +      dir->dd_loc++;
  11903. +    }
  11904. +  return entry;
  11905. +}
  11906. +
  11907. +long telldir(DIR *dir)
  11908. +{
  11909. +  chkabort();
  11910. +  return dir->dd_loc;
  11911. +}
  11912. +
  11913. +void seekdir(DIR *dir, long loc)
  11914. +{
  11915. +  iDIR *info = (iDIR *)dir->dd_buf;
  11916. +  
  11917. +  chkabort();
  11918. +  info->seeked = 1;
  11919. +  dir->dd_loc = loc;
  11920. +}
  11921. +
  11922. +#if 0
  11923. +void rewwinddir(DIR *dir)
  11924. +{
  11925. +  chkabort();
  11926. +  gobble_dir(dir);
  11927. +}
  11928. +#endif
  11929. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/dir_data.c amiga/fsf/emacs18/amiga/unix/src/dir_data.c
  11930. --- baseline/fsf/emacs18/amiga/unix/src/dir_data.c    Wed Dec 31 17:00:00 1969
  11931. +++ amiga/fsf/emacs18/amiga/unix/src/dir_data.c    Sat Sep 28 00:00:00 1996
  11932. @@ -0,0 +1,15 @@
  11933. +#include "amiga.h"
  11934. +#include "dir_data.h"
  11935. +
  11936. +DIR *last_dir;
  11937. +struct idirent *last_entry;
  11938. +
  11939. +BPTR _get_cd(void)
  11940. +{
  11941. +  BPTR dir = CurrentDir(0);
  11942. +  
  11943. +  CurrentDir(dir);
  11944. +  
  11945. +  return dir;
  11946. +}
  11947. +
  11948. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/dir_data.h amiga/fsf/emacs18/amiga/unix/src/dir_data.h
  11949. --- baseline/fsf/emacs18/amiga/unix/src/dir_data.h    Wed Dec 31 17:00:00 1969
  11950. +++ amiga/fsf/emacs18/amiga/unix/src/dir_data.h    Sat Sep 28 00:00:00 1996
  11951. @@ -0,0 +1,33 @@
  11952. +#ifndef DIR_DATA_H
  11953. +#define DIR_DATA_H
  11954. +
  11955. +#include <sys/dir.h>
  11956. +
  11957. +typedef struct
  11958. +{
  11959. +  char *dirname;
  11960. +  BPTR cdir;
  11961. +  struct FileInfoBlock fib;
  11962. +  struct idirent *files, *pos;
  11963. +  int seeked;
  11964. +  struct MsgPort *task;        /* Used to fake a value for st_dev */
  11965. +} iDIR;
  11966. +
  11967. +struct idirent
  11968. +{
  11969. +  struct idirent *next;
  11970. +  /* Info needed for stat */
  11971. +  long numblocks;
  11972. +  long size;
  11973. +  struct DateStamp date;
  11974. +  long type;
  11975. +  long protection;
  11976. +  struct dirent entry;
  11977. +};
  11978. +
  11979. +extern DIR *last_dir;
  11980. +extern struct idirent *last_entry;
  11981. +
  11982. +BPTR _get_cd(void);
  11983. +
  11984. +#endif
  11985. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/error.c amiga/fsf/emacs18/amiga/unix/src/error.c
  11986. --- baseline/fsf/emacs18/amiga/unix/src/error.c    Wed Dec 31 17:00:00 1969
  11987. +++ amiga/fsf/emacs18/amiga/unix/src/error.c    Sat Sep 28 00:00:00 1996
  11988. @@ -0,0 +1,47 @@
  11989. +#include "amiga.h"
  11990. +
  11991. +int errno;
  11992. +
  11993. +int convert_oserr(int ioerr)
  11994. +{
  11995. +  extern int _OSERR;
  11996. +
  11997. +  _OSERR = ioerr;
  11998. +  switch (ioerr)
  11999. +    {
  12000. +    case 0: return 0;
  12001. +    case ERROR_NO_FREE_STORE: return ENOMEM;
  12002. +    case ERROR_TASK_TABLE_FULL: return EAGAIN;
  12003. +    case ERROR_BAD_TEMPLATE: case ERROR_REQUIRED_ARG_MISSING: case ERROR_BAD_NUMBER:
  12004. +    case ERROR_KEY_NEEDS_ARG: case ERROR_TOO_MANY_ARGS:
  12005. +    case ERROR_UNMATCHED_QUOTES: return EINVAL;
  12006. +    case ERROR_LINE_TOO_LONG: return E2BIG;
  12007. +    case ERROR_FILE_NOT_OBJECT: return ENOEXEC;
  12008. +    case ERROR_OBJECT_IN_USE: return EBUSY;
  12009. +    case ERROR_OBJECT_EXISTS: return EEXIST;
  12010. +    case ERROR_DIR_NOT_FOUND: return ENOENT;
  12011. +    case ERROR_OBJECT_NOT_FOUND: return ENOENT;
  12012. +    case ERROR_BAD_STREAM_NAME: return EINVAL;
  12013. +    case ERROR_OBJECT_TOO_LARGE: return E2BIG;
  12014. +    case ERROR_ACTION_NOT_KNOWN: return EINVAL;
  12015. +    case ERROR_INVALID_COMPONENT_NAME: return ENAMETOOLONG;
  12016. +    case ERROR_INVALID_LOCK: return EINVAL;
  12017. +    case ERROR_OBJECT_WRONG_TYPE: return EINVAL;
  12018. +    case ERROR_DISK_WRITE_PROTECTED: return EROFS;
  12019. +    case ERROR_RENAME_ACROSS_DEVICES: return EXDEV;
  12020. +    case ERROR_DIRECTORY_NOT_EMPTY: return ENOTEMPTY;
  12021. +    case ERROR_TOO_MANY_LEVELS: return ELOOP;
  12022. +    case ERROR_DEVICE_NOT_MOUNTED: return ENODEV;
  12023. +    case ERROR_SEEK_ERROR: return EINVAL;
  12024. +    case ERROR_DISK_FULL: return ENOSPC;
  12025. +    case ERROR_DELETE_PROTECTED: return EACCES;
  12026. +    case ERROR_WRITE_PROTECTED: return EACCES;
  12027. +    case ERROR_READ_PROTECTED: return EACCES;
  12028. +    default: return EOSERR;
  12029. +    }
  12030. +}
  12031. +
  12032. +void _seterr(void)
  12033. +{
  12034. +    errno = convert_oserr(IoErr());
  12035. +}
  12036. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/error_msg.c amiga/fsf/emacs18/amiga/unix/src/error_msg.c
  12037. --- baseline/fsf/emacs18/amiga/unix/src/error_msg.c    Wed Dec 31 17:00:00 1969
  12038. +++ amiga/fsf/emacs18/amiga/unix/src/error_msg.c    Sat Sep 28 00:00:00 1996
  12039. @@ -0,0 +1,48 @@
  12040. +#include "amiga.h"
  12041. +
  12042. +/* Gross hack because EOSERR is -1. */
  12043. +static char *sys_amiga_error = "amiga specific error";
  12044. +char *sys_errlist[] =
  12045. +  {
  12046. +    "Unknown error",
  12047. +    "not owner",
  12048. +    "no such file or directory",
  12049. +    "no such process",
  12050. +    "interrupted system call",
  12051. +    "i/o error",
  12052. +    "no such device or address",
  12053. +    "argument list too long",
  12054. +    "exec format error",
  12055. +    "bad file number",
  12056. +    "no child process",
  12057. +    "no more processes",
  12058. +    "not enough memory",
  12059. +    "permission denied",
  12060. +    "bad address",
  12061. +    "block device required",
  12062. +    "mount devices busy",
  12063. +    "file exists",
  12064. +    "cross-device link",
  12065. +    "no such device",
  12066. +    "not a directory",
  12067. +    "is a directory",
  12068. +    "invalid argument",
  12069. +    "file table overflow",
  12070. +    "too many open files",
  12071. +    "not a typewriter",
  12072. +    "text file busy",
  12073. +    "file too big",
  12074. +    "no space left on device",
  12075. +    "illegal seek",
  12076. +    "read-only file system",
  12077. +    "too many links",
  12078. +    "broken pipe",
  12079. +    "math argument",
  12080. +    "result too large",
  12081. +    "I/O stream empty",
  12082. +    "file name too long",
  12083. +    "directory not empty",
  12084. +    "too many soft links (loop?)"
  12085. +};
  12086. +
  12087. +int sys_nerr = ELOOP;
  12088. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/exec.c amiga/fsf/emacs18/amiga/unix/src/exec.c
  12089. --- baseline/fsf/emacs18/amiga/unix/src/exec.c    Wed Dec 31 17:00:00 1969
  12090. +++ amiga/fsf/emacs18/amiga/unix/src/exec.c    Sat Sep 28 00:00:00 1996
  12091. @@ -0,0 +1,143 @@
  12092. +#include "amiga.h"
  12093. +#include "processes.h"
  12094. +#include <amiga/ioctl.h>
  12095. +#include <exec/memory.h>
  12096. +#include <dos/dosextens.h>
  12097. +#include <dos/dostags.h>
  12098. +#include <string.h>
  12099. +
  12100. +int eexec(char *program, char **argv, int input, int output, int error,
  12101. +      char *dir, int stacksize)
  12102. +/* input = -1 -> inherit Input()
  12103. +   output = -1 -> inherit Output()
  12104. +   error = -1 -> inherit pr_CES
  12105. +   error = -2 -> stderr = stdout */
  12106. +{
  12107. +  int index, comsize, close_input, close_output, close_error;
  12108. +  char *combuf, *bp;
  12109. +  BPTR in, out, err, dirlock;
  12110. +  int _pseudo_close(int fd);
  12111. +
  12112. +  comsize = 256;
  12113. +  combuf = malloc(comsize);
  12114. +
  12115. +  if (input == -1)
  12116. +    {
  12117. +      in = Input();
  12118. +      close_input = FALSE;
  12119. +    }
  12120. +  else
  12121. +    {
  12122. +      if (ioctl(input, _AMIGA_GET_FH, &in) == -1) in = 0;
  12123. +      close_input = TRUE;
  12124. +      _pseudo_close(input);
  12125. +    }
  12126. +
  12127. +  if (output == -1)
  12128. +    {
  12129. +      out = Output();
  12130. +      close_output = FALSE;
  12131. +    }
  12132. +  else if (input == output)
  12133. +    {
  12134. +      out = in;
  12135. +      close_output = FALSE;
  12136. +    }
  12137. +  else
  12138. +    {
  12139. +      if (ioctl(output, _AMIGA_GET_FH, &out) == -1) out = 0;
  12140. +      close_output = out != in;
  12141. +      _pseudo_close(output);
  12142. +    }
  12143. +
  12144. +  if (error == -1)
  12145. +    {
  12146. +      err = _us->pr_CES;
  12147. +      close_error = FALSE;
  12148. +    }
  12149. +  else if (error == -2)
  12150. +    {
  12151. +      err = out;
  12152. +      close_error = FALSE;
  12153. +    }
  12154. +  else
  12155. +    {
  12156. +      if (ioctl(error, _AMIGA_GET_FH, &err) == -1) err = 0;
  12157. +      close_error = err != out && err != in;
  12158. +      _pseudo_close(error);
  12159. +    }
  12160. +
  12161. +  /* pr_CES is not always defined */
  12162. +  if (in && out && (err || error == -1))
  12163. +    if (combuf)
  12164. +      {
  12165. +    bp = combuf;
  12166. +    for (index = 0; argv[index] != 0; index++)
  12167. +      {
  12168. +        /* Use program as argv[0]. This loses some information, but ... */
  12169. +        char *arg = index == 0 ? program : argv[index];
  12170. +        char *s;
  12171. +        int len;
  12172. +
  12173. +        len = 3;
  12174. +        s = arg;
  12175. +        while (*s)
  12176. +          {
  12177. +        len++;
  12178. +        if (*s == '*' || *s == '"' || *s == '\n') len++;
  12179. +        s++;
  12180. +          }
  12181. +        if (bp + len + 1 >= combuf + comsize)
  12182. +          {
  12183. +        char *newbuf;
  12184. +
  12185. +        comsize += comsize + len;
  12186. +        newbuf = realloc(combuf, comsize);
  12187. +        if (!newbuf) { errno = ENOMEM; goto error; }
  12188. +        bp = newbuf + (bp - combuf);
  12189. +        combuf = newbuf;
  12190. +          }
  12191. +        *bp++ = ' ';
  12192. +        *bp++ = '"';
  12193. +        s = arg;
  12194. +        while (*s)
  12195. +          {
  12196. +        if (*s == '"' || *s == '*') *bp++ = '*';
  12197. +        else if (*s == '\n') *bp++ = '+';
  12198. +        *bp++ = *s++;
  12199. +          }
  12200. +        *bp++ = '"';
  12201. +      }
  12202. +    *bp = '\0';
  12203. +    if (dir) dirlock = Lock(dir, SHARED_LOCK);
  12204. +    else dirlock = 0;
  12205. +
  12206. +    if (dirlock || !dir)
  12207. +      {
  12208. +        int pid = _start_process(combuf, in, close_input, out, close_output,
  12209. +                     err, close_error, dirlock, stacksize);
  12210. +
  12211. +        if (pid != -1)
  12212. +          {
  12213. +        free(combuf);
  12214. +        return pid;
  12215. +          }
  12216. +      }
  12217. +    else errno = convert_oserr(IoErr());
  12218. +    if (dirlock) UnLock(dirlock);
  12219. +      }
  12220. +    else errno = ENOMEM;
  12221. +
  12222. + error:
  12223. +  if (in && close_input) Close(in);
  12224. +  if (out && close_output) Close(out);
  12225. +  if (err && close_error) Close(err);
  12226. +  if (combuf) free(combuf);
  12227. +  return -1;
  12228. +}
  12229. +
  12230. +int exec(char *program, char **argv, int input, int output, 
  12231. +      char *dir, int stacksize)
  12232. +{
  12233. +  return eexec(program, argv, input, output, -1, dir, stacksize);
  12234. +}
  12235. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fchmod.c amiga/fsf/emacs18/amiga/unix/src/fchmod.c
  12236. --- baseline/fsf/emacs18/amiga/unix/src/fchmod.c    Wed Dec 31 17:00:00 1969
  12237. +++ amiga/fsf/emacs18/amiga/unix/src/fchmod.c    Sat Sep 28 00:00:00 1996
  12238. @@ -0,0 +1,10 @@
  12239. +#include "amiga.h"
  12240. +#include <amiga/ioctl.h>
  12241. +
  12242. +int fchmod(int fd, int mode)
  12243. +{
  12244. +  long amode = _make_protection(mode);
  12245. +
  12246. +  chkabort();
  12247. +  return ioctl(fd, _AMIGA_SETPROTECTION, &amode);
  12248. +}
  12249. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fcntl.c amiga/fsf/emacs18/amiga/unix/src/fcntl.c
  12250. --- baseline/fsf/emacs18/amiga/unix/src/fcntl.c    Wed Dec 31 17:00:00 1969
  12251. +++ amiga/fsf/emacs18/amiga/unix/src/fcntl.c    Sat Sep 28 00:00:00 1996
  12252. @@ -0,0 +1,43 @@
  12253. +#include "amiga.h"
  12254. +#include "files.h"
  12255. +#include <fcntl.h>
  12256. +#include <sys/filio.h>
  12257. +#include <stdarg.h>
  12258. +
  12259. +/* Flags that can be changed with fcntl */
  12260. +#define FCNTL_FLAGS (O_NDELAY | O_APPEND)
  12261. +
  12262. +int fcntl(int fd, int cmd, ...)
  12263. +{
  12264. +  struct fileinfo *fi;
  12265. +  va_list args;
  12266. +  int arg;
  12267. +
  12268. +  chkabort();
  12269. +  va_start(args, cmd);
  12270. +  arg = va_arg(args, int);
  12271. +  va_end(args);
  12272. +
  12273. +  if (fi = _find_fd(fd))
  12274. +    {
  12275. +      switch (cmd)
  12276. +    {
  12277. +    default: errno = EINVAL; break;
  12278. +    case F_GETFL: return fi->flags & FCNTL_FLAGS;
  12279. +    case F_SETFL:
  12280. +      {
  12281. +        int oldfl = fi->flags;
  12282. +
  12283. +        fi->flags = (fi->flags & ~FCNTL_FLAGS) | (arg & FCNTL_FLAGS);
  12284. +        if ((oldfl & O_NDELAY) != (fi->flags & O_NDELAY))
  12285. +          {
  12286. +        int ndelay = fi->flags & O_NDELAY;
  12287. +
  12288. +        return fi->ioctl(fi->userinfo, FIONBIO, &ndelay);
  12289. +          }
  12290. +        return 0;
  12291. +      }
  12292. +    }
  12293. +    }
  12294. +  return -1;
  12295. +}
  12296. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fibstat.c amiga/fsf/emacs18/amiga/unix/src/fibstat.c
  12297. --- baseline/fsf/emacs18/amiga/unix/src/fibstat.c    Wed Dec 31 17:00:00 1969
  12298. +++ amiga/fsf/emacs18/amiga/unix/src/fibstat.c    Sat Sep 28 00:00:00 1996
  12299. @@ -0,0 +1,90 @@
  12300. +#include "amiga.h"
  12301. +#include "fibstat.h"
  12302. +#include "timeconvert.h"
  12303. +#include <fcntl.h>
  12304. +#include <time.h>
  12305. +#include <sys/stat.h>
  12306. +#include <utility/tagitem.h>
  12307. +
  12308. +char _temp_fname[FNAMESIZE];
  12309. +
  12310. +void _lfibstat(char *name, struct FileInfoBlock *fib, struct MsgPort *task,
  12311. +           int isroot, struct stat *sbuf)
  12312. +{
  12313. +  long protection = fib->fib_Protection;
  12314. +  
  12315. +  sbuf->st_dev = (long)task;
  12316. +  sbuf->st_rdev = 0;
  12317. +  sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
  12318. +  sbuf->st_blksize = 512;
  12319. +#ifdef PRETEND_LINKED
  12320. +  /* This forces programs (tar) to consider potential hard links */
  12321. +  sbuf->st_nlink = 2;
  12322. +#else
  12323. +  sbuf->st_nlink = 1;
  12324. +#endif
  12325. +  sbuf->st_blocks = fib->fib_NumBlocks;
  12326. +  /* Give directories an arbitrary size */
  12327. +  if (fib->fib_Size == 0 && fib->fib_DirEntryType > 0) sbuf->st_size = 2048;
  12328. +  else sbuf->st_size = fib->fib_Size;
  12329. +  sbuf->st_ino = fib->fib_DiskKey;
  12330. +  sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = _amiga2gmt(&fib->fib_Date);
  12331. +  
  12332. +  switch (fib->fib_DirEntryType)
  12333. +    {
  12334. +    case ST_SOFTLINK:
  12335. +      {
  12336. +    int len;
  12337. +
  12338. +    if (name && (len = readlink(name, _temp_fname, FNAMESIZE - 1)) > 0)
  12339. +      sbuf->st_size = len;
  12340. +    else sbuf->st_size = 256; /* A random safish value */
  12341. +    sbuf->st_mode = S_IFLNK;
  12342. +    break;
  12343. +      }
  12344. +    case ST_PIPEFILE: sbuf->st_mode = S_IFIFO; break;
  12345. +      /* If Examine wasn't braindead this would be the right test */
  12346. +    case ST_ROOT: sbuf->st_mode = S_IFDIR; protection = 0; break;
  12347. +    case ST_FILE: /* Try & detect special files (eg windows) */
  12348. +      if (fib->fib_DiskKey == 0 && !fib->fib_FileName[0])
  12349. +    sbuf->st_mode = S_IFCHR;
  12350. +      else sbuf->st_mode = S_IFREG;
  12351. +      break;
  12352. +    default: sbuf->st_mode = fib->fib_DirEntryType > 0 ? S_IFDIR : S_IFREG; break;
  12353. +    }
  12354. +  /* Examine is braindead. You can't tell if you've examined a root directory
  12355. +     (for which the protection flags are invalid) or not. */
  12356. +  if (isroot) protection = 0;
  12357. +
  12358. +  sbuf->st_mode |= _make_mode(protection);
  12359. +}
  12360. +
  12361. +int _fibstat(char *name, struct stat *sbuf)
  12362. +{
  12363. +  int ret;
  12364. +  struct FileInfoBlock *fib;
  12365. +  BPTR lock = 0;
  12366. +
  12367. +  if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
  12368. +      (lock = Lock(name, ACCESS_READ)) &&
  12369. +      Examine(lock, fib))
  12370. +    {
  12371. +      BPTR parent = ParentDir(lock);
  12372. +      int isroot = !parent;
  12373. +      struct FileLock *flock = BADDR(lock);
  12374. +      
  12375. +      if (parent) UnLock(parent);
  12376. +      _lfibstat(name, fib, flock->fl_Task, isroot, sbuf);
  12377. +      ret = 0;
  12378. +    }
  12379. +  else
  12380. +    {
  12381. +      ret = -1;
  12382. +      errno = convert_oserr(IoErr());
  12383. +    }
  12384. +  if (lock) UnLock(lock);
  12385. +  if (fib) FreeDosObject(DOS_FIB, fib);
  12386. +  return ret;
  12387. +}
  12388. +
  12389. +      
  12390. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fibstat.h amiga/fsf/emacs18/amiga/unix/src/fibstat.h
  12391. --- baseline/fsf/emacs18/amiga/unix/src/fibstat.h    Wed Dec 31 17:00:00 1969
  12392. +++ amiga/fsf/emacs18/amiga/unix/src/fibstat.h    Sat Sep 28 00:00:00 1996
  12393. @@ -0,0 +1,12 @@
  12394. +#ifndef FIBSTAT_H
  12395. +
  12396. +#define FNAMESIZE 256
  12397. +
  12398. +extern char _temp_fname[FNAMESIZE];
  12399. +
  12400. +void _lfibstat(char *name, struct FileInfoBlock *fib, struct MsgPort *task,
  12401. +           int isroot, struct stat *sbuf);
  12402. +
  12403. +int _fibstat(char *name, struct stat *sbuf);
  12404. +
  12405. +#endif
  12406. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fifo.h amiga/fsf/emacs18/amiga/unix/src/fifo.h
  12407. --- baseline/fsf/emacs18/amiga/unix/src/fifo.h    Wed Dec 31 17:00:00 1969
  12408. +++ amiga/fsf/emacs18/amiga/unix/src/fifo.h    Sat Sep 28 00:00:00 1996
  12409. @@ -0,0 +1,41 @@
  12410. +
  12411. +/*
  12412. + *  FIFO.H
  12413. + *
  12414. + *  PUBLIC FIFO STRUCTURES AND DEFINES
  12415. + */
  12416. +
  12417. +#ifndef LIBRARIES_FIFO_H
  12418. +#define LIBRARIES_FIFO_H
  12419. +
  12420. +#define FIFONAME    "fifo.library"
  12421. +
  12422. +#define FIFOF_READ      0x00000100L      /*  intend to read from fifo      */
  12423. +#define FIFOF_WRITE      0x00000200L      /*  intend to write to fifo      */
  12424. +#define FIFOF_RESERVED      0xFFFF0000L      /*  reserved for internal use   */
  12425. +#define FIFOF_NORMAL      0x00000400L      /*  request blocking/sig support*/
  12426. +#define FIFOF_NBIO      0x00000800L      /*  non-blocking IO          */
  12427. +
  12428. +#define FIFOF_KEEPIFD      0x00002000L      /*  keep fifo alive if data pending */
  12429. +#define FIFOF_EOF      0x00004000L      /*  EOF on close              */
  12430. +#define FIFOF_RREQUIRED   0x00008000L      /*  reader required to exist      */
  12431. +
  12432. +#define FREQ_RPEND    1
  12433. +#define FREQ_WAVAIL    2
  12434. +#define FREQ_ABORT    3
  12435. +
  12436. +typedef void *FifoHan;              /*  returned by OpenFifo()  */
  12437. +
  12438. +#ifndef IN_LIBRARY
  12439. +
  12440. +FifoHan OpenFifo(char *, long, long);
  12441. +void CloseFifo(FifoHan, long);
  12442. +long ReadFifo(FifoHan, char **, long);
  12443. +long WriteFifo(FifoHan, char *, long);
  12444. +void RequestFifo(FifoHan, struct Message *, long);
  12445. +long BufSizeFifo(FifoHan);
  12446. +
  12447. +#endif
  12448. +
  12449. +#endif
  12450. +
  12451. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fifo_pragmas.h amiga/fsf/emacs18/amiga/unix/src/fifo_pragmas.h
  12452. --- baseline/fsf/emacs18/amiga/unix/src/fifo_pragmas.h    Wed Dec 31 17:00:00 1969
  12453. +++ amiga/fsf/emacs18/amiga/unix/src/fifo_pragmas.h    Sat Sep 28 00:00:00 1996
  12454. @@ -0,0 +1,7 @@
  12455. +/* "fifo.library"*/
  12456. +#pragma libcall _FifoBase OpenFifo 1E 81003
  12457. +#pragma libcall _FifoBase CloseFifo 24 1002
  12458. +#pragma libcall _FifoBase ReadFifo 2A 81003
  12459. +#pragma libcall _FifoBase WriteFifo 30 81003
  12460. +#pragma libcall _FifoBase RequestFifo 36 81003
  12461. +#pragma libcall _FifoBase BufSizeFifo 3C 001
  12462. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fifofd.c amiga/fsf/emacs18/amiga/unix/src/fifofd.c
  12463. --- baseline/fsf/emacs18/amiga/unix/src/fifofd.c    Wed Dec 31 17:00:00 1969
  12464. +++ amiga/fsf/emacs18/amiga/unix/src/fifofd.c    Sat Sep 28 00:00:00 1996
  12465. @@ -0,0 +1,25 @@
  12466. +#include "amiga.h"
  12467. +#include "files.h"
  12468. +#include "fifofd.h"
  12469. +#include <time.h>
  12470. +
  12471. +struct Library *_FifoBase;
  12472. +int _fifo_sig = -1;
  12473. +long _fifo_base;
  12474. +long _fifo_offset;
  12475. +int _fifo_ok;
  12476. +
  12477. +void _init_fifo(void)
  12478. +{
  12479. +  _fifo_base = (int)_us ^ _startup_time * 65537;
  12480. +  _fifo_offset = 0;
  12481. +  _FifoBase = OpenLibrary("fifo.library", 0);
  12482. +  _fifo_sig = AllocSignal(-1);
  12483. +  _fifo_ok = _FifoBase != 0 && _fifo_sig >= 0;
  12484. +}
  12485. +
  12486. +void _cleanup_fifo(void)
  12487. +{
  12488. +  if (_fifo_sig >= 0) FreeSignal(_fifo_sig);
  12489. +  if (_FifoBase) CloseLibrary(_FifoBase);
  12490. +}
  12491. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fifofd.h amiga/fsf/emacs18/amiga/unix/src/fifofd.h
  12492. --- baseline/fsf/emacs18/amiga/unix/src/fifofd.h    Wed Dec 31 17:00:00 1969
  12493. +++ amiga/fsf/emacs18/amiga/unix/src/fifofd.h    Sat Sep 28 00:00:00 1996
  12494. @@ -0,0 +1,31 @@
  12495. +#ifndef FIFO_H
  12496. +#define FIFO_H
  12497. +
  12498. +#include "fifo.h"
  12499. +#include "fifo_pragmas.h"
  12500. +
  12501. +#define FIFO_BUFSIZE 1024
  12502. +#define FIFO_NAMELEN 32
  12503. +
  12504. +struct fifoinfo
  12505. +{
  12506. +  char name[FIFO_NAMELEN];
  12507. +  void *rfifo, *wfifo;
  12508. +  long maxsend, skip;
  12509. +  int flags;
  12510. +  struct Message *rmsg, *wmsg;
  12511. +  struct MsgPort *reply;
  12512. +};
  12513. +
  12514. +#define FIFO_MASTER 0x8000
  12515. +
  12516. +extern struct Library *_FifoBase;
  12517. +extern int _fifo_sig;
  12518. +extern long _fifo_base;
  12519. +extern long _fifo_offset;
  12520. +extern int _fifo_ok;
  12521. +
  12522. +void _init_fifo(void);
  12523. +void _cleanup_fifo(void);
  12524. +
  12525. +#endif
  12526. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/files.c amiga/fsf/emacs18/amiga/unix/src/files.c
  12527. --- baseline/fsf/emacs18/amiga/unix/src/files.c    Wed Dec 31 17:00:00 1969
  12528. +++ amiga/fsf/emacs18/amiga/unix/src/files.c    Sat Sep 28 00:00:00 1996
  12529. @@ -0,0 +1,74 @@
  12530. +#include "amiga.h"
  12531. +#include "files.h"
  12532. +#include <string.h>
  12533. +
  12534. +/* Unix low-level IO emulation */
  12535. +/* --------------------------- */
  12536. +
  12537. +/* First, fd definition & allocation */
  12538. +
  12539. +static struct fileinfo *files;
  12540. +static int max_files;
  12541. +#define FILE_STEP 10        /* Nb of file descriptors to allocate at once */
  12542. +
  12543. +int _alloc_fd(void *userinfo, int flags,
  12544. +  ULONG (*__regargs select_start)(void *userinfo, int rd, int wr),
  12545. +  void (*__regargs select_poll)(void *userinfo, int *rd, int *wr),
  12546. +  int (*__regargs read)(void *userinfo, void *buffer, unsigned int length),
  12547. +  int (*__regargs write)(void *userinfo, void *buffer, unsigned int length),
  12548. +  int (*__regargs lseek)(void *userinfo, long rpos, int mode),
  12549. +  int (*__regargs close)(void *userinfo, int internal),
  12550. +  int (*__regargs ioctl)(void *userinfo, int request, void *data)
  12551. +)
  12552. +{
  12553. +  int fd;
  12554. +
  12555. +  for (fd = 0; fd < max_files; fd++)
  12556. +      if (!files[fd].userinfo)
  12557. +    {
  12558. +      files[fd].userinfo = (void *)1;
  12559. +      break;
  12560. +    }
  12561. +  if (fd == max_files)
  12562. +    {
  12563. +      struct fileinfo *newfiles;
  12564. +      int i;
  12565. +
  12566. +      /* Increase files array by FILE_STEP */
  12567. +      max_files += FILE_STEP;
  12568. +      newfiles = (struct fileinfo *)malloc(max_files * sizeof(struct fileinfo));
  12569. +      if (!newfiles)
  12570. +    {
  12571. +      errno = ENOMEM;
  12572. +      return -1;
  12573. +    }
  12574. +      memcpy(newfiles, files, (max_files - FILE_STEP) * sizeof(struct fileinfo));
  12575. +      if (files) free(files);
  12576. +      files = newfiles;
  12577. +      for (i = max_files - FILE_STEP; i < max_files; i++) files[i].userinfo = 0;
  12578. +    }
  12579. +  files[fd].userinfo = userinfo;
  12580. +  files[fd].flags = flags;
  12581. +  files[fd].select_start = select_start;
  12582. +  files[fd].select_poll = select_poll;
  12583. +  files[fd].read = read;
  12584. +  files[fd].write = write;
  12585. +  files[fd].lseek = lseek;
  12586. +  files[fd].close = close;
  12587. +  files[fd].ioctl = ioctl;
  12588. +  return fd;
  12589. +}
  12590. +
  12591. +void _free_fd(int fd)
  12592. +{
  12593. +  if (0 <= fd && fd < max_files) files[fd].userinfo = 0;
  12594. +}
  12595. +
  12596. +struct fileinfo *_find_fd(int fd)
  12597. +{
  12598. +  if (0 <= fd && fd < max_files && files[fd].userinfo) return &files[fd];
  12599. +  errno = EBADF;
  12600. +  return 0;
  12601. +}
  12602. +
  12603. +int _last_fd(void) { return max_files; }
  12604. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/fstat.c amiga/fsf/emacs18/amiga/unix/src/fstat.c
  12605. --- baseline/fsf/emacs18/amiga/unix/src/fstat.c    Wed Dec 31 17:00:00 1969
  12606. +++ amiga/fsf/emacs18/amiga/unix/src/fstat.c    Sat Sep 28 00:00:00 1996
  12607. @@ -0,0 +1,52 @@
  12608. +#include "amiga.h"
  12609. +#include "fibstat.h"
  12610. +#include <dos/dosextens.h>
  12611. +#include <utility/tagitem.h>
  12612. +#include <sys/types.h>
  12613. +#include <sys/stat.h>
  12614. +#include <amiga/ioctl.h>
  12615. +
  12616. +int fstat(int fd, struct stat *sbuf)
  12617. +{
  12618. +  BPTR fh;
  12619. +  struct FileInfoBlock *fib;
  12620. +  int ret;
  12621. +
  12622. +  chkabort();
  12623. +  if (ioctl(fd, _AMIGA_GET_FH, &fh) == -1) return -1;
  12624. +  if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) && ExamineFH(fh, fib))
  12625. +    {
  12626. +      struct FileHandle *handle = BADDR(fh);
  12627. +
  12628. +      _lfibstat(NULL, fib, handle->fh_Type, 0, sbuf);
  12629. +      ret = 0;
  12630. +    }
  12631. +  else
  12632. +    {
  12633. +      int err = IoErr();
  12634. +
  12635. +      if (err == ERROR_ACTION_NOT_KNOWN)
  12636. +    /* Fake a stat result */
  12637. +    {
  12638. +      ret = 0;
  12639. +      sbuf->st_dev = (long)(((struct FileHandle *)BADDR(fh))->fh_Type);
  12640. +      sbuf->st_ino = 0;
  12641. +      sbuf->st_mode = 0777 | S_IFCHR;
  12642. +      sbuf->st_nlink = 1;
  12643. +      sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
  12644. +      sbuf->st_blksize = 512;
  12645. +      sbuf->st_blocks = 0;
  12646. +      sbuf->st_size = 0;
  12647. +      /* 1-Jan-1978 */
  12648. +      sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = 252460800;
  12649. +    }
  12650. +      else
  12651. +    {
  12652. +      ret = -1;
  12653. +      errno = convert_oserr(err);
  12654. +    }
  12655. +    }
  12656. +  if (fib) FreeDosObject(DOS_FIB, fib);
  12657. +  ioctl(fd, _AMIGA_FREE_FH, &fh);
  12658. +  return ret;
  12659. +}
  12660. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/ftruncate.c amiga/fsf/emacs18/amiga/unix/src/ftruncate.c
  12661. --- baseline/fsf/emacs18/amiga/unix/src/ftruncate.c    Wed Dec 31 17:00:00 1969
  12662. +++ amiga/fsf/emacs18/amiga/unix/src/ftruncate.c    Sat Sep 28 00:00:00 1996
  12663. @@ -0,0 +1,8 @@
  12664. +#include "amiga.h"
  12665. +#include <amiga/ioctl.h>
  12666. +
  12667. +int ftruncate(int fd, off_t length)
  12668. +{
  12669. +  chkabort();
  12670. +  return ioctl(fd, _AMIGA_TRUNCATE, &length);
  12671. +}
  12672. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/getenv.c amiga/fsf/emacs18/amiga/unix/src/getenv.c
  12673. --- baseline/fsf/emacs18/amiga/unix/src/getenv.c    Wed Dec 31 17:00:00 1969
  12674. +++ amiga/fsf/emacs18/amiga/unix/src/getenv.c    Sat Sep 28 00:00:00 1996
  12675. @@ -0,0 +1,31 @@
  12676. +#include "amiga.h"
  12677. +#include <string.h>
  12678. +
  12679. +/* This getenv removes trailing newlines & multiple calls don't
  12680. +   destroy results */
  12681. +char *getenv (const char *varname)
  12682. +{
  12683. +  char *return_string;
  12684. +  char buf[64];
  12685. +
  12686. +  chkabort();
  12687. +  if (varname && varname[0])
  12688. +    {
  12689. +      int len, size;
  12690. +
  12691. +      len = GetVar(varname, buf, 64, LV_VAR);
  12692. +      if (len >= 0)
  12693. +    {
  12694. +      size = IoErr();
  12695. +      return_string = malloc(size + 1);
  12696. +      if (!return_string) return 0;
  12697. +      if (size != len)
  12698. +        {
  12699. +          if (GetVar(varname, return_string, size + 1, LV_VAR) > 0)
  12700. +        return return_string;
  12701. +        }
  12702. +      else return strcpy(return_string, buf);
  12703. +    }
  12704. +    }
  12705. +  return 0;
  12706. +}
  12707. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/gethostname.c amiga/fsf/emacs18/amiga/unix/src/gethostname.c
  12708. --- baseline/fsf/emacs18/amiga/unix/src/gethostname.c    Wed Dec 31 17:00:00 1969
  12709. +++ amiga/fsf/emacs18/amiga/unix/src/gethostname.c    Sat Sep 28 00:00:00 1996
  12710. @@ -0,0 +1,11 @@
  12711. +#include "amiga.h"
  12712. +#include <unistd.h>
  12713. +
  12714. +extern char *_system_name;
  12715. +
  12716. +int gethostname(char *buf, int len)
  12717. +{
  12718. +  strncpy(buf, _system_name, len);
  12719. +
  12720. +  return 0;
  12721. +}
  12722. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/getpid.c amiga/fsf/emacs18/amiga/unix/src/getpid.c
  12723. --- baseline/fsf/emacs18/amiga/unix/src/getpid.c    Wed Dec 31 17:00:00 1969
  12724. +++ amiga/fsf/emacs18/amiga/unix/src/getpid.c    Sat Sep 28 00:00:00 1996
  12725. @@ -0,0 +1,8 @@
  12726. +#include "amiga.h"
  12727. +#include "processes.h"
  12728. +
  12729. +int getpid(void)
  12730. +{
  12731. +  chkabort();
  12732. +  return _our_pid;
  12733. +}
  12734. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/getwd.c amiga/fsf/emacs18/amiga/unix/src/getwd.c
  12735. --- baseline/fsf/emacs18/amiga/unix/src/getwd.c    Wed Dec 31 17:00:00 1969
  12736. +++ amiga/fsf/emacs18/amiga/unix/src/getwd.c    Sat Sep 28 00:00:00 1996
  12737. @@ -0,0 +1,8 @@
  12738. +#include "amiga.h"
  12739. +#include <sys/param.h>
  12740. +
  12741. +char *getwd (char *pathname)
  12742. +{
  12743. +  chkabort();
  12744. +  return getcwd(pathname, MAXPATHLEN);
  12745. +}
  12746. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/gid.c amiga/fsf/emacs18/amiga/unix/src/gid.c
  12747. --- baseline/fsf/emacs18/amiga/unix/src/gid.c    Wed Dec 31 17:00:00 1969
  12748. +++ amiga/fsf/emacs18/amiga/unix/src/gid.c    Sat Sep 28 00:00:00 1996
  12749. @@ -0,0 +1,4 @@
  12750. +#include "amiga.h"
  12751. +
  12752. +gid_t getgid(void) { return AMIGA_GID; }
  12753. +gid_t getegid(void) { return AMIGA_GID; }
  12754. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/grp.c amiga/fsf/emacs18/amiga/unix/src/grp.c
  12755. --- baseline/fsf/emacs18/amiga/unix/src/grp.c    Wed Dec 31 17:00:00 1969
  12756. +++ amiga/fsf/emacs18/amiga/unix/src/grp.c    Sat Sep 28 00:00:00 1996
  12757. @@ -0,0 +1,14 @@
  12758. +#include "amiga.h"
  12759. +#include <grp.h>
  12760. +
  12761. +static char *wheel_members[] = { "user", 0 };
  12762. +
  12763. +static struct group wheel = {
  12764. +  "wheel",
  12765. +  "",
  12766. +  AMIGA_GID,
  12767. +  wheel_members
  12768. +};
  12769. +
  12770. +struct group *getgrgid(gid_t gid) { return &wheel; }
  12771. +struct group *getgrnam(char *name) { return &wheel; }
  12772. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/index.c amiga/fsf/emacs18/amiga/unix/src/index.c
  12773. --- baseline/fsf/emacs18/amiga/unix/src/index.c    Wed Dec 31 17:00:00 1969
  12774. +++ amiga/fsf/emacs18/amiga/unix/src/index.c    Sat Sep 28 00:00:00 1996
  12775. @@ -0,0 +1,8 @@
  12776. +#include <string.h>
  12777. +
  12778. +#undef index
  12779. +
  12780. +char *index(char *str, int c)
  12781. +{
  12782. +  return strchr(str, c);
  12783. +}
  12784. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/ioctl.c amiga/fsf/emacs18/amiga/unix/src/ioctl.c
  12785. --- baseline/fsf/emacs18/amiga/unix/src/ioctl.c    Wed Dec 31 17:00:00 1969
  12786. +++ amiga/fsf/emacs18/amiga/unix/src/ioctl.c    Sat Sep 28 00:00:00 1996
  12787. @@ -0,0 +1,14 @@
  12788. +#include "amiga.h"
  12789. +#include "files.h"
  12790. +
  12791. +int ioctl(int fd, int request, caddr_t arg)
  12792. +{
  12793. +  struct fileinfo *fi;
  12794. +
  12795. +  chkabort();
  12796. +  if (fi = _find_fd(fd))
  12797. +    {
  12798. +      return fi->ioctl(fi->userinfo, request, arg);
  12799. +    }
  12800. +  return -1;
  12801. +}
  12802. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/isatty.c amiga/fsf/emacs18/amiga/unix/src/isatty.c
  12803. --- baseline/fsf/emacs18/amiga/unix/src/isatty.c    Wed Dec 31 17:00:00 1969
  12804. +++ amiga/fsf/emacs18/amiga/unix/src/isatty.c    Sat Sep 28 00:00:00 1996
  12805. @@ -0,0 +1,11 @@
  12806. +#include "amiga.h"
  12807. +#include <amiga/ioctl.h>
  12808. +
  12809. +int isatty(int fd)
  12810. +{
  12811. +  int istty;
  12812. +
  12813. +  chkabort();
  12814. +  if (ioctl(fd, _AMIGA_INTERACTIVE, &istty) != 0) return 0;
  12815. +  return istty;
  12816. +}
  12817. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/kill.c amiga/fsf/emacs18/amiga/unix/src/kill.c
  12818. --- baseline/fsf/emacs18/amiga/unix/src/kill.c    Wed Dec 31 17:00:00 1969
  12819. +++ amiga/fsf/emacs18/amiga/unix/src/kill.c    Sat Sep 28 00:00:00 1996
  12820. @@ -0,0 +1,74 @@
  12821. +#include "amiga.h"
  12822. +#include "signals.h"
  12823. +#include "processes.h"
  12824. +#include <exec/execbase.h>
  12825. +
  12826. +extern struct ExecBase *SysBase;
  12827. +
  12828. +static void break_list(struct List *tasks, BPTR fh)
  12829. +{
  12830. +  struct Process *p;
  12831. +
  12832. +  for (p = (struct Process *)tasks->lh_Head; p->pr_Task.tc_Node.ln_Succ;
  12833. +       p = (struct Process *)p->pr_Task.tc_Node.ln_Succ)
  12834. +    {
  12835. +      if (p->pr_Task.tc_Node.ln_Type == NT_PROCESS)
  12836. +    {
  12837. +      struct CommandLineInterface *cli = p->pr_CLI ? BADDR(p->pr_CLI) : 0;
  12838. +
  12839. +      if (p->pr_CIS == fh || p->pr_COS == fh || p->pr_CES == fh ||
  12840. +          cli && (cli->cli_StandardInput == fh || cli->cli_CurrentInput == fh ||
  12841. +              cli->cli_StandardOutput == fh || cli->cli_CurrentOutput == fh))
  12842. +        Signal(p, SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D);
  12843. +    }
  12844. +    }
  12845. +}
  12846. +
  12847. +static int magickill(BPTR fh, int signo)
  12848. +{
  12849. +  switch (signo)
  12850. +    {
  12851. +    case SIGINT: case SIGQUIT: case SIGKILL: case SIGHUP:
  12852. +      Forbid();
  12853. +      break_list(&SysBase->TaskReady, fh);
  12854. +      break_list(&SysBase->TaskWait, fh);
  12855. +      Permit();
  12856. +      return 0;
  12857. +    default: errno = EINVAL; return -1;
  12858. +    }
  12859. +}
  12860. +
  12861. +int kill(int pid, int signal)
  12862. +{
  12863. +  chkabort();
  12864. +  /* Our process list is now reasonably upto date */
  12865. +  if (pid < 0) pid = -pid;    /* Consider that each process is a pg unto itself */
  12866. +  if (pid == _our_pid) 
  12867. +    {
  12868. +      if (signal) _sig_dispatch(signal);
  12869. +      return 0;
  12870. +    }
  12871. +  else 
  12872. +    {
  12873. +      struct process *entry;
  12874. +      int killrc;
  12875. +
  12876. +      entry = _find_pid(pid);
  12877. +      if (!entry || entry->status != alive)
  12878. +    {
  12879. +      errno = ESRCH;
  12880. +      return -1;
  12881. +    }
  12882. +      if (!signal) return 0;
  12883. +      killrc = magickill(entry->input, signal);
  12884. +      if (signal == SIGKILL)
  12885. +    {
  12886. +      /* Fake the kill from emacs point of view */
  12887. +      entry->status = exited;
  12888. +      entry->rc = SIGKILL;
  12889. +      _sig_dispatch(SIGCHLD);
  12890. +      return 0;
  12891. +    }
  12892. +      return killrc;
  12893. +    }
  12894. +}
  12895. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/link.c amiga/fsf/emacs18/amiga/unix/src/link.c
  12896. --- baseline/fsf/emacs18/amiga/unix/src/link.c    Wed Dec 31 17:00:00 1969
  12897. +++ amiga/fsf/emacs18/amiga/unix/src/link.c    Sat Sep 28 00:00:00 1996
  12898. @@ -0,0 +1,16 @@
  12899. +#include "amiga.h"
  12900. +
  12901. +int link(char *from, char *to)
  12902. +{
  12903. +  BPTR from_lock = Lock(from, ACCESS_READ);
  12904. +
  12905. +  chkabort();
  12906. +  if (from_lock)
  12907. +    {
  12908. +      int ok = MakeLink(to, from_lock, 0);
  12909. +
  12910. +      UnLock(from_lock);
  12911. +      if (ok) return 0;
  12912. +    }
  12913. +  ERROR;
  12914. +}
  12915. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/lseek.c amiga/fsf/emacs18/amiga/unix/src/lseek.c
  12916. --- baseline/fsf/emacs18/amiga/unix/src/lseek.c    Wed Dec 31 17:00:00 1969
  12917. +++ amiga/fsf/emacs18/amiga/unix/src/lseek.c    Sat Sep 28 00:00:00 1996
  12918. @@ -0,0 +1,23 @@
  12919. +#include "amiga.h"
  12920. +#include "files.h"
  12921. +#include <fcntl.h>
  12922. +
  12923. +#undef lseek
  12924. +
  12925. +int __lseek(int fd, long rpos, int mode)
  12926. +{
  12927. +  struct fileinfo *fi;
  12928. +
  12929. +  chkabort();
  12930. +  if (fi = _find_fd(fd))
  12931. +    {
  12932. +      return fi->lseek(fi->userinfo, rpos, mode);
  12933. +    }
  12934. +  return -1;
  12935. +}
  12936. +
  12937. +int lseek(int fd, long rpos, int mode)
  12938. +{
  12939. +  return __lseek(fd, rpos, mode);
  12940. +}
  12941. +
  12942. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/message.c amiga/fsf/emacs18/amiga/unix/src/message.c
  12943. --- baseline/fsf/emacs18/amiga/unix/src/message.c    Wed Dec 31 17:00:00 1969
  12944. +++ amiga/fsf/emacs18/amiga/unix/src/message.c    Sat Sep 28 00:00:00 1996
  12945. @@ -0,0 +1,78 @@
  12946. +#include "amiga.h"
  12947. +#include <intuition/intuition.h>
  12948. +#include <stdarg.h>
  12949. +
  12950. +static struct EasyStruct msg = {
  12951. +    sizeof (struct EasyStruct),
  12952. +    0,
  12953. +    NULL,
  12954. +    NULL,
  12955. +    "Ok",
  12956. +};
  12957. +
  12958. +static void message(char *format, long *args)
  12959. +/* Display a message which is as visible as possible (either to the console
  12960. +   or to as a requester).
  12961. +   Assume very little about library state */
  12962. +{
  12963. +  LONG msg_EasyRequestArgs(struct Window *window, struct EasyStruct *easyStruct,
  12964. +               ULONG *idcmpPtr, APTR args );
  12965. +#pragma libcall msg_IntuitionBase msg_EasyRequestArgs 24C BA9804
  12966. +  BPTR fh;
  12967. +  int close = FALSE;
  12968. +  extern char *_ProgramName;
  12969. +  extern struct WBStartup *_WBenchMsg;
  12970. +
  12971. +  fh = _us->pr_CES;
  12972. +  if (!fh)
  12973. +    if (!_WBenchMsg && (fh = Open("console:", MODE_OLDFILE))) close = TRUE;
  12974. +
  12975. +  if (fh)
  12976. +    {
  12977. +      VFPrintf(fh, "%s: ", &_ProgramName);
  12978. +      VFPrintf(fh, format, (long *)args);
  12979. +      FPutC(fh, '\n');
  12980. +      if (close) Close(fh);
  12981. +    }
  12982. +  else
  12983. +    {
  12984. +      struct Window *win = (struct Window *)_us->pr_WindowPtr;
  12985. +      if (win != (struct Window *)-1)
  12986. +    {
  12987. +      struct Library *msg_IntuitionBase = OpenLibrary("intuition.library", 37);
  12988. +
  12989. +      if (msg_IntuitionBase)
  12990. +        {
  12991. +          msg.es_Title = _ProgramName;
  12992. +          msg.es_TextFormat = format;
  12993. +          msg_EasyRequestArgs(win, &msg, 0, args);
  12994. +          CloseLibrary(msg_IntuitionBase);
  12995. +        }
  12996. +    }
  12997. +    }
  12998. +}
  12999. +
  13000. +void _message(char *format, ...)
  13001. +/* Display a message which is as visible as possible (either to the console
  13002. +   or to as a requester).
  13003. +   Assume very little about library state */
  13004. +{
  13005. +  va_list args;
  13006. +
  13007. +  va_start(args, format);
  13008. +  message(format, (long *)args);
  13009. +}
  13010. +
  13011. +void _fail(char *format, ...)
  13012. +/* Display a message which is as visible as possible (either to the console
  13013. +   or to as a requester).
  13014. +   Assume very little about library state.
  13015. +   Exit with error code RETURN_FAIL after that. */
  13016. +{
  13017. +  va_list args;
  13018. +
  13019. +  va_start(args, format);
  13020. +  message(format, (long *)args);
  13021. +
  13022. +  exit(RETURN_FAIL);        /* The library should always be cleanup-able */
  13023. +}
  13024. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/mkdir.c amiga/fsf/emacs18/amiga/unix/src/mkdir.c
  13025. --- baseline/fsf/emacs18/amiga/unix/src/mkdir.c    Wed Dec 31 17:00:00 1969
  13026. +++ amiga/fsf/emacs18/amiga/unix/src/mkdir.c    Sat Sep 28 00:00:00 1996
  13027. @@ -0,0 +1,20 @@
  13028. +#include "amiga.h"
  13029. +#include <stdarg.h>
  13030. +
  13031. +int mkdir(char *name, mode_t mode)
  13032. +{
  13033. +  BPTR lock;
  13034. +  long amode;
  13035. +
  13036. +  chkabort();
  13037. +
  13038. +  if (lock = CreateDir(name))
  13039. +    {
  13040. +      UnLock(lock);
  13041. +      /* We remove script because mode 777 contains it by def, but it is
  13042. +         meaningless for directories */
  13043. +      amode = _make_protection(mode) & ~(FIBF_SCRIPT);
  13044. +      if (SetProtection(name, _make_protection(mode))) return 0;
  13045. +    }
  13046. +  ERROR;
  13047. +}
  13048. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/mkfifo.c amiga/fsf/emacs18/amiga/unix/src/mkfifo.c
  13049. --- baseline/fsf/emacs18/amiga/unix/src/mkfifo.c    Wed Dec 31 17:00:00 1969
  13050. +++ amiga/fsf/emacs18/amiga/unix/src/mkfifo.c    Sat Sep 28 00:00:00 1996
  13051. @@ -0,0 +1,4 @@
  13052. +#include "amiga.h"
  13053. +
  13054. +int mkfifo(char *path, int mode, int dev) { errno = EOSERR; return -1; }
  13055. +int mknod(char *path, int mode, int dev) { errno = EOSERR; return -1; }
  13056. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/mktemp.c amiga/fsf/emacs18/amiga/unix/src/mktemp.c
  13057. --- baseline/fsf/emacs18/amiga/unix/src/mktemp.c    Wed Dec 31 17:00:00 1969
  13058. +++ amiga/fsf/emacs18/amiga/unix/src/mktemp.c    Sat Sep 28 00:00:00 1996
  13059. @@ -0,0 +1,26 @@
  13060. +#include "amiga.h"
  13061. +#include <string.h>
  13062. +#include <stdio.h>
  13063. +
  13064. +char *mktemp(char *name)
  13065. +{
  13066. +  int l;
  13067. +  char *change = name + strlen(name) - 6;
  13068. +  char letter = 'a';
  13069. +  char id[9], *end_id;
  13070. +
  13071. +  chkabort();
  13072. +  _sprintf(id, "%lx", _us);
  13073. +  l = strlen(id);
  13074. +  end_id = l > 5 ? id + l - 5 : id;
  13075. +  _sprintf(change, "a%s", end_id);
  13076. +
  13077. +  while (letter <= 'z')
  13078. +    {
  13079. +      *change = letter;
  13080. +      if (access(name, 0)) return name;
  13081. +      letter++;
  13082. +    }
  13083. +  name[0] = '\0';
  13084. +  return name;
  13085. +}
  13086. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/open.c amiga/fsf/emacs18/amiga/unix/src/open.c
  13087. --- baseline/fsf/emacs18/amiga/unix/src/open.c    Wed Dec 31 17:00:00 1969
  13088. +++ amiga/fsf/emacs18/amiga/unix/src/open.c    Sat Sep 28 00:00:00 1996
  13089. @@ -0,0 +1,141 @@
  13090. +#include "amiga.h"
  13091. +#include "files.h"
  13092. +#include "amigaos.h"
  13093. +#include <utility/tagitem.h>
  13094. +#include <stdarg.h>
  13095. +#include <fcntl.h>
  13096. +#include <string.h>
  13097. +
  13098. +
  13099. +#undef open
  13100. +
  13101. +int __open(const char *path, int flags, ...)
  13102. +{
  13103. +  int fd, acc = flags & 3, rd, wr, exists = TRUE, amode;
  13104. +  struct FileInfoBlock *fib;
  13105. +  BPTR plock, fh;
  13106. +  long fdflags, protection;
  13107. +  APTR pwindow = _us->pr_WindowPtr;
  13108. +  ULONG create = MODE_READWRITE; /* Mode to use when creating files. */
  13109. +
  13110. +  chkabort();
  13111. +
  13112. +  rd = acc == O_RDONLY || acc == O_RDWR;
  13113. +  wr = acc == O_WRONLY || acc == O_RDWR;
  13114. +
  13115. +  if (stricmp(path, "NIL:") == 0) amode = -1;
  13116. +  else
  13117. +    {
  13118. +      _us->pr_WindowPtr = (APTR)-1;
  13119. +      plock = Lock(path, ACCESS_READ);
  13120. +      _us->pr_WindowPtr = pwindow;
  13121. +      if (!plock)
  13122. +    {
  13123. +      int err = convert_oserr(IoErr()), ok;
  13124. +
  13125. +      /* Devices like pipe: don't like Lock ... */
  13126. +      if (_OSERR == ERROR_ACTION_NOT_KNOWN ||
  13127. +          _OSERR == 0) /* Some devices (tape:) don't set IoErr() ... */
  13128. +        {
  13129. +          ok = TRUE;
  13130. +          /* Most non-lockable devices don't like MODE_READWRITE.
  13131. +         So we have to throw shareable files out the window */
  13132. +          create = MODE_NEWFILE;
  13133. +        }
  13134. +      else /* Missing file ok if we are creating. */ 
  13135. +        ok = err == ENOENT && (flags & O_CREAT);
  13136. +
  13137. +      if (ok)
  13138. +        {
  13139. +          va_list vmode;
  13140. +
  13141. +          exists = FALSE;
  13142. +          if (flags & O_CREAT)
  13143. +        {
  13144. +          if (flags & 0x8000) /* SAS C runtime called us, no mode */
  13145. +            amode = FIBF_EXECUTE; /* Maybe 0 ? */
  13146. +          else
  13147. +            {
  13148. +              va_start(vmode, flags);
  13149. +              amode = _make_protection(va_arg(vmode, int));
  13150. +              va_end(vmode);
  13151. +            }
  13152. +        }
  13153. +          else amode = -1;    /* Assume complete access */
  13154. +        }
  13155. +      else
  13156. +        {
  13157. +          errno = err;
  13158. +          return -1;
  13159. +        }
  13160. +    }
  13161. +      else /* File already exists, play with it */
  13162. +    {
  13163. +      /* Get protection */
  13164. +      if (!((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
  13165. +        Examine(plock, fib)))
  13166. +        {
  13167. +          if (fib) FreeDosObject(DOS_FIB, fib);
  13168. +          ERROR;
  13169. +        }
  13170. +      amode = fib->fib_Protection;
  13171. +      FreeDosObject(DOS_FIB, fib);
  13172. +      UnLock(plock);
  13173. +
  13174. +      /* Check access */
  13175. +      if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
  13176. +        {
  13177. +          errno = EEXIST;
  13178. +          return -1;
  13179. +        }
  13180. +      if ((rd && (amode & FIBF_READ) || wr && (amode & FIBF_WRITE)))
  13181. +        {
  13182. +          errno = EACCES;
  13183. +          return -1;
  13184. +        }
  13185. +
  13186. +      /* Truncate files, by opening in MODE_NEWFILE, then closing it.
  13187. +         This allows the file to be opened in shared mode after that (READWRITE or
  13188. +         OLDFILE), which is consistent with the unix semantics. */
  13189. +      if (flags & O_TRUNC)
  13190. +        {
  13191. +          BPTR tfh;
  13192. +
  13193. +          if (tfh = Open(path, MODE_NEWFILE)) Close(tfh);
  13194. +          else ERROR;
  13195. +        }
  13196. +    }
  13197. +    }
  13198. +  if (!(fh = Open(path, flags & O_CREAT ? create : MODE_OLDFILE)))
  13199. +    ERROR;
  13200. +
  13201. +  
  13202. +  /* Protection is set when file is closed because OFS & FFS
  13203. +     don't appreciate it being done on MODE_NEWFILE files. */
  13204. +  if ((flags & O_TRUNC) || !exists) protection = amode;
  13205. +  else protection = -1;
  13206. +
  13207. +  fdflags = 0;
  13208. +  if (rd) fdflags |= FI_READ;
  13209. +  if (wr) fdflags |= FI_WRITE;
  13210. +  if (flags & O_APPEND) fdflags |= O_APPEND;
  13211. +
  13212. +  fd = _alloc_amigafd(fh, protection, fdflags);
  13213. +  if (fd < 0)
  13214. +    {
  13215. +      _us->pr_WindowPtr = (APTR)-1;
  13216. +      Close(fh);
  13217. +      _us->pr_WindowPtr = pwindow;
  13218. +    }
  13219. +  return fd;
  13220. +}
  13221. +
  13222. +int open(const char *path, int flags, ...)
  13223. +{
  13224. +  va_list vmode;
  13225. +
  13226. +  va_start(vmode, flags);
  13227. +  return __open(path, flags, va_arg(vmode, int));
  13228. +  va_end(vmode);
  13229. +}
  13230. +
  13231. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/perror.c amiga/fsf/emacs18/amiga/unix/src/perror.c
  13232. --- baseline/fsf/emacs18/amiga/unix/src/perror.c    Wed Dec 31 17:00:00 1969
  13233. +++ amiga/fsf/emacs18/amiga/unix/src/perror.c    Sat Sep 28 00:00:00 1996
  13234. @@ -0,0 +1,26 @@
  13235. +#include "amiga.h"
  13236. +#include <errno.h>
  13237. +#include <string.h>
  13238. +#include <unistd.h>
  13239. +
  13240. +void perror(const char *s)
  13241. +{
  13242. +  char *err;
  13243. +  char amiga_err[81];
  13244. +
  13245. +  if (s && *s) 
  13246. +    {
  13247. +      write(2, s, strlen(s));
  13248. +      write(2, ": ", 2);
  13249. +    }
  13250. +  if (errno > 0 && errno <= sys_nerr) err = sys_errlist[errno];
  13251. +  else if (errno == -1) 
  13252. +    {
  13253. +      if (Fault(_OSERR, NULL, amiga_err, 81)) err = amiga_err;
  13254. +      else err = "42";        /* Shouldn't appear ... */
  13255. +    }
  13256. +  else err = "Unknown error code";
  13257. +
  13258. +  write(2, err, strlen(err));
  13259. +  write(2, "\n", 1);
  13260. +}
  13261. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/pipe.c amiga/fsf/emacs18/amiga/unix/src/pipe.c
  13262. --- baseline/fsf/emacs18/amiga/unix/src/pipe.c    Wed Dec 31 17:00:00 1969
  13263. +++ amiga/fsf/emacs18/amiga/unix/src/pipe.c    Sat Sep 28 00:00:00 1996
  13264. @@ -0,0 +1,354 @@
  13265. +#include "amiga.h"
  13266. +#include "files.h"
  13267. +#include "fifofd.h"
  13268. +#include "signals.h"
  13269. +#include <sys/filio.h>
  13270. +#include <fcntl.h>
  13271. +#include <signal.h>
  13272. +#include <string.h>
  13273. +#include <stdio.h>
  13274. +#include <exec/memory.h>
  13275. +#include <amiga/ioctl.h>
  13276. +
  13277. +/* The pipe system call, using fifo: */
  13278. +
  13279. +static struct MsgPort *create_fifo_port(void)
  13280. +{
  13281. +  struct MsgPort *port = AllocMem(sizeof(*port), MEMF_CLEAR | MEMF_PUBLIC);
  13282. +
  13283. +  if (!port) return 0;
  13284. +  port->mp_Node.ln_Type = NT_MSGPORT;
  13285. +  port->mp_Flags = PA_SIGNAL;
  13286. +  port->mp_SigBit = _fifo_sig;
  13287. +  port->mp_SigTask = _us;
  13288. +  NewList(&port->mp_MsgList);
  13289. +
  13290. +  return port;
  13291. +}
  13292. +
  13293. +static void delete_fifo_port(struct MsgPort *port)
  13294. +{
  13295. +  FreeMem(port, sizeof(*port));
  13296. +}
  13297. +
  13298. +static void free_fifo(struct fifoinfo *fi)
  13299. +{
  13300. +  if (fi->rfifo) CloseFifo(fi->rfifo, 0);
  13301. +  if (fi->wfifo) CloseFifo(fi->wfifo, FIFOF_EOF);
  13302. +  if (fi->rmsg) free(fi->rmsg);
  13303. +  if (fi->wmsg) free(fi->wmsg);
  13304. +  delete_fifo_port(fi->reply);
  13305. +  free(fi);
  13306. +}
  13307. +
  13308. +/* Code for fd's describing fifos */
  13309. +
  13310. +static ULONG __regargs fifo_select_start(void *userinfo, int rd, int wr)
  13311. +{
  13312. +  struct fifoinfo *fi = userinfo;
  13313. +
  13314. +  if (rd) RequestFifo(fi->rfifo, fi->rmsg, FREQ_RPEND);
  13315. +  if (wr) RequestFifo(fi->wfifo, fi->wmsg, FREQ_WAVAIL);
  13316. +  return 1UL << _fifo_sig;
  13317. +}
  13318. +
  13319. +static void __regargs fifo_select_poll(void *userinfo, int *rd, int *wr)
  13320. +{
  13321. +  struct fifoinfo *fi = userinfo;
  13322. +  int rabort = *rd, wabort = *wr;
  13323. +  struct Message *msg;
  13324. +
  13325. +  while (msg = GetMsg(fi->reply))
  13326. +    {
  13327. +      if (msg == fi->rmsg) rabort = 0;
  13328. +      else if (msg == fi->wmsg) wabort = 0;
  13329. +    }
  13330. +  if (rabort)
  13331. +    {
  13332. +      *rd = 0;
  13333. +      RequestFifo(fi->rfifo, fi->rmsg, FREQ_ABORT);
  13334. +    }
  13335. +  if (wabort)
  13336. +    {
  13337. +      *wr = 0;
  13338. +      RequestFifo(fi->wfifo, fi->wmsg, FREQ_ABORT);
  13339. +    }
  13340. +  while (rabort || wabort)
  13341. +    {
  13342. +      while (!(msg = GetMsg(fi->reply))) Wait(1UL << _fifo_sig);
  13343. +      if (msg == fi->rmsg) rabort = 0;
  13344. +      else if (msg == fi->wmsg) wabort = 0;
  13345. +    }
  13346. +  /* Clear any signals we may have left behind */
  13347. +  SetSignal(0, 1UL << _fifo_sig);
  13348. +}
  13349. +
  13350. +/* Using 4.2BSD style semantics, with reads from fifo's returning immediately when
  13351. +   data is available, and blocking for empty fifo's only when O_NDELAY was not
  13352. +   specified on open */
  13353. +
  13354. +static int __regargs fifo_read(void *userinfo, void *buffer, unsigned int length)
  13355. +{
  13356. +  struct fifoinfo *fi = userinfo;
  13357. +  char *chars;
  13358. +  long ready;
  13359. +
  13360. +  while (!(ready = ReadFifo(fi->rfifo, &chars, fi->skip)))
  13361. +    {
  13362. +      ULONG sigs;
  13363. +
  13364. +      fi->skip = 0;
  13365. +      if (fi->flags & O_NDELAY)
  13366. +    {
  13367. +      errno = EWOULDBLOCK;
  13368. +      return -1;
  13369. +    }
  13370. +      Delay(1);            /* Perversely, this improves the performance */
  13371. +      RequestFifo(fi->rfifo, fi->rmsg, FREQ_RPEND);
  13372. +      sigs = _wait_signals(1L << fi->reply->mp_SigBit);
  13373. +      RequestFifo(fi->rfifo, fi->rmsg, FREQ_ABORT);
  13374. +      while (!GetMsg(fi->reply)) Wait(1UL << _fifo_sig);
  13375. +
  13376. +      _handle_signals(sigs);
  13377. +    }
  13378. +  if (ready == -1) ready = 0;
  13379. +  if (ready > length) ready = length;
  13380. +  memcpy(buffer, chars, ready);
  13381. +  fi->skip = ready;
  13382. +
  13383. +  return (int)ready;
  13384. +}
  13385. +
  13386. +static int __regargs fifo_write(void *userinfo, void *_buffer, unsigned int length)
  13387. +{
  13388. +  struct fifoinfo *fi = userinfo;
  13389. +  long cansend, written;
  13390. +  char *buffer = _buffer;
  13391. +
  13392. +  if (length == 0)        /* Send EOF */
  13393. +    {
  13394. +      char *fname, sname[FIFO_NAMELEN + 2], mname[FIFO_NAMELEN + 2];
  13395. +
  13396. +      /* Send EOF */
  13397. +      CloseFifo(fi->wfifo, FIFOF_EOF);
  13398. +      /* And reopen fifo */
  13399. +      /* Docs say that this clears EOF flag, maybe we should wait a bit ? */
  13400. +      /* The writer is the "master" in fifo: terms */
  13401. +      strcpy(mname, fi->name); strcat(mname, "_m");
  13402. +      strcpy(sname, fi->name); strcat(sname, "_s");
  13403. +
  13404. +      fname = !(fi->flags & FI_READ) || (fi->flags & FIFO_MASTER) ? mname : sname;
  13405. +      fi->wfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
  13406. +               FIFOF_WRITE | FIFOF_RREQUIRED);
  13407. +      if (fi->wfifo)
  13408. +    {
  13409. +      fi->maxsend = BufSizeFifo(fi->wfifo) / 2;
  13410. +      return 0;
  13411. +    }
  13412. +      /* We're in trouble. From now on, all writes will fail */
  13413. +    }
  13414. +  else if (fi->wfifo)
  13415. +    {
  13416. +      cansend = fi->maxsend;
  13417. +      written = 0;
  13418. +      while (length > 0)
  13419. +    {
  13420. +      long sent;
  13421. +
  13422. +      if (cansend > length) cansend = length;
  13423. +      while ((sent = WriteFifo(fi->wfifo, buffer, cansend)) == 0)
  13424. +        {
  13425. +          ULONG sigs;
  13426. +          int signaled;
  13427. +
  13428. +          if (fi->flags & O_NDELAY)
  13429. +        {
  13430. +          if (written != 0) return (int)written;
  13431. +          errno = EWOULDBLOCK;
  13432. +          return -1;
  13433. +        }
  13434. +          RequestFifo(fi->wfifo, fi->wmsg, FREQ_WAVAIL);
  13435. +          sigs = _wait_signals(1L << fi->reply->mp_SigBit);
  13436. +          RequestFifo(fi->wfifo, fi->wmsg, FREQ_ABORT);
  13437. +          while (!GetMsg(fi->reply)) Wait(1UL << _fifo_sig);
  13438. +          signaled = _handle_signals(sigs);
  13439. +          if (signaled && written != 0) return (int)written;
  13440. +        }
  13441. +      if (sent < 0) /* Some problem has occured */ goto fail;
  13442. +      written += sent;
  13443. +      length -= sent;
  13444. +      buffer += sent;
  13445. +    }
  13446. +      return (int)written;
  13447. +    }
  13448. + fail:
  13449. +  /* Some problem has occured */
  13450. +  _sig_dispatch(SIGPIPE);
  13451. +  errno = EPIPE;
  13452. +  return -1;
  13453. +}
  13454. +
  13455. +static int __regargs fifo_lseek(void *userinfo, long rpos, int mode)
  13456. +{
  13457. +  errno = ESPIPE;
  13458. +  return -1;
  13459. +}
  13460. +
  13461. +static int __regargs fifo_close(void *userinfo, int internal)
  13462. +{
  13463. +  struct fifoinfo *fi = userinfo;
  13464. +
  13465. +  free_fifo(fi);
  13466. +  return 0;
  13467. +}
  13468. +
  13469. +static int __regargs fifo_ioctl(void *userinfo, int request, void *data)
  13470. +{
  13471. +  struct fifoinfo *fi = userinfo;
  13472. +
  13473. +  switch (request)
  13474. +    {
  13475. +    case FIONBIO:
  13476. +      if (*(int *)data) fi->flags |= O_NDELAY;
  13477. +      else fi->flags &= ~O_NDELAY;
  13478. +      return 0;
  13479. +    case _AMIGA_GET_FH: {
  13480. +      BPTR *fh = data;
  13481. +      char name[FIFO_NAMELEN + 12];
  13482. +
  13483. +      /* Get an AmigaOS fifo: onto the same fifo in the same role */
  13484. +      if ((fi->flags & (FI_READ | FI_WRITE)) == (FI_READ | FI_WRITE))
  13485. +    _sprintf(name, "fifo:%s/rwesK%s",
  13486. +         fi->name, fi->flags & FIFO_MASTER ? "m" : "");
  13487. +      else if (fi->flags & FI_READ) _sprintf(name, "fifo:%s/r", fi->name);
  13488. +      else _sprintf(name, "fifo:%s/mweK", fi->name);
  13489. +      *fh = Open(name, MODE_OLDFILE);
  13490. +
  13491. +      if (*fh) return 0;
  13492. +      ERROR;
  13493. +    }
  13494. +    case _AMIGA_FREE_FH: {
  13495. +      BPTR *fh = data;
  13496. +
  13497. +      if (*fh) Close(*fh);
  13498. +      return 0;
  13499. +    }
  13500. +    default: errno = EINVAL; return -1;
  13501. +    }
  13502. +}
  13503. +
  13504. +static int alloc_fifo(char *name, int reader, int writer, int master)
  13505. +{
  13506. +  struct fifoinfo *fi;
  13507. +  int fd;
  13508. +  struct MsgPort *reply = 0;
  13509. +  struct Message *rmsg = 0, *wmsg = 0;
  13510. +
  13511. +  if ((fi = (struct fifoinfo *)malloc(sizeof(struct fifoinfo))) &&
  13512. +      (reply = create_fifo_port()) &&
  13513. +      (rmsg = (struct Message *)malloc(sizeof(struct Message))) &&
  13514. +      (wmsg = (struct Message *)malloc(sizeof(struct Message))))
  13515. +    {
  13516. +      rmsg->mn_Node.ln_Type = NT_MESSAGE;
  13517. +      rmsg->mn_ReplyPort = reply;
  13518. +      rmsg->mn_Length = sizeof(*rmsg);
  13519. +      wmsg->mn_Node.ln_Type = NT_MESSAGE;
  13520. +      wmsg->mn_ReplyPort = reply;
  13521. +      wmsg->mn_Length = sizeof(*wmsg);
  13522. +      fi->reply = reply;
  13523. +      fi->rmsg = rmsg;
  13524. +      fi->wmsg = wmsg;
  13525. +      fi->rfifo = fi->wfifo = 0;
  13526. +
  13527. +      fi->flags = 0;
  13528. +      if (reader) fi->flags |= FI_READ;
  13529. +      if (writer) fi->flags |= FI_WRITE;
  13530. +      fd = _alloc_fd(fi, fi->flags, fifo_select_start, fifo_select_poll, fifo_read,
  13531. +             fifo_write, fifo_lseek, fifo_close, fifo_ioctl);
  13532. +      if (fd)
  13533. +    {
  13534. +      char *fname, sname[FIFO_NAMELEN + 2], mname[FIFO_NAMELEN + 2];
  13535. +
  13536. +      if (master) fi->flags |= FIFO_MASTER;
  13537. +      strcpy(fi->name, name);
  13538. +      /* The writer is the "master" in fifo: terms */
  13539. +      strcpy(mname, fi->name); strcat(mname, "_m");
  13540. +      strcpy(sname, fi->name); strcat(sname, "_s");
  13541. +
  13542. +      if (reader)
  13543. +        {
  13544. +          fname = !writer || !master ? mname : sname;
  13545. +          fi->rfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
  13546. +                   FIFOF_READ);
  13547. +        }
  13548. +      if (writer)
  13549. +        {
  13550. +          fname = !reader || master ? mname : sname;
  13551. +          fi->wfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
  13552. +                   FIFOF_WRITE | FIFOF_RREQUIRED);
  13553. +        }
  13554. +      if ((fi->rfifo || !reader) && (fi->wfifo || !writer))
  13555. +        {
  13556. +          if (fi->wfifo) fi->maxsend = BufSizeFifo(fi->wfifo) / 2;
  13557. +          fi->skip = 0;
  13558. +          return fd;
  13559. +        }
  13560. +      if (fi->rfifo) CloseFifo(fi->rfifo, 0);
  13561. +      if (fi->wfifo) CloseFifo(fi->wfifo, 0);
  13562. +    }
  13563. +      if (fd >= 0) _free_fd(fd);
  13564. +    }
  13565. +  if (rmsg) free(rmsg);
  13566. +  if (wmsg) free(wmsg);
  13567. +  if (reply) delete_fifo_port(reply);
  13568. +  if (fi) free(fi);
  13569. +  return -1;
  13570. +}
  13571. +
  13572. +int pipe(int fd[2])
  13573. +{
  13574. +  char name[FIFO_NAMELEN];
  13575. +  struct fileinfo *f0;
  13576. +
  13577. +  chkabort();
  13578. +  if (!_fifo_ok)
  13579. +    {
  13580. +      errno = ENXIO;
  13581. +      return -1;
  13582. +    }
  13583. +
  13584. +  _sprintf(name, "uxfifo.%lx", _fifo_base + _fifo_offset++);
  13585. +
  13586. +  if ((fd[0] = alloc_fifo(name, TRUE, FALSE, FALSE)) >= 0)
  13587. +    if ((fd[1] = alloc_fifo(name, FALSE, TRUE, FALSE)) >= 0) return 0;
  13588. +    else
  13589. +      {
  13590. +    if (f0 = _find_fd(fd[0])) free_fifo(f0->userinfo);
  13591. +    _free_fd(fd[0]);
  13592. +      }
  13593. +  return -1;
  13594. +}
  13595. +
  13596. +int socketpair(int domain, int type, int protocol, int sv[2])
  13597. +{
  13598. +  char name[FIFO_NAMELEN];
  13599. +  struct fileinfo *f0;
  13600. +
  13601. +  chkabort();
  13602. +  if (!_fifo_ok)
  13603. +    {
  13604. +      errno = ENXIO;
  13605. +      return -1;
  13606. +    }
  13607. +
  13608. +  _sprintf(name, "uxfifo.%lx", _fifo_base + _fifo_offset++);
  13609. +
  13610. +  if ((sv[0] = alloc_fifo(name, TRUE, TRUE, TRUE)) >= 0)
  13611. +    if ((sv[1] = alloc_fifo(name, TRUE, TRUE, FALSE)) >= 0) return 0;
  13612. +    else
  13613. +      {
  13614. +    if (f0 = _find_fd(sv[0])) free_fifo(f0->userinfo);
  13615. +    _free_fd(sv[0]);
  13616. +      }
  13617. +  return -1;
  13618. +}
  13619. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/popen.c amiga/fsf/emacs18/amiga/unix/src/popen.c
  13620. --- baseline/fsf/emacs18/amiga/unix/src/popen.c    Wed Dec 31 17:00:00 1969
  13621. +++ amiga/fsf/emacs18/amiga/unix/src/popen.c    Sat Sep 28 00:00:00 1996
  13622. @@ -0,0 +1,93 @@
  13623. +#include "amiga.h"
  13624. +#include "processes.h"
  13625. +#include "fifofd.h"
  13626. +#include <amiga/ioctl.h>
  13627. +#include <exec/memory.h>
  13628. +#include <dos/dosextens.h>
  13629. +#include <dos/dostags.h>
  13630. +#include <string.h>
  13631. +
  13632. +struct pprocess
  13633. +{
  13634. +  struct pprocess *next;
  13635. +  FILE *f;
  13636. +  int pid;
  13637. +};
  13638. +
  13639. +static struct pprocess *_pplist;
  13640. +
  13641. +FILE *popen(char *command, char *type)
  13642. +{
  13643. +  FILE *pipe;
  13644. +  BPTR in, out;
  13645. +  int close_in, close_out;
  13646. +  char pname[24];
  13647. +  struct pprocess *pp = (struct pprocess *)malloc(sizeof(struct pprocess));
  13648. +
  13649. +  _sprintf(pname, "pipe:uxopen.%lx", _fifo_base + _fifo_offset++);
  13650. +
  13651. +  if (type[0] == 'w' && type[1] == '\0')
  13652. +    {
  13653. +      pipe = fopen(pname, "w");
  13654. +      out = Output(); close_out = FALSE;
  13655. +      in = Open(pname, MODE_OLDFILE); close_in = TRUE;
  13656. +    }
  13657. +  else if (type[0] == 'r' && type[1] == '\0')
  13658. +    {
  13659. +      pipe = fopen(pname, "r");
  13660. +      in = Input(); close_in = FALSE;
  13661. +      out = Open(pname, MODE_NEWFILE); close_out = TRUE;
  13662. +    }
  13663. +  else
  13664. +    {
  13665. +      errno = EINVAL;
  13666. +      return NULL;
  13667. +    }
  13668. +
  13669. +  if (!in || !out) _seterr();
  13670. +  if (pipe && in && out && pp)
  13671. +    {
  13672. +      pp->pid = _start_process(command, in, close_in, out, close_out,
  13673. +                   -1, FALSE, 0, 0);
  13674. +      
  13675. +      if (pp->pid)
  13676. +    {
  13677. +      pp->next = _pplist;
  13678. +      _pplist = pp;
  13679. +      pp->f = pipe;
  13680. +
  13681. +      return pipe;
  13682. +    }
  13683. +    }
  13684. +  if (pp) free(pp);
  13685. +  if (in && close_in) Close(in);
  13686. +  if (out && close_out) Close(out);
  13687. +  if (pipe) fclose(pipe);
  13688. +
  13689. +  return NULL;
  13690. +}
  13691. +
  13692. +int pclose(FILE *f)
  13693. +{
  13694. +  struct pprocess **scan = &_pplist;
  13695. +
  13696. +  while (*scan)
  13697. +    {
  13698. +      if ((*scan)->f == f) /* found */
  13699. +    {
  13700. +      struct pprocess *son = *scan;
  13701. +      int status;
  13702. +      int pid = son->pid;
  13703. +
  13704. +      *scan = son->next;    /* Remove process from list */
  13705. +
  13706. +      fclose(son->f);
  13707. +      free(son);
  13708. +      /* Wait for process to terminate */
  13709. +      if (waitpid(pid, &status, NULL) >= 0) return status;
  13710. +      return -1;
  13711. +    }
  13712. +      scan = &(*scan)->next;
  13713. +    }
  13714. +  return -1;
  13715. +}
  13716. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/processes.c amiga/fsf/emacs18/amiga/unix/src/processes.c
  13717. --- baseline/fsf/emacs18/amiga/unix/src/processes.c    Wed Dec 31 17:00:00 1969
  13718. +++ amiga/fsf/emacs18/amiga/unix/src/processes.c    Sat Sep 28 00:00:00 1996
  13719. @@ -0,0 +1,56 @@
  13720. +#include "amiga.h"
  13721. +#include <clib/alib_protos.h>
  13722. +
  13723. +#include "processes.h"
  13724. +
  13725. +int _next_pid, _our_pid;
  13726. +struct MinList _processes;
  13727. +char _door_name[DOOR_LEN];
  13728. +struct MsgPort *_children_exit;
  13729. +struct MsgPort *_startup_port;
  13730. +
  13731. +void _free_entry(struct process *p)
  13732. +{
  13733. +  Remove((struct Node *)p);
  13734. +  free(p);
  13735. +}
  13736. +
  13737. +struct process *_find_pid(int pid)
  13738. +{
  13739. +  struct process *entry;
  13740. +
  13741. +  scan_processes (entry) if (entry->pid == pid) return entry;
  13742. +
  13743. +  return 0;
  13744. +}
  13745. +
  13746. +void _init_processes(void)
  13747. +{
  13748. +  NewList((struct List *)&_processes);
  13749. +  /* Choose a fairly unique pid for ourselves, but keep it within a range
  13750. +     which guarantees positive pid's for all created processes.
  13751. +     This range is further restricted to 23 bits so that a pid fits within the
  13752. +     range of an emacs number (generally 24 bits, though it is 26 on the Amiga) */
  13753. +  _our_pid = ((int)_us ^ _startup_time) & 0x7fffff;
  13754. +  _next_pid = _our_pid + 1;
  13755. +  _sprintf(_door_name, "door.%lx.%lx", _us, _startup_time);
  13756. +  if ((_startup_port = CreateMsgPort()) &&
  13757. +      (_children_exit = CreatePort(_door_name, 0))) return;
  13758. +
  13759. +  _fail("No memory");
  13760. +}
  13761. +
  13762. +void _cleanup_processes(void)
  13763. +{
  13764. +  if (_startup_port) DeleteMsgPort(_startup_port);
  13765. +  if (_children_exit)
  13766. +    {
  13767. +      struct exit_message *msg;
  13768. +
  13769. +      Forbid();
  13770. +      while (msg = (struct exit_message *)GetMsg(_children_exit))
  13771. +    FreeMem(msg, sizeof(struct exit_message));
  13772. +      DeletePort(_children_exit);
  13773. +      Permit();
  13774. +    }
  13775. +}
  13776. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/processes.h amiga/fsf/emacs18/amiga/unix/src/processes.h
  13777. --- baseline/fsf/emacs18/amiga/unix/src/processes.h    Wed Dec 31 17:00:00 1969
  13778. +++ amiga/fsf/emacs18/amiga/unix/src/processes.h    Sat Sep 28 00:00:00 1996
  13779. @@ -0,0 +1,46 @@
  13780. +#ifndef _PROCESSES_H
  13781. +#define _PROCESSES_H_
  13782. +
  13783. +struct process
  13784. +{
  13785. +    struct MinNode node;
  13786. +    struct Task *process;
  13787. +    int pid;
  13788. +    BPTR input;
  13789. +    enum { alive, exited } status;
  13790. +    int rc;
  13791. +};
  13792. +
  13793. +struct exit_message        /* Sent by children when exiting */
  13794. +{
  13795. +  struct Message m;
  13796. +  int pid;
  13797. +  int rc;
  13798. +};
  13799. +
  13800. +extern int _next_pid, _our_pid;
  13801. +extern struct MinList _processes;
  13802. +#define DOOR_LEN 32
  13803. +extern char _door_name[DOOR_LEN];
  13804. +extern struct MsgPort *_children_exit;
  13805. +extern struct MsgPort *_startup_port;
  13806. +
  13807. +#define scan_processes(p) for (p = (struct process *)_processes.mlh_Head; \
  13808. +                   p->node.mln_Succ; \
  13809. +                   p = (struct process *)p->node.mln_Succ)
  13810. +
  13811. +#define no_processes() (_processes.mlh_Head->mln_Succ == 0)
  13812. +
  13813. +void _free_entry(struct process *p);
  13814. +struct process *_find_pid(int pid);
  13815. +void _init_processes(void);
  13816. +void _cleanup_processes(void);
  13817. +
  13818. +int _start_process(char *command,
  13819. +           BPTR input, int close_input,
  13820. +           BPTR output, int close_output,
  13821. +           BPTR error, int close_error,
  13822. +           BPTR dir,
  13823. +           long stacksize);
  13824. +
  13825. +#endif
  13826. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/protection.c amiga/fsf/emacs18/amiga/unix/src/protection.c
  13827. --- baseline/fsf/emacs18/amiga/unix/src/protection.c    Wed Dec 31 17:00:00 1969
  13828. +++ amiga/fsf/emacs18/amiga/unix/src/protection.c    Sat Sep 28 00:00:00 1996
  13829. @@ -0,0 +1,73 @@
  13830. +#include "amiga.h"
  13831. +#include <sys/stat.h>
  13832. +
  13833. +int use_amiga_flags;
  13834. +
  13835. +int _make_protection(int mode)
  13836. +{
  13837. +  int amode;
  13838. +
  13839. +  if (use_amiga_flags) return mode;
  13840. +
  13841. +  /* We always turn archive off */
  13842. +  amode = 0;
  13843. +
  13844. +  /* Read: if any unix read */
  13845. +  if (mode & (S_IRUSR | S_IRGRP | S_IROTH)) amode |= FIBF_READ;
  13846. +
  13847. +  /* Write: if user write or group write
  13848. +     Delete: if user write or world write */
  13849. +  if (mode & S_IWUSR) amode |= FIBF_WRITE | FIBF_DELETE;
  13850. +  if (mode & S_IWGRP) amode |= FIBF_WRITE;
  13851. +  if (mode & S_IWOTH) amode |= FIBF_DELETE;
  13852. +
  13853. +  /* Execute: if group execute or user execute and not world execute
  13854. +     Script: if world execute or user execute ant not group execute */
  13855. +  if (mode & S_IXGRP) amode |= FIBF_EXECUTE;
  13856. +  if (mode & S_IXOTH) amode |= FIBF_SCRIPT;
  13857. +  if ((mode & (S_IXUSR | S_IXGRP | S_IXOTH)) == S_IXUSR)
  13858. +    amode |= FIBF_EXECUTE | FIBF_SCRIPT;
  13859. +
  13860. +  /* Pure: if sticky */
  13861. +  if (mode & S_ISVTX) amode |= FIBF_PURE;
  13862. +
  13863. +  /* Make correct bits active 0 */
  13864. +  amode ^= FIBF_READ | FIBF_WRITE | FIBF_EXECUTE | FIBF_DELETE;
  13865. +  return amode;
  13866. +}
  13867. +
  13868. +int _make_mode(int protection)
  13869. +{
  13870. +    int mode;
  13871. +
  13872. +    if (use_amiga_flags) return protection & ~S_IFMT;
  13873. +
  13874. +    mode = 0;
  13875. +    /* make all bits active 1 */
  13876. +    protection ^= FIBF_READ | FIBF_WRITE | FIBF_EXECUTE | FIBF_DELETE;
  13877. +
  13878. +    /* Read user, group, world if amiga read */
  13879. +    if (protection & FIBF_READ) mode |= S_IRUSR | S_IRGRP | S_IROTH;
  13880. +
  13881. +    /* Write:
  13882. +         user if amiga write & delete
  13883. +     group if amiga write
  13884. +     other if amiga delete */
  13885. +    if ((protection & (FIBF_WRITE | FIBF_DELETE)) == (FIBF_WRITE | FIBF_DELETE))
  13886. +      mode |= S_IWUSR;
  13887. +    if (protection & FIBF_WRITE) mode |= S_IWGRP;
  13888. +    if (protection & FIBF_DELETE) mode |= S_IWOTH;
  13889. +
  13890. +    /* Execute:
  13891. +         user if amiga execute or script
  13892. +     group if amiga execute
  13893. +     world if amiga script */
  13894. +    if (protection & (FIBF_EXECUTE | FIBF_SCRIPT)) mode |= S_IXUSR;
  13895. +    if (protection & FIBF_EXECUTE) mode |= S_IXGRP;
  13896. +    if (protection & FIBF_SCRIPT) mode |= S_IXOTH;
  13897. +
  13898. +    /* Sticky: if pure */
  13899. +    if (protection & FIBF_PURE) mode |= S_ISVTX;
  13900. +
  13901. +    return mode;
  13902. +}
  13903. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/pseudo_c.c amiga/fsf/emacs18/amiga/unix/src/pseudo_c.c
  13904. --- baseline/fsf/emacs18/amiga/unix/src/pseudo_c.c    Wed Dec 31 17:00:00 1969
  13905. +++ amiga/fsf/emacs18/amiga/unix/src/pseudo_c.c    Sat Sep 28 00:00:00 1996
  13906. @@ -0,0 +1,18 @@
  13907. +#include "amiga.h"
  13908. +#include "files.h"
  13909. +#include <fcntl.h>
  13910. +
  13911. +int _pseudo_close(int fd)
  13912. +{
  13913. +  struct fileinfo *fi;
  13914. +
  13915. +  chkabort();
  13916. +  if (fi = _find_fd(fd))
  13917. +    {
  13918. +      int err = fi->close(fi->userinfo, TRUE);
  13919. +
  13920. +      _free_fd(fd);
  13921. +      return err;
  13922. +    }
  13923. +  return -1;
  13924. +}
  13925. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/pwd.c amiga/fsf/emacs18/amiga/unix/src/pwd.c
  13926. --- baseline/fsf/emacs18/amiga/unix/src/pwd.c    Wed Dec 31 17:00:00 1969
  13927. +++ amiga/fsf/emacs18/amiga/unix/src/pwd.c    Sat Sep 28 00:00:00 1996
  13928. @@ -0,0 +1,13 @@
  13929. +#include "amiga.h"
  13930. +#include <pwd.h>
  13931. +
  13932. +struct passwd _amiga_user = {
  13933. +  NULL, "",
  13934. +  AMIGA_UID, AMIGA_GID,
  13935. +  0, "", NULL,
  13936. +  NULL, NULL
  13937. +  };
  13938. +
  13939. +struct passwd *getpwuid(uid_t uid) { return &_amiga_user; }
  13940. +struct passwd *getpwnam(char *name) { return &_amiga_user; }
  13941. +char *getlogin(void) { return _amiga_user.pw_name; }
  13942. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/read.c amiga/fsf/emacs18/amiga/unix/src/read.c
  13943. --- baseline/fsf/emacs18/amiga/unix/src/read.c    Wed Dec 31 17:00:00 1969
  13944. +++ amiga/fsf/emacs18/amiga/unix/src/read.c    Sat Sep 28 00:00:00 1996
  13945. @@ -0,0 +1,24 @@
  13946. +#include "amiga.h"
  13947. +#include "files.h"
  13948. +#include <fcntl.h>
  13949. +
  13950. +#undef read
  13951. +
  13952. +int __read(int fd, void *buffer, unsigned int length)
  13953. +{
  13954. +  struct fileinfo *fi;
  13955. +
  13956. +  chkabort();
  13957. +  if (fi = _find_fd(fd))
  13958. +    {
  13959. +      if (fi->flags & FI_READ) return fi->read(fi->userinfo, buffer, length);
  13960. +      errno = EACCES;
  13961. +    }
  13962. +  return -1;
  13963. +}
  13964. +
  13965. +int read(int fd, void *buffer, unsigned int length)
  13966. +{
  13967. +  return __read(fd, buffer, length);
  13968. +}
  13969. +
  13970. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/readlink.c amiga/fsf/emacs18/amiga/unix/src/readlink.c
  13971. --- baseline/fsf/emacs18/amiga/unix/src/readlink.c    Wed Dec 31 17:00:00 1969
  13972. +++ amiga/fsf/emacs18/amiga/unix/src/readlink.c    Sat Sep 28 00:00:00 1996
  13973. @@ -0,0 +1,38 @@
  13974. +#include "amiga.h"
  13975. +#include <string.h>
  13976. +
  13977. +int readlink(char *path, char *buf, int bufsiz)
  13978. +{
  13979. +  struct DevProc *dev = NULL;
  13980. +
  13981. +  chkabort();
  13982. +
  13983. +  while (1)
  13984. +    {
  13985. +      struct DevProc *newdev = GetDeviceProc(path, dev);
  13986. +      long err;
  13987. +      
  13988. +      FreeDeviceProc(dev);
  13989. +      if (!(dev = newdev)) ERROR;
  13990. +
  13991. +      buf[0] = '\0';
  13992. +      if (ReadLink(dev->dvp_Port, dev->dvp_Lock, path, buf, bufsiz + 1))
  13993. +    {
  13994. +      FreeDeviceProc(dev);
  13995. +      if (!buf[0])
  13996. +        {
  13997. +          /* Play games with apparent 2.x ram: bug */
  13998. +          errno = ENOENT;
  13999. +          return -1;
  14000. +        }
  14001. +      return strlen(buf);
  14002. +    }
  14003. +      err = IoErr();
  14004. +      if (!(err == ERROR_OBJECT_NOT_FOUND && (dev->dvp_Flags & DVPF_ASSIGN)))
  14005. +    {
  14006. +      FreeDeviceProc(dev);
  14007. +      errno = convert_oserr(err);
  14008. +      return -1;
  14009. +    }
  14010. +    }
  14011. +}
  14012. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/rename.c amiga/fsf/emacs18/amiga/unix/src/rename.c
  14013. --- baseline/fsf/emacs18/amiga/unix/src/rename.c    Wed Dec 31 17:00:00 1969
  14014. +++ amiga/fsf/emacs18/amiga/unix/src/rename.c    Sat Sep 28 00:00:00 1996
  14015. @@ -0,0 +1,24 @@
  14016. +#include "amiga.h"
  14017. +
  14018. +int rename(const char *from, const char *to)
  14019. +{
  14020. +  long err;
  14021. +
  14022. +  chkabort();
  14023. +  if (Rename(from, to)) return 0;
  14024. +  err = IoErr();
  14025. +  if (err == ERROR_OBJECT_EXISTS)
  14026. +    {
  14027. +      if (DeleteFile(to) && Rename(from, to)) return 0;
  14028. +      err = IoErr();
  14029. +
  14030. +      if (err == ERROR_DELETE_PROTECTED)
  14031. +    {
  14032. +      if (SetProtection(to, 0) && DeleteFile(to) && Rename(from, to))
  14033. +        return 0;
  14034. +      err = IoErr();
  14035. +    }
  14036. +    }
  14037. +  errno = convert_oserr(err);
  14038. +  return -1;
  14039. +}
  14040. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/rindex.c amiga/fsf/emacs18/amiga/unix/src/rindex.c
  14041. --- baseline/fsf/emacs18/amiga/unix/src/rindex.c    Wed Dec 31 17:00:00 1969
  14042. +++ amiga/fsf/emacs18/amiga/unix/src/rindex.c    Sat Sep 28 00:00:00 1996
  14043. @@ -0,0 +1,8 @@
  14044. +#include <string.h>
  14045. +
  14046. +#undef rindex
  14047. +
  14048. +char *rindex(char *str, int c)
  14049. +{
  14050. +  return strrchr(str, c);
  14051. +}
  14052. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/rmdir.c amiga/fsf/emacs18/amiga/unix/src/rmdir.c
  14053. --- baseline/fsf/emacs18/amiga/unix/src/rmdir.c    Wed Dec 31 17:00:00 1969
  14054. +++ amiga/fsf/emacs18/amiga/unix/src/rmdir.c    Sat Sep 28 00:00:00 1996
  14055. @@ -0,0 +1,31 @@
  14056. +#include "amiga.h"
  14057. +#include <utility/tagitem.h>
  14058. +
  14059. +int rmdir(char *name)
  14060. +{
  14061. +  struct FileInfoBlock *fib = 0;
  14062. +  BPTR lock = 0;
  14063. +
  14064. +  if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
  14065. +      (lock = Lock(name, ACCESS_READ)) &&
  14066. +      Examine(lock, fib))
  14067. +    {
  14068. +      int isdir = fib->fib_DirEntryType > 0;
  14069. +
  14070. +      UnLock(lock);
  14071. +      FreeDosObject(DOS_FIB, fib);
  14072. +
  14073. +      if (isdir)
  14074. +    {
  14075. +      if (DeleteFile(name)) return 0;
  14076. +      ERROR;
  14077. +    }
  14078. +      errno = ENOTDIR;
  14079. +      return -1;
  14080. +    }
  14081. +  errno = convert_oserr(IoErr());
  14082. +
  14083. +  if (lock) UnLock(lock);
  14084. +  if (fib) FreeDosObject(DOS_FIB, fib);
  14085. +  return -1;
  14086. +}
  14087. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/select.c amiga/fsf/emacs18/amiga/unix/src/select.c
  14088. --- baseline/fsf/emacs18/amiga/unix/src/select.c    Wed Dec 31 17:00:00 1969
  14089. +++ amiga/fsf/emacs18/amiga/unix/src/select.c    Sat Sep 28 00:00:00 1996
  14090. @@ -0,0 +1,72 @@
  14091. +#include "amiga.h"
  14092. +#include "files.h"
  14093. +#include "signals.h"
  14094. +#include "timers.h"
  14095. +#include <sys/time.h>
  14096. +
  14097. +int select(int nfds, int *rfds, int *wfds, int *efds, struct timeval *timeout)
  14098. +{
  14099. +  int fdmask, i, fdcount;
  14100. +  int poll = timeout && timeout->tv_sec == 0 && timeout->tv_usec == 0;
  14101. +  ULONG eventmask, sigs;
  14102. +  int orfds = rfds ? *rfds : 0, owfds = wfds ? *wfds : 0, oefds = efds ? *efds : 0;
  14103. +  
  14104. +  for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
  14105. +    {
  14106. +      int rd = orfds & fdmask, wr = owfds & fdmask;
  14107. +
  14108. +  chkabort();
  14109. +      if (rd || wr)
  14110. +    {
  14111. +      struct fileinfo *fi = _find_fd(i);
  14112. +
  14113. +      if (!fi) return -1;
  14114. +      if (rd && !(fi->flags & FI_READ) || wr && !(fi->flags & FI_WRITE))
  14115. +        {
  14116. +          errno = EACCES;
  14117. +          return -1;
  14118. +        }
  14119. +    }
  14120. +    }
  14121. +
  14122. +  if (timeout) _timer_start(_odd_timer, timeout->tv_sec, timeout->tv_usec);
  14123. +  else _timer_abort(_odd_timer);
  14124. +  fdcount = 0;
  14125. +  do
  14126. +    {
  14127. +      eventmask = 0;
  14128. +      for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
  14129. +    {
  14130. +      int rd = orfds & fdmask, wr = owfds & fdmask;
  14131. +
  14132. +      if (rd || wr)
  14133. +        {
  14134. +          struct fileinfo *fi = _find_fd(i);
  14135. +
  14136. +          eventmask |= fi->select_start(fi->userinfo, rd, wr);
  14137. +        }
  14138. +    }
  14139. +
  14140. +      if (eventmask == -1 || poll) /* Don't wait */ sigs = _check_signals(0);
  14141. +      else /* Wait*/ sigs = _wait_signals(_odd_sig | eventmask);
  14142. +
  14143. +      for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
  14144. +    {
  14145. +      int rd = orfds & fdmask, wr = owfds & fdmask;
  14146. +
  14147. +      if (rd || wr)
  14148. +        {
  14149. +          struct fileinfo *fi = _find_fd(i);
  14150. +
  14151. +          fi->select_poll(fi->userinfo, &rd, &wr);
  14152. +          if (!rd && rfds) *rfds &= ~fdmask;
  14153. +          if (!wr && wfds) *wfds &= ~fdmask;
  14154. +          if (rd || wr) fdcount++;
  14155. +        }
  14156. +    }
  14157. +      _handle_signals(sigs);
  14158. +    }
  14159. +  while (fdcount == 0 && !_timer_expired(_odd_timer) && !poll);
  14160. +
  14161. +  return fdcount;
  14162. +}
  14163. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/setjmp.c amiga/fsf/emacs18/amiga/unix/src/setjmp.c
  14164. --- baseline/fsf/emacs18/amiga/unix/src/setjmp.c    Wed Dec 31 17:00:00 1969
  14165. +++ amiga/fsf/emacs18/amiga/unix/src/setjmp.c    Sat Sep 28 00:00:00 1996
  14166. @@ -0,0 +1,15 @@
  14167. +#include "amiga.h"
  14168. +#include "signals.h"
  14169. +#include <setjmp.h>
  14170. +
  14171. +int setjmp(jmp_buf jb)
  14172. +{
  14173. +  jb[0] = _sig_mask;
  14174. +  return _setjmp(jb + 1);
  14175. +}
  14176. +
  14177. +void longjmp(jmp_buf jb, int val)
  14178. +{
  14179. +  sigsetmask(jb[0]);
  14180. +  _longjmp(jb + 1, val);
  14181. +}
  14182. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/siglist.c amiga/fsf/emacs18/amiga/unix/src/siglist.c
  14183. --- baseline/fsf/emacs18/amiga/unix/src/siglist.c    Wed Dec 31 17:00:00 1969
  14184. +++ amiga/fsf/emacs18/amiga/unix/src/siglist.c    Sat Sep 28 00:00:00 1996
  14185. @@ -0,0 +1,35 @@
  14186. +char *sys_siglist[] =
  14187. +{
  14188. +    "no signal",
  14189. +    "hangup",
  14190. +    "interrupt",
  14191. +    "quit",
  14192. +    "illegal instruction",
  14193. +    "trace trap",
  14194. +    "abort",
  14195. +    "emt instruction",
  14196. +    "floating point exception",
  14197. +    "kill",
  14198. +    "bus error",
  14199. +    "segmentation violation",
  14200. +    "bad argument to system call",
  14201. +    "write on a pipe with no one to read it",
  14202. +    "alarm clock",
  14203. +    "software termination signal from kill",
  14204. +    "status signal",
  14205. +    "sendable stop signal not from tty",
  14206. +    "stop signal from tty",
  14207. +    "continue a stopped process",
  14208. +    "child status has changed",
  14209. +    "background read attempted from control tty",
  14210. +    "background write attempted from control tty",
  14211. +    "input record available at control tty",
  14212. +    "exceeded CPU time limit",
  14213. +    "exceeded file size limit",
  14214. +    "unknown signal",
  14215. +    "unknown signal",
  14216. +    "window changed",
  14217. +    "unknown signal",
  14218. +    "user signal 1",
  14219. +    "user signal 2",
  14220. +};
  14221. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/signal.c amiga/fsf/emacs18/amiga/unix/src/signal.c
  14222. --- baseline/fsf/emacs18/amiga/unix/src/signal.c    Wed Dec 31 17:00:00 1969
  14223. +++ amiga/fsf/emacs18/amiga/unix/src/signal.c    Sat Sep 28 00:00:00 1996
  14224. @@ -0,0 +1,26 @@
  14225. +#include "amiga.h"
  14226. +#include "signals.h"
  14227. +
  14228. +int sigvec(int sig, struct sigvec *vec, struct sigvec *ovec)
  14229. +{
  14230. +  chkabort();
  14231. +  if (sig >= 1 && sig < NSIG)
  14232. +    {
  14233. +      if (ovec) *ovec = _sig_handlers[sig];
  14234. +      if (vec) _sig_handlers[sig] = *vec;
  14235. +      return 0;
  14236. +    }
  14237. +  errno = EINVAL;
  14238. +  return -1;
  14239. +}
  14240. +
  14241. +void (*signal(int sig,void (*fn)(int)))(int)
  14242. +{
  14243. +  struct sigvec vec, ovec;
  14244. +
  14245. +  vec.sv_handler = fn;
  14246. +  vec.sv_mask = 0;
  14247. +  /*vec.sv_flags = 0;*/
  14248. +  if (sigvec(sig, &vec, &ovec)) return -1;
  14249. +  return ovec.sv_handler;
  14250. +}
  14251. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/signals.c amiga/fsf/emacs18/amiga/unix/src/signals.c
  14252. --- baseline/fsf/emacs18/amiga/unix/src/signals.c    Wed Dec 31 17:00:00 1969
  14253. +++ amiga/fsf/emacs18/amiga/unix/src/signals.c    Sat Sep 28 00:00:00 1996
  14254. @@ -0,0 +1,211 @@
  14255. +#include "amiga.h"
  14256. +#include "timers.h"
  14257. +#include "signals.h"
  14258. +#include "processes.h"
  14259. +
  14260. +static ULONG signalsigs;    /* When one of these occur, call handle_signals */
  14261. +struct sigvec _sig_handlers[NSIG];
  14262. +long _sig_mask, _sig_pending;
  14263. +
  14264. +/* Alarm signal */
  14265. +/* ------------ */
  14266. +
  14267. +static struct timeinfo *alarm_timer;
  14268. +
  14269. +static int check_alarm(ULONG sigs)
  14270. +{
  14271. +  return alarm_timer && _timer_expired(alarm_timer);
  14272. +}
  14273. +
  14274. +void alarm(int secs)
  14275. +/* Effect: Schedule a SIGALRM after secs seconds
  14276. +*/
  14277. +{
  14278. +  _timer_start(alarm_timer, secs, 0);
  14279. +}
  14280. +
  14281. +static void init_alarm(void)
  14282. +{
  14283. +  if (!(alarm_timer = _alloc_timer())) _fail("Failed to create timer");
  14284. +  signalsigs |= _timer_sig(alarm_timer);
  14285. +}
  14286. +
  14287. +static void cleanup_alarm(void)
  14288. +{
  14289. +  _free_timer(alarm_timer);
  14290. +}
  14291. +
  14292. +/* SIGINT definition */
  14293. +/* ----------------- */
  14294. +
  14295. +static void init_sigint(void)
  14296. +{
  14297. +  signalsigs |= SIGBREAKF_CTRL_C;
  14298. +}
  14299. +
  14300. +/*static void cleanup_sigint(void) { }*/
  14301. +
  14302. +static int check_sigint(ULONG sigs)
  14303. +{
  14304. +  return (sigs & SIGBREAKF_CTRL_C) != 0;
  14305. +}
  14306. +
  14307. +/* SIGQUIT definition */
  14308. +/* ------------------ */
  14309. +
  14310. +static void init_sigquit(void)
  14311. +{
  14312. +  signalsigs |= SIGBREAKF_CTRL_D;
  14313. +}
  14314. +
  14315. +/*static void cleanup_sigquit(void) { }*/
  14316. +
  14317. +static int check_sigquit(ULONG sigs)
  14318. +{
  14319. +  return (sigs & SIGBREAKF_CTRL_D) != 0;
  14320. +}
  14321. +
  14322. +/* SIGCHLD definition */
  14323. +/* ------------------ */
  14324. +
  14325. +static void init_children(void)
  14326. +{
  14327. +  _init_processes();
  14328. +  signalsigs |= 1L << _children_exit->mp_SigBit;
  14329. +}
  14330. +
  14331. +static void cleanup_children(void)
  14332. +{
  14333. +  _cleanup_processes();
  14334. +}
  14335. +
  14336. +static int check_children(ULONG sigs)
  14337. +{
  14338. +  struct exit_message *msg;
  14339. +  int change = FALSE;
  14340. +  
  14341. +  while (msg = (struct exit_message *)GetMsg(_children_exit))
  14342. +    {
  14343. +      struct process *p;
  14344. +
  14345. +      if ((p = _find_pid(msg->pid)) && p->status == alive)
  14346. +    {
  14347. +      change = TRUE;
  14348. +      p->status = exited;
  14349. +      p->rc = msg->rc;
  14350. +    }
  14351. +      FreeMem(msg, sizeof(struct exit_message));
  14352. +    }
  14353. +  return change;
  14354. +}
  14355. +
  14356. +/* Signal dispatching */
  14357. +/* ------------------ */
  14358. +
  14359. +void _sig_dispatch(int sig)
  14360. +/* Effect: Do the action associated with signal sig it it isn't masked
  14361. +     Mask it for the duration of the signal exec
  14362. +*/
  14363. +{
  14364. +  void (*fn)(int);
  14365. +  long smask = 1 << sig;
  14366. +
  14367. +  if (sig == SIGKILL) _exit(0);
  14368. +
  14369. +  if (_sig_mask & smask) _sig_pending |= smask;
  14370. +  else
  14371. +    do
  14372. +      {
  14373. +    _sig_pending &= ~smask;
  14374. +    if (sig >= 0 && sig < NSIG)
  14375. +      {
  14376. +        fn = _sig_handlers[sig].sv_handler;
  14377. +
  14378. +        if (fn == SIG_DFL)
  14379. +          switch (sig)
  14380. +        {
  14381. +        case SIGCHLD: case SIGURG: case SIGWINCH: break;
  14382. +        case SIGINT: case SIGQUIT: _message("user interrupt");
  14383. +        default: _exit(0);
  14384. +        }
  14385. +        else if (fn != SIG_IGN)
  14386. +          {
  14387. +        int mask = smask | _sig_handlers[sig].sv_mask;
  14388. +
  14389. +        _sig_mask |= mask;
  14390. +        fn(sig);
  14391. +        _sig_mask &= ~mask;
  14392. +          }
  14393. +      }
  14394. +      }
  14395. +    while (_sig_pending & smask); /* Signal may have been generated during the
  14396. +                     signal handling function. */
  14397. +}
  14398. +
  14399. +ULONG _check_signals(ULONG extra_sigs)
  14400. +{
  14401. +  return SetSignal(0, signalsigs | extra_sigs);
  14402. +}
  14403. +
  14404. +ULONG _wait_signals(ULONG extra_sigs)
  14405. +{
  14406. +  return Wait(signalsigs | extra_sigs);
  14407. +}
  14408. +
  14409. +int _handle_signals(ULONG sigs)
  14410. +{
  14411. +  int signaled = 0;
  14412. +
  14413. +  if (check_alarm(sigs)) { signaled = 1; _sig_dispatch(SIGALRM); }
  14414. +  if (check_sigint(sigs)) { signaled = 1; _sig_dispatch(SIGINT); }
  14415. +  if (check_sigquit(sigs)) { signaled = 1; _sig_dispatch(SIGQUIT); }
  14416. +  if (check_children(sigs)) { signaled = 1; _sig_dispatch(SIGCHLD); }
  14417. +
  14418. +  return signaled;
  14419. +}
  14420. +
  14421. +/* Patch into SAS signal stuff so as to replace it */
  14422. +
  14423. +void CXFERR(int code)
  14424. +{
  14425. +    extern int _FPERR;
  14426. +
  14427. +    _FPERR = code;
  14428. +    _sig_dispatch(SIGFPE);
  14429. +}
  14430. +
  14431. +void chkabort(void)
  14432. +/* Checks all signals */
  14433. +{
  14434. +  _handle_signals(_check_signals(0));
  14435. +}
  14436. +
  14437. +void Chk_Abort(void) { chkabort(); }
  14438. +
  14439. +/* Initialisation */
  14440. +/* -------------- */
  14441. +
  14442. +void _init_signals(void)
  14443. +{
  14444. +  int i;
  14445. +
  14446. +  for (i = 0; i < NSIG; i++)
  14447. +    {
  14448. +      _sig_handlers[i].sv_handler = SIG_DFL;
  14449. +      _sig_handlers[i].sv_mask = 0;
  14450. +      /*_sig_handlers[i].sv_flags = 0;*/
  14451. +    }
  14452. +      
  14453. +  _sig_mask = _sig_pending = 0;
  14454. +  signalsigs = 0;
  14455. +
  14456. +  init_sigint(); init_sigquit(); init_alarm(); init_children();
  14457. +}
  14458. +
  14459. +void _cleanup_signals(void)
  14460. +{
  14461. +  cleanup_alarm();
  14462. +  /*cleanup_sigquit();*/
  14463. +  /*cleanup_sigint();*/
  14464. +  cleanup_children();
  14465. +}
  14466. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/signals.h amiga/fsf/emacs18/amiga/unix/src/signals.h
  14467. --- baseline/fsf/emacs18/amiga/unix/src/signals.h    Wed Dec 31 17:00:00 1969
  14468. +++ amiga/fsf/emacs18/amiga/unix/src/signals.h    Sat Sep 28 00:00:00 1996
  14469. @@ -0,0 +1,21 @@
  14470. +#ifndef SIGNALS_H
  14471. +#define SIGNALS_H
  14472. +
  14473. +#include <signal.h>
  14474. +
  14475. +extern struct sigvec _sig_handlers[NSIG];
  14476. +extern long _sig_mask, _sig_pending;
  14477. +
  14478. +void _sig_dispatch(int sig);
  14479. +/* Effect: Do the action associated with signal sig it it isn't masked
  14480. +     Mask it for the duration of the signal exec
  14481. +*/
  14482. +
  14483. +ULONG _check_signals(ULONG extra_sigs);
  14484. +ULONG _wait_signals(ULONG extra_sigs);
  14485. +int _handle_signals(ULONG sigs);
  14486. +
  14487. +void _init_signals(void);
  14488. +void _cleanup_signals(void);
  14489. +
  14490. +#endif
  14491. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/sigpause.c amiga/fsf/emacs18/amiga/unix/src/sigpause.c
  14492. --- baseline/fsf/emacs18/amiga/unix/src/sigpause.c    Wed Dec 31 17:00:00 1969
  14493. +++ amiga/fsf/emacs18/amiga/unix/src/sigpause.c    Sat Sep 28 00:00:00 1996
  14494. @@ -0,0 +1,16 @@
  14495. +#include "amiga.h"
  14496. +#include "signals.h"
  14497. +
  14498. +int sigpause(long mask)
  14499. +{
  14500. +  long oldmask = sigsetmask(mask);
  14501. +  ULONG sigs;
  14502. +
  14503. +  sigs = _check_signals(0);
  14504. +  while (!_handle_signals(sigs)) sigs = _wait_signals(0);
  14505. +  
  14506. +  sigsetmask(oldmask);
  14507. +
  14508. +  errno = EINTR;
  14509. +  return -1;
  14510. +}
  14511. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/sigsetmask.c amiga/fsf/emacs18/amiga/unix/src/sigsetmask.c
  14512. --- baseline/fsf/emacs18/amiga/unix/src/sigsetmask.c    Wed Dec 31 17:00:00 1969
  14513. +++ amiga/fsf/emacs18/amiga/unix/src/sigsetmask.c    Sat Sep 28 00:00:00 1996
  14514. @@ -0,0 +1,22 @@
  14515. +#include "amiga.h"
  14516. +#include "signals.h"
  14517. +
  14518. +long sigsetmask(long mask)
  14519. +{
  14520. +  int oldmask = _sig_mask, i, imask;
  14521. +
  14522. +  chkabort();
  14523. +  _sig_mask = mask;
  14524. +
  14525. +  /* Check all pending signals */
  14526. +  for (i = 0, imask = 1; i < NSIG; i++, imask <<= 1)
  14527. +    if ((_sig_pending & imask) && !(_sig_mask & imask))
  14528. +      _sig_dispatch(i);
  14529. +
  14530. +  return oldmask;
  14531. +}
  14532. +
  14533. +long sigblock(long mask)
  14534. +{
  14535. +  return sigsetmask(_sig_mask | mask);
  14536. +}
  14537. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/sleep.c amiga/fsf/emacs18/amiga/unix/src/sleep.c
  14538. --- baseline/fsf/emacs18/amiga/unix/src/sleep.c    Wed Dec 31 17:00:00 1969
  14539. +++ amiga/fsf/emacs18/amiga/unix/src/sleep.c    Sat Sep 28 00:00:00 1996
  14540. @@ -0,0 +1,13 @@
  14541. +#include "amiga.h"
  14542. +#include "timers.h"
  14543. +#include "signals.h"
  14544. +
  14545. +int sleep(unsigned seconds)
  14546. +{
  14547. +  chkabort();
  14548. +  _timer_start(_odd_timer, seconds, 0);
  14549. +
  14550. +  while (!_timer_expired(_odd_timer)) _handle_signals(_wait_signals(_odd_sig));
  14551. +
  14552. +  return 0;
  14553. +}
  14554. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/smakefile amiga/fsf/emacs18/amiga/unix/src/smakefile
  14555. --- baseline/fsf/emacs18/amiga/unix/src/smakefile    Wed Dec 31 17:00:00 1969
  14556. +++ amiga/fsf/emacs18/amiga/unix/src/smakefile    Sat Sep 28 00:00:00 1996
  14557. @@ -0,0 +1,128 @@
  14558. +OBJS=  mkdir.o devices.o processes.o kill.o abort.o error.o error_msg.o \
  14559. +       fcntl.o select.o read.o lseek.o chmod.o getwd.o mktemp.o link.o \
  14560. +       getenv.o time.o write.o creat.o sleep.o uid.o exec.o truncate.o \
  14561. +       strftime.o rmdir.o sigpause.o isatty.o mkfifo.o fchmod.o ftruncate.o \
  14562. +       bzero.o fibstat.o bcmp.o chown.o rename.o amigaos.o ctime.o open.o \
  14563. +       ioctl.o _exit.o gid.o protection.o umask.o _main.o signals.o grp.o \
  14564. +       pipe.o unlink.o alloca.o readlink.o pwd.o timeconvert.o amigatime.o \
  14565. +       bcopy.o utime.o files.o close.o fifofd.o timers.o index.o rindex.o \
  14566. +       pseudo_c.o wait4.o siglist.o perror.o gethostname.o setjmp.o allocdos.o \
  14567. +       message.o symlink.o fstat.o access.o dir_data.o dir.o stat.o \
  14568. +       sigsetmask.o signal.o getpid.o start.o popen.o tmpnam.o
  14569. +
  14570. +DEFS = define=SOFTLINK
  14571. +OPTIMIZE = opt
  14572. +CFLAGS = $(OPTS) $(DEFS) gst=amiga.sym $(OPTIMIZE)
  14573. +
  14574. +all: amiga.sym unix.lib unix-hard.lib
  14575. +
  14576. +ALLOBJS = $(OBJS) sprintf.o _setjmp.o
  14577. +
  14578. +unix.lib: $(ALLOBJS)
  14579. +    -delete unix.lib ram:unix.lib
  14580. +    oml ram:unix.lib <@<
  14581. +r $(ALLOBJS)
  14582. +<
  14583. +    copy ram:unix.lib ""
  14584. +
  14585. +unix-hard.lib: unix.lib fibstat-hard.o
  14586. +    copy unix.lib ram:
  14587. +    oml ram:unix.lib d fibstat.c
  14588. +    oml ram:unix.lib r fibstat-hard.o
  14589. +    copy ram:unix.lib unix-hard.lib
  14590. +
  14591. +sprintf.o: sprintf.asm
  14592. +    asm -osprintf.o -iINCLUDE: sprintf.asm
  14593. +
  14594. +_setjmp.o: _setjmp.asm
  14595. +    asm -o_setjmp.o -iINCLUDE: _setjmp.asm
  14596. +
  14597. +amiga.sym: amiga.h
  14598. +    copy amiga.h am.c
  14599. +    sc makegst=amiga.sym $(OPTS) am.c
  14600. +    delete am.c
  14601. +
  14602. +fibstat-hard.o: fibstat.c
  14603. +    $(CC) $(CFLAGS) DEF PRETEND_LINKED objname $@ fibstat.c
  14604. +
  14605. +mkdir.o: mkdir.c amiga.h
  14606. +devices.o: devices.c amiga.h
  14607. +processes.o: processes.c processes.h amiga.h
  14608. +kill.o: kill.c processes.h signals.h amiga.h
  14609. +abort.o: abort.c amiga.h
  14610. +error.o: error.c amiga.h
  14611. +error_msg.o: error_msg.c amiga.h
  14612. +fcntl.o: fcntl.c amiga.h
  14613. +select.o: select.c signals.h amiga.h
  14614. +read.o: read.c amiga.h
  14615. +lseek.o: lseek.c amiga.h
  14616. +chmod.o: chmod.c amiga.h
  14617. +getwd.o: getwd.c amiga.h
  14618. +mktemp.o: mktemp.c amiga.h
  14619. +link.o: link.c amiga.h
  14620. +getenv.o: getenv.c amiga.h
  14621. +time.o: time.c timeconvert.h amiga.h
  14622. +write.o: write.c amiga.h
  14623. +creat.o: creat.c amiga.h
  14624. +sleep.o: sleep.c signals.h amiga.h
  14625. +uid.o: uid.c amiga.h
  14626. +exec.o: exec.c processes.h amiga.h
  14627. +truncate.o: truncate.c amigaos.h amiga.h
  14628. +strftime.o: strftime.c
  14629. +rmdir.o: rmdir.c amiga.h
  14630. +sigpause.o: sigpause.c signals.h amiga.h
  14631. +isatty.o: isatty.c amiga.h
  14632. +mkfifo.o: mkfifo.c amiga.h
  14633. +fchmod.o: fchmod.c amiga.h
  14634. +ftruncate.o: ftruncate.c amiga.h
  14635. +bzero.o: bzero.c amiga.h
  14636. +fibstat.o: fibstat.c timeconvert.h fibstat.h amiga.h
  14637. +bcmp.o: bcmp.c amiga.h
  14638. +chown.o: chown.c amiga.h
  14639. +rename.o: rename.c amiga.h
  14640. +amigaos.o: amigaos.c signals.h amiga.h
  14641. +ctime.o: ctime.c
  14642. +open.o: open.c amigaos.h amiga.h
  14643. +ioctl.o: ioctl.c amiga.h
  14644. +_exit.o: _exit.c fifo_pragmas.h fifo.h fifofd.h signals.h amiga.h
  14645. +gid.o: gid.c amiga.h
  14646. +protection.o: protection.c amiga.h
  14647. +umask.o: umask.c amiga.h
  14648. +_main.o: _main.c fifo_pragmas.h fifo.h amigaos.h fifofd.h signals.h amiga.h
  14649. +signals.o: signals.c processes.h signals.h amiga.h
  14650. +grp.o: grp.c amiga.h
  14651. +pipe.o: pipe.c fifo_pragmas.h fifo.h fifofd.h signals.h amiga.h
  14652. +unlink.o: unlink.c amiga.h
  14653. +alloca.o: alloca.c
  14654. +readlink.o: readlink.c amiga.h
  14655. +pwd.o: pwd.c amiga.h
  14656. +timeconvert.o: timeconvert.c timeconvert.h amiga.h
  14657. +amigatime.o: amigatime.c timeconvert.h amiga.h
  14658. +bcopy.o: bcopy.c amiga.h
  14659. +utime.o: utime.c timeconvert.h amiga.h
  14660. +files.o: files.c amiga.h
  14661. +close.o: close.c amiga.h
  14662. +fifofd.o: fifofd.c fifo_pragmas.h fifo.h fifofd.h amiga.h
  14663. +timers.o: timers.c amiga.h
  14664. +index.o: index.c
  14665. +rindex.o: rindex.c
  14666. +pseudo_c.o: pseudo_c.c amiga.h
  14667. +wait4.o: wait4.c processes.h signals.h amiga.h
  14668. +siglist.o: siglist.c
  14669. +perror.o: perror.c amiga.h
  14670. +gethostname.o: gethostname.c amiga.h
  14671. +setjmp.o: setjmp.c signals.h amiga.h
  14672. +allocdos.o: allocdos.c
  14673. +message.o: message.c amiga.h
  14674. +symlink.o: symlink.c amiga.h
  14675. +fstat.o: fstat.c fibstat.h amiga.h
  14676. +access.o: access.c fibstat.h amiga.h
  14677. +dir_data.o: dir_data.c dir_data.h amiga.h
  14678. +dir.o: dir.c dir_data.h amiga.h
  14679. +stat.o: stat.c dir_data.h fibstat.h amiga.h
  14680. +sigsetmask.o: sigsetmask.c signals.h amiga.h
  14681. +signal.o: signal.c signals.h amiga.h
  14682. +getpid.o: getpid.c processes.h amiga.h
  14683. +start.o: start.c processes.h amiga.h
  14684. +popen.o: popen.c fifo_pragmas.h fifo.h processes.h fifofd.h amiga.h
  14685. +tmpnam.o: tmpnam.c amiga.h
  14686. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/smakefile.base amiga/fsf/emacs18/amiga/unix/src/smakefile.base
  14687. --- baseline/fsf/emacs18/amiga/unix/src/smakefile.base    Wed Dec 31 17:00:00 1969
  14688. +++ amiga/fsf/emacs18/amiga/unix/src/smakefile.base    Sat Sep 28 00:00:00 1996
  14689. @@ -0,0 +1,26 @@
  14690. +DEFS = define=SOFTLINK
  14691. +OPTIMIZE = debug=sf
  14692. +CFLAGS = $(OPTS) $(DEFS) gst=amiga.sym $(OPTIMIZE)
  14693. +
  14694. +all: amiga.sym unix.lib
  14695. +
  14696. +ALLOBJS = $(OBJS) sprintf.o _setjmp.o
  14697. +
  14698. +unix.lib: $(ALLOBJS)
  14699. +    -delete unix.lib ram:unix.lib
  14700. +    oml ram:unix.lib <@<
  14701. +r $(ALLOBJS)
  14702. +<
  14703. +    copy ram:unix.lib ""
  14704. +
  14705. +sprintf.o: sprintf.asm
  14706. +    asm -osprintf.o -iINCLUDE: sprintf.asm
  14707. +
  14708. +_setjmp.o: _setjmp.asm
  14709. +    asm -o_setjmp.o -iINCLUDE: _setjmp.asm
  14710. +
  14711. +amiga.sym: amiga.h
  14712. +    copy amiga.h am.c
  14713. +    sc makegst=amiga.sym $(OPTS) am.c
  14714. +    delete am.c
  14715. +
  14716. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/sprintf.asm amiga/fsf/emacs18/amiga/unix/src/sprintf.asm
  14717. --- baseline/fsf/emacs18/amiga/unix/src/sprintf.asm    Wed Dec 31 17:00:00 1969
  14718. +++ amiga/fsf/emacs18/amiga/unix/src/sprintf.asm    Sat Sep 28 00:00:00 1996
  14719. @@ -0,0 +1,29 @@
  14720. +    XDEF __sprintf
  14721. +    XREF _AbsExecBase
  14722. +    XREF _LVORawDoFmt
  14723. +
  14724. +    csect    text,0,,2,2
  14725. +
  14726. +__sprintf
  14727. +save    equ    16
  14728. +    movem.l    a2/a3/a6/d2,-(a7)    ; save bytes copied to stack
  14729. +
  14730. +    move.l    save+8(a7),a0
  14731. +    lea    save+12(a7),a1
  14732. +    lea    copychar(pc),a2
  14733. +    move.l    save+4(a7),a3
  14734. +    move.l    a3,d2
  14735. +
  14736. +    move.l    _AbsExecBase,a6
  14737. +    jsr    _LVORawDoFmt(a6)
  14738. +    move.l    a3,d0            ; # of characters printed
  14739. +    sub.l    d2,d0
  14740. +
  14741. +    movem.l    (a7)+,a2/a3/a6/d2
  14742. +    rts
  14743. +    
  14744. +copychar
  14745. +    move.b    d0,(a3)+
  14746. +    rts
  14747. +
  14748. +    end
  14749. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/start.c amiga/fsf/emacs18/amiga/unix/src/start.c
  14750. --- baseline/fsf/emacs18/amiga/unix/src/start.c    Wed Dec 31 17:00:00 1969
  14751. +++ amiga/fsf/emacs18/amiga/unix/src/start.c    Sat Sep 28 00:00:00 1996
  14752. @@ -0,0 +1,118 @@
  14753. +#include "amiga.h"
  14754. +#include "processes.h"
  14755. +#include <amiga/ioctl.h>
  14756. +#include <exec/memory.h>
  14757. +#include <dos/dosextens.h>
  14758. +#include <dos/dostags.h>
  14759. +#include <string.h>
  14760. +
  14761. +/* Variables used by a child that is starting up */
  14762. +struct MemList *_child_entry;    /* Memory used for child's code */
  14763. +static struct Message startup_message;
  14764. +struct exit_message *_child_exit;
  14765. +char *_child_command;
  14766. +int _child_command_len;
  14767. +char *_child_door_name;
  14768. +
  14769. +static void __saveds __interrupt _child_startup(void)
  14770. +{
  14771. +  struct exit_message *exit = _child_exit;
  14772. +  char *command = _child_command;
  14773. +  int command_len = _child_command_len;
  14774. +  char *door_name = _child_door_name;
  14775. +  struct Process *us = (struct Process *)FindTask(0);
  14776. +  struct DOSBase *local_DOSBase = DOSBase;
  14777. +#pragma libcall local_DOSBase local_SystemTagList 25E 2102
  14778. +  struct TagItem stags[2];
  14779. +  struct MsgPort *parent;
  14780. +
  14781. +  AddTail(&us->pr_Task.tc_MemEntry, _child_entry);
  14782. +
  14783. +  PutMsg(_startup_port, &startup_message);
  14784. +
  14785. +  /* From now on parent may disappear */
  14786. +  stags[0].ti_Tag = SYS_UserShell; stags[0].ti_Data = TRUE;
  14787. +  stags[1].ti_Tag = TAG_END;
  14788. +  exit->rc = local_SystemTagList(command, stags) << 8;
  14789. +
  14790. +  /* Send result to parent if he is around */
  14791. +  Forbid();
  14792. +  if (parent = FindPort(door_name)) PutMsg(parent, exit);
  14793. +  else FreeMem(exit, sizeof(struct exit_message));
  14794. +  Permit();
  14795. +
  14796. +  FreeMem(door_name, DOOR_LEN);
  14797. +  FreeMem(command, command_len);
  14798. +}
  14799. +
  14800. +int _start_process(char *command,
  14801. +           BPTR input, int close_input,
  14802. +           BPTR output, int close_output,
  14803. +           BPTR error, int close_error,
  14804. +           BPTR dir,
  14805. +           long stacksize)
  14806. +{
  14807. +  struct process *entry = (struct process *)malloc(sizeof(struct process));
  14808. +  static struct MemList alloc_child = { { 0 }, 1 };
  14809. +
  14810. +  _child_command_len = strlen(command) + 1;
  14811. +  _child_command = AllocMem(_child_command_len, MEMF_PUBLIC);
  14812. +  strcpy(_child_command, command);
  14813. +
  14814. +  _child_exit = AllocMem(sizeof(struct exit_message), MEMF_PUBLIC);
  14815. +  _child_door_name = AllocMem(DOOR_LEN, MEMF_PUBLIC);
  14816. +
  14817. +  alloc_child.ml_ME[0].me_Reqs = MEMF_PUBLIC;
  14818. +  alloc_child.ml_ME[0].me_Length = (char *)&_start_process - (char *)&_child_startup;
  14819. +  _child_entry = AllocEntry(&alloc_child);
  14820. +
  14821. +  if (entry && _child_command && _child_exit && _child_door_name &&
  14822. +      (long)_child_entry > 0)
  14823. +    {
  14824. +      memcpy(_child_entry->ml_ME[0].me_Addr, &_child_startup,
  14825. +         _child_entry->ml_ME[0].me_Length);
  14826. +      strcpy(_child_door_name, _door_name);
  14827. +
  14828. +      entry->pid = _next_pid++;
  14829. +      entry->input = input;
  14830. +
  14831. +      /* This message is sent by the child when it has started */
  14832. +      startup_message.mn_Length = sizeof(startup_message);
  14833. +      startup_message.mn_Node.ln_Type = NT_MESSAGE;
  14834. +
  14835. +      /* This message is sent by the child when it exits */
  14836. +      _child_exit->m.mn_Length = sizeof(*_child_exit);
  14837. +      _child_exit->m.mn_Node.ln_Type = NT_MESSAGE;
  14838. +      _child_exit->pid = entry->pid;
  14839. +
  14840. +      entry->process = CreateNewProcTags(NP_Entry, _child_entry->ml_ME[0].me_Addr,
  14841. +                     NP_Input, input,
  14842. +                     NP_CloseInput, (long)close_input,
  14843. +                     NP_Output, output,
  14844. +                     NP_CloseOutput, (long)close_output,
  14845. +                     NP_Error, error,
  14846. +                     NP_CloseError, (long)close_error,
  14847. +                     dir ? NP_CurrentDir : TAG_IGNORE, dir,
  14848. +                     NP_StackSize,
  14849. +                     stacksize > 0 ? stacksize : _stack_size,
  14850. +                     NP_Cli, TRUE,
  14851. +                     TAG_END);
  14852. +      if (entry->process)
  14853. +    {
  14854. +      do WaitPort(_startup_port); while (!GetMsg(_startup_port));
  14855. +      entry->status = alive;
  14856. +      AddHead((struct List *)&_processes, (struct Node *)entry);
  14857. +      return entry->pid;
  14858. +    }
  14859. +      errno = convert_oserr(IoErr());
  14860. +    }
  14861. +  else errno = ENOMEM;
  14862. +
  14863. +  if (entry) free(entry);
  14864. +  if (_child_command) FreeMem(_child_command, _child_command_len);
  14865. +  if (_child_exit) FreeMem(_child_exit, sizeof(struct exit_message));
  14866. +  if (_child_door_name) FreeMem(_child_door_name, DOOR_LEN);
  14867. +  if ((long)_child_entry > 0) FreeEntry(_child_entry);
  14868. +
  14869. +  return -1;
  14870. +}
  14871. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/stat.c amiga/fsf/emacs18/amiga/unix/src/stat.c
  14872. --- baseline/fsf/emacs18/amiga/unix/src/stat.c    Wed Dec 31 17:00:00 1969
  14873. +++ amiga/fsf/emacs18/amiga/unix/src/stat.c    Sat Sep 28 00:00:00 1996
  14874. @@ -0,0 +1,96 @@
  14875. +#include "amiga.h"
  14876. +#include "fibstat.h"
  14877. +#include "dir_data.h"
  14878. +#include <sys/stat.h>
  14879. +#include <string.h>
  14880. +
  14881. +static int attach (char *dest, int dlen, char *dirname, char *name)
  14882. +{
  14883. +  char *dirnamep = dirname;
  14884. +  
  14885. +  while (*dirnamep && --dlen > 0)
  14886. +    *dest++ = *dirnamep++;
  14887. +  /* Add '/' if `dirname' doesn't already end with it. */
  14888. +  if (dirnamep > dirname && dirnamep[-1] != '/' && dirnamep[-1] != ':' && --dlen > 0)
  14889. +    *dest++ = '/';
  14890. +  
  14891. +  while (*name && --dlen > 0)
  14892. +    *dest++ = *name++;
  14893. +  *dest = 0;
  14894. +  
  14895. +  return dlen > 0;
  14896. +}
  14897. +
  14898. +static struct FileInfoBlock fakefib;
  14899. +
  14900. +static int fakestat(int soft, char *name, struct stat *sbuf)
  14901. +{
  14902. +  /* See if we want information on the last file returned from readdir */
  14903. +  if (last_dir)
  14904. +    {
  14905. +      iDIR *last_info = (iDIR *)last_dir->dd_buf;
  14906. +  
  14907. +      if (last_info->cdir == _get_cd() &&
  14908. +      attach(_temp_fname, FNAMESIZE - 1, last_info->dirname,
  14909. +         last_entry->entry.d_name) &&
  14910. +      strcmp(_temp_fname, name) == 0 &&
  14911. +      (soft || last_entry->type != ST_SOFTLINK))
  14912. +    {
  14913. +      if (last_entry->type == ST_LINKFILE || last_entry->type == ST_LINKDIR)
  14914. +        {
  14915. +          /* Find real block, this allows tar to detect hard links */
  14916. +          BPTR cd = CurrentDir(last_dir->dd_fd);
  14917. +          BPTR l = Lock(last_entry->entry.d_name, ACCESS_READ);
  14918. +
  14919. +          if (l)
  14920. +        {
  14921. +          Examine(l, &fakefib);
  14922. +          UnLock(l);
  14923. +        }
  14924. +          CurrentDir(cd);
  14925. +        }
  14926. +      else
  14927. +        fakefib.fib_DiskKey = last_entry->entry.d_ino;
  14928. +
  14929. +      fakefib.fib_NumBlocks = last_entry->numblocks;
  14930. +      fakefib.fib_Size = last_entry->size;
  14931. +      fakefib.fib_Date = last_entry->date;
  14932. +      fakefib.fib_DirEntryType = last_entry->type;
  14933. +      fakefib.fib_Protection = last_entry->protection;
  14934. +      
  14935. +      _lfibstat(name, &fakefib, last_info->task, 0, sbuf);
  14936. +
  14937. +      return 1;
  14938. +    }
  14939. +    }
  14940. +  return 0;
  14941. +}
  14942. +
  14943. +int stat(char *name, struct stat *sbuf)
  14944. +{
  14945. +  chkabort();
  14946. +  if (fakestat(0, name, sbuf)) return 0;
  14947. +  return _fibstat(name, sbuf);
  14948. +}
  14949. +
  14950. +int lstat(char *name, struct stat *sbuf)
  14951. +{
  14952. +  chkabort();
  14953. +  if (fakestat(1, name, sbuf)) return 0;
  14954. +  if (readlink(name, _temp_fname, FNAMESIZE - 1) < 0) return _fibstat(name, sbuf);
  14955. +
  14956. +  /* Symbolic link, fake a stat block */
  14957. +  sbuf->st_dev = 0;
  14958. +  sbuf->st_rdev = 0;
  14959. +  sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
  14960. +  sbuf->st_blksize = 512;
  14961. +  sbuf->st_nlink = 1;        
  14962. +  sbuf->st_blocks = 0;
  14963. +  sbuf->st_size = strlen(_temp_fname);
  14964. +  sbuf->st_ino = 0;
  14965. +  /* 1-Jan-1978 */
  14966. +  sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = 252460800;
  14967. +  sbuf->st_mode = S_IFLNK | 0777;
  14968. +
  14969. +  return 0;
  14970. +}
  14971. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/strftime.c amiga/fsf/emacs18/amiga/unix/src/strftime.c
  14972. --- baseline/fsf/emacs18/amiga/unix/src/strftime.c    Wed Dec 31 17:00:00 1969
  14973. +++ amiga/fsf/emacs18/amiga/unix/src/strftime.c    Sat Sep 28 00:00:00 1996
  14974. @@ -0,0 +1,291 @@
  14975. +/*
  14976. + * Copyright (c) 1989 The Regents of the University of California.
  14977. + * All rights reserved.
  14978. + *
  14979. + * Redistribution and use in source and binary forms, with or without
  14980. + * modification, are permitted provided that the following conditions
  14981. + * are met:
  14982. + * 1. Redistributions of source code must retain the above copyright
  14983. + *    notice, this list of conditions and the following disclaimer.
  14984. + * 2. Redistributions in binary form must reproduce the above copyright
  14985. + *    notice, this list of conditions and the following disclaimer in the
  14986. + *    documentation and/or other materials provided with the distribution.
  14987. + * 3. All advertising materials mentioning features or use of this software
  14988. + *    must display the following acknowledgement:
  14989. + *    This product includes software developed by the University of
  14990. + *    California, Berkeley and its contributors.
  14991. + * 4. Neither the name of the University nor the names of its contributors
  14992. + *    may be used to endorse or promote products derived from this software
  14993. + *    without specific prior written permission.
  14994. + *
  14995. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  14996. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  14997. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  14998. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  14999. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  15000. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  15001. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  15002. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  15003. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  15004. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  15005. + * SUCH DAMAGE.
  15006. + */
  15007. +
  15008. +#if defined(LIBC_SCCS) && !defined(lint)
  15009. +static char sccsid[] = "@(#)strftime.c    5.11 (Berkeley) 2/24/91";
  15010. +#endif /* LIBC_SCCS and not lint */
  15011. +
  15012. +#include <sys/types.h>
  15013. +#include <sys/time.h>
  15014. +#include <tzfile.h>
  15015. +#include <string.h>
  15016. +
  15017. +static char *afmt[] = {
  15018. +    "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
  15019. +};
  15020. +static char *Afmt[] = {
  15021. +    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
  15022. +    "Saturday",
  15023. +};
  15024. +static char *bfmt[] = {
  15025. +    "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
  15026. +    "Oct", "Nov", "Dec",
  15027. +};
  15028. +static char *Bfmt[] = {
  15029. +    "January", "February", "March", "April", "May", "June", "July",
  15030. +    "August", "September", "October", "November", "December",
  15031. +};
  15032. +
  15033. +static size_t gsize;
  15034. +static char *pt;
  15035. +static int _add(), _conv(), _secs();
  15036. +
  15037. +size_t
  15038. +strftime(s, maxsize, format, t)
  15039. +    char *s;
  15040. +    size_t maxsize;
  15041. +    const char *format;
  15042. +    const struct tm *t;
  15043. +{
  15044. +    static size_t _fmt();
  15045. +
  15046. +    pt = s;
  15047. +    if ((gsize = maxsize) < 1)
  15048. +        return(0);
  15049. +    if (_fmt(format, t)) {
  15050. +        *pt = '\0';
  15051. +        return(maxsize - gsize);
  15052. +    }
  15053. +    return(0);
  15054. +}
  15055. +
  15056. +static size_t
  15057. +_fmt(format, t)
  15058. +    register char *format;
  15059. +    struct tm *t;
  15060. +{
  15061. +    for (; *format; ++format) {
  15062. +        if (*format == '%')
  15063. +            switch(*++format) {
  15064. +            case '\0':
  15065. +                --format;
  15066. +                break;
  15067. +            case 'A':
  15068. +                if (t->tm_wday < 0 || t->tm_wday > 6)
  15069. +                    return(0);
  15070. +                if (!_add(Afmt[t->tm_wday]))
  15071. +                    return(0);
  15072. +                continue;
  15073. +            case 'a':
  15074. +                if (t->tm_wday < 0 || t->tm_wday > 6)
  15075. +                    return(0);
  15076. +                if (!_add(afmt[t->tm_wday]))
  15077. +                    return(0);
  15078. +                continue;
  15079. +            case 'B':
  15080. +                if (t->tm_mon < 0 || t->tm_mon > 11)
  15081. +                    return(0);
  15082. +                if (!_add(Bfmt[t->tm_mon]))
  15083. +                    return(0);
  15084. +                continue;
  15085. +            case 'b':
  15086. +            case 'h':
  15087. +                if (t->tm_mon < 0 || t->tm_mon > 11)
  15088. +                    return(0);
  15089. +                if (!_add(bfmt[t->tm_mon]))
  15090. +                    return(0);
  15091. +                continue;
  15092. +            case 'C':
  15093. +                if (!_fmt("%a %b %e %H:%M:%S %Y", t))
  15094. +                    return(0);
  15095. +                continue;
  15096. +            case 'c':
  15097. +                if (!_fmt("%m/%d/%y %H:%M:%S", t))
  15098. +                    return(0);
  15099. +                continue;
  15100. +            case 'D':
  15101. +                if (!_fmt("%m/%d/%y", t))
  15102. +                    return(0);
  15103. +                continue;
  15104. +            case 'd':
  15105. +                if (!_conv(t->tm_mday, 2, '0'))
  15106. +                    return(0);
  15107. +                continue;
  15108. +            case 'e':
  15109. +                if (!_conv(t->tm_mday, 2, ' '))
  15110. +                    return(0);
  15111. +                continue;
  15112. +            case 'H':
  15113. +                if (!_conv(t->tm_hour, 2, '0'))
  15114. +                    return(0);
  15115. +                continue;
  15116. +            case 'I':
  15117. +                if (!_conv(t->tm_hour % 12 ?
  15118. +                    t->tm_hour % 12 : 12, 2, '0'))
  15119. +                    return(0);
  15120. +                continue;
  15121. +            case 'j':
  15122. +                if (!_conv(t->tm_yday + 1, 3, '0'))
  15123. +                    return(0);
  15124. +                continue;
  15125. +            case 'k':
  15126. +                if (!_conv(t->tm_hour, 2, ' '))
  15127. +                    return(0);
  15128. +                continue;
  15129. +            case 'l':
  15130. +                if (!_conv(t->tm_hour % 12 ?
  15131. +                    t->tm_hour % 12 : 12, 2, ' '))
  15132. +                    return(0);
  15133. +                continue;
  15134. +            case 'M':
  15135. +                if (!_conv(t->tm_min, 2, '0'))
  15136. +                    return(0);
  15137. +                continue;
  15138. +            case 'm':
  15139. +                if (!_conv(t->tm_mon + 1, 2, '0'))
  15140. +                    return(0);
  15141. +                continue;
  15142. +            case 'n':
  15143. +                if (!_add("\n"))
  15144. +                    return(0);
  15145. +                continue;
  15146. +            case 'p':
  15147. +                if (!_add(t->tm_hour >= 12 ? "PM" : "AM"))
  15148. +                    return(0);
  15149. +                continue;
  15150. +            case 'R':
  15151. +                if (!_fmt("%H:%M", t))
  15152. +                    return(0);
  15153. +                continue;
  15154. +            case 'r':
  15155. +                if (!_fmt("%I:%M:%S %p", t))
  15156. +                    return(0);
  15157. +                continue;
  15158. +            case 'S':
  15159. +                if (!_conv(t->tm_sec, 2, '0'))
  15160. +                    return(0);
  15161. +                continue;
  15162. +            case 's':
  15163. +                if (!_secs(t))
  15164. +                    return(0);
  15165. +                continue;
  15166. +            case 'T':
  15167. +            case 'X':
  15168. +                if (!_fmt("%H:%M:%S", t))
  15169. +                    return(0);
  15170. +                continue;
  15171. +            case 't':
  15172. +                if (!_add("\t"))
  15173. +                    return(0);
  15174. +                continue;
  15175. +            case 'U':
  15176. +                if (!_conv((t->tm_yday + 7 - t->tm_wday) / 7,
  15177. +                    2, '0'))
  15178. +                    return(0);
  15179. +                continue;
  15180. +            case 'W':
  15181. +                if (!_conv((t->tm_yday + 7 -
  15182. +                    (t->tm_wday ? (t->tm_wday - 1) : 6))
  15183. +                    / 7, 2, '0'))
  15184. +                    return(0);
  15185. +                continue;
  15186. +            case 'w':
  15187. +                if (!_conv(t->tm_wday, 1, '0'))
  15188. +                    return(0);
  15189. +                continue;
  15190. +            case 'x':
  15191. +                if (!_fmt("%m/%d/%y", t))
  15192. +                    return(0);
  15193. +                continue;
  15194. +            case 'y':
  15195. +                if (!_conv((t->tm_year + TM_YEAR_BASE)
  15196. +                    % 100, 2, '0'))
  15197. +                    return(0);
  15198. +                continue;
  15199. +            case 'Y':
  15200. +                if (!_conv(t->tm_year + TM_YEAR_BASE, 4, '0'))
  15201. +                    return(0);
  15202. +                continue;
  15203. +            case 'Z':
  15204. +                if (!t->tm_zone || !_add(t->tm_zone))
  15205. +                    return(0);
  15206. +                continue;
  15207. +            case '%':
  15208. +            /*
  15209. +             * X311J/88-090 (4.12.3.5): if conversion char is
  15210. +             * undefined, behavior is undefined.  Print out the
  15211. +             * character itself as printf(3) does.
  15212. +             */
  15213. +            default:
  15214. +                break;
  15215. +        }
  15216. +        if (!gsize--)
  15217. +            return(0);
  15218. +        *pt++ = *format;
  15219. +    }
  15220. +    return(gsize);
  15221. +}
  15222. +
  15223. +static
  15224. +_secs(t)
  15225. +    struct tm *t;
  15226. +{
  15227. +    static char buf[15];
  15228. +    register time_t s;
  15229. +    register char *p;
  15230. +    struct tm tmp;
  15231. +
  15232. +    /* Make a copy, mktime(3) modifies the tm struct. */
  15233. +    tmp = *t;
  15234. +    s = mktime(&tmp);
  15235. +    for (p = buf + sizeof(buf) - 2; s > 0 && p > buf; s /= 10)
  15236. +        *p-- = s % 10 + '0';
  15237. +    return(_add(++p));
  15238. +}
  15239. +
  15240. +static
  15241. +_conv(n, digits, pad)
  15242. +    int n, digits;
  15243. +    char pad;
  15244. +{
  15245. +    static char buf[10];
  15246. +    register char *p;
  15247. +
  15248. +    for (p = buf + sizeof(buf) - 2; n > 0 && p > buf; n /= 10, --digits)
  15249. +        *p-- = n % 10 + '0';
  15250. +    while (p > buf && digits-- > 0)
  15251. +        *p-- = pad;
  15252. +    return(_add(++p));
  15253. +}
  15254. +
  15255. +static
  15256. +_add(str)
  15257. +    register char *str;
  15258. +{
  15259. +    for (;; ++pt, --gsize) {
  15260. +        if (!gsize)
  15261. +            return(0);
  15262. +        if (!(*pt = *str++))
  15263. +            return(1);
  15264. +    }
  15265. +}
  15266. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/symlink.c amiga/fsf/emacs18/amiga/unix/src/symlink.c
  15267. --- baseline/fsf/emacs18/amiga/unix/src/symlink.c    Wed Dec 31 17:00:00 1969
  15268. +++ amiga/fsf/emacs18/amiga/unix/src/symlink.c    Sat Sep 28 00:00:00 1996
  15269. @@ -0,0 +1,14 @@
  15270. +#include "amiga.h"
  15271. +
  15272. +int symlink(char *from, char *to)
  15273. +{
  15274. +#ifdef SOFTLINK
  15275. +  chkabort();
  15276. +  if (MakeLink(to, from, 1)) return 0;
  15277. +  ERROR;
  15278. +#else
  15279. +  _OSERR = ERROR_NOT_IMPLEMENTED;
  15280. +  errno = EOSERR;
  15281. +  return -1;
  15282. +#endif
  15283. +}
  15284. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/time.c amiga/fsf/emacs18/amiga/unix/src/time.c
  15285. --- baseline/fsf/emacs18/amiga/unix/src/time.c    Wed Dec 31 17:00:00 1969
  15286. +++ amiga/fsf/emacs18/amiga/unix/src/time.c    Sat Sep 28 00:00:00 1996
  15287. @@ -0,0 +1,12 @@
  15288. +#include "amiga.h"
  15289. +#include "timeconvert.h"
  15290. +
  15291. +time_t time(time_t *clock)
  15292. +{
  15293. +  struct timeval now;
  15294. +
  15295. +  if (_gettime(&now) < 0) return -1;
  15296. +  if (clock) *clock = now.tv_secs;
  15297. +
  15298. +  return (time_t)now.tv_secs;
  15299. +}
  15300. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/timeconvert.c amiga/fsf/emacs18/amiga/unix/src/timeconvert.c
  15301. --- baseline/fsf/emacs18/amiga/unix/src/timeconvert.c    Wed Dec 31 17:00:00 1969
  15302. +++ amiga/fsf/emacs18/amiga/unix/src/timeconvert.c    Sat Sep 28 00:00:00 1996
  15303. @@ -0,0 +1,94 @@
  15304. +#include "amiga.h"
  15305. +#include "timeconvert.h"
  15306. +#include <time.h>
  15307. +#include <proto/timer.h>
  15308. +
  15309. +int _gettime(struct timeval *tp)
  15310. +{
  15311. +  struct tm *local;
  15312. +  time_t gmt;
  15313. +
  15314. +  GetSysTime(tp);
  15315. +  /* Correct for different epoch (78 vs 70) */
  15316. +  tp->tv_secs += 252460800;    
  15317. +
  15318. +#ifdef USE_LOCAL
  15319. +  /* correct for timezone */
  15320. +  local = gmtime(&tp->tv_secs);
  15321. +  local->tm_isdst = -1;        /* We don't know about dst */
  15322. +  gmt = mktime(local);
  15323. +
  15324. +  if (gmt == -1)
  15325. +    {
  15326. +      errno = EINVAL;
  15327. +      return -1;
  15328. +    }
  15329. +  tp->tv_secs = gmt;
  15330. +#endif
  15331. +  return 0;
  15332. +}
  15333. +
  15334. +#ifdef USE_LOCAL
  15335. +
  15336. +/* System is storing local time */
  15337. +
  15338. +void _gmt2amiga(time_t time, struct DateStamp *date)
  15339. +{
  15340. +  struct tm *local, *gmt;
  15341. +
  15342. +  local = localtime(&time);
  15343. +  gmt = gmtime(&time);
  15344. +  date->ds_Tick = 50 * local->tm_sec;
  15345. +  date->ds_Minute = local->tm_min + local->tm_hour * 60;
  15346. +
  15347. +  /* Now calculate the day assuming we are in GMT */
  15348. +  date->ds_Days = (time - 252460800) / 86400;
  15349. +  /* And correct by comparing local with GMT */
  15350. +  if (local->tm_year < gmt->tm_year ||
  15351. +      local->tm_year == gmt->tm_year && local->tm_yday < gmt->tm_yday)
  15352. +    date->ds_Days--;
  15353. +  if (local->tm_year > gmt->tm_year ||
  15354. +      local->tm_year == gmt->tm_year && local->tm_yday > gmt->tm_yday)
  15355. +    date->ds_Days++;
  15356. +}
  15357. +
  15358. +time_t _amiga2gmt(struct DateStamp *date)
  15359. +{
  15360. +  struct tm *local;
  15361. +  time_t secs;
  15362. +
  15363. +  secs = date->ds_Tick / 50 + date->ds_Minute * 60 + date->ds_Days * 86400 +
  15364. +    252460800;
  15365. +  local = gmtime(&secs);
  15366. +  local->tm_isdst = -1;        /* We don't know about dst */
  15367. +
  15368. +  return mktime(local);
  15369. +}
  15370. +
  15371. +#else
  15372. +
  15373. +/* System is storing GMT */
  15374. +/* Leap seconds are not handled !! */
  15375. +
  15376. +void _gmt2amiga(time_t time, struct DateStamp *date)
  15377. +{
  15378. +  time_t time78, day_secs;
  15379. +
  15380. +  time78 = time - 252460800;    /* Change Epoch */
  15381. +  date->ds_Days = time78 / 86400;
  15382. +  day_secs = time78 % 86400;
  15383. +  date->ds_Minute = day_secs / 60;
  15384. +  date->ds_Tick = 50 * (day_secs % 60);
  15385. +}
  15386. +
  15387. +time_t _amiga2gmt(struct DateStamp *date)
  15388. +{
  15389. +  time_t secs;
  15390. +
  15391. +  secs = date->ds_Tick / 50 + date->ds_Minute * 60 + date->ds_Days * 86400 +
  15392. +    252460800;
  15393. +
  15394. +  return secs;
  15395. +}
  15396. +
  15397. +#endif
  15398. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/timeconvert.h amiga/fsf/emacs18/amiga/unix/src/timeconvert.h
  15399. --- baseline/fsf/emacs18/amiga/unix/src/timeconvert.h    Wed Dec 31 17:00:00 1969
  15400. +++ amiga/fsf/emacs18/amiga/unix/src/timeconvert.h    Sat Sep 28 00:00:00 1996
  15401. @@ -0,0 +1,27 @@
  15402. +#ifndef TIMECONVERT_H
  15403. +#define TIMECONVERT_H
  15404. +
  15405. +#include <time.h>
  15406. +
  15407. +int _gettime(struct timeval *tp);
  15408. +/* Effect: Store GMT time into tp.
  15409. +     If USE_LOCAL is defined, assume system stores local time,
  15410. +     otherwise it stores GMT.
  15411. +*/
  15412. +
  15413. +void _gmt2amiga(time_t time, struct DateStamp *date);
  15414. +/* Effect: Converts a time expressed in seconds since
  15415. +     the 1 January 1970 0:00:00 GMT, to an Amiga time.
  15416. +     If USE_LOCAL is defined, Amiga time is assumed to
  15417. +     be stored as local time, otherwise as GMT.
  15418. +   Modifies: date, to contain the time in Amiga format
  15419. +*/
  15420. +
  15421. +time_t _amiga2gmt(struct DateStamp *date);
  15422. +/* Effect: Convert a date expressed in Amiga format (as a 
  15423. +     local time if USE_LOCAL is defined, as GMT otherwise)
  15424. +     to a number of seconds since 1 January 1970 0:00:00 GMT.
  15425. +   Returns: this latter time
  15426. +*/
  15427. +
  15428. +#endif
  15429. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/timers.c amiga/fsf/emacs18/amiga/unix/src/timers.c
  15430. --- baseline/fsf/emacs18/amiga/unix/src/timers.c    Wed Dec 31 17:00:00 1969
  15431. +++ amiga/fsf/emacs18/amiga/unix/src/timers.c    Sat Sep 28 00:00:00 1996
  15432. @@ -0,0 +1,72 @@
  15433. +#include "amiga.h"
  15434. +#include "devices.h"
  15435. +#include "timers.h"
  15436. +
  15437. +struct timeinfo *_alloc_timer(void)
  15438. +{
  15439. +  struct timeinfo *timer = AllocMem(sizeof(struct timeinfo), 0);
  15440. +
  15441. +  if (!timer) return 0;
  15442. +  timer->sent = FALSE;
  15443. +  timer->io = (struct timerequest *)
  15444. +    _device_open("timer.device", UNIT_VBLANK, 0L, 0L, 0, sizeof(struct timerequest));
  15445. +  if (!timer->io)
  15446. +    {
  15447. +      FreeMem(timer, sizeof(struct timeinfo));
  15448. +      return 0;
  15449. +    }
  15450. +  return timer;
  15451. +}
  15452. +
  15453. +void _free_timer(struct timeinfo *timer)
  15454. +{
  15455. +  if (timer)
  15456. +    {
  15457. +      _timer_abort(timer);
  15458. +      _device_close(timer->io);
  15459. +      FreeMem(timer, sizeof(struct timeinfo));
  15460. +    }
  15461. +}
  15462. +
  15463. +void _timer_abort(struct timeinfo *timer)
  15464. +{
  15465. +  if (timer->sent)
  15466. +    {
  15467. +      AbortIO(timer->io);
  15468. +      WaitIO(timer->io);
  15469. +      /* Clear timer io signal */
  15470. +      /*SetSignal(0, timer_sig(timer));*/
  15471. +      timer->sent = FALSE;
  15472. +    }
  15473. +}
  15474. +
  15475. +ULONG _timer_sig(struct timeinfo *timer)
  15476. +{
  15477. +  return 1UL << timer->io->tr_node.io_Message.mn_ReplyPort->mp_SigBit;
  15478. +}
  15479. +
  15480. +void _timer_start(struct timeinfo *timer, int secs, int micros)
  15481. +/* _timer_start(timer, 0) stops a timer */
  15482. +{
  15483. +  _timer_abort(timer);
  15484. +  if (secs || micros)
  15485. +    {
  15486. +      timer->io->tr_time.tv_secs = secs;
  15487. +      timer->io->tr_time.tv_micro = micros;
  15488. +      timer->io->tr_node.io_Command = TR_ADDREQUEST;
  15489. +      SendIO(timer->io);
  15490. +      timer->sent = TRUE;
  15491. +    }
  15492. +}
  15493. +
  15494. +int _timer_expired(struct timeinfo *timer)
  15495. +/* A non-started timer is defined to not have expired */
  15496. +{
  15497. +  if (timer->sent && CheckIO(timer->io))
  15498. +    {
  15499. +      WaitIO(timer->io);
  15500. +      timer->sent = FALSE;
  15501. +      return TRUE;
  15502. +    }
  15503. +  return FALSE;
  15504. +}
  15505. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/tmpnam.c amiga/fsf/emacs18/amiga/unix/src/tmpnam.c
  15506. --- baseline/fsf/emacs18/amiga/unix/src/tmpnam.c    Wed Dec 31 17:00:00 1969
  15507. +++ amiga/fsf/emacs18/amiga/unix/src/tmpnam.c    Sat Sep 28 00:00:00 1996
  15508. @@ -0,0 +1,13 @@
  15509. +#include "amiga.h"
  15510. +#include <string.h>
  15511. +#include <stdio.h>
  15512. +
  15513. +char *tmpnam(char *s)
  15514. +{
  15515. +  static char tmpbuf[L_tmpnam];
  15516. +
  15517. +  if (!s) s = tmpbuf;
  15518. +
  15519. +  strcpy(s, P_tmpdir "tmp_XXXXXX");
  15520. +  return mktemp(s);
  15521. +}
  15522. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/truncate.c amiga/fsf/emacs18/amiga/unix/src/truncate.c
  15523. --- baseline/fsf/emacs18/amiga/unix/src/truncate.c    Wed Dec 31 17:00:00 1969
  15524. +++ amiga/fsf/emacs18/amiga/unix/src/truncate.c    Sat Sep 28 00:00:00 1996
  15525. @@ -0,0 +1,21 @@
  15526. +#include "amiga.h"
  15527. +#include "amigaos.h"
  15528. +
  15529. +int truncate(char *path, off_t length)
  15530. +{
  15531. +  BPTR fh = Open(path, MODE_OLDFILE);
  15532. +  int err;
  15533. +
  15534. +  chkabort();
  15535. +  if (fh)
  15536. +    {
  15537. +      int ret = _do_truncate(fh, length);
  15538. +
  15539. +      if (Close(fh) || ret) return ret;
  15540. +      err = IoErr();
  15541. +    }
  15542. +  else err = IoErr();
  15543. +
  15544. +  errno = convert_oserr(err);
  15545. +  return -1;
  15546. +}
  15547. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/uid.c amiga/fsf/emacs18/amiga/unix/src/uid.c
  15548. --- baseline/fsf/emacs18/amiga/unix/src/uid.c    Wed Dec 31 17:00:00 1969
  15549. +++ amiga/fsf/emacs18/amiga/unix/src/uid.c    Sat Sep 28 00:00:00 1996
  15550. @@ -0,0 +1,4 @@
  15551. +#include "amiga.h"
  15552. +
  15553. +uid_t getuid(void) { return AMIGA_UID; }
  15554. +uid_t geteuid(void) { return AMIGA_UID; }
  15555. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/umask.c amiga/fsf/emacs18/amiga/unix/src/umask.c
  15556. --- baseline/fsf/emacs18/amiga/unix/src/umask.c    Wed Dec 31 17:00:00 1969
  15557. +++ amiga/fsf/emacs18/amiga/unix/src/umask.c    Sat Sep 28 00:00:00 1996
  15558. @@ -0,0 +1,3 @@
  15559. +#include "amiga.h"
  15560. +
  15561. +int umask(int mask) { return 0; }
  15562. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/unix-hard.lib.uue amiga/fsf/emacs18/amiga/unix/src/unix-hard.lib.uue
  15563. --- baseline/fsf/emacs18/amiga/unix/src/unix-hard.lib.uue    Wed Dec 31 17:00:00 1969
  15564. +++ amiga/fsf/emacs18/amiga/unix/src/unix-hard.lib.uue    Sat Sep 28 00:00:00 1996
  15565. @@ -0,0 +1,1186 @@
  15566. +begin 666 unix-hard.lib
  15567. +M```#^@``*UH```/I````"2!O``0@UTC0_/QP`$YU(&\`!"`O``AF`G`!(EA,
  15568. +MT/S\6(].T0```_(```/I````#$CG(#(@;P`80^\`'$7Z`!PF;P`4)`LL>0``
  15569. +M``!.K@``(`N0@DS?3`1.=1;`3G4``````^^!```#7T%B<T5X96-"87-E````
  15570. +M`0```!B&```#7TQ63U)A=T1O1FUT`````0```!X````````#\@```^D````*
  15571. +M(&\`!"\-*D@@#68$2^P``$'L```B31+89OPO#4ZZ``!83RI?3G4``````_@`
  15572. +M```!`````0```!(````!`````@````X````````#[X,```)?;6MT96UP````
  15573. +M``$````>`````````_$````#`````$]05%,`!`!````#\@```^H````$=#IT
  15574. +M;7!?6%A86%A8`````````_(```/K````"0```_(```/I````;R!O``0B;P`(
  15575. +MGOP`($CG+Q8F22](`"`O20`D<`Q.N@``*D`@+```4JP``"(L``#2@"\!2&P`
  15576. +M`$AO`#!.N@``3^\`#'!WL!-F-DHK``%F,$'O`"A#[``03KH``"9`+&P``$ZN
  15577. +M_\0N`'P`0>\`*"(()#P```/M3J[_XBH`>`%@1G!RL!-F-DHK``%F,$'O`"A#
  15578. +M[``23KH``"9`+&P``$ZN_\HJ`'@`0>\`*"(()#P```/N3J[_XBX`?`%@"G`6
  15579. +M*4```&```(Q*A6<$2H=F!$ZZ```@"V="2H5G/DJ'9SH@#6<V<``O`"\`+P!(
  15580. +M>/__+P8O!R`%(@0@;P`X3KH``$_O`!@K0``(9Q`JK```*4T``"M+``0@"V`Z
  15581. +M(`UG!B!-3KH``$J%9PY*A&<*(@4L;```3J[_W$J'9PY*AF<*(@<L;```3J[_
  15582. +MW"`+9P8@2TZZ``!P`$S?:/3>_``@3G4@;P`$44](YP$T)DA+[```+T@`$&`Z
  15583. +M(&H`!+'+9C`F52XK``@JDR!K``1.N@``($M.N@``0J=(;P`8+P=.N@``3^\`
  15584. +M#$J`:PX@+P`48`HJ2B15(`IFP'#_3-\L@%!/3G4``````_@````#`````0``
  15585. +M`)````!4````-`````,````"```!:````0P```$(`````````^^#```"0&UA
  15586. +M;&QO8P`````!````'H8```1?7V9I9F]?;V9F<V5T`````````@```"@````D
  15587. +MA@```U]?9FEF;U]B87-E``````$````L@P```U]?<W!R:6YT9@````````$`
  15588. +M```\@P```D!F;W!E;@```````@```)0```!8A@```E]$3U-"87-E````!```
  15589. +M`3X```$L````F@```%Z&```"7V5R<FYO```````!````OH,```)`7W-E=&5R
  15590. +M<@````$```#.@P``!$!?<W1A<G1?<')O8V5S<P`````!````^H,```)`9G)E
  15591. +M90````````(```&,```!'H,```)`9F-L;W-E``````(```&&```!3(,```)?
  15592. +M=V%I='!I9`````$```&8`````````_$````#`````$]05%,`!`!````#\@``
  15593. +M`^H````%<&EP93IU>&]P96XN)6QX`'<`<@````/R```#ZP````$```/R```#
  15594. +MZ0```,6>_``82.<A/DGY`````$7L`!@J6B!:+AHF;``D+T@`()/)+'@`!$ZN
  15595. +M_MHD;```($!#Z`!*($DB;```3J[_"B!L``!#[``$3J[^DD/O`"0B_(```"1P
  15596. +M`2+`0IDB+P`@0>\`)"0(+$I.KOVBX8`K0``8+'@`!$ZN_WPB2TZN_GI*@&<*
  15597. +M($`B34ZN_I)@"")-<!Q.KO\N3J[_=B)+<"!.KO\N(F\`("`'3J[_+DS??(3>
  15598. +M_``82H!.=2!O``0@+P`((B\`#"]O`!``!"]O`!0`""]O`!@`#"]O`!P`$"]O
  15599. +M`"``%"]O`"0`&%E/2.</%BHO`#@L+P`T+@`J2"]!`!QP'$ZZ```F0"!-2AAF
  15600. +M_%.(D<T@"%*`*4``('(!+'@`!$ZN_SHI0``<(D`2W6;\<!QR`4ZN_SHI0``8
  15601. +M<"!R`4ZN_SHI0``D<`$I0``00?K_G"`(0_K^L)")*4``%$'L``!.KO\B*4``
  15602. +M`"(+9P`!2DJL`!QG``%"2JP`&&<``3I*K``D9P`!,DJ`;P`!+"!L```@*``4
  15603. +M0?K^;B)L```B:0`08`(2V%.`9/I![```(FP`)!+89OP@+```4JP``"=```PG
  15604. +M1P`03>P`%CS\`!1P!1E```P@5C%\`!P`$A%```@@7B%K``P`%"`\@``#\DJ&
  15605. +M9@)P`2@`2H5O!"`%8`0@+```0J=(>``!+SR```/Z+P`O/(```_,O!B\$+R\`
  15606. +M3"\\@``#\2\O`%`O/(```_`O+P!4+SR```/O+R\`6"\\@``#[2\O`%@O/(``
  15607. +M`^XO!R\\@``#["!L```O*``0+SR```/K+&P``"(/3J[^#D_O`%0G0``(9S0@
  15608. +M;```+'@`!$ZN_H`@;```+'@`!$ZN_HQ*@&?D0JL`%$'L```B2RQX``1.KO\0
  15609. +M("L`#&!H+&P``$ZN_WQ.N@``8`)P#"E````@"V<&($M.N@``("P`'&<.(D`@
  15610. +M+``@+'@`!$ZN_RX@+``89PPB0'`<+'@`!$ZN_RX@+``D9PPB0'`@+'@`!$ZN
  15611. +M_RX@+```;PH@0"QX``1.KO\<</],WVCP6$].=0```_@````#`````0```5H`
  15612. +M``%6```!1@```!<````"```"_````NH```+8```"S````L0```)0```!S```
  15613. +M`<(```&J```!E@```8H```%\```!=````6P```%B```!0````30```$B```!
  15614. +M%````$0````X````&@```!`````````#[X$```-?3&EN:V5R1$(````````!
  15615. +M````"H8```)?1$]30F%S90````,```*F```"7@```"R&```$7U]S=&%R='5P
  15616. +M7W!O<G0```````,```)^```"<@```$"#```"0&UA;&QO8P`````!```!`(8`
  15617. +M``-?7V1O;W)?;F%M90`````!```!IH8```-?7VYE>'1?<&ED```````"```!
  15618. +MM@```;*&```#7U]S=&%C:U]S:7IE`````0```?J&```#7U]P<F]C97-S97,`
  15619. +M`````0```I*#```$0&-O;G9E<G1?;W-E<G(```````$```*NA@```E]E<G)N
  15620. +M;P```````0```K:#```"0&9R964````````!```"P`````````/Q`````P``
  15621. +M``!/4%13``0`0````_(```/J````!@````````````````````$`````````
  15622. +M`````_(```/K````"@```_(```/I`````TZZ```@+```3G4``````^^#```#
  15623. +M0&-H:V%B;W)T`````````0````*&```#7U]O=7)?<&ED`````````0````8`
  15624. +M```````#\0````,`````3U!44P`$`$````/R```#Z0```",@+P`$(&\`"")O
  15625. +M``Q(YP$4+@`F22I(3KH``'`!OH!M+'`@OH!L)B`+9PX@!^>`0^P``-/`)MDF
  15626. +MV2`-9PSGAT'L``#1QR#=(-UP`&`(<!8I0```</],WRB`3G4@+P`$(&\`")[\
  15627. +M`!`O2``(0J\`#$'O``A#UV&62H!G"#!\__\@"&`"(!?>_``03G4``````^^#
  15628. +M```#0&-H:V%B;W)T`````````0```!B&```$7U]S:6=?:&%N9&QE<G,`````
  15629. +M``(```!`````,(8```)?97)R;F\```````$```!0`````````_$````#````
  15630. +M`$]05%,`!`!````#\@```^D````5("\`!$CG#P`N`"PL``!.N@``*4<``'H`
  15631. +M>`$@+```P(1G#B`L``#`A&8&(`5.N@``4H78A'`@NH!MX"`&3-\`\$YU("\`
  15632. +M!"\'(@`@+```@($N'V"P```#[X8```-?7W-I9U]M87-K```````$````3```
  15633. +M`"0````4````#(,```-`8VAK86)O<G0````````!````$(8```1?7W-I9U]P
  15634. +M96YD:6YG`````````0```!R#```$0%]S:6=?9&ES<&%T8V@```````$````N
  15635. +M`````````_$````#`````$]05%,`!`!````#\@```^D```":(&\`!"`O``@B
  15636. +M;P`,+V\`$``$64](YR$T+@`F;P`<*D@D22])`!1@`AK:2A)G!%.';O:U[P`4
  15637. +M8QH0*O__<B^P`6<0=#JP`F<*4X=O!AK!8`(:VTH39P13AV[V0A5*AU[`1`!(
  15638. +M@$C`3-\LA%A/3G4@+P`$(&\`"")O``Q93TCG)S8N`"I(+TD`($JL``!G``#^
  15639. +M(&P``"9H``Q.N@``(BL`!+*`9@``Z"!L``!(:``L0>P``")3<`!&`&$`_UA8
  15640. +M3TJ`9P``RD'L```B31`8L!EF``"\2@!F]&8``+1*AV80(&P``"`H`!AR`["!
  15641. +M9P``H"!L```@*``8<ORP@6<$68!F/B)L```B$2QL``!.KO^"+``@;```T/P`
  15642. +M+"((=/Y.KO^L*@!G$B(%0>P``"0(3J[_FB(%3J[_IB(&3J[_@F`&*6@`(```
  15643. +M(&P``"EH``0`@"EH``@`?$/H``Q%[`"$)-DDV239(&P``"EH`!@`!"EH`!P`
  15644. +M="\O`"`O*P$8($U#[```<`!.N@``4$]P`6`"<`!,WVSD6$].=2!O``0B;P`(
  15645. +M2.<`%"9)*DA.N@``($TB2W``80#^R$J`9P1P`&`,($TB2TS?*`!.^@``3-\H
  15646. +M`$YU(&\`!")O``A(YP`4)DDJ2$ZZ```@32)+<`%A`/Z02H!F<$AX`/](;```
  15647. +M+PU.N@``3^\`#$J`:@P@32)+3-\H`$[Z``!+TT*=0JL`$G`!-T``#D)K`!`G
  15648. +M?````@``,C=```Q"JP`V0>P``")(2AEF_%.)D\@G20`60IT@/`\,/P`G0``B
  15649. +M)T``&B=``"HJ_```H?]P`$S?*`!.=0```_@````(`````0```7X```%P```!
  15650. +M:@```5H```%2```!3````4(```$H`````````^^&```#7VQA<W1?9&ER````
  15651. +M`````P```0(```"2````BH,```)`7V=E=%]C9`````$```":A@```U]L87-T
  15652. +M7V5N=')Y``````8```%D```!1@```1(```#P````X````*B&```#7U]T96UP
  15653. +M7V9N86UE````!````C8```'V````Q@```+"&```"7T1/4T)A<V4````!```!
  15654. +M"(,```-`7VQF:6)S=&%T```````!```!A(,```-`8VAK86)O<G0````````"
  15655. +M```!X````:B#```#0%]F:6)S=&%T`````````@```A````'&@P```U]R96%D
  15656. +M;&EN:P````````$```'\`````````_$````#`````$]05%,`!`!````#\@``
  15657. +M`^L```!!```#\@```^D```#0(&\`!%E/2.<`%"](``@@;P`(*F@!#&`*)E4@
  15658. +M34ZZ```J2R`-9O),WR@`6$].=2!O``2>_``02.<@-BI()FT`#$/K`0PO2``<
  15659. +M+TD`("!+8;1"K```0JL!#$*M``0@%>6`($`G:``,`1A!ZP`(+T@`&&```)Y!
  15660. +MZP`0(DA*&6;\4XF3R"`)D<C0_``L<@`R`-*(4H%T`#0!/T``%C]!`!0@`DZZ
  15661. +M```D0$J`9@9P#&```)Q-TD*>(&\`(""*+U``("SK`(@LZP"$0>L`C$/J``PB
  15662. +MV"+8(M@E:P`,`!@E:P!\`!Q+Z@`@.V\`%``$.V\`%@`&(&\`'"`H``12J``$
  15663. +M*T``"$'J`"Q#ZP`0$-EF_"JK``@J;P`<(A4D+P`8+&P``$ZN_Y1*@&8`_TXG
  15664. +M:P$,`1!"K0`$+&P``$ZN_WQR=-*!L(%F!'`!8`I.N@``*4```'``3-]L!-[\
  15665. +M`!!.=2!O``193TCG(#8O2``4<!!.N@``*D!P1^6(3KH``"9`(&\`%"`(2AAF
  15666. +M_%.(D<`@"%*`3KH``"1`3KH``"`-9P``@B`*9WP@"V=X*TL`#"M\```!'``(
  15667. +MD<@G2`$0)T@!#"=(`10FBB!O`!04V&;\3KH``"=```0B+P`4+&P``'3^3J[_
  15668. +MK"J`9R)!ZP`((@`D""QL``!.KO^:2H!G#B!-80#^.$J`9Q0@#6`^+&P``$ZN
  15669. +M_WQ.N@``*4```"!-80``-F`D<`PI0```(`UG!B!-3KH``"`*9P8@2DZZ```@
  15670. +M"V<&($M.N@``<`!,WVP$6$].=2!O``1(YP`6*D@F;0`,3KH``$*L```@2V$`
  15671. +M_:`@4TZZ```@%6<*(@`L;```3J[_IB!M``Q.N@``($U,WV@`3OH``"!O``19
  15672. +M3TCG`S0O2``4(&\`%"IH``R7RTZZ``!*K0$49R1^`"1M`0P@;P`4+"@`!&`$
  15673. +M4H<D4KZ&;`0@"F;T*TH!$$*M`10@+0$09R(F0-;\`"`I;P`4``!%[0$0(%(I
  15674. +M2```(%(DT"!O`!12J``$(`M,WRS`6$].=2!O``0O#2I(3KH``"`M``0J7TYU
  15675. +M(&\`!"`O``A(YP$4+@`J2"9M``Q.N@``<`$G0`$4*T<`!$S?*(!.=0```^^#
  15676. +M```"0&9R964````````'```"B@```H````)J```"/@```C0```(J````'H8`
  15677. +M``-?;&%S=%]D:7(````````#```"X@```EX```!2@P```D!M86QL;V,`````
  15678. +M!````8X```%V```!;````**&```"7T1/4T)A<V4````&```"=````@8```'L
  15679. +M```!U@```30```$<@P``!$!C;VYV97)T7V]S97)R```````"```"#@```4B&
  15680. +M```"7V5R<FYO```````#```"(````A(```%,@P```T!C:&MA8F]R=```````
  15681. +M``4```,N```##@```J8```):```!E(,```)`7V=E=%]C9`````$```'*A@``
  15682. +M`U]L87-T7V5N=')Y``````$```+L`````````_$````#`````$]05%,`!`!`
  15683. +M```#\@```^D````(2.<!`BQL``!R`$ZN_X(N`"(`3J[_@B`'3-]`@$YU````
  15684. +M``/OA@```E]$3U-"87-E`````0````8````````#\0````,`````3U!44P`$
  15685. +M`$````/R```#ZP````(```/R```#Z0```!L@;P`$("\`")[\`$1(YP,$+@`J
  15686. +M2'S_3KH``"!-0^\`#DZZ``!*@&8D<!#`KP`6YH!R4.6)PJ\`%NR!@H#"A[*'
  15687. +M9@1\`&`&<`TI0```(`9,WR#`WOP`1$YU(&\`!"`O``A(YP$$3-\@@&">````
  15688. +M``/O@P```T!C:&MA8F]R=`````````$````8@P```T!?9FEB<W1A=```````
  15689. +M``$````BA@```E]E<G)N;P```````0```$H````````#\0````,`````3U!4
  15690. +M4P`$`$````/R```#Z0```$$@+P`$(&\`"%E/2.<G%BX`*DA.N@``2&\`'$AX
  15691. +M"`$O!TZZ``!/[P`,4H!F!G#_8```RD*G+&P``'(")`].KO\<3^\`!"9`2H!G
  15692. +M+"(O`!PD"TZN_GI*0&<>("\`'.6`+PT@0"\H``@B0G``D<A.N@``4$]\`&!@
  15693. +M3J[_?"H`<BY&`;"!9D9\`"`O`!SE@"!`*J@`"$WM``1"GBS\```A_W`!/,`\
  15694. +MP$)>*WP```(``#)"K0`V0JT`%B`\#PP_`"M``"(K0``:*T``*F`,?/\@!4ZZ
  15695. +M```I0```(`MG#"0++&P``'("3J[_%DAO`!Q(>`@"+P=.N@``3^\`#"`&3-]H
  15696. +MY%A/3G4``````^^#```#0&-H:V%B;W)T`````````0```!2#```"7VEO8W1L
  15697. +M```````"````\@```"*&```"7T1/4T)A<V4````"````W@```#:#```#0%]L
  15698. +M9FEB<W1A=````````0```&Z#```$0&-O;G9E<G1?;W-E<G(```````$```#0
  15699. +MA@```E]E<G)N;P```````0```-0````````#\0````,`````3U!44P`$`$``
  15700. +M``/R```#Z0````X@;P`$(F\`"$CG,!8F22I(3KH``"(+)`TL;```=@%.KOY$
  15701. +M2H!G!'``8`9.N@``</],WV@,3G4``````^^#```#0&-H:V%B;W)T````````
  15702. +M`0```!*&```"7T1/4T)A<V4````!````&H,```)`7W-E=&5R<@````$````L
  15703. +M`````````_$````#`````$]05%,`!`!````#\@```^D````^(&\`!")O``A9
  15704. +M3TCG,S8J2'X`(&P``"PH`.`O20`@2H9F($JL``!F&D'L`!@B""QL```D/```
  15705. +M`^U.KO_B+`!G`GX!2H9G-B(&0>P`(B0(0>P``"8(+&P``$ZN_IXB!B0-)B\`
  15706. +M($ZN_IXB!G0*3J[^R$J'9U@B!DZN_]Q@4"!L```F:`"X,'S__[?(9T!#[``H
  15707. +M<"4L>``$3J[]V"1`2H!G+"EL````#"E-`!`O"B!++$I#[``$E<HF;P`D3J[]
  15708. +MM$S?!``B2BQX``1.KOYB3-]LS%A/3G4@;P`$0^\`"&$`_RI.=2!O``1#[P`(
  15709. +M80#_''`43KH``$YU``````/X````!@````$```"R````J````*0```".````
  15710. +M2@```"H````````#[X8```%?7W5S`````@```'X````4A@```U]?5T)E;F-H
  15711. +M37-G``````$````DA@```E]$3U-"87-E`````@```%8````PA@``!%]?4')O
  15712. +M9W)A;4YA;64````````"````H@```%"#```"0&5X:70````````!````\@``
  15713. +M``````/Q`````P````!/4%13``0`0````_(```/J````#T]K```````4````
  15714. +M`````````````````&-O;G-O;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R
  15715. +M>0```````^P````!`````0```!0````````#\@```^D````'2.<@`B(O``Q!
  15716. +M[P`0)`@L;```3J[_'$S?0`1.=0```^^&```"7T1/4T)A<V4````!````$```
  15717. +M``````/Q`````P````!/4%13``0`0````_(```/I````#R!O``0O#2I(*JP`
  15718. +M`$'M``0J7T[Z```@;P`$("\`"$CG`00N`"I((!5.N@``0>T`!"`'3-\@@$[Z
  15719. +M`````````^^&```#7U]S:6=?;6%S:P```````0````J#```"0%]S971J;7``
  15720. +M```!````%(,```-`<VEG<V5T;6%S:P`````!````*H,```-`7VQO;F=J;7``
  15721. +M```````!````.`````````/Q`````P````!/4%13``0`0````_(```/I````
  15722. +M!R!O``0@+P`(+P`O+```+PA.N@``3^\`#'``3G4```/OA@``!%]?<WES=&5M
  15723. +M7VYA;64````````!````#(,```)?<W1R;F-P>0````$````2`````````_$`
  15724. +M```#`````$]05%,`!`!````#\@```^D````I(&\`!)[\`%1(YS@6*D@@#6<D
  15725. +M2A5G("!-2AAF_%.(D<TB""!-<`).N@``0>P``'`"(@!.N@``("P``&\2L*P`
  15726. +M`&X,Y8!![```)G`(`&`L4H!F)"(L``!![P`;)@@L;```=`!X44ZN_BQ*0&<$
  15727. +M)D-@"D?L``1@!$?L``@@2TH89OQ3B)'+(@@@2W`"3KH``$'L`!QP`G(!3KH`
  15728. +M`$S?:!S>_`!43G4```/X````!`````$```"0````>````'(````L````````
  15729. +M`^^#```"0'=R:71E```````$````F````(P````T````*(8```)?97)R;F\`
  15730. +M``````$````XA@```U]S>7-?;F5R<@````````$````^A@```U]S>7-?97)R
  15731. +M;&ES=`````$```!&A@```E]?3U-%4E(``````0```%2&```"7T1/4T)A<V4`
  15732. +M```!````7@````````/Q`````P````!/4%13``0`0````_(```/J````"#H@
  15733. +M```T,@``56YK;F]W;B!E<G)O<B!C;V1E```*```````#\@```^D````````#
  15734. +M\0````,`````3U!44P`$``````/R```#Z@```,9N;R!S:6=N86P`:&%N9W5P
  15735. +M``!I;G1E<G)U<'0`<75I=```:6QL96=A;"!I;G-T<G5C=&EO;@!T<F%C92!T
  15736. +M<F%P``!A8F]R=`!E;70@:6YS=')U8W1I;VX`9FQO871I;F<@<&]I;G0@97AC
  15737. +M97!T:6]N``!K:6QL``!B=7,@97)R;W(`<V5G;65N=&%T:6]N('9I;VQA=&EO
  15738. +M;@``8F%D(&%R9W5M96YT('1O('-Y<W1E;2!C86QL`'=R:71E(&]N(&$@<&EP
  15739. +M92!W:71H(&YO(&]N92!T;R!R96%D(&ET``!A;&%R;2!C;&]C:P!S;V9T=V%R
  15740. +M92!T97)M:6YA=&EO;B!S:6=N86P@9G)O;2!K:6QL`'-T871U<R!S:6=N86P`
  15741. +M<V5N9&%B;&4@<W1O<"!S:6=N86P@;F]T(&9R;VT@='1Y`'-T;W`@<VEG;F%L
  15742. +M(&9R;VT@='1Y``!C;VYT:6YU92!A('-T;W!P960@<')O8V5S<P``8VAI;&0@
  15743. +M<W1A='5S(&AA<R!C:&%N9V5D``!B86-K9W)O=6YD(')E860@871T96UP=&5D
  15744. +M(&9R;VT@8V]N=')O;"!T='D``&)A8VMG<F]U;F0@=W)I=&4@871T96UP=&5D
  15745. +M(&9R;VT@8V]N=')O;"!T='D`:6YP=70@<F5C;W)D(&%V86EL86)L92!A="!C
  15746. +M;VYT<F]L('1T>0!E>&-E961E9"!#4%4@=&EM92!L:6UI=`!E>&-E961E9"!F
  15747. +M:6QE('-I>F4@;&EM:70``'5N:VYO=VX@<VEG;F%L``!U;FMN;W=N('-I9VYA
  15748. +M;```=VEN9&]W(&-H86YG960``'5N:VYO=VX@<VEG;F%L``!U<V5R('-I9VYA
  15749. +M;"`Q`'5S97(@<VEG;F%L(#(```````````H````2````'````"(````V````
  15750. +M0@```$@```!8````<@```'@```""````F@```+8```#>````Z@```1````$>
  15751. +M```!0````58```%R```!C````;@```'D```""@```B(```(\```"3````EP`
  15752. +M``)L```"?````HH```/L````(`````$```,4```#$````PP```,(```#!```
  15753. +M`P````+\```"^````O0```+P```"[````N@```+D```"X````MP```+8```"
  15754. +MU````M````+,```"R````L0```+````"O````K@```*T```"L````JP```*H
  15755. +M```"I````J````*<```"F`````````/R```#Z0```#H@+P`$(&\`""(O``PB
  15756. +M;P`064](YP<4+`$N`"I(+TD`%'H`)FP``&`N2H=G""`K``R^@&8@>@%P`;"K
  15757. +M`!1F%BHK``P@#6<$*JL`&"!+3KH``"`%8"HF4TJ39LX(!@``9P1P`&`:2H5F
  15758. +M"G`**4```'#_8`QP`$ZZ``!.N@``8*),WRC@6$].=2!O``0@+P`((F\`#$CG
  15759. +M`10B`'``3-\H@&``_W`@;P`$+PUP`"(`D\DJ7V``_UX@+P`$(&\`""(O``Q(
  15760. +MYP,$+`$N`"I(4H!F`GX`2H=J`D2'(`<B!B!-D\E,WR#`8`#_+``````#[X8`
  15761. +M``-?7W!R;V-E<W-E<P`````!````)(,```-`7V9R965?96YT<GD````!````
  15762. +M3H8```)?97)R;F\```````$```!L@P``!$!?=V%I=%]S:6=N86QS```````!
  15763. +M````=H,```1`7VAA;F1L95]S:6=N86QS`````0```'H````````#\0````,`
  15764. +M````3U!44P`$`$````/R```#Z0```!(@+P`$44](YP,`+@!.N@``(`=.N@``
  15765. +M2H!G(B)`(&D`'"](``P@:0`$<`$B;P`,3I$L`"`'3KH``"`&8`)P_TS?`,!0
  15766. +M3TYU``````/O@P```T!C:&MA8F]R=`````````$````.@P```T!?9FEN9%]F
  15767. +M9`````````$````4@P```T!?9G)E95]F9`````````$````V`````````_$`
  15768. +M```#`````$]05%,`!``````#\@```^D````#(&\`!"`O``A.^@`````#[X,`
  15769. +M``)`<W1R<F-H<@````$````*`````````_$````#`````$]05%,`!``````#
  15770. +M\@```^D````#(&\`!"`O``A.^@`````#[X,```)`<W1R8VAR``````$````*
  15771. +M`````````_$````#`````$]05%,`!``````#\@```^D```!-2.<`!G`(<@`L
  15772. +M>``$3J[_.BI`2H!F!'``8"Y"K0`$2'@`*'``+P!![```<@&3R<%!3KH``%!/
  15773. +M*H!F#")-<`A.KO\N<`!@`B`-3-]@`$YU(&\`!$CG``8J2"`-9Q@@36$``!X@
  15774. +M54ZZ```B37`(+'@`!$ZN_RY,WV``3G4@;P`$2.<`!BI(2JT`!&<4(E4L>``$
  15775. +M3J[^(")53J[^)D*M``1,WV``3G4@;P`$(%`B:``.<``0*0`/<@'AH2`!3G4@
  15776. +M;P`$("\`""(O``Q(YP,&+`$N`"I(8:I*AV8$2H9G'B)5(T<`("-&`"0S?``)
  15777. +M`!PL>``$3J[^,G`!*T``!$S?8,!.=2!O``1(YP`&*DA*K0`$9QPB52QX``1.
  15778. +MKOXL2D!G#B)53J[^)D*M``1P`6`"<`!,WV``3G4```/X`````0````$````H
  15779. +M`````````^^#```$0%]D979I8V5?;W!E;@````````$````R@P``!$!?9&5V
  15780. +M:6-E7V-L;W-E```````!````9@````````/Q`````P````!/4%13``0`0```
  15781. +M`_(```/J````!'1I;65R+F1E=FEC90````````/R```#Z0```!XO#B`L```B
  15782. +M`$A!0D'2@"`L``"S@"E```1"K``(0^P`!'``+'@`!$ZN_=@I0```</].KOZV
  15783. +M2(!(P"E```!*K```9PA*@&L$<`%@`G``*4``#"Q?3G4O#B`L``!K""QX``1.
  15784. +MKOZP("P``&<*(D`L>``$3J[^8BQ?3G4```/X`````P````$```!8````.@``
  15785. +M`!X````&`````@```&8```!.````/@```"P````:````%@````````/OA@``
  15786. +M!%]?<W1A<G1U<%]T:6UE```````!````!(8```%?7W5S`````0```!``````
  15787. +M```#\0````,`````3U!44P`$`$````/R```#Z@````7_____9FEF;RYL:6)R
  15788. +M87)Y`````````_(```/K````!````_(```/I````%B`O``113TCG`P`N`$ZZ
  15789. +M```@!TZZ``!*@&<H(D`@:0`<<D#EB<*1+T@`#"`!(&D`!")O``Q.D2P`(`=.
  15790. +MN@``(`9@`G#_3-\`P%!/3G4@+P`$+P<N'V"N``````/O@P```T!C:&MA8F]R
  15791. +M=`````````$````.@P```T!?9FEN9%]F9`````````$````4@P```T!?9G)E
  15792. +M95]F9`````````$````\`````````_$````#`````$]05%,`!``````#\@``
  15793. +M`^D```!B(&\`!"`O``@B;P`,+V\`$``$+V\`%``(+V\`&``,+V\`'``0+V\`
  15794. +M(``4+V\`)``844](YP<4+@!([P,``!1\`"IL``!@%DJM``1F"C!\``$K2``$
  15795. +M8`Q2AMK\`"2\K``$;>0@+``$O(!F>'(*TZP`!"`L``0B`.>!TH#E@2`!3KH`
  15796. +M`"I`2H!F#'`,*4```'#_8```CG#VT*P`!"(`YX'2@.6!(&P``")-8`(2V%.!
  15797. +M9/H@+```9P8@0$ZZ```I30``>O;:K``$(`7G@-"%Y8#;P)?+*TL`!%*%VOP`
  15798. +M)+JL``1M\"`&YX#0AN6`(&P``"&O`!0(!"&'"``AKP`8"`A+[P`@(9T(#"&=
  15799. +M"!`AG0@42^\`+"&="!@AG0@<(9T(("`&3-\HX%!/3G4@+P`$(@!K%K*L``1L
  15800. +M$"`!YX#0@>6`(&P``$*P"`1.=2`O``1(YP$$+@!K'KZL``1L&"`'YX#0A^6`
  15801. +M*FP``-O`2JT`!&<$(`U@"'`)*4```'``3-\@@$YU("P`!$YU``````/X````
  15802. +M$0````$```&"```!9````58```%````!,@```.P```#>````Q````+X```"R
  15803. +M````I````)@```!R````;@```&0```!>````0@````````/O@P```D!M86QL
  15804. +M;V,``````0```("&```"7V5R<FYO```````"```!=@```(R#```"0&9R964`
  15805. +M```````!````N@````````/Q`````P````!/4%13``0`0````_(```/K````
  15806. +M`@```_(```/I````&B!O``0B;P`(GOP`#$CG(18F22I(3KH``"`+9P8N*P`$
  15807. +M8`B1R$ZZ```N`'#_OH!F!'``8"@@!T'O`!1.N@``(@U![P`4)`@L;```3J[^
  15808. +M=$J`9P1P`&`&3KH``'#_3-]HA-[\``Q.=0`````#[X,```-`8VAK86)O<G0`
  15809. +M```````!````%H,```)`=&EM90````````$````F@P```T!?9VUT,F%M:6=A
  15810. +M``````$````\A@```E]$3U-"87-E`````0```$B#```"0%]S971E<G(````!
  15811. +M````6`````````/Q`````P````!/4%13``0`0````_(```/I````!R!O``0B
  15812. +M;P`(("\`#"\+)DDB2"!+)E].^@````````/O@P```D!M96UM;W9E`````0``
  15813. +M`!@````````#\0````,`````3U!44P`$``````/R```#Z0```%(@;P`$(F\`
  15814. +M"%%/2.<!%"9)*DA.N@``0>\`#$ZZ```@#6<(0>\`#"K8*M@@"V<``-)![P`,
  15815. +M3KH``"!`("@`)$2`<CQ.N@``)H!^`"!L``1#[```$!BP&68,2@!F]F8&?@1@
  15816. +M``":(&P`!$/L``@0&+`99@Q*`&;V9@9^`V```(`@;``$0^P`$!`8L!EF"DH`
  15817. +M9O9F!'X%8&8@;``$0^P`&!`8L!EF!DH`9O9G4"!L``1#[``<$!BP&68&2@!F
  15818. +M]F<\(&P`!$/L`"`0&+`99@9*`&;V9R@@;``$0^P`)!`8L!EF!DH`9O9G%"!L
  15819. +M``1#[``H$!BP&68(2@!F]F8"?@$G1P`$<`!,WRB`4$].=2!O``2>_``0+PTJ
  15820. +M2$'O``Q#[P`$80#^Z"JO``P@+P`00^T`!#+`("\`!#+`("P``#+`<``J7][\
  15821. +M`!!.=0`````#^`````@````!````[````-@```#$````L````)P```"$````
  15822. +M:@```%`````````#[X,```-`8VAK86)O<G0````````!````%(,```-`7V=E
  15823. +M='1I;64````````!````'(,```-`;&]C86QT:6UE```````!````-H,```)?
  15824. +M7T-81#,S``````$```!$A@```E]T>FYA;64`````"````.@```#4````P```
  15825. +M`*P```"8````@````&8```!,A@```U]D87EL:6=H=`````````$```$X````
  15826. +M`````_$````#`````$]05%,`!`!````#\@```^H````,3454($135`!7150@
  15827. +M1%-4`$5%5"!$4U0`1414`$-$5`!-1%0`4$14`$%+1%0````````#\@```^D`
  15828. +M```P(&\`!$CG``8J2"QL``!.KO^^!I4/##\`<`!,WV``3G4@+P`$(&\`"%E/
  15829. +M!(`/##\`(CP``5&`+H!.N@``((`@%R(\``%1@$ZZ```@`2Z!<CQ.N@``(4``
  15830. +M!"`7<CQ.N@``(`'E@)"!YX#0@="`(4``"%A/3G4@;P`$64](YR`$2]`@'2(`
  15831. +MZ8&2@"`!YX#0@2(`Y8'2@.^!(!TD`.F"E(#E@B`=+T$`"'(R3KH``-""T*\`
  15832. +M"`:`#PP_`$S?(`183TYU```#[X8```-?5&EM97)"87-E```````!````#(,`
  15833. +M``)?7T-81#,S``````4```"J````7@```%(```!(````.@````````/Q````
  15834. +M`P````!/4%13``0`0````_(```/I````"R`O``193RZ`0>P`!"`(6$].=2!O
  15835. +M``193RZ(0>P`!"`(6$].=2`L``1.=0`````#^`````,````!````)@```!P`
  15836. +M```*`````````_$````#`````$]05%,`!`!````#\@```^H````)````````
  15837. +M``````````$````````````"```````````````````#[`````(````!````
  15838. +M%`````@````````#\@```^D````J(&\`!")O``@@+P`,64](YS\V+@`J2"])
  15839. +M`"B7RTZZ```B#20++&P``$ZN_7XF0"("3J[]>"`+9@9.N@``8%XD;P`H0A(J
  15840. +M!U*%(A,D*P`$)@TH"BQL``!.KOY*2H!G&"(+3J[]>$H29@1P`F`L+P1.N@``
  15841. +M6$]@*$ZN_WPL`'(R1@&P@68(""L``0`+9I0B"TZN_7@@!DZZ```I0```</],
  15842. +MWVS\6$].=0`````#[X,```-`8VAK86)O<G0````````!````'H8```)?1$]3
  15843. +M0F%S90````(```!4````)H,```)`7W-E=&5R<@````$````Z@P```E]S=')L
  15844. +M96X``````0```'"#```$0&-O;G9E<G1?;W-E<G(```````$```"6A@```E]E
  15845. +M<G)N;P```````0```)H````````#\0````,`````3U!44P`$`$````/R```#
  15846. +MZ0```"Q93TJL`!)F#$'O``,I2``28>Y@%D'O``,B;``2L\AD!'`!8`)P_RE`
  15847. +M``!83TYU64](YP$4+B\`%$JL``!F`F'`*FP`%F`N("P``&\,0>\`#R)M``2S
  15848. +MR&(02H!J'$'O``\B;0`$L\AD$"95+PU.N@``6$\J2R`-9LXI30`62H=F!'``
  15849. +M8")0AR\'3KH``"!`(*P`%D/O`!,A20`$0^@`"%A/*4``%B`)3-\H@%A/3G4`
  15850. +M`````_@````'`````0```*(```"0````>@```$(````:````#@````0````#
  15851. +M`````@```$@````Z````*`````````/O@P```E]F<F5E`````````0```&Z#
  15852. +M```"7VUA;&QO8P`````!````B@````````/Q`````P````!/4%13``0`0```
  15853. +M`_(```/J````!T`H(REA;&QO8V$N8PDQ+C$```````````````````/R```#
  15854. +MZP````$```/R```#Z0```#8@;P`$64](YR,"(@@L;```=/Y.KO^L+T``$&<Z
  15855. +M+BP``$ZZ```L`&`>2&\`$$AX"`4O!DZZ``!/[P`,2H!F""E'``!P`&`24X9L
  15856. +MWB(O`!`L;```3J[_IG#_3-]`Q%A/3G4@;P`$2.<A!BI(3KH``"(-+&P``$ZN
  15857. +M_[A*@&<$<`!@4$ZN_WPN`')OTH&P@68@(@UT`$ZN_T9*@&<.(@U.KO^X2H!G
  15858. +M!"`"8"A.KO]\+@!P9="`OH!F#B!-80#_2DJ`9@1P`&`,(`=.N@``*4```'#_
  15859. +M3-]@A$YU``````/OA@```E]$3U-"87-E`````P```'(```!0````#H8```)?
  15860. +M97)R;F\```````,```#,````0````!Z#```#0%]L87-T7V9D`````````0``
  15861. +M`"*#```"7VEO8W1L```````!````-(,```-`8VAK86)O<G0````````!````
  15862. +M;(,```1`8V]N=F5R=%]O<V5R<@```````0```,@````````#\0````,`````
  15863. +M3U!44P`$`$````/R```#Z0```AI(YP`&<"(B/``!``$L>``$3J[_.BI`2H!F
  15864. +M!'``8"`;?``$``A-[0`.0AX@+```',`L[```0>T`%$ZZ```@#4S?8`!.=2!O
  15865. +M``0O#B)(<"(L>``$3J[_+BQ?3G4@;P`$2.<`!BI(("T`(&<*+&P``'(`3J[_
  15866. +MW"`M`"1G#"QL``!R0.&)3J[_W"`M`#1G!B!`3KH``"`M`#AG!B!`3KH``"!M
  15867. +M`#QAI"!-3-]@`$[Z``!(YP(&+`$J2$J`9Q0@+0`@(BT`-"QL```P?``!3J[_
  15868. +MRDJ&9Q0@+0`D(BT`."QL```P?``"3J[_RG`!(BP``..@3-]@0$YU2.<#-B9)
  15869. +M*D@N$R!O`!PL$&`4(&T`-+'*9@1^`&`(M>T`.&8"?``@;0`\+'@`!$ZN_HPD
  15870. +M0$J`9MI*AV<60I,@+0`@(BT`-"QL```P?``#3J[_RDJ&9U(@;P`<0I`@+0`D
  15871. +M(BT`."QL```P?``#3J[_RF`V<`$B+```XZ`L>``$3J[^PB!M`#PL>``$3J[^
  15872. +MC"1`2H!GWB!M`#2QRF8$?@!@"+7M`#AF`GP`2H=FUDJ&9M)P`2(L``#CH"(`
  15873. +M<``L>``$3J[^SDS?;,!.=5E/2.<#%BX`)DDJ2&```(9"K0`L""T``@`S9PQP
  15874. +M(RE```!P_V```*PL;```<@%.KO\Z("T`("(M`#0L;```,'P``4ZN_\H@;0`\
  15875. +M<``0*``/<@'AH2`!3KH``"P`("T`("(M`#0P?``#3J[_RF`0<`$B+```XZ`L
  15876. +M>``$3J[^PB!M`#PL>``$3J[^C$J`9^`@!DZZ```@+0`@0>\`%"(((&T`+"QL
  15877. +M``!.KO_6+`!G`/]B(`92@&8"?`"\AV,"+`<@!B!O`!1@`A;84X!D^B`&*T``
  15878. +M+$S?:,!83TYUGOP`2$CG#Q8N`"I()DDO20`<2H=F``"*("T`)"QL``!R0.&)
  15879. +M3J[_W"!-0^\`(!+89OQ![P`@0^P``$ZZ```@34/O`$(2V&;\0>\`0D/L``1.
  15880. +MN@``""T````S9P@(+0`/`#)G!D'O`"!@!$'O`$(@"')`Z8D@?```C@!.KO_B
  15881. +M*T``)&<``.PL;```3J[_Q$J`:@)2@.*`*T``*'``8```X$JM`"1G``#*+"T`
  15882. +M*'H`8```M+R'8P``CBP'8```B`@M``(`,V<02H5G!B`%8```L'`C8```I"`M
  15883. +M`"0B+0`X+&P``#!\``).KO_*(&T`/'``$"@`#W(!X:$@`4ZZ```H`"`M`"0B
  15884. +M+0`X,'P``TZN_\I@$'`!(BP``..@+'@`!$ZN_L(@;0`\+'@`!$ZN_HQ*@&?@
  15885. +M(`1.N@``2H!G"$J%9P0@!6`Z("T`)"(+($8L;```3J[_T"@`9P#_9DJ$:Q+:
  15886. +MA)Z$U\1P`+Z`8@#_2"`%8`YP#4ZZ``!P("E```!P_TS?:/#>_`!(3G6>_``,
  15887. +M2-<!`W`=*4```'#_WOP`#$YU64\N@&$`_")P`%A/3G6>_``L2.<@%B9)*DA*
  15888. +M@&<2!(````@!9R)3@&<``)Q@``"J2I-G"`CM``(`,V`&"*T``@`S<`!@``":
  15889. +M<`/`K0`P5X!F*`@M``\`,F<&0>P`&&`$0>P`&B\(+PU(;``(2&\`'$ZZ``!/
  15890. +M[P`08"H(+0```#-G$"\-2&P`'$AO`!A.N@``8`XO#4AL`"9(;P`83KH``$_O
  15891. +M``Q![P`0(@@L;```)#P```/M3J[_XB:`9P1P`&`@3KH``&`8(!-G"B(`+&P`
  15892. +M`$ZN_]QP`&`(<!8I0```</],WV@$WOP`+$YU(&\`!"`O``@B+P`,+V\`$``$
  15893. +MGOP`3$CG#S8J+P!P+`$N`$*O`&B;S9?++T@`('!`3KH``"1`2H!G``&@80#Z
  15894. +MHB]``&AG``&4<!1.N@``*D!*@&<``89P%$ZZ```F0$J`9P`!>'`%&T``""!O
  15895. +M`&@K2``.<A0[00`2%T``""=(``XW00`2)4@`/"5-`#0E2P`XD<@E2``D)4@`
  15896. +M("5(`#!*AV<&".H````S2H9G!@CJ``$`,TAZ_G!(>OY>2'K^1$AZ_+A(>OO:
  15897. +M2'K[#"`J`#`@2D/Z^KQ.N@``3^\`&"@`9P``\$J%9P8(Z@`/`#(@;P`@(DH2
  15898. +MV&;\($I#[P`D$MAF_$'O`"1#[``T3KH``"!*0^\`1A+89OQ![P!&0^P`.$ZZ
  15899. +M``!*AV<H2H9G!$J%9@9![P`D8`1![P!&(`@L;```<D#IB3!\#0!.KO_B)4``
  15900. +M($J&9RI*AV<$2H5G!D'O`"1@!$'O`$8@""QL``!R0.F)('P``(X`3J[_XB5`
  15901. +M`"1*J@`@9@1*AV8J("H`)&8$2H9F($J`9Q0L;```3J[_Q$J`:@)2@.*`)4``
  15902. +M*$*J`"P@!&!8("H`(&<*+&P``'(`3J[_W"`J`"1G"BQL``!R`$ZN_]Q*A&L&
  15903. +M(`1.N@``(`UG!B!-3KH``"`+9P8@2TZZ```J;P!H(`UG!B!-80#Y+B`*9P8@
  15904. +M2DZZ``!P_TS?;/#>_`!,3G4@;P`$GOP`("\-*DA.N@``2JP``&8(<`8I0```
  15905. +M8&@@+```4JP``"(L``#2@"\!2&P`/$AO``Q.N@``<``N@$'O`!!R`<%!80#]
  15906. +MN$_O``PJ@<<``O`$'O``AR`6$`_:)83RM```1K!'``8!P@%4ZZ``!*@&<*
  15907. +M($`@:``$80#XKB`53KH``'#_*E_>_``@3G4@+P`$(B\`""]O``P`!"!O`!">
  15908. +M_``H+PTJ2$CO``,`!$ZZ``!*K```9@AP!BE```!@:"`L``!2K```(BP``-*`
  15909. +M+P%(;`!(2&\`%$ZZ``!P`2Z`(@!![P`8P4%A`/T43^\`#"J`:S1"IT'O`!!P
  15910. +M`2(`80#\_EA/*T``!&L$<`!@'"`53KH``$J`9PH@0"!H``1A`/@*(!5.N@``
  15911. +M</\J7][\`"A.=0`````#^`````L````!```(!@``!V(```8\```&)@``!,P`
  15912. +M``2\```$H```!)@```22```"Y@```M`````````#[X8```-?7V9I9F]?<VEG
  15913. +M```````&```#K@```C````&H```!:@```.H````LA@```5]?=7,````!````
  15914. +M,H,```)`3F5W3&ES=`````$````ZA@```U]?1FEF;T)A<V4``````!$```;H
  15915. +M```&V```!K8```:(```&7````^8```-X```#(````K8```)B```!^@```5H`
  15916. +M``$\````W````,0```!\````;(,```)`9G)E90````````8```<D```'#```
  15917. +M!P(```"L````G````)"&```"7V5R<FYO```````&```'\```!TP```42```$
  15918. +M+```!!(```'>A@```E]$3U-"87-E`````P``!00```3B```!Z(,```1`7W=A
  15919. +M:71?<VEG;F%L<P```````@```Y0```(6@P``!$!?:&%N9&QE7W-I9VYA;',`
  15920. +M```"```#S@```E"#```"0'-T<F-A=``````$```&0```!BH```+J```"U(,`
  15921. +M``1`7W-I9U]D:7-P871C:````````0``!`R#```#7U]S<')I;G1F````````
  15922. +M!0``"`X```=J```$U```!,0```2H@P```D!?<V5T97)R`````0``!/B#```"
  15923. +M0&UA;&QO8P`````#```%>@``!6P```52@P```T!?86QL;V-?9F0```````$`
  15924. +M``7V@P```T!?9G)E95]F9`````````,```A:```'M@``!OB#```#0&-H:V%B
  15925. +M;W)T`````````@``!^0```=`A@```U]?9FEF;U]O:P````````(```?H```'
  15926. +M1(8```1?7V9I9F]?;V9F<V5T````````!```!_H```?V```'5@``!U*&```#
  15927. +M7U]F:69O7V)A<V4``````@``!_X```=:@P```T!?9FEN9%]F9`````````(`
  15928. +M``A&```'H@````````/Q`````P````!/4%13``0`0````_(```/J````%5]M
  15929. +M``!?<P``9FEF;SHE<R]R=V5S2R5S`&T```!F:69O.B5S+W(`9FEF;SHE<R]M
  15930. +M=V5+``!?;0``7W,``'5X9FEF;RXE;'@``'5X9FEF;RXE;'@``````_(```/I
  15931. +M````"2`O``193RZ`0>P`%B`(6$].=2!O``193RZ(0>P`%B`(6$].=0```_@`
  15932. +M```"`````0```!P````*`````````_$````#`````$]05%,`!`!````#\@``
  15933. +M`^H````)=7-E<@````````````!W:&5E;`````````X````4```````&```#
  15934. +M[`````0````!````(````!H````6````!@````````/R```#Z0```*D@+P`$
  15935. +M64\N@"`L`0QG#B!`3KH``$J`9P1R`6`"<@`@`5A/3G4@+P`$(&P!#'(`3OH`
  15936. +M`$ZZ```I0`$,9@I(;```3KH``%A/(&P!#$ZZ``"!K```3G4@;`$,3OH```CL
  15937. +M``P``DYU("\`!`@```Q6P$0`2(!(P$YU".P`#0`"3G4@+P`$"```#5;`1`!(
  15938. +M@$C`3G5.N@``<``@;```$"@`#W(!X:&#K```3G5.^@``("\`!%E/2.<!%B]`
  15939. +M`!!^`&`N("T`%$ZZ```F0$J`9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL
  15940. +M>``$3J[_+B!L```L>``$3J[^C"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`
  15941. +M<`'OH"P`<`F^@&8&<`!.N@``("P!!,"&9P:-K`$(8'HJ!D:%RZP!"$J':V9P
  15942. +M(+Z`;&`@!^>`0>P`!"IP"``P?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X
  15943. +M48!G-&`*2&P`&$ZZ``!83W``3KH``&`@(`UG'"`'YX`H!D'L``2(L`@$B:P!
  15944. +M!"`'3I5&A,FL`00@+`$(P(9FBDS?(/!.=2`O``0O#B(L``""@'``+'@`!$ZN
  15945. +M_LXL7TYU("\`!"\.(@`@+```@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A
  15946. +M`/X02H!G"'P!<`YA`/\,(`=A`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!
  15947. +M<`-A`/[H(`=A`/Z&2H!G"'P!<!1A`/[6(`9,WP#`3G4@+P`$+P<I0```<`@N
  15948. +M'V``_KQP`&$`_V!@D&#V2.<!%'X`2^P`!#9\``$JBT*M``12AU"-<""^@&WP
  15949. +M0JP!"$*L`01"K```80#]U&$`_>IA`/VB3-\H@&``_?AA`/VX8`#^"``````#
  15950. +M^`````(````!```!=````#X````7`````@```H0```*````"?````F0```'6
  15951. +M```!N@```:8```&B```!F````9````%*```!.````2X```$F````I````'H`
  15952. +M``!@````5@```%````!(````.````"H````*`````````^^#```$0%]T:6UE
  15953. +M<E]E>'!I<F5D``````$````2@P``!$!?=&EM97)?<W1A<G0````````!````
  15954. +M,(,```1`7V%L;&]C7W1I;65R`````````0```#2#```"7U]F86EL```````!
  15955. +M````0H,```-`7W1I;65R7W-I9P`````!````3(,```-`7V9R965?=&EM97(`
  15956. +M```!````6H,```1`7VEN:71?<')O8V5S<V5S`````0```)*&```$7U]C:&EL
  15957. +M9')E;E]E>&ET``````(```#N````F(,```5`7V-L96%N=7!?<')O8V5S<V5S
  15958. +M``````$```"J@P```T!?9FEN9%]P:60```````$```#$@P```D!?7V5X:70`
  15959. +M`````@```8````$B@P```U]?;65S<V%G90````````$```%XA@```E]?1E!%
  15960. +M4E(``````0```D@````````#\0````,`````3U!44P`$`$````/R```#Z@``
  15961. +M``I&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=``````#
  15962. +M\@```^L```!$```#\@```^D```(=2&P`!$ZZ``!83TYU("\`!"\-3KH``"I`
  15963. +M2H!F`F'B(`TJ7TYU(&\`!"`O``@O"TZZ```F0$J`9@)AQB`+)E].=2!O``0O
  15964. +M#2I((`UF!$OL``X@34H89OQ3B)'-(`A2@$ZZ```@0$J`9@1P`&`((D@2W6;\
  15965. +M(`@J7TYU64](YP,T?@!\`"!L```F:`#08"Q**P`(9B0P/`4`P&L`#F8:4H<@
  15966. +M:P`*(`A*&&;\4XB1P"`(W(#<JP`45(8F4TJ39M`@!U*`Y8#0AF$`_THI0``8
  15967. +MY8<@0")`T\=%Z0`$+T``%&8*0>P``"E(`!A@5B!L```J:`#08$)*+0`(9CHP
  15968. +M/`4`P&T`#F8P)FT`"BXM`!0@;P`4(,HO2``48`(4VTH39OH4_``])FT`$&`"
  15969. +M%-L@!U.'2H!F]D(:*E5*E6:Z(&\`%$*03-\LP%A/3G4@;P`$("\`""\-*D@J
  15970. +M@$*M``3E@&$`_K0K0``(*E].=2!O``0B;P`(("\`#$CG(C0F22I(2H!G"B!+
  15971. +M80#^PB1`8`(D2R`*9SXB%20M``2T@6TB+`'<AG00TH*\@6T"(@8J@2`!Y8`@
  15972. +M;0`(3KH``"M```AG$D?M``0B$U*;Y8$@6R&*&`!P`4S?+$1.=2!O``0B;P`(
  15973. +M("\`#&&22H!F!&$`_AI.=2!O``0B;P`(2.<`%"9)*D@@+0`$T*L`!+"5;Q+0
  15974. +M@"J`Y8`@;0`(80#^&BM```@B+0`$Y8$@;0`(T<$@*P`$(@#E@2)K``A@`A#9
  15975. +M4X%D^M&M``0@:P`(3-\H`$[Z```@;P`$(F\`""]O``P`!"`O`!`B+P`464](
  15976. +MYP(T+`$J221(+T@`$$J`9T13@&<*4X!G``"V8```]%.&9R(@+P`8(@V0@2!O
  15977. +M`!!",`@`($$B;P`08`(2V%.`9/I@``#.0>P`$")O`!`2V&;\8```OB9O`!A@
  15978. +M;G!<L!5F9DHM``%G8%2-<`&\@&8&%/P`86!4(`95@&9&$"W__TB`2,!R(Y"!
  15979. +M9RY5@&<J58!G)E.`9R)3@&<>4X!G&G(5D(%G%'(<D(%G#E6`9PIR'Y"!9P15
  15980. +M@&8$%/P`)Q3M__]@"!3M__]@`A3=N\MECF!`)F\`&&`V<"JP%68N2BT``6<H
  15981. +M5(T0+?__2(!(P')ED(%G#'()D(%F#!3\``I@#A3\`!M@"!3M__]@`A3=N\ME
  15982. +MQD(23-\L0%A/3G6>_`$L2.<_-BIO`5@@;```#&@`)0`49`I(>``43KH``%A/
  15983. +M0JP`''`!*4``&"E``#YP`BE``#HI0`!@*7P```"$`%R3R2QX``1.KO[:*4``
  15984. +M`$ZZ```I0``$9@I(;``23KH``%A/(&P`!$ZZ```I0``(+&P`!"!6+&@`%"E.
  15985. +M`!1![P$P3J[_OBEO`3``#$ZZ``!.N@``(&P``"`H`*QG$.6`(D`B*0`TY8$I
  15986. +M00`08`8I:`"$`!!*%68``.A![``J(@@L;```)#P```/N3J[_XBP`0>P`,"((
  15987. +M3J[_XBX`0>P`-B((3J[_XBH`2H9G"$J'9P1*A68B2H9G!B(&3J[_W$J'9P8B
  15988. +M!TZN_]Q*A6<&(@5.KO_<80#[<G`!+P`O!2\`+P<B!L%!3KH``"!L```@*``<
  15989. +M0>\!6&$`_)Y/[P`0?`!^`&!0(FP``"!I`"0@,'@`9SXB`$/O`#`D"2QL``!V
  15990. +M0.6+3J[^;DJ`9R8B;```(&D`)-''("@`!&<((@(D`$ZN_(Y![P%(0^\`,'`!
  15991. +M80#\V%*&4(<@;```O*@`'&VF8``"S"QL``!.KO_**`!.KO_$*@!^`"!L```L
  15992. +M*`#@9BA^`4'L`#PB""0\```#[4ZN_^(L`&820>P`/B((3J[_XBP`9@1A`/JD
  15993. +M+P<O!G``+P`O!2($P4%.N@``0>\!6'`!80#[UB`\```%&F$`^HX@0#%\!```
  15994. +M$B]``#QP0.6(80#Z>D_O`!!^0.6/+T`!.&`"4HT0%4B`2,!![``!"#```P@`
  15995. +M9NP0%6<``A9R(K`!9C!2C29-8!!P*K`59@A*+0`!9P)2C5*-$!5G!G(BL`%F
  15996. +MYB1-$!5R(K`!9@)2C7P"8%1P)[`59B!2C29-8`)2C1`59P9R)[`!9O0D37`G
  15997. +ML!5F`E*-?`%@+B9-8!!P7+`59@A*+0`!9P)2C5*-$!5G$G(@L`%G#'(*L`%G
  15998. +M!G()L`%FVB1-?``@2RH*FHL@!5*`+T@`*&$`^;8F0$JO`4QF("`%($LB;P`H
  15999. +M3KH``$(S6`!![P%((DMP`&$`^V!@`/\FVH5R$-J!NH=O%"!O`3A.N@``(`5A
  16000. +M`/EV+@4O0`$X+PH@!B!+(F\`+'(!80#[KEA/(@LD+P$X)@<L;```3J[\N"H`
  16001. +M;!!"$B\O`"A(;`!$3KH``%!/2H5F(B\*(`8@2R)O`"QR`&$`^W1![P%,(DMP
  16002. +M`&$`^NA83V``_JQZ`2!O`"Q"J``(0B@`$4(H`!`O"B`&($LB;P`L<@)A`/M`
  16003. +M0>\!0'`080#Z)EA/(@LD+P`L+&P``$ZN_,HH`&8\8"IZ`")O`"S2_`$80>\!
  16004. +M/'`!80#Z($J`9@1X9V`2(B\`+"QL``!.KOS$*`!*A&?2(B\`+"QL``!.KOR^
  16005. +M<'30@+B`9PI(;`!83KH``%A/2H5G(B\*(`8@2R)O`"QR`&$`^L!![P%,(DMP
  16006. +M`&$`^C183V``_?@@+P%`(&\!1$ZZ``!![P%(0^\!/&$`^BH@2TZZ``!@`/W6
  16007. +M(&\!.$ZZ```@;P`L3KH``&$`^))![`!R3KH``"E```!F"$'L`'@I2```0>P`
  16008. +M?DZZ```I0``49@8I;````!1![`"(3KH``"E``!AF"$'L`(XI2``80>P`DDZZ
  16009. +M```I0``<9@A![`"8*4@`'$'L`*!.N@``*4``'&8(0>P`JBE(`!P@+P%,(&\!
  16010. +M4")L`!A.N@``<`!.N@``3-]L_-[\`2Q.=0```_@````5`````0``"$X```A`
  16011. +M```(.```""H```@B```(%```"`````?X```'Z@``!X0```;0```%3@``!3H`
  16012. +M``18```$3```!#8```/6```"J````.````!.`````@```!(````"```(7@``
  16013. +M"%(```A(```%+@``!"P```0D```$$```!`0```/V```#[````^@```/@```#
  16014. +MT````\@```#J````Y````,H```"$`````````^^#```"7U]F86EL```````$
  16015. +M```'B```!M0```/:````!H,```)`;6%L;&]C``````(```!@````%(,```)`
  16016. +M<F5A;&QO8P````(```&R````,(,```)`9G)E90````````4```?B```'V@``
  16017. +M!\X```:4```"1H8```)?4WES0F%S90````$```.(@P```E]?6$-%6$E4````
  16018. +M`0```YB&```"7U]?:6]B```````&```#N@```[(```.N```#J````Z0```.>
  16019. +M@P``!$!?86QL;V-?=&EM97(````````!```#S(,```-`7W1I;65R7W-I9P``
  16020. +M```!```#Y(,```-`7VEN:71?9FEF;P`````!```$"(,```1`7VEN:71?<VEG
  16021. +M;F%L<P```````0``!`R&```"7T1/4T)A<V4````'```'=```!V(```<T```&
  16022. +MO@``!1P```34```$/(,```1`7VEN:71?=6YI>&EO`````````@``!6X```2@
  16023. +MA@```U]?5T)E;F-H37-G``````0```4.```$Y```!+X```2DA@```E]?7V-T
  16024. +M>7!E`````0``!;"#```"0'-T<FYC<'D````!```&;H,```)`='%S;W)T````
  16025. +M``$```>\@P```T!?7V=E=&5N=@````````4```A$```(+@``"!@```@$```'
  16026. +M[H8```-?7V%M:6=A7W5S97(````)```(/```"#(```@F```('```"!````@.
  16027. +M```("```!_P```?R@P```D!M86EN`````````0``"&*#```"0&5X:70`````
  16028. +M```!```(:`````````/Q`````P````!/4%13``0`0````_(```/J````+```
  16029. +M``!.;R!M96UO<GD```!A`$9A:6QE9"!T;R!C<F5A=&4@=&EM97(``$Y)3#H`
  16030. +M`$Y)3#H``$Y)3#H``"H`3DE,.@``26YV86QI9"!W:6QD8V%R9"`E<P!%<G)O
  16031. +M<B!E>'!A;F1I;F<@87)G=6UE;G1S`%5315(``'5S97(``%5315).04U%``!(
  16032. +M3TU%``!S.@``4TA%3$P`8FEN.G-H``!(3U-43D%-10``86UI9V$````#\@``
  16033. +M`^L````(```#\@```^D````$("\`!%E/+H!P`%A/3G4``````_$````#````
  16034. +M`$]05%,`!``````#\@```^D````^("\`!$CG`P`N`$JL``!G!"`'8&!\`"`'
  16035. +M`H````$D9P)\"`@'``=G!`!&``4(!P`$9P0(Q@`""`<``6<$",8```@'``-G
  16036. +M!`C&``$(!P``9P0(Q@`&(`=R2<"!<D"P@68$`$8`0@@'``EG!`C&``4@!@I`
  16037. +M``],WP#`3G4@+P`$2.<&`"P`2JP``&<((`8"0`__8%YZ``I&``\(!@`#9P1Z
  16038. +M2>6-(`9R!<"!6X!F!`C%``<(!@`"9P0(Q0`$"`8``&<$",4``2`&<D+`@6<$
  16039. +M",4`!@@&``%G!`C%``,(!@`&9P0(Q0``"`8`!6<$",4`"2`%3-\`8$YU````
  16040. +M``/X`````@````$```"&````#`````````/Q`````P````!/4%13``0`0```
  16041. +M`_(```/K`````0```_(```/I`````G``3G5P`$YU```#\0````,`````3U!4
  16042. +M4P`$``````/R```#Z0```!5(YP,`3KH``"X`?`!@"B\&3KH``%A/4H:\AVWR
  16043. +M3-\`P$YU("\`!"\'+@!AU$ZZ``!.N@``(&P``$ZZ```O!TZZ``!83RX?3G4@
  16044. +M+P`$+P<N'V#4``````/O@P```T!?;&%S=%]F9`````````$````&@P```E]C
  16045. +M;&]S90```````0```!*#```$0%]C;&5A;G5P7V9I9F\```````$````N@P``
  16046. +M!4!?8VQE86YU<%]S:6=N86QS`````````0```#*&```#7U]O9&1?=&EM97(`
  16047. +M`````0```#:#```#0%]F<F5E7W1I;65R`````0```#J#```"7U]80T58250`
  16048. +M```!````0`````````/Q`````P````!/4%13``0`0````_(```/I````$R`O
  16049. +M``0B+P`((&\`#%%/2.<#)"P!+@`J2$ZZ```@!TZZ``!*@&<:(D`@:0`@+T@`
  16050. +M%"`&(&D`!")-)&\`%$Z28`)P_TS?),!03TYU``````/O@P```T!C:&MA8F]R
  16051. +M=`````````$````:@P```T!?9FEN9%]F9`````````$````@`````````_$`
  16052. +M```#`````$]05%,`!``````#\@```^D```"8GOP`#$CG+S8J;P`T?@/.KP`X
  16053. +M?`$@;```)F@`N"H\```#[$ZZ``!*AV<*<`*^@&<$<@!@`G(!+T$`*'`!OH!G
  16054. +M"%6'9P1P`&`"<`$O0``L($U#[```3KH``$J`9@9X_V```51P_R!L```A0`"X
  16055. +M(@TL;```=/Y.KO^L+@`@;```(4L`N$J`9G@L;```3J[_?$ZZ```L`"`L``!R
  16056. +M+D8!L(%G!$J`9@I^`2H\```#[F`6(`95@&8,""\`"``Z9P1P`6`"<``N`$J'
  16057. +M9RQ\``@O``@`.F<<""\`#P`Z9P9X`F```-8@+P`\3KH``"@`8```R'C_8```
  16058. +MPBE&``!P_V```4)"IRQL``!R`B0/3J[_'$_O``0D0$J`9PPB!R0*3J[_FDJ`
  16059. +M9A8@"F<()`IR`DZN_Q9.N@``</]@``$(*"H`="0*<@).KO\6(@=.KO^F<%#I
  16060. +MB,"O`#@,@```!0!F#'`1*4```'#_8```VDJO`"AG!@@$``-F#$JO`"QG$@@$
  16061. +M``)G#'`-*4```'#_8```M@@O``D`.F<B(@TD/````^Y.KO_B2H!G""(`3J[_
  16062. +MW&`*3KH``'#_8```C`@O``@`.F<$(`5@!B`\```#[20`(@TL;```3J[_XBH`
  16063. +M9@A.N@``</]@8`@O``D`.F8$2H9F!"P$8`)\_WX`2J\`*&<"?@%*KP`L9P0(
  16064. +MQP`!""\``P`[9P0(QP`#+P<@!2(&3KH``%A/+@!L''#_(&P``"%``+@B!2QL
  16065. +M``!.KO_<(&P``"%+`+@@!TS?;/3>_``,3G4@;P`$+R\`#"\O``PO"&$`_:A/
  16066. +M[P`,3G4```/X`````0````$```!2`````````^^&```!7U]U<P````4```(V
  16067. +M```")````'P```!F````%H,```-`8VAK86)O<G0````````!````)(,```)`
  16068. +M<W1R:6-M<`````$```!6A@```E]$3U-"87-E````!0```BX```',```!`@``
  16069. +M`(@```!P@P``!$!C;VYV97)T7V]S97)R```````!````D(8```)?7T]315)2
  16070. +M``````$```"6@P``!4!?;6%K95]P<F]T96-T:6]N`````````0```.:&```"
  16071. +M7V5R<FYO```````#```!@@```5X```#V@P```D!?<V5T97)R`````P```=@`
  16072. +M``&L```!,(,```1`7V%L;&]C7V%M:6=A9F0``````0```A@````````#\0``
  16073. +M``,`````3U!44P`$`$````/R```#Z@````).24PZ`````````_(```/I```%
  16074. +M:"!O``1(YS@`</_`*``#<@`2`'#_P"@``G0`%`!P_\`H``%V`!8`</_`$'@`
  16075. +M&`#AA(B#X82(@N&$B($@!$S?`!Q.=4CG(S1+[`!R0>P`'$7L``PDR$'L`"`D
  16076. +MR$*L`!A"FGX`+"P`>D?L![Q@/"`K``0B`.6!($W1ZP`(0^@'ZD7L``PEB1@`
  16077. +M2H!G!G`!*4``&$J'9P9*JP`$9@@@$T2`*4``%%*'UOP`$+Z&;<!^`"PL`'9@
  16078. +M.G``(@<&@0``!=@0-1@`2,#I@"!-(@`&@0``!U+1]1@`!H````=.)#4(`.6"
  16079. +M0^@'ZD7L``PEB2@`4H>^AFW"3-\LQ$YU(&\`!")O``B>_`HH2.<[-B](`"@O
  16080. +M20`L(`AF"$WL`"0O3@`H<#H@;P`HL!!F!%*O`"@@;P`H<#I.N@``2H!F3G`*
  16081. +M(@`@;P`H(`A*&&;\4XB1P-*(4H%P0;*`909P_V```DQ![``P0^\`,1+89OQ!
  16082. +M[P`Q0^P`/$ZZ``!![P`Q(F\`*$ZZ``!![P`Q+T@`*$*G+R\`+$ZZ``!03RX`
  16083. +M4H!F!G#_8``"""`'0>\`<B(\```)VDZZ```L`"`'3KH``$J`9@9P++R`9`9P
  16084. +M_V```>!![P"*80#^."X`0>\`CF$`_BXJ;P`L*H!![P"280#^("M```1![P"6
  16085. +M80#^%"M```A![P":80#^""M```PB%6LP=#*R@FXJ)BT`"&\D>`JVA&X>*"T`
  16086. +M!&L8#(0```%R;A!*@&L,L()N"+:'9PI*AV<&</]@``%JTH'E@2`M``@D`-2"
  16087. +MU(#4@B`M``0F`.6#UH#6@M:M``S6@=:'<"S6@+R#9`9P_V```3A'[P">?``D
  16088. +M36`0($MA`/V()4``$%B+4H98BKRM``1MZGP`8"`0&R(&!H$```78&X`8`'(`
  16089. +M$@"RK0`(;09P_V```/92AKRM``1MVGP`0>T'2B1(+T@`)&!*($MA`/TZ)(!+
  16090. +MZP`%$"L`!'(`$@`E00`$9PI3@6<&</]@``"\1^T``1`5<@`2`"5!``AM"BIO
  16091. +M`"RRK0`,;P9P_V```)Q2AM3\`!"\K0`(;;!\`&`.(`8&@```!^H;FP@`4H:\
  16092. +MK0`,;>P@!@:````'ZD(U"`!\`-K\"!Y@'B!+80#\OBJ`1>L`!"!*80#\LBM`
  16093. +M``1'Z@`$4H90C2!O`"R\D&W:?``D;P`D*F\`+&`H2H=F!D*J``Q@&!`;2(!(
  16094. +MP"5```QR`;"!9PA*@&<$</]@#E*&U/P`$+RM``AMTG``3-]LW-[\"BA.=2!O
  16095. +M``193R\-*DA@`E*-$!4?0``$9R9(@$C`0>P``0@P``((`&86$"\`!'(LL`%G
  16096. +M#'(ML`%G!G(KL`%FT"`-*E]83TYU(&\`!")O``@@+P`,(B\`$%E/2.<'%"P!
  16097. +M+@`F22I((`UG$A`52(!(P$'L``$(,``""`!F!'``8$IZ`&`B$"\`%$B`2,`B
  16098. +M!>6!TH72@=*`*@%P,)J`NH9O!'``8"92C1`5'T``%&<02(!(P$'L``$(,``"
  16099. +M"`!FQKJ';`1P`&`$)H4@#4S?*.!83TYU(&\`!")O``A93TCG`!0F24/O``AP
  16100. +M`'(880#_;"I`2H!F!'``8&H@+P`((@#I@9*`(`'I@)"!Z8`F@'`ZL!5F3D'M
  16101. +M``%#[P`(<`!R.V$`_S@J0$J`9@1P`&`V("\`""(`Z8&2@.6!TY-P.K`59B!!
  16102. +M[0`!0^\`"'``<CMA`/\**D!*@&8$<`!@""`O``C1DR`-3-\H`%A/3G4@;P`$
  16103. +M(F\`"%E/2.<!%"I)+T@`#!`0<BVP`68(?@%2KP`,8#!(@$C`0>P``0@P``((
  16104. +M`&88<BL@;P`,LAA7P$0`2(!(P"](``Q*@&<$?@!@!'``8!P@;P`,(DUA`/\4
  16105. +M)D!*@&8$<`!@"$J'9P)$E2`+3-\H@%A/3G4@;P`$(F\`")[\``Q(YP`D*DDO
  16106. +M2``0<$JP$&8H0I5#Z``!0>T`!"](``P@22)O``QP`2(\```!;6$`_CPO0``0
  16107. +M8```M'!-L!!F?'`"*H!#Z``!0>T`#"](``P@22)O``QP`7(,80#^$")`2H!F
  16108. +M!G``8```P$7I``%P+K`19P9P`&```+!![0`((D@@2G`!<@5A`/WD(D!*@&8&
  16109. +M<`!@``"41>D``7`NL!%G!G``8```A$'M``0B2"!*<`!R!F$`_;@O0``08#`0
  16110. +M$$B`2,!#[``!"#$``@@`9QIP`2J`0^T`!'``(CP```%M80#]C"]``!!@!'``
  16111. +M8#P@+P`09@1P`&`R<"\@;P`0L!!F'$/H``%![0`0+T@`#"!)(F\`#&$`_=HO
  16112. +M0``08`@K?```'"``$"`O`!!,WR0`WOP`#$YU("\`!"(O``@@;P`,+V\`$``$
  16113. +MGOP`)$CG/Q0J2"H`+@$D!W8#Q(,O0``X+T$`/$J"9@P@!W)D3KH``$J!9A(@
  16114. +M!W)DY8E.N@``2H%G!'``8`)P`2P`(!5*@&<,4X!G2%.`9V9@``%^("T`!"(`
  16115. +M4X$D`=2"U($F`NF#EH(D`^F"E(/O@BX%WH(O1P!`2H9G``%4<CRP@6T``4P&
  16116. +MAP`!48`O1P!`8``!/B`M``0B`-*!TH`D`>F"E($B`NF!DH+O@=J!+T4`0&``
  16117. +M`1PH!7X`*BT`#%.%(`;0@-"&Z8!'[``^U\`O0``@8!H@&R(`TH'2@"0!Z8*4
  16118. +M@2("Z8&2@N^!V(%2A[Z%;>(N+P`\+T0`)"(M``QT`K*";@8F!U.#8`(F!R`#
  16119. +M<F1.N@``(@#2@4J`:@)6@.2`+T``+"`#+T$`,')D3KH``"`!:@)6@.2`=@G6
  16120. +MK0`,+T``-"`#+T$`*'(,3KH``%*!(`'G@)"!T("0@="`58!R"DZZ``!'[P`H
  16121. +MT)O0KP`TT)N0FU*`<@=.N@``+@%J`EZ'+"T`!)R':@)>AGH!*"T`"&`<+@9>
  16122. +MAR(M``SE@4'L`#K1[P`@OK`8`&P(+`=2A;J$;>`@!M"`T(8B`.F!DH`@`>F`
  16123. +MD('O@"(O`"32@"]!`$`@+P!`T*T`$-"O`$A,WRC\WOP`)$YU(&\`!")O``@@
  16124. +M+P`,GOP`6$CG/S8J2"Q-1^\`-";`)L@FR2].`#!*@&<<(`A*&&;\4XB1P"P(
  16125. +M(@C3KP`X<#.R@&4<?#)@&&$`^JHL`)R-+T``.'(#O(%L!G#_8``#>B]&`"P@
  16126. +M;P`X2A!F!G#_8``#:$/O`'1A`/OF+T``.&8&</]@``-4)F\`/$'L`*8B2V$`
  16127. +M][`N`&<"0I,@;P`X2A!G``*^*D@O2`!\80#Z2"(`DHTO0``X+T$`>'8#LH-L
  16128. +M!G#_8``#%"!O`#@0$&<@<BRP`6<:<CNP`6<40^\`<&$`^WXO0``X9A1P_V``
  16129. +M`NP@//__\?#0KP!T+T``<"!O`#@0$'(LL`%G"'([L`%F``%80^@``2!)0^\`
  16130. +M7&$`^[HJ0$J`9@9P_V```K!%[0`!<"RP%6<&</]@``*@($I#[P!(80#[E"]`
  16131. +M`#AF!G#_8``"BB!O`#A*$&<&</]@``)\($MP`B%```@A?````(@`!"`O`'!$
  16132. +M@$WH!THLP'`!+,!2ABS&("\`=$2`3>@'6BS`0IY"GM;\`!!%Z`78>@`L/```
  16133. +M![(@2B\O`'0O2``L(`4B!D'O`&!A`/QF+@`NKP!T(`4B!D'O`$QA`/Q46$\H
  16134. +M`$OJ``)%ZP`(OH!O&B!+((1P`2)O`"@2@"9*(4<`!"1-0BD``6`8($L@AR)O
  16135. +M`"A"$29*(40`!"1-$WP``0`!(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.
  16136. +MN@``2H%G!'``8`)P`2(`Y8%![`">(#`8`"(`TH'2@"8!Z8.6@20#Z8*4@^^"
  16137. +MVH)2A@R&```']6\`_T)@``$<(&\`.$H09P9P_V```69*AV<&</]@``%<>`!\
  16138. +M`'H`0J\`1'X`*DM@<$JM!TYG/B`O`$0B!^F!)"\`<`:!```'2B8S&`#6@B]#
  16139. +M`$1*AF<*L(-G!G#_8``!'$2"*T('2B`O`"Q2@"M`!U)\`6`F(`4B+P!T*BT'
  16140. +M2MJ!2H1G"K"%9P9P_V```.Y$@2M!!TI"K0=2>`%2A]K\`!"^JP`(;8I*AF<$
  16141. +M2H1F!G#_8```R'P`?@`J2R@O`$1@.G``(@<&@0``!=@0,Q@`2,#I@"!+T<!#
  16142. +MZ`=*+TD`0$J&9PI*J0`,9@0@!&`"(`71K0`0+"D`!%*'6(V^JP`$;<!@('``
  16143. +M<@$G00`()T``!"0O`'1$@DWK!THLPBS`+,`O0`!X*F\`/"XO`"P@!U*`*T``
  16144. +M#"PO`'AG"-"&4H`K0``,<C.P@6,$</]@,-K\!^H@!R!-(F\`,$ZZ```@3=''
  16145. +M2^@``4(02H9G$"`&($TB;P!\3KH``$(U:`!P`$S?;/S>_`!83G4@;P`$+PTJ
  16146. +M2$'L```B36$`]%!*@&<,0>P``")-<`%A`/P,*E].=2\-0>P`LDZZ```J0$J`
  16147. +M9@8J7V```%QP`2E`$\Y*%68>0JP`<D*L`'9"K`>\0JP'Q$'L``!#[`A<$MAF
  16148. +M_&`L($U#[`!R80#S]$J`9QYP.K`59Q`@34/L`')P`&$`^ZI*@&<(0>P`<F$`
  16149. +M_W8J7V``\PYP`2E`$\Y#[`!RD<AA`/.\2H!G"$'L`')A`/]48`#R[B!O``0@
  16150. +M+P`((F\`#)[\`!!(YP,4*DE([P$!`!`@;P`4+U``&$JL$\YF!&$`_T1*K`!V
  16151. +M9PH@+P`8L*P`@FP@?@!'[`!R8!!2A];\`!"^K`!Z;01^`&`R2JL'3F;J8"I^
  16152. +M`4?L`'8L+`!V8`X@+P`8L*L`$&T(4H=8B[Z&;>Y#[`!RT\=^`!XI!=?IAT'L
  16153. +M![S1QR\-+T@`("`00>\`'$/L`')A``#"(&\`("(H``0K00`@Y8%![`A<(F\`
  16154. +M(-'I``A#[``,(X@8`"M(`"A83TS?*,#>_``03G4@;P`$0^P``'``80#_*D'L
  16155. +M```@"$YU(&\`!"`O``@B;P`,2.<!%"X`)DDJ2$JL$])F#G`!*4`3TD'L"B!A
  16156. +M`/XZ+PL@!R!-0^P*(&$``$)83TJ'9P9![`"Z8`1![!(*)T@`*$S?*(!.=2!O
  16157. +M``1#[``L<`!AKD'L`"P@"$YU(&\`!"`O``@B;P`,+V\`$``$GOP`#$CG#S0N
  16158. +M`"9O`"PJ2'P`>@`H$2`$YX`O20`@T\!%Z0@>8$`O2@`D(!6PDFTV(&\`)+"0
  16159. +M9BA*A&8&("@`!&X:YX0B*``$(F\`(`:$```(&K*Q2`!N!'``8`)P`2H`+"@`
  16160. +M!&`&4X11BFRZ(!4B/``!48!.N@``*``@%2(\``%1@$ZZ``#2AY*&+`%@"`:&
  16161. +M``%1@%.$2H9K]&`(!(8``5&`4H0,A@`!48!L\"`&(CP```X03KH``"=```@@
  16162. +M!B(\```.$$ZZ```@`2]!`!QR/$ZZ```G0``$("\`''(\3KH``":!2H5G`E*3
  16163. +M(`18@'('3KH``"=!`!AL!%ZK`!@L/```![)*A&M`(`9R`\"!9@P@!G)D3KH`
  16164. +M`$J!9A(@!G)DY8E.N@``2H%G!'``8`)P`2H`(@#E@47L`)X@,A@`N(!M0%*&
  16165. +MF(!@P%.&(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G!'``8`)P
  16166. +M`2H`Y8!![`">V+`(`$J$:\8$A@``!VPG1@`4)T0`'"`%T(#0A>F`1>P`/M7`
  16167. +M0JL`$&`.(BL`$.6!F+(8`%*K`!`B*P`0Y8&XLA@`;.92A"=$``Q"JP`@)T<`
  16168. +M)$S?+/#>_``,3G4@;P`$+PTJ2"`M`!@B`-*!TH!![`"^T<$@+0`0(@#2@=*`
  16169. +M0^P`T]/!(#P```=LT*T`%"\`+Q4O+0`$+RT`""\M``PO"2\(2&P`^$AL`%A.
  16170. +MN@``3^\`)$'L`%@@""I?3G4@;P`$+PUA`/TX($`J7V"4(&\`!")O``@@+P`,
  16171. +M+P<N`"`1L(=M%"('3KH``-&0(!$B!TZZ```B@6`J2H!J)E.0WY%L("`11(`B
  16172. +M!TZZ```B$)*`4X$@@2`11(`B!TZZ``">@2*'+A].=2!O``0B;P`(2.<!%"9)
  16173. +M*D@N+0`4GJL`%&8L+BT`$)ZK`!!F(BXM``R>JP`,9A@N+0`(GJL`"&8.+BT`
  16174. +M!)ZK``1F!"X5GI,@!TS?*(!.=2!O``0B;P`(("\`#"]O`!``!)[\`'!(YS\T
  16175. +M+@`J;P"8+TD`+$*5+T@`*$/O`%QP"B+84<C__"`O`%QR/K"!;`1*@&H.0>\`
  16176. +M8$/O`%QP/&$`_Q9![P!D0^\`8'`\80#_"$'O`&A#[P!D<!AA`/[Z0>\`<$/O
  16177. +M`&QP#&$`_NQ@3"`O`'!3KP!P!H````=K(@!T`\*"9@IR9$ZZ``!*@68:(#P`
  16178. +M``=LT*\`<')DY8E.N@``2H%G!'``8`)P`2(`Y8%![`">(#`8`-&O`&@@+P!H
  16179. +M;ZXL/```!VS<KP!P(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G
  16180. +M!'``8`)P`20O`&SE@B8`UH/6@.F#0>P`/M'#+#`H`"`O`&BPAF\:1^\`:)V;
  16181. +M4I,,FP````QMGD*O`&Q2KP!P8)0@+P!<0J\`7'H`<@$O00"(+T``)%*%("\`
  16182. +MB-"`+T``B"`O`(AN[B`O`(AJ!'``8`1P`>N@+T``B$AO`#`O!TAO`)`@;P`X
  16183. +M3I!![P`\0^\`:&$`_BQ/[P`,*`!G+B`%4X5*@&H&</]@``$02H5J!E.O`(A@
  16184. +MQ'`!ZZ`L`$J$;P:=KP"(8+3=KP"(8*X@+P!\:P``Q"(O`%"R@&<``+I!^OGB
  16185. +M(F\`++/(9@9![`!R8`1![`H@?``F2"](`)!@``"(("L'3K"O`'QF=GH`)&\`
  16186. +MD&!D("H'3K"O`'QG5"`%Z8`B+P"((&\`D`:````'2M*P"`"2JP=*+T$`C$AO
  16187. +M`#`O!TAO`)0@;P`X3I!![P`\0^\`:&$`_6Q/[P`,2H!F$B`O`%"PKP!\9@@O
  16188. +M;P",`(A@)E*%U/P`$"!O`)"ZJ``(;9)2AM;\`!`@;P"0O*@`"&T`_W!P_V`D
  16189. +M("\`)-&O`(@O+P`H+P=(;P"0(&\`.$Z0<`$J@$_O``P@+P"(3-\L_-[\`'!.
  16190. +M=2!O``0B;P`(("\`#)[\``Q(YP<T+@`J2"])`!@,K0````$`(&\&<`$K0``@
  16191. +M2&\`'"`'($UA`/T>6$\L`$JO`!QF!B`M`"!J!B`&8```QD'Z^*XB;P`8L\AF
  16192. +M!D'L`')@!$'L"B!\`"9(+T@`(&```)8@*P=.L*T`(&8``(1Z`"1O`"!@<"`M
  16193. +M`"`B*@=.LH!G7B`%Z8`B%2!O`"`&@```!TK2L`@`DJL'2BJ!2JT`(%?`1`!(
  16194. +M@$C`*T``($AO`!P@!R!-(F\`'&$`_(Q83TJO`!QF0"`5D*H'2M"K!THJ@$JM
  16195. +M`"!7P$0`2(!(P"M``"!2A=3\`!`@;P`@NJ@`"&V&4H;6_``0(&\`(+RH``AM
  16196. +M`/]B</],WRS@WOP`#$YU(&\`!"\-0_KWVG``*E]@`/[@2JP3SF8$80#W+$YU
  16197. +M``````/X````'0````$``!*X```29@``$-@``!"T```0I```$%0``!`R```/
  16198. +M\@``#H(```X6```,^```#,H```RX```,J@``"O@```E*```(>```!Z0```%L
  16199. +M```!7````18```#F````H````(X```"`````7````%8```!0````3````"L`
  16200. +M```"```5E```%,8``!3````3D@``$XP``!#H```0W```#J(```Z:```.B```
  16201. +M#G0```YF```.8@``#EH```X\```.,@``#@H```WT```-X@``#=0```V\```-
  16202. +MN```#:0```V8```-D```#88```U\```-3```#3X```TZ```-*@``#1P```T(
  16203. +M```,_```#/0```SP```,[```#.@```S@````L````&@```!D````2```````
  16204. +M``/O@P```D!S=')C:'(``````0```3*#```"0'-T<F-A=``````"```!?```
  16205. +M`7"#```"7V]P96X````````!```!CH,```)`<F5A9`````````$```&L@P``
  16206. +M`D!C;&]S90```````0```;2&```"7U]?8W1Y<&4````%```&6@``!3X```1>
  16207. +M```$'````\J#```"7U]#6$0S,P`````<```2G```$HX``!)4```2/@``$4X`
  16208. +M`!$\```1)```$1H``!`@```0$@``#]X```_0```/K```#YH```^,```/@```
  16209. +M#W````\^```/,```"N8```K8```(4@``"#P```@F```("```!^P```<.```'
  16210. +M`(,```)`<W1R;F-P>0````(```R.```,=(,```-`7U]G971E;G8````````!
  16211. +M```,SH,```)?<W!R:6YT9@````$``!#@`````````_$````#`````$]05%,`
  16212. +M!`!````#\@```^H```!(1TU4`"`@(``@("``````!`````@``````````"`@
  16213. +M(``@("``<SIL;V-A;'1I;64`<SIZ;VYE:6YF;P``+P`````?````'````!\`
  16214. +M```>````'P```!X````?````'P```!X````?````'@```!\````?````'0``
  16215. +M`!\````>````'P```!X````?````'P```!X````?````'@```!\```%M```!
  16216. +M;G!O<VEX<G5L97,``%5.25A46@``("`@`%-U;DUO;E1U95=E9%1H=49R:5-A
  16217. +M=$IA;D9E8DUA<D%P<DUA>4IU;DIU;$%U9U-E<$]C=$YO=D1E8P`E+C-S("4N
  16218. +M,W,E,V0@)3`R+C)D.B4P,BXR9#HE,#(N,F0@)60*```````#[`````(````!
  16219. +M````$`````P````````#\@```^L```3V```#\@```^D```&<GOP`#$C7`0-P
  16220. +M_][\``Q.=5%/2-<#`%!/3G5(YS`"(A!**``-9P1P`&`<)`DF`"QL``!.KO_6
  16221. +M(@!2@&8(3KH``'#_8`(@`4S?0`Q.=5%/2.<_-BX`*DDF2"P3+T8`*"](`"Q*
  16222. +M*P`-9P9P`&```(Q**P`,9V8F3=?'>@!@6"1-8`)2BK7+9`9P"K`29O2WRF8$
  16223. +M*`I@!D'J``$H")B-(B\`*"0-)@0L;```3J[_T"P`4H!F"$ZZ``!P_V`^VH:V
  16224. +MAF8V2^H``9Z&<`!.N@``3KH``$J`9B)*AV:D8!PB!B0-)@<L;```3J[_T"H`
  16225. +M4H!F"$ZZ``!P_V`"(`5,WVS\4$].=5E/2.<_`BX`+!`O00`<2B@`#6<$<`!@
  16226. +M4E.!)@$B!B0'+&P``$ZN_[XJ`$ZN_WPH`%*%9P1*A&<.(`1.N@``*4```'#_
  16227. +M8"0B!G0`)@).KO^^+`!2@&<$2H1G#B`$3KH``"E```!P_V`"(`9,WT#\6$].
  16228. +M=9[\`0!(YS\&+@`J2"P5*BT`""`M``1G"B(`+&P``$ZN_Z88+0`-2(1(Q"!-
  16229. +M3KH``$J$9P1P`&!$(@9![P`@)`@L;```=D#EBTZN_F@H`$J'9@HB!DZN_]Q*
  16230. +M@&<:2H1G$G#_NH!G#"(")`5.KO]&2H!G!'``8`9.N@``</],WV#\WOP!`$YU
  16231. +M("\`!$CG(`(B`"QL``!T`$ZN_S1.KO]\="Y&`K""5\%$`4B!2,$@`4S?0`1.
  16232. +M=2`O``0@;P`((F\`#)[\`!!(YS<6+@`F22I(?`!AN$J`9GPB!RQL``!T`4ZN
  16233. +M_E9*@&=L(@=![```)`AV!$ZN_]!9@&92(@<D/```)Q!.KO\T2H!G0B('0>\`
  16234. +M("0(=A!.KO_6<@FP@6\N<)NP+P`@9B9![P`E(@@D"TZN_-`J`$'O`";1P"((
  16235. +M)`U.KOS04H!G!E*%9P)\`2('=`!.KOY6(`9,WVCLWOP`$$YU("\`!"(O``B>
  16236. +M_`(02.<_!BX`</\O0`(H+T$`)"('+&P``'0`=@%.KO^^+T``("('3J[_OBP`
  16237. +M3J[_?"H`+T`"+&8``,(H+P`D(@<D!';_3J[^.+""9@``KKR";```GBH$FH8H
  16238. +M!2`$<@%(02QX``1.KO\Z*D!*@&9J<@)(04ZN_RCBB"H`#(4```(`;1`@!7(!
  16239. +M2$%.KO\Z*D!*@&9&>D#GC4OO`"@P/`'_<@!![P`H$,%1R/_\8"RXA6\$(`5@
  16240. +M`B`$)@!.N@``(@<D#2QL``!.KO_0L(-G"DZN_WPO0`(L8`:8@TJ$;M!![P`H
  16241. +ML<UG#")-(`4L>``$3J[_+BHO`BQF!$*O`B@L+P`@O*\`)&P.(@<D!BQL``!V
  16242. +M_TZN_[XL+P(H9PH@!4ZZ```I0```(`9,WV#\WOP"$$YUGOP!"$CG-Q8N`"9)
  16243. +M*D@L%4HM``UF``$8(`<$@```!`!G(`2````$`&=*4X!G6%.`9UQ3@&=>4X!G
  16244. +M9E.`9VQ@``#N2BT`#&<F(`9![P$D0^\!(&$`_=9*@&<4("\!)#=```(@+P$@
  16245. +M-H!P`&```,IP&6```+XB!BQL``!.KO\H)H!P`&```+(FAG``8```JG``8```
  16246. +MI"`&(A-A`/XV8```F"M3``AP`&```(XJ$TJM``1F#B(5+&P``$ZN_HPK0``$
  16247. +M("T`!&=B)``B!2QL``!.KOY<2H!F4B(&0>\`("0(=D#EBTZN_FA*@&<^(@5.
  16248. +MKO^F(BT`!$ZN_Z8B!DZN_]PB`G0`3J[_1AM\``$`#2J"*T(`!$'O`"`B""QL
  16249. +M``!.KO^X2H!G!"`"8`Y.N@``8`9P%BE```!P_TS?:.S>_`$(3G4@+P`$(B\`
  16250. +M""]O``P`!$CG#P8J+P`<+`$N`'`.3KH``"I`2H!F"G`,*4```'#_8$Y#U2+'
  16251. +M0IDBQD(M``TB!RQL``!.KO\H&T``#$AZ_G1(>OO:2'K[9$AZ^JQ(>OIV2'KZ
  16252. +M:"`%($U#^OI03KH``$_O`!@H`&P&($U.N@``(`1,WV#P3G4@+P`$(B\`""]O
  16253. +M``P`!"]O`!``""]O`!0`#"]O`!@`$$CG#0`H+P`4*B\`$"X`<`!*@68$<$#E
  16254. +MB`!```$O`"`'<O]A`/]&6$]*@&9`<`!*A&8$<$#EB`!```(O`"`%<O]A`/\H
  16255. +M6$]3@&8B<`!*KP`<9@1P0.6(`$```B\`("\`''+_80#_!EA/58!G$$'L``8O
  16256. +M2``03-\`L$[Z``!,WP"P3G4``````_@````"`````0``!EH```)<````````
  16257. +M`^^&```"7T1/4T)A<V4````0```%B```!2(```34```$O@``!(````/D```#
  16258. +MG````O````),```"!````;0```&.```!(@```.(```"F````,(,```)`7W-E
  16259. +M=&5R<@````4```4R```!Z@```/````"T````/H,```1`7V-H96-K7W-I9VYA
  16260. +M;',``````0```,J#```$0%]H86YD;&5?<VEG;F%L<P````$```#.@P``!$!C
  16261. +M;VYV97)T7V]S97)R```````#```#]@```5X```$\A@```E]E<G)N;P``````
  16262. +M!0``!7(```4Z```#^@```6(```%`@P```D!F<F5E`````````@``!<(```&@
  16263. +M@P```T!C:&MA8F]R=`````````$```.4@P```D!M86QL;V,``````0``!6:#
  16264. +M```#0%]A;&QO8U]F9````````0``!;2#```"7U]F86EL```````!```&9@``
  16265. +M``````/Q`````P````!/4%13``0`0````_(```/J````")LP('$``$9A:6QE
  16266. +M9"!T;R!I;FET:6%L:7-E($DO3P`````#\@```^D````G(&\`!")O``A(YR$6
  16267. +M)DDJ2$ZZ```B#20++&P``$ZN_[)*@&<$<`!@;$ZN_WPN`'(T1@&P@692(@).
  16268. +MKO^X2H!G#B(-3J[_LDJ`9P1P`&!&3J[_?"X`<F_2@;"!9BPB`G0`3J[_1DJ`
  16269. +M9QHB"TZN_[A*@&<0(@TD"TZN_[)*@&<$<`!@$DZN_WPN`"`'3KH``"E```!P
  16270. +M_TS?:(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H8```)?1$]3
  16271. +M0F%S90````$````:@P``!$!C;VYV97)T7V]S97)R```````!````C(8```)?
  16272. +M97)R;F\```````$```"0`````````_$````#`````$]05%,`!`!````#\@``
  16273. +M`^D````.(&\`!"`O``@B+P`,GOP`#$C7`0-P`-[\``Q.=2`O``0B+P`(+V\`
  16274. +M#``$44](UP`#<`!03TYU``````/Q`````P````!/4%13``0``````_(```/I
  16275. +M````$"!O``0B;P`(("\`#$CG`10N`"9)*DAF!'``8!P@!R!+(DUR`$J`9PX2
  16276. +M&)(99@13@&;V2(%(P2`!3-\H@$YU``````/Q`````P````!/4%13``0`````
  16277. +M`_(```/I````!2!O``0@+P`(<@!@`A#!4X!D^DYU```#\0````,`````3U!4
  16278. +M4P`$``````/R```#Z0````P@+P`$(B\`"%E/+P<N`"]!``1.N@``2&\`!$AX
  16279. +M"`,O!TZZ``!/[P`,+A]83TYU``````/O@P```T!C:&MA8F]R=`````````$`
  16280. +M```4@P```E]I;V-T;````````0```"(````````#\0````,`````3U!44P`$
  16281. +M``````/R```#Z0````T@+P`$(B\`"%E/+P<N`"`!3KH``"]```1.N@``2&\`
  16282. +M!$AX"`0O!TZZ``!/[P`,+A]83TYU```#[X,```5`7VUA:V5?<')O=&5C=&EO
  16283. +M;@````````$````2@P```T!C:&MA8F]R=`````````$````:@P```E]I;V-T
  16284. +M;````````0```"@````````#\0````,`````3U!44P`$``````/R```#Z0``
  16285. +M`!`@;P`$("\`""(O``R>_``,2-<!`W#_*4```-[\``Q.=2!O``0@+P`((B\`
  16286. +M#)[\``Q(UP$#</\I0```WOP`#$YU```#[X8```)?97)R;F\```````(````X
  16287. +M````&`````````/Q`````P````!/4%13``0`0````_(```/I````#2`O``19
  16288. +M3R\'+@!.N@``2&\`!$AX"``O!TZZ``!/[P`,2H!G!'``8`0@+P`$+A]83TYU
  16289. +M``````/O@P```T!C:&MA8F]R=`````````$````,@P```E]I;V-T;```````
  16290. +M`0```!H````````#\0````,`````3U!44P`$``````/R```#Z0````\@+P`$
  16291. +M2.<&`$ZZ```L`'``3KH``&`&<`!.N@``*@`@!4ZZ``!*@&?N(`9.N@``<`0I
  16292. +M0```</],WP!@3G4```/O@P```T!S:6=S971M87-K``````(````L````"H,`
  16293. +M``1`7V-H96-K7W-I9VYA;',``````0```!*#```$0%]W86ET7W-I9VYA;',`
  16294. +M``````$````:@P``!$!?:&%N9&QE7W-I9VYA;',````!````(H8```)?97)R
  16295. +M;F\```````$````R`````````_$````#`````$]05%,`!`!````#\@```^D`
  16296. +M```H(&\`!$CG(Q8J2'X`0J<L;```<@(D#TZN_QQ/[P`$)D!*@&=2(@UT_DZN
  16297. +M_ZPN`&=&(@<D"TZN_YI*@&<Z(BL`!%[`1`!(@$C`+``B!TZN_Z9R`DZN_Q9*
  16298. +MAF<4(@U.KO^X2H!G!'``8#).N@``8"IP%"E```!@(DZN_WQ.N@``*4```$J'
  16299. +M9P8B!TZN_Z8@"V<()`MR`DZN_Q9P_TS?:,1.=0```^^&```"7T1/4T)A<V4`
  16300. +M```!````$(,```)`7W-E=&5R<@````$```!JA@```E]E<G)N;P```````@``
  16301. +M`(````!R@P``!$!C;VYV97)T7V]S97)R```````!````?`````````/Q````
  16302. +M`P````!/4%13``0`0````_(```/I```!ER!O``0@+P`((F\`#"]O`!``!"\'
  16303. +M+@`I2``>*4``&G(!L(%E'B\O``@O"6$``"103TJ`9PX@;``>0A`@!Y"L`!I@
  16304. +M`G``+A].=2!O``0B;P`(2.<`%"9)*DA@``3X$!5R);`!9@`$RE*-$!5(@$C`
  16305. +M2H!G``#6<B60@6<`!+1R')"!9P``S%.`9P`!)E.`9P`!@%.`9P`!HEF`9P`!
  16306. +M[%.`9P`"!%F`9P`"FEN`9P`##E.`9P`#,%.`9P`#6%.`9P`#>E6`9P`#H%.`
  16307. +M9P`#1E.`9P`$)E.`9P`$0E^`9P``HE.`9P``_%.`9P`!.E.`9P`!7%.`9P`!
  16308. +M=%>`9P``Y%6`9P`!TE.`9P`![E.`9P`"!E.`9P`"3%.`9P`":%6`9P`"=E6`
  16309. +M9P`"JE.`9P`"U%.`9P`"]%>`9P`#9E.`9P`#?E.`9P`#C&```^A3C6```^(@
  16310. +M*P`8:P9R!K"!;P9P`&```_XB*P`8Y8%![`!V+S`8`&$`!,983TJ`9@`#V&``
  16311. +M`^`@*P`8:P9R!K"!;P9P`&```\XB*P`8Y8%![``<+S`8`&$`!)983TJ`9@`#
  16312. +MJ&```[`@*P`0:P9R"["!;P9P`&```YXB*P`0Y8%![`%.+S`8`&$`!&983TJ`
  16313. +M9@`#>&```X`@*P`0:P9R"["!;P9P`&```VXB*P`0Y8%![`#"+S`8`&$`!#98
  16314. +M3TJ`9@`#2&```U!![`%^(DMA`/XZ2H!F``,T8``#/$'L`90B2V$`_B9*@&8`
  16315. +M`R!@``,H0>P!IB)+80#^$DJ`9@`##&```Q1(>``P2'@``B\K``QA``-Z3^\`
  16316. +M#$J`9@`"[F```O9(>``@2'@``B\K``QA``-<3^\`#$J`9@`"T&```MA(>``P
  16317. +M2'@``B\K``AA``,^3^\`#$J`9@`"LF```KH@*P`(<@Q.N@``<`Q*@6<"(`%(
  16318. +M>``P2'@``B\`80`#$$_O``Q*@&8``H1@``*,("L`'%*`2'@`,$AX``,O`&$`
  16319. +M`NY/[P`,2H!F``)B8``":DAX`"!(>``"+RL`"&$``M!/[P`,2H!F``)$8``"
  16320. +M3"`K``AR#$ZZ``!P#$J!9P(@`4AX`"!(>``"+P!A``*B3^\`#$J`9@`"%F``
  16321. +M`AY(>``P2'@``B\K``1A``*$3^\`#$J`9@`!^&```@`@*P`04H!(>``P2'@`
  16322. +M`B\`80`"8D_O``Q*@&8``=9@``'>2&P!L&$``K!83TJ`9@`!PF```<H,JP``
  16323. +M``P`"&T&0>P!LF`$0>P!MB\(80`"BEA/2H!F``&<8``!I$'L`;HB2V$`_(Y*
  16324. +M@&8``8A@``&00>P!P")+80#\>DJ`9@`!=&```7Q(>``P2'@``B\380`!Y$_O
  16325. +M``Q*@&8``5A@``%@+PMA``%D6$]*@&8``49@``%.0>P!S")+80#\.$J`9@`!
  16326. +M,F```3I(;`'680`"#%A/2H!F``$>8``!)B`K`!Q>@)"K`!AR!TZZ``!(>``P
  16327. +M2'@``B\`80`!?D_O``Q*@&8``/)@``#Z("L`&&<$4X!@`G`&(BL`'%Z!DH`@
  16328. +M`7('3KH``$AX`#!(>``"+P!A``%&3^\`#$J`9@``NF```,)(>``P2'@``2\K
  16329. +M`!AA``$H3^\`#$J`9@``G&```*1![`'8(DMA`/N.2H!F``"(8```D"`\```'
  16330. +M;-"K`!1R9$ZZ``!(>``P2'@``B\!80``Z$_O``Q*@&9<8&8@/```!VS0JP`4
  16331. +M2'@`,$AX``0O`&$``,9/[P`,2H!F.F!$("L`*&<,+P!A``$46$]*@&8F<`!@
  16332. +M+DJL`!I7P$0`2(!(P%.L`!I*@&<$<`!@%B!L`!X0U2E(`!Y2C4H59@#[!B`L
  16333. +M`!I,WR@`3G4@;P`$GOP`+$CG`1!#[P`(<`HBV%'(__Q![P`(3KH``"X`1^P`
  16334. +M#6`:(`=R"DZZ``!P,-*`%H%3BR`'<@I.N@``+@!*AV\(0>P``+?(8MI(:P`!
  16335. +M80``@%A/3-\(@-[\`"Q.=2`O``0B+P`(+V\`#``$2.<'!!HO`!<L`2X`2^P`
  16336. +M%V`<(`=R"DZZ``!P,-*`&H%3C2`'<@I.N@``+@!3ADJ';PY![``/N\ABV&`$
  16337. +M&H53C4'L``^[R&,((`93ADJ`;NQ(;0`!80``#EA/3-\@X$YU(&\`!"\-*D@@
  16338. +M+``:9Q@2'2!L`!X0@68$<`%@"E*L`!Y3K``:8.(J7TYU```#^`````\````!
  16339. +M```$O```!"8```02```#T````[P```.F```#H````X(```(X```")````A``
  16340. +M``'X```!R````9@```%H````$@````(```94```&4```!D0```8\```&%```
  16341. +M!@8```7@```%J@``!88```5:```%3@``!4@```4\```%,````#X````V````
  16342. +M'````!@````````#[X,```)?7T-81#,S``````D```7Z```%Z@``!:````60
  16343. +M```$W```!'X```1&```#&@```JR#```"0&UK=&EM90`````!```%@```````
  16344. +M``/Q`````P````!/4%13``0`0````_(```/J````>5-U;@!-;VX`5'5E`%=E
  16345. +M9`!4:'4`1G)I`%-A=```````````!`````@````,````$````!0````84W5N
  16346. +M9&%Y``!-;VYD87D``%1U97-D87D`5V5D;F5S9&%Y`%1H=7)S9&%Y``!&<FED
  16347. +M87D``%-A='5R9&%Y```````X````0````$@```!0````6@```&0```!L2F%N
  16348. +M`$9E8@!-87(`07!R`$UA>0!*=6X`2G5L`$%U9P!397``3V-T`$YO=@!$96,`
  16349. +M````D@```)8```":````G@```*(```"F````J@```*X```"R````M@```+H`
  16350. +M``"^2F%N=6%R>0!&96)R=6%R>0``36%R8V@`07!R:6P`36%Y`$IU;F4``$IU
  16351. +M;'D``$%U9W5S=```4V5P=&5M8F5R`$]C=&]B97(`3F]V96UB97(``$1E8V5M
  16352. +M8F5R``````#R````^@```00```$*```!$````10```$:```!(````2@```$R
  16353. +M```!.@```40E82`E8B`E92`E2#HE33HE4R`E60``)6TO)60O)7D@)4@Z)4TZ
  16354. +M)5,`)6TO)60O)7D```H`4$T``$%-```E2#HE30`E23HE33HE4R`E<``E2#HE
  16355. +M33HE4P``"0`E;2\E9"\E>0````````/L````)@````$```%Z```!=@```7(`
  16356. +M``%N```!:@```68```%B```!7@```5H```%6```!4@```4X```#N````Z@``
  16357. +M`.8```#B````W@```-H```#6````T@```,X```#*````Q@```,(```".````
  16358. +MB@```(8```""````?@```'H```!V````-````#`````L````*````"0````@
  16359. +M````'`````````/R```#ZP````D```/R```#Z0```!8@;P`$("\`"$CG)P(N
  16360. +M`"((+&P``"0\```#[4ZN_^(L`$ZZ``!*AF<<(`8B!TZZ```J`"(&3J[_W$J`
  16361. +M9@1*A6<$(`5@#DZN_WQ.N@``*4```'#_3-]`Y$YU```#[X8```)?1$]30F%S
  16362. +M90````$````2@P```T!C:&MA8F]R=`````````$````B@P``!$!?9&]?=')U
  16363. +M;F-A=&4````````!````+H,```1`8V]N=F5R=%]O<V5R<@```````0```$J&
  16364. +M```"7V5R<FYO```````!````3@````````/Q`````P````!/4%13``0`0```
  16365. +M`_(```/I````U2!O``0B;P`(("\`#"(O`!`O;P`4``0O;P`8``@O;P`<``R>
  16366. +M_``P2.<O-BXO`%@O2``L*@`H`7Q`Y8XO0``D+T$`*"])`#!P0.6(3KH``"I`
  16367. +M+T``1"`%4H!F$BQL``!.KO_*+T``0$*O`%!@)DAO`$!(>`@!+P5.N@``3^\`
  16368. +M#%*`9@1"KP!`<`$O0`!0(`5.N@``(`12@&82+&P``$ZN_\0O0``\0J\`3&!&
  16369. +MNH1F#"]O`$``/$*O`$Q@-DAO`#Q(>`@!+P1.N@``3^\`#%*`9@9P`"]``#PB
  16370. +M+P`\LJ\`0%;`1`!(@$C`+T``3"`$3KH``'#_OH!F$"!L```O:`#@`#A"KP!(
  16371. +M8%!P_KZ`9@PO;P`\`#A"KP!(8#Y(;P`X2'@(`2\'3KH``$_O``Q2@&8&<``O
  16372. +M0``X("\`."(O`#RR@&<*L*\`0&<$<`%@`G``+T``2"`'3KH``$JO`$!G``%D
  16373. +M2J\`/&<``5Q*KP`X9@92AV8``5`@#6<``40F37@`+V\`,``T8```K$J$9@8@
  16374. +M;P`L8`(@521(>@,J2&`:4H40%7(JL`%G#'(BL`%G!G(*L`%F`E*%4HU*%6;B
  16375. +M*F\`1"!-T<8B2]/%3>D``;W(920@!M"&T(4L`"!-3KH``"I`2H!G``#:(`N0
  16376. +MKP!$)DW7P"]-`$0@2Q"\`"!4BQ%\`"(``2I*8"`0%7(BL`%G!G(JL`%F!A;\
  16377. +M`"I@"G(*L`%F!!;\`"L6W4H59MP6_``B4H18KP`T*F\`-$J59@#_3D(3*F\`
  16378. +M7"`-9Q`B#2QL``!T_DZN_ZPH`&`">`!*A&8$(`UF/"IO`$0O+P!@+P0O+P!0
  16379. +M+R\`1"\O`%PO+P!0("\`6"(O`&@@34ZZ``!/[P`8*@!2@&<:($U.N@``(`5@
  16380. +M>"QL``!.KO]\3KH``"E```!*A&<2(@0L;```3J[_IF`&<`PI0```("\`0&<0
  16381. +M2J\`4&<*(@`L;```3J[_W"`O`#QG$$JO`$QG"B(`+&P``$ZN_]P@+P`X9Q!*
  16382. +MKP!(9PHB`"QL``!.KO_<*F\`1"`-9P8@34ZZ``!P_TS?;/3>_``P3G4@;P`$
  16383. +M(F\`""`O``PB+P`0+V\`%``$+V\`&``(+P4J+P`,+P4O+P`,2'C__V$`_-A/
  16384. +M[P`,*A].=0```^^#```"0&UA;&QO8P`````!````3(8```)?1$]30F%S90``
  16385. +M``@```+\```"Y@```M````*R```"G````D@```":````7(,```)?:6]C=&P`
  16386. +M``````,```$D````Q@```'B#```$0%]P<V5U9&]?8VQO<V4```````,```%4
  16387. +M````[@```)"&```!7U]U<P````$```#X@P```D!R96%L;&]C`````0```=B#
  16388. +M```$0%]S=&%R=%]P<F]C97-S``````$```*$@P```D!F<F5E`````````@``
  16389. +M`PX```*4@P``!$!C;VYV97)T7V]S97)R```````!```"I(8```)?97)R;F\`
  16390. +M``````(```*^```"J`````````/Q`````P````!/4%13``0`0````_(```/I
  16391. +M`````G`!3G5P`4YU```#\0````,`````3U!44P`$``````/R```#Z0````X@
  16392. +M+P`$+P<N`$ZZ```@!R!L``!R`$ZZ``!@#"`L``!.N@``3KH``"!L``!.N@``
  16393. +M2H!GZ'``+A].=0```^^#```#0&-H:V%B;W)T`````````0````J&```#7U]O
  16394. +M9&1?=&EM97(``````@```"@````0@P``!$!?=&EM97)?<W1A<G0````````!
  16395. +M````%H8```-?7V]D9%]S:6<````````!````'(,```1`7W=A:71?<VEG;F%L
  16396. +M<P```````0```""#```$0%]H86YD;&5?<VEG;F%L<P````$````D@P``!$!?
  16397. +M=&EM97)?97AP:7)E9``````!````+`````````/Q`````P````!/4%13``0`
  16398. +M0````_(```/I````#R!O``0@+P`(2.<!!"X`*DA.N@``+P=(>`,!+PU.N@``
  16399. +M3^\`#$S?((!.=2!O``0@+P`(2.<!!$S?((!@S````^^#```#0&-H:V%B;W)T
  16400. +M`````````0```!*#```"7V]P96X````````!````'@````````/Q`````P``
  16401. +M``!/4%13``0``````_(```/I````(R`O``0@;P`((B\`#%E/2.<#-"P!+@`J
  16402. +M2$ZZ```@!TZZ```F0$J`9T0(*P`!``-G-@@K``,``V<6(&L`&"](`!0@:P`$
  16403. +M<`!R`B)O`!1.D2!K`!0O2``4(`8@:P`$(DTD;P`43I)@"'`-*4```'#_3-\L
  16404. +MP%A/3G4@+P`$(&\`""(O``Q(YP,$3-\@P&"````#[X,```-`8VAK86)O<G0`
  16405. +M```````!````&H,```-`7V9I;F1?9F0````````!````((8```)?97)R;F\`
  16406. +M``````$```!J`````````_$````#`````$]05%,`!`!````#\@```^D````,
  16407. +M(&\`!%%/+PTJ2$'O``1.N@``2H!J!'#_8`X@#6<&("\`!"J`("\`!"I?4$].
  16408. +M=0`````#[X,```-`7V=E='1I;64````````!````$`````````/Q`````P``
  16409. +M``!/4%13``0``````_(```/I````'2!O``2>_`!`2.<[%BI(3KH``"`-9U)*
  16410. +M%6=.(@U![P`@)`@L;```=D!X`$ZN_'8N`&TV3J[_?"P`4H!.N@``)D!*@&<D
  16411. +MOH9G%"8&4H,B#20+3J[\=DJ`;Q`@`F`.($(B2Q+89OP@"V`"<`!,WVC<WOP`
  16412. +M0$YU```#[X,```-`8VAK86)O<G0````````!````$(8```)?1$]30F%S90``
  16413. +M``$````D@P```D!M86QL;V,``````0```#P````````#\0````,`````3U!4
  16414. +M4P`$`$````/R```#Z0```!,@;P`$(F\`"$CG,Q(F22((+&P``'3^3J[_K"X`
  16415. +M3KH``$J'9QHB"R0'=@!.KOY$+``B`DZN_Z9*AF<$(`-@!DZZ``!P_TS?2,Q.
  16416. +M=0`````#[X8```)?1$]30F%S90````$````2@P```T!C:&MA8F]R=```````
  16417. +M``$````>@P```D!?<V5T97)R`````0```$`````````#\0````,`````3U!4
  16418. +M4P`$`$````/R```#Z0```"0@;P`$GOP`#$CG`10J2$H89OQ3B)'-(`@F3=?`
  16419. +M78M^84ZZ```O+```2&P``$AO`!=.N@``3^\`#$'O``\B2$H99OQ3B9/((`ER
  16420. +M!;"!;PA![P`*T<!@!$'O``\O"$AL``0O"TZZ``!/[P`,%H<@37``3KH``$J`
  16421. +M9@I2!W!ZO@!OZD(5(`U,WRB`WOP`#$YU``````/X`````@````$```!>````
  16422. +M*@````````/O@P```T!C:&MA8F]R=`````````$````BA@```5]?=7,````!
  16423. +M````)H,```-?7W-P<FEN=&8````````"````9````#*#```#0%]?86-C97-S
  16424. +M`````````0```'(````````#\0````,`````3U!44P`$`$````/R```#Z@``
  16425. +M``(E;'@`825S`````_(```/I````!B!O``0O#2I(3KH``"!-<$#IB"I?3OH`
  16426. +M`````^^#```#0&-H:V%B;W)T`````````0````J#```"0&=E=&-W9``````!
  16427. +M````%@````````/Q`````P````!/4%13``0``````_(```/I````#R!O``0@
  16428. +M+P`(2.<A!BX`*DA.N@``(`=.N@``)``B#2QL``!.KO]&2H!G!'``8`9.N@``
  16429. +M</],WV"$3G4``````^^#```#0&-H:V%B;W)T`````````0```!*#```%0%]M
  16430. +M86ME7W!R;W1E8W1I;VX````````!````&(8```)?1$]30F%S90````$````@
  16431. +M@P```D!?<V5T97)R`````0```#`````````#\0````,`````3U!44P`$`$``
  16432. +M``/R```#Z0```!P@+P`$(B\`""]O``P`!%%/2.<'`"HO`!@L`2X`3KH``"`'
  16433. +M3KH``$J`9QHB0"!I`!@O2``0(`8B!2!I``0B;P`03I%@`G#_3-\`X%!/3G4@
  16434. +M+P`$(B\`""]O``P`!$CG!P`J+P`0+T4`$$S?`.!@H``````#[X,```-`8VAK
  16435. +M86)O<G0````````!````'H,```-`7V9I;F1?9F0````````!````)```````
  16436. +M``/Q`````P````!/4%13``0``````_(```/I````'"`O``0@;P`((B\`#%E/
  16437. +M2.<#-"P!+@`J2$ZZ```@!TZZ```F0$J`9R8(*P````-G&"!K`!`O2``4(`8@
  16438. +M:P`$(DTD;P`43I)@"'`-*4```'#_3-\LP%A/3G4@+P`$(&\`""(O``Q(YP,$
  16439. +M3-\@P&">``````/O@P```T!C:&MA8F]R=`````````$````:@P```T!?9FEN
  16440. +M9%]F9`````````$````@A@```E]E<G)N;P```````0```$P````````#\0``
  16441. +M``,`````3U!44P`$`$````/R```#Z0```($@+P`$(&\`"")O``PO;P`0``0O
  16442. +M;P`4``B>_``L2.<_-B9)*D@O0`!`)&\`7"`*9PY*DF8*2JH`!&8$<`%@`G``
  16443. +M<@`O0``T)`UG`B(5=``O00`L)@MG`B03>@!^`2]"`#!@4B@O`"S(ARPO`##,
  16444. +MATZZ``!*A&8$2H9G-B`%3KH``"1`2H!F!G#_8``!;DJ$9P@(*@````-G#$J&
  16445. +M9Q0(*@`!``-F#'`-*4```'#_8``!2E*%WH>ZKP!`;:@D;P!<(`IG$"`2(BH`
  16446. +M!"!L``!.N@``8`@@;```3KH``'H`(`5"KP!0>@!^`2]``"A@.B@O`"S(ARPO
  16447. +M`##,ATJ$9@1*AF<B(`5.N@``(D`@:0`(+T@`/"`$(@8@:0`$(F\`/$Z1@:\`
  16448. +M4%*%WH>ZKP!`;<`H+P!0(`12@&<&2J\`-&<(<`!.N@``8`H@+```@(1.N@``
  16449. +M+T``3'P`>`$N+P`P*B\`*&!P("\`+,"$+T``2"('PH0O00!$2H!F!$J!9U(@
  16450. +M!DZZ```B0"!I``Q(;P!$+T@`/"!I``1#[P!,+&\`/$Z66$\@+P!(9@HB#6<&
  16451. +M(@1&@<.5("\`1&8*(@MG!B($1H'#DTJO`$AF!DJO`$1G`E*%4H;8A+RO`$!M
  16452. +MBB`O`$Q.N@``2H5F%"!L``!.N@``2H!F"$JO`#1G`/[H(`5,WVS\WOP`+$YU
  16453. +M``````/O@P```T!C:&MA8F]R=`````````$```!P@P```T!?9FEN9%]F9```
  16454. +M``````,```%^```!!````'Z&```"7V5R<FYO```````!````J(8```-?7V]D
  16455. +M9%]T:6UE<@`````#```!Y````-0```#*@P``!$!?=&EM97)?<W1A<G0`````
  16456. +M```!````SH,```1`7W1I;65R7V%B;W)T`````````0```-B#```$0%]C:&5C
  16457. +M:U]S:6=N86QS``````$```%`A@```U]?;V1D7W-I9P````````$```%&@P``
  16458. +M!$!?=V%I=%]S:6=N86QS```````!```!3(,```1`7VAA;F1L95]S:6=N86QS
  16459. +M`````0```=R#```$0%]T:6UE<E]E>'!I<F5D``````$```'H`````````_$`
  16460. +M```#`````$]05%,`!`!````#\@```^D````@44](YR,D+B\`($ZZ```L+P`H
  16461. +M(`=.N@``*D!*@&=8("\`)%>`9PQ3@&<.<!8I0```8$1P#,"58$`@%70,S((D
  16462. +M``)"__.$ABJ"<@3"@G0$P(*P@6<>+T$`&"!M`"`O2``4(&T`!$/O`!AP`"1O
  16463. +M`!1.DF`&<`!@`G#_3-\DQ%!/3G4```/O@P```T!C:&MA8F]R=`````````$`
  16464. +M```,@P```T!?9FEN9%]F9`````````$````6A@```E]E<G)N;P```````0``
  16465. +M`"X````````#\0````,`````3U!44P`$`$````/R```#Z0````````/Q````
  16466. +M`P````!/4%13``0``````_(```/J````WF%M:6=A('-P96-I9FEC(&5R<F]R
  16467. +M````````56YK;F]W;B!E<G)O<@!N;W0@;W=N97(`;F\@<W5C:"!F:6QE(&]R
  16468. +M(&1I<F5C=&]R>0!N;R!S=6-H('!R;V-E<W,`:6YT97)R=7!T960@<WES=&5M
  16469. +M(&-A;&P`:2]O(&5R<F]R`&YO('-U8V@@9&5V:6-E(&]R(&%D9')E<W,`87)G
  16470. +M=6UE;G0@;&ES="!T;V\@;&]N9P``97AE8R!F;W)M870@97)R;W(`8F%D(&9I
  16471. +M;&4@;G5M8F5R`&YO(&-H:6QD('!R;V-E<W,``&YO(&UO<F4@<')O8V5S<V5S
  16472. +M`&YO="!E;F]U9V@@;65M;W)Y`'!E<FUI<W-I;VX@9&5N:65D`&)A9"!A9&1R
  16473. +M97-S`&)L;V-K(&1E=FEC92!R97%U:7)E9`!M;W5N="!D979I8V5S(&)U<WD`
  16474. +M`&9I;&4@97AI<W1S`&-R;W-S+61E=FEC92!L:6YK`&YO('-U8V@@9&5V:6-E
  16475. +M``!N;W0@82!D:7)E8W1O<GD`:7,@82!D:7)E8W1O<GD``&EN=F%L:60@87)G
  16476. +M=6UE;G0``&9I;&4@=&%B;&4@;W9E<F9L;W<`=&]O(&UA;GD@;W!E;B!F:6QE
  16477. +M<P!N;W0@82!T>7!E=W)I=&5R``!T97AT(&9I;&4@8G5S>0``9FEL92!T;V\@
  16478. +M8FEG``!N;R!S<&%C92!L969T(&]N(&1E=FEC90!I;&QE9V%L('-E96L``')E
  16479. +M860M;VYL>2!F:6QE('-Y<W1E;0!T;V\@;6%N>2!L:6YK<P``8G)O:V5N('!I
  16480. +M<&4`;6%T:"!A<F=U;65N=`!R97-U;'0@=&]O(&QA<F=E``!)+T\@<W1R96%M
  16481. +M(&5M<'1Y``!F:6QE(&YA;64@=&]O(&QO;F<``&1I<F5C=&]R>2!N;W0@96UP
  16482. +M='D`=&]O(&UA;GD@<V]F="!L:6YK<R`H;&]O<#\I`````!H````H````,@``
  16483. +M`$P```!<````=````'X```"8````L````,(```#2````Y````/8```$(```!
  16484. +M&@```28```$\```!4````5P```%N```!?@```8X```&>```!L````<0```'8
  16485. +M```!Z@```?H```((```"(````BX```)$```"5````F````)N```"@````I(`
  16486. +M``*F```"N@```"8``````^P````H`````0```VX```-J```#9@```V(```->
  16487. +M```#6@```U8```-2```#3@```TH```-&```#0@```SX```,Z```#-@```S(`
  16488. +M``,N```#*@```R8```,B```#'@```QH```,6```#$@```PX```,*```#!@``
  16489. +M`P(```+^```"^@```O8```+R```"[@```NH```+F```"X@```MX```+:```"
  16490. +MU@```!8````````#\@```^D```!%("\`!"E```!*@&<``(9R9Y"!9P``@E6`
  16491. +M9P``@'()D(%G?%.`9WA3@&=T4X!G<%.`9VQ3@&=H4X!G:%.`9VAR49"!9V93
  16492. +M@&=F4X!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V95@&=F4X!G9E.`
  16493. +M9V93@&=F4X!G9E.`9V95@&=F4X!G9E.`9V93@&=F8&AP`&!F<`Q@8G`+8%YP
  16494. +M%F!:<`=@5G`(8%)P$&!.<!%@2G`"8$9P`F!"<!9@/G`'8#IP%F`V<"1@,G`6
  16495. +M8"YP%F`J<!Y@)G`28")P)6`><"9@&G`38!9P%F`2<!Q@#G`-8`IP#6`&<`U@
  16496. +M`G#_3G4O#BQL``!.KO]\80#^^BE````L7TYU```#^`````$````!```!#@``
  16497. +M``````/OA@```E]?3U-%4E(``````0````:&```"7T1/4T)A<V4````!```!
  16498. +M`@````````/Q`````P````!/4%13``0`0````_(```/K`````0```_(```/I
  16499. +M````!4ZZ``!.N@``3KH``'(&3OH````````#[X,```-`8VAK86)O<G0`````
  16500. +M```!`````H,```-`7V-L;W-E7V%L;``````!````!H,```)`9V5T<&ED````
  16501. +M``$````*@P```D!K:6QL`````````0```!`````````#\0````,`````3U!4
  16502. +M4P`$``````/R```#Z0```%D@;P`$("\`"%E/2.<!%BX`+T@`$"!O`!`J4&!D
  16503. +M<`VP+0`(9EH@+0"L9P;E@"!`8`*1R"9(("T`G+"'9S0@+0"@L(=G+"`M`."P
  16504. +MAV<D(`MG+B`K`!RPAV<8("L`(+"'9Q`@*P`XL(=G""`K`#"PAV8.(DUP8.^(
  16505. +M+'@`!$ZN_KPJ54J59IA,WVB`6$].=2`O``0B+P`(2.<!`BX`(`%3@&<,4X!G
  16506. +M"%.`9P1=@&8L+'@`!$ZN_WP@;```T/P!EB`'80#_2"!L``#0_`&D(`=A`/\Z
  16507. +M3J[_=G``8`AP%BE```!P_TS?0(!.=2`O``0B+P`(2.<&!"P!*@!.N@``2H5J
  16508. +M`D2%NJP``&8.2H9G!B`&3KH``'``8$@@!4ZZ```J0$J`9P9*K0`49PIP`RE`
  16509. +M``!P_V`L(`9G*"(M`!#!06$`_U@B`'`)O(!F%'(!*T$`%"M``!AP%$ZZ``!P
  16510. +M`&`"(`%,WR!@3G4``````^^&```"7U-Y<T)A<V4````"````Q````+:&```"
  16511. +M7V5R<FYO```````"```!*@```-R#```#0&-H:V%B;W)T`````````0```/B&
  16512. +M```#7U]O=7)?<&ED`````````0```0*#```$0%]S:6=?9&ES<&%T8V@`````
  16513. +M``(```%4```!#H,```-`7V9I;F1?<&ED```````!```!&`````````/Q````
  16514. +M`P````!/4%13``0`0````_(```/I````0R!O``1(YP`&*D@B32QX``1.KO\$
  16515. +M($U,WV``3OH``"`O``1(YP$$+@`J;``(8`X@+0`,L(=F!"`-8`@J54J59NYP
  16516. +M`$S?((!.=4CG(`)![``(3KH``"`L```B+```)`"S@@*"`'___RE"``12@BE"
  16517. +M```O`2\`2&P``$AL`!1.N@``3^\`$"QX``1.KOUF*4``.&<00>P`%'``3KH`
  16518. +M`"E``#1F"DAL``Y.N@``6$],WT`$3G5(YP`&("P`.&<*($`L>``$3J[]8$JL
  16519. +M`#1G."QX``1.KO]\8`PB37`<+'@`!$ZN_RX@;``T+'@`!$ZN_HPJ0$J`9N(@
  16520. +M;``T3KH``"QX``1.KO]V3-]@`$YU``````/X`````@````$```"D````=@``
  16521. +M``P````"````]@```.0```#(````N````)X```"4````C@```'H```!N````
  16522. +M:````$X````J`````````^^#```"0&9R964````````!````'(,```)`3F5W
  16523. +M3&ES=`````$```!2A@```5]?=7,````!````5H8```1?7W-T87)T=7!?=&EM
  16524. +M90```````0```%J#```#7U]S<')I;G1F`````````0```'Z#```#0$-R96%T
  16525. +M95!O<G0``````0```)J#```"7U]F86EL```````!````J(,```-`1&5L971E
  16526. +M4&]R=``````!````^@````````/Q`````P````!/4%13``0`0````_(```/J
  16527. +M````!F1O;W(N)6QX+B5L>```3F\@;65M;W)Y`````_(```/K````#P```_(`
  16528. +M``/I````+R!O``0@+P`((B\`#")O`!`O;P`4``0O;P`8``A93TCG#S8H+P`L
  16529. +M*B\`*"P!+@`J22](`"`L>``$3J[]9B9`2H!G,"!+(`1.KOUR)$!*@&<B(`UG
  16530. +M""5-`"@E10`D(&\`("`'(DHB!DZN_D1*`&8$(`I@%B`*9P8@2DZN_6P@"V<&
  16531. +M($M.N@``<`!,WVSP6$].=2!O``1(YP`&*D@@#6<8(DTL>``$3J[^/B!M``Y.
  16532. +MN@``($U.KOUL3-]@`$YU```#[X,```-`1&5L971E4&]R=``````"````K@``
  16533. +M`(0````````#\0````,`````3U!44P`$``````/R```#Z0```!0@;P`$("\`
  16534. +M"$CG(08N`"I(3KH``"(-+&P``$ZN_XA*@&<B(@!.KO^F(`=.N@``(`=.N@``
  16535. +M)``B#4ZN_T9*@&<$<`!@!DZZ``!P_TS?8(1.=0```^^#```#0&-H:V%B;W)T
  16536. +M`````````0```!*&```"7T1/4T)A<V4````!````&(,```5`7VUA:V5?<')O
  16537. +M=&5C=&EO;@````````(````R````+(,```)`7W-E=&5R<@````$```!&````
  16538. +M`````_$````#`````$]05%,`!`!````#\@```^D```!U(&\`!")O``@O;P`,
  16539. +M``0@+P`0+V\`%``(2.<'-"X`)&\`("9)*D@L*P!T)*\`'$*J`!(U?``!``Y"
  16540. +M:@`0)7P```(``#(U?``"``PE:P"``#8@*P!\9A`B*P`$;PHE?```"```%F`$
  16541. +M)4``%B53``1!ZP"$3KH``"5``"(E0``:)4``*B`K``1:@&<^58!G4%F`9T!5
  16542. +M@&9F(`UG'$AX`/](;```+PU.N@``3^\`#"H`;P8E10`68`@E?````0``%B5\
  16543. +M``"@```(8$HE?```$```"&!`)7P``$````A\`&`T2I-F$$HK``AF"B5\```@
  16544. +M```(8"`E?```@```"&`6("L`!&\&<$#AB&`&(#P``(``)4``"$J'9P)\`"`&
  16545. +M3KH``(&J``A,WRS@3G4@;P`$(F\`"%E/2.<C%BI(?@`O20`80J<L;```<@(D
  16546. +M#TZN_QQ/[P`$)D!*@&=0(@UT_DZN_ZPN`&=$(@<D"TZN_YI*@&<X(@=.KO\N
  16547. +M2H!7QD0&2(9(QDJ`9P8B`$ZN_Z8@!^6`+R\`&"!`+R@`#")"(`8@36$`_GI0
  16548. +M3WP`8`Y\_TZN_WQ.N@``*4```$J'9P8B!TZN_Z8@"V<()`MR`DZN_Q8@!DS?
  16549. +M:,183TYU```#^`````$````!````H`````````/O@P```T!?86UI9V$R9VUT
  16550. +M``````$```!T@P```U]R96%D;&EN:P````````$```"F@P```T!?;6%K95]M
  16551. +M;V1E``````$```$<A@```E]$3U-"87-E`````0```4*#```$0&-O;G9E<G1?
  16552. +M;W-E<G(```````$```&NA@```E]E<G)N;P```````0```;(````````#\0``
  16553. +M``,`````3U!44P`$`$````/R```#ZP```$````/R```#^P``")L11`!?<V5T
  16554. +M:FUP`'1E>'0`0%]L;VYG:FUP`$!?<V5T:FUP`%]?;&]N9VIM<`!?7W-E=&IM
  16555. +M<`!S<')I;G1F`%],5D]287=$;T9M=`!?06)S17AE8T)A<V4`7U]S<')I;G1F
  16556. +M`'1M<&YA;2YC`%]M:W1E;7``0'1M<&YA;0!?=&UP;F%M`%]?34521T5$`'!O
  16557. +M<&5N+F,`7W=A:71P:60`0&9C;&]S90!`9G)E90!`7W-T87)T7W!R;V-E<W,`
  16558. +M0%]S971E<G(`7V5R<FYO`%]$3U-"87-E`$!F;W!E;@!?7V9I9F]?8F%S90!?
  16559. +M7V9I9F]?;V9F<V5T`$!M86QL;V,`0'!C;&]S90!?<&-L;W-E`$!P;W!E;@!?
  16560. +M<&]P96X`<W1A<G0N8P!`8V]N=F5R=%]O<V5R<@!?7W!R;V-E<W-E<P!?7W-T
  16561. +M86-K7W-I>F4`7U]N97AT7W!I9`!?7V1O;W)?;F%M90!?7W-T87)T=7!?<&]R
  16562. +M=`!?3&EN:V5R1$(`7U]S=&%R=%]P<F]C97-S`%]?8VAI;&1?9&]O<E]N86UE
  16563. +M`%]?8VAI;&1?8V]M;6%N9%]L96X`7U]C:&EL9%]C;VUM86YD`%]?8VAI;&1?
  16564. +M97AI=`!?7V-H:6QD7V5N=')Y`&=E='!I9"YC`%]?;W5R7W!I9`!`8VAK86)O
  16565. +M<G0`0&=E='!I9`!?9V5T<&ED`'-I9VYA;"YC`%]?<VEG7VAA;F1L97)S`$!S
  16566. +M:6=N86P`7W-I9VYA;`!`<VEG=F5C`%]S:6=V96,`<VEG<V5T;6%S:RYC`$!?
  16567. +M<VEG7V1I<W!A=&-H`%]?<VEG7W!E;F1I;F<`7U]S:6=?;6%S:P!`<VEG8FQO
  16568. +M8VL`7W-I9V)L;V-K`$!S:6=S971M87-K`%]S:6=S971M87-K`'-T870N8P!?
  16569. +M<F5A9&QI;FL`0%]F:6)S=&%T`$!?;&9I8G-T870`7U]T96UP7V9N86UE`%]L
  16570. +M87-T7V5N=')Y`$!?9V5T7V-D`%]L87-T7V1I<@!`;'-T870`7VQS=&%T`$!S
  16571. +M=&%T`%]S=&%T`&1I<BYC`$!S965K9&ER`%]S965K9&ER`$!T96QL9&ER`%]T
  16572. +M96QL9&ER`$!R96%D9&ER`%]R96%D9&ER`$!C;&]S961I<@!?8VQO<V5D:7(`
  16573. +M0&]P96YD:7(`7V]P96YD:7(`9&ER7V1A=&$N8P!?7V=E=%]C9`!A8V-E<W,N
  16574. +M8P!`86-C97-S`%]A8V-E<W,`0%]?86-C97-S`%]?7V%C8V5S<P!F<W1A="YC
  16575. +M`%]I;V-T;`!`9G-T870`7V9S=&%T`'-Y;6QI;FLN8P!`<WEM;&EN:P!?<WEM
  16576. +M;&EN:P!M97-S86=E+F,`0&5X:70`7U]0<F]G<F%M3F%M90!?7U="96YC:$US
  16577. +M9P!?7W5S`%]?9F%I;`!?7VUE<W-A9V4`86QL;V-D;W,N8P!?06QL;V-$;W-/
  16578. +M8FIE8W1486=S`'-E=&IM<"YC`$!L;VYG:FUP`%]L;VYG:FUP`$!S971J;7``
  16579. +M9V5T:&]S=&YA;64N8P!?<W1R;F-P>0!?7W-Y<W1E;5]N86UE`$!G971H;W-T
  16580. +M;F%M90!?9V5T:&]S=&YA;64`<&5R<F]R+F,`7U]/4T524@!?<WES7V5R<FQI
  16581. +M<W0`7W-Y<U]N97)R`$!W<FET90!`<&5R<F]R`%]P97)R;W(`<VEG;&ES="YC
  16582. +M`%]S>7-?<VEG;&ES=`!W86ET-"YC`$!?:&%N9&QE7W-I9VYA;',`0%]W86ET
  16583. +M7W-I9VYA;',`0%]F<F5E7V5N=')Y`$!W86ET<&ED`$!W86ET`%]W86ET`$!W
  16584. +M86ET,P!?=V%I=#,`0'=A:70T`%]W86ET-`!P<V5U9&]?8RYC`$!?9G)E95]F
  16585. +M9`!`7V9I;F1?9F0`0%]P<V5U9&]?8VQO<V4`7U]P<V5U9&]?8VQO<V4`<FEN
  16586. +M9&5X+F,`0'-T<G)C:'(`0')I;F1E>`!?<FEN9&5X`&EN9&5X+F,`0'-T<F-H
  16587. +M<@!`:6YD97@`7VEN9&5X`'1I;65R<RYC`$!?9&5V:6-E7V-L;W-E`$!?9&5V
  16588. +M:6-E7V]P96X`0%]T:6UE<E]E>'!I<F5D`%]?=&EM97)?97AP:7)E9`!`7W1I
  16589. +M;65R7W-T87)T`%]?=&EM97)?<W1A<G0`0%]T:6UE<E]S:6<`7U]T:6UE<E]S
  16590. +M:6<`0%]T:6UE<E]A8F]R=`!?7W1I;65R7V%B;W)T`$!?9G)E95]T:6UE<@!?
  16591. +M7V9R965?=&EM97(`0%]A;&QO8U]T:6UE<@!?7V%L;&]C7W1I;65R`&9I9F]F
  16592. +M9"YC`%]?<W1A<G1U<%]T:6UE`$!?8VQE86YU<%]F:69O`%]?8VQE86YU<%]F
  16593. +M:69O`$!?:6YI=%]F:69O`%]?:6YI=%]F:69O`%]?9FEF;U]S:6<`7U]F:69O
  16594. +M7V]K`%]?1FEF;T)A<V4`8VQO<V4N8P!`8VQO<V4`7V-L;W-E`$!?7V-L;W-E
  16595. +M`%]?7V-L;W-E`&9I;&5S+F,`0%]L87-T7V9D`%]?;&%S=%]F9`!?7V9I;F1?
  16596. +M9F0`7U]F<F5E7V9D`$!?86QL;V-?9F0`7U]A;&QO8U]F9`!U=&EM92YC`$!?
  16597. +M9VUT,F%M:6=A`$!T:6UE`$!U=&EM90!?=71I;64`8F-O<'DN8P!`;65M;6]V
  16598. +M90!`8F-O<'D`7V)C;W!Y`&%M:6=A=&EM92YC`%]D87EL:6=H=`!?='IN86UE
  16599. +M`%]?0UA$,S,`0&QO8V%L=&EM90!`7V=E='1I;64`0&9T:6UE`%]F=&EM90!`
  16600. +M9V5T=&EM96]F9&%Y`%]G971T:6UE;V9D87D`=&EM96-O;G9E<G0N8P!?5&EM
  16601. +M97)"87-E`$!?86UI9V$R9VUT`%]?86UI9V$R9VUT`%]?9VUT,F%M:6=A`%]?
  16602. +M9V5T=&EM90!P=V0N8P!`9V5T;&]G:6X`7V=E=&QO9VEN`$!G971P=VYA;0!?
  16603. +M9V5T<'=N86T`0&=E='!W=6ED`%]G971P=W5I9`!?7V%M:6=A7W5S97(`<F5A
  16604. +M9&QI;FLN8P!?<W1R;&5N`$!R96%D;&EN:P!A;&QO8V$N8P!?;6%L;&]C`%]F
  16605. +M<F5E`%]A;&QO8V$`=6YL:6YK+F,`0'5N;&EN:P!?=6YL:6YK`'!I<&4N8P!`
  16606. +M<W1R8V%T`$!.97=,:7-T`$!S;V-K971P86ER`%]S;V-K971P86ER`$!P:7!E
  16607. +M`%]P:7!E`&=R<"YC`$!G971G<FYA;0!?9V5T9W)N86T`0&=E=&=R9VED`%]G
  16608. +M971G<F=I9`!S:6=N86QS+F,`7U]&4$524@!`7U]E>&ET`$!?9FEN9%]P:60`
  16609. +M0%]C;&5A;G5P7W!R;V-E<W-E<P!?7V-H:6QD<F5N7V5X:70`0%]I;FET7W!R
  16610. +M;V-E<W-E<P!`7V-L96%N=7!?<VEG;F%L<P!?7V-L96%N=7!?<VEG;F%L<P!`
  16611. +M7VEN:71?<VEG;F%L<P!?7VEN:71?<VEG;F%L<P!`0VAK7T%B;W)T`%]#:&M?
  16612. +M06)O<G0`7V-H:V%B;W)T`$!#6$9%4E(`7T-81D524@!?7VAA;F1L95]S:6=N
  16613. +M86QS`%]?=V%I=%]S:6=N86QS`$!?8VAE8VM?<VEG;F%L<P!?7V-H96-K7W-I
  16614. +M9VYA;',`7U]S:6=?9&ES<&%T8V@`0&%L87)M`%]A;&%R;0!?;6%I;BYC`$!M
  16615. +M86EN`$!?7V=E=&5N=@!`='%S;W)T`$!S=')N8W!Y`%]?7V-T>7!E`$!?:6YI
  16616. +M=%]U;FEX:6\`7U]?:6]B`%]?6$-%6$E4`%]3>7-"87-E`$!R96%L;&]C`%]?
  16617. +M7VUA:6X`0&UA:V5?96YV:7)O;@!?;6%K95]E;G9I<F]N`%]E;G9I<F]N`%]?
  16618. +M;V1D7W-I9P!?7V]D9%]T:6UE<@!U;6%S:RYC`$!U;6%S:P!?=6UA<VL`<')O
  16619. +M=&5C=&EO;BYC`$!?;6%K95]M;V1E`%]?;6%K95]M;V1E`$!?;6%K95]P<F]T
  16620. +M96-T:6]N`%]?;6%K95]P<F]T96-T:6]N`%]U<V5?86UI9V%?9FQA9W,`9VED
  16621. +M+F,`0&=E=&5G:60`7V=E=&5G:60`0&=E=&=I9`!?9V5T9VED`%]E>&ET+F,`
  16622. +M0%]E>&ET`%]?97AI=`!?7U]E>&ET`$!?8VQO<V5?86QL`%]?8VQO<V5?86QL
  16623. +M`&EO8W1L+F,`0&EO8W1L`&]P96XN8P!`7V%L;&]C7V%M:6=A9F0`0'-T<FEC
  16624. +M;7``7V]P96X`7U]?;W!E;@!C=&EM92YC`%]S<')I;G1F`$!R96%D`$!?='IS
  16625. +M970`7U]T>G-E=`!`;6MT:6UE`%]M:W1I;64`0&-T:6UE`%]C=&EM90!`87-C
  16626. +M=&EM90!?87-C=&EM90!`9VUT:6UE`%]G;71I;64`7VQO8V%L=&EM90!`='IS
  16627. +M971W86QL`%]T>G-E='=A;&P`0'1Z<V5T`%]T>G-E=`!?=&EM97IO;F4`86UI
  16628. +M9V%D;W,N8P!?7VEN:71?=6YI>&EO`%]?86QL;V-?86UI9V%F9`!`7V1O7W1R
  16629. +M=6YC871E`%]?9&]?=')U;F-A=&4`<F5N86UE+F,`0')E;F%M90!?<F5N86UE
  16630. +M`&-H;W=N+F,`0&9C:&]W;@!?9F-H;W=N`$!C:&]W;@!?8VAO=VX`8F-M<"YC
  16631. +M`$!B8VUP`%]B8VUP`&)Z97)O+F,`0&)Z97)O`%]B>F5R;P!F=')U;F-A=&4N
  16632. +M8P!`9G1R=6YC871E`%]F=')U;F-A=&4`9F-H;6]D+F,`0&9C:&UO9`!?9F-H
  16633. +M;6]D`&UK9FEF;RYC`$!M:VYO9`!?;6MN;V0`0&UK9FEF;P!?;6MF:69O`&ES
  16634. +M871T>2YC`$!I<V%T='D`7VES871T>0!S:6=P875S92YC`$!S:6=P875S90!?
  16635. +M<VEG<&%U<V4`<FUD:7(N8P!`<FUD:7(`7W)M9&ER`'-T<F9T:6UE+F,`0'-T
  16636. +M<F9T:6UE`%]S=')F=&EM90!T<G5N8V%T92YC`$!T<G5N8V%T90!?=')U;F-A
  16637. +M=&4`97AE8RYC`$!E>&5C`%]E>&5C`$!E97AE8P!?965X96,`=6ED+F,`0&=E
  16638. +M=&5U:60`7V=E=&5U:60`0&=E='5I9`!?9V5T=6ED`'-L965P+F,`0'-L965P
  16639. +M`%]S;&5E<`!C<F5A="YC`$!C<F5A=`!?8W)E870`0%]?8W)E870`7U]?8W)E
  16640. +M870`=W)I=&4N8P!?=W)I=&4`0%]?=W)I=&4`7U]?=W)I=&4`=&EM92YC`%]T
  16641. +M:6UE`&=E=&5N=BYC`%]?7V=E=&5N=@!L:6YK+F,`0&QI;FL`7VQI;FL`;6MT
  16642. +M96UP+F,`0&UK=&5M<`!G971W9"YC`$!G971C=V0`0&=E='=D`%]G971W9`!C
  16643. +M:&UO9"YC`$!C:&UO9`!?8VAM;V0`;'-E96LN8P!`;'-E96L`7VQS965K`$!?
  16644. +M7VQS965K`%]?7VQS965K`')E860N8P!?<F5A9`!`7U]R96%D`%]?7W)E860`
  16645. +M<V5L96-T+F,`0'-E;&5C=`!?<V5L96-T`&9C;G1L+F,`7V9C;G1L`&5R<F]R
  16646. +M7VUS9RYC`&5R<F]R+F,`7U]S971E<G(`7V-O;G9E<G1?;W-E<G(`86)O<G0N
  16647. +M8P!`:VEL;`!`86)O<G0`7V%B;W)T`&MI;&PN8P!?:VEL;`!P<F]C97-S97,N
  16648. +M8P!`1&5L971E4&]R=`!`0W)E871E4&]R=`!?7V-L96%N=7!?<')O8V5S<V5S
  16649. +M`%]?:6YI=%]P<F]C97-S97,`7U]F:6YD7W!I9`!?7V9R965?96YT<GD`9&5V
  16650. +M:6-E<RYC`%]?9&5V:6-E7V-L;W-E`%]?9&5V:6-E7V]P96X`;6MD:7(N8P!`
  16651. +M;6MD:7(`7VUK9&ER`&9I8G-T870M:&%R9"YC`%]?9FEB<W1A=`!?7VQF:6)S
  16652. +M=&%T`````0````$`"0`)`^D````$``X`%@`!`!@`!``!`"$`#@`!`"L````!
  16653. +M`#0`#``!``D`#`/I``(`/`!)``$`5@````$`8``I``,`"0`*`^D``0!H``(`
  16654. +M<0`$``$`>0````$`@0`$`^H``````($`"0/K``````"*`%0``P`)`&\#Z0`,
  16655. +M`)$`F@"B`*@`N`#"`,D`T0!5`-D`Y0#R``0`^P%>``$!`P%:``$!"P`(``$!
  16656. +M$@````$`@0`%`^H``````($``0/K``````$9`2T``P`)`,4#Z0`+`*(`P@$@
  16657. +M`3`!/`%)`50`\@%@`,D!;P`"`*D`Y@`!`7D`M@`!`($`!@/J``````"!``H#
  16658. +MZP````4!B0`D``$!FP`@``$!KP`<``$!OP`8``$!S`````$!V@)M``$`"0`#
  16659. +M`^D``@'C`>P``@'W`````0'_`````0('`H8``0`)`",#Z0`#`,("$`'L``0"
  16660. +M'P!B``$")P!:``$"+P`,``$"-P````$"/P+&``$`"0`5`^D`!`)+`EL![`)I
  16661. +M``0"=`!&``$"?@!"``$"B``$``$"E`````$"H`,"``(`"0":`^D`"0*F`K`!
  16662. +M[`*Z`,D"Q@+3`MX"Z``$`O(!U@`!`OD!S@`!`P`!G@`!`P8!E@`!`($`00/K
  16663. +M``````,,`_4``0`)`-`#Z0`)`M,"W@'L`,(!(`#)`/("Z`"B``H#$@,@``$#
  16664. +M&P,8``$#)`,(``$#+0,$``$#-@*0``$#/P*,``$#2`).``$#4@)*``$#7`%>
  16665. +M``$#90%:``$#;@48``(`"0`(`^D``0#)``("WP````$#>0````$`@0`"`^L`
  16666. +M```"`M,`!``!`N@````!`X(%,@`!``D`&P/I``,`P@*P`>P`!`.+`&```0.3
  16667. +M`%@``0.;``@``0.E`````0.O!6@``0`)`$$#Z0`&`,(!(`*Z`,D#M@'L``(#
  16668. +MO@`(``$#Q0````$#S`77``$`"0`.`^D``P"X`,D![``"`]8`"``!`]\````!
  16669. +M`^@%_P`"``D`/@/I``4#\0/X`,D$!@02``($%P#B``$$'@#4``$`@0`/`^H`
  16670. +M````!"@&A@`!``D`!P/I``$`R0`!!#,````!!$<&G``!``D`#P/I``0`#0*'
  16671. +M`!<":0`$!%``'@`!!%D`%@`!!&(`!``!``$````!!&H&S``!``D`!P/I``($
  16672. +M=P2!``($CP`(``$$G`````$$J0;I``(`"0`I`^D`!@#)!+($N@3'`,($T``"
  16673. +M!-@`!``!!.`````!`($`"`/J``````3H!U(``@`)```#Z0``````@0#&`^H`
  16674. +M```!!/("F``!!/\(1P`!``D`.@/I``4%!@47`,(%)@$P``@%-`#```$`D@"T
  16675. +M``$%/0"F``$%0P"B``$%20"2``$%4`"&``$%5P`0``$%7@````$%90BJ``$`
  16676. +M"0`2`^D``P5O!7D![``"!80`!``!!9,````!!:((V``!``D``P/I``$%J@`"
  16677. +M!;0`"``!!;P````!!<0(Z@`!``D``P/I``$%RP`"!=0`"``!!=L````!!>((
  16678. +M_``"``D`30/I``(%Z@7Y``P&"`$$``$&&`$```$&*`#(``$&-@"\``$&1`"H
  16679. +M``$&4`"D``$&7`!^``$&:@!Z``$&>`!2``$&A0!.``$&D@````$&H`````$`
  16680. +M@0`$`^H`````!JX);0`#``D`'@/I``($$@:W``0&Q@!4``$&U0!4``$&Y```
  16681. +M``$&\`````$`@0`%`^H````!!OP````!`($`!`/K````!`<'``P``0#E``@`
  16682. +M`0#9``0``0<1`````0<<";H``0`)`!8#Z0`#!6\%>0'L``0')`!0``$'*P!,
  16683. +M``$',@`$``$'.P````$'1`GL``(`"0!B`^D``P"B`,(`\@`(!TP!@``!!U8!
  16684. +M@``!!7H!3``!!V`!2``!!7`!+``!!VH!*``!!W0`,``!!W\````!`($``@/K
  16685. +M``````>*"H```0`)`!H#Z0`%`+@`R0>1!YT![``"!Z0`"``!!ZL````!![(*
  16686. +MOP`!``D`!P/I``$'N0`"!\,`#``!!\H````!!]$*U0`"``D`4@/I``8'W0?G
  16687. +M!^X']@@!`>P`!`@,`0X``0@3`0H``0@:``@``0@H`````0"!``P#Z@`````(
  16688. +M-@MU``$`"0`P`^D``@?N"$0`!@A/`'@``0A;`'0``0>2`"@``0AG`"```0@"
  16689. +M``0``0AS`````0A]"[X``@`)``L#Z0````8(@P`D``$(C0`D``$(EP`6``$(
  16690. +MH0`2``$(JP`$``$(M0````$`@0`)`^H````!"+\`!``!",P+Z@`!``D`*@/I
  16691. +M``8`P@$@"-8`N`#)`>P``@C?``P``0*G`````0CI#$```P`)`"P#Z0`""/$(
  16692. +M^0`!"0``+@`!`($`!P/J``````"!``$#ZP`````)"`R=``$`"0`V`^D`!@$@
  16693. +M`>P#M@=+`,(`R0`""1$`9``!"1D`8``!"2$-`P`"``D"&@/I`!4%>0#9`.4'
  16694. +M!P'L!6\'<P#R`+@`50)+"2<%!@47`,D`P@"B!Q$)+P02!OP`!`DY!]0``0E%
  16695. +M!\(``0E1!S8``0E7!S(``0"!`!4#Z@`````)70_\``(`"0`)`^D````$"6,`
  16696. +M%@`!"6T`$@`!"7<`!``!"8$````!`($`"0/J``````F+$"<``P`)`*D#Z0`-
  16697. +M"94$'0F<":0)KPG$"=,&=P9#!!8&D08G!@<`%`GE`IH``0GW`IH``0H)`EP`
  16698. +M`0H8`EP``0HG`EH``0HR`EH``0'M`E(``0H]`E(``0I'`D0``0I/`D```04'
  16699. +M`>H``0I7`>8``048`=```0IH`<P``0IW`;8``0J'`;(``0),`0P``0J7`0@`
  16700. +M`0JF`"@``0JM`"0``0"!``H#Z@``````@0!$`^L````#`EL!"``!`FD!!``!
  16701. +M`A``!``!"K0170`#``D"'0/I`!4#\0J["+\*P0K+"M,*W00&"N4`R0H(!N,&
  16702. +M0P:1"O0*^@L$`*(+#`#R!!8``PL6`WH``0L>`'@``0LL`'@``0"!`"P#Z@``
  16703. +M````@0`(`^L````(!($`'``!"SH`&``!"$0`%``!`3P`$``!!K<`#``!"T,`
  16704. +M"``!"TT`!``!!!(````!"UD4>P`!``D`!`/I`````@MA``0``0MH`````0MO
  16705. +M%(<``@`)`#X#Z0````0+?`!^``$+B`!Z``$+E``$``$+I@````$`@0`!`^L`
  16706. +M```!"[@````!"\D4U@`!``D``@/I````!`O/``0``0O8``0``0OA`````0OI
  16707. +M`````0OQ%.```0`)`!4#Z0`'"OH&=PM-">0&Q0<J!TL`!@OY`$P``0P``$@`
  16708. +M`0F=`"8``0P'`"(``0P/`````0P;`````0PG%2H``0`)`!,#Z0`"!7D![``"
  16709. +M#"\`#``!`[<````!##854P`"``D`F`/I``H,/`"X`,(+DP2R`2``R0Q,`>P$
  16710. +M$@`"#%8"2``!#%P````!`($``@/J``````QD%D0``P`)!6@#Z0`*#&L*P0K3
  16711. +M!^X*W0<C#'0,50DG!<L`$`Q[%9(``0R#%9(``0R+%80``0R3%8```0R;$/0`
  16712. +M`0RB$/```0RI$)0``0RR$)```0R[#I@``0S##I0``0?W#C```0S+#BP``0S6
  16713. +M#38``0SA#38``0SL#,8``0SS#,8``0"!`$@#Z@````,'W0`8``$,^@`4``$'
  16714. +MYP`,``$`@03V`^L`````#00<K``"``D!G`/I``L$%@=S`/(![`"B`,(!(`4&
  16715. +M"G8`N`#)``8*Y@7L``$-#P7,``$,/056``$-'05(``$-+0+8``$-.P+0``$`
  16716. +M@0`(`^H`````#4D>O``!``D`)P/I``0`P@$@`,D![``"#5(`"``!#5H````!
  16717. +M#6(?!``!``D`#@/I````!`UJ`"H``0UR`!P``0UZ``P``0V!`````0V('QH`
  16718. +M`0`)`!`#Z0````(-CP`,``$-E0````$-FQ\R``$`"0`%`^D````"#:,`"``!
  16719. +M#:H````!#;$?/P`!``D`#`/I``(#M@'L``(-O0`(``$-R`````$-TQ]@``$`
  16720. +M"0`-`^D``P.V`>P+DP`"#=P`"``!#>0````!#>P?B@`!``D`$`/I``$`P@`$
  16721. +M#?4`+``!#?P`(``!#@,`#``!#@L````!#A,?J@`!``D`#0/I``(#M@'L``(.
  16722. +M'``$``$.)`````$.+!_,``$`"0`/`^D`!0#"!08%%PIV`H<``@XW``0``0Y!
  16723. +M`````0Y+(`8``0`)`"@#Z0`$`2``P@"X`,D``@Y3``0``0Y:`````0YA($\`
  16724. +M`P`)`9<#Z0`"#(H'[@`"#FP`$@`!#G8````!`($`>0/J``````"!``D#ZP``
  16725. +M```.@"+2``$`"0`6`^D`!0#"`2`-+`'L`,D``@Z+``@``0Z5`````0Z?(Q``
  16726. +M`0`)`-4#Z0`*`,(!(`"B`*@+#`02!8,#M@#)`/(`!`ZF`S@``0ZL`QP``0ZR
  16727. +M`"(``0ZY`````0[`)#,``0`)``(#Z0````0.Q@`$``$.SP`$``$.V`````$.
  16728. +MX`````$.Z"0]``$`"0`.`^D`!P8'!08%%PM#!B<+30'L``(.\``$``$.]P``
  16729. +M``$._B2$``$`"0`/`^D``@Q5`>P`!`\&`#(``0\-`"H``0\4``@``0\=````
  16730. +M`0\F)*@``0`)`",#Z0`#`,(%>0'L``0$T0""``$/+@!V``$/-0`,``$//@``
  16731. +M``$/1R3F``$`"0`,`^D``0@!``('G@`$``$/3@````$/5"4"``$`"0`=`^D`
  16732. +M`P#R`,D![``""L(`!``!#UT````!#V<E.0`!``D`$P/I``,`N`'L`,D``@]N
  16733. +M``@``0]T`````0]Z)68``@`)`"0#Z0`$`YH`5002`>P``@^#``0``0!I````
  16734. +M`0"!``(#Z@`````/BR6V``$`"0`&`^D``@^2`>P``@^;``0``0^B`````0^I
  16735. +M)=$``0`)``\#Z0`$`+@`R0N3`>P``@^Q``@``0^X`````0^_)@(``0`)`!P#
  16736. +MZ0`"!7D![``$#\<`7``!#\X`3@`!#]4`#@`!#]X````!#^<F-``!``D`'`/I
  16737. +M``,`P@5Y`>P`!`QU`&0``0_N`%@``0_T``P``0_\`````1`$)FL``0`)`($#
  16738. +MZ0`+!@<%!@47"T,*=@9;!B<+30#"!7D![``"$`T`&``!$!4````!$!TG00`!
  16739. +M``D`(`/I``,`P@5Y`>P``1`E`````1`L)WP``@`)```#Z0``````@0#>`^H`
  16740. +M```"!,<#<@`!!+H"U@`!$#@HD0`"``D`10/I``(`R02R``0`N0#^``$00`#^
  16741. +M``$!(0`$``$020````$`@0`!`^L````!`,(````!$%@H\@`!``D`!0/I``00
  16742. +M7P'V#`X![``"$&8````!$&T````!$'0I%P`!``D`60/I``8)I`)+`>,![`#"
  16743. +M"P0``A!@`.X``1![`.8``1"!*:```P`)`$,#Z0`($(P$%A"8`%4&MP02"2\`
  16744. +MH@`(";``L@`!$*4`L@`!"=0`2``!$+D`2``!":4`(@`!$,H`'@`!!2<`!``!
  16745. +M$-4````!`($`!@/J``````"!``\#ZP````8!8``X``$)Q``T``$!5``4``$!
  16746. +M,``(``$!XP`$``$!20````$0XBHY``$`"0`O`^D``1",``0%ZP"4``$0[`"0
  16747. +M``$%^@`<``$0^P````$1"2IY``$`"0`4`^D`!`"X"Y,`R0'L``(1$0`(``$1
  16748. +M&`````$1'RJP``(`"0!U`^D`!@#"`2``R0M[`J8(3@`$`K$!,``!$2X!*``!
  16749. +>`KL`&``!$3@````!`($`0`/K`````0+&`````0``
  16750. +`
  16751. +end
  16752. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/unix.lib.uue amiga/fsf/emacs18/amiga/unix/src/unix.lib.uue
  16753. --- baseline/fsf/emacs18/amiga/unix/src/unix.lib.uue    Wed Dec 31 17:00:00 1969
  16754. +++ amiga/fsf/emacs18/amiga/unix/src/unix.lib.uue    Sat Sep 28 00:00:00 1996
  16755. @@ -0,0 +1,1186 @@
  16756. +begin 666 unix.lib
  16757. +M```#^@``*UH```/I````"2!O``0@UTC0_/QP`$YU(&\`!"`O``AF`G`!(EA,
  16758. +MT/S\6(].T0```_(```/I````#$CG(#(@;P`80^\`'$7Z`!PF;P`4)`LL>0``
  16759. +M``!.K@``(`N0@DS?3`1.=1;`3G4``````^^!```#7T%B<T5X96-"87-E````
  16760. +M`0```!B&```#7TQ63U)A=T1O1FUT`````0```!X````````#\@```^D````*
  16761. +M(&\`!"\-*D@@#68$2^P``$'L```B31+89OPO#4ZZ``!83RI?3G4``````_@`
  16762. +M```!`````0```!(````!`````@````X````````#[X,```)?;6MT96UP````
  16763. +M``$````>`````````_$````#`````$]05%,`!`!````#\@```^H````$=#IT
  16764. +M;7!?6%A86%A8`````````_(```/K````"0```_(```/I````;R!O``0B;P`(
  16765. +MGOP`($CG+Q8F22](`"`O20`D<`Q.N@``*D`@+```4JP``"(L``#2@"\!2&P`
  16766. +M`$AO`#!.N@``3^\`#'!WL!-F-DHK``%F,$'O`"A#[``03KH``"9`+&P``$ZN
  16767. +M_\0N`'P`0>\`*"(()#P```/M3J[_XBH`>`%@1G!RL!-F-DHK``%F,$'O`"A#
  16768. +M[``23KH``"9`+&P``$ZN_\HJ`'@`0>\`*"(()#P```/N3J[_XBX`?`%@"G`6
  16769. +M*4```&```(Q*A6<$2H=F!$ZZ```@"V="2H5G/DJ'9SH@#6<V<``O`"\`+P!(
  16770. +M>/__+P8O!R`%(@0@;P`X3KH``$_O`!@K0``(9Q`JK```*4T``"M+``0@"V`Z
  16771. +M(`UG!B!-3KH``$J%9PY*A&<*(@4L;```3J[_W$J'9PY*AF<*(@<L;```3J[_
  16772. +MW"`+9P8@2TZZ``!P`$S?:/3>_``@3G4@;P`$44](YP$T)DA+[```+T@`$&`Z
  16773. +M(&H`!+'+9C`F52XK``@JDR!K``1.N@``($M.N@``0J=(;P`8+P=.N@``3^\`
  16774. +M#$J`:PX@+P`48`HJ2B15(`IFP'#_3-\L@%!/3G4``````_@````#`````0``
  16775. +M`)````!4````-`````,````"```!:````0P```$(`````````^^#```"0&UA
  16776. +M;&QO8P`````!````'H8```1?7V9I9F]?;V9F<V5T`````````@```"@````D
  16777. +MA@```U]?9FEF;U]B87-E``````$````L@P```U]?<W!R:6YT9@````````$`
  16778. +M```\@P```D!F;W!E;@```````@```)0```!8A@```E]$3U-"87-E````!```
  16779. +M`3X```$L````F@```%Z&```"7V5R<FYO```````!````OH,```)`7W-E=&5R
  16780. +M<@````$```#.@P``!$!?<W1A<G1?<')O8V5S<P`````!````^H,```)`9G)E
  16781. +M90````````(```&,```!'H,```)`9F-L;W-E``````(```&&```!3(,```)?
  16782. +M=V%I='!I9`````$```&8`````````_$````#`````$]05%,`!`!````#\@``
  16783. +M`^H````%<&EP93IU>&]P96XN)6QX`'<`<@````/R```#ZP````$```/R```#
  16784. +MZ0```,6>_``82.<A/DGY`````$7L`!@J6B!:+AHF;``D+T@`()/)+'@`!$ZN
  16785. +M_MHD;```($!#Z`!*($DB;```3J[_"B!L``!#[``$3J[^DD/O`"0B_(```"1P
  16786. +M`2+`0IDB+P`@0>\`)"0(+$I.KOVBX8`K0``8+'@`!$ZN_WPB2TZN_GI*@&<*
  16787. +M($`B34ZN_I)@"")-<!Q.KO\N3J[_=B)+<"!.KO\N(F\`("`'3J[_+DS??(3>
  16788. +M_``82H!.=2!O``0@+P`((B\`#"]O`!``!"]O`!0`""]O`!@`#"]O`!P`$"]O
  16789. +M`"``%"]O`"0`&%E/2.</%BHO`#@L+P`T+@`J2"]!`!QP'$ZZ```F0"!-2AAF
  16790. +M_%.(D<T@"%*`*4``('(!+'@`!$ZN_SHI0``<(D`2W6;\<!QR`4ZN_SHI0``8
  16791. +M<"!R`4ZN_SHI0``D<`$I0``00?K_G"`(0_K^L)")*4``%$'L``!.KO\B*4``
  16792. +M`"(+9P`!2DJL`!QG``%"2JP`&&<``3I*K``D9P`!,DJ`;P`!+"!L```@*``4
  16793. +M0?K^;B)L```B:0`08`(2V%.`9/I![```(FP`)!+89OP@+```4JP``"=```PG
  16794. +M1P`03>P`%CS\`!1P!1E```P@5C%\`!P`$A%```@@7B%K``P`%"`\@``#\DJ&
  16795. +M9@)P`2@`2H5O!"`%8`0@+```0J=(>``!+SR```/Z+P`O/(```_,O!B\$+R\`
  16796. +M3"\\@``#\2\O`%`O/(```_`O+P!4+SR```/O+R\`6"\\@``#[2\O`%@O/(``
  16797. +M`^XO!R\\@``#["!L```O*``0+SR```/K+&P``"(/3J[^#D_O`%0G0``(9S0@
  16798. +M;```+'@`!$ZN_H`@;```+'@`!$ZN_HQ*@&?D0JL`%$'L```B2RQX``1.KO\0
  16799. +M("L`#&!H+&P``$ZN_WQ.N@``8`)P#"E````@"V<&($M.N@``("P`'&<.(D`@
  16800. +M+``@+'@`!$ZN_RX@+``89PPB0'`<+'@`!$ZN_RX@+``D9PPB0'`@+'@`!$ZN
  16801. +M_RX@+```;PH@0"QX``1.KO\<</],WVCP6$].=0```_@````#`````0```5H`
  16802. +M``%6```!1@```!<````"```"_````NH```+8```"S````L0```)0```!S```
  16803. +M`<(```&J```!E@```8H```%\```!=````6P```%B```!0````30```$B```!
  16804. +M%````$0````X````&@```!`````````#[X$```-?3&EN:V5R1$(````````!
  16805. +M````"H8```)?1$]30F%S90````,```*F```"7@```"R&```$7U]S=&%R='5P
  16806. +M7W!O<G0```````,```)^```"<@```$"#```"0&UA;&QO8P`````!```!`(8`
  16807. +M``-?7V1O;W)?;F%M90`````!```!IH8```-?7VYE>'1?<&ED```````"```!
  16808. +MM@```;*&```#7U]S=&%C:U]S:7IE`````0```?J&```#7U]P<F]C97-S97,`
  16809. +M`````0```I*#```$0&-O;G9E<G1?;W-E<G(```````$```*NA@```E]E<G)N
  16810. +M;P```````0```K:#```"0&9R964````````!```"P`````````/Q`````P``
  16811. +M``!/4%13``0`0````_(```/J````!@````````````````````$`````````
  16812. +M`````_(```/K````"@```_(```/I`````TZZ```@+```3G4``````^^#```#
  16813. +M0&-H:V%B;W)T`````````0````*&```#7U]O=7)?<&ED`````````0````8`
  16814. +M```````#\0````,`````3U!44P`$`$````/R```#Z0```",@+P`$(&\`"")O
  16815. +M``Q(YP$4+@`F22I(3KH``'`!OH!M+'`@OH!L)B`+9PX@!^>`0^P``-/`)MDF
  16816. +MV2`-9PSGAT'L``#1QR#=(-UP`&`(<!8I0```</],WRB`3G4@+P`$(&\`")[\
  16817. +M`!`O2``(0J\`#$'O``A#UV&62H!G"#!\__\@"&`"(!?>_``03G4``````^^#
  16818. +M```#0&-H:V%B;W)T`````````0```!B&```$7U]S:6=?:&%N9&QE<G,`````
  16819. +M``(```!`````,(8```)?97)R;F\```````$```!0`````````_$````#````
  16820. +M`$]05%,`!`!````#\@```^D````5("\`!$CG#P`N`"PL``!.N@``*4<``'H`
  16821. +M>`$@+```P(1G#B`L``#`A&8&(`5.N@``4H78A'`@NH!MX"`&3-\`\$YU("\`
  16822. +M!"\'(@`@+```@($N'V"P```#[X8```-?7W-I9U]M87-K```````$````3```
  16823. +M`"0````4````#(,```-`8VAK86)O<G0````````!````$(8```1?7W-I9U]P
  16824. +M96YD:6YG`````````0```!R#```$0%]S:6=?9&ES<&%T8V@```````$````N
  16825. +M`````````_$````#`````$]05%,`!`!````#\@```^D```":(&\`!"`O``@B
  16826. +M;P`,+V\`$``$64](YR$T+@`F;P`<*D@D22])`!1@`AK:2A)G!%.';O:U[P`4
  16827. +M8QH0*O__<B^P`6<0=#JP`F<*4X=O!AK!8`(:VTH39P13AV[V0A5*AU[`1`!(
  16828. +M@$C`3-\LA%A/3G4@+P`$(&\`"")O``Q93TCG)S8N`"I(+TD`($JL``!G``#^
  16829. +M(&P``"9H``Q.N@``(BL`!+*`9@``Z"!L``!(:``L0>P``")3<`!&`&$`_UA8
  16830. +M3TJ`9P``RD'L```B31`8L!EF``"\2@!F]&8``+1*AV80(&P``"`H`!AR`["!
  16831. +M9P``H"!L```@*``8<ORP@6<$68!F/B)L```B$2QL``!.KO^"+``@;```T/P`
  16832. +M+"((=/Y.KO^L*@!G$B(%0>P``"0(3J[_FB(%3J[_IB(&3J[_@F`&*6@`(```
  16833. +M(&P``"EH``0`@"EH``@`?$/H``Q%[`"$)-DDV239(&P``"EH`!@`!"EH`!P`
  16834. +M="\O`"`O*P$8($U#[```<`!.N@``4$]P`6`"<`!,WVSD6$].=2!O``0B;P`(
  16835. +M2.<`%"9)*DA.N@``($TB2W``80#^R$J`9P1P`&`,($TB2TS?*`!.^@``3-\H
  16836. +M`$YU(&\`!")O``A(YP`4)DDJ2$ZZ```@32)+<`%A`/Z02H!F<$AX`/](;```
  16837. +M+PU.N@``3^\`#$J`:@P@32)+3-\H`$[Z``!+TT*=0JL`$G`!-T``#D)K`!`G
  16838. +M?````@``,C=```Q"JP`V0>P``")(2AEF_%.)D\@G20`60IT@/`\,/P`G0``B
  16839. +M)T``&B=``"HJ_```H?]P`$S?*`!.=0```_@````(`````0```7X```%P```!
  16840. +M:@```5H```%2```!3````4(```$H`````````^^&```#7VQA<W1?9&ER````
  16841. +M`````P```0(```"2````BH,```)`7V=E=%]C9`````$```":A@```U]L87-T
  16842. +M7V5N=')Y``````8```%D```!1@```1(```#P````X````*B&```#7U]T96UP
  16843. +M7V9N86UE````!````C8```'V````Q@```+"&```"7T1/4T)A<V4````!```!
  16844. +M"(,```-`7VQF:6)S=&%T```````!```!A(,```-`8VAK86)O<G0````````"
  16845. +M```!X````:B#```#0%]F:6)S=&%T`````````@```A````'&@P```U]R96%D
  16846. +M;&EN:P````````$```'\`````````_$````#`````$]05%,`!`!````#\@``
  16847. +M`^L```!!```#\@```^D```#0(&\`!%E/2.<`%"](``@@;P`(*F@!#&`*)E4@
  16848. +M34ZZ```J2R`-9O),WR@`6$].=2!O``2>_``02.<@-BI()FT`#$/K`0PO2``<
  16849. +M+TD`("!+8;1"K```0JL!#$*M``0@%>6`($`G:``,`1A!ZP`(+T@`&&```)Y!
  16850. +MZP`0(DA*&6;\4XF3R"`)D<C0_``L<@`R`-*(4H%T`#0!/T``%C]!`!0@`DZZ
  16851. +M```D0$J`9@9P#&```)Q-TD*>(&\`(""*+U``("SK`(@LZP"$0>L`C$/J``PB
  16852. +MV"+8(M@E:P`,`!@E:P!\`!Q+Z@`@.V\`%``$.V\`%@`&(&\`'"`H``12J``$
  16853. +M*T``"$'J`"Q#ZP`0$-EF_"JK``@J;P`<(A4D+P`8+&P``$ZN_Y1*@&8`_TXG
  16854. +M:P$,`1!"K0`$+&P``$ZN_WQR=-*!L(%F!'`!8`I.N@``*4```'``3-]L!-[\
  16855. +M`!!.=2!O``193TCG(#8O2``4<!!.N@``*D!P1^6(3KH``"9`(&\`%"`(2AAF
  16856. +M_%.(D<`@"%*`3KH``"1`3KH``"`-9P``@B`*9WP@"V=X*TL`#"M\```!'``(
  16857. +MD<@G2`$0)T@!#"=(`10FBB!O`!04V&;\3KH``"=```0B+P`4+&P``'3^3J[_
  16858. +MK"J`9R)!ZP`((@`D""QL``!.KO^:2H!G#B!-80#^.$J`9Q0@#6`^+&P``$ZN
  16859. +M_WQ.N@``*4```"!-80``-F`D<`PI0```(`UG!B!-3KH``"`*9P8@2DZZ```@
  16860. +M"V<&($M.N@``<`!,WVP$6$].=2!O``1(YP`6*D@F;0`,3KH``$*L```@2V$`
  16861. +M_:`@4TZZ```@%6<*(@`L;```3J[_IB!M``Q.N@``($U,WV@`3OH``"!O``19
  16862. +M3TCG`S0O2``4(&\`%"IH``R7RTZZ``!*K0$49R1^`"1M`0P@;P`4+"@`!&`$
  16863. +M4H<D4KZ&;`0@"F;T*TH!$$*M`10@+0$09R(F0-;\`"`I;P`4``!%[0$0(%(I
  16864. +M2```(%(DT"!O`!12J``$(`M,WRS`6$].=2!O``0O#2I(3KH``"`M``0J7TYU
  16865. +M(&\`!"`O``A(YP$4+@`J2"9M``Q.N@``<`$G0`$4*T<`!$S?*(!.=0```^^#
  16866. +M```"0&9R964````````'```"B@```H````)J```"/@```C0```(J````'H8`
  16867. +M``-?;&%S=%]D:7(````````#```"X@```EX```!2@P```D!M86QL;V,`````
  16868. +M!````8X```%V```!;````**&```"7T1/4T)A<V4````&```"=````@8```'L
  16869. +M```!U@```30```$<@P``!$!C;VYV97)T7V]S97)R```````"```"#@```4B&
  16870. +M```"7V5R<FYO```````#```"(````A(```%,@P```T!C:&MA8F]R=```````
  16871. +M``4```,N```##@```J8```):```!E(,```)`7V=E=%]C9`````$```'*A@``
  16872. +M`U]L87-T7V5N=')Y``````$```+L`````````_$````#`````$]05%,`!`!`
  16873. +M```#\@```^D````(2.<!`BQL``!R`$ZN_X(N`"(`3J[_@B`'3-]`@$YU````
  16874. +M``/OA@```E]$3U-"87-E`````0````8````````#\0````,`````3U!44P`$
  16875. +M`$````/R```#ZP````(```/R```#Z0```!L@;P`$("\`")[\`$1(YP,$+@`J
  16876. +M2'S_3KH``"!-0^\`#DZZ``!*@&8D<!#`KP`6YH!R4.6)PJ\`%NR!@H#"A[*'
  16877. +M9@1\`&`&<`TI0```(`9,WR#`WOP`1$YU(&\`!"`O``A(YP$$3-\@@&">````
  16878. +M``/O@P```T!C:&MA8F]R=`````````$````8@P```T!?9FEB<W1A=```````
  16879. +M``$````BA@```E]E<G)N;P```````0```$H````````#\0````,`````3U!4
  16880. +M4P`$`$````/R```#Z0```$$@+P`$(&\`"%E/2.<G%BX`*DA.N@``2&\`'$AX
  16881. +M"`$O!TZZ``!/[P`,4H!F!G#_8```RD*G+&P``'(")`].KO\<3^\`!"9`2H!G
  16882. +M+"(O`!PD"TZN_GI*0&<>("\`'.6`+PT@0"\H``@B0G``D<A.N@``4$]\`&!@
  16883. +M3J[_?"H`<BY&`;"!9D9\`"`O`!SE@"!`*J@`"$WM``1"GBS\```A_W`!/,`\
  16884. +MP$)>*WP```(``#)"K0`V0JT`%B`\#PP_`"M``"(K0``:*T``*F`,?/\@!4ZZ
  16885. +M```I0```(`MG#"0++&P``'("3J[_%DAO`!Q(>`@"+P=.N@``3^\`#"`&3-]H
  16886. +MY%A/3G4``````^^#```#0&-H:V%B;W)T`````````0```!2#```"7VEO8W1L
  16887. +M```````"````\@```"*&```"7T1/4T)A<V4````"````W@```#:#```#0%]L
  16888. +M9FEB<W1A=````````0```&Z#```$0&-O;G9E<G1?;W-E<G(```````$```#0
  16889. +MA@```E]E<G)N;P```````0```-0````````#\0````,`````3U!44P`$`$``
  16890. +M``/R```#Z0````X@;P`$(F\`"$CG,!8F22I(3KH``"(+)`TL;```=@%.KOY$
  16891. +M2H!G!'``8`9.N@``</],WV@,3G4``````^^#```#0&-H:V%B;W)T````````
  16892. +M`0```!*&```"7T1/4T)A<V4````!````&H,```)`7W-E=&5R<@````$````L
  16893. +M`````````_$````#`````$]05%,`!`!````#\@```^D````^(&\`!")O``A9
  16894. +M3TCG,S8J2'X`(&P``"PH`.`O20`@2H9F($JL``!F&D'L`!@B""QL```D/```
  16895. +M`^U.KO_B+`!G`GX!2H9G-B(&0>P`(B0(0>P``"8(+&P``$ZN_IXB!B0-)B\`
  16896. +M($ZN_IXB!G0*3J[^R$J'9U@B!DZN_]Q@4"!L```F:`"X,'S__[?(9T!#[``H
  16897. +M<"4L>``$3J[]V"1`2H!G+"EL````#"E-`!`O"B!++$I#[``$E<HF;P`D3J[]
  16898. +MM$S?!``B2BQX``1.KOYB3-]LS%A/3G4@;P`$0^\`"&$`_RI.=2!O``1#[P`(
  16899. +M80#_''`43KH``$YU``````/X````!@````$```"R````J````*0```".````
  16900. +M2@```"H````````#[X8```%?7W5S`````@```'X````4A@```U]?5T)E;F-H
  16901. +M37-G``````$````DA@```E]$3U-"87-E`````@```%8````PA@``!%]?4')O
  16902. +M9W)A;4YA;64````````"````H@```%"#```"0&5X:70````````!````\@``
  16903. +M``````/Q`````P````!/4%13``0`0````_(```/J````#T]K```````4````
  16904. +M`````````````````&-O;G-O;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R
  16905. +M>0```````^P````!`````0```!0````````#\@```^D````'2.<@`B(O``Q!
  16906. +M[P`0)`@L;```3J[_'$S?0`1.=0```^^&```"7T1/4T)A<V4````!````$```
  16907. +M``````/Q`````P````!/4%13``0`0````_(```/I````#R!O``0O#2I(*JP`
  16908. +M`$'M``0J7T[Z```@;P`$("\`"$CG`00N`"I((!5.N@``0>T`!"`'3-\@@$[Z
  16909. +M`````````^^&```#7U]S:6=?;6%S:P```````0````J#```"0%]S971J;7``
  16910. +M```!````%(,```-`<VEG<V5T;6%S:P`````!````*H,```-`7VQO;F=J;7``
  16911. +M```````!````.`````````/Q`````P````!/4%13``0`0````_(```/I````
  16912. +M!R!O``0@+P`(+P`O+```+PA.N@``3^\`#'``3G4```/OA@``!%]?<WES=&5M
  16913. +M7VYA;64````````!````#(,```)?<W1R;F-P>0````$````2`````````_$`
  16914. +M```#`````$]05%,`!`!````#\@```^D````I(&\`!)[\`%1(YS@6*D@@#6<D
  16915. +M2A5G("!-2AAF_%.(D<TB""!-<`).N@``0>P``'`"(@!.N@``("P``&\2L*P`
  16916. +M`&X,Y8!![```)G`(`&`L4H!F)"(L``!![P`;)@@L;```=`!X44ZN_BQ*0&<$
  16917. +M)D-@"D?L``1@!$?L``@@2TH89OQ3B)'+(@@@2W`"3KH``$'L`!QP`G(!3KH`
  16918. +M`$S?:!S>_`!43G4```/X````!`````$```"0````>````'(````L````````
  16919. +M`^^#```"0'=R:71E```````$````F````(P````T````*(8```)?97)R;F\`
  16920. +M``````$````XA@```U]S>7-?;F5R<@````````$````^A@```U]S>7-?97)R
  16921. +M;&ES=`````$```!&A@```E]?3U-%4E(``````0```%2&```"7T1/4T)A<V4`
  16922. +M```!````7@````````/Q`````P````!/4%13``0`0````_(```/J````"#H@
  16923. +M```T,@``56YK;F]W;B!E<G)O<B!C;V1E```*```````#\@```^D````````#
  16924. +M\0````,`````3U!44P`$``````/R```#Z@```,9N;R!S:6=N86P`:&%N9W5P
  16925. +M``!I;G1E<G)U<'0`<75I=```:6QL96=A;"!I;G-T<G5C=&EO;@!T<F%C92!T
  16926. +M<F%P``!A8F]R=`!E;70@:6YS=')U8W1I;VX`9FQO871I;F<@<&]I;G0@97AC
  16927. +M97!T:6]N``!K:6QL``!B=7,@97)R;W(`<V5G;65N=&%T:6]N('9I;VQA=&EO
  16928. +M;@``8F%D(&%R9W5M96YT('1O('-Y<W1E;2!C86QL`'=R:71E(&]N(&$@<&EP
  16929. +M92!W:71H(&YO(&]N92!T;R!R96%D(&ET``!A;&%R;2!C;&]C:P!S;V9T=V%R
  16930. +M92!T97)M:6YA=&EO;B!S:6=N86P@9G)O;2!K:6QL`'-T871U<R!S:6=N86P`
  16931. +M<V5N9&%B;&4@<W1O<"!S:6=N86P@;F]T(&9R;VT@='1Y`'-T;W`@<VEG;F%L
  16932. +M(&9R;VT@='1Y``!C;VYT:6YU92!A('-T;W!P960@<')O8V5S<P``8VAI;&0@
  16933. +M<W1A='5S(&AA<R!C:&%N9V5D``!B86-K9W)O=6YD(')E860@871T96UP=&5D
  16934. +M(&9R;VT@8V]N=')O;"!T='D``&)A8VMG<F]U;F0@=W)I=&4@871T96UP=&5D
  16935. +M(&9R;VT@8V]N=')O;"!T='D`:6YP=70@<F5C;W)D(&%V86EL86)L92!A="!C
  16936. +M;VYT<F]L('1T>0!E>&-E961E9"!#4%4@=&EM92!L:6UI=`!E>&-E961E9"!F
  16937. +M:6QE('-I>F4@;&EM:70``'5N:VYO=VX@<VEG;F%L``!U;FMN;W=N('-I9VYA
  16938. +M;```=VEN9&]W(&-H86YG960``'5N:VYO=VX@<VEG;F%L``!U<V5R('-I9VYA
  16939. +M;"`Q`'5S97(@<VEG;F%L(#(```````````H````2````'````"(````V````
  16940. +M0@```$@```!8````<@```'@```""````F@```+8```#>````Z@```1````$>
  16941. +M```!0````58```%R```!C````;@```'D```""@```B(```(\```"3````EP`
  16942. +M``)L```"?````HH```/L````(`````$```,4```#$````PP```,(```#!```
  16943. +M`P````+\```"^````O0```+P```"[````N@```+D```"X````MP```+8```"
  16944. +MU````M````+,```"R````L0```+````"O````K@```*T```"L````JP```*H
  16945. +M```"I````J````*<```"F`````````/R```#Z0```#H@+P`$(&\`""(O``PB
  16946. +M;P`064](YP<4+`$N`"I(+TD`%'H`)FP``&`N2H=G""`K``R^@&8@>@%P`;"K
  16947. +M`!1F%BHK``P@#6<$*JL`&"!+3KH``"`%8"HF4TJ39LX(!@``9P1P`&`:2H5F
  16948. +M"G`**4```'#_8`QP`$ZZ``!.N@``8*),WRC@6$].=2!O``0@+P`((F\`#$CG
  16949. +M`10B`'``3-\H@&``_W`@;P`$+PUP`"(`D\DJ7V``_UX@+P`$(&\`""(O``Q(
  16950. +MYP,$+`$N`"I(4H!F`GX`2H=J`D2'(`<B!B!-D\E,WR#`8`#_+``````#[X8`
  16951. +M``-?7W!R;V-E<W-E<P`````!````)(,```-`7V9R965?96YT<GD````!````
  16952. +M3H8```)?97)R;F\```````$```!L@P``!$!?=V%I=%]S:6=N86QS```````!
  16953. +M````=H,```1`7VAA;F1L95]S:6=N86QS`````0```'H````````#\0````,`
  16954. +M````3U!44P`$`$````/R```#Z0```!(@+P`$44](YP,`+@!.N@``(`=.N@``
  16955. +M2H!G(B)`(&D`'"](``P@:0`$<`$B;P`,3I$L`"`'3KH``"`&8`)P_TS?`,!0
  16956. +M3TYU``````/O@P```T!C:&MA8F]R=`````````$````.@P```T!?9FEN9%]F
  16957. +M9`````````$````4@P```T!?9G)E95]F9`````````$````V`````````_$`
  16958. +M```#`````$]05%,`!``````#\@```^D````#(&\`!"`O``A.^@`````#[X,`
  16959. +M``)`<W1R<F-H<@````$````*`````````_$````#`````$]05%,`!``````#
  16960. +M\@```^D````#(&\`!"`O``A.^@`````#[X,```)`<W1R8VAR``````$````*
  16961. +M`````````_$````#`````$]05%,`!``````#\@```^D```!-2.<`!G`(<@`L
  16962. +M>``$3J[_.BI`2H!F!'``8"Y"K0`$2'@`*'``+P!![```<@&3R<%!3KH``%!/
  16963. +M*H!F#")-<`A.KO\N<`!@`B`-3-]@`$YU(&\`!$CG``8J2"`-9Q@@36$``!X@
  16964. +M54ZZ```B37`(+'@`!$ZN_RY,WV``3G4@;P`$2.<`!BI(2JT`!&<4(E4L>``$
  16965. +M3J[^(")53J[^)D*M``1,WV``3G4@;P`$(%`B:``.<``0*0`/<@'AH2`!3G4@
  16966. +M;P`$("\`""(O``Q(YP,&+`$N`"I(8:I*AV8$2H9G'B)5(T<`("-&`"0S?``)
  16967. +M`!PL>``$3J[^,G`!*T``!$S?8,!.=2!O``1(YP`&*DA*K0`$9QPB52QX``1.
  16968. +MKOXL2D!G#B)53J[^)D*M``1P`6`"<`!,WV``3G4```/X`````0````$````H
  16969. +M`````````^^#```$0%]D979I8V5?;W!E;@````````$````R@P``!$!?9&5V
  16970. +M:6-E7V-L;W-E```````!````9@````````/Q`````P````!/4%13``0`0```
  16971. +M`_(```/J````!'1I;65R+F1E=FEC90````````/R```#Z0```!XO#B`L```B
  16972. +M`$A!0D'2@"`L``"S@"E```1"K``(0^P`!'``+'@`!$ZN_=@I0```</].KOZV
  16973. +M2(!(P"E```!*K```9PA*@&L$<`%@`G``*4``#"Q?3G4O#B`L``!K""QX``1.
  16974. +MKOZP("P``&<*(D`L>``$3J[^8BQ?3G4```/X`````P````$```!8````.@``
  16975. +M`!X````&`````@```&8```!.````/@```"P````:````%@````````/OA@``
  16976. +M!%]?<W1A<G1U<%]T:6UE```````!````!(8```%?7W5S`````0```!``````
  16977. +M```#\0````,`````3U!44P`$`$````/R```#Z@````7_____9FEF;RYL:6)R
  16978. +M87)Y`````````_(```/K````!````_(```/I````%B`O``113TCG`P`N`$ZZ
  16979. +M```@!TZZ``!*@&<H(D`@:0`<<D#EB<*1+T@`#"`!(&D`!")O``Q.D2P`(`=.
  16980. +MN@``(`9@`G#_3-\`P%!/3G4@+P`$+P<N'V"N``````/O@P```T!C:&MA8F]R
  16981. +M=`````````$````.@P```T!?9FEN9%]F9`````````$````4@P```T!?9G)E
  16982. +M95]F9`````````$````\`````````_$````#`````$]05%,`!``````#\@``
  16983. +M`^D```!B(&\`!"`O``@B;P`,+V\`$``$+V\`%``(+V\`&``,+V\`'``0+V\`
  16984. +M(``4+V\`)``844](YP<4+@!([P,``!1\`"IL``!@%DJM``1F"C!\``$K2``$
  16985. +M8`Q2AMK\`"2\K``$;>0@+``$O(!F>'(*TZP`!"`L``0B`.>!TH#E@2`!3KH`
  16986. +M`"I`2H!F#'`,*4```'#_8```CG#VT*P`!"(`YX'2@.6!(&P``")-8`(2V%.!
  16987. +M9/H@+```9P8@0$ZZ```I30``>O;:K``$(`7G@-"%Y8#;P)?+*TL`!%*%VOP`
  16988. +M)+JL``1M\"`&YX#0AN6`(&P``"&O`!0(!"&'"``AKP`8"`A+[P`@(9T(#"&=
  16989. +M"!`AG0@42^\`+"&="!@AG0@<(9T(("`&3-\HX%!/3G4@+P`$(@!K%K*L``1L
  16990. +M$"`!YX#0@>6`(&P``$*P"`1.=2`O``1(YP$$+@!K'KZL``1L&"`'YX#0A^6`
  16991. +M*FP``-O`2JT`!&<$(`U@"'`)*4```'``3-\@@$YU("P`!$YU``````/X````
  16992. +M$0````$```&"```!9````58```%````!,@```.P```#>````Q````+X```"R
  16993. +M````I````)@```!R````;@```&0```!>````0@````````/O@P```D!M86QL
  16994. +M;V,``````0```("&```"7V5R<FYO```````"```!=@```(R#```"0&9R964`
  16995. +M```````!````N@````````/Q`````P````!/4%13``0`0````_(```/K````
  16996. +M`@```_(```/I````&B!O``0B;P`(GOP`#$CG(18F22I(3KH``"`+9P8N*P`$
  16997. +M8`B1R$ZZ```N`'#_OH!F!'``8"@@!T'O`!1.N@``(@U![P`4)`@L;```3J[^
  16998. +M=$J`9P1P`&`&3KH``'#_3-]HA-[\``Q.=0`````#[X,```-`8VAK86)O<G0`
  16999. +M```````!````%H,```)`=&EM90````````$````F@P```T!?9VUT,F%M:6=A
  17000. +M``````$````\A@```E]$3U-"87-E`````0```$B#```"0%]S971E<G(````!
  17001. +M````6`````````/Q`````P````!/4%13``0`0````_(```/I````!R!O``0B
  17002. +M;P`(("\`#"\+)DDB2"!+)E].^@````````/O@P```D!M96UM;W9E`````0``
  17003. +M`!@````````#\0````,`````3U!44P`$``````/R```#Z0```%(@;P`$(F\`
  17004. +M"%%/2.<!%"9)*DA.N@``0>\`#$ZZ```@#6<(0>\`#"K8*M@@"V<``-)![P`,
  17005. +M3KH``"!`("@`)$2`<CQ.N@``)H!^`"!L``1#[```$!BP&68,2@!F]F8&?@1@
  17006. +M``":(&P`!$/L``@0&+`99@Q*`&;V9@9^`V```(`@;``$0^P`$!`8L!EF"DH`
  17007. +M9O9F!'X%8&8@;``$0^P`&!`8L!EF!DH`9O9G4"!L``1#[``<$!BP&68&2@!F
  17008. +M]F<\(&P`!$/L`"`0&+`99@9*`&;V9R@@;``$0^P`)!`8L!EF!DH`9O9G%"!L
  17009. +M``1#[``H$!BP&68(2@!F]F8"?@$G1P`$<`!,WRB`4$].=2!O``2>_``0+PTJ
  17010. +M2$'O``Q#[P`$80#^Z"JO``P@+P`00^T`!#+`("\`!#+`("P``#+`<``J7][\
  17011. +M`!!.=0`````#^`````@````!````[````-@```#$````L````)P```"$````
  17012. +M:@```%`````````#[X,```-`8VAK86)O<G0````````!````%(,```-`7V=E
  17013. +M='1I;64````````!````'(,```-`;&]C86QT:6UE```````!````-H,```)?
  17014. +M7T-81#,S``````$```!$A@```E]T>FYA;64`````"````.@```#4````P```
  17015. +M`*P```"8````@````&8```!,A@```U]D87EL:6=H=`````````$```$X````
  17016. +M`````_$````#`````$]05%,`!`!````#\@```^H````,3454($135`!7150@
  17017. +M1%-4`$5%5"!$4U0`1414`$-$5`!-1%0`4$14`$%+1%0````````#\@```^D`
  17018. +M```P(&\`!$CG``8J2"QL``!.KO^^!I4/##\`<`!,WV``3G4@+P`$(&\`"%E/
  17019. +M!(`/##\`(CP``5&`+H!.N@``((`@%R(\``%1@$ZZ```@`2Z!<CQ.N@``(4``
  17020. +M!"`7<CQ.N@``(`'E@)"!YX#0@="`(4``"%A/3G4@;P`$64](YR`$2]`@'2(`
  17021. +MZ8&2@"`!YX#0@2(`Y8'2@.^!(!TD`.F"E(#E@B`=+T$`"'(R3KH``-""T*\`
  17022. +M"`:`#PP_`$S?(`183TYU```#[X8```-?5&EM97)"87-E```````!````#(,`
  17023. +M``)?7T-81#,S``````4```"J````7@```%(```!(````.@````````/Q````
  17024. +M`P````!/4%13``0`0````_(```/I````"R`O``193RZ`0>P`!"`(6$].=2!O
  17025. +M``193RZ(0>P`!"`(6$].=2`L``1.=0`````#^`````,````!````)@```!P`
  17026. +M```*`````````_$````#`````$]05%,`!`!````#\@```^H````)````````
  17027. +M``````````$````````````"```````````````````#[`````(````!````
  17028. +M%`````@````````#\@```^D````J(&\`!")O``@@+P`,64](YS\V+@`J2"])
  17029. +M`"B7RTZZ```B#20++&P``$ZN_7XF0"("3J[]>"`+9@9.N@``8%XD;P`H0A(J
  17030. +M!U*%(A,D*P`$)@TH"BQL``!.KOY*2H!G&"(+3J[]>$H29@1P`F`L+P1.N@``
  17031. +M6$]@*$ZN_WPL`'(R1@&P@68(""L``0`+9I0B"TZN_7@@!DZZ```I0```</],
  17032. +MWVS\6$].=0`````#[X,```-`8VAK86)O<G0````````!````'H8```)?1$]3
  17033. +M0F%S90````(```!4````)H,```)`7W-E=&5R<@````$````Z@P```E]S=')L
  17034. +M96X``````0```'"#```$0&-O;G9E<G1?;W-E<G(```````$```"6A@```E]E
  17035. +M<G)N;P```````0```)H````````#\0````,`````3U!44P`$`$````/R```#
  17036. +MZ0```"Q93TJL`!)F#$'O``,I2``28>Y@%D'O``,B;``2L\AD!'`!8`)P_RE`
  17037. +M``!83TYU64](YP$4+B\`%$JL``!F`F'`*FP`%F`N("P``&\,0>\`#R)M``2S
  17038. +MR&(02H!J'$'O``\B;0`$L\AD$"95+PU.N@``6$\J2R`-9LXI30`62H=F!'``
  17039. +M8")0AR\'3KH``"!`(*P`%D/O`!,A20`$0^@`"%A/*4``%B`)3-\H@%A/3G4`
  17040. +M`````_@````'`````0```*(```"0````>@```$(````:````#@````0````#
  17041. +M`````@```$@````Z````*`````````/O@P```E]F<F5E`````````0```&Z#
  17042. +M```"7VUA;&QO8P`````!````B@````````/Q`````P````!/4%13``0`0```
  17043. +M`_(```/J````!T`H(REA;&QO8V$N8PDQ+C$```````````````````/R```#
  17044. +MZP````$```/R```#Z0```#8@;P`$64](YR,"(@@L;```=/Y.KO^L+T``$&<Z
  17045. +M+BP``$ZZ```L`&`>2&\`$$AX"`4O!DZZ``!/[P`,2H!F""E'``!P`&`24X9L
  17046. +MWB(O`!`L;```3J[_IG#_3-]`Q%A/3G4@;P`$2.<A!BI(3KH``"(-+&P``$ZN
  17047. +M_[A*@&<$<`!@4$ZN_WPN`')OTH&P@68@(@UT`$ZN_T9*@&<.(@U.KO^X2H!G
  17048. +M!"`"8"A.KO]\+@!P9="`OH!F#B!-80#_2DJ`9@1P`&`,(`=.N@``*4```'#_
  17049. +M3-]@A$YU``````/OA@```E]$3U-"87-E`````P```'(```!0````#H8```)?
  17050. +M97)R;F\```````,```#,````0````!Z#```#0%]L87-T7V9D`````````0``
  17051. +M`"*#```"7VEO8W1L```````!````-(,```-`8VAK86)O<G0````````!````
  17052. +M;(,```1`8V]N=F5R=%]O<V5R<@```````0```,@````````#\0````,`````
  17053. +M3U!44P`$`$````/R```#Z0```AI(YP`&<"(B/``!``$L>``$3J[_.BI`2H!F
  17054. +M!'``8"`;?``$``A-[0`.0AX@+```',`L[```0>T`%$ZZ```@#4S?8`!.=2!O
  17055. +M``0O#B)(<"(L>``$3J[_+BQ?3G4@;P`$2.<`!BI(("T`(&<*+&P``'(`3J[_
  17056. +MW"`M`"1G#"QL``!R0.&)3J[_W"`M`#1G!B!`3KH``"`M`#AG!B!`3KH``"!M
  17057. +M`#QAI"!-3-]@`$[Z``!(YP(&+`$J2$J`9Q0@+0`@(BT`-"QL```P?``!3J[_
  17058. +MRDJ&9Q0@+0`D(BT`."QL```P?``"3J[_RG`!(BP``..@3-]@0$YU2.<#-B9)
  17059. +M*D@N$R!O`!PL$&`4(&T`-+'*9@1^`&`(M>T`.&8"?``@;0`\+'@`!$ZN_HPD
  17060. +M0$J`9MI*AV<60I,@+0`@(BT`-"QL```P?``#3J[_RDJ&9U(@;P`<0I`@+0`D
  17061. +M(BT`."QL```P?``#3J[_RF`V<`$B+```XZ`L>``$3J[^PB!M`#PL>``$3J[^
  17062. +MC"1`2H!GWB!M`#2QRF8$?@!@"+7M`#AF`GP`2H=FUDJ&9M)P`2(L``#CH"(`
  17063. +M<``L>``$3J[^SDS?;,!.=5E/2.<#%BX`)DDJ2&```(9"K0`L""T``@`S9PQP
  17064. +M(RE```!P_V```*PL;```<@%.KO\Z("T`("(M`#0L;```,'P``4ZN_\H@;0`\
  17065. +M<``0*``/<@'AH2`!3KH``"P`("T`("(M`#0P?``#3J[_RF`0<`$B+```XZ`L
  17066. +M>``$3J[^PB!M`#PL>``$3J[^C$J`9^`@!DZZ```@+0`@0>\`%"(((&T`+"QL
  17067. +M``!.KO_6+`!G`/]B(`92@&8"?`"\AV,"+`<@!B!O`!1@`A;84X!D^B`&*T``
  17068. +M+$S?:,!83TYUGOP`2$CG#Q8N`"I()DDO20`<2H=F``"*("T`)"QL``!R0.&)
  17069. +M3J[_W"!-0^\`(!+89OQ![P`@0^P``$ZZ```@34/O`$(2V&;\0>\`0D/L``1.
  17070. +MN@``""T````S9P@(+0`/`#)G!D'O`"!@!$'O`$(@"')`Z8D@?```C@!.KO_B
  17071. +M*T``)&<``.PL;```3J[_Q$J`:@)2@.*`*T``*'``8```X$JM`"1G``#*+"T`
  17072. +M*'H`8```M+R'8P``CBP'8```B`@M``(`,V<02H5G!B`%8```L'`C8```I"`M
  17073. +M`"0B+0`X+&P``#!\``).KO_*(&T`/'``$"@`#W(!X:$@`4ZZ```H`"`M`"0B
  17074. +M+0`X,'P``TZN_\I@$'`!(BP``..@+'@`!$ZN_L(@;0`\+'@`!$ZN_HQ*@&?@
  17075. +M(`1.N@``2H!G"$J%9P0@!6`Z("T`)"(+($8L;```3J[_T"@`9P#_9DJ$:Q+:
  17076. +MA)Z$U\1P`+Z`8@#_2"`%8`YP#4ZZ``!P("E```!P_TS?:/#>_`!(3G6>_``,
  17077. +M2-<!`W`=*4```'#_WOP`#$YU64\N@&$`_")P`%A/3G6>_``L2.<@%B9)*DA*
  17078. +M@&<2!(````@!9R)3@&<``)Q@``"J2I-G"`CM``(`,V`&"*T``@`S<`!@``":
  17079. +M<`/`K0`P5X!F*`@M``\`,F<&0>P`&&`$0>P`&B\(+PU(;``(2&\`'$ZZ``!/
  17080. +M[P`08"H(+0```#-G$"\-2&P`'$AO`!A.N@``8`XO#4AL`"9(;P`83KH``$_O
  17081. +M``Q![P`0(@@L;```)#P```/M3J[_XB:`9P1P`&`@3KH``&`8(!-G"B(`+&P`
  17082. +M`$ZN_]QP`&`(<!8I0```</],WV@$WOP`+$YU(&\`!"`O``@B+P`,+V\`$``$
  17083. +MGOP`3$CG#S8J+P!P+`$N`$*O`&B;S9?++T@`('!`3KH``"1`2H!G``&@80#Z
  17084. +MHB]``&AG``&4<!1.N@``*D!*@&<``89P%$ZZ```F0$J`9P`!>'`%&T``""!O
  17085. +M`&@K2``.<A0[00`2%T``""=(``XW00`2)4@`/"5-`#0E2P`XD<@E2``D)4@`
  17086. +M("5(`#!*AV<&".H````S2H9G!@CJ``$`,TAZ_G!(>OY>2'K^1$AZ_+A(>OO:
  17087. +M2'K[#"`J`#`@2D/Z^KQ.N@``3^\`&"@`9P``\$J%9P8(Z@`/`#(@;P`@(DH2
  17088. +MV&;\($I#[P`D$MAF_$'O`"1#[``T3KH``"!*0^\`1A+89OQ![P!&0^P`.$ZZ
  17089. +M``!*AV<H2H9G!$J%9@9![P`D8`1![P!&(`@L;```<D#IB3!\#0!.KO_B)4``
  17090. +M($J&9RI*AV<$2H5G!D'O`"1@!$'O`$8@""QL``!R0.F)('P``(X`3J[_XB5`
  17091. +M`"1*J@`@9@1*AV8J("H`)&8$2H9F($J`9Q0L;```3J[_Q$J`:@)2@.*`)4``
  17092. +M*$*J`"P@!&!8("H`(&<*+&P``'(`3J[_W"`J`"1G"BQL``!R`$ZN_]Q*A&L&
  17093. +M(`1.N@``(`UG!B!-3KH``"`+9P8@2TZZ```J;P!H(`UG!B!-80#Y+B`*9P8@
  17094. +M2DZZ``!P_TS?;/#>_`!,3G4@;P`$GOP`("\-*DA.N@``2JP``&8(<`8I0```
  17095. +M8&@@+```4JP``"(L``#2@"\!2&P`/$AO``Q.N@``<``N@$'O`!!R`<%!80#]
  17096. +MN$_O``PJ@<<``O`$'O``AR`6$`_:)83RM```1K!'``8!P@%4ZZ``!*@&<*
  17097. +M($`@:``$80#XKB`53KH``'#_*E_>_``@3G4@+P`$(B\`""]O``P`!"!O`!">
  17098. +M_``H+PTJ2$CO``,`!$ZZ``!*K```9@AP!BE```!@:"`L``!2K```(BP``-*`
  17099. +M+P%(;`!(2&\`%$ZZ``!P`2Z`(@!![P`8P4%A`/T43^\`#"J`:S1"IT'O`!!P
  17100. +M`2(`80#\_EA/*T``!&L$<`!@'"`53KH``$J`9PH@0"!H``1A`/@*(!5.N@``
  17101. +M</\J7][\`"A.=0`````#^`````L````!```(!@``!V(```8\```&)@``!,P`
  17102. +M``2\```$H```!)@```22```"Y@```M`````````#[X8```-?7V9I9F]?<VEG
  17103. +M```````&```#K@```C````&H```!:@```.H````LA@```5]?=7,````!````
  17104. +M,H,```)`3F5W3&ES=`````$````ZA@```U]?1FEF;T)A<V4``````!$```;H
  17105. +M```&V```!K8```:(```&7````^8```-X```#(````K8```)B```!^@```5H`
  17106. +M``$\````W````,0```!\````;(,```)`9G)E90````````8```<D```'#```
  17107. +M!P(```"L````G````)"&```"7V5R<FYO```````&```'\```!TP```42```$
  17108. +M+```!!(```'>A@```E]$3U-"87-E`````P``!00```3B```!Z(,```1`7W=A
  17109. +M:71?<VEG;F%L<P```````@```Y0```(6@P``!$!?:&%N9&QE7W-I9VYA;',`
  17110. +M```"```#S@```E"#```"0'-T<F-A=``````$```&0```!BH```+J```"U(,`
  17111. +M``1`7W-I9U]D:7-P871C:````````0``!`R#```#7U]S<')I;G1F````````
  17112. +M!0``"`X```=J```$U```!,0```2H@P```D!?<V5T97)R`````0``!/B#```"
  17113. +M0&UA;&QO8P`````#```%>@``!6P```52@P```T!?86QL;V-?9F0```````$`
  17114. +M``7V@P```T!?9G)E95]F9`````````,```A:```'M@``!OB#```#0&-H:V%B
  17115. +M;W)T`````````@``!^0```=`A@```U]?9FEF;U]O:P````````(```?H```'
  17116. +M1(8```1?7V9I9F]?;V9F<V5T````````!```!_H```?V```'5@``!U*&```#
  17117. +M7U]F:69O7V)A<V4``````@``!_X```=:@P```T!?9FEN9%]F9`````````(`
  17118. +M``A&```'H@````````/Q`````P````!/4%13``0`0````_(```/J````%5]M
  17119. +M``!?<P``9FEF;SHE<R]R=V5S2R5S`&T```!F:69O.B5S+W(`9FEF;SHE<R]M
  17120. +M=V5+``!?;0``7W,``'5X9FEF;RXE;'@``'5X9FEF;RXE;'@``````_(```/I
  17121. +M````"2`O``193RZ`0>P`%B`(6$].=2!O``193RZ(0>P`%B`(6$].=0```_@`
  17122. +M```"`````0```!P````*`````````_$````#`````$]05%,`!`!````#\@``
  17123. +M`^H````)=7-E<@````````````!W:&5E;`````````X````4```````&```#
  17124. +M[`````0````!````(````!H````6````!@````````/R```#Z0```*D@+P`$
  17125. +M64\N@"`L`0QG#B!`3KH``$J`9P1R`6`"<@`@`5A/3G4@+P`$(&P!#'(`3OH`
  17126. +M`$ZZ```I0`$,9@I(;```3KH``%A/(&P!#$ZZ``"!K```3G4@;`$,3OH```CL
  17127. +M``P``DYU("\`!`@```Q6P$0`2(!(P$YU".P`#0`"3G4@+P`$"```#5;`1`!(
  17128. +M@$C`3G5.N@``<``@;```$"@`#W(!X:&#K```3G5.^@``("\`!%E/2.<!%B]`
  17129. +M`!!^`&`N("T`%$ZZ```F0$J`9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL
  17130. +M>``$3J[_+B!L```L>``$3J[^C"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`
  17131. +M<`'OH"P`<`F^@&8&<`!.N@``("P!!,"&9P:-K`$(8'HJ!D:%RZP!"$J':V9P
  17132. +M(+Z`;&`@!^>`0>P`!"IP"``P?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X
  17133. +M48!G-&`*2&P`&$ZZ``!83W``3KH``&`@(`UG'"`'YX`H!D'L``2(L`@$B:P!
  17134. +M!"`'3I5&A,FL`00@+`$(P(9FBDS?(/!.=2`O``0O#B(L``""@'``+'@`!$ZN
  17135. +M_LXL7TYU("\`!"\.(@`@+```@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A
  17136. +M`/X02H!G"'P!<`YA`/\,(`=A`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!
  17137. +M<`-A`/[H(`=A`/Z&2H!G"'P!<!1A`/[6(`9,WP#`3G4@+P`$+P<I0```<`@N
  17138. +M'V``_KQP`&$`_V!@D&#V2.<!%'X`2^P`!#9\``$JBT*M``12AU"-<""^@&WP
  17139. +M0JP!"$*L`01"K```80#]U&$`_>IA`/VB3-\H@&``_?AA`/VX8`#^"``````#
  17140. +M^`````(````!```!=````#X````7`````@```H0```*````"?````F0```'6
  17141. +M```!N@```:8```&B```!F````9````%*```!.````2X```$F````I````'H`
  17142. +M``!@````5@```%````!(````.````"H````*`````````^^#```$0%]T:6UE
  17143. +M<E]E>'!I<F5D``````$````2@P``!$!?=&EM97)?<W1A<G0````````!````
  17144. +M,(,```1`7V%L;&]C7W1I;65R`````````0```#2#```"7U]F86EL```````!
  17145. +M````0H,```-`7W1I;65R7W-I9P`````!````3(,```-`7V9R965?=&EM97(`
  17146. +M```!````6H,```1`7VEN:71?<')O8V5S<V5S`````0```)*&```$7U]C:&EL
  17147. +M9')E;E]E>&ET``````(```#N````F(,```5`7V-L96%N=7!?<')O8V5S<V5S
  17148. +M``````$```"J@P```T!?9FEN9%]P:60```````$```#$@P```D!?7V5X:70`
  17149. +M`````@```8````$B@P```U]?;65S<V%G90````````$```%XA@```E]?1E!%
  17150. +M4E(``````0```D@````````#\0````,`````3U!44P`$`$````/R```#Z@``
  17151. +M``I&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=``````#
  17152. +M\@```^L```!$```#\@```^D```(=2&P`!$ZZ``!83TYU("\`!"\-3KH``"I`
  17153. +M2H!F`F'B(`TJ7TYU(&\`!"`O``@O"TZZ```F0$J`9@)AQB`+)E].=2!O``0O
  17154. +M#2I((`UF!$OL``X@34H89OQ3B)'-(`A2@$ZZ```@0$J`9@1P`&`((D@2W6;\
  17155. +M(`@J7TYU64](YP,T?@!\`"!L```F:`#08"Q**P`(9B0P/`4`P&L`#F8:4H<@
  17156. +M:P`*(`A*&&;\4XB1P"`(W(#<JP`45(8F4TJ39M`@!U*`Y8#0AF$`_THI0``8
  17157. +MY8<@0")`T\=%Z0`$+T``%&8*0>P``"E(`!A@5B!L```J:`#08$)*+0`(9CHP
  17158. +M/`4`P&T`#F8P)FT`"BXM`!0@;P`4(,HO2``48`(4VTH39OH4_``])FT`$&`"
  17159. +M%-L@!U.'2H!F]D(:*E5*E6:Z(&\`%$*03-\LP%A/3G4@;P`$("\`""\-*D@J
  17160. +M@$*M``3E@&$`_K0K0``(*E].=2!O``0B;P`(("\`#$CG(C0F22I(2H!G"B!+
  17161. +M80#^PB1`8`(D2R`*9SXB%20M``2T@6TB+`'<AG00TH*\@6T"(@8J@2`!Y8`@
  17162. +M;0`(3KH``"M```AG$D?M``0B$U*;Y8$@6R&*&`!P`4S?+$1.=2!O``0B;P`(
  17163. +M("\`#&&22H!F!&$`_AI.=2!O``0B;P`(2.<`%"9)*D@@+0`$T*L`!+"5;Q+0
  17164. +M@"J`Y8`@;0`(80#^&BM```@B+0`$Y8$@;0`(T<$@*P`$(@#E@2)K``A@`A#9
  17165. +M4X%D^M&M``0@:P`(3-\H`$[Z```@;P`$(F\`""]O``P`!"`O`!`B+P`464](
  17166. +MYP(T+`$J221(+T@`$$J`9T13@&<*4X!G``"V8```]%.&9R(@+P`8(@V0@2!O
  17167. +M`!!",`@`($$B;P`08`(2V%.`9/I@``#.0>P`$")O`!`2V&;\8```OB9O`!A@
  17168. +M;G!<L!5F9DHM``%G8%2-<`&\@&8&%/P`86!4(`95@&9&$"W__TB`2,!R(Y"!
  17169. +M9RY5@&<J58!G)E.`9R)3@&<>4X!G&G(5D(%G%'(<D(%G#E6`9PIR'Y"!9P15
  17170. +M@&8$%/P`)Q3M__]@"!3M__]@`A3=N\MECF!`)F\`&&`V<"JP%68N2BT``6<H
  17171. +M5(T0+?__2(!(P')ED(%G#'()D(%F#!3\``I@#A3\`!M@"!3M__]@`A3=N\ME
  17172. +MQD(23-\L0%A/3G6>_`$L2.<_-BIO`5@@;```#&@`)0`49`I(>``43KH``%A/
  17173. +M0JP`''`!*4``&"E``#YP`BE``#HI0`!@*7P```"$`%R3R2QX``1.KO[:*4``
  17174. +M`$ZZ```I0``$9@I(;``23KH``%A/(&P`!$ZZ```I0``(+&P`!"!6+&@`%"E.
  17175. +M`!1![P$P3J[_OBEO`3``#$ZZ``!.N@``(&P``"`H`*QG$.6`(D`B*0`TY8$I
  17176. +M00`08`8I:`"$`!!*%68``.A![``J(@@L;```)#P```/N3J[_XBP`0>P`,"((
  17177. +M3J[_XBX`0>P`-B((3J[_XBH`2H9G"$J'9P1*A68B2H9G!B(&3J[_W$J'9P8B
  17178. +M!TZN_]Q*A6<&(@5.KO_<80#[<G`!+P`O!2\`+P<B!L%!3KH``"!L```@*``<
  17179. +M0>\!6&$`_)Y/[P`0?`!^`&!0(FP``"!I`"0@,'@`9SXB`$/O`#`D"2QL``!V
  17180. +M0.6+3J[^;DJ`9R8B;```(&D`)-''("@`!&<((@(D`$ZN_(Y![P%(0^\`,'`!
  17181. +M80#\V%*&4(<@;```O*@`'&VF8``"S"QL``!.KO_**`!.KO_$*@!^`"!L```L
  17182. +M*`#@9BA^`4'L`#PB""0\```#[4ZN_^(L`&820>P`/B((3J[_XBP`9@1A`/JD
  17183. +M+P<O!G``+P`O!2($P4%.N@``0>\!6'`!80#[UB`\```%&F$`^HX@0#%\!```
  17184. +M$B]``#QP0.6(80#Z>D_O`!!^0.6/+T`!.&`"4HT0%4B`2,!![``!"#```P@`
  17185. +M9NP0%6<``A9R(K`!9C!2C29-8!!P*K`59@A*+0`!9P)2C5*-$!5G!G(BL`%F
  17186. +MYB1-$!5R(K`!9@)2C7P"8%1P)[`59B!2C29-8`)2C1`59P9R)[`!9O0D37`G
  17187. +ML!5F`E*-?`%@+B9-8!!P7+`59@A*+0`!9P)2C5*-$!5G$G(@L`%G#'(*L`%G
  17188. +M!G()L`%FVB1-?``@2RH*FHL@!5*`+T@`*&$`^;8F0$JO`4QF("`%($LB;P`H
  17189. +M3KH``$(S6`!![P%((DMP`&$`^V!@`/\FVH5R$-J!NH=O%"!O`3A.N@``(`5A
  17190. +M`/EV+@4O0`$X+PH@!B!+(F\`+'(!80#[KEA/(@LD+P$X)@<L;```3J[\N"H`
  17191. +M;!!"$B\O`"A(;`!$3KH``%!/2H5F(B\*(`8@2R)O`"QR`&$`^W1![P%,(DMP
  17192. +M`&$`^NA83V``_JQZ`2!O`"Q"J``(0B@`$4(H`!`O"B`&($LB;P`L<@)A`/M`
  17193. +M0>\!0'`080#Z)EA/(@LD+P`L+&P``$ZN_,HH`&8\8"IZ`")O`"S2_`$80>\!
  17194. +M/'`!80#Z($J`9@1X9V`2(B\`+"QL``!.KOS$*`!*A&?2(B\`+"QL``!.KOR^
  17195. +M<'30@+B`9PI(;`!83KH``%A/2H5G(B\*(`8@2R)O`"QR`&$`^L!![P%,(DMP
  17196. +M`&$`^C183V``_?@@+P%`(&\!1$ZZ``!![P%(0^\!/&$`^BH@2TZZ``!@`/W6
  17197. +M(&\!.$ZZ```@;P`L3KH``&$`^))![`!R3KH``"E```!F"$'L`'@I2```0>P`
  17198. +M?DZZ```I0``49@8I;````!1![`"(3KH``"E``!AF"$'L`(XI2``80>P`DDZZ
  17199. +M```I0``<9@A![`"8*4@`'$'L`*!.N@``*4``'&8(0>P`JBE(`!P@+P%,(&\!
  17200. +M4")L`!A.N@``<`!.N@``3-]L_-[\`2Q.=0```_@````5`````0``"$X```A`
  17201. +M```(.```""H```@B```(%```"`````?X```'Z@``!X0```;0```%3@``!3H`
  17202. +M``18```$3```!#8```/6```"J````.````!.`````@```!(````"```(7@``
  17203. +M"%(```A(```%+@``!"P```0D```$$```!`0```/V```#[````^@```/@```#
  17204. +MT````\@```#J````Y````,H```"$`````````^^#```"7U]F86EL```````$
  17205. +M```'B```!M0```/:````!H,```)`;6%L;&]C``````(```!@````%(,```)`
  17206. +M<F5A;&QO8P````(```&R````,(,```)`9G)E90````````4```?B```'V@``
  17207. +M!\X```:4```"1H8```)?4WES0F%S90````$```.(@P```E]?6$-%6$E4````
  17208. +M`0```YB&```"7U]?:6]B```````&```#N@```[(```.N```#J````Z0```.>
  17209. +M@P``!$!?86QL;V-?=&EM97(````````!```#S(,```-`7W1I;65R7W-I9P``
  17210. +M```!```#Y(,```-`7VEN:71?9FEF;P`````!```$"(,```1`7VEN:71?<VEG
  17211. +M;F%L<P```````0``!`R&```"7T1/4T)A<V4````'```'=```!V(```<T```&
  17212. +MO@``!1P```34```$/(,```1`7VEN:71?=6YI>&EO`````````@``!6X```2@
  17213. +MA@```U]?5T)E;F-H37-G``````0```4.```$Y```!+X```2DA@```E]?7V-T
  17214. +M>7!E`````0``!;"#```"0'-T<FYC<'D````!```&;H,```)`='%S;W)T````
  17215. +M``$```>\@P```T!?7V=E=&5N=@````````4```A$```(+@``"!@```@$```'
  17216. +M[H8```-?7V%M:6=A7W5S97(````)```(/```"#(```@F```('```"!````@.
  17217. +M```("```!_P```?R@P```D!M86EN`````````0``"&*#```"0&5X:70`````
  17218. +M```!```(:`````````/Q`````P````!/4%13``0`0````_(```/J````+```
  17219. +M``!.;R!M96UO<GD```!A`$9A:6QE9"!T;R!C<F5A=&4@=&EM97(``$Y)3#H`
  17220. +M`$Y)3#H``$Y)3#H``"H`3DE,.@``26YV86QI9"!W:6QD8V%R9"`E<P!%<G)O
  17221. +M<B!E>'!A;F1I;F<@87)G=6UE;G1S`%5315(``'5S97(``%5315).04U%``!(
  17222. +M3TU%``!S.@``4TA%3$P`8FEN.G-H``!(3U-43D%-10``86UI9V$````#\@``
  17223. +M`^L````(```#\@```^D````$("\`!%E/+H!P`%A/3G4``````_$````#````
  17224. +M`$]05%,`!``````#\@```^D````^("\`!$CG`P`N`$JL``!G!"`'8&!\`"`'
  17225. +M`H````$D9P)\"`@'``=G!`!&``4(!P`$9P0(Q@`""`<``6<$",8```@'``-G
  17226. +M!`C&``$(!P``9P0(Q@`&(`=R2<"!<D"P@68$`$8`0@@'``EG!`C&``4@!@I`
  17227. +M``],WP#`3G4@+P`$2.<&`"P`2JP``&<((`8"0`__8%YZ``I&``\(!@`#9P1Z
  17228. +M2>6-(`9R!<"!6X!F!`C%``<(!@`"9P0(Q0`$"`8``&<$",4``2`&<D+`@6<$
  17229. +M",4`!@@&``%G!`C%``,(!@`&9P0(Q0``"`8`!6<$",4`"2`%3-\`8$YU````
  17230. +M``/X`````@````$```"&````#`````````/Q`````P````!/4%13``0`0```
  17231. +M`_(```/K`````0```_(```/I`````G``3G5P`$YU```#\0````,`````3U!4
  17232. +M4P`$``````/R```#Z0```!5(YP,`3KH``"X`?`!@"B\&3KH``%A/4H:\AVWR
  17233. +M3-\`P$YU("\`!"\'+@!AU$ZZ``!.N@``(&P``$ZZ```O!TZZ``!83RX?3G4@
  17234. +M+P`$+P<N'V#4``````/O@P```T!?;&%S=%]F9`````````$````&@P```E]C
  17235. +M;&]S90```````0```!*#```$0%]C;&5A;G5P7V9I9F\```````$````N@P``
  17236. +M!4!?8VQE86YU<%]S:6=N86QS`````````0```#*&```#7U]O9&1?=&EM97(`
  17237. +M`````0```#:#```#0%]F<F5E7W1I;65R`````0```#J#```"7U]80T58250`
  17238. +M```!````0`````````/Q`````P````!/4%13``0`0````_(```/I````$R`O
  17239. +M``0B+P`((&\`#%%/2.<#)"P!+@`J2$ZZ```@!TZZ``!*@&<:(D`@:0`@+T@`
  17240. +M%"`&(&D`!")-)&\`%$Z28`)P_TS?),!03TYU``````/O@P```T!C:&MA8F]R
  17241. +M=`````````$````:@P```T!?9FEN9%]F9`````````$````@`````````_$`
  17242. +M```#`````$]05%,`!``````#\@```^D```"8GOP`#$CG+S8J;P`T?@/.KP`X
  17243. +M?`$@;```)F@`N"H\```#[$ZZ``!*AV<*<`*^@&<$<@!@`G(!+T$`*'`!OH!G
  17244. +M"%6'9P1P`&`"<`$O0``L($U#[```3KH``$J`9@9X_V```51P_R!L```A0`"X
  17245. +M(@TL;```=/Y.KO^L+@`@;```(4L`N$J`9G@L;```3J[_?$ZZ```L`"`L``!R
  17246. +M+D8!L(%G!$J`9@I^`2H\```#[F`6(`95@&8,""\`"``Z9P1P`6`"<``N`$J'
  17247. +M9RQ\``@O``@`.F<<""\`#P`Z9P9X`F```-8@+P`\3KH``"@`8```R'C_8```
  17248. +MPBE&``!P_V```4)"IRQL``!R`B0/3J[_'$_O``0D0$J`9PPB!R0*3J[_FDJ`
  17249. +M9A8@"F<()`IR`DZN_Q9.N@``</]@``$(*"H`="0*<@).KO\6(@=.KO^F<%#I
  17250. +MB,"O`#@,@```!0!F#'`1*4```'#_8```VDJO`"AG!@@$``-F#$JO`"QG$@@$
  17251. +M``)G#'`-*4```'#_8```M@@O``D`.F<B(@TD/````^Y.KO_B2H!G""(`3J[_
  17252. +MW&`*3KH``'#_8```C`@O``@`.F<$(`5@!B`\```#[20`(@TL;```3J[_XBH`
  17253. +M9@A.N@``</]@8`@O``D`.F8$2H9F!"P$8`)\_WX`2J\`*&<"?@%*KP`L9P0(
  17254. +MQP`!""\``P`[9P0(QP`#+P<@!2(&3KH``%A/+@!L''#_(&P``"%``+@B!2QL
  17255. +M``!.KO_<(&P``"%+`+@@!TS?;/3>_``,3G4@;P`$+R\`#"\O``PO"&$`_:A/
  17256. +M[P`,3G4```/X`````0````$```!2`````````^^&```!7U]U<P````4```(V
  17257. +M```")````'P```!F````%H,```-`8VAK86)O<G0````````!````)(,```)`
  17258. +M<W1R:6-M<`````$```!6A@```E]$3U-"87-E````!0```BX```',```!`@``
  17259. +M`(@```!P@P``!$!C;VYV97)T7V]S97)R```````!````D(8```)?7T]315)2
  17260. +M``````$```"6@P``!4!?;6%K95]P<F]T96-T:6]N`````````0```.:&```"
  17261. +M7V5R<FYO```````#```!@@```5X```#V@P```D!?<V5T97)R`````P```=@`
  17262. +M``&L```!,(,```1`7V%L;&]C7V%M:6=A9F0``````0```A@````````#\0``
  17263. +M``,`````3U!44P`$`$````/R```#Z@````).24PZ`````````_(```/I```%
  17264. +M:"!O``1(YS@`</_`*``#<@`2`'#_P"@``G0`%`!P_\`H``%V`!8`</_`$'@`
  17265. +M&`#AA(B#X82(@N&$B($@!$S?`!Q.=4CG(S1+[`!R0>P`'$7L``PDR$'L`"`D
  17266. +MR$*L`!A"FGX`+"P`>D?L![Q@/"`K``0B`.6!($W1ZP`(0^@'ZD7L``PEB1@`
  17267. +M2H!G!G`!*4``&$J'9P9*JP`$9@@@$T2`*4``%%*'UOP`$+Z&;<!^`"PL`'9@
  17268. +M.G``(@<&@0``!=@0-1@`2,#I@"!-(@`&@0``!U+1]1@`!H````=.)#4(`.6"
  17269. +M0^@'ZD7L``PEB2@`4H>^AFW"3-\LQ$YU(&\`!")O``B>_`HH2.<[-B](`"@O
  17270. +M20`L(`AF"$WL`"0O3@`H<#H@;P`HL!!F!%*O`"@@;P`H<#I.N@``2H!F3G`*
  17271. +M(@`@;P`H(`A*&&;\4XB1P-*(4H%P0;*`909P_V```DQ![``P0^\`,1+89OQ!
  17272. +M[P`Q0^P`/$ZZ``!![P`Q(F\`*$ZZ``!![P`Q+T@`*$*G+R\`+$ZZ``!03RX`
  17273. +M4H!F!G#_8``"""`'0>\`<B(\```)VDZZ```L`"`'3KH``$J`9@9P++R`9`9P
  17274. +M_V```>!![P"*80#^."X`0>\`CF$`_BXJ;P`L*H!![P"280#^("M```1![P"6
  17275. +M80#^%"M```A![P":80#^""M```PB%6LP=#*R@FXJ)BT`"&\D>`JVA&X>*"T`
  17276. +M!&L8#(0```%R;A!*@&L,L()N"+:'9PI*AV<&</]@``%JTH'E@2`M``@D`-2"
  17277. +MU(#4@B`M``0F`.6#UH#6@M:M``S6@=:'<"S6@+R#9`9P_V```3A'[P">?``D
  17278. +M36`0($MA`/V()4``$%B+4H98BKRM``1MZGP`8"`0&R(&!H$```78&X`8`'(`
  17279. +M$@"RK0`(;09P_V```/92AKRM``1MVGP`0>T'2B1(+T@`)&!*($MA`/TZ)(!+
  17280. +MZP`%$"L`!'(`$@`E00`$9PI3@6<&</]@``"\1^T``1`5<@`2`"5!``AM"BIO
  17281. +M`"RRK0`,;P9P_V```)Q2AM3\`!"\K0`(;;!\`&`.(`8&@```!^H;FP@`4H:\
  17282. +MK0`,;>P@!@:````'ZD(U"`!\`-K\"!Y@'B!+80#\OBJ`1>L`!"!*80#\LBM`
  17283. +M``1'Z@`$4H90C2!O`"R\D&W:?``D;P`D*F\`+&`H2H=F!D*J``Q@&!`;2(!(
  17284. +MP"5```QR`;"!9PA*@&<$</]@#E*&U/P`$+RM``AMTG``3-]LW-[\"BA.=2!O
  17285. +M``193R\-*DA@`E*-$!4?0``$9R9(@$C`0>P``0@P``((`&86$"\`!'(LL`%G
  17286. +M#'(ML`%G!G(KL`%FT"`-*E]83TYU(&\`!")O``@@+P`,(B\`$%E/2.<'%"P!
  17287. +M+@`F22I((`UG$A`52(!(P$'L``$(,``""`!F!'``8$IZ`&`B$"\`%$B`2,`B
  17288. +M!>6!TH72@=*`*@%P,)J`NH9O!'``8"92C1`5'T``%&<02(!(P$'L``$(,``"
  17289. +M"`!FQKJ';`1P`&`$)H4@#4S?*.!83TYU(&\`!")O``A93TCG`!0F24/O``AP
  17290. +M`'(880#_;"I`2H!F!'``8&H@+P`((@#I@9*`(`'I@)"!Z8`F@'`ZL!5F3D'M
  17291. +M``%#[P`(<`!R.V$`_S@J0$J`9@1P`&`V("\`""(`Z8&2@.6!TY-P.K`59B!!
  17292. +M[0`!0^\`"'``<CMA`/\**D!*@&8$<`!@""`O``C1DR`-3-\H`%A/3G4@;P`$
  17293. +M(F\`"%E/2.<!%"I)+T@`#!`0<BVP`68(?@%2KP`,8#!(@$C`0>P``0@P``((
  17294. +M`&88<BL@;P`,LAA7P$0`2(!(P"](``Q*@&<$?@!@!'``8!P@;P`,(DUA`/\4
  17295. +M)D!*@&8$<`!@"$J'9P)$E2`+3-\H@%A/3G4@;P`$(F\`")[\``Q(YP`D*DDO
  17296. +M2``0<$JP$&8H0I5#Z``!0>T`!"](``P@22)O``QP`2(\```!;6$`_CPO0``0
  17297. +M8```M'!-L!!F?'`"*H!#Z``!0>T`#"](``P@22)O``QP`7(,80#^$")`2H!F
  17298. +M!G``8```P$7I``%P+K`19P9P`&```+!![0`((D@@2G`!<@5A`/WD(D!*@&8&
  17299. +M<`!@``"41>D``7`NL!%G!G``8```A$'M``0B2"!*<`!R!F$`_;@O0``08#`0
  17300. +M$$B`2,!#[``!"#$``@@`9QIP`2J`0^T`!'``(CP```%M80#]C"]``!!@!'``
  17301. +M8#P@+P`09@1P`&`R<"\@;P`0L!!F'$/H``%![0`0+T@`#"!)(F\`#&$`_=HO
  17302. +M0``08`@K?```'"``$"`O`!!,WR0`WOP`#$YU("\`!"(O``@@;P`,+V\`$``$
  17303. +MGOP`)$CG/Q0J2"H`+@$D!W8#Q(,O0``X+T$`/$J"9@P@!W)D3KH``$J!9A(@
  17304. +M!W)DY8E.N@``2H%G!'``8`)P`2P`(!5*@&<,4X!G2%.`9V9@``%^("T`!"(`
  17305. +M4X$D`=2"U($F`NF#EH(D`^F"E(/O@BX%WH(O1P!`2H9G``%4<CRP@6T``4P&
  17306. +MAP`!48`O1P!`8``!/B`M``0B`-*!TH`D`>F"E($B`NF!DH+O@=J!+T4`0&``
  17307. +M`1PH!7X`*BT`#%.%(`;0@-"&Z8!'[``^U\`O0``@8!H@&R(`TH'2@"0!Z8*4
  17308. +M@2("Z8&2@N^!V(%2A[Z%;>(N+P`\+T0`)"(M``QT`K*";@8F!U.#8`(F!R`#
  17309. +M<F1.N@``(@#2@4J`:@)6@.2`+T``+"`#+T$`,')D3KH``"`!:@)6@.2`=@G6
  17310. +MK0`,+T``-"`#+T$`*'(,3KH``%*!(`'G@)"!T("0@="`58!R"DZZ``!'[P`H
  17311. +MT)O0KP`TT)N0FU*`<@=.N@``+@%J`EZ'+"T`!)R':@)>AGH!*"T`"&`<+@9>
  17312. +MAR(M``SE@4'L`#K1[P`@OK`8`&P(+`=2A;J$;>`@!M"`T(8B`.F!DH`@`>F`
  17313. +MD('O@"(O`"32@"]!`$`@+P!`T*T`$-"O`$A,WRC\WOP`)$YU(&\`!")O``@@
  17314. +M+P`,GOP`6$CG/S8J2"Q-1^\`-";`)L@FR2].`#!*@&<<(`A*&&;\4XB1P"P(
  17315. +M(@C3KP`X<#.R@&4<?#)@&&$`^JHL`)R-+T``.'(#O(%L!G#_8``#>B]&`"P@
  17316. +M;P`X2A!F!G#_8``#:$/O`'1A`/OF+T``.&8&</]@``-4)F\`/$'L`*8B2V$`
  17317. +M][`N`&<"0I,@;P`X2A!G``*^*D@O2`!\80#Z2"(`DHTO0``X+T$`>'8#LH-L
  17318. +M!G#_8``#%"!O`#@0$&<@<BRP`6<:<CNP`6<40^\`<&$`^WXO0``X9A1P_V``
  17319. +M`NP@//__\?#0KP!T+T``<"!O`#@0$'(LL`%G"'([L`%F``%80^@``2!)0^\`
  17320. +M7&$`^[HJ0$J`9@9P_V```K!%[0`!<"RP%6<&</]@``*@($I#[P!(80#[E"]`
  17321. +M`#AF!G#_8``"BB!O`#A*$&<&</]@``)\($MP`B%```@A?````(@`!"`O`'!$
  17322. +M@$WH!THLP'`!+,!2ABS&("\`=$2`3>@'6BS`0IY"GM;\`!!%Z`78>@`L/```
  17323. +M![(@2B\O`'0O2``L(`4B!D'O`&!A`/QF+@`NKP!T(`4B!D'O`$QA`/Q46$\H
  17324. +M`$OJ``)%ZP`(OH!O&B!+((1P`2)O`"@2@"9*(4<`!"1-0BD``6`8($L@AR)O
  17325. +M`"A"$29*(40`!"1-$WP``0`!(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.
  17326. +MN@``2H%G!'``8`)P`2(`Y8%![`">(#`8`"(`TH'2@"8!Z8.6@20#Z8*4@^^"
  17327. +MVH)2A@R&```']6\`_T)@``$<(&\`.$H09P9P_V```69*AV<&</]@``%<>`!\
  17328. +M`'H`0J\`1'X`*DM@<$JM!TYG/B`O`$0B!^F!)"\`<`:!```'2B8S&`#6@B]#
  17329. +M`$1*AF<*L(-G!G#_8``!'$2"*T('2B`O`"Q2@"M`!U)\`6`F(`4B+P!T*BT'
  17330. +M2MJ!2H1G"K"%9P9P_V```.Y$@2M!!TI"K0=2>`%2A]K\`!"^JP`(;8I*AF<$
  17331. +M2H1F!G#_8```R'P`?@`J2R@O`$1@.G``(@<&@0``!=@0,Q@`2,#I@"!+T<!#
  17332. +MZ`=*+TD`0$J&9PI*J0`,9@0@!&`"(`71K0`0+"D`!%*'6(V^JP`$;<!@('``
  17333. +M<@$G00`()T``!"0O`'1$@DWK!THLPBS`+,`O0`!X*F\`/"XO`"P@!U*`*T``
  17334. +M#"PO`'AG"-"&4H`K0``,<C.P@6,$</]@,-K\!^H@!R!-(F\`,$ZZ```@3=''
  17335. +M2^@``4(02H9G$"`&($TB;P!\3KH``$(U:`!P`$S?;/S>_`!83G4@;P`$+PTJ
  17336. +M2$'L```B36$`]%!*@&<,0>P``")-<`%A`/P,*E].=2\-0>P`LDZZ```J0$J`
  17337. +M9@8J7V```%QP`2E`$\Y*%68>0JP`<D*L`'9"K`>\0JP'Q$'L``!#[`A<$MAF
  17338. +M_&`L($U#[`!R80#S]$J`9QYP.K`59Q`@34/L`')P`&$`^ZI*@&<(0>P`<F$`
  17339. +M_W8J7V``\PYP`2E`$\Y#[`!RD<AA`/.\2H!G"$'L`')A`/]48`#R[B!O``0@
  17340. +M+P`((F\`#)[\`!!(YP,4*DE([P$!`!`@;P`4+U``&$JL$\YF!&$`_T1*K`!V
  17341. +M9PH@+P`8L*P`@FP@?@!'[`!R8!!2A];\`!"^K`!Z;01^`&`R2JL'3F;J8"I^
  17342. +M`4?L`'8L+`!V8`X@+P`8L*L`$&T(4H=8B[Z&;>Y#[`!RT\=^`!XI!=?IAT'L
  17343. +M![S1QR\-+T@`("`00>\`'$/L`')A``#"(&\`("(H``0K00`@Y8%![`A<(F\`
  17344. +M(-'I``A#[``,(X@8`"M(`"A83TS?*,#>_``03G4@;P`$0^P``'``80#_*D'L
  17345. +M```@"$YU(&\`!"`O``@B;P`,2.<!%"X`)DDJ2$JL$])F#G`!*4`3TD'L"B!A
  17346. +M`/XZ+PL@!R!-0^P*(&$``$)83TJ'9P9![`"Z8`1![!(*)T@`*$S?*(!.=2!O
  17347. +M``1#[``L<`!AKD'L`"P@"$YU(&\`!"`O``@B;P`,+V\`$``$GOP`#$CG#S0N
  17348. +M`"9O`"PJ2'P`>@`H$2`$YX`O20`@T\!%Z0@>8$`O2@`D(!6PDFTV(&\`)+"0
  17349. +M9BA*A&8&("@`!&X:YX0B*``$(F\`(`:$```(&K*Q2`!N!'``8`)P`2H`+"@`
  17350. +M!&`&4X11BFRZ(!4B/``!48!.N@``*``@%2(\``%1@$ZZ``#2AY*&+`%@"`:&
  17351. +M``%1@%.$2H9K]&`(!(8``5&`4H0,A@`!48!L\"`&(CP```X03KH``"=```@@
  17352. +M!B(\```.$$ZZ```@`2]!`!QR/$ZZ```G0``$("\`''(\3KH``":!2H5G`E*3
  17353. +M(`18@'('3KH``"=!`!AL!%ZK`!@L/```![)*A&M`(`9R`\"!9@P@!G)D3KH`
  17354. +M`$J!9A(@!G)DY8E.N@``2H%G!'``8`)P`2H`(@#E@47L`)X@,A@`N(!M0%*&
  17355. +MF(!@P%.&(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G!'``8`)P
  17356. +M`2H`Y8!![`">V+`(`$J$:\8$A@``!VPG1@`4)T0`'"`%T(#0A>F`1>P`/M7`
  17357. +M0JL`$&`.(BL`$.6!F+(8`%*K`!`B*P`0Y8&XLA@`;.92A"=$``Q"JP`@)T<`
  17358. +M)$S?+/#>_``,3G4@;P`$+PTJ2"`M`!@B`-*!TH!![`"^T<$@+0`0(@#2@=*`
  17359. +M0^P`T]/!(#P```=LT*T`%"\`+Q4O+0`$+RT`""\M``PO"2\(2&P`^$AL`%A.
  17360. +MN@``3^\`)$'L`%@@""I?3G4@;P`$+PUA`/TX($`J7V"4(&\`!")O``@@+P`,
  17361. +M+P<N`"`1L(=M%"('3KH``-&0(!$B!TZZ```B@6`J2H!J)E.0WY%L("`11(`B
  17362. +M!TZZ```B$)*`4X$@@2`11(`B!TZZ``">@2*'+A].=2!O``0B;P`(2.<!%"9)
  17363. +M*D@N+0`4GJL`%&8L+BT`$)ZK`!!F(BXM``R>JP`,9A@N+0`(GJL`"&8.+BT`
  17364. +M!)ZK``1F!"X5GI,@!TS?*(!.=2!O``0B;P`(("\`#"]O`!``!)[\`'!(YS\T
  17365. +M+@`J;P"8+TD`+$*5+T@`*$/O`%QP"B+84<C__"`O`%QR/K"!;`1*@&H.0>\`
  17366. +M8$/O`%QP/&$`_Q9![P!D0^\`8'`\80#_"$'O`&A#[P!D<!AA`/[Z0>\`<$/O
  17367. +M`&QP#&$`_NQ@3"`O`'!3KP!P!H````=K(@!T`\*"9@IR9$ZZ``!*@68:(#P`
  17368. +M``=LT*\`<')DY8E.N@``2H%G!'``8`)P`2(`Y8%![`">(#`8`-&O`&@@+P!H
  17369. +M;ZXL/```!VS<KP!P(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G
  17370. +M!'``8`)P`20O`&SE@B8`UH/6@.F#0>P`/M'#+#`H`"`O`&BPAF\:1^\`:)V;
  17371. +M4I,,FP````QMGD*O`&Q2KP!P8)0@+P!<0J\`7'H`<@$O00"(+T``)%*%("\`
  17372. +MB-"`+T``B"`O`(AN[B`O`(AJ!'``8`1P`>N@+T``B$AO`#`O!TAO`)`@;P`X
  17373. +M3I!![P`\0^\`:&$`_BQ/[P`,*`!G+B`%4X5*@&H&</]@``$02H5J!E.O`(A@
  17374. +MQ'`!ZZ`L`$J$;P:=KP"(8+3=KP"(8*X@+P!\:P``Q"(O`%"R@&<``+I!^OGB
  17375. +M(F\`++/(9@9![`!R8`1![`H@?``F2"](`)!@``"(("L'3K"O`'QF=GH`)&\`
  17376. +MD&!D("H'3K"O`'QG5"`%Z8`B+P"((&\`D`:````'2M*P"`"2JP=*+T$`C$AO
  17377. +M`#`O!TAO`)0@;P`X3I!![P`\0^\`:&$`_6Q/[P`,2H!F$B`O`%"PKP!\9@@O
  17378. +M;P",`(A@)E*%U/P`$"!O`)"ZJ``(;9)2AM;\`!`@;P"0O*@`"&T`_W!P_V`D
  17379. +M("\`)-&O`(@O+P`H+P=(;P"0(&\`.$Z0<`$J@$_O``P@+P"(3-\L_-[\`'!.
  17380. +M=2!O``0B;P`(("\`#)[\``Q(YP<T+@`J2"])`!@,K0````$`(&\&<`$K0``@
  17381. +M2&\`'"`'($UA`/T>6$\L`$JO`!QF!B`M`"!J!B`&8```QD'Z^*XB;P`8L\AF
  17382. +M!D'L`')@!$'L"B!\`"9(+T@`(&```)8@*P=.L*T`(&8``(1Z`"1O`"!@<"`M
  17383. +M`"`B*@=.LH!G7B`%Z8`B%2!O`"`&@```!TK2L`@`DJL'2BJ!2JT`(%?`1`!(
  17384. +M@$C`*T``($AO`!P@!R!-(F\`'&$`_(Q83TJO`!QF0"`5D*H'2M"K!THJ@$JM
  17385. +M`"!7P$0`2(!(P"M``"!2A=3\`!`@;P`@NJ@`"&V&4H;6_``0(&\`(+RH``AM
  17386. +M`/]B</],WRS@WOP`#$YU(&\`!"\-0_KWVG``*E]@`/[@2JP3SF8$80#W+$YU
  17387. +M``````/X````'0````$``!*X```29@``$-@``!"T```0I```$%0``!`R```/
  17388. +M\@``#H(```X6```,^```#,H```RX```,J@``"O@```E*```(>```!Z0```%L
  17389. +M```!7````18```#F````H````(X```"`````7````%8```!0````3````"L`
  17390. +M```"```5E```%,8``!3````3D@``$XP``!#H```0W```#J(```Z:```.B```
  17391. +M#G0```YF```.8@``#EH```X\```.,@``#@H```WT```-X@``#=0```V\```-
  17392. +MN```#:0```V8```-D```#88```U\```-3```#3X```TZ```-*@``#1P```T(
  17393. +M```,_```#/0```SP```,[```#.@```S@````L````&@```!D````2```````
  17394. +M``/O@P```D!S=')C:'(``````0```3*#```"0'-T<F-A=``````"```!?```
  17395. +M`7"#```"7V]P96X````````!```!CH,```)`<F5A9`````````$```&L@P``
  17396. +M`D!C;&]S90```````0```;2&```"7U]?8W1Y<&4````%```&6@``!3X```1>
  17397. +M```$'````\J#```"7U]#6$0S,P`````<```2G```$HX``!)4```2/@``$4X`
  17398. +M`!$\```1)```$1H``!`@```0$@``#]X```_0```/K```#YH```^,```/@```
  17399. +M#W````\^```/,```"N8```K8```(4@``"#P```@F```("```!^P```<.```'
  17400. +M`(,```)`<W1R;F-P>0````(```R.```,=(,```-`7U]G971E;G8````````!
  17401. +M```,SH,```)?<W!R:6YT9@````$``!#@`````````_$````#`````$]05%,`
  17402. +M!`!````#\@```^H```!(1TU4`"`@(``@("``````!`````@``````````"`@
  17403. +M(``@("``<SIL;V-A;'1I;64`<SIZ;VYE:6YF;P``+P`````?````'````!\`
  17404. +M```>````'P```!X````?````'P```!X````?````'@```!\````?````'0``
  17405. +M`!\````>````'P```!X````?````'P```!X````?````'@```!\```%M```!
  17406. +M;G!O<VEX<G5L97,``%5.25A46@``("`@`%-U;DUO;E1U95=E9%1H=49R:5-A
  17407. +M=$IA;D9E8DUA<D%P<DUA>4IU;DIU;$%U9U-E<$]C=$YO=D1E8P`E+C-S("4N
  17408. +M,W,E,V0@)3`R+C)D.B4P,BXR9#HE,#(N,F0@)60*```````#[`````(````!
  17409. +M````$`````P````````#\@```^L```3V```#\@```^D```&<GOP`#$C7`0-P
  17410. +M_][\``Q.=5%/2-<#`%!/3G5(YS`"(A!**``-9P1P`&`<)`DF`"QL``!.KO_6
  17411. +M(@!2@&8(3KH``'#_8`(@`4S?0`Q.=5%/2.<_-BX`*DDF2"P3+T8`*"](`"Q*
  17412. +M*P`-9P9P`&```(Q**P`,9V8F3=?'>@!@6"1-8`)2BK7+9`9P"K`29O2WRF8$
  17413. +M*`I@!D'J``$H")B-(B\`*"0-)@0L;```3J[_T"P`4H!F"$ZZ``!P_V`^VH:V
  17414. +MAF8V2^H``9Z&<`!.N@``3KH``$J`9B)*AV:D8!PB!B0-)@<L;```3J[_T"H`
  17415. +M4H!F"$ZZ``!P_V`"(`5,WVS\4$].=5E/2.<_`BX`+!`O00`<2B@`#6<$<`!@
  17416. +M4E.!)@$B!B0'+&P``$ZN_[XJ`$ZN_WPH`%*%9P1*A&<.(`1.N@``*4```'#_
  17417. +M8"0B!G0`)@).KO^^+`!2@&<$2H1G#B`$3KH``"E```!P_V`"(`9,WT#\6$].
  17418. +M=9[\`0!(YS\&+@`J2"P5*BT`""`M``1G"B(`+&P``$ZN_Z88+0`-2(1(Q"!-
  17419. +M3KH``$J$9P1P`&!$(@9![P`@)`@L;```=D#EBTZN_F@H`$J'9@HB!DZN_]Q*
  17420. +M@&<:2H1G$G#_NH!G#"(")`5.KO]&2H!G!'``8`9.N@``</],WV#\WOP!`$YU
  17421. +M("\`!$CG(`(B`"QL``!T`$ZN_S1.KO]\="Y&`K""5\%$`4B!2,$@`4S?0`1.
  17422. +M=2`O``0@;P`((F\`#)[\`!!(YS<6+@`F22I(?`!AN$J`9GPB!RQL``!T`4ZN
  17423. +M_E9*@&=L(@=![```)`AV!$ZN_]!9@&92(@<D/```)Q!.KO\T2H!G0B('0>\`
  17424. +M("0(=A!.KO_6<@FP@6\N<)NP+P`@9B9![P`E(@@D"TZN_-`J`$'O`";1P"((
  17425. +M)`U.KOS04H!G!E*%9P)\`2('=`!.KOY6(`9,WVCLWOP`$$YU("\`!"(O``B>
  17426. +M_`(02.<_!BX`</\O0`(H+T$`)"('+&P``'0`=@%.KO^^+T``("('3J[_OBP`
  17427. +M3J[_?"H`+T`"+&8``,(H+P`D(@<D!';_3J[^.+""9@``KKR";```GBH$FH8H
  17428. +M!2`$<@%(02QX``1.KO\Z*D!*@&9J<@)(04ZN_RCBB"H`#(4```(`;1`@!7(!
  17429. +M2$%.KO\Z*D!*@&9&>D#GC4OO`"@P/`'_<@!![P`H$,%1R/_\8"RXA6\$(`5@
  17430. +M`B`$)@!.N@``(@<D#2QL``!.KO_0L(-G"DZN_WPO0`(L8`:8@TJ$;M!![P`H
  17431. +ML<UG#")-(`4L>``$3J[_+BHO`BQF!$*O`B@L+P`@O*\`)&P.(@<D!BQL``!V
  17432. +M_TZN_[XL+P(H9PH@!4ZZ```I0```(`9,WV#\WOP"$$YUGOP!"$CG-Q8N`"9)
  17433. +M*D@L%4HM``UF``$8(`<$@```!`!G(`2````$`&=*4X!G6%.`9UQ3@&=>4X!G
  17434. +M9E.`9VQ@``#N2BT`#&<F(`9![P$D0^\!(&$`_=9*@&<4("\!)#=```(@+P$@
  17435. +M-H!P`&```,IP&6```+XB!BQL``!.KO\H)H!P`&```+(FAG``8```JG``8```
  17436. +MI"`&(A-A`/XV8```F"M3``AP`&```(XJ$TJM``1F#B(5+&P``$ZN_HPK0``$
  17437. +M("T`!&=B)``B!2QL``!.KOY<2H!F4B(&0>\`("0(=D#EBTZN_FA*@&<^(@5.
  17438. +MKO^F(BT`!$ZN_Z8B!DZN_]PB`G0`3J[_1AM\``$`#2J"*T(`!$'O`"`B""QL
  17439. +M``!.KO^X2H!G!"`"8`Y.N@``8`9P%BE```!P_TS?:.S>_`$(3G4@+P`$(B\`
  17440. +M""]O``P`!$CG#P8J+P`<+`$N`'`.3KH``"I`2H!F"G`,*4```'#_8$Y#U2+'
  17441. +M0IDBQD(M``TB!RQL``!.KO\H&T``#$AZ_G1(>OO:2'K[9$AZ^JQ(>OIV2'KZ
  17442. +M:"`%($U#^OI03KH``$_O`!@H`&P&($U.N@``(`1,WV#P3G4@+P`$(B\`""]O
  17443. +M``P`!"]O`!``""]O`!0`#"]O`!@`$$CG#0`H+P`4*B\`$"X`<`!*@68$<$#E
  17444. +MB`!```$O`"`'<O]A`/]&6$]*@&9`<`!*A&8$<$#EB`!```(O`"`%<O]A`/\H
  17445. +M6$]3@&8B<`!*KP`<9@1P0.6(`$```B\`("\`''+_80#_!EA/58!G$$'L``8O
  17446. +M2``03-\`L$[Z``!,WP"P3G4``````_@````"`````0``!EH```)<````````
  17447. +M`^^&```"7T1/4T)A<V4````0```%B```!2(```34```$O@``!(````/D```#
  17448. +MG````O````),```"!````;0```&.```!(@```.(```"F````,(,```)`7W-E
  17449. +M=&5R<@````4```4R```!Z@```/````"T````/H,```1`7V-H96-K7W-I9VYA
  17450. +M;',``````0```,J#```$0%]H86YD;&5?<VEG;F%L<P````$```#.@P``!$!C
  17451. +M;VYV97)T7V]S97)R```````#```#]@```5X```$\A@```E]E<G)N;P``````
  17452. +M!0``!7(```4Z```#^@```6(```%`@P```D!F<F5E`````````@``!<(```&@
  17453. +M@P```T!C:&MA8F]R=`````````$```.4@P```D!M86QL;V,``````0``!6:#
  17454. +M```#0%]A;&QO8U]F9````````0``!;2#```"7U]F86EL```````!```&9@``
  17455. +M``````/Q`````P````!/4%13``0`0````_(```/J````")LP('$``$9A:6QE
  17456. +M9"!T;R!I;FET:6%L:7-E($DO3P`````#\@```^D````G(&\`!")O``A(YR$6
  17457. +M)DDJ2$ZZ```B#20++&P``$ZN_[)*@&<$<`!@;$ZN_WPN`'(T1@&P@692(@).
  17458. +MKO^X2H!G#B(-3J[_LDJ`9P1P`&!&3J[_?"X`<F_2@;"!9BPB`G0`3J[_1DJ`
  17459. +M9QHB"TZN_[A*@&<0(@TD"TZN_[)*@&<$<`!@$DZN_WPN`"`'3KH``"E```!P
  17460. +M_TS?:(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H8```)?1$]3
  17461. +M0F%S90````$````:@P``!$!C;VYV97)T7V]S97)R```````!````C(8```)?
  17462. +M97)R;F\```````$```"0`````````_$````#`````$]05%,`!`!````#\@``
  17463. +M`^D````.(&\`!"`O``@B+P`,GOP`#$C7`0-P`-[\``Q.=2`O``0B+P`(+V\`
  17464. +M#``$44](UP`#<`!03TYU``````/Q`````P````!/4%13``0``````_(```/I
  17465. +M````$"!O``0B;P`(("\`#$CG`10N`"9)*DAF!'``8!P@!R!+(DUR`$J`9PX2
  17466. +M&)(99@13@&;V2(%(P2`!3-\H@$YU``````/Q`````P````!/4%13``0`````
  17467. +M`_(```/I````=2!O``0B;P`(+V\`#``$("\`$"]O`!0`"$CG!S0N`"1O`"`F
  17468. +M22I(+"L`="2O`!Q"J@`2<`$U0``.0FH`$"5\```"```R-4``#"5K`(``-B`K
  17469. +M`'QF$"(K``1O"B5\```(```68`0E0``6)5,`!$'K`(1.N@``)4``(B5``!HE
  17470. +M0``J("L`!%J`9SY5@&=068!G0%6`9F8@#6<<2'@`_TAL```O#4ZZ``!/[P`,
  17471. +M*@!O!B5%`!9@""5\```!```6)7P``*````A@2B5\```0```(8$`E?```0```
  17472. +M"'P`8#1*DV802BL`"&8*)7P``"````A@("5\``"````(8!8@*P`$;P9P0.&(
  17473. +M8`8@/```@``E0``(2H=G`GP`(`9.N@``@:H`"$S?+.!.=2!O``0B;P`(64](
  17474. +MYR,6*DA^`"])`!A"IRQL``!R`B0/3J[_'$_O``0F0$J`9U`B#73^3J[_K"X`
  17475. +M9T0B!R0+3J[_FDJ`9S@B!TZN_RY*@%?&1`9(ADC&2H!G!B(`3J[_IB`'Y8`O
  17476. +M+P`8($`O*``,(D(@!B!-80#^?%!/?`!@#GS_3J[_?$ZZ```I0```2H=G!B('
  17477. +M3J[_IB`+9P@D"W("3J[_%B`&3-]HQ%A/3G4``````_@````!`````0```)X`
  17478. +M```````#[X,```-`7V%M:6=A,F=M=``````!````<H,```-?<F5A9&QI;FL`
  17479. +M```````!````I(,```-`7VUA:V5?;6]D90`````!```!&H8```)?1$]30F%S
  17480. +M90````$```%`@P``!$!C;VYV97)T7V]S97)R```````!```!K(8```)?97)R
  17481. +M;F\```````$```&P`````````_$````#`````$]05%,`!`!````#\@```^L`
  17482. +M``!````#\@```^D````%(&\`!"`O``AR`&`"$,%3@&3Z3G4```/Q`````P``
  17483. +M``!/4%13``0``````_(```/I````#"`O``0B+P`(64\O!RX`+T$`!$ZZ``!(
  17484. +M;P`$2'@(`R\'3KH``$_O``PN'UA/3G4``````^^#```#0&-H:V%B;W)T````
  17485. +M`````0```!2#```"7VEO8W1L```````!````(@````````/Q`````P````!/
  17486. +M4%13``0``````_(```/I````#2`O``0B+P`(64\O!RX`(`%.N@``+T``!$ZZ
  17487. +M``!(;P`$2'@(!"\'3KH``$_O``PN'UA/3G4```/O@P``!4!?;6%K95]P<F]T
  17488. +M96-T:6]N`````````0```!*#```#0&-H:V%B;W)T`````````0```!J#```"
  17489. +M7VEO8W1L```````!````*`````````/Q`````P````!/4%13``0``````_(`
  17490. +M``/I````$"!O``0@+P`((B\`#)[\``Q(UP$#</\I0```WOP`#$YU(&\`!"`O
  17491. +M``@B+P`,GOP`#$C7`0-P_RE```#>_``,3G4```/OA@```E]E<G)N;P``````
  17492. +M`@```#@````8`````````_$````#`````$]05%,`!`!````#\@```^D````-
  17493. +M("\`!%E/+P<N`$ZZ``!(;P`$2'@(`"\'3KH``$_O``Q*@&<$<`!@!"`O``0N
  17494. +M'UA/3G4``````^^#```#0&-H:V%B;W)T`````````0````R#```"7VEO8W1L
  17495. +M```````!````&@````````/Q`````P````!/4%13``0``````_(```/I````
  17496. +M#R`O``1(YP8`3KH``"P`<`!.N@``8`9P`$ZZ```J`"`%3KH``$J`9^X@!DZZ
  17497. +M``!P!"E```!P_TS?`&!.=0```^^#```#0'-I9W-E=&UA<VL``````@```"P`
  17498. +M```*@P``!$!?8VAE8VM?<VEG;F%L<P`````!````$H,```1`7W=A:71?<VEG
  17499. +M;F%L<P```````0```!J#```$0%]H86YD;&5?<VEG;F%L<P````$````BA@``
  17500. +M`E]E<G)N;P```````0```#(````````#\0````,`````3U!44P`$`$````/R
  17501. +M```#Z0```"@@;P`$2.<C%BI(?@!"IRQL``!R`B0/3J[_'$_O``0F0$J`9U(B
  17502. +M#73^3J[_K"X`9T8B!R0+3J[_FDJ`9SHB*P`$7L!$`$B`2,`L`"('3J[_IG("
  17503. +M3J[_%DJ&9Q0B#4ZN_[A*@&<$<`!@,DZZ``!@*G`4*4```&`B3J[_?$ZZ```I
  17504. +M0```2H=G!B('3J[_IB`+9P@D"W("3J[_%G#_3-]HQ$YU```#[X8```)?1$]3
  17505. +M0F%S90````$````0@P```D!?<V5T97)R`````0```&J&```"7V5R<FYO````
  17506. +M```"````@````'*#```$0&-O;G9E<G1?;W-E<G(```````$```!\````````
  17507. +M`_$````#`````$]05%,`!`!````#\@```^D```&7(&\`!"`O``@B;P`,+V\`
  17508. +M$``$+P<N`"E(`!XI0``:<@&P@64>+R\`""\)80``)%!/2H!G#B!L`!Y"$"`'
  17509. +MD*P`&F`"<``N'TYU(&\`!")O``A(YP`4)DDJ2&``!/@0%7(EL`%F``3*4HT0
  17510. +M%4B`2,!*@&<``-9R)9"!9P`$M'(<D(%G``#,4X!G``$F4X!G``&`4X!G``&B
  17511. +M68!G``'L4X!G``($68!G``*:6X!G``,.4X!G``,P4X!G``-84X!G``-Z58!G
  17512. +M``.@4X!G``-&4X!G``0F4X!G``1"7X!G``"B4X!G``#\4X!G``$Z4X!G``%<
  17513. +M4X!G``%T5X!G``#D58!G``'24X!G``'N4X!G``(&4X!G``),4X!G``)H58!G
  17514. +M``)V58!G``*J4X!G``+44X!G``+T5X!G``-F4X!G``-^4X!G``.,8``#Z%.-
  17515. +M8``#XB`K`!AK!G(&L(%O!G``8``#_B(K`!CE@4'L`'8O,!@`80`$QEA/2H!F
  17516. +M``/88``#X"`K`!AK!G(&L(%O!G``8``#SB(K`!CE@4'L`!PO,!@`80`$EEA/
  17517. +M2H!F``.H8``#L"`K`!!K!G(+L(%O!G``8``#GB(K`!#E@4'L`4XO,!@`80`$
  17518. +M9EA/2H!F``-X8``#@"`K`!!K!G(+L(%O!G``8``#;B(K`!#E@4'L`,(O,!@`
  17519. +M80`$-EA/2H!F``-(8``#4$'L`7XB2V$`_CI*@&8``S1@``,\0>P!E")+80#^
  17520. +M)DJ`9@`#(&```RA![`&F(DMA`/X22H!F``,,8``#%$AX`#!(>``"+RL`#&$`
  17521. +M`WI/[P`,2H!F``+N8``"]DAX`"!(>``"+RL`#&$``UQ/[P`,2H!F``+08``"
  17522. +MV$AX`#!(>``"+RL`"&$``SY/[P`,2H!F``*R8``"NB`K``AR#$ZZ``!P#$J!
  17523. +M9P(@`4AX`#!(>``"+P!A``,03^\`#$J`9@`"A&```HP@*P`<4H!(>``P2'@`
  17524. +M`R\`80`"[D_O``Q*@&8``F)@``)J2'@`($AX``(O*P`(80`"T$_O``Q*@&8`
  17525. +M`D1@``),("L`"'(,3KH``'`,2H%G`B`!2'@`($AX``(O`&$``J)/[P`,2H!F
  17526. +M``(68``"'DAX`#!(>``"+RL`!&$``H1/[P`,2H!F``'X8``"`"`K`!!2@$AX
  17527. +M`#!(>``"+P!A``)B3^\`#$J`9@`!UF```=Y(;`&P80`"L%A/2H!F``'"8``!
  17528. +MR@RK````#``(;09![`&R8`1![`&V+PAA``**6$]*@&8``9Q@``&D0>P!NB)+
  17529. +M80#\CDJ`9@`!B&```9!![`'`(DMA`/QZ2H!F``%T8``!?$AX`#!(>``"+Q-A
  17530. +M``'D3^\`#$J`9@`!6&```6`O"V$``6183TJ`9@`!1F```4Y![`',(DMA`/PX
  17531. +M2H!F``$R8``!.DAL`=9A``(,6$]*@&8``1Y@``$F("L`'%Z`D*L`&'('3KH`
  17532. +M`$AX`#!(>``"+P!A``%^3^\`#$J`9@``\F```/H@*P`89P13@&`"<`8B*P`<
  17533. +M7H&2@"`!<@=.N@``2'@`,$AX``(O`&$``49/[P`,2H!F``"Z8```PDAX`#!(
  17534. +M>``!+RL`&&$``2A/[P`,2H!F``"<8```I$'L`=@B2V$`^XY*@&8``(A@``"0
  17535. +M(#P```=LT*L`%')D3KH``$AX`#!(>``"+P%A``#H3^\`#$J`9EQ@9B`\```'
  17536. +M;-"K`!1(>``P2'@`!"\`80``QD_O``Q*@&8Z8$0@*P`H9PPO`&$``1183TJ`
  17537. +M9B9P`&`N2JP`&E?`1`!(@$C`4ZP`&DJ`9P1P`&`6(&P`'A#5*4@`'E*-2A5F
  17538. +M`/L&("P`&DS?*`!.=2!O``2>_``L2.<!$$/O``AP"B+84<C__$'O``A.N@``
  17539. +M+@!'[``-8!H@!W(*3KH``'`PTH`6@5.+(`=R"DZZ```N`$J';PA![```M\AB
  17540. +MVDAK``%A``"`6$],WPB`WOP`+$YU("\`!"(O``@O;P`,``1(YP<$&B\`%RP!
  17541. +M+@!+[``78!P@!W(*3KH``'`PTH`:@5.-(`=R"DZZ```N`%.&2H=O#D'L``^[
  17542. +MR&+88`0:A5.-0>P`#[O(8P@@!E.&2H!N[$AM``%A```.6$],WR#@3G4@;P`$
  17543. +M+PTJ2"`L`!IG&!(=(&P`'A"!9@1P`6`*4JP`'E.L`!I@XBI?3G4```/X````
  17544. +M#P````$```2\```$)@``!!(```/0```#O````Z8```.@```#@@```C@```(D
  17545. +M```"$````?@```'(```!F````6@````2`````@``!E0```90```&1```!CP`
  17546. +M``84```&!@``!>````6J```%A@``!5H```5.```%2```!3P```4P````/@``
  17547. +M`#8````<````&`````````/O@P```E]?0UA$,S,`````"0``!?H```7J```%
  17548. +MH```!9````3<```$?@``!$8```,:```"K(,```)`;6MT:6UE``````$```6`
  17549. +M`````````_$````#`````$]05%,`!`!````#\@```^H```!Y4W5N`$UO;@!4
  17550. +M=64`5V5D`%1H=0!&<FD`4V%T```````````$````"`````P````0````%```
  17551. +M`!A3=6YD87D``$UO;F1A>0``5'5E<V1A>0!7961N97-D87D`5&AU<G-D87D`
  17552. +M`$9R:61A>0``4V%T=7)D87D``````#@```!`````2````%````!:````9```
  17553. +M`&Q*86X`1F5B`$UA<@!!<'(`36%Y`$IU;@!*=6P`075G`%-E<`!/8W0`3F]V
  17554. +M`$1E8P````"2````E@```)H```">````H@```*8```"J````K@```+(```"V
  17555. +M````N@```+Y*86YU87)Y`$9E8G)U87)Y``!-87)C:`!!<')I;`!-87D`2G5N
  17556. +M90``2G5L>0``075G=7-T``!397!T96UB97(`3V-T;V)E<@!.;W9E;6)E<@``
  17557. +M1&5C96UB97(``````/(```#Z```!!````0H```$0```!%````1H```$@```!
  17558. +M*````3(```$Z```!1"5A("5B("5E("5(.B5-.B53("59```E;2\E9"\E>2`E
  17559. +M2#HE33HE4P`E;2\E9"\E>0``"@!030``04T``"5(.B5-`"5).B5-.B53("5P
  17560. +M`"5(.B5-.B53```)`"5M+R5D+R5Y`````````^P````F`````0```7H```%V
  17561. +M```!<@```6X```%J```!9@```6(```%>```!6@```58```%2```!3@```.X`
  17562. +M``#J````Y@```.(```#>````V@```-8```#2````S@```,H```#&````P@``
  17563. +M`(X```"*````A@```((```!^````>@```'8````T````,````"P````H````
  17564. +M)````"`````<`````````_(```/K````"0```_(```/I````%B!O``0@+P`(
  17565. +M2.<G`BX`(@@L;```)#P```/M3J[_XBP`3KH``$J&9QP@!B('3KH``"H`(@9.
  17566. +MKO_<2H!F!$J%9P0@!6`.3J[_?$ZZ```I0```</],WT#D3G4```/OA@```E]$
  17567. +M3U-"87-E`````0```!*#```#0&-H:V%B;W)T`````````0```"*#```$0%]D
  17568. +M;U]T<G5N8V%T90````````$````N@P``!$!C;VYV97)T7V]S97)R```````!
  17569. +M````2H8```)?97)R;F\```````$```!.`````````_$````#`````$]05%,`
  17570. +M!`!````#\@```^D```#5(&\`!")O``@@+P`,(B\`$"]O`!0`!"]O`!@`""]O
  17571. +M`!P`#)[\`#!(YR\V+B\`6"](`"PJ`"@!?$#ECB]``"0O00`H+TD`,'!`Y8A.
  17572. +MN@``*D`O0`!$(`52@&82+&P``$ZN_\HO0`!`0J\`4&`F2&\`0$AX"`$O!4ZZ
  17573. +M``!/[P`,4H!F!$*O`$!P`2]``%`@!4ZZ```@!%*`9A(L;```3J[_Q"]``#Q"
  17574. +MKP!,8$:ZA&8,+V\`0``\0J\`3&`V2&\`/$AX"`$O!$ZZ``!/[P`,4H!F!G``
  17575. +M+T``/"(O`#RRKP!`5L!$`$B`2,`O0`!,(`1.N@``</^^@&80(&P``"]H`.``
  17576. +M.$*O`$A@4'#^OH!F#"]O`#P`.$*O`$A@/DAO`#A(>`@!+P=.N@``3^\`#%*`
  17577. +M9@9P`"]``#@@+P`X(B\`/+*`9PJPKP!`9P1P`6`"<``O0`!((`=.N@``2J\`
  17578. +M0&<``61*KP`\9P`!7$JO`#AF!E*'9@`!4"`-9P`!1"9->``O;P`P`#1@``"L
  17579. +M2H1F!B!O`"Q@`B!5)$AZ`RI(8!I2A1`5<BJP`6<,<B*P`6<&<@JP`68"4H52
  17580. +MC4H59N(J;P!$($W1QB)+T\5-Z0`!O<AE)"`&T(;0A2P`($U.N@``*D!*@&<`
  17581. +M`-H@"Y"O`$0F3=?`+TT`1"!+$+P`(%2+$7P`(@`!*DI@(!`5<B*P`6<&<BJP
  17582. +M`68&%OP`*F`*<@JP`68$%OP`*Q;=2A5FW!;\`")2A%BO`#0J;P`T2I5F`/].
  17583. +M0A,J;P!<(`UG$"(-+&P``'3^3J[_K"@`8`)X`$J$9@0@#68\*F\`1"\O`&`O
  17584. +M!"\O`%`O+P!$+R\`7"\O`%`@+P!8(B\`:"!-3KH``$_O`!@J`%*`9QH@34ZZ
  17585. +M```@!6!X+&P``$ZN_WQ.N@``*4```$J$9Q(B!"QL``!.KO^F8`9P#"E````@
  17586. +M+P!`9Q!*KP!09PHB`"QL``!.KO_<("\`/&<02J\`3&<*(@`L;```3J[_W"`O
  17587. +M`#AG$$JO`$AG"B(`+&P``$ZN_]PJ;P!$(`UG!B!-3KH``'#_3-]L]-[\`#!.
  17588. +M=2!O``0B;P`(("\`#"(O`!`O;P`4``0O;P`8``@O!2HO``PO!2\O``Q(>/__
  17589. +M80#\V$_O``PJ'TYU```#[X,```)`;6%L;&]C``````$```!,A@```E]$3U-"
  17590. +M87-E````"````OP```+F```"T````K(```*<```"2````)H```!<@P```E]I
  17591. +M;V-T;````````P```20```#&````>(,```1`7W!S975D;U]C;&]S90``````
  17592. +M`P```50```#N````D(8```%?7W5S`````0```/B#```"0')E86QL;V,````!
  17593. +M```!V(,```1`7W-T87)T7W!R;V-E<W,``````0```H2#```"0&9R964`````
  17594. +M```"```##@```I2#```$0&-O;G9E<G1?;W-E<G(```````$```*DA@```E]E
  17595. +M<G)N;P```````@```KX```*H`````````_$````#`````$]05%,`!`!````#
  17596. +M\@```^D````"<`%.=7`!3G4```/Q`````P````!/4%13``0``````_(```/I
  17597. +M````#B`O``0O!RX`3KH``"`'(&P``'(`3KH``&`,("P``$ZZ``!.N@``(&P`
  17598. +M`$ZZ``!*@&?H<``N'TYU```#[X,```-`8VAK86)O<G0````````!````"H8`
  17599. +M``-?7V]D9%]T:6UE<@`````"````*````!"#```$0%]T:6UE<E]S=&%R=```
  17600. +M``````$````6A@```U]?;V1D7W-I9P````````$````<@P``!$!?=V%I=%]S
  17601. +M:6=N86QS```````!````((,```1`7VAA;F1L95]S:6=N86QS`````0```"2#
  17602. +M```$0%]T:6UE<E]E>'!I<F5D``````$````L`````````_$````#`````$]0
  17603. +M5%,`!`!````#\@```^D````/(&\`!"`O``A(YP$$+@`J2$ZZ```O!TAX`P$O
  17604. +M#4ZZ``!/[P`,3-\@@$YU(&\`!"`O``A(YP$$3-\@@&#,```#[X,```-`8VAK
  17605. +M86)O<G0````````!````$H,```)?;W!E;@````````$````>`````````_$`
  17606. +M```#`````$]05%,`!``````#\@```^D````C("\`!"!O``@B+P`,64](YP,T
  17607. +M+`$N`"I(3KH``"`'3KH``"9`2H!G1`@K``$``V<V""L``P`#9Q8@:P`8+T@`
  17608. +M%"!K``1P`'("(F\`%$Z1(&L`%"](`!0@!B!K``0B321O`!1.DF`(<`TI0```
  17609. +M</],WRS`6$].=2`O``0@;P`((B\`#$CG`P1,WR#`8(````/O@P```T!C:&MA
  17610. +M8F]R=`````````$````:@P```T!?9FEN9%]F9`````````$````@A@```E]E
  17611. +M<G)N;P```````0```&H````````#\0````,`````3U!44P`$`$````/R```#
  17612. +MZ0````P@;P`$44\O#2I(0>\`!$ZZ``!*@&H$</]@#B`-9P8@+P`$*H`@+P`$
  17613. +M*E]03TYU``````/O@P```T!?9V5T=&EM90````````$````0`````````_$`
  17614. +M```#`````$]05%,`!``````#\@```^D````=(&\`!)[\`$!(YSL6*DA.N@``
  17615. +M(`UG4DH59TXB#4'O`"`D""QL``!V0'@`3J[\=BX`;39.KO]\+`!2@$ZZ```F
  17616. +M0$J`9R2^AF<4)@92@R(-)`M.KOQV2H!O$"`"8`X@0B)+$MAF_"`+8`)P`$S?
  17617. +M:-S>_`!`3G4```/O@P```T!C:&MA8F]R=`````````$````0A@```E]$3U-"
  17618. +M87-E`````0```"2#```"0&UA;&QO8P`````!````/`````````/Q`````P``
  17619. +M``!/4%13``0`0````_(```/I````$R!O``0B;P`(2.<S$B9)(@@L;```=/Y.
  17620. +MKO^L+@!.N@``2H=G&B(+)`=V`$ZN_D0L`"("3J[_IDJ&9P0@`V`&3KH``'#_
  17621. +M3-](S$YU``````/OA@```E]$3U-"87-E`````0```!*#```#0&-H:V%B;W)T
  17622. +M`````````0```!Z#```"0%]S971E<G(````!````0`````````/Q`````P``
  17623. +M``!/4%13``0`0````_(```/I````)"!O``2>_``,2.<!%"I(2AAF_%.(D<T@
  17624. +M""9-U\!=BWYA3KH``"\L``!(;```2&\`%TZZ``!/[P`,0>\`#R)(2AEF_%.)
  17625. +MD\@@"7(%L(%O"$'O``K1P&`$0>\`#R\(2&P`!"\+3KH``$_O``P6AR!-<`!.
  17626. +MN@``2H!F"E('<'J^`&_J0A4@#4S?*(#>_``,3G4``````_@````"`````0``
  17627. +M`%X````J`````````^^#```#0&-H:V%B;W)T`````````0```"*&```!7U]U
  17628. +M<P````$````F@P```U]?<W!R:6YT9@````````(```!D````,H,```-`7U]A
  17629. +M8V-E<W,````````!````<@````````/Q`````P````!/4%13``0`0````_(`
  17630. +M``/J`````B5L>`!A)7,````#\@```^D````&(&\`!"\-*DA.N@``($UP0.F(
  17631. +M*E].^@`````#[X,```-`8VAK86)O<G0````````!````"H,```)`9V5T8W=D
  17632. +M``````$````6`````````_$````#`````$]05%,`!``````#\@```^D````/
  17633. +M(&\`!"`O``A(YR$&+@`J2$ZZ```@!TZZ```D`"(-+&P``$ZN_T9*@&<$<`!@
  17634. +M!DZZ``!P_TS?8(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H,`
  17635. +M``5`7VUA:V5?<')O=&5C=&EO;@````````$````8A@```E]$3U-"87-E````
  17636. +M`0```""#```"0%]S971E<G(````!````,`````````/Q`````P````!/4%13
  17637. +M``0`0````_(```/I````'"`O``0B+P`(+V\`#``$44](YP<`*B\`&"P!+@!.
  17638. +MN@``(`=.N@``2H!G&B)`(&D`&"](`!`@!B(%(&D`!")O`!!.D6`"</],WP#@
  17639. +M4$].=2`O``0B+P`(+V\`#``$2.<'`"HO`!`O10`03-\`X&"@``````/O@P``
  17640. +M`T!C:&MA8F]R=`````````$````>@P```T!?9FEN9%]F9`````````$````D
  17641. +M`````````_$````#`````$]05%,`!``````#\@```^D````<("\`!"!O``@B
  17642. +M+P`,64](YP,T+`$N`"I(3KH``"`'3KH``"9`2H!G)@@K`````V<8(&L`$"](
  17643. +M`!0@!B!K``0B321O`!1.DF`(<`TI0```</],WRS`6$].=2`O``0@;P`((B\`
  17644. +M#$CG`P1,WR#`8)X``````^^#```#0&-H:V%B;W)T`````````0```!J#```#
  17645. +M0%]F:6YD7V9D`````````0```""&```"7V5R<FYO```````!````3```````
  17646. +M``/Q`````P````!/4%13``0`0````_(```/I````@2`O``0@;P`((F\`#"]O
  17647. +M`!``!"]O`!0`")[\`"Q(YS\V)DDJ2"]``$`D;P!<(`IG#DJ29@I*J@`$9@1P
  17648. +M`6`"<`!R`"]``#0D#6<"(A5T`"]!`"PF"V<")!-Z`'X!+T(`,&!2*"\`+,B'
  17649. +M+"\`,,R'3KH``$J$9@1*AF<V(`5.N@``)$!*@&8&</]@``%N2H1G"`@J````
  17650. +M`V<,2H9G%`@J``$``V8,<`TI0```</]@``%*4H7>A[JO`$!MJ"1O`%P@"F<0
  17651. +M(!(B*@`$(&P``$ZZ``!@""!L``!.N@``>@`@!4*O`%!Z`'X!+T``*&`Z*"\`
  17652. +M+,B'+"\`,,R'2H1F!$J&9R(@!4ZZ```B0"!I``@O2``\(`0B!B!I``0B;P`\
  17653. +M3I&!KP!04H7>A[JO`$!MP"@O`%`@!%*`9P9*KP`T9PAP`$ZZ``!@"B`L``"`
  17654. +MA$ZZ```O0`!,?`!X`2XO`#`J+P`H8'`@+P`LP(0O0`!((@?"A"]!`$1*@&8$
  17655. +M2H%G4B`&3KH``")`(&D`#$AO`$0O2``\(&D`!$/O`$PL;P`\3I983R`O`$AF
  17656. +M"B(-9P8B!$:!PY4@+P!$9@HB"V<&(@1&@<.32J\`2&8&2J\`1&<"4H52AMB$
  17657. +MO*\`0&V*("\`3$ZZ``!*A684(&P``$ZZ``!*@&8(2J\`-&<`_N@@!4S?;/S>
  17658. +M_``L3G4``````^^#```#0&-H:V%B;W)T`````````0```'"#```#0%]F:6YD
  17659. +M7V9D`````````P```7X```$$````?H8```)?97)R;F\```````$```"HA@``
  17660. +M`U]?;V1D7W1I;65R``````,```'D````U````,J#```$0%]T:6UE<E]S=&%R
  17661. +M=`````````$```#.@P``!$!?=&EM97)?86)O<G0````````!````V(,```1`
  17662. +M7V-H96-K7W-I9VYA;',``````0```4"&```#7U]O9&1?<VEG`````````0``
  17663. +M`4:#```$0%]W86ET7W-I9VYA;',```````$```%,@P``!$!?:&%N9&QE7W-I
  17664. +M9VYA;',````!```!W(,```1`7W1I;65R7V5X<&ER960``````0```>@`````
  17665. +M```#\0````,`````3U!44P`$`$````/R```#Z0```"!13TCG(R0N+P`@3KH`
  17666. +M`"PO`"@@!TZZ```J0$J`9U@@+P`D5X!G#%.`9PYP%BE```!@1'`,P)5@0"`5
  17667. +M=`S,@B0``D+_\X2&*H)R!,*"=`3`@K"!9QXO00`8(&T`("](`!0@;0`$0^\`
  17668. +M&'``)&\`%$Z28`9P`&`"</],WR3$4$].=0```^^#```#0&-H:V%B;W)T````
  17669. +M`````0````R#```#0%]F:6YD7V9D`````````0```!:&```"7V5R<FYO````
  17670. +M```!````+@````````/Q`````P````!/4%13``0`0````_(```/I````````
  17671. +M`_$````#`````$]05%,`!``````#\@```^H```#>86UI9V$@<W!E8VEF:6,@
  17672. +M97)R;W(```````!5;FMN;W=N(&5R<F]R`&YO="!O=VYE<@!N;R!S=6-H(&9I
  17673. +M;&4@;W(@9&ER96-T;W)Y`&YO('-U8V@@<')O8V5S<P!I;G1E<G)U<'1E9"!S
  17674. +M>7-T96T@8V%L;`!I+V\@97)R;W(`;F\@<W5C:"!D979I8V4@;W(@861D<F5S
  17675. +M<P!A<F=U;65N="!L:7-T('1O;R!L;VYG``!E>&5C(&9O<FUA="!E<G)O<@!B
  17676. +M860@9FEL92!N=6UB97(`;F\@8VAI;&0@<')O8V5S<P``;F\@;6]R92!P<F]C
  17677. +M97-S97,`;F]T(&5N;W5G:"!M96UO<GD`<&5R;6ES<VEO;B!D96YI960`8F%D
  17678. +M(&%D9')E<W,`8FQO8VL@9&5V:6-E(')E<75I<F5D`&UO=6YT(&1E=FEC97,@
  17679. +M8G5S>0``9FEL92!E>&ES=',`8W)O<W,M9&5V:6-E(&QI;FL`;F\@<W5C:"!D
  17680. +M979I8V4``&YO="!A(&1I<F5C=&]R>0!I<R!A(&1I<F5C=&]R>0``:6YV86QI
  17681. +M9"!A<F=U;65N=```9FEL92!T86)L92!O=F5R9FQO=P!T;V\@;6%N>2!O<&5N
  17682. +M(&9I;&5S`&YO="!A('1Y<&5W<FET97(``'1E>'0@9FEL92!B=7-Y``!F:6QE
  17683. +M('1O;R!B:6<``&YO('-P86-E(&QE9G0@;VX@9&5V:6-E`&EL;&5G86P@<V5E
  17684. +M:P``<F5A9"UO;FQY(&9I;&4@<WES=&5M`'1O;R!M86YY(&QI;FMS``!B<F]K
  17685. +M96X@<&EP90!M871H(&%R9W5M96YT`')E<W5L="!T;V\@;&%R9V4``$DO3R!S
  17686. +M=')E86T@96UP='D``&9I;&4@;F%M92!T;V\@;&]N9P``9&ER96-T;W)Y(&YO
  17687. +M="!E;7!T>0!T;V\@;6%N>2!S;V9T(&QI;FMS("AL;V]P/RD`````&@```"@`
  17688. +M```R````3````%P```!T````?@```)@```"P````P@```-(```#D````]@``
  17689. +M`0@```$:```!)@```3P```%0```!7````6X```%^```!C@```9X```&P```!
  17690. +MQ````=@```'J```!^@```@@```(@```"+@```D0```)4```"8````FX```*`
  17691. +M```"D@```J8```*Z````)@`````#[````"@````!```#;@```VH```-F```#
  17692. +M8@```UX```-:```#5@```U(```-.```#2@```T8```-"```#/@```SH```,V
  17693. +M```#,@```RX```,J```#)@```R(```,>```#&@```Q8```,2```##@```PH`
  17694. +M``,&```#`@```OX```+Z```"]@```O(```+N```"Z@```N8```+B```"W@``
  17695. +M`MH```+6````%@````````/R```#Z0```$4@+P`$*4```$J`9P``AG)GD(%G
  17696. +M``""58!G``"`<@F0@6=\4X!G>%.`9W13@&=P4X!G;%.`9VA3@&=H4X!G:')1
  17697. +MD(%G9E.`9V93@&=F4X!G9E.`9V93@&=F58!G9E.`9V93@&=F4X!G9E6`9V93
  17698. +M@&=F4X!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V9@:'``8&9P#&!B
  17699. +M<`M@7G`68%IP!V!6<`A@4G`08$YP$6!*<`)@1G`"8$)P%F`^<`=@.G`68#9P
  17700. +M)&`R<!9@+G`68"IP'F`F<!)@(G`E8!YP)F`:<!-@%G`68!)P'&`.<`U@"G`-
  17701. +M8`9P#6`"</].=2\.+&P``$ZN_WQA`/[Z*4```"Q?3G4```/X`````0````$`
  17702. +M``$.`````````^^&```"7U]/4T524@`````!````!H8```)?1$]30F%S90``
  17703. +M``$```$"`````````_$````#`````$]05%,`!`!````#\@```^L````!```#
  17704. +M\@```^D````%3KH``$ZZ``!.N@``<@9.^@````````/O@P```T!C:&MA8F]R
  17705. +M=`````````$````"@P```T!?8VQO<V5?86QL``````$````&@P```D!G971P
  17706. +M:60``````0````J#```"0&MI;&P````````!````$`````````/Q`````P``
  17707. +M``!/4%13``0``````_(```/I````62!O``0@+P`(64](YP$6+@`O2``0(&\`
  17708. +M$"I08&1P#;`M``AF6B`M`*QG!N6`($!@`I'()D@@+0"<L(=G-"`M`*"PAV<L
  17709. +M("T`X+"'9R0@"V<N("L`'+"'9Q@@*P`@L(=G$"`K`#BPAV<(("L`,+"'9@XB
  17710. +M37!@[X@L>``$3J[^O"I52I5FF$S?:(!83TYU("\`!"(O``A(YP$"+@`@`5.`
  17711. +M9PQ3@&<(4X!G!%V`9BPL>``$3J[_?"!L``#0_`&6(`=A`/]((&P``-#\`:0@
  17712. +M!V$`_SI.KO]V<`!@"'`6*4```'#_3-]`@$YU("\`!"(O``A(YP8$+`$J`$ZZ
  17713. +M``!*A6H"1(6ZK```9@Y*AF<&(`9.N@``<`!@2"`%3KH``"I`2H!G!DJM`!1G
  17714. +M"G`#*4```'#_8"P@!F<H(BT`$,%!80#_6"(`<`F\@&84<@$K00`4*T``&'`4
  17715. +M3KH``'``8`(@`4S?(&!.=0`````#[X8```)?4WES0F%S90````(```#$````
  17716. +MMH8```)?97)R;F\```````(```$J````W(,```-`8VAK86)O<G0````````!
  17717. +M````^(8```-?7V]U<E]P:60````````!```!`H,```1`7W-I9U]D:7-P871C
  17718. +M:````````@```50```$.@P```T!?9FEN9%]P:60```````$```$8````````
  17719. +M`_$````#`````$]05%,`!`!````#\@```^D```!#(&\`!$CG``8J2")-+'@`
  17720. +M!$ZN_P0@34S?8`!.^@``("\`!$CG`00N`"IL``A@#B`M``RPAV8$(`U@""I5
  17721. +M2I5F[G``3-\@@$YU2.<@`D'L``A.N@``("P``"(L```D`+."`H(`?___*4(`
  17722. +M!%*"*4(``"\!+P!(;```2&P`%$ZZ``!/[P`0+'@`!$ZN_68I0``X9Q!![``4
  17723. +M<`!.N@``*4``-&8*2&P`#DZZ``!83TS?0`1.=4CG``8@+``X9PH@0"QX``1.
  17724. +MKOU@2JP`-&<X+'@`!$ZN_WQ@#")-<!PL>``$3J[_+B!L`#0L>``$3J[^C"I`
  17725. +M2H!FXB!L`#1.N@``+'@`!$ZN_W9,WV``3G4``````_@````"`````0```*0`
  17726. +M``!V````#`````(```#V````Y````,@```"X````G@```)0```".````>@``
  17727. +M`&X```!H````3@```"H````````#[X,```)`9G)E90````````$````<@P``
  17728. +M`D!.97=,:7-T`````0```%*&```!7U]U<P````$```!6A@``!%]?<W1A<G1U
  17729. +M<%]T:6UE```````!````6H,```-?7W-P<FEN=&8````````!````?H,```-`
  17730. +M0W)E871E4&]R=``````!````FH,```)?7V9A:6P```````$```"H@P```T!$
  17731. +M96QE=&50;W)T``````$```#Z`````````_$````#`````$]05%,`!`!````#
  17732. +M\@```^H````&9&]O<BXE;'@N)6QX``!.;R!M96UO<GD````#\@```^L````/
  17733. +M```#\@```^D````O(&\`!"`O``@B+P`,(F\`$"]O`!0`!"]O`!@`"%E/2.</
  17734. +M-B@O`"PJ+P`H+`$N`"I)+T@`("QX``1.KOUF)D!*@&<P($L@!$ZN_7(D0$J`
  17735. +M9R(@#6<()4T`*"5%`"0@;P`@(`<B2B(&3J[^1$H`9@0@"F`6(`IG!B!*3J[]
  17736. +M;"`+9P8@2TZZ``!P`$S?;/!83TYU(&\`!$CG``8J2"`-9Q@B32QX``1.KOX^
  17737. +M(&T`#DZZ```@34ZN_6Q,WV``3G4```/O@P```T!$96QE=&50;W)T``````(`
  17738. +M``"N````A`````````/Q`````P````!/4%13``0``````_(```/I````%"!O
  17739. +M``0@+P`(2.<A!BX`*DA.N@``(@TL;```3J[_B$J`9R(B`$ZN_Z8@!TZZ```@
  17740. +M!TZZ```D`"(-3J[_1DJ`9P1P`&`&3KH``'#_3-]@A$YU```#[X,```-`8VAK
  17741. +M86)O<G0````````!````$H8```)?1$]30F%S90````$````8@P``!4!?;6%K
  17742. +M95]P<F]T96-T:6]N`````````@```#(````L@P```D!?<V5T97)R`````0``
  17743. +M`$8````````#\0````,`````3U!44P`$`$````/R```#^P``")D1/@!?<V5T
  17744. +M:FUP`'1E>'0`0%]L;VYG:FUP`$!?<V5T:FUP`%]?;&]N9VIM<`!?7W-E=&IM
  17745. +M<`!S<')I;G1F`%],5D]287=$;T9M=`!?06)S17AE8T)A<V4`7U]S<')I;G1F
  17746. +M`'1M<&YA;2YC`%]M:W1E;7``0'1M<&YA;0!?=&UP;F%M`%]?34521T5$`'!O
  17747. +M<&5N+F,`7W=A:71P:60`0&9C;&]S90!`9G)E90!`7W-T87)T7W!R;V-E<W,`
  17748. +M0%]S971E<G(`7V5R<FYO`%]$3U-"87-E`$!F;W!E;@!?7V9I9F]?8F%S90!?
  17749. +M7V9I9F]?;V9F<V5T`$!M86QL;V,`0'!C;&]S90!?<&-L;W-E`$!P;W!E;@!?
  17750. +M<&]P96X`<W1A<G0N8P!`8V]N=F5R=%]O<V5R<@!?7W!R;V-E<W-E<P!?7W-T
  17751. +M86-K7W-I>F4`7U]N97AT7W!I9`!?7V1O;W)?;F%M90!?7W-T87)T=7!?<&]R
  17752. +M=`!?3&EN:V5R1$(`7U]S=&%R=%]P<F]C97-S`%]?8VAI;&1?9&]O<E]N86UE
  17753. +M`%]?8VAI;&1?8V]M;6%N9%]L96X`7U]C:&EL9%]C;VUM86YD`%]?8VAI;&1?
  17754. +M97AI=`!?7V-H:6QD7V5N=')Y`&=E='!I9"YC`%]?;W5R7W!I9`!`8VAK86)O
  17755. +M<G0`0&=E='!I9`!?9V5T<&ED`'-I9VYA;"YC`%]?<VEG7VAA;F1L97)S`$!S
  17756. +M:6=N86P`7W-I9VYA;`!`<VEG=F5C`%]S:6=V96,`<VEG<V5T;6%S:RYC`$!?
  17757. +M<VEG7V1I<W!A=&-H`%]?<VEG7W!E;F1I;F<`7U]S:6=?;6%S:P!`<VEG8FQO
  17758. +M8VL`7W-I9V)L;V-K`$!S:6=S971M87-K`%]S:6=S971M87-K`'-T870N8P!?
  17759. +M<F5A9&QI;FL`0%]F:6)S=&%T`$!?;&9I8G-T870`7U]T96UP7V9N86UE`%]L
  17760. +M87-T7V5N=')Y`$!?9V5T7V-D`%]L87-T7V1I<@!`;'-T870`7VQS=&%T`$!S
  17761. +M=&%T`%]S=&%T`&1I<BYC`$!S965K9&ER`%]S965K9&ER`$!T96QL9&ER`%]T
  17762. +M96QL9&ER`$!R96%D9&ER`%]R96%D9&ER`$!C;&]S961I<@!?8VQO<V5D:7(`
  17763. +M0&]P96YD:7(`7V]P96YD:7(`9&ER7V1A=&$N8P!?7V=E=%]C9`!A8V-E<W,N
  17764. +M8P!`86-C97-S`%]A8V-E<W,`0%]?86-C97-S`%]?7V%C8V5S<P!F<W1A="YC
  17765. +M`%]I;V-T;`!`9G-T870`7V9S=&%T`'-Y;6QI;FLN8P!`<WEM;&EN:P!?<WEM
  17766. +M;&EN:P!M97-S86=E+F,`0&5X:70`7U]0<F]G<F%M3F%M90!?7U="96YC:$US
  17767. +M9P!?7W5S`%]?9F%I;`!?7VUE<W-A9V4`86QL;V-D;W,N8P!?06QL;V-$;W-/
  17768. +M8FIE8W1486=S`'-E=&IM<"YC`$!L;VYG:FUP`%]L;VYG:FUP`$!S971J;7``
  17769. +M9V5T:&]S=&YA;64N8P!?<W1R;F-P>0!?7W-Y<W1E;5]N86UE`$!G971H;W-T
  17770. +M;F%M90!?9V5T:&]S=&YA;64`<&5R<F]R+F,`7U]/4T524@!?<WES7V5R<FQI
  17771. +M<W0`7W-Y<U]N97)R`$!W<FET90!`<&5R<F]R`%]P97)R;W(`<VEG;&ES="YC
  17772. +M`%]S>7-?<VEG;&ES=`!W86ET-"YC`$!?:&%N9&QE7W-I9VYA;',`0%]W86ET
  17773. +M7W-I9VYA;',`0%]F<F5E7V5N=')Y`$!W86ET<&ED`$!W86ET`%]W86ET`$!W
  17774. +M86ET,P!?=V%I=#,`0'=A:70T`%]W86ET-`!P<V5U9&]?8RYC`$!?9G)E95]F
  17775. +M9`!`7V9I;F1?9F0`0%]P<V5U9&]?8VQO<V4`7U]P<V5U9&]?8VQO<V4`<FEN
  17776. +M9&5X+F,`0'-T<G)C:'(`0')I;F1E>`!?<FEN9&5X`&EN9&5X+F,`0'-T<F-H
  17777. +M<@!`:6YD97@`7VEN9&5X`'1I;65R<RYC`$!?9&5V:6-E7V-L;W-E`$!?9&5V
  17778. +M:6-E7V]P96X`0%]T:6UE<E]E>'!I<F5D`%]?=&EM97)?97AP:7)E9`!`7W1I
  17779. +M;65R7W-T87)T`%]?=&EM97)?<W1A<G0`0%]T:6UE<E]S:6<`7U]T:6UE<E]S
  17780. +M:6<`0%]T:6UE<E]A8F]R=`!?7W1I;65R7V%B;W)T`$!?9G)E95]T:6UE<@!?
  17781. +M7V9R965?=&EM97(`0%]A;&QO8U]T:6UE<@!?7V%L;&]C7W1I;65R`&9I9F]F
  17782. +M9"YC`%]?<W1A<G1U<%]T:6UE`$!?8VQE86YU<%]F:69O`%]?8VQE86YU<%]F
  17783. +M:69O`$!?:6YI=%]F:69O`%]?:6YI=%]F:69O`%]?9FEF;U]S:6<`7U]F:69O
  17784. +M7V]K`%]?1FEF;T)A<V4`8VQO<V4N8P!`8VQO<V4`7V-L;W-E`$!?7V-L;W-E
  17785. +M`%]?7V-L;W-E`&9I;&5S+F,`0%]L87-T7V9D`%]?;&%S=%]F9`!?7V9I;F1?
  17786. +M9F0`7U]F<F5E7V9D`$!?86QL;V-?9F0`7U]A;&QO8U]F9`!U=&EM92YC`$!?
  17787. +M9VUT,F%M:6=A`$!T:6UE`$!U=&EM90!?=71I;64`8F-O<'DN8P!`;65M;6]V
  17788. +M90!`8F-O<'D`7V)C;W!Y`&%M:6=A=&EM92YC`%]D87EL:6=H=`!?='IN86UE
  17789. +M`%]?0UA$,S,`0&QO8V%L=&EM90!`7V=E='1I;64`0&9T:6UE`%]F=&EM90!`
  17790. +M9V5T=&EM96]F9&%Y`%]G971T:6UE;V9D87D`=&EM96-O;G9E<G0N8P!?5&EM
  17791. +M97)"87-E`$!?86UI9V$R9VUT`%]?86UI9V$R9VUT`%]?9VUT,F%M:6=A`%]?
  17792. +M9V5T=&EM90!P=V0N8P!`9V5T;&]G:6X`7V=E=&QO9VEN`$!G971P=VYA;0!?
  17793. +M9V5T<'=N86T`0&=E='!W=6ED`%]G971P=W5I9`!?7V%M:6=A7W5S97(`<F5A
  17794. +M9&QI;FLN8P!?<W1R;&5N`$!R96%D;&EN:P!A;&QO8V$N8P!?;6%L;&]C`%]F
  17795. +M<F5E`%]A;&QO8V$`=6YL:6YK+F,`0'5N;&EN:P!?=6YL:6YK`'!I<&4N8P!`
  17796. +M<W1R8V%T`$!.97=,:7-T`$!S;V-K971P86ER`%]S;V-K971P86ER`$!P:7!E
  17797. +M`%]P:7!E`&=R<"YC`$!G971G<FYA;0!?9V5T9W)N86T`0&=E=&=R9VED`%]G
  17798. +M971G<F=I9`!S:6=N86QS+F,`7U]&4$524@!`7U]E>&ET`$!?9FEN9%]P:60`
  17799. +M0%]C;&5A;G5P7W!R;V-E<W-E<P!?7V-H:6QD<F5N7V5X:70`0%]I;FET7W!R
  17800. +M;V-E<W-E<P!`7V-L96%N=7!?<VEG;F%L<P!?7V-L96%N=7!?<VEG;F%L<P!`
  17801. +M7VEN:71?<VEG;F%L<P!?7VEN:71?<VEG;F%L<P!`0VAK7T%B;W)T`%]#:&M?
  17802. +M06)O<G0`7V-H:V%B;W)T`$!#6$9%4E(`7T-81D524@!?7VAA;F1L95]S:6=N
  17803. +M86QS`%]?=V%I=%]S:6=N86QS`$!?8VAE8VM?<VEG;F%L<P!?7V-H96-K7W-I
  17804. +M9VYA;',`7U]S:6=?9&ES<&%T8V@`0&%L87)M`%]A;&%R;0!?;6%I;BYC`$!M
  17805. +M86EN`$!?7V=E=&5N=@!`='%S;W)T`$!S=')N8W!Y`%]?7V-T>7!E`$!?:6YI
  17806. +M=%]U;FEX:6\`7U]?:6]B`%]?6$-%6$E4`%]3>7-"87-E`$!R96%L;&]C`%]?
  17807. +M7VUA:6X`0&UA:V5?96YV:7)O;@!?;6%K95]E;G9I<F]N`%]E;G9I<F]N`%]?
  17808. +M;V1D7W-I9P!?7V]D9%]T:6UE<@!U;6%S:RYC`$!U;6%S:P!?=6UA<VL`<')O
  17809. +M=&5C=&EO;BYC`$!?;6%K95]M;V1E`%]?;6%K95]M;V1E`$!?;6%K95]P<F]T
  17810. +M96-T:6]N`%]?;6%K95]P<F]T96-T:6]N`%]U<V5?86UI9V%?9FQA9W,`9VED
  17811. +M+F,`0&=E=&5G:60`7V=E=&5G:60`0&=E=&=I9`!?9V5T9VED`%]E>&ET+F,`
  17812. +M0%]E>&ET`%]?97AI=`!?7U]E>&ET`$!?8VQO<V5?86QL`%]?8VQO<V5?86QL
  17813. +M`&EO8W1L+F,`0&EO8W1L`&]P96XN8P!`7V%L;&]C7V%M:6=A9F0`0'-T<FEC
  17814. +M;7``7V]P96X`7U]?;W!E;@!C=&EM92YC`%]S<')I;G1F`$!R96%D`$!?='IS
  17815. +M970`7U]T>G-E=`!`;6MT:6UE`%]M:W1I;64`0&-T:6UE`%]C=&EM90!`87-C
  17816. +M=&EM90!?87-C=&EM90!`9VUT:6UE`%]G;71I;64`7VQO8V%L=&EM90!`='IS
  17817. +M971W86QL`%]T>G-E='=A;&P`0'1Z<V5T`%]T>G-E=`!?=&EM97IO;F4`86UI
  17818. +M9V%D;W,N8P!?7VEN:71?=6YI>&EO`%]?86QL;V-?86UI9V%F9`!`7V1O7W1R
  17819. +M=6YC871E`%]?9&]?=')U;F-A=&4`<F5N86UE+F,`0')E;F%M90!?<F5N86UE
  17820. +M`&-H;W=N+F,`0&9C:&]W;@!?9F-H;W=N`$!C:&]W;@!?8VAO=VX`8F-M<"YC
  17821. +M`$!B8VUP`%]B8VUP`&9I8G-T870N8P!?7V9I8G-T870`7U]L9FEB<W1A=`!B
  17822. +M>F5R;RYC`$!B>F5R;P!?8GIE<F\`9G1R=6YC871E+F,`0&9T<G5N8V%T90!?
  17823. +M9G1R=6YC871E`&9C:&UO9"YC`$!F8VAM;V0`7V9C:&UO9`!M:V9I9F\N8P!`
  17824. +M;6MN;V0`7VUK;F]D`$!M:V9I9F\`7VUK9FEF;P!I<V%T='DN8P!`:7-A='1Y
  17825. +M`%]I<V%T='D`<VEG<&%U<V4N8P!`<VEG<&%U<V4`7W-I9W!A=7-E`')M9&ER
  17826. +M+F,`0')M9&ER`%]R;61I<@!S=')F=&EM92YC`$!S=')F=&EM90!?<W1R9G1I
  17827. +M;64`=')U;F-A=&4N8P!`=')U;F-A=&4`7W1R=6YC871E`&5X96,N8P!`97AE
  17828. +M8P!?97AE8P!`965X96,`7V5E>&5C`'5I9"YC`$!G971E=6ED`%]G971E=6ED
  17829. +M`$!G971U:60`7V=E='5I9`!S;&5E<"YC`$!S;&5E<`!?<VQE97``8W)E870N
  17830. +M8P!`8W)E870`7V-R96%T`$!?7V-R96%T`%]?7V-R96%T`'=R:71E+F,`7W=R
  17831. +M:71E`$!?7W=R:71E`%]?7W=R:71E`'1I;64N8P!?=&EM90!G971E;G8N8P!?
  17832. +M7U]G971E;G8`;&EN:RYC`$!L:6YK`%]L:6YK`&UK=&5M<"YC`$!M:W1E;7``
  17833. +M9V5T=V0N8P!`9V5T8W=D`$!G971W9`!?9V5T=V0`8VAM;V0N8P!`8VAM;V0`
  17834. +M7V-H;6]D`&QS965K+F,`0&QS965K`%]L<V5E:P!`7U]L<V5E:P!?7U]L<V5E
  17835. +M:P!R96%D+F,`7W)E860`0%]?<F5A9`!?7U]R96%D`'-E;&5C="YC`$!S96QE
  17836. +M8W0`7W-E;&5C=`!F8VYT;"YC`%]F8VYT;`!E<G)O<E]M<V<N8P!E<G)O<BYC
  17837. +M`%]?<V5T97)R`%]C;VYV97)T7V]S97)R`&%B;W)T+F,`0&MI;&P`0&%B;W)T
  17838. +M`%]A8F]R=`!K:6QL+F,`7VMI;&P`<')O8V5S<V5S+F,`0$1E;&5T95!O<G0`
  17839. +M0$-R96%T95!O<G0`7U]C;&5A;G5P7W!R;V-E<W-E<P!?7VEN:71?<')O8V5S
  17840. +M<V5S`%]?9FEN9%]P:60`7U]F<F5E7V5N=')Y`&1E=FEC97,N8P!?7V1E=FEC
  17841. +M95]C;&]S90!?7V1E=FEC95]O<&5N`&UK9&ER+F,`0&UK9&ER`%]M:V1I<@``
  17842. +M`0````$`"0`)`^D````$``X`%@`!`!@`!``!`"$`#@`!`"L````!`#0`#``!
  17843. +M``D`#`/I``(`/`!)``$`5@````$`8``I``,`"0`*`^D``0!H``(`<0`$``$`
  17844. +M>0````$`@0`$`^H``````($`"0/K``````"*`%0``P`)`&\#Z0`,`)$`F@"B
  17845. +M`*@`N`#"`,D`T0!5`-D`Y0#R``0`^P%>``$!`P%:``$!"P`(``$!$@````$`
  17846. +M@0`%`^H``````($``0/K``````$9`2T``P`)`,4#Z0`+`*(`P@$@`3`!/`%)
  17847. +M`50`\@%@`,D!;P`"`*D`Y@`!`7D`M@`!`($`!@/J``````"!``H#ZP````4!
  17848. +MB0`D``$!FP`@``$!KP`<``$!OP`8``$!S`````$!V@)M``$`"0`#`^D``@'C
  17849. +M`>P``@'W`````0'_`````0('`H8``0`)`",#Z0`#`,("$`'L``0"'P!B``$"
  17850. +M)P!:``$"+P`,``$"-P````$"/P+&``$`"0`5`^D`!`)+`EL![`)I``0"=`!&
  17851. +M``$"?@!"``$"B``$``$"E`````$"H`,"``(`"0":`^D`"0*F`K`![`*Z`,D"
  17852. +MQ@+3`MX"Z``$`O(!U@`!`OD!S@`!`P`!G@`!`P8!E@`!`($`00/K``````,,
  17853. +M`_4``0`)`-`#Z0`)`M,"W@'L`,(!(`#)`/("Z`"B``H#$@,@``$#&P,8``$#
  17854. +M)`,(``$#+0,$``$#-@*0``$#/P*,``$#2`).``$#4@)*``$#7`%>``$#90%:
  17855. +M``$#;@48``(`"0`(`^D``0#)``("WP````$#>0````$`@0`"`^L````"`M,`
  17856. +M!``!`N@````!`X(%,@`!``D`&P/I``,`P@*P`>P`!`.+`&```0.3`%@``0.;
  17857. +M``@``0.E`````0.O!6@``0`)`$$#Z0`&`,(!(`*Z`,D#M@'L``(#O@`(``$#
  17858. +MQ0````$#S`77``$`"0`.`^D``P"X`,D![``"`]8`"``!`]\````!`^@%_P`"
  17859. +M``D`/@/I``4#\0/X`,D$!@02``($%P#B``$$'@#4``$`@0`/`^H`````!"@&
  17860. +MA@`!``D`!P/I``$`R0`!!#,````!!$<&G``!``D`#P/I``0`#0*'`!<":0`$
  17861. +M!%``'@`!!%D`%@`!!&(`!``!``$````!!&H&S``!``D`!P/I``($=P2!``($
  17862. +MCP`(``$$G`````$$J0;I``(`"0`I`^D`!@#)!+($N@3'`,($T``"!-@`!``!
  17863. +M!.`````!`($`"`/J``````3H!U(``@`)```#Z0``````@0#&`^H````!!/("
  17864. +MF``!!/\(1P`!``D`.@/I``4%!@47`,(%)@$P``@%-`#```$`D@"T``$%/0"F
  17865. +M``$%0P"B``$%20"2``$%4`"&``$%5P`0``$%7@````$%90BJ``$`"0`2`^D`
  17866. +M`P5O!7D![``"!80`!``!!9,````!!:((V``!``D``P/I``$%J@`"!;0`"``!
  17867. +M!;P````!!<0(Z@`!``D``P/I``$%RP`"!=0`"``!!=L````!!>((_``"``D`
  17868. +M30/I``(%Z@7Y``P&"`$$``$&&`$```$&*`#(``$&-@"\``$&1`"H``$&4`"D
  17869. +M``$&7`!^``$&:@!Z``$&>`!2``$&A0!.``$&D@````$&H`````$`@0`$`^H`
  17870. +M````!JX);0`#``D`'@/I``($$@:W``0&Q@!4``$&U0!4``$&Y`````$&\```
  17871. +M``$`@0`%`^H````!!OP````!`($`!`/K````!`<'``P``0#E``@``0#9``0`
  17872. +M`0<1`````0<<";H``0`)`!8#Z0`#!6\%>0'L``0')`!0``$'*P!,``$',@`$
  17873. +M``$'.P````$'1`GL``(`"0!B`^D``P"B`,(`\@`(!TP!@``!!U8!@``!!7H!
  17874. +M3``!!V`!2``!!7`!+``!!VH!*``!!W0`,``!!W\````!`($``@/K``````>*
  17875. +M"H```0`)`!H#Z0`%`+@`R0>1!YT![``"!Z0`"``!!ZL````!![(*OP`!``D`
  17876. +M!P/I``$'N0`"!\,`#``!!\H````!!]$*U0`"``D`4@/I``8'W0?G!^X']@@!
  17877. +M`>P`!`@,`0X``0@3`0H``0@:``@``0@H`````0"!``P#Z@`````(-@MU``$`
  17878. +M"0`P`^D``@?N"$0`!@A/`'@``0A;`'0``0>2`"@``0AG`"```0@"``0``0AS
  17879. +M`````0A]"[X``@`)``L#Z0````8(@P`D``$(C0`D``$(EP`6``$(H0`2``$(
  17880. +MJP`$``$(M0````$`@0`)`^H````!"+\`!``!",P+Z@`!``D`*@/I``8`P@$@
  17881. +M"-8`N`#)`>P``@C?``P``0*G`````0CI#$```P`)`"P#Z0`""/$(^0`!"0``
  17882. +M+@`!`($`!P/J``````"!``$#ZP`````)"`R=``$`"0`V`^D`!@$@`>P#M@=+
  17883. +M`,(`R0`""1$`9``!"1D`8``!"2$-`P`"``D"&@/I`!4%>0#9`.4'!P'L!6\'
  17884. +M<P#R`+@`50)+"2<%!@47`,D`P@"B!Q$)+P02!OP`!`DY!]0``0E%!\(``0E1
  17885. +M!S8``0E7!S(``0"!`!4#Z@`````)70_\``(`"0`)`^D````$"6,`%@`!"6T`
  17886. +M$@`!"7<`!``!"8$````!`($`"0/J``````F+$"<``P`)`*D#Z0`-"94$'0F<
  17887. +M":0)KPG$"=,&=P9#!!8&D08G!@<`%`GE`IH``0GW`IH``0H)`EP``0H8`EP`
  17888. +M`0HG`EH``0HR`EH``0'M`E(``0H]`E(``0I'`D0``0I/`D```04'`>H``0I7
  17889. +M`>8``048`=```0IH`<P``0IW`;8``0J'`;(``0),`0P``0J7`0@``0JF`"@`
  17890. +M`0JM`"0``0"!``H#Z@``````@0!$`^L````#`EL!"``!`FD!!``!`A``!``!
  17891. +M"K0170`#``D"'0/I`!4#\0J["+\*P0K+"M,*W00&"N4`R0H(!N,&0P:1"O0*
  17892. +M^@L$`*(+#`#R!!8``PL6`WH``0L>`'@``0LL`'@``0"!`"P#Z@``````@0`(
  17893. +M`^L````(!($`'``!"SH`&``!"$0`%``!`3P`$``!!K<`#``!"T,`"``!"TT`
  17894. +M!``!!!(````!"UD4>P`!``D`!`/I`````@MA``0``0MH`````0MO%(<``@`)
  17895. +M`#X#Z0````0+?`!^``$+B`!Z``$+E``$``$+I@````$`@0`!`^L````!"[@`
  17896. +M```!"\D4U@`!``D``@/I````!`O/``0``0O8``0``0OA`````0OI`````0OQ
  17897. +M%.```0`)`!4#Z0`'"OH&=PM-">0&Q0<J!TL`!@OY`$P``0P``$@``0F=`"8`
  17898. +M`0P'`"(``0P/`````0P;`````0PG%2H``0`)`!,#Z0`"!7D![``"#"\`#``!
  17899. +M`[<````!##854P`"``D`F`/I``H,/`"X`,(+DP2R`2``R0Q,`>P$$@`"#%8"
  17900. +M2``!#%P````!`($``@/J``````QD%D0``P`)!6@#Z0`*#&L*P0K3!^X*W0<C
  17901. +M#'0,50DG!<L`$`Q[%9(``0R#%9(``0R+%80``0R3%8```0R;$/0``0RB$/``
  17902. +M`0RI$)0``0RR$)```0R[#I@``0S##I0``0?W#C```0S+#BP``0S6#38``0SA
  17903. +M#38``0SL#,8``0SS#,8``0"!`$@#Z@````,'W0`8``$,^@`4``$'YP`,``$`
  17904. +M@03V`^L`````#00<K``"``D!G`/I``L$%@=S`/(![`"B`,(!(`4&"G8`N`#)
  17905. +M``8*Y@7L``$-#P7,``$,/056``$-'05(``$-+0+8``$-.P+0``$`@0`(`^H`
  17906. +M````#4D>O``!``D`)P/I``0`P@$@`,D![``"#5(`"``!#5H````!#6(?!``!
  17907. +M``D`#@/I````!`UJ`"H``0UR`!P``0UZ``P``0V!`````0V('QH``0`)`!`#
  17908. +MZ0````(-CP`,``$-E0````$-FQ\R``(`"0!U`^D`!@#"`2``R0M[`J8(3@`$
  17909. +M`K$!+@`!#:4!)@`!`KL`&``!#:\````!`($`0`/K`````0+&`````0VZ']P`
  17910. +M`0`)``4#Z0````(-P@`(``$-R0````$-T!_I``$`"0`,`^D``@.V`>P``@W<
  17911. +M``@``0WG`````0WR(`H``0`)``T#Z0`#`[8![`N3``(-^P`(``$.`P````$.
  17912. +M"R`T``$`"0`0`^D``0#"``0.%``L``$.&P`@``$.(@`,``$.*@````$.,B!4
  17913. +M``$`"0`-`^D``@.V`>P``@X[``0``0Y#`````0Y+('8``0`)``\#Z0`%`,(%
  17914. +M!@47"G8"AP`"#E8`!``!#F`````!#FH@L``!``D`*`/I``0!(`#"`+@`R0`"
  17915. +M#G(`!``!#GD````!#H`@^0`#``D!EP/I``(,B@?N``(.BP`2``$.E0````$`
  17916. +M@0!Y`^H``````($`"0/K``````Z?(WP``0`)`!8#Z0`%`,(!(`TL`>P`R0`"
  17917. +M#JH`"``!#K0````!#KXCN@`!``D`U0/I``H`P@$@`*(`J`L,!!(%@P.V`,D`
  17918. +M\@`$#L4#.``!#LL#'``!#M$`(@`!#M@````!#M\DW0`!``D``@/I````!`[E
  17919. +M``0``0[N``0``0[W`````0[_`````0\').<``0`)``X#Z0`'!@<%!@47"T,&
  17920. +M)PM-`>P``@\/``0``0\6`````0\=)2X``0`)``\#Z0`"#%4![``$#R4`,@`!
  17921. +M#RP`*@`!#S,`"``!#SP````!#T4E4@`!``D`(P/I``,`P@5Y`>P`!`31`((`
  17922. +M`0]-`'8``0]4``P``0]=`````0]F)9```0`)``P#Z0`!"`$``@>>``0``0]M
  17923. +M`````0]S):P``0`)`!T#Z0`#`/(`R0'L``(*P@`$``$/?`````$/AB7C``$`
  17924. +M"0`3`^D``P"X`>P`R0`"#XT`"``!#Y,````!#YDF$``"``D`)`/I``0#F@!5
  17925. +M!!(![``"#Z(`!``!`&D````!`($``@/J``````^J)F```0`)``8#Z0`"#[$!
  17926. +M[``"#[H`!``!#\$````!#\@F>P`!``D`#P/I``0`N`#)"Y,![``"#]``"``!
  17927. +M#]<````!#]XFK``!``D`'`/I``(%>0'L``0/Y@!<``$/[0!.``$/]``.``$/
  17928. +M_0````$0!B;>``$`"0`<`^D``P#"!7D![``$#'4`9``!$`T`6``!$!,`#``!
  17929. +M$!L````!$",G%0`!``D`@0/I``L&!P4&!1<+0PIV!EL&)PM-`,(%>0'L``(0
  17930. +M+``8``$0-`````$0/"?K``$`"0`@`^D``P#"!7D![``!$$0````!$$LH)@`"
  17931. +M``D```/I``````"!`-X#Z@````($QP-R``$$N@+6``$05RD[``(`"0!%`^D`
  17932. +M`@#)!+(`!`"Y`/X``1!?`/X``0$A``0``1!H`````0"!``$#ZP````$`P@``
  17933. +M``$0=RF<``$`"0`%`^D`!!!^`?8,#@'L``(0A0````$0C`````$0DRG!``$`
  17934. +M"0!9`^D`!@FD`DL!XP'L`,(+!``"$'\`[@`!$)H`Y@`!$*`J2@`#``D`0P/I
  17935. +M``@0JP06$+<`50:W!!()+P"B``@)L`"R``$0Q`"R``$)U`!(``$0V`!(``$)
  17936. +MI0`B``$0Z0`>``$%)P`$``$0]`````$`@0`&`^H``````($`#P/K````!@%@
  17937. +M`#@``0G$`#0``0%4`!0``0$P``@``0'C``0``0%)`````1$!*N,``0`)`"\#
  17938. +MZ0`!$*L`!`7K`)0``1$+`)```07Z`!P``1$:`````1$H*R,``0`)`!0#Z0`$
  17939. +6`+@+DP#)`>P``A$P``@``1$W`````1P`
  17940. +`
  17941. +end
  17942. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/unlink.c amiga/fsf/emacs18/amiga/unix/src/unlink.c
  17943. --- baseline/fsf/emacs18/amiga/unix/src/unlink.c    Wed Dec 31 17:00:00 1969
  17944. +++ amiga/fsf/emacs18/amiga/unix/src/unlink.c    Sat Sep 28 00:00:00 1996
  17945. @@ -0,0 +1,40 @@
  17946. +#include "amiga.h"
  17947. +#include "files.h"
  17948. +#include <amiga/ioctl.h>
  17949. +
  17950. +static int delete_open_file(char *name)
  17951. +{
  17952. +  BPTR nlock = Lock(name, SHARED_LOCK);
  17953. +
  17954. +  if (nlock)
  17955. +    {
  17956. +      int err = errno, i;
  17957. +
  17958. +      i = _last_fd();
  17959. +      while (--i >= 0)
  17960. +    if (ioctl(i, _AMIGA_DELETE_IF_ME, &nlock) == 0)
  17961. +      {
  17962. +        errno = err;
  17963. +        return 0;
  17964. +      } 
  17965. +      UnLock(nlock);
  17966. +   }
  17967. +  return -1;
  17968. +}
  17969. +
  17970. +int unlink(const char *file)
  17971. +{
  17972. +  long err;
  17973. +
  17974. +  chkabort();
  17975. +  if (DeleteFile(file)) return 0;
  17976. +  err = IoErr();
  17977. +  if (err == ERROR_DELETE_PROTECTED)
  17978. +    {
  17979. +      if (SetProtection(file, 0) && DeleteFile(file)) return 0;
  17980. +      err = IoErr();
  17981. +    }
  17982. +  if (err == ERROR_OBJECT_IN_USE && delete_open_file(file) == 0) return 0;
  17983. +  errno = convert_oserr(err);
  17984. +  return -1;
  17985. +}
  17986. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/utime.c amiga/fsf/emacs18/amiga/unix/src/utime.c
  17987. --- baseline/fsf/emacs18/amiga/unix/src/utime.c    Wed Dec 31 17:00:00 1969
  17988. +++ amiga/fsf/emacs18/amiga/unix/src/utime.c    Sat Sep 28 00:00:00 1996
  17989. @@ -0,0 +1,22 @@
  17990. +#include "amiga.h"
  17991. +#include "timeconvert.h"
  17992. +#include <stdlib.h>
  17993. +#include <time.h>
  17994. +#include <utime.h>
  17995. +
  17996. +int utime(char *file, struct utimbuf *times)
  17997. +{
  17998. +  struct DateStamp date;
  17999. +  time_t mtime;
  18000. +
  18001. +  chkabort();
  18002. +  if (times) mtime = times->modtime;
  18003. +  else mtime = time(0);
  18004. +
  18005. +  if (mtime == -1) return 0;
  18006. +
  18007. +  _gmt2amiga(mtime, &date);
  18008. +
  18009. +  if (SetFileDate(file, &date)) return 0;
  18010. +  ERROR;
  18011. +}
  18012. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/wait4.c amiga/fsf/emacs18/amiga/unix/src/wait4.c
  18013. --- baseline/fsf/emacs18/amiga/unix/src/wait4.c    Wed Dec 31 17:00:00 1969
  18014. +++ amiga/fsf/emacs18/amiga/unix/src/wait4.c    Sat Sep 28 00:00:00 1996
  18015. @@ -0,0 +1,57 @@
  18016. +#include "amiga.h"
  18017. +#include "signals.h"
  18018. +#include "processes.h"
  18019. +#include <sys/wait.h>
  18020. +
  18021. +int wait4(int pid, int *statusp, int options, struct rusage *rusage)
  18022. +{
  18023. +  struct process *p;
  18024. +
  18025. +  do {
  18026. +    int seen = FALSE;
  18027. +
  18028. +    scan_processes(p)
  18029. +      if (pid == 0 || p->pid == pid)
  18030. +    {
  18031. +      seen = TRUE;
  18032. +
  18033. +      if (p->status == exited)
  18034. +        {
  18035. +          int pid = p->pid;
  18036. +
  18037. +          if (statusp) *statusp = p->rc;
  18038. +          _free_entry(p);
  18039. +
  18040. +          return pid;
  18041. +        }
  18042. +    }
  18043. +    if (options & WNOHANG) return 0;
  18044. +    if (!seen)
  18045. +      {
  18046. +    errno = ECHILD;
  18047. +    return -1;
  18048. +      }
  18049. +    _handle_signals(_wait_signals(0));
  18050. +  } while (1);
  18051. +}
  18052. +
  18053. +int wait3(int *statusp, int options, struct rusage *rusage)
  18054. +{
  18055. +  return wait4(0, statusp, options, rusage);
  18056. +}
  18057. +
  18058. +int wait(int *statusp)
  18059. +{
  18060. +  return wait4(0, statusp, 0, NULL);
  18061. +}
  18062. +
  18063. +int waitpid(int pid, int *statusp, int options)
  18064. +{
  18065. +  /* We have no process groups, so : 
  18066. +       Our process group encompasses all our children
  18067. +       Each child is a process group unto itself
  18068. +     This is somewhat contradictory ... Should this be changed ? */
  18069. +  if (pid == -1) pid = 0;
  18070. +  if (pid < 0) pid = -pid;
  18071. +  return wait4(pid, statusp, options, NULL);
  18072. +}
  18073. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/write.c amiga/fsf/emacs18/amiga/unix/src/write.c
  18074. --- baseline/fsf/emacs18/amiga/unix/src/write.c    Wed Dec 31 17:00:00 1969
  18075. +++ amiga/fsf/emacs18/amiga/unix/src/write.c    Sat Sep 28 00:00:00 1996
  18076. @@ -0,0 +1,29 @@
  18077. +#include "amiga.h"
  18078. +#include "files.h"
  18079. +#include <fcntl.h>
  18080. +#include <unistd.h>
  18081. +
  18082. +#undef write
  18083. +
  18084. +int __write(int fd, const void *buffer, unsigned int length)
  18085. +{
  18086. +  struct fileinfo *fi;
  18087. +
  18088. +  chkabort();
  18089. +  if (fi = _find_fd(fd))
  18090. +    {
  18091. +      if (fi->flags & FI_WRITE)
  18092. +    {
  18093. +      if (fi->flags & O_APPEND) fi->lseek(fi->userinfo, 0, SEEK_END);
  18094. +      return fi->write(fi->userinfo, buffer, length);
  18095. +    }
  18096. +      errno = EACCES;
  18097. +    }
  18098. +  return -1;
  18099. +}
  18100. +
  18101. +int write(int fd, const void *buffer, unsigned int length)
  18102. +{
  18103. +  return __write(fd, buffer, length);
  18104. +}
  18105. +
  18106. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/africa amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/africa
  18107. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/africa    Wed Dec 31 17:00:00 1969
  18108. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/africa    Sat Sep 28 00:00:00 1996
  18109. @@ -0,0 +1,43 @@
  18110. +# @(#)africa    4.3
  18111. +
  18112. +###############################################################################
  18113. +
  18114. +# Egypt
  18115. +
  18116. +# From Bob Devine (January 28, 1988):
  18117. +# Egypt: DST from first day of May to first of October (ending may
  18118. +# also be on Sept 30th not 31st -- you might want to ask one of the
  18119. +# soc.* groups, you might hit someone who could ask an embassy).
  18120. +# DST since 1960 except for 1981-82.
  18121. +
  18122. +# From U. S. Naval Observatory (January 19, 1989):
  18123. +# EGYPT               2 H  AHEAD OF UTC
  18124. +# EGYPT               3 H  AHEAD OF UTC  MAY 17 - SEP 30 (AFTER
  18125. +# EGYPT                                  RAMADAN)
  18126. +
  18127. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  18128. +Rule    Egypt    1960    max    -    May    1    2:00    1:00    " DST"
  18129. +Rule    Egypt    1960    max    -    Oct    1    2:00    0    -
  18130. +
  18131. +# Zone    NAME    GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18132. +Zone    Egypt    2:00    Egypt        EET%s    1981
  18133. +        2:00    -        EET    1983
  18134. +        2:00    Egypt        EET%s
  18135. +
  18136. +###############################################################################
  18137. +
  18138. +# Libya
  18139. +
  18140. +# From Bob Devine (January 28 1988):
  18141. +# Libya: Since 1982 April 1st to September 30th (?)
  18142. +
  18143. +# From U. S. Naval Observatory (January 19, 1989):
  18144. +# LIBYAN ARAB         1 H  AHEAD OF UTC  JAMAHIRIYA/LIBYA
  18145. +# LIBYAN ARAB         2 H  AHEAD OF UTC  APR 1 - SEP 30 JAMAHIRIYA/LIBYA
  18146. +
  18147. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  18148. +Rule    Libya    1982    max    -    Apr    1    2:00    1:00    " DST"
  18149. +Rule    Libya    1982    max    -    Sep    30    2:00    0    -
  18150. +
  18151. +# Zone    NAME    GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18152. +Zone    Libya    2:00    Libya        EET%s
  18153. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/antarctica amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/antarctica
  18154. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/antarctica    Wed Dec 31 17:00:00 1969
  18155. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/antarctica    Sat Sep 28 00:00:00 1996
  18156. @@ -0,0 +1,4 @@
  18157. +# @(#)antarctica    4.1
  18158. +
  18159. +# From Arthur David Olson (February 13, 1988):
  18160. +# No data available.
  18161. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/asia amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/asia
  18162. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/asia    Wed Dec 31 17:00:00 1969
  18163. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/asia    Sat Sep 28 00:00:00 1996
  18164. @@ -0,0 +1,262 @@
  18165. +# @(#)asia    7.1
  18166. +
  18167. +# From Guy Harris:
  18168. +# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
  18169. +# additional information from Tom Yap, Sun Microsystems Intercontinental
  18170. +# Technical Support (including a page from the Official Airline Guide -
  18171. +# Worldwide Edition).  The names for time zones are guesses.
  18172. +
  18173. +###############################################################################
  18174. +
  18175. +# People's Republic of China
  18176. +
  18177. +# From Guy Harris:
  18178. +# People's Republic of China.  Yes, they really have only one time zone.
  18179. +
  18180. +# From Bob Devine (January 28, 1988):
  18181. +# No they don't.  See TIME mag, February 17, 1986 p.52.  Even though
  18182. +# China is across 4 physical time zones, before Feb 1, 1986 only the
  18183. +# Peking (Bejing) time zone was recognized.  Since that date, China
  18184. +# has two of 'em -- Peking's and Urumqi (named after the capital of
  18185. +# the Xinjiang Uighur Autonomous Region).  I don't know about DST for it.
  18186. +#
  18187. +# . . .I just deleted the DST table and this editor makes it too
  18188. +# painful to suck in another copy..  So, here is what I have for
  18189. +# DST start/end dates for Peking's time zone (info from AP):
  18190. +#
  18191. +#     1986 May 4 - Sept 14
  18192. +#     1987 mid-April - ??
  18193. +
  18194. +# From U. S. Naval Observatory (January 19, 1989):
  18195. +# CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
  18196. +# CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
  18197. +
  18198. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  18199. +Rule    PRC    1970    max    -    Apr    Sun<=14    2:00    1:00    D
  18200. +Rule    PRC    1970    max    -    Sep    Sun<=14    3:00    0    S
  18201. +
  18202. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18203. +Zone    PRC        8:00    PRC        C%sT
  18204. +
  18205. +###############################################################################
  18206. +
  18207. +# Republic of China
  18208. +
  18209. +# From Guy Harris
  18210. +
  18211. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18212. +Zone    ROC        8:00    -        CST
  18213. +
  18214. +###############################################################################
  18215. +
  18216. +# Hongkong
  18217. +
  18218. +# From Guy Harris
  18219. +
  18220. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18221. +Zone    Hongkong    8:00    -        HKT
  18222. +
  18223. +###############################################################################
  18224. +
  18225. +# Iran
  18226. +
  18227. +# From Bob Devine (January 28, 1988):
  18228. +# Iran: Last Sunday in March to third (?) Sunday in
  18229. +# September.  Since the revolution, the official calendar is Monarchic
  18230. +# calendar; I have no idea what the correspondence between dates are.
  18231. +
  18232. +# From U. S. Naval Observatory (January 19, 1989):
  18233. +# IRAN                3.5H AHEAD OF UTC
  18234. +
  18235. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  18236. +Rule    Iran    1988    max    -    Mar    lastSun    2:00    1:00    D
  18237. +Rule    Iran    1988    max    -    Sep    Sun>=15    2:00    0    S
  18238. +
  18239. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18240. +Zone    Iran        3:30    Iran        I%sT
  18241. +
  18242. +###############################################################################
  18243. +
  18244. +# Israel
  18245. +
  18246. +# From U. S. Naval Observatory (January 19, 1989):
  18247. +# ISRAEL              2 H  AHEAD OF UTC
  18248. +# ISRAEL              3 H  AHEAD OF UTC  APR 10 - SEP 3
  18249. +
  18250. +# From Ephraim Silverberg (April 18, 1989):
  18251. +
  18252. +# Prior to 1989, the rules concerning Daylight Savings Time changed every
  18253. +# year; as information, regarding exact times and dates during this period,
  18254. +# is not readily available at the present time, the rules commence starting
  18255. +# with the year 1989.
  18256. +
  18257. +# From 1989 onwards the rules are as follows:
  18258. +#
  18259. +# 1. Daylight Savings Time commences midnight of the first Saturday night
  18260. +#    following the seven-day festival of Pesach (Passover).  The transition
  18261. +#    is from midnight Israel Standard Time to 1 a.m. Israel Daylight Savings
  18262. +#    time.  As the Pesach festival is dependent on the Lunar calendar (the
  18263. +#    first day is always on the 15th day of the month of Nisan), the rule
  18264. +#    changes every year on the Gregorian calendar.
  18265. +#
  18266. +# 2. Standard Time is reinstated on the Saturday night whereupon Jews
  18267. +#    following the Ashkenazi (European) rite begin to recite the Selichot
  18268. +#    (forgiveness) prayers prior to the Jewish Lunar New Year.  The transition
  18269. +#    is from midnight Israel Daylight Savings time to 11 p.m. Israel Standard
  18270. +#    Time.  The law (according to the Ashkenazi custom) concerning the
  18271. +#    commencement of the Selichot prayers is described in chapter 128, section
  18272. +#    5 of the "Code of Jewish Law," by Rabbi Shlomo Ganzfried (translated by
  18273. +#    Hyman E. Goldin):
  18274. +#
  18275. +#       Beginning with the Sunday [**] before Rosh Hashanah [***],
  18276. +#       we rise early for the service of Selichot (supplications for
  18277. +#       forgiveness).  If Rosh Hashanah occurs on Monday or Tuesday, we
  18278. +#       begin saying the Selichot from the Sunday of the preceding week.
  18279. +#
  18280. +#    This, too, varies from year to year on the Gregorian calendar and, thus,
  18281. +#    two explicit timezone rules are required for each Gregorian year.
  18282. +#
  18283. +#    [**] actually Saturday night as the Jewish day commences at nightfall.
  18284. +#    [***] the Jewish Lunar New Year.
  18285. +
  18286. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  18287. +Rule    Zion    1989    only    -    Apr    30    0:00    1:00    D
  18288. +Rule    Zion    1989    only    -    Sep    24    0:00    0:00    S
  18289. +Rule    Zion    1990    only    -    Apr    22    0:00    1:00    D
  18290. +Rule    Zion    1990    only    -    Sep    16    0:00    0:00    S
  18291. +Rule    Zion    1991    only    -    Apr     7    0:00    1:00    D
  18292. +Rule    Zion    1991    only    -    Sep     1    0:00    0:00    S
  18293. +Rule    Zion    1992    only    -    Apr    26    0:00    1:00    D
  18294. +Rule    Zion    1992    only    -    Sep    20    0:00    0:00    S
  18295. +Rule    Zion    1993    only    -    Apr    18    0:00    1:00    D
  18296. +Rule    Zion    1993    only    -    Sep    12    0:00    0:00    S
  18297. +Rule    Zion    1994    only    -    Apr     3    0:00    1:00    D
  18298. +Rule    Zion    1994    only    -    Aug    28    0:00    0:00    S
  18299. +Rule    Zion    1995    only    -    Apr    23    0:00    1:00    D
  18300. +Rule    Zion    1995    only    -    Sep    17    0:00    0:00    S
  18301. +Rule    Zion    1996    only    -    Apr    14    0:00    1:00    D
  18302. +Rule    Zion    1996    only    -    Sep     8    0:00    0:00    S
  18303. +Rule    Zion    1997    only    -    May     4    0:00    1:00    D
  18304. +Rule    Zion    1997    only    -    Sep    28    0:00    0:00    S
  18305. +Rule    Zion    1998    only    -    Apr    19    0:00    1:00    D
  18306. +Rule    Zion    1998    only    -    Sep    13    0:00    0:00    S
  18307. +Rule    Zion    1999    only    -    Apr    11    0:00    1:00    D
  18308. +Rule    Zion    1999    only    -    Sep     5    0:00    0:00    S
  18309. +Rule    Zion    2000    only    -    Apr    30    0:00    1:00    D
  18310. +Rule    Zion    2000    only    -    Sep    24    0:00    0:00    S
  18311. +Rule    Zion    2001    only    -    Apr    15    0:00    1:00    D
  18312. +Rule    Zion    2001    only    -    Sep     9    0:00    0:00    S
  18313. +Rule    Zion    2002    only    -    Apr     7    0:00    1:00    D
  18314. +Rule    Zion    2002    only    -    Sep     1    0:00    0:00    S
  18315. +Rule    Zion    2003    only    -    Apr    27    0:00    1:00    D
  18316. +Rule    Zion    2003    only    -    Sep    21    0:00    0:00    S
  18317. +Rule    Zion    2004    only    -    Apr    18    0:00    1:00    D
  18318. +Rule    Zion    2004    only    -    Sep    12    0:00    0:00    S
  18319. +Rule    Zion    2005    only    -    May     1    0:00    1:00    D
  18320. +Rule    Zion    2005    only    -    Sep    25    0:00    0:00    S
  18321. +Rule    Zion    2006    only    -    Apr    23    0:00    1:00    D
  18322. +Rule    Zion    2006    only    -    Sep    17    0:00    0:00    S
  18323. +Rule    Zion    2007    only    -    Apr    15    0:00    1:00    D
  18324. +Rule    Zion    2007    only    -    Sep     9    0:00    0:00    S
  18325. +Rule    Zion    2008    only    -    Apr    27    0:00    1:00    D
  18326. +Rule    Zion    2008    only    -    Sep    21    0:00    0:00    S
  18327. +Rule    Zion    2009    only    -    Apr    19    0:00    1:00    D
  18328. +Rule    Zion    2009    only    -    Sep    13    0:00    0:00    S
  18329. +
  18330. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18331. +Zone    Israel        2:00    Zion        I%sT
  18332. +
  18333. +# The following is a chart of the day of the week and Gregorian date of
  18334. +# the first day of Pesach and the first day of Rosh Hashanah for the years
  18335. +# 1989 through 2009 inclusive.
  18336. +#
  18337. +# First Day of Passover
  18338. +# ---------------------
  18339. +# Gregorian Year    Day of Week    Month        Day
  18340. +# --------------    -----------    -----        ---
  18341. +#    1989        Thursday    April        20
  18342. +#    1990        Tuesday        April        10
  18343. +#    1991        Saturday    March        30
  18344. +#    1992        Saturday    April        18
  18345. +#    1993        Tuesday        April         6
  18346. +#    1994        Sunday        March        27
  18347. +#    1995        Saturday    April        15
  18348. +#    1996        Thursday    April         4
  18349. +#    1997        Tuesday        April        22
  18350. +#    1998        Saturday    April        11
  18351. +#    1999        Thursday    April         1
  18352. +#    2000        Thursday    April        20
  18353. +#    2001        Sunday        April         8
  18354. +#    2002        Thursday    March        28
  18355. +#    2003        Thursday    April        17
  18356. +#    2004        Tuesday        April         6
  18357. +#    2005        Sunday        April        24
  18358. +#    2006        Thursday    April        13
  18359. +#    2007        Tuesday        April         3
  18360. +#    2008        Sunday        April        20
  18361. +#    2009        Thursday    April         9
  18362. +#
  18363. +# First Day of Rosh Hashanah
  18364. +# --------------------------
  18365. +# Gregorian Year    Day of Week    Month        Day
  18366. +# --------------    -----------    -----        ---
  18367. +#    1989        Saturday    September    30
  18368. +#    1990        Thursday    September    20
  18369. +#    1991        Monday        September     9
  18370. +#    1992        Monday        September    28
  18371. +#    1993        Thursday    September    16
  18372. +#    1994        Tuesday        September     6
  18373. +#    1995        Monday        September    25
  18374. +#    1996        Saturday    September    14
  18375. +#    1997        Thursday    October         2
  18376. +#    1998        Monday        September    21
  18377. +#    1999        Saturday    September    11
  18378. +#    2000        Saturday    September    30
  18379. +#    2001        Tuesday        September    18
  18380. +#    2002        Saturday    September     7
  18381. +#    2003        Saturday    September    27
  18382. +#    2004        Thursday    September    16
  18383. +#    2005        Tuesday        October         4
  18384. +#    2006        Saturday    September    23
  18385. +#    2007        Thursday    September    13
  18386. +#    2008        Tuesday        September    30
  18387. +#    2009        Saturday    September    19
  18388. +
  18389. +###############################################################################
  18390. +
  18391. +# Japan
  18392. +
  18393. +# From Guy Harris
  18394. +
  18395. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18396. +Zone    Japan        9:00    -        JST
  18397. +
  18398. +###############################################################################
  18399. +
  18400. +# Republic of Korea
  18401. +
  18402. +# From Guy Harris:
  18403. +# According to someone at the Korean Times in San Francisco,
  18404. +# Daylight Savings Time was not observed until 1987.  He did not know
  18405. +# at what time of day DST starts or ends.
  18406. +
  18407. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  18408. +Rule    ROK    1987    max    -    May    Sun<=14    2:00    1:00    D
  18409. +Rule    ROK    1987    max    -    Oct    Sun<=14    3:00    0    S
  18410. +
  18411. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18412. +Zone    ROK        9:00    ROK        K%sT
  18413. +
  18414. +###############################################################################
  18415. +
  18416. +# Lebanon
  18417. +
  18418. +# From Bob Devine (January 28, 1988):
  18419. +# Lebanon: They do have DST but I don't know the dates.
  18420. +
  18421. +###############################################################################
  18422. +
  18423. +# Singapore
  18424. +
  18425. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18426. +Zone    Singapore    8:00    -        SST
  18427. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/australasia amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/australasia
  18428. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/australasia    Wed Dec 31 17:00:00 1969
  18429. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/australasia    Sat Sep 28 00:00:00 1996
  18430. @@ -0,0 +1,113 @@
  18431. +# @(#)australasia    4.4
  18432. +
  18433. +# Incorporates updates for Australia from Robert Elz' australia 1.1
  18434. +# and further updates from the Australian consulate.
  18435. +
  18436. +###############################################################################
  18437. +
  18438. +# Australia
  18439. +
  18440. +# Australian Data (for states with DST), standard rules
  18441. +# Includes shift in 1987 to follow Vic/NSW rules for ending DST,
  18442. +# and shift in 1986 to start DST earlier.
  18443. +
  18444. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  18445. +Rule    Oz    1971    1985    -    Oct    lastSun    2:00    1:00    -
  18446. +Rule    Oz    1986    max    -    Oct    Sun<=24    2:00    1:00    -
  18447. +Rule    Oz    1972    only    -    Feb    27    3:00    0    -
  18448. +Rule    Oz    1973    1986    -    Mar    Sun>=1    3:00    0    -
  18449. +Rule    Oz    1987    max    -    Mar    Sun<=21    3:00    0    -
  18450. +
  18451. +# Zone    NAME            GMTOFF    RULES    FORMAT    [UNTIL]
  18452. +Zone    Australia/Tasmania    10:00    Oz    EST
  18453. +Zone    Australia/Queensland    10:00    -    EST    # No DST here
  18454. +Zone    Australia/North        9:30    -    CST    # No DST here
  18455. +Zone    Australia/West        8:00    -    WST    # No DST here
  18456. +Zone    Australia/South        9:30    Oz    CST
  18457. +
  18458. +# Victoria jumped to a later ending date for DST in 1986 rather than 1987.
  18459. +
  18460. +Zone    Australia/Victoria    10:00    Oz    EST    1985 Oct lastSun 2:00
  18461. +                10:00    1:00    EST    1986 Mar Sun<=21 3:00
  18462. +                10:00    Oz    EST
  18463. +
  18464. +# New South Wales and subjurisdictions have their own ideas of a fun time.
  18465. +# Based on law library research by John Mackin (john@basser.cs.su.oz),
  18466. +# who notes:
  18467. +#    In Australia, time is not legislated federally, but rather by the
  18468. +#    individual states.  Thus, while such terms as ``Eastern Standard Time''
  18469. +#    [I mean, of course, Australian EST, not any other kind] are in common
  18470. +#    use, _they have NO REAL MEANING_, as they are not defined in the
  18471. +#    legislation.  This is very important to understand. 
  18472. +#    I have researched New South Wales time only; . . .I hope that perhaps a
  18473. +#    resident of each state could be found to do it for their own state. 
  18474. +#    (And I can guarantee that Victoria and NSW are different, so the link
  18475. +#    between them in the current australasia file must be broken.)
  18476. +
  18477. +# From Robert Elz (May 5, 1989):
  18478. +#
  18479. +# From next year (1990) NSW will revert to ending DST on the 1st
  18480. +# Sunday in March (rather than the third, which it appears will
  18481. +# continue to be what everyone else uses).
  18482. +
  18483. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  18484. +Rule    NSW    1971    1985    -    Oct    lastSun    2:00    1:00    -
  18485. +Rule    NSW    1972    only    -    Feb    lastSun    3:00    0    -
  18486. +Rule    NSW    1973    1981    -    Mar    Sun>=1    3:00    0    -
  18487. +Rule    NSW    1982    only    -    Apr    4    3:00    0    -
  18488. +Rule    NSW    1983    1985    -    Mar    Sun>=1    3:00    0    -
  18489. +Rule    NSW    1986    only    -    Mar    16    3:00    0    -
  18490. +Rule    NSW    1986    only    -    Oct    19    2:00    1:00    -
  18491. +Rule    NSW    1987    only    -    Mar    15    3:00    0    -
  18492. +Rule    NSW    1987    max    -    Oct    lastSun    2:00    1:00    -
  18493. +Rule    NSW    1988    1989    -    Mar    Sun<=21    3:00    0    -
  18494. +Rule    NSW    1990    max    -    Mar    Sun>=1    3:00    0    -
  18495. +
  18496. +# Zone    NAME            GMTOFF    RULES    FORMAT    [UNTIL]
  18497. +Zone    Australia/NSW        10:00    NSW    EST
  18498. +# `Broken Hill' means the County of Yancowinna. [john@basser.cs.su.oz.au,1/4/89]
  18499. +Zone    Australia/Yancowinna    9:30    NSW    ???
  18500. +Zone    Australia/LHI        10:30    NSW    ???
  18501. +
  18502. +# A footnote here:
  18503. +#
  18504. +#    . . .
  18505. +#    Date: Thu, j19 Feb 87 12:02:17 EST
  18506. +#    From: Bradley White <seismo!k.cs.cmu.edu!bww>
  18507. +#    . . .
  18508. +#    I am including a description of Australian time zones. . .
  18509. +#    this stuff is definitely accurate.
  18510. +#    . . .
  18511. +#    a) Australian Eastern Time: (EST = GMT+10:00, EDT = GMT+11:00)
  18512. +#    . . .
  18513. +#    Summer of 86/87 - present (current legislation):
  18514. +#        third Sun Oct 02:00 EST -> third [S]un Mar 02:00 EST
  18515. +#
  18516. +# If this turns out to be true, substitute Sun<=21 (third Sunday in October)
  18517. +# for Sun<=24 (next-to-last Sunday in October) above. . .some time before
  18518. +# October 1988, the first time it makes a difference.
  18519. +
  18520. +###############################################################################
  18521. +
  18522. +# New Zealand
  18523. +
  18524. +# New Zealand, from Elz' asia 1.1
  18525. +# Elz says "no guarantees"
  18526. +# The 1989/90 rule may only last a year.  It is a trial that is
  18527. +# subject to Ministerial approval to be made permanent.
  18528. +# The termination of "daylight saving" may actually be second
  18529. +# to last Sunday in March.  Noone spoken to was very sure.
  18530. +
  18531. +# From U. S. Naval Observatory (January 19, 1989):
  18532. +# NEW ZEALAND        12 H  AHEAD OF UTC  (EXCLUDING CHATHAM ISLAND)
  18533. +# NEW ZEALAND        13 H  AHEAD OF UTC  OCT 30, '88-MAR 4, '89
  18534. +# NEW ZEALAND       12H45M AHEAD OF UTC  CHATHAM ISLAND
  18535. +
  18536. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  18537. +Rule    NZ    1974    1988    -    Oct    lastSun    2:00    1:00    D
  18538. +Rule    NZ    1989    max    -    Oct    Sun>=8    2:00    1:00    D
  18539. +Rule    NZ    1975    1989    -    Mar    Sun>=1    3:00    0    S
  18540. +Rule    NZ    1990    max    -    Mar    Sun>=15    3:00    0    S
  18541. +
  18542. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18543. +Zone    NZ            12:00    NZ        NZ%sT    # New Zealand
  18544. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/etcetera amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/etcetera
  18545. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/etcetera    Wed Dec 31 17:00:00 1969
  18546. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/etcetera    Sat Sep 28 00:00:00 1996
  18547. @@ -0,0 +1,55 @@
  18548. +# @(#)etcetera    4.4
  18549. +
  18550. +# All of these are set up just so people can "zic -l" to a timezone
  18551. +# that's right for their area, even if it doesn't have a name or dst rules
  18552. +# (half hour zones are too much to bother with -- when someone asks!)
  18553. +
  18554. +Zone    GMT        0    -    GMT
  18555. +
  18556. +Zone    GMT-12        -12    -    GMT-1200
  18557. +Zone    GMT-11        -11    -    GMT-1100
  18558. +Zone    GMT-10        -10    -    GMT-1000
  18559. +Zone    GMT-9        -9    -    GMT-0900
  18560. +Zone    GMT-8        -8    -    GMT-0800
  18561. +Zone    GMT-7        -7    -    GMT-0700
  18562. +Zone    GMT-6        -6    -    GMT-0600
  18563. +Zone    GMT-5        -5    -    GMT-0500
  18564. +Zone    GMT-4        -4    -    GMT-0400
  18565. +Zone    GMT-3        -3    -    GMT-0300
  18566. +Zone    GMT-2        -2    -    GMT-0200
  18567. +Zone    GMT-1        -1    -    GMT-0100
  18568. +Zone    GMT+1        1    -    GMT+0100
  18569. +Zone    GMT+2        2    -    GMT+0200
  18570. +Zone    GMT+3        3    -    GMT+0300
  18571. +Zone    GMT+4        4    -    GMT+0400
  18572. +Zone    GMT+5        5    -    GMT+0500
  18573. +Zone    GMT+6        6    -    GMT+0600
  18574. +Zone    GMT+7        7    -    GMT+0700
  18575. +Zone    GMT+8        8    -    GMT+0800
  18576. +Zone    GMT+9        9    -    GMT+0900
  18577. +Zone    GMT+10        10    -    GMT+1000
  18578. +Zone    GMT+11        11    -    GMT+1100
  18579. +Zone    GMT+12        12    -    GMT+1200
  18580. +Zone    GMT+13        13    -    GMT+1300    # GMT+12 with DST
  18581. +
  18582. +Link    GMT        UTC
  18583. +Link    GMT        UCT
  18584. +Link    GMT        Universal
  18585. +Link    GMT        Greenwich
  18586. +Link    GMT        Zulu
  18587. +Link    GMT        GMT-0
  18588. +Link    GMT        GMT+0
  18589. +Link    GMT        GMT0
  18590. +Link    GMT+1        GMT1
  18591. +Link    GMT+2        GMT2
  18592. +Link    GMT+3        GMT3
  18593. +Link    GMT+4        GMT4
  18594. +Link    GMT+5        GMT5
  18595. +Link    GMT+6        GMT6
  18596. +Link    GMT+7        GMT7
  18597. +Link    GMT+8        GMT8
  18598. +Link    GMT+9        GMT9
  18599. +Link    GMT+10        GMT10
  18600. +Link    GMT+11        GMT11
  18601. +Link    GMT+12        GMT12
  18602. +Link    GMT+13        GMT13
  18603. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/europe amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/europe
  18604. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/europe    Wed Dec 31 17:00:00 1969
  18605. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/europe    Sat Sep 28 00:00:00 1996
  18606. @@ -0,0 +1,224 @@
  18607. +# @(#)europe    4.10
  18608. +
  18609. +# International country codes are used to identify countries' rules and
  18610. +# zones
  18611. +#
  18612. +# This data is by no means authoritative; if you think you know better, go
  18613. +# ahead and edit the file (and please send any changes to
  18614. +# ado@ncifcrf.gov for general use in the future).
  18615. +
  18616. +###############################################################################
  18617. +
  18618. +# United Kingdom
  18619. +
  18620. +# From Arthur David Olson (January 19, 1989):
  18621. +#
  18622. +# The starting and ending dates below (from which the rules are derived)
  18623. +# are from Whitaker's Almanack for 1987, page 146.
  18624. +# 1960 is the earliest year for which dates are given;
  18625. +# Whitaker's notes that British Summer Time (and, in some years, Double Summer
  18626. +# Time) was observed in earlier years but does not give start and end dates.
  18627. +#
  18628. +# A source at the British Information Office in New York avers that it's
  18629. +# known as "British" Summer Time in all parts of the United Kingdom.
  18630. +#    1960    April 10    October 2 (yes, 2, according to the almanac)
  18631. +#    1961    March 26    October 29
  18632. +#    1962    March 25    October 28
  18633. +#    1963    March 31    October 27
  18634. +#    1964    March 22    October 25
  18635. +#    1965    March 21    October 24
  18636. +#    1966    March 20    October 23
  18637. +#    1967    March 19    October 29
  18638. +#    1968    February 18    October 27
  18639. +# "British Standard Time, also one hour ahead of G. M. T., was kept between
  18640. +# 1968 Oct. 27-1971 Oct. 31."
  18641. +#    1972    March 19    October 29
  18642. +#    1973    March 18    October 28
  18643. +#    1974    March 17    October 27
  18644. +#    1975    March 16    October 26
  18645. +#    1976    March 21    October 24
  18646. +#    1977    March 20    October 23
  18647. +#    1978    March 19    October 29
  18648. +#    1979    March 18    October 28
  18649. +#    1980    March 16    October 26
  18650. +#    1981    March 29    October 25
  18651. +#    1982    March 28    October 24
  18652. +#    1983    March 27    October 23
  18653. +#    1984    March 25    October 28
  18654. +#    1985    March 31    October 27
  18655. +#    1986    March 30    October 26
  18656. +#    1987    March 29    October 25
  18657. +
  18658. +# From an Anonymous U. K. Donor (January 4, 1989):
  18659. +#
  18660. +# It is NOT possible to predict when [British Summer Time] will change
  18661. +# in a future year.
  18662. +# 
  18663. +# (The admiralty calculate when they think it should be (no more that a couple
  18664. +# of years in advance) and advise the government who then decide whether or 
  18665. +# not they will take the admiralty's advice)
  18666. +# 
  18667. +# ...the Gre[e]nwich...observatory...[was] very helpful.
  18668. +# 
  18669. +# I was not able to track down the Admiralty formula (I tried hard but failed)
  18670. +
  18671. +# ...
  18672. +# Date: 4 Jan 89 08:57:25 GMT (Wed)
  18673. +# From: Jonathan Leffler <nih-csl!uunet!mcvax!sphinx.co.uk!john>
  18674. +# ...
  18675. +# [British Summer Time] is fixed annually by Act of Parliament.
  18676. +# If you can predict what Parliament will do, you should be in
  18677. +# politics making a fortune, not computing.
  18678. +#
  18679. +# Summer time ends on Sunday 29 October 1989.
  18680. +
  18681. +# ...
  18682. +# Date: 5 Jan 89 09:50:38 GMT (Thu)
  18683. +# From: Peter Kendell <nih-csl!uunet!mcvax!tcom.stc.co.uk!pete>
  18684. +# ...
  18685. +# 
  18686. +# From my Collins Diary for 1989 - 
  18687. +# 
  18688. +# "At the time of going to press the Home Office was unable to confirm
  18689. +# the 1989 starting and finishing dates for BST*, but expressed the 
  18690. +# view that 26 March and 29 October were the likeliest dates to be
  18691. +# adopted"
  18692. +# 
  18693. +# *British Summer Time.
  18694. +
  18695. +# From an Anonymous U. K. Donor (January 5, 1989):
  18696. +#
  18697. +# . . .our government is seriously considering applying Double Summer Time -
  18698. +# putting the clocks forwards and back TWO hours for daylight saving time.
  18699. +# This is advocated to standardise time in the EEC - we're all supposed to
  18700. +# keep the same time and to change the clocks on the same dates in the future.
  18701. +
  18702. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  18703. +# Historic starting rules
  18704. +Rule    GB-Eire    1960    only    -    Apr    10    1:00s    1:00    BST
  18705. +Rule    GB-Eire    1961    1963    -    Mar    lastSun    1:00s    1:00    BST
  18706. +Rule    GB-Eire    1964    1967    -    Mar    Sun>=19    1:00s    1:00    BST
  18707. +Rule    GB-Eire    1968    only    -    Feb    18    1:00s    1:00    BST
  18708. +Rule    GB-Eire    1972    1980    -    Mar    Sun>=16    1:00s    1:00    BST
  18709. +# Historic ending rules
  18710. +Rule    GB-Eire    1960    only    -    Oct    2    1:00s    0    GMT
  18711. +Rule    GB-Eire    1961    1967    -    Oct    Sun>=23    1:00s    0    GMT
  18712. +Rule    GB-Eire    1971    only    -    Oct    31    1:00s    0    GMT
  18713. +# Current rules
  18714. +Rule    GB-Eire    1981    max    -    Mar    lastSun    1:00s    1:00    BST
  18715. +Rule    GB-Eire    1972    max    -    Oct    Sun>=23    1:00s    0    GMT
  18716. +
  18717. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18718. +Zone    GB-Eire        0:00    GB-Eire        %s    1968 Oct 27 1:00s
  18719. +            1:00    -        BST    1971 Oct 31 1:00s
  18720. +            0:00    GB-Eire        %s
  18721. +
  18722. +###############################################################################
  18723. +
  18724. +# Continental Europe
  18725. +
  18726. +# The use of 1986 as starting years below is conservative.
  18727. +
  18728. +Rule    W-Eur    1986    max    -    Mar    lastSun    1:00s    1:00    " DST"
  18729. +Rule    W-Eur    1986    max    -    Sep    lastSun    1:00s    0    -
  18730. +
  18731. +Rule    M-Eur    1986    max    -    Mar    lastSun    2:00s    1:00    " DST"
  18732. +Rule    M-Eur    1986    max    -    Sep    lastSun    2:00s    0    -
  18733. +
  18734. +Rule    E-Eur    1986    max    -    Mar    lastSun    3:00s    1:00    " DST"
  18735. +Rule    E-Eur    1986    max    -    Sep    lastSun    3:00s    0    -
  18736. +
  18737. +Rule    Turkey    1986    max    -    Mar    lastSun    1:00    1:00    " DST"
  18738. +Rule    Turkey    1986    max    -    Sep    lastSun    1:00    0    -
  18739. +
  18740. +Rule    W-SU    1986    max    -    Mar    lastSun    2:00s    1:00    " DST"
  18741. +Rule    W-SU    1986    max    -    Sep    lastSun    2:00s    0    -
  18742. +
  18743. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18744. +Zone    WET        0:00    W-Eur        WET%s
  18745. +Zone    Iceland        0:00    -        WET
  18746. +Zone    MET        1:00    M-Eur        MET%s
  18747. +Zone    Poland        1:00    W-Eur        MET%s
  18748. +Zone    EET        2:00    E-Eur        EET%s
  18749. +Zone    Turkey        3:00    Turkey        EET%s
  18750. +Zone    W-SU        3:00    M-Eur        ????
  18751. +
  18752. +# Tom Hoffman says that MET is also known as Central European Time
  18753. +
  18754. +Link    MET    CET
  18755. +
  18756. +###############################################################################
  18757. +
  18758. +# One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from
  18759. +# the last Sunday in March to the last Sunday in September in 1986.
  18760. +# The source shows Romania changing a day later than everybody else.
  18761. +#
  18762. +# According to Bernard Sieloff's source, Poland is in the MET time zone but
  18763. +# uses the WE DST rules.  The Western USSR uses EET+1 and ME DST rules.
  18764. +# Bernard Sieloff's source claims Romania switches on the same day, but at
  18765. +# 00:00 standard time (i.e., 01:00 DST).  It also claims that Turkey
  18766. +# switches on the same day, but switches on at 01:00 standard time
  18767. +# and off at 00:00 standard time (i.e., 01:00 DST)
  18768. +
  18769. +# ...
  18770. +# Date: Wed, 28 Jan 87 16:56:27 -0100
  18771. +# From: seismo!mcvax!cgcha!wtho (Tom Hofmann)
  18772. +# Message-Id: <8701281556.AA22174@cgcha.uucp>
  18773. +# ...
  18774. +# 
  18775. +# ...the European time rules are...standardized since 1981, when
  18776. +# most European coun[tr]ies started DST.  Before that year, only
  18777. +# a few countries (UK, France, Italy) had DST, each according
  18778. +# to own national rules.  In 1981, however, DST started on
  18779. +# 'Apr firstSun', and not on 'Mar lastSun' as in the following
  18780. +# years...
  18781. +# But also since 1981 there are some more national exceptions 
  18782. +# than listed in 'europe': Switzerland, for example, joined DST 
  18783. +# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep 
  18784. +# lastSun' in 1981---I don't know how they handle now.
  18785. +# 
  18786. +# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
  18787. +# Soviet Union (as far as I know).  
  18788. +# 
  18789. +# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG,
  18790. +# 4002 Basle, Switzerland
  18791. +# UUCP: ...!mcvax!cernvax!cgcha!wtho
  18792. +
  18793. +# ...
  18794. +# Date: Wed, 4 Feb 87 22:35:22 +0100
  18795. +# From: seismo!mcvax!cwi.nl!dik (Dik T. Winter)
  18796. +# ...
  18797. +# 
  18798. +# The information from Tom Hofmann is (as far as I know) not entirely correct.
  18799. +# After a request from chongo at amdahl I tried to retrieve all information
  18800. +# about DST in Europe.  I was able to find all from about 1969.
  18801. +# 
  18802. +# ...standardization on DST in Europe started in about 1977 with switches on
  18803. +# first Sunday in April and last Sunday in September...
  18804. +# In 1981 UK joined Europe insofar that
  18805. +# the starting day for both shifted to last Sunday in March.  And from 1982
  18806. +# the whole of Europe used DST, with switch dates April 1 and October 1 in
  18807. +# the Sov[i]et Union.  In 1985 the SU reverted to standard Europe[a]n switch
  18808. +# dates...
  18809. +# 
  18810. +# It should also be remembered that time-zones are not constants; e.g.
  18811. +# Portugal switched in 1976 from MET (or CET) to WET with DST...
  18812. +# Note also that though there were rules for switch dates not
  18813. +# all countries abided to these dates, and many individual deviations
  18814. +# occurred, though not since 1982 I believe.  Another note: it is always
  18815. +# assumed that DST is 1 hour ahead of normal time, this need not be the
  18816. +# case; at least in the Netherlands there have been times when DST was 2 hours
  18817. +# in advance of normal time.
  18818. +# 
  18819. +# ...
  18820. +# dik t. winter, cwi, amsterdam, nederland
  18821. +# INTERNET   : dik@cwi.nl
  18822. +# BITNET/EARN: dik@mcvax
  18823. +
  18824. +# From Bob Devine (January 28, 1988):
  18825. +# ...
  18826. +# Greece: Last Sunday in April to last Sunday in September (iffy on dates).
  18827. +# Since 1978.  Change at midnight.
  18828. +# ...
  18829. +# Monaco: has same DST as France.
  18830. +# ...
  18831. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/factory amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/factory
  18832. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/factory    Wed Dec 31 17:00:00 1969
  18833. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/factory    Sat Sep 28 00:00:00 1996
  18834. @@ -0,0 +1,8 @@
  18835. +# @(#)factory    1.1
  18836. +
  18837. +# For companies who don't want to put time zone specification in
  18838. +# their installation procedures.  When users run date, they'll get the message.
  18839. +# Also useful for the "comp.sources" version.
  18840. +
  18841. +# Zone    NAME    GMTOFF    RULES    FORMAT
  18842. +Zone    Factory    0    - "Local time zone must be set--see zic manual page"
  18843. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/leapseconds amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/leapseconds
  18844. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/leapseconds    Wed Dec 31 17:00:00 1969
  18845. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/leapseconds    Sat Sep 28 00:00:00 1996
  18846. @@ -0,0 +1,28 @@
  18847. +# @(#)leapseconds    4.1
  18848. +
  18849. +# Allowance for leapseconds added to each timezone file.
  18850. +
  18851. +# The correction (+ or -) is made at the given time, so lines
  18852. +# will typically look like:
  18853. +#    Leap    YEAR    MON    DAY    23:59:60    +    R/S
  18854. +# or
  18855. +#    Leap    YEAR    MON    DAY    23:59:59    -    R/S
  18856. +
  18857. +# If the leapsecond is Rolling (R) the given time is local time
  18858. +# If the leapsecond is Stationary (S) the given time is GMT
  18859. +
  18860. +# Leap    YEAR    MONTH    DAY    HH:MM:SS    CORR    R/S
  18861. +Leap    1972    Jun    30    23:59:60    +    S
  18862. +Leap    1972    Dec    31    23:59:60    +    S
  18863. +Leap    1973    Dec    31    23:59:60    +    S
  18864. +Leap    1974    Dec    31    23:59:60    +    S
  18865. +Leap    1975    Dec    31    23:59:60    +    S
  18866. +Leap    1976    Dec    31    23:59:60    +    S
  18867. +Leap    1977    Dec    31    23:59:60    +    S
  18868. +Leap    1978    Dec    31    23:59:60    +    S
  18869. +Leap    1979    Dec    31    23:59:60    +    S
  18870. +Leap    1981    Jun    30    23:59:60    +    S
  18871. +Leap    1982    Jun    30    23:59:60    +    S
  18872. +Leap    1983    Jun    30    23:59:60    +    S
  18873. +Leap    1985    Jun    30    23:59:60    +    S
  18874. +Leap    1987    Dec    31    23:59:60    +    S
  18875. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/northamerica amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/northamerica
  18876. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/northamerica    Wed Dec 31 17:00:00 1969
  18877. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/northamerica    Sat Sep 28 00:00:00 1996
  18878. @@ -0,0 +1,321 @@
  18879. +# @(#)northamerica    4.8
  18880. +
  18881. +###############################################################################
  18882. +
  18883. +# United States
  18884. +
  18885. +# From Arthur David Olson:
  18886. +# US Daylight Saving Time ended on the last Sunday of *October* in 1974.
  18887. +# See, for example, the front page of the Saturday, October 26, 1974
  18888. +# and Sunday, October 27, 1974 editions of the Washington Post.
  18889. +
  18890. +# From seismo!munnari!kre:
  18891. +# I recall also being told by someone once that Canada didn't have
  18892. +# the DST variations in 74/75 that the US did, but I am not nearly
  18893. +# sure enough of this to add anything.
  18894. +
  18895. +# From Arthur David Olson:
  18896. +# The above has been confirmed by Bob Devine; we'll go with it here.
  18897. +
  18898. +# From Arthur David Olson:
  18899. +# Before the Uniform Time Act of 1966 took effect in 1967, observance of
  18900. +# Daylight Saving Time in the US was by local option, except during wartime.
  18901. +
  18902. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  18903. +Rule    US    1918    1919    -    Mar    lastSun    2:00    1:00    D
  18904. +Rule    US    1918    1919    -    Oct    lastSun    2:00    0    S
  18905. +Rule    US    1942    only    -    Feb    9    2:00    1:00    W # War
  18906. +Rule    US    1945    only    -    Sep    30    2:00    0    S
  18907. +Rule    US    1967    max    -    Oct    lastSun    2:00    0    S
  18908. +Rule    US    1967    1973    -    Apr    lastSun    2:00    1:00    D
  18909. +Rule    US    1974    only    -    Jan    6    2:00    1:00    D
  18910. +Rule    US    1975    only    -    Feb    23    2:00    1:00    D
  18911. +Rule    US    1976    1986    -    Apr    lastSun    2:00    1:00    D
  18912. +Rule    US    1987    max    -    Apr    Sun>=1    2:00    1:00    D
  18913. +
  18914. +# From Bob Devine (January 28, 1988):
  18915. +# ...Alaska (and Hawaii) had the timezone names changed in 1967.
  18916. +#    old                         new
  18917. +#    Pacific Standard Time(PST)  -same-
  18918. +#    Yukon Standard Time(YST)    -same-
  18919. +#    Central Alaska S.T. (CAT)   Alaska-Hawaii St[an]dard Time (AHST)
  18920. +#    Nome Standard Time (NT)     Bering Standard Time (BST)
  18921. +# 
  18922. +# ...Alaska's timezone lines were redrawn in 1983 to give only 2 tz.
  18923. +#    The YST zone now covers nearly all of the state, AHST just part
  18924. +#    of the Aleutian islands.   No DST.
  18925. +
  18926. +# From U. S. Naval Observatory (January 19, 1989):
  18927. +# USA  EASTERN       5 H  BEHIND UTC    NEW YORK, WASHINGTON
  18928. +# USA  EASTERN       4 H  BEHIND UTC    APR 3 - OCT 30
  18929. +# USA  CENTRAL       6 H  BEHIND UTC    CHICAGO, HOUSTON
  18930. +# USA  CENTRAL       5 H  BEHIND UTC    APR 3 - OCT 30
  18931. +# USA  MOUNTAIN      7 H  BEHIND UTC    DENVER
  18932. +# USA  MOUNTAIN      6 H  BEHIND UTC    APR 3 - OCT 30
  18933. +# USA  PACIFIC       8 H  BEHIND UTC    L.A., SAN FRANCISCO
  18934. +# USA  PACIFIC       7 H  BEHIND UTC    APR 3 - OCT 30
  18935. +# USA  ALASKA STD    9 H  BEHIND UTC    MOST OF ALASKA     (AKST)
  18936. +# USA  ALASKA STD    8 H  BEHIND UTC    APR 3 - OCT 30 (AKDT)
  18937. +# USA  ALEUTIAN     10 H  BEHIND UTC    ISLANDS WEST OF 170W
  18938. +# USA  - " -         9 H  BEHIND UTC    APR 3 - OCT 30
  18939. +# USA  HAWAII       10 H  BEHIND UTC
  18940. +# USA  BERING       11 H  BEHIND UTC    SAMOA, MIDWAY
  18941. +
  18942. +# From Arthur David Olson (January 21, 1989):
  18943. +# The above dates are for 1988.
  18944. +# Note the "AKST" and "AKDT" abbreviations, the claim that there's
  18945. +# no DST in Samoa, and the claim that there is DST in Alaska and the
  18946. +# Aleutians.
  18947. +
  18948. +# From Arthur David Olson (February 13, 1988):
  18949. +# Legal standard time zone names, from United States Code (1982 Edition and
  18950. +# Supplement III), Title 15, Chapter 6, Section 260 and forward.  First, names
  18951. +# up to April 1, 1967 (when most provisions of the Uniform Time Act of 1966
  18952. +# took effect), as explained in sections 263 and 261:
  18953. +#    (none)
  18954. +#    United States standard eastern time
  18955. +#    United States standard mountain time
  18956. +#    United States standard central time
  18957. +#    United States standard Pacific time
  18958. +#    (none)
  18959. +#    United States standard Alaska time
  18960. +#    (none)
  18961. +# Next, names from April 1, 1967 until November 30, 1983 (the date for
  18962. +# public law 98-181):
  18963. +#    Atlantic standard time
  18964. +#    eastern standard time
  18965. +#    central standard time
  18966. +#    mountain standard time
  18967. +#    Pacific standard time
  18968. +#    Yukon standard time
  18969. +#    Alaska-Hawaii standard time
  18970. +#    Bering standard time
  18971. +# And after November 30, 1983:
  18972. +#    Atlantic standard time
  18973. +#    eastern standard time
  18974. +#    central standard time
  18975. +#    mountain standard time
  18976. +#    Pacific standard time
  18977. +#    Alaska standard time
  18978. +#    Hawaii-Aleutian standard time
  18979. +#    Samoa standard time
  18980. +# The law doesn't give abbreviations.
  18981. +
  18982. +# Easy stuff first--including Alaska, where we ignore history (since we
  18983. +# can't tell if we should give Yukon time or Alaska-Hawaii time for "old"
  18984. +# times).
  18985. +
  18986. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  18987. +Zone    US/Eastern    -5:00    US        E%sT
  18988. +Zone    US/Central    -6:00    US        C%sT
  18989. +Zone    US/Mountain    -7:00    US        M%sT
  18990. +Zone    US/Pacific    -8:00    US        P%sT
  18991. +Zone    US/Alaska    -9:00    US        AK%sT    # Abbreviation per USNO
  18992. +
  18993. +# Mainland US areas that are always Standard as of 1986.
  18994. +
  18995. +Zone    US/East-Indiana    -5:00    US        E%sT    1946
  18996. +            -5:00    -        EST    # Always EST as of 1986
  18997. +Zone    US/Arizona    -7:00    US        M%sT    1946
  18998. +            -7:00    -        MST    # Always MST as of 1986
  18999. +
  19000. +# From Arthur David Olson (February 13, 1988):
  19001. +# However. . .a writer from the Inter Tribal Council of Arizona, Inc.,
  19002. +# notes in private correspondence dated 12/28/87 that "Presently, only the
  19003. +# Navajo Nation participates in the Daylight Saving Time policy, due to its
  19004. +# large size and location in three states."  (The "only" means that other
  19005. +# tribal nations don't use DST.)
  19006. +
  19007. +Link    US/Mountain    Navajo
  19008. +
  19009. +# From Bob Devine (January 28, 1988):
  19010. +# Michigan didn't observe DST from 1968 to 1973.
  19011. +
  19012. +Zone    US/Michigan    -5:00    US        E%sT    1968
  19013. +            -5:00    -        EST    1973
  19014. +            -5:00    US        E%sT
  19015. +
  19016. +# Samoa just changes names.  No DST, per Naval Observatory.
  19017. +
  19018. +Zone    US/Samoa    -11:00    -        NST    1967 Apr 1  # N=Nome
  19019. +            -11:00    -        BST    1983 Nov 30 # B=Bering
  19020. +            -11:00    -        SST            # S=Samoa
  19021. +
  19022. +# Aleutian has a name change.  DST, per Naval Observatory.
  19023. +
  19024. +Zone    US/Aleutian    -10:00    US        AH%sT    1983 Nov 30
  19025. +            -10:00    US        HA%sT
  19026. +
  19027. +# From Arthur David Olson:
  19028. +# And then there's Hawaii.
  19029. +# DST was observed for one day in 1933;
  19030. +# Standard time was change by half an hour in 1947;
  19031. +# it's always standard as of 1986.
  19032. +
  19033. +Zone    US/Hawaii    -10:30    US    H%sT    1933 Apr 30 2:00
  19034. +            -10:30    1:00    HDT    1933 May 1 2:00
  19035. +            -10:30    US    H%sT    1947 Jun 8 2:00
  19036. +            -10:00    -    HST
  19037. +
  19038. +# Old names, for S5 users
  19039. +
  19040. +# Link    LINK-FROM    LINK-TO
  19041. +# Link    US/Eastern    EST5EDT
  19042. +# Link    US/Central    CST6CDT
  19043. +# Link    US/Mountain    MST7MDT
  19044. +# Link    US/Pacific    PST8PDT
  19045. +# Link    US/East-Indiana    EST
  19046. +# Link    US/Arizona    MST
  19047. +# Link    US/Hawaii    HST
  19048. +
  19049. +################################################################################
  19050. +
  19051. +# Canada
  19052. +
  19053. +# Canada is reportedly lots easier than the US--leastways since 1951.
  19054. +# I don't know what they did before then.
  19055. +# 4.3BSD claims that it's perfectly regular.
  19056. +# According to a posting in "comp.bugs.misc", "comp.unix.wizards", etc.
  19057. +# on February 8, 1987, by Dave Sherman of the Law Society of Upper Canada,
  19058. +# "...Canada (well, Ontario and at least some of the other provinces) are
  19059. +# adopting the new daylight savings time rules...".  We assume all of
  19060. +# Canada is doing so.
  19061. +
  19062. +# From Bob Devine (January 28, 1988):
  19063. +# All of Canada did have DST from your first rule except Saskatchewan.
  19064. +# Which parts did not observe DST is hard to pinpoint but most of the
  19065. +# province follows the rules.
  19066. +# NOTE: those that didn't have DST for that rule, also
  19067. +# probably did not have it for several years previous.
  19068. +
  19069. +# From U. S. Naval Observatory (January 19, 1989):
  19070. +# CANADA   NEW FDL    3.5H BEHIND UTC    ST.JOHN'S
  19071. +# CANADA   NEW FDL    1.5H BEHIND UTC    APR 3 - OCT 29
  19072. +# CANADA   ATLANTIC   4 H  BEHIND UTC    HALIFAX
  19073. +# CANADA   ATLANTIC   3 H  BEHIND UTC    APR 3 - OCT 29
  19074. +# CANADA   EASTERN    5 H  BEHIND UTC    TORONTO, MONTREAL, OTTAWA
  19075. +# CANADA   EASTERN    4 H  BEHIND UTC    APR 3 - OCT 29
  19076. +# CANADA   CENTRAL    6 H  BEHIND UTC    REGINA, WINNIPEG
  19077. +# CANADA   CENTRAL    5 H  BEHIND UTC    APR 3 - OCT 29
  19078. +# CANADA   MOUNTAIN   7 H  BEHIND UTC    CALGARY, EDMONTON
  19079. +# CANADA   MOUNTAIN   6 H  BEHIND UTC    APR 3 - OCT 29
  19080. +# CANADA   PACIFIC    8 H  BEHIND UTC    VANCOUVER
  19081. +# CANADA   PACIFIC    7 H  BEHIND UTC    APR 3 - OCT 29
  19082. +# CANADA   YUKON      SAME AS PACIFIC    DAWSON
  19083. +
  19084. +# From Arthur David Olson (January 21, 1989):
  19085. +# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989.  Ahem.
  19086. +# Note claim that there's double DST in Newfoundland and that Yukon should
  19087. +# be same as Pacific.  Stick with rules posted in 1988 until more authoritative
  19088. +# information is available.
  19089. +
  19090. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  19091. +Rule    Canada    1969    max    -    Oct    lastSun    2:00    0    S
  19092. +Rule    Canada    1969    1986    -    Apr    lastSun    2:00    1:00    D
  19093. +Rule    Canada    1987    max    -    Apr    Sun>=1    2:00    1:00    D
  19094. +
  19095. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  19096. +# Bob Devine says that DST *is* observed in Newfoundland
  19097. +Zone    Canada/Newfoundland    -3:30    Canada        N%sT
  19098. +Zone    Canada/Atlantic        -4:00    Canada        A%sT
  19099. +Zone    Canada/Eastern        -5:00    Canada        E%sT
  19100. +Zone    Canada/Central        -6:00    Canada        C%sT
  19101. +Zone    Canada/East-Saskatchewan    -6:00    -    CST # No DST as of 1987
  19102. +Zone    Canada/Mountain        -7:00    Canada        M%sT
  19103. +Zone    Canada/Pacific        -8:00    Canada        P%sT
  19104. +Zone    Canada/Yukon        -9:00    Canada        Y%sT
  19105. +
  19106. +###############################################################################
  19107. +
  19108. +# Mexico
  19109. +
  19110. +# From Guy Harris:
  19111. +# Rules are from the Official Airline Guide, Worldwide Edition, for 1987.
  19112. +# Rules prior to 1987 are unknown.
  19113. +# The comments in the OAG say "Only Ensenada, Mexicale, San Felipe and Tijuana
  19114. +# observe DST."  This is presumably Baja California Norte, above 28th parallel,
  19115. +# as listed there; Mexico/BajaSur is for "Baja California Sur and N. Pacific
  19116. +# Coast (States of Sinaloa and Sonora)."
  19117. +
  19118. +# From Bob Devine (January 28, 1988):
  19119. +# The Federal District (where Mexico City is) has observed [DST] several
  19120. +# times but not recently.
  19121. +# 
  19122. +# I don't where to drawn the line in the North Baja area.  28th latitude
  19123. +# sounds good -- but it may be higher (how far [d]o radio stations from
  19124. +# San Diego affect culture?).
  19125. +# 
  19126. +# The dates of DST probably go back to 1981.  The rules are the same as
  19127. +# US's.  This is going to be a headache for US presidential electi[o]n years!
  19128. +
  19129. +# From Arthur David Olson (February 13, 1988)
  19130. +# Since the 1981 starting date is only "probable," we'll keep the 1987
  19131. +# starting date below.
  19132. +
  19133. +# From U. S. Naval Observatory (January 19, 1989):
  19134. +# MEXICO BAJA CAL N   7 H  BEHIND UTC    BAJA CALIFORNIA SUR AND
  19135. +# MEXICO BAJA CAL N                      N. PACIFIC COAST (STATES
  19136. +# MEXICO BAJA CAL N                      OF SINALOA AND SONORA)
  19137. +# MEXICO BAJA CAL N   8 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  19138. +# MEXICO BAJA CAL N                      - OCT 29
  19139. +# MEXICO BAJA CAL N   7 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  19140. +# MEXICO BAJA CAL N                      - 0CT 29
  19141. +# MEXICO              6 H  BEHIND UTC    STATES OF DURANGO,
  19142. +# MEXICO                                 COAHUILA, NUEVO LEON,
  19143. +# MEXICO                                 TAMAULIPAS
  19144. +# MEXICO              5 H  BEHIND UTC    STATES OF DURANGO,
  19145. +# MEXICO                                 COAHUILA, NUEVO LEON,
  19146. +# MEXICO                                 TAMAULIPAS  APR 3 - OCT 29
  19147. +# MEXICO              6 H  BEHIND UTC    GENERAL MEXICO, STATES OF
  19148. +# MEXICO                                 CAMPECHE, QUINTANA ROO AND
  19149. +# MEXICO                                 YUCATAN
  19150. +
  19151. +# From Arthur David Olson (January 21, 1989):
  19152. +# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989.  Ahem.
  19153. +# USNO claims there should be four Mexican zones rather than three:
  19154. +# a zone that's GMT-8 with DST; a zone that's always GMT-7;
  19155. +# a zone that's GMT-6 with DST; and a zone that's always GMT-6.
  19156. +# Wait for more authoritative information before changing.
  19157. +
  19158. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  19159. +Rule    Mexico    1987    max    -    Oct    lastSun    2:00    0    S
  19160. +Rule    Mexico    1987    max    -    Apr    Sun>=1    2:00    1:00    D
  19161. +
  19162. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  19163. +Zone    Mexico/BajaNorte    -8:00    Mexico        P%sT
  19164. +Zone    Mexico/BajaSur        -7:00    -        MST
  19165. +Zone    Mexico/General        -6:00    -        CST
  19166. +
  19167. +###############################################################################
  19168. +
  19169. +# Jamaica
  19170. +
  19171. +# From Bob Devine (January 28, 1988):
  19172. +# Follows US rules.
  19173. +
  19174. +# From U. S. Naval Observatory (January 19, 1989):
  19175. +# JAMAICA             5 H  BEHIND UTC
  19176. +
  19177. +Link    US/Eastern    Jamaica
  19178. +
  19179. +###############################################################################
  19180. +
  19181. +# Cuba
  19182. +
  19183. +# From Bob Devine (January 28, 1988):
  19184. +# . . .DST is from 2nd Sunday in May to 2nd Sunday in October since 1981.
  19185. +# Change at midnight.  In 1979 & 1980, started at 3rd Sunday in March
  19186. +# (I think).
  19187. +
  19188. +# From U. S. Naval Observatory (January 19, 1989):
  19189. +# CUBA                5 H  BEHIND UTC
  19190. +# CUBA                4 H  BEHIND UTC    MAR 20 - OCT 8
  19191. +
  19192. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  19193. +Rule    Cuba    1979    1980    -    Mar    Sun>=15    0:00    1:00    D
  19194. +Rule    Cuba    1979    1980    -    Oct    Sun>=8    0:00    0    S
  19195. +Rule    Cuba    1981    max    -    May    Sun>=8    0:00    1:00    D
  19196. +Rule    Cuba    1981    max    -    Oct    Sun>=8    0:00    0    S
  19197. +
  19198. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT
  19199. +Zone    Cuba            -5:00    Cuba        C%sT
  19200. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/pacificnew amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/pacificnew
  19201. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/pacificnew    Wed Dec 31 17:00:00 1969
  19202. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/pacificnew    Sat Sep 28 00:00:00 1996
  19203. @@ -0,0 +1,21 @@
  19204. +# @(#)pacificnew    4.4
  19205. +
  19206. +# From Arthur David Olson (January 18, 1989):
  19207. +# On November 10, 1987, the U. S. House of Representatives passed a bill
  19208. +# (H.R. 435), the "Uniform Poll Closing Time Act", establishing
  19209. +# "Pacific Presidential Election Time"; it was not acted on by the Senate
  19210. +# before the end of the 100th Congress and so died.
  19211. +# The bill has been reintroduced in the 101st Congress as H. R. 18;
  19212. +# H. R. 96 also deals with poll closing time.  Either bill would have to be
  19213. +# passed by both the House and Senate and signed by the President (or have
  19214. +# the President's veto overridden by the House and Senate) before becoming law.
  19215. +
  19216. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  19217. +Rule    Twilite    1989    max    -    Apr    Sun>=1    2:00    1:00    D
  19218. +Rule    Twilite    1989    max    uspres    Oct    lastSun    2:00    1:00    PE
  19219. +Rule    Twilite    1989    max    uspres    Nov    Sun>=7    2:00    0    S
  19220. +Rule    Twilite    1989    max    nonpres    Oct    lastSun    2:00    0    S
  19221. +
  19222. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  19223. +Zone    US/Pacific-New    -8:00    US        P%sT    1989
  19224. +            -8:00    Twilite        P%sT
  19225. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/smakefile amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/smakefile
  19226. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/smakefile    Wed Dec 31 17:00:00 1969
  19227. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/smakefile    Sat Sep 28 00:00:00 1996
  19228. @@ -0,0 +1,67 @@
  19229. +#    @(#)Makefile    5.9 (Berkeley) 2/28/91
  19230. +
  19231. +# Change the line below for your time zone (after finding the zone you want in
  19232. +# the time zone files, or adding it to a time zone file).
  19233. +# Alternately, if you discover you've got the wrong time zone, you can just
  19234. +#    zic -l rightzone
  19235. +
  19236. +LOCALTIME=    MET
  19237. +
  19238. +# If you want something other than Eastern United States time as a template
  19239. +# for handling POSIX-style time zone environment variables,
  19240. +# change the line below (after finding the zone you want in the
  19241. +# time zone files, or adding it to a time zone file).
  19242. +# Alternately, if you discover you've got the wrong time zone, you can just
  19243. +#    zic -p rightzone
  19244. +
  19245. +POSIXRULES=    MET
  19246. +
  19247. +# Use an absolute path name for TZDIR unless you're just testing the software.
  19248. +
  19249. +TZDIR=    s:zoneinfo
  19250. +
  19251. +# If you always want time values interpreted as "seconds since the epoch
  19252. +# (not counting leap seconds)", use
  19253. +#     REDO=        posix_only
  19254. +# below.  If you always want right time values interpreted as "seconds since
  19255. +# the epoch" (counting leap seconds)", use
  19256. +#    REDO=        right_only
  19257. +# below.  If you want both sets of data available, with leap seconds not
  19258. +# counted normally, use
  19259. +#    REDO=        posix_right
  19260. +# below.  If you want both sets of data available, with leap seconds counted
  19261. +# normally, use
  19262. +#    REDO=        right_posix
  19263. +# below.
  19264. +
  19265. +# This should be left as is for the Amiga
  19266. +
  19267. +REDO=        posix_only
  19268. +
  19269. +YDATA=    africa antarctica asia australasia europe northamerica \
  19270. +    southamerica pacificnew etcetera factory
  19271. +NDATA=    systemv
  19272. +#SDATA=    solar87 solar88 solar89
  19273. +TDATA=    ${YDATA} ${NDATA} ${SDATA}
  19274. +DATA=    ${YDATA} ${NDATA} ${SDATA} leapseconds
  19275. +USNO=    usno1988 usno1989
  19276. +
  19277. +all: $(REDO)
  19278. +
  19279. +posix_only: ${TDATA}
  19280. +        /zic -d ${TZDIR} -L nil: ${TDATA}
  19281. +
  19282. +right_only: leapseconds ${TDATA}
  19283. +        /zic -d ${TZDIR} -L leapseconds ${TDATA}
  19284. +
  19285. +other_two: leapseconds ${TDATA}
  19286. +        /zic -d ${TZDIR} -L leapseconds ${TDATA}
  19287. +        /zic -d ${TZDIR} -L nil: ${TDATA}
  19288. +
  19289. +posix_right: posix_only other_two
  19290. +
  19291. +right_posix: right_only other_two
  19292. +
  19293. +install: ${TDATA} ${REDO}
  19294. +    /zic -d ${TZDIR} -p ${POSIXRULES}
  19295. +    /zic -d ${TZDIR} -l ${LOCALTIME}
  19296. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar87 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar87
  19297. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar87    Wed Dec 31 17:00:00 1969
  19298. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar87    Sat Sep 28 00:00:00 1996
  19299. @@ -0,0 +1,386 @@
  19300. +# @(#)solar87    4.1
  19301. +
  19302. +# So much for footnotes about Saudi Arabia.
  19303. +# Apparent noon times below are for Riyadh; your mileage will vary.
  19304. +# Times were computed using formulas in the U.S. Naval Observatory's
  19305. +# Almanac for Computers 1987; the formulas "will give EqT to an accuracy of
  19306. +# [plus or minus two] seconds during the current year."
  19307. +#
  19308. +# Rounding to the nearest five seconds results in fewer than
  19309. +# 256 different "time types"--a limit that's faced because time types are
  19310. +# stored on disk as unsigned chars.
  19311. +
  19312. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  19313. +Rule    sol87    1987    only    -    Jan    1    12:03:20s -0:03:20 -
  19314. +Rule    sol87    1987    only    -    Jan    2    12:03:50s -0:03:50 -
  19315. +Rule    sol87    1987    only    -    Jan    3    12:04:15s -0:04:15 -
  19316. +Rule    sol87    1987    only    -    Jan    4    12:04:45s -0:04:45 -
  19317. +Rule    sol87    1987    only    -    Jan    5    12:05:10s -0:05:10 -
  19318. +Rule    sol87    1987    only    -    Jan    6    12:05:40s -0:05:40 -
  19319. +Rule    sol87    1987    only    -    Jan    7    12:06:05s -0:06:05 -
  19320. +Rule    sol87    1987    only    -    Jan    8    12:06:30s -0:06:30 -
  19321. +Rule    sol87    1987    only    -    Jan    9    12:06:55s -0:06:55 -
  19322. +Rule    sol87    1987    only    -    Jan    10    12:07:20s -0:07:20 -
  19323. +Rule    sol87    1987    only    -    Jan    11    12:07:45s -0:07:45 -
  19324. +Rule    sol87    1987    only    -    Jan    12    12:08:10s -0:08:10 -
  19325. +Rule    sol87    1987    only    -    Jan    13    12:08:30s -0:08:30 -
  19326. +Rule    sol87    1987    only    -    Jan    14    12:08:55s -0:08:55 -
  19327. +Rule    sol87    1987    only    -    Jan    15    12:09:15s -0:09:15 -
  19328. +Rule    sol87    1987    only    -    Jan    16    12:09:35s -0:09:35 -
  19329. +Rule    sol87    1987    only    -    Jan    17    12:09:55s -0:09:55 -
  19330. +Rule    sol87    1987    only    -    Jan    18    12:10:15s -0:10:15 -
  19331. +Rule    sol87    1987    only    -    Jan    19    12:10:35s -0:10:35 -
  19332. +Rule    sol87    1987    only    -    Jan    20    12:10:55s -0:10:55 -
  19333. +Rule    sol87    1987    only    -    Jan    21    12:11:10s -0:11:10 -
  19334. +Rule    sol87    1987    only    -    Jan    22    12:11:30s -0:11:30 -
  19335. +Rule    sol87    1987    only    -    Jan    23    12:11:45s -0:11:45 -
  19336. +Rule    sol87    1987    only    -    Jan    24    12:12:00s -0:12:00 -
  19337. +Rule    sol87    1987    only    -    Jan    25    12:12:15s -0:12:15 -
  19338. +Rule    sol87    1987    only    -    Jan    26    12:12:30s -0:12:30 -
  19339. +Rule    sol87    1987    only    -    Jan    27    12:12:40s -0:12:40 -
  19340. +Rule    sol87    1987    only    -    Jan    28    12:12:55s -0:12:55 -
  19341. +Rule    sol87    1987    only    -    Jan    29    12:13:05s -0:13:05 -
  19342. +Rule    sol87    1987    only    -    Jan    30    12:13:15s -0:13:15 -
  19343. +Rule    sol87    1987    only    -    Jan    31    12:13:25s -0:13:25 -
  19344. +Rule    sol87    1987    only    -    Feb    1    12:13:35s -0:13:35 -
  19345. +Rule    sol87    1987    only    -    Feb    2    12:13:40s -0:13:40 -
  19346. +Rule    sol87    1987    only    -    Feb    3    12:13:50s -0:13:50 -
  19347. +Rule    sol87    1987    only    -    Feb    4    12:13:55s -0:13:55 -
  19348. +Rule    sol87    1987    only    -    Feb    5    12:14:00s -0:14:00 -
  19349. +Rule    sol87    1987    only    -    Feb    6    12:14:05s -0:14:05 -
  19350. +Rule    sol87    1987    only    -    Feb    7    12:14:10s -0:14:10 -
  19351. +Rule    sol87    1987    only    -    Feb    8    12:14:10s -0:14:10 -
  19352. +Rule    sol87    1987    only    -    Feb    9    12:14:15s -0:14:15 -
  19353. +Rule    sol87    1987    only    -    Feb    10    12:14:15s -0:14:15 -
  19354. +Rule    sol87    1987    only    -    Feb    11    12:14:15s -0:14:15 -
  19355. +Rule    sol87    1987    only    -    Feb    12    12:14:15s -0:14:15 -
  19356. +Rule    sol87    1987    only    -    Feb    13    12:14:15s -0:14:15 -
  19357. +Rule    sol87    1987    only    -    Feb    14    12:14:15s -0:14:15 -
  19358. +Rule    sol87    1987    only    -    Feb    15    12:14:10s -0:14:10 -
  19359. +Rule    sol87    1987    only    -    Feb    16    12:14:10s -0:14:10 -
  19360. +Rule    sol87    1987    only    -    Feb    17    12:14:05s -0:14:05 -
  19361. +Rule    sol87    1987    only    -    Feb    18    12:14:00s -0:14:00 -
  19362. +Rule    sol87    1987    only    -    Feb    19    12:13:55s -0:13:55 -
  19363. +Rule    sol87    1987    only    -    Feb    20    12:13:50s -0:13:50 -
  19364. +Rule    sol87    1987    only    -    Feb    21    12:13:45s -0:13:45 -
  19365. +Rule    sol87    1987    only    -    Feb    22    12:13:35s -0:13:35 -
  19366. +Rule    sol87    1987    only    -    Feb    23    12:13:30s -0:13:30 -
  19367. +Rule    sol87    1987    only    -    Feb    24    12:13:20s -0:13:20 -
  19368. +Rule    sol87    1987    only    -    Feb    25    12:13:10s -0:13:10 -
  19369. +Rule    sol87    1987    only    -    Feb    26    12:13:00s -0:13:00 -
  19370. +Rule    sol87    1987    only    -    Feb    27    12:12:50s -0:12:50 -
  19371. +Rule    sol87    1987    only    -    Feb    28    12:12:40s -0:12:40 -
  19372. +Rule    sol87    1987    only    -    Mar    1    12:12:30s -0:12:30 -
  19373. +Rule    sol87    1987    only    -    Mar    2    12:12:20s -0:12:20 -
  19374. +Rule    sol87    1987    only    -    Mar    3    12:12:05s -0:12:05 -
  19375. +Rule    sol87    1987    only    -    Mar    4    12:11:55s -0:11:55 -
  19376. +Rule    sol87    1987    only    -    Mar    5    12:11:40s -0:11:40 -
  19377. +Rule    sol87    1987    only    -    Mar    6    12:11:25s -0:11:25 -
  19378. +Rule    sol87    1987    only    -    Mar    7    12:11:15s -0:11:15 -
  19379. +Rule    sol87    1987    only    -    Mar    8    12:11:00s -0:11:00 -
  19380. +Rule    sol87    1987    only    -    Mar    9    12:10:45s -0:10:45 -
  19381. +Rule    sol87    1987    only    -    Mar    10    12:10:30s -0:10:30 -
  19382. +Rule    sol87    1987    only    -    Mar    11    12:10:15s -0:10:15 -
  19383. +Rule    sol87    1987    only    -    Mar    12    12:09:55s -0:09:55 -
  19384. +Rule    sol87    1987    only    -    Mar    13    12:09:40s -0:09:40 -
  19385. +Rule    sol87    1987    only    -    Mar    14    12:09:25s -0:09:25 -
  19386. +Rule    sol87    1987    only    -    Mar    15    12:09:10s -0:09:10 -
  19387. +Rule    sol87    1987    only    -    Mar    16    12:08:50s -0:08:50 -
  19388. +Rule    sol87    1987    only    -    Mar    17    12:08:35s -0:08:35 -
  19389. +Rule    sol87    1987    only    -    Mar    18    12:08:15s -0:08:15 -
  19390. +Rule    sol87    1987    only    -    Mar    19    12:08:00s -0:08:00 -
  19391. +Rule    sol87    1987    only    -    Mar    20    12:07:40s -0:07:40 -
  19392. +Rule    sol87    1987    only    -    Mar    21    12:07:25s -0:07:25 -
  19393. +Rule    sol87    1987    only    -    Mar    22    12:07:05s -0:07:05 -
  19394. +Rule    sol87    1987    only    -    Mar    23    12:06:50s -0:06:50 -
  19395. +Rule    sol87    1987    only    -    Mar    24    12:06:30s -0:06:30 -
  19396. +Rule    sol87    1987    only    -    Mar    25    12:06:10s -0:06:10 -
  19397. +Rule    sol87    1987    only    -    Mar    26    12:05:55s -0:05:55 -
  19398. +Rule    sol87    1987    only    -    Mar    27    12:05:35s -0:05:35 -
  19399. +Rule    sol87    1987    only    -    Mar    28    12:05:15s -0:05:15 -
  19400. +Rule    sol87    1987    only    -    Mar    29    12:05:00s -0:05:00 -
  19401. +Rule    sol87    1987    only    -    Mar    30    12:04:40s -0:04:40 -
  19402. +Rule    sol87    1987    only    -    Mar    31    12:04:25s -0:04:25 -
  19403. +Rule    sol87    1987    only    -    Apr    1    12:04:05s -0:04:05 -
  19404. +Rule    sol87    1987    only    -    Apr    2    12:03:45s -0:03:45 -
  19405. +Rule    sol87    1987    only    -    Apr    3    12:03:30s -0:03:30 -
  19406. +Rule    sol87    1987    only    -    Apr    4    12:03:10s -0:03:10 -
  19407. +Rule    sol87    1987    only    -    Apr    5    12:02:55s -0:02:55 -
  19408. +Rule    sol87    1987    only    -    Apr    6    12:02:35s -0:02:35 -
  19409. +Rule    sol87    1987    only    -    Apr    7    12:02:20s -0:02:20 -
  19410. +Rule    sol87    1987    only    -    Apr    8    12:02:05s -0:02:05 -
  19411. +Rule    sol87    1987    only    -    Apr    9    12:01:45s -0:01:45 -
  19412. +Rule    sol87    1987    only    -    Apr    10    12:01:30s -0:01:30 -
  19413. +Rule    sol87    1987    only    -    Apr    11    12:01:15s -0:01:15 -
  19414. +Rule    sol87    1987    only    -    Apr    12    12:00:55s -0:00:55 -
  19415. +Rule    sol87    1987    only    -    Apr    13    12:00:40s -0:00:40 -
  19416. +Rule    sol87    1987    only    -    Apr    14    12:00:25s -0:00:25 -
  19417. +Rule    sol87    1987    only    -    Apr    15    12:00:10s -0:00:10 -
  19418. +Rule    sol87    1987    only    -    Apr    16    11:59:55s 0:00:05 -
  19419. +Rule    sol87    1987    only    -    Apr    17    11:59:45s 0:00:15 -
  19420. +Rule    sol87    1987    only    -    Apr    18    11:59:30s 0:00:30 -
  19421. +Rule    sol87    1987    only    -    Apr    19    11:59:15s 0:00:45 -
  19422. +Rule    sol87    1987    only    -    Apr    20    11:59:05s 0:00:55 -
  19423. +Rule    sol87    1987    only    -    Apr    21    11:58:50s 0:01:10 -
  19424. +Rule    sol87    1987    only    -    Apr    22    11:58:40s 0:01:20 -
  19425. +Rule    sol87    1987    only    -    Apr    23    11:58:25s 0:01:35 -
  19426. +Rule    sol87    1987    only    -    Apr    24    11:58:15s 0:01:45 -
  19427. +Rule    sol87    1987    only    -    Apr    25    11:58:05s 0:01:55 -
  19428. +Rule    sol87    1987    only    -    Apr    26    11:57:55s 0:02:05 -
  19429. +Rule    sol87    1987    only    -    Apr    27    11:57:45s 0:02:15 -
  19430. +Rule    sol87    1987    only    -    Apr    28    11:57:35s 0:02:25 -
  19431. +Rule    sol87    1987    only    -    Apr    29    11:57:25s 0:02:35 -
  19432. +Rule    sol87    1987    only    -    Apr    30    11:57:15s 0:02:45 -
  19433. +Rule    sol87    1987    only    -    May    1    11:57:10s 0:02:50 -
  19434. +Rule    sol87    1987    only    -    May    2    11:57:00s 0:03:00 -
  19435. +Rule    sol87    1987    only    -    May    3    11:56:55s 0:03:05 -
  19436. +Rule    sol87    1987    only    -    May    4    11:56:50s 0:03:10 -
  19437. +Rule    sol87    1987    only    -    May    5    11:56:45s 0:03:15 -
  19438. +Rule    sol87    1987    only    -    May    6    11:56:40s 0:03:20 -
  19439. +Rule    sol87    1987    only    -    May    7    11:56:35s 0:03:25 -
  19440. +Rule    sol87    1987    only    -    May    8    11:56:30s 0:03:30 -
  19441. +Rule    sol87    1987    only    -    May    9    11:56:25s 0:03:35 -
  19442. +Rule    sol87    1987    only    -    May    10    11:56:25s 0:03:35 -
  19443. +Rule    sol87    1987    only    -    May    11    11:56:20s 0:03:40 -
  19444. +Rule    sol87    1987    only    -    May    12    11:56:20s 0:03:40 -
  19445. +Rule    sol87    1987    only    -    May    13    11:56:20s 0:03:40 -
  19446. +Rule    sol87    1987    only    -    May    14    11:56:20s 0:03:40 -
  19447. +Rule    sol87    1987    only    -    May    15    11:56:20s 0:03:40 -
  19448. +Rule    sol87    1987    only    -    May    16    11:56:20s 0:03:40 -
  19449. +Rule    sol87    1987    only    -    May    17    11:56:20s 0:03:40 -
  19450. +Rule    sol87    1987    only    -    May    18    11:56:20s 0:03:40 -
  19451. +Rule    sol87    1987    only    -    May    19    11:56:25s 0:03:35 -
  19452. +Rule    sol87    1987    only    -    May    20    11:56:25s 0:03:35 -
  19453. +Rule    sol87    1987    only    -    May    21    11:56:30s 0:03:30 -
  19454. +Rule    sol87    1987    only    -    May    22    11:56:35s 0:03:25 -
  19455. +Rule    sol87    1987    only    -    May    23    11:56:40s 0:03:20 -
  19456. +Rule    sol87    1987    only    -    May    24    11:56:45s 0:03:15 -
  19457. +Rule    sol87    1987    only    -    May    25    11:56:50s 0:03:10 -
  19458. +Rule    sol87    1987    only    -    May    26    11:56:55s 0:03:05 -
  19459. +Rule    sol87    1987    only    -    May    27    11:57:00s 0:03:00 -
  19460. +Rule    sol87    1987    only    -    May    28    11:57:10s 0:02:50 -
  19461. +Rule    sol87    1987    only    -    May    29    11:57:15s 0:02:45 -
  19462. +Rule    sol87    1987    only    -    May    30    11:57:25s 0:02:35 -
  19463. +Rule    sol87    1987    only    -    May    31    11:57:30s 0:02:30 -
  19464. +Rule    sol87    1987    only    -    Jun    1    11:57:40s 0:02:20 -
  19465. +Rule    sol87    1987    only    -    Jun    2    11:57:50s 0:02:10 -
  19466. +Rule    sol87    1987    only    -    Jun    3    11:58:00s 0:02:00 -
  19467. +Rule    sol87    1987    only    -    Jun    4    11:58:10s 0:01:50 -
  19468. +Rule    sol87    1987    only    -    Jun    5    11:58:20s 0:01:40 -
  19469. +Rule    sol87    1987    only    -    Jun    6    11:58:30s 0:01:30 -
  19470. +Rule    sol87    1987    only    -    Jun    7    11:58:40s 0:01:20 -
  19471. +Rule    sol87    1987    only    -    Jun    8    11:58:50s 0:01:10 -
  19472. +Rule    sol87    1987    only    -    Jun    9    11:59:05s 0:00:55 -
  19473. +Rule    sol87    1987    only    -    Jun    10    11:59:15s 0:00:45 -
  19474. +Rule    sol87    1987    only    -    Jun    11    11:59:30s 0:00:30 -
  19475. +Rule    sol87    1987    only    -    Jun    12    11:59:40s 0:00:20 -
  19476. +Rule    sol87    1987    only    -    Jun    13    11:59:50s 0:00:10 -
  19477. +Rule    sol87    1987    only    -    Jun    14    12:00:05s -0:00:05 -
  19478. +Rule    sol87    1987    only    -    Jun    15    12:00:15s -0:00:15 -
  19479. +Rule    sol87    1987    only    -    Jun    16    12:00:30s -0:00:30 -
  19480. +Rule    sol87    1987    only    -    Jun    17    12:00:45s -0:00:45 -
  19481. +Rule    sol87    1987    only    -    Jun    18    12:00:55s -0:00:55 -
  19482. +Rule    sol87    1987    only    -    Jun    19    12:01:10s -0:01:10 -
  19483. +Rule    sol87    1987    only    -    Jun    20    12:01:20s -0:01:20 -
  19484. +Rule    sol87    1987    only    -    Jun    21    12:01:35s -0:01:35 -
  19485. +Rule    sol87    1987    only    -    Jun    22    12:01:50s -0:01:50 -
  19486. +Rule    sol87    1987    only    -    Jun    23    12:02:00s -0:02:00 -
  19487. +Rule    sol87    1987    only    -    Jun    24    12:02:15s -0:02:15 -
  19488. +Rule    sol87    1987    only    -    Jun    25    12:02:25s -0:02:25 -
  19489. +Rule    sol87    1987    only    -    Jun    26    12:02:40s -0:02:40 -
  19490. +Rule    sol87    1987    only    -    Jun    27    12:02:50s -0:02:50 -
  19491. +Rule    sol87    1987    only    -    Jun    28    12:03:05s -0:03:05 -
  19492. +Rule    sol87    1987    only    -    Jun    29    12:03:15s -0:03:15 -
  19493. +Rule    sol87    1987    only    -    Jun    30    12:03:30s -0:03:30 -
  19494. +Rule    sol87    1987    only    -    Jul    1    12:03:40s -0:03:40 -
  19495. +Rule    sol87    1987    only    -    Jul    2    12:03:50s -0:03:50 -
  19496. +Rule    sol87    1987    only    -    Jul    3    12:04:05s -0:04:05 -
  19497. +Rule    sol87    1987    only    -    Jul    4    12:04:15s -0:04:15 -
  19498. +Rule    sol87    1987    only    -    Jul    5    12:04:25s -0:04:25 -
  19499. +Rule    sol87    1987    only    -    Jul    6    12:04:35s -0:04:35 -
  19500. +Rule    sol87    1987    only    -    Jul    7    12:04:45s -0:04:45 -
  19501. +Rule    sol87    1987    only    -    Jul    8    12:04:55s -0:04:55 -
  19502. +Rule    sol87    1987    only    -    Jul    9    12:05:05s -0:05:05 -
  19503. +Rule    sol87    1987    only    -    Jul    10    12:05:15s -0:05:15 -
  19504. +Rule    sol87    1987    only    -    Jul    11    12:05:20s -0:05:20 -
  19505. +Rule    sol87    1987    only    -    Jul    12    12:05:30s -0:05:30 -
  19506. +Rule    sol87    1987    only    -    Jul    13    12:05:40s -0:05:40 -
  19507. +Rule    sol87    1987    only    -    Jul    14    12:05:45s -0:05:45 -
  19508. +Rule    sol87    1987    only    -    Jul    15    12:05:50s -0:05:50 -
  19509. +Rule    sol87    1987    only    -    Jul    16    12:06:00s -0:06:00 -
  19510. +Rule    sol87    1987    only    -    Jul    17    12:06:05s -0:06:05 -
  19511. +Rule    sol87    1987    only    -    Jul    18    12:06:10s -0:06:10 -
  19512. +Rule    sol87    1987    only    -    Jul    19    12:06:15s -0:06:15 -
  19513. +Rule    sol87    1987    only    -    Jul    20    12:06:15s -0:06:15 -
  19514. +Rule    sol87    1987    only    -    Jul    21    12:06:20s -0:06:20 -
  19515. +Rule    sol87    1987    only    -    Jul    22    12:06:25s -0:06:25 -
  19516. +Rule    sol87    1987    only    -    Jul    23    12:06:25s -0:06:25 -
  19517. +Rule    sol87    1987    only    -    Jul    24    12:06:25s -0:06:25 -
  19518. +Rule    sol87    1987    only    -    Jul    25    12:06:30s -0:06:30 -
  19519. +Rule    sol87    1987    only    -    Jul    26    12:06:30s -0:06:30 -
  19520. +Rule    sol87    1987    only    -    Jul    27    12:06:30s -0:06:30 -
  19521. +Rule    sol87    1987    only    -    Jul    28    12:06:30s -0:06:30 -
  19522. +Rule    sol87    1987    only    -    Jul    29    12:06:25s -0:06:25 -
  19523. +Rule    sol87    1987    only    -    Jul    30    12:06:25s -0:06:25 -
  19524. +Rule    sol87    1987    only    -    Jul    31    12:06:25s -0:06:25 -
  19525. +Rule    sol87    1987    only    -    Aug    1    12:06:20s -0:06:20 -
  19526. +Rule    sol87    1987    only    -    Aug    2    12:06:15s -0:06:15 -
  19527. +Rule    sol87    1987    only    -    Aug    3    12:06:10s -0:06:10 -
  19528. +Rule    sol87    1987    only    -    Aug    4    12:06:05s -0:06:05 -
  19529. +Rule    sol87    1987    only    -    Aug    5    12:06:00s -0:06:00 -
  19530. +Rule    sol87    1987    only    -    Aug    6    12:05:55s -0:05:55 -
  19531. +Rule    sol87    1987    only    -    Aug    7    12:05:50s -0:05:50 -
  19532. +Rule    sol87    1987    only    -    Aug    8    12:05:40s -0:05:40 -
  19533. +Rule    sol87    1987    only    -    Aug    9    12:05:35s -0:05:35 -
  19534. +Rule    sol87    1987    only    -    Aug    10    12:05:25s -0:05:25 -
  19535. +Rule    sol87    1987    only    -    Aug    11    12:05:15s -0:05:15 -
  19536. +Rule    sol87    1987    only    -    Aug    12    12:05:05s -0:05:05 -
  19537. +Rule    sol87    1987    only    -    Aug    13    12:04:55s -0:04:55 -
  19538. +Rule    sol87    1987    only    -    Aug    14    12:04:45s -0:04:45 -
  19539. +Rule    sol87    1987    only    -    Aug    15    12:04:35s -0:04:35 -
  19540. +Rule    sol87    1987    only    -    Aug    16    12:04:25s -0:04:25 -
  19541. +Rule    sol87    1987    only    -    Aug    17    12:04:10s -0:04:10 -
  19542. +Rule    sol87    1987    only    -    Aug    18    12:04:00s -0:04:00 -
  19543. +Rule    sol87    1987    only    -    Aug    19    12:03:45s -0:03:45 -
  19544. +Rule    sol87    1987    only    -    Aug    20    12:03:30s -0:03:30 -
  19545. +Rule    sol87    1987    only    -    Aug    21    12:03:15s -0:03:15 -
  19546. +Rule    sol87    1987    only    -    Aug    22    12:03:00s -0:03:00 -
  19547. +Rule    sol87    1987    only    -    Aug    23    12:02:45s -0:02:45 -
  19548. +Rule    sol87    1987    only    -    Aug    24    12:02:30s -0:02:30 -
  19549. +Rule    sol87    1987    only    -    Aug    25    12:02:15s -0:02:15 -
  19550. +Rule    sol87    1987    only    -    Aug    26    12:02:00s -0:02:00 -
  19551. +Rule    sol87    1987    only    -    Aug    27    12:01:40s -0:01:40 -
  19552. +Rule    sol87    1987    only    -    Aug    28    12:01:25s -0:01:25 -
  19553. +Rule    sol87    1987    only    -    Aug    29    12:01:05s -0:01:05 -
  19554. +Rule    sol87    1987    only    -    Aug    30    12:00:50s -0:00:50 -
  19555. +Rule    sol87    1987    only    -    Aug    31    12:00:30s -0:00:30 -
  19556. +Rule    sol87    1987    only    -    Sep    1    12:00:10s -0:00:10 -
  19557. +Rule    sol87    1987    only    -    Sep    2    11:59:50s 0:00:10 -
  19558. +Rule    sol87    1987    only    -    Sep    3    11:59:35s 0:00:25 -
  19559. +Rule    sol87    1987    only    -    Sep    4    11:59:15s 0:00:45 -
  19560. +Rule    sol87    1987    only    -    Sep    5    11:58:55s 0:01:05 -
  19561. +Rule    sol87    1987    only    -    Sep    6    11:58:35s 0:01:25 -
  19562. +Rule    sol87    1987    only    -    Sep    7    11:58:15s 0:01:45 -
  19563. +Rule    sol87    1987    only    -    Sep    8    11:57:55s 0:02:05 -
  19564. +Rule    sol87    1987    only    -    Sep    9    11:57:30s 0:02:30 -
  19565. +Rule    sol87    1987    only    -    Sep    10    11:57:10s 0:02:50 -
  19566. +Rule    sol87    1987    only    -    Sep    11    11:56:50s 0:03:10 -
  19567. +Rule    sol87    1987    only    -    Sep    12    11:56:30s 0:03:30 -
  19568. +Rule    sol87    1987    only    -    Sep    13    11:56:10s 0:03:50 -
  19569. +Rule    sol87    1987    only    -    Sep    14    11:55:45s 0:04:15 -
  19570. +Rule    sol87    1987    only    -    Sep    15    11:55:25s 0:04:35 -
  19571. +Rule    sol87    1987    only    -    Sep    16    11:55:05s 0:04:55 -
  19572. +Rule    sol87    1987    only    -    Sep    17    11:54:45s 0:05:15 -
  19573. +Rule    sol87    1987    only    -    Sep    18    11:54:20s 0:05:40 -
  19574. +Rule    sol87    1987    only    -    Sep    19    11:54:00s 0:06:00 -
  19575. +Rule    sol87    1987    only    -    Sep    20    11:53:40s 0:06:20 -
  19576. +Rule    sol87    1987    only    -    Sep    21    11:53:15s 0:06:45 -
  19577. +Rule    sol87    1987    only    -    Sep    22    11:52:55s 0:07:05 -
  19578. +Rule    sol87    1987    only    -    Sep    23    11:52:35s 0:07:25 -
  19579. +Rule    sol87    1987    only    -    Sep    24    11:52:15s 0:07:45 -
  19580. +Rule    sol87    1987    only    -    Sep    25    11:51:55s 0:08:05 -
  19581. +Rule    sol87    1987    only    -    Sep    26    11:51:35s 0:08:25 -
  19582. +Rule    sol87    1987    only    -    Sep    27    11:51:10s 0:08:50 -
  19583. +Rule    sol87    1987    only    -    Sep    28    11:50:50s 0:09:10 -
  19584. +Rule    sol87    1987    only    -    Sep    29    11:50:30s 0:09:30 -
  19585. +Rule    sol87    1987    only    -    Sep    30    11:50:10s 0:09:50 -
  19586. +Rule    sol87    1987    only    -    Oct    1    11:49:50s 0:10:10 -
  19587. +Rule    sol87    1987    only    -    Oct    2    11:49:35s 0:10:25 -
  19588. +Rule    sol87    1987    only    -    Oct    3    11:49:15s 0:10:45 -
  19589. +Rule    sol87    1987    only    -    Oct    4    11:48:55s 0:11:05 -
  19590. +Rule    sol87    1987    only    -    Oct    5    11:48:35s 0:11:25 -
  19591. +Rule    sol87    1987    only    -    Oct    6    11:48:20s 0:11:40 -
  19592. +Rule    sol87    1987    only    -    Oct    7    11:48:00s 0:12:00 -
  19593. +Rule    sol87    1987    only    -    Oct    8    11:47:45s 0:12:15 -
  19594. +Rule    sol87    1987    only    -    Oct    9    11:47:25s 0:12:35 -
  19595. +Rule    sol87    1987    only    -    Oct    10    11:47:10s 0:12:50 -
  19596. +Rule    sol87    1987    only    -    Oct    11    11:46:55s 0:13:05 -
  19597. +Rule    sol87    1987    only    -    Oct    12    11:46:40s 0:13:20 -
  19598. +Rule    sol87    1987    only    -    Oct    13    11:46:25s 0:13:35 -
  19599. +Rule    sol87    1987    only    -    Oct    14    11:46:10s 0:13:50 -
  19600. +Rule    sol87    1987    only    -    Oct    15    11:45:55s 0:14:05 -
  19601. +Rule    sol87    1987    only    -    Oct    16    11:45:45s 0:14:15 -
  19602. +Rule    sol87    1987    only    -    Oct    17    11:45:30s 0:14:30 -
  19603. +Rule    sol87    1987    only    -    Oct    18    11:45:20s 0:14:40 -
  19604. +Rule    sol87    1987    only    -    Oct    19    11:45:05s 0:14:55 -
  19605. +Rule    sol87    1987    only    -    Oct    20    11:44:55s 0:15:05 -
  19606. +Rule    sol87    1987    only    -    Oct    21    11:44:45s 0:15:15 -
  19607. +Rule    sol87    1987    only    -    Oct    22    11:44:35s 0:15:25 -
  19608. +Rule    sol87    1987    only    -    Oct    23    11:44:25s 0:15:35 -
  19609. +Rule    sol87    1987    only    -    Oct    24    11:44:20s 0:15:40 -
  19610. +Rule    sol87    1987    only    -    Oct    25    11:44:10s 0:15:50 -
  19611. +Rule    sol87    1987    only    -    Oct    26    11:44:05s 0:15:55 -
  19612. +Rule    sol87    1987    only    -    Oct    27    11:43:55s 0:16:05 -
  19613. +Rule    sol87    1987    only    -    Oct    28    11:43:50s 0:16:10 -
  19614. +Rule    sol87    1987    only    -    Oct    29    11:43:45s 0:16:15 -
  19615. +Rule    sol87    1987    only    -    Oct    30    11:43:45s 0:16:15 -
  19616. +Rule    sol87    1987    only    -    Oct    31    11:43:40s 0:16:20 -
  19617. +Rule    sol87    1987    only    -    Nov    1    11:43:40s 0:16:20 -
  19618. +Rule    sol87    1987    only    -    Nov    2    11:43:35s 0:16:25 -
  19619. +Rule    sol87    1987    only    -    Nov    3    11:43:35s 0:16:25 -
  19620. +Rule    sol87    1987    only    -    Nov    4    11:43:35s 0:16:25 -
  19621. +Rule    sol87    1987    only    -    Nov    5    11:43:35s 0:16:25 -
  19622. +Rule    sol87    1987    only    -    Nov    6    11:43:40s 0:16:20 -
  19623. +Rule    sol87    1987    only    -    Nov    7    11:43:40s 0:16:20 -
  19624. +Rule    sol87    1987    only    -    Nov    8    11:43:45s 0:16:15 -
  19625. +Rule    sol87    1987    only    -    Nov    9    11:43:50s 0:16:10 -
  19626. +Rule    sol87    1987    only    -    Nov    10    11:43:55s 0:16:05 -
  19627. +Rule    sol87    1987    only    -    Nov    11    11:44:00s 0:16:00 -
  19628. +Rule    sol87    1987    only    -    Nov    12    11:44:05s 0:15:55 -
  19629. +Rule    sol87    1987    only    -    Nov    13    11:44:15s 0:15:45 -
  19630. +Rule    sol87    1987    only    -    Nov    14    11:44:20s 0:15:40 -
  19631. +Rule    sol87    1987    only    -    Nov    15    11:44:30s 0:15:30 -
  19632. +Rule    sol87    1987    only    -    Nov    16    11:44:40s 0:15:20 -
  19633. +Rule    sol87    1987    only    -    Nov    17    11:44:50s 0:15:10 -
  19634. +Rule    sol87    1987    only    -    Nov    18    11:45:05s 0:14:55 -
  19635. +Rule    sol87    1987    only    -    Nov    19    11:45:15s 0:14:45 -
  19636. +Rule    sol87    1987    only    -    Nov    20    11:45:30s 0:14:30 -
  19637. +Rule    sol87    1987    only    -    Nov    21    11:45:45s 0:14:15 -
  19638. +Rule    sol87    1987    only    -    Nov    22    11:46:00s 0:14:00 -
  19639. +Rule    sol87    1987    only    -    Nov    23    11:46:15s 0:13:45 -
  19640. +Rule    sol87    1987    only    -    Nov    24    11:46:30s 0:13:30 -
  19641. +Rule    sol87    1987    only    -    Nov    25    11:46:50s 0:13:10 -
  19642. +Rule    sol87    1987    only    -    Nov    26    11:47:10s 0:12:50 -
  19643. +Rule    sol87    1987    only    -    Nov    27    11:47:25s 0:12:35 -
  19644. +Rule    sol87    1987    only    -    Nov    28    11:47:45s 0:12:15 -
  19645. +Rule    sol87    1987    only    -    Nov    29    11:48:05s 0:11:55 -
  19646. +Rule    sol87    1987    only    -    Nov    30    11:48:30s 0:11:30 -
  19647. +Rule    sol87    1987    only    -    Dec    1    11:48:50s 0:11:10 -
  19648. +Rule    sol87    1987    only    -    Dec    2    11:49:10s 0:10:50 -
  19649. +Rule    sol87    1987    only    -    Dec    3    11:49:35s 0:10:25 -
  19650. +Rule    sol87    1987    only    -    Dec    4    11:50:00s 0:10:00 -
  19651. +Rule    sol87    1987    only    -    Dec    5    11:50:25s 0:09:35 -
  19652. +Rule    sol87    1987    only    -    Dec    6    11:50:50s 0:09:10 -
  19653. +Rule    sol87    1987    only    -    Dec    7    11:51:15s 0:08:45 -
  19654. +Rule    sol87    1987    only    -    Dec    8    11:51:40s 0:08:20 -
  19655. +Rule    sol87    1987    only    -    Dec    9    11:52:05s 0:07:55 -
  19656. +Rule    sol87    1987    only    -    Dec    10    11:52:30s 0:07:30 -
  19657. +Rule    sol87    1987    only    -    Dec    11    11:53:00s 0:07:00 -
  19658. +Rule    sol87    1987    only    -    Dec    12    11:53:25s 0:06:35 -
  19659. +Rule    sol87    1987    only    -    Dec    13    11:53:55s 0:06:05 -
  19660. +Rule    sol87    1987    only    -    Dec    14    11:54:25s 0:05:35 -
  19661. +Rule    sol87    1987    only    -    Dec    15    11:54:50s 0:05:10 -
  19662. +Rule    sol87    1987    only    -    Dec    16    11:55:20s 0:04:40 -
  19663. +Rule    sol87    1987    only    -    Dec    17    11:55:50s 0:04:10 -
  19664. +Rule    sol87    1987    only    -    Dec    18    11:56:20s 0:03:40 -
  19665. +Rule    sol87    1987    only    -    Dec    19    11:56:50s 0:03:10 -
  19666. +Rule    sol87    1987    only    -    Dec    20    11:57:20s 0:02:40 -
  19667. +Rule    sol87    1987    only    -    Dec    21    11:57:50s 0:02:10 -
  19668. +Rule    sol87    1987    only    -    Dec    22    11:58:20s 0:01:40 -
  19669. +Rule    sol87    1987    only    -    Dec    23    11:58:50s 0:01:10 -
  19670. +Rule    sol87    1987    only    -    Dec    24    11:59:20s 0:00:40 -
  19671. +Rule    sol87    1987    only    -    Dec    25    11:59:50s 0:00:10 -
  19672. +Rule    sol87    1987    only    -    Dec    26    12:00:20s -0:00:20 -
  19673. +Rule    sol87    1987    only    -    Dec    27    12:00:45s -0:00:45 -
  19674. +Rule    sol87    1987    only    -    Dec    28    12:01:15s -0:01:15 -
  19675. +Rule    sol87    1987    only    -    Dec    29    12:01:45s -0:01:45 -
  19676. +Rule    sol87    1987    only    -    Dec    30    12:02:15s -0:02:15 -
  19677. +Rule    sol87    1987    only    -    Dec    31    12:02:45s -0:02:45 -
  19678. +
  19679. +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
  19680. +# Before and after 1987, we'll operate on local mean solar time.
  19681. +
  19682. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  19683. +Zone    Mideast/Riyadh87    3:07:04    -        ??    1987
  19684. +                3:07:04    sol87        ??    1988
  19685. +                3:07:04    -        ??
  19686. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar88 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar88
  19687. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar88    Wed Dec 31 17:00:00 1969
  19688. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar88    Sat Sep 28 00:00:00 1996
  19689. @@ -0,0 +1,386 @@
  19690. +# @(#)solar88    4.2
  19691. +
  19692. +# Apparent noon times below are for Riyadh; they're a bit off for other places.
  19693. +# Times were computed using formulas in the U.S. Naval Observatory's
  19694. +# Almanac for Computers 1988; the formulas "will give EqT to an accuracy of
  19695. +# [plus or minus two] seconds during the current year."
  19696. +#
  19697. +# Rounding to the nearest five seconds results in fewer than
  19698. +# 256 different "time types"--a limit that's faced because time types are
  19699. +# stored on disk as unsigned chars.
  19700. +
  19701. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  19702. +Rule    sol88    1988    only    -    Jan    1    12:03:15s -0:03:15 -
  19703. +Rule    sol88    1988    only    -    Jan    2    12:03:40s -0:03:40 -
  19704. +Rule    sol88    1988    only    -    Jan    3    12:04:10s -0:04:10 -
  19705. +Rule    sol88    1988    only    -    Jan    4    12:04:40s -0:04:40 -
  19706. +Rule    sol88    1988    only    -    Jan    5    12:05:05s -0:05:05 -
  19707. +Rule    sol88    1988    only    -    Jan    6    12:05:30s -0:05:30 -
  19708. +Rule    sol88    1988    only    -    Jan    7    12:06:00s -0:06:00 -
  19709. +Rule    sol88    1988    only    -    Jan    8    12:06:25s -0:06:25 -
  19710. +Rule    sol88    1988    only    -    Jan    9    12:06:50s -0:06:50 -
  19711. +Rule    sol88    1988    only    -    Jan    10    12:07:15s -0:07:15 -
  19712. +Rule    sol88    1988    only    -    Jan    11    12:07:40s -0:07:40 -
  19713. +Rule    sol88    1988    only    -    Jan    12    12:08:05s -0:08:05 -
  19714. +Rule    sol88    1988    only    -    Jan    13    12:08:25s -0:08:25 -
  19715. +Rule    sol88    1988    only    -    Jan    14    12:08:50s -0:08:50 -
  19716. +Rule    sol88    1988    only    -    Jan    15    12:09:10s -0:09:10 -
  19717. +Rule    sol88    1988    only    -    Jan    16    12:09:30s -0:09:30 -
  19718. +Rule    sol88    1988    only    -    Jan    17    12:09:50s -0:09:50 -
  19719. +Rule    sol88    1988    only    -    Jan    18    12:10:10s -0:10:10 -
  19720. +Rule    sol88    1988    only    -    Jan    19    12:10:30s -0:10:30 -
  19721. +Rule    sol88    1988    only    -    Jan    20    12:10:50s -0:10:50 -
  19722. +Rule    sol88    1988    only    -    Jan    21    12:11:05s -0:11:05 -
  19723. +Rule    sol88    1988    only    -    Jan    22    12:11:25s -0:11:25 -
  19724. +Rule    sol88    1988    only    -    Jan    23    12:11:40s -0:11:40 -
  19725. +Rule    sol88    1988    only    -    Jan    24    12:11:55s -0:11:55 -
  19726. +Rule    sol88    1988    only    -    Jan    25    12:12:10s -0:12:10 -
  19727. +Rule    sol88    1988    only    -    Jan    26    12:12:25s -0:12:25 -
  19728. +Rule    sol88    1988    only    -    Jan    27    12:12:40s -0:12:40 -
  19729. +Rule    sol88    1988    only    -    Jan    28    12:12:50s -0:12:50 -
  19730. +Rule    sol88    1988    only    -    Jan    29    12:13:00s -0:13:00 -
  19731. +Rule    sol88    1988    only    -    Jan    30    12:13:10s -0:13:10 -
  19732. +Rule    sol88    1988    only    -    Jan    31    12:13:20s -0:13:20 -
  19733. +Rule    sol88    1988    only    -    Feb    1    12:13:30s -0:13:30 -
  19734. +Rule    sol88    1988    only    -    Feb    2    12:13:40s -0:13:40 -
  19735. +Rule    sol88    1988    only    -    Feb    3    12:13:45s -0:13:45 -
  19736. +Rule    sol88    1988    only    -    Feb    4    12:13:55s -0:13:55 -
  19737. +Rule    sol88    1988    only    -    Feb    5    12:14:00s -0:14:00 -
  19738. +Rule    sol88    1988    only    -    Feb    6    12:14:05s -0:14:05 -
  19739. +Rule    sol88    1988    only    -    Feb    7    12:14:10s -0:14:10 -
  19740. +Rule    sol88    1988    only    -    Feb    8    12:14:10s -0:14:10 -
  19741. +Rule    sol88    1988    only    -    Feb    9    12:14:15s -0:14:15 -
  19742. +Rule    sol88    1988    only    -    Feb    10    12:14:15s -0:14:15 -
  19743. +Rule    sol88    1988    only    -    Feb    11    12:14:15s -0:14:15 -
  19744. +Rule    sol88    1988    only    -    Feb    12    12:14:15s -0:14:15 -
  19745. +Rule    sol88    1988    only    -    Feb    13    12:14:15s -0:14:15 -
  19746. +Rule    sol88    1988    only    -    Feb    14    12:14:15s -0:14:15 -
  19747. +Rule    sol88    1988    only    -    Feb    15    12:14:10s -0:14:10 -
  19748. +Rule    sol88    1988    only    -    Feb    16    12:14:10s -0:14:10 -
  19749. +Rule    sol88    1988    only    -    Feb    17    12:14:05s -0:14:05 -
  19750. +Rule    sol88    1988    only    -    Feb    18    12:14:00s -0:14:00 -
  19751. +Rule    sol88    1988    only    -    Feb    19    12:13:55s -0:13:55 -
  19752. +Rule    sol88    1988    only    -    Feb    20    12:13:50s -0:13:50 -
  19753. +Rule    sol88    1988    only    -    Feb    21    12:13:45s -0:13:45 -
  19754. +Rule    sol88    1988    only    -    Feb    22    12:13:40s -0:13:40 -
  19755. +Rule    sol88    1988    only    -    Feb    23    12:13:30s -0:13:30 -
  19756. +Rule    sol88    1988    only    -    Feb    24    12:13:20s -0:13:20 -
  19757. +Rule    sol88    1988    only    -    Feb    25    12:13:15s -0:13:15 -
  19758. +Rule    sol88    1988    only    -    Feb    26    12:13:05s -0:13:05 -
  19759. +Rule    sol88    1988    only    -    Feb    27    12:12:55s -0:12:55 -
  19760. +Rule    sol88    1988    only    -    Feb    28    12:12:45s -0:12:45 -
  19761. +Rule    sol88    1988    only    -    Feb    29    12:12:30s -0:12:30 -
  19762. +Rule    sol88    1988    only    -    Mar    1    12:12:20s -0:12:20 -
  19763. +Rule    sol88    1988    only    -    Mar    2    12:12:10s -0:12:10 -
  19764. +Rule    sol88    1988    only    -    Mar    3    12:11:55s -0:11:55 -
  19765. +Rule    sol88    1988    only    -    Mar    4    12:11:45s -0:11:45 -
  19766. +Rule    sol88    1988    only    -    Mar    5    12:11:30s -0:11:30 -
  19767. +Rule    sol88    1988    only    -    Mar    6    12:11:15s -0:11:15 -
  19768. +Rule    sol88    1988    only    -    Mar    7    12:11:00s -0:11:00 -
  19769. +Rule    sol88    1988    only    -    Mar    8    12:10:45s -0:10:45 -
  19770. +Rule    sol88    1988    only    -    Mar    9    12:10:30s -0:10:30 -
  19771. +Rule    sol88    1988    only    -    Mar    10    12:10:15s -0:10:15 -
  19772. +Rule    sol88    1988    only    -    Mar    11    12:10:00s -0:10:00 -
  19773. +Rule    sol88    1988    only    -    Mar    12    12:09:45s -0:09:45 -
  19774. +Rule    sol88    1988    only    -    Mar    13    12:09:30s -0:09:30 -
  19775. +Rule    sol88    1988    only    -    Mar    14    12:09:10s -0:09:10 -
  19776. +Rule    sol88    1988    only    -    Mar    15    12:08:55s -0:08:55 -
  19777. +Rule    sol88    1988    only    -    Mar    16    12:08:40s -0:08:40 -
  19778. +Rule    sol88    1988    only    -    Mar    17    12:08:20s -0:08:20 -
  19779. +Rule    sol88    1988    only    -    Mar    18    12:08:05s -0:08:05 -
  19780. +Rule    sol88    1988    only    -    Mar    19    12:07:45s -0:07:45 -
  19781. +Rule    sol88    1988    only    -    Mar    20    12:07:30s -0:07:30 -
  19782. +Rule    sol88    1988    only    -    Mar    21    12:07:10s -0:07:10 -
  19783. +Rule    sol88    1988    only    -    Mar    22    12:06:50s -0:06:50 -
  19784. +Rule    sol88    1988    only    -    Mar    23    12:06:35s -0:06:35 -
  19785. +Rule    sol88    1988    only    -    Mar    24    12:06:15s -0:06:15 -
  19786. +Rule    sol88    1988    only    -    Mar    25    12:06:00s -0:06:00 -
  19787. +Rule    sol88    1988    only    -    Mar    26    12:05:40s -0:05:40 -
  19788. +Rule    sol88    1988    only    -    Mar    27    12:05:20s -0:05:20 -
  19789. +Rule    sol88    1988    only    -    Mar    28    12:05:05s -0:05:05 -
  19790. +Rule    sol88    1988    only    -    Mar    29    12:04:45s -0:04:45 -
  19791. +Rule    sol88    1988    only    -    Mar    30    12:04:25s -0:04:25 -
  19792. +Rule    sol88    1988    only    -    Mar    31    12:04:10s -0:04:10 -
  19793. +Rule    sol88    1988    only    -    Apr    1    12:03:50s -0:03:50 -
  19794. +Rule    sol88    1988    only    -    Apr    2    12:03:35s -0:03:35 -
  19795. +Rule    sol88    1988    only    -    Apr    3    12:03:15s -0:03:15 -
  19796. +Rule    sol88    1988    only    -    Apr    4    12:03:00s -0:03:00 -
  19797. +Rule    sol88    1988    only    -    Apr    5    12:02:40s -0:02:40 -
  19798. +Rule    sol88    1988    only    -    Apr    6    12:02:25s -0:02:25 -
  19799. +Rule    sol88    1988    only    -    Apr    7    12:02:05s -0:02:05 -
  19800. +Rule    sol88    1988    only    -    Apr    8    12:01:50s -0:01:50 -
  19801. +Rule    sol88    1988    only    -    Apr    9    12:01:35s -0:01:35 -
  19802. +Rule    sol88    1988    only    -    Apr    10    12:01:15s -0:01:15 -
  19803. +Rule    sol88    1988    only    -    Apr    11    12:01:00s -0:01:00 -
  19804. +Rule    sol88    1988    only    -    Apr    12    12:00:45s -0:00:45 -
  19805. +Rule    sol88    1988    only    -    Apr    13    12:00:30s -0:00:30 -
  19806. +Rule    sol88    1988    only    -    Apr    14    12:00:15s -0:00:15 -
  19807. +Rule    sol88    1988    only    -    Apr    15    12:00:00s 0:00:00 -
  19808. +Rule    sol88    1988    only    -    Apr    16    11:59:45s 0:00:15 -
  19809. +Rule    sol88    1988    only    -    Apr    17    11:59:30s 0:00:30 -
  19810. +Rule    sol88    1988    only    -    Apr    18    11:59:20s 0:00:40 -
  19811. +Rule    sol88    1988    only    -    Apr    19    11:59:05s 0:00:55 -
  19812. +Rule    sol88    1988    only    -    Apr    20    11:58:55s 0:01:05 -
  19813. +Rule    sol88    1988    only    -    Apr    21    11:58:40s 0:01:20 -
  19814. +Rule    sol88    1988    only    -    Apr    22    11:58:30s 0:01:30 -
  19815. +Rule    sol88    1988    only    -    Apr    23    11:58:15s 0:01:45 -
  19816. +Rule    sol88    1988    only    -    Apr    24    11:58:05s 0:01:55 -
  19817. +Rule    sol88    1988    only    -    Apr    25    11:57:55s 0:02:05 -
  19818. +Rule    sol88    1988    only    -    Apr    26    11:57:45s 0:02:15 -
  19819. +Rule    sol88    1988    only    -    Apr    27    11:57:35s 0:02:25 -
  19820. +Rule    sol88    1988    only    -    Apr    28    11:57:30s 0:02:30 -
  19821. +Rule    sol88    1988    only    -    Apr    29    11:57:20s 0:02:40 -
  19822. +Rule    sol88    1988    only    -    Apr    30    11:57:10s 0:02:50 -
  19823. +Rule    sol88    1988    only    -    May    1    11:57:05s 0:02:55 -
  19824. +Rule    sol88    1988    only    -    May    2    11:56:55s 0:03:05 -
  19825. +Rule    sol88    1988    only    -    May    3    11:56:50s 0:03:10 -
  19826. +Rule    sol88    1988    only    -    May    4    11:56:45s 0:03:15 -
  19827. +Rule    sol88    1988    only    -    May    5    11:56:40s 0:03:20 -
  19828. +Rule    sol88    1988    only    -    May    6    11:56:35s 0:03:25 -
  19829. +Rule    sol88    1988    only    -    May    7    11:56:30s 0:03:30 -
  19830. +Rule    sol88    1988    only    -    May    8    11:56:25s 0:03:35 -
  19831. +Rule    sol88    1988    only    -    May    9    11:56:25s 0:03:35 -
  19832. +Rule    sol88    1988    only    -    May    10    11:56:20s 0:03:40 -
  19833. +Rule    sol88    1988    only    -    May    11    11:56:20s 0:03:40 -
  19834. +Rule    sol88    1988    only    -    May    12    11:56:20s 0:03:40 -
  19835. +Rule    sol88    1988    only    -    May    13    11:56:20s 0:03:40 -
  19836. +Rule    sol88    1988    only    -    May    14    11:56:20s 0:03:40 -
  19837. +Rule    sol88    1988    only    -    May    15    11:56:20s 0:03:40 -
  19838. +Rule    sol88    1988    only    -    May    16    11:56:20s 0:03:40 -
  19839. +Rule    sol88    1988    only    -    May    17    11:56:20s 0:03:40 -
  19840. +Rule    sol88    1988    only    -    May    18    11:56:25s 0:03:35 -
  19841. +Rule    sol88    1988    only    -    May    19    11:56:25s 0:03:35 -
  19842. +Rule    sol88    1988    only    -    May    20    11:56:30s 0:03:30 -
  19843. +Rule    sol88    1988    only    -    May    21    11:56:35s 0:03:25 -
  19844. +Rule    sol88    1988    only    -    May    22    11:56:40s 0:03:20 -
  19845. +Rule    sol88    1988    only    -    May    23    11:56:45s 0:03:15 -
  19846. +Rule    sol88    1988    only    -    May    24    11:56:50s 0:03:10 -
  19847. +Rule    sol88    1988    only    -    May    25    11:56:55s 0:03:05 -
  19848. +Rule    sol88    1988    only    -    May    26    11:57:00s 0:03:00 -
  19849. +Rule    sol88    1988    only    -    May    27    11:57:05s 0:02:55 -
  19850. +Rule    sol88    1988    only    -    May    28    11:57:15s 0:02:45 -
  19851. +Rule    sol88    1988    only    -    May    29    11:57:20s 0:02:40 -
  19852. +Rule    sol88    1988    only    -    May    30    11:57:30s 0:02:30 -
  19853. +Rule    sol88    1988    only    -    May    31    11:57:40s 0:02:20 -
  19854. +Rule    sol88    1988    only    -    Jun    1    11:57:50s 0:02:10 -
  19855. +Rule    sol88    1988    only    -    Jun    2    11:57:55s 0:02:05 -
  19856. +Rule    sol88    1988    only    -    Jun    3    11:58:05s 0:01:55 -
  19857. +Rule    sol88    1988    only    -    Jun    4    11:58:15s 0:01:45 -
  19858. +Rule    sol88    1988    only    -    Jun    5    11:58:30s 0:01:30 -
  19859. +Rule    sol88    1988    only    -    Jun    6    11:58:40s 0:01:20 -
  19860. +Rule    sol88    1988    only    -    Jun    7    11:58:50s 0:01:10 -
  19861. +Rule    sol88    1988    only    -    Jun    8    11:59:00s 0:01:00 -
  19862. +Rule    sol88    1988    only    -    Jun    9    11:59:15s 0:00:45 -
  19863. +Rule    sol88    1988    only    -    Jun    10    11:59:25s 0:00:35 -
  19864. +Rule    sol88    1988    only    -    Jun    11    11:59:35s 0:00:25 -
  19865. +Rule    sol88    1988    only    -    Jun    12    11:59:50s 0:00:10 -
  19866. +Rule    sol88    1988    only    -    Jun    13    12:00:00s 0:00:00 -
  19867. +Rule    sol88    1988    only    -    Jun    14    12:00:15s -0:00:15 -
  19868. +Rule    sol88    1988    only    -    Jun    15    12:00:25s -0:00:25 -
  19869. +Rule    sol88    1988    only    -    Jun    16    12:00:40s -0:00:40 -
  19870. +Rule    sol88    1988    only    -    Jun    17    12:00:55s -0:00:55 -
  19871. +Rule    sol88    1988    only    -    Jun    18    12:01:05s -0:01:05 -
  19872. +Rule    sol88    1988    only    -    Jun    19    12:01:20s -0:01:20 -
  19873. +Rule    sol88    1988    only    -    Jun    20    12:01:30s -0:01:30 -
  19874. +Rule    sol88    1988    only    -    Jun    21    12:01:45s -0:01:45 -
  19875. +Rule    sol88    1988    only    -    Jun    22    12:02:00s -0:02:00 -
  19876. +Rule    sol88    1988    only    -    Jun    23    12:02:10s -0:02:10 -
  19877. +Rule    sol88    1988    only    -    Jun    24    12:02:25s -0:02:25 -
  19878. +Rule    sol88    1988    only    -    Jun    25    12:02:35s -0:02:35 -
  19879. +Rule    sol88    1988    only    -    Jun    26    12:02:50s -0:02:50 -
  19880. +Rule    sol88    1988    only    -    Jun    27    12:03:00s -0:03:00 -
  19881. +Rule    sol88    1988    only    -    Jun    28    12:03:15s -0:03:15 -
  19882. +Rule    sol88    1988    only    -    Jun    29    12:03:25s -0:03:25 -
  19883. +Rule    sol88    1988    only    -    Jun    30    12:03:40s -0:03:40 -
  19884. +Rule    sol88    1988    only    -    Jul    1    12:03:50s -0:03:50 -
  19885. +Rule    sol88    1988    only    -    Jul    2    12:04:00s -0:04:00 -
  19886. +Rule    sol88    1988    only    -    Jul    3    12:04:10s -0:04:10 -
  19887. +Rule    sol88    1988    only    -    Jul    4    12:04:25s -0:04:25 -
  19888. +Rule    sol88    1988    only    -    Jul    5    12:04:35s -0:04:35 -
  19889. +Rule    sol88    1988    only    -    Jul    6    12:04:45s -0:04:45 -
  19890. +Rule    sol88    1988    only    -    Jul    7    12:04:55s -0:04:55 -
  19891. +Rule    sol88    1988    only    -    Jul    8    12:05:05s -0:05:05 -
  19892. +Rule    sol88    1988    only    -    Jul    9    12:05:10s -0:05:10 -
  19893. +Rule    sol88    1988    only    -    Jul    10    12:05:20s -0:05:20 -
  19894. +Rule    sol88    1988    only    -    Jul    11    12:05:30s -0:05:30 -
  19895. +Rule    sol88    1988    only    -    Jul    12    12:05:35s -0:05:35 -
  19896. +Rule    sol88    1988    only    -    Jul    13    12:05:45s -0:05:45 -
  19897. +Rule    sol88    1988    only    -    Jul    14    12:05:50s -0:05:50 -
  19898. +Rule    sol88    1988    only    -    Jul    15    12:05:55s -0:05:55 -
  19899. +Rule    sol88    1988    only    -    Jul    16    12:06:00s -0:06:00 -
  19900. +Rule    sol88    1988    only    -    Jul    17    12:06:05s -0:06:05 -
  19901. +Rule    sol88    1988    only    -    Jul    18    12:06:10s -0:06:10 -
  19902. +Rule    sol88    1988    only    -    Jul    19    12:06:15s -0:06:15 -
  19903. +Rule    sol88    1988    only    -    Jul    20    12:06:20s -0:06:20 -
  19904. +Rule    sol88    1988    only    -    Jul    21    12:06:25s -0:06:25 -
  19905. +Rule    sol88    1988    only    -    Jul    22    12:06:25s -0:06:25 -
  19906. +Rule    sol88    1988    only    -    Jul    23    12:06:25s -0:06:25 -
  19907. +Rule    sol88    1988    only    -    Jul    24    12:06:30s -0:06:30 -
  19908. +Rule    sol88    1988    only    -    Jul    25    12:06:30s -0:06:30 -
  19909. +Rule    sol88    1988    only    -    Jul    26    12:06:30s -0:06:30 -
  19910. +Rule    sol88    1988    only    -    Jul    27    12:06:30s -0:06:30 -
  19911. +Rule    sol88    1988    only    -    Jul    28    12:06:30s -0:06:30 -
  19912. +Rule    sol88    1988    only    -    Jul    29    12:06:25s -0:06:25 -
  19913. +Rule    sol88    1988    only    -    Jul    30    12:06:25s -0:06:25 -
  19914. +Rule    sol88    1988    only    -    Jul    31    12:06:20s -0:06:20 -
  19915. +Rule    sol88    1988    only    -    Aug    1    12:06:15s -0:06:15 -
  19916. +Rule    sol88    1988    only    -    Aug    2    12:06:15s -0:06:15 -
  19917. +Rule    sol88    1988    only    -    Aug    3    12:06:10s -0:06:10 -
  19918. +Rule    sol88    1988    only    -    Aug    4    12:06:05s -0:06:05 -
  19919. +Rule    sol88    1988    only    -    Aug    5    12:05:55s -0:05:55 -
  19920. +Rule    sol88    1988    only    -    Aug    6    12:05:50s -0:05:50 -
  19921. +Rule    sol88    1988    only    -    Aug    7    12:05:45s -0:05:45 -
  19922. +Rule    sol88    1988    only    -    Aug    8    12:05:35s -0:05:35 -
  19923. +Rule    sol88    1988    only    -    Aug    9    12:05:25s -0:05:25 -
  19924. +Rule    sol88    1988    only    -    Aug    10    12:05:20s -0:05:20 -
  19925. +Rule    sol88    1988    only    -    Aug    11    12:05:10s -0:05:10 -
  19926. +Rule    sol88    1988    only    -    Aug    12    12:05:00s -0:05:00 -
  19927. +Rule    sol88    1988    only    -    Aug    13    12:04:50s -0:04:50 -
  19928. +Rule    sol88    1988    only    -    Aug    14    12:04:35s -0:04:35 -
  19929. +Rule    sol88    1988    only    -    Aug    15    12:04:25s -0:04:25 -
  19930. +Rule    sol88    1988    only    -    Aug    16    12:04:15s -0:04:15 -
  19931. +Rule    sol88    1988    only    -    Aug    17    12:04:00s -0:04:00 -
  19932. +Rule    sol88    1988    only    -    Aug    18    12:03:50s -0:03:50 -
  19933. +Rule    sol88    1988    only    -    Aug    19    12:03:35s -0:03:35 -
  19934. +Rule    sol88    1988    only    -    Aug    20    12:03:20s -0:03:20 -
  19935. +Rule    sol88    1988    only    -    Aug    21    12:03:05s -0:03:05 -
  19936. +Rule    sol88    1988    only    -    Aug    22    12:02:50s -0:02:50 -
  19937. +Rule    sol88    1988    only    -    Aug    23    12:02:35s -0:02:35 -
  19938. +Rule    sol88    1988    only    -    Aug    24    12:02:20s -0:02:20 -
  19939. +Rule    sol88    1988    only    -    Aug    25    12:02:00s -0:02:00 -
  19940. +Rule    sol88    1988    only    -    Aug    26    12:01:45s -0:01:45 -
  19941. +Rule    sol88    1988    only    -    Aug    27    12:01:30s -0:01:30 -
  19942. +Rule    sol88    1988    only    -    Aug    28    12:01:10s -0:01:10 -
  19943. +Rule    sol88    1988    only    -    Aug    29    12:00:50s -0:00:50 -
  19944. +Rule    sol88    1988    only    -    Aug    30    12:00:35s -0:00:35 -
  19945. +Rule    sol88    1988    only    -    Aug    31    12:00:15s -0:00:15 -
  19946. +Rule    sol88    1988    only    -    Sep    1    11:59:55s 0:00:05 -
  19947. +Rule    sol88    1988    only    -    Sep    2    11:59:35s 0:00:25 -
  19948. +Rule    sol88    1988    only    -    Sep    3    11:59:20s 0:00:40 -
  19949. +Rule    sol88    1988    only    -    Sep    4    11:59:00s 0:01:00 -
  19950. +Rule    sol88    1988    only    -    Sep    5    11:58:40s 0:01:20 -
  19951. +Rule    sol88    1988    only    -    Sep    6    11:58:20s 0:01:40 -
  19952. +Rule    sol88    1988    only    -    Sep    7    11:58:00s 0:02:00 -
  19953. +Rule    sol88    1988    only    -    Sep    8    11:57:35s 0:02:25 -
  19954. +Rule    sol88    1988    only    -    Sep    9    11:57:15s 0:02:45 -
  19955. +Rule    sol88    1988    only    -    Sep    10    11:56:55s 0:03:05 -
  19956. +Rule    sol88    1988    only    -    Sep    11    11:56:35s 0:03:25 -
  19957. +Rule    sol88    1988    only    -    Sep    12    11:56:15s 0:03:45 -
  19958. +Rule    sol88    1988    only    -    Sep    13    11:55:50s 0:04:10 -
  19959. +Rule    sol88    1988    only    -    Sep    14    11:55:30s 0:04:30 -
  19960. +Rule    sol88    1988    only    -    Sep    15    11:55:10s 0:04:50 -
  19961. +Rule    sol88    1988    only    -    Sep    16    11:54:50s 0:05:10 -
  19962. +Rule    sol88    1988    only    -    Sep    17    11:54:25s 0:05:35 -
  19963. +Rule    sol88    1988    only    -    Sep    18    11:54:05s 0:05:55 -
  19964. +Rule    sol88    1988    only    -    Sep    19    11:53:45s 0:06:15 -
  19965. +Rule    sol88    1988    only    -    Sep    20    11:53:25s 0:06:35 -
  19966. +Rule    sol88    1988    only    -    Sep    21    11:53:00s 0:07:00 -
  19967. +Rule    sol88    1988    only    -    Sep    22    11:52:40s 0:07:20 -
  19968. +Rule    sol88    1988    only    -    Sep    23    11:52:20s 0:07:40 -
  19969. +Rule    sol88    1988    only    -    Sep    24    11:52:00s 0:08:00 -
  19970. +Rule    sol88    1988    only    -    Sep    25    11:51:40s 0:08:20 -
  19971. +Rule    sol88    1988    only    -    Sep    26    11:51:15s 0:08:45 -
  19972. +Rule    sol88    1988    only    -    Sep    27    11:50:55s 0:09:05 -
  19973. +Rule    sol88    1988    only    -    Sep    28    11:50:35s 0:09:25 -
  19974. +Rule    sol88    1988    only    -    Sep    29    11:50:15s 0:09:45 -
  19975. +Rule    sol88    1988    only    -    Sep    30    11:49:55s 0:10:05 -
  19976. +Rule    sol88    1988    only    -    Oct    1    11:49:35s 0:10:25 -
  19977. +Rule    sol88    1988    only    -    Oct    2    11:49:20s 0:10:40 -
  19978. +Rule    sol88    1988    only    -    Oct    3    11:49:00s 0:11:00 -
  19979. +Rule    sol88    1988    only    -    Oct    4    11:48:40s 0:11:20 -
  19980. +Rule    sol88    1988    only    -    Oct    5    11:48:25s 0:11:35 -
  19981. +Rule    sol88    1988    only    -    Oct    6    11:48:05s 0:11:55 -
  19982. +Rule    sol88    1988    only    -    Oct    7    11:47:50s 0:12:10 -
  19983. +Rule    sol88    1988    only    -    Oct    8    11:47:30s 0:12:30 -
  19984. +Rule    sol88    1988    only    -    Oct    9    11:47:15s 0:12:45 -
  19985. +Rule    sol88    1988    only    -    Oct    10    11:47:00s 0:13:00 -
  19986. +Rule    sol88    1988    only    -    Oct    11    11:46:45s 0:13:15 -
  19987. +Rule    sol88    1988    only    -    Oct    12    11:46:30s 0:13:30 -
  19988. +Rule    sol88    1988    only    -    Oct    13    11:46:15s 0:13:45 -
  19989. +Rule    sol88    1988    only    -    Oct    14    11:46:00s 0:14:00 -
  19990. +Rule    sol88    1988    only    -    Oct    15    11:45:45s 0:14:15 -
  19991. +Rule    sol88    1988    only    -    Oct    16    11:45:35s 0:14:25 -
  19992. +Rule    sol88    1988    only    -    Oct    17    11:45:20s 0:14:40 -
  19993. +Rule    sol88    1988    only    -    Oct    18    11:45:10s 0:14:50 -
  19994. +Rule    sol88    1988    only    -    Oct    19    11:45:00s 0:15:00 -
  19995. +Rule    sol88    1988    only    -    Oct    20    11:44:45s 0:15:15 -
  19996. +Rule    sol88    1988    only    -    Oct    21    11:44:40s 0:15:20 -
  19997. +Rule    sol88    1988    only    -    Oct    22    11:44:30s 0:15:30 -
  19998. +Rule    sol88    1988    only    -    Oct    23    11:44:20s 0:15:40 -
  19999. +Rule    sol88    1988    only    -    Oct    24    11:44:10s 0:15:50 -
  20000. +Rule    sol88    1988    only    -    Oct    25    11:44:05s 0:15:55 -
  20001. +Rule    sol88    1988    only    -    Oct    26    11:44:00s 0:16:00 -
  20002. +Rule    sol88    1988    only    -    Oct    27    11:43:55s 0:16:05 -
  20003. +Rule    sol88    1988    only    -    Oct    28    11:43:50s 0:16:10 -
  20004. +Rule    sol88    1988    only    -    Oct    29    11:43:45s 0:16:15 -
  20005. +Rule    sol88    1988    only    -    Oct    30    11:43:40s 0:16:20 -
  20006. +Rule    sol88    1988    only    -    Oct    31    11:43:40s 0:16:20 -
  20007. +Rule    sol88    1988    only    -    Nov    1    11:43:35s 0:16:25 -
  20008. +Rule    sol88    1988    only    -    Nov    2    11:43:35s 0:16:25 -
  20009. +Rule    sol88    1988    only    -    Nov    3    11:43:35s 0:16:25 -
  20010. +Rule    sol88    1988    only    -    Nov    4    11:43:35s 0:16:25 -
  20011. +Rule    sol88    1988    only    -    Nov    5    11:43:40s 0:16:20 -
  20012. +Rule    sol88    1988    only    -    Nov    6    11:43:40s 0:16:20 -
  20013. +Rule    sol88    1988    only    -    Nov    7    11:43:45s 0:16:15 -
  20014. +Rule    sol88    1988    only    -    Nov    8    11:43:45s 0:16:15 -
  20015. +Rule    sol88    1988    only    -    Nov    9    11:43:50s 0:16:10 -
  20016. +Rule    sol88    1988    only    -    Nov    10    11:44:00s 0:16:00 -
  20017. +Rule    sol88    1988    only    -    Nov    11    11:44:05s 0:15:55 -
  20018. +Rule    sol88    1988    only    -    Nov    12    11:44:10s 0:15:50 -
  20019. +Rule    sol88    1988    only    -    Nov    13    11:44:20s 0:15:40 -
  20020. +Rule    sol88    1988    only    -    Nov    14    11:44:30s 0:15:30 -
  20021. +Rule    sol88    1988    only    -    Nov    15    11:44:40s 0:15:20 -
  20022. +Rule    sol88    1988    only    -    Nov    16    11:44:50s 0:15:10 -
  20023. +Rule    sol88    1988    only    -    Nov    17    11:45:00s 0:15:00 -
  20024. +Rule    sol88    1988    only    -    Nov    18    11:45:15s 0:14:45 -
  20025. +Rule    sol88    1988    only    -    Nov    19    11:45:25s 0:14:35 -
  20026. +Rule    sol88    1988    only    -    Nov    20    11:45:40s 0:14:20 -
  20027. +Rule    sol88    1988    only    -    Nov    21    11:45:55s 0:14:05 -
  20028. +Rule    sol88    1988    only    -    Nov    22    11:46:10s 0:13:50 -
  20029. +Rule    sol88    1988    only    -    Nov    23    11:46:30s 0:13:30 -
  20030. +Rule    sol88    1988    only    -    Nov    24    11:46:45s 0:13:15 -
  20031. +Rule    sol88    1988    only    -    Nov    25    11:47:05s 0:12:55 -
  20032. +Rule    sol88    1988    only    -    Nov    26    11:47:20s 0:12:40 -
  20033. +Rule    sol88    1988    only    -    Nov    27    11:47:40s 0:12:20 -
  20034. +Rule    sol88    1988    only    -    Nov    28    11:48:00s 0:12:00 -
  20035. +Rule    sol88    1988    only    -    Nov    29    11:48:25s 0:11:35 -
  20036. +Rule    sol88    1988    only    -    Nov    30    11:48:45s 0:11:15 -
  20037. +Rule    sol88    1988    only    -    Dec    1    11:49:05s 0:10:55 -
  20038. +Rule    sol88    1988    only    -    Dec    2    11:49:30s 0:10:30 -
  20039. +Rule    sol88    1988    only    -    Dec    3    11:49:55s 0:10:05 -
  20040. +Rule    sol88    1988    only    -    Dec    4    11:50:15s 0:09:45 -
  20041. +Rule    sol88    1988    only    -    Dec    5    11:50:40s 0:09:20 -
  20042. +Rule    sol88    1988    only    -    Dec    6    11:51:05s 0:08:55 -
  20043. +Rule    sol88    1988    only    -    Dec    7    11:51:35s 0:08:25 -
  20044. +Rule    sol88    1988    only    -    Dec    8    11:52:00s 0:08:00 -
  20045. +Rule    sol88    1988    only    -    Dec    9    11:52:25s 0:07:35 -
  20046. +Rule    sol88    1988    only    -    Dec    10    11:52:55s 0:07:05 -
  20047. +Rule    sol88    1988    only    -    Dec    11    11:53:20s 0:06:40 -
  20048. +Rule    sol88    1988    only    -    Dec    12    11:53:50s 0:06:10 -
  20049. +Rule    sol88    1988    only    -    Dec    13    11:54:15s 0:05:45 -
  20050. +Rule    sol88    1988    only    -    Dec    14    11:54:45s 0:05:15 -
  20051. +Rule    sol88    1988    only    -    Dec    15    11:55:15s 0:04:45 -
  20052. +Rule    sol88    1988    only    -    Dec    16    11:55:45s 0:04:15 -
  20053. +Rule    sol88    1988    only    -    Dec    17    11:56:15s 0:03:45 -
  20054. +Rule    sol88    1988    only    -    Dec    18    11:56:40s 0:03:20 -
  20055. +Rule    sol88    1988    only    -    Dec    19    11:57:10s 0:02:50 -
  20056. +Rule    sol88    1988    only    -    Dec    20    11:57:40s 0:02:20 -
  20057. +Rule    sol88    1988    only    -    Dec    21    11:58:10s 0:01:50 -
  20058. +Rule    sol88    1988    only    -    Dec    22    11:58:40s 0:01:20 -
  20059. +Rule    sol88    1988    only    -    Dec    23    11:59:10s 0:00:50 -
  20060. +Rule    sol88    1988    only    -    Dec    24    11:59:40s 0:00:20 -
  20061. +Rule    sol88    1988    only    -    Dec    25    12:00:10s -0:00:10 -
  20062. +Rule    sol88    1988    only    -    Dec    26    12:00:40s -0:00:40 -
  20063. +Rule    sol88    1988    only    -    Dec    27    12:01:10s -0:01:10 -
  20064. +Rule    sol88    1988    only    -    Dec    28    12:01:40s -0:01:40 -
  20065. +Rule    sol88    1988    only    -    Dec    29    12:02:10s -0:02:10 -
  20066. +Rule    sol88    1988    only    -    Dec    30    12:02:35s -0:02:35 -
  20067. +Rule    sol88    1988    only    -    Dec    31    12:03:05s -0:03:05 -
  20068. +
  20069. +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
  20070. +# Before and after 1988, we'll operate on local mean solar time.
  20071. +
  20072. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  20073. +Zone    Mideast/Riyadh88    3:07:04    -        ??    1988
  20074. +                3:07:04    sol88        ??    1989
  20075. +                3:07:04    -        ??
  20076. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar89 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar89
  20077. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar89    Wed Dec 31 17:00:00 1969
  20078. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar89    Sat Sep 28 00:00:00 1996
  20079. @@ -0,0 +1,391 @@
  20080. +# @(#)solar89    1.3
  20081. +
  20082. +# Apparent noon times below are for Riyadh; they're a bit off for other places.
  20083. +# Times were computed using a formula provided by the U. S. Naval Observatory:
  20084. +#    eqt = -105.8 * sin(l) + 596.2 * sin(2 * l) + 4.4 * sin(3 * l)
  20085. +#        -12.7 * sin(4 * l) - 429.0 * cos(l) - 2.1 * cos (2 * l)
  20086. +#        + 19.3 * cos(3 * l);
  20087. +# where l is the "mean longitude of the Sun" given by
  20088. +#    l = 279.642 degrees + 0.985647 * d
  20089. +# and d is the interval in days from January 0, 0 hours Universal Time
  20090. +# (equaling the day of the year plus the fraction of a day from zero hours).
  20091. +# The accuracy of the formula is plus or minus three seconds.
  20092. +#
  20093. +# Rounding to the nearest five seconds results in fewer than
  20094. +# 256 different "time types"--a limit that's faced because time types are
  20095. +# stored on disk as unsigned chars.
  20096. +
  20097. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  20098. +Rule    sol89    1989    only    -    Jan    1    12:03:35s -0:03:35 -
  20099. +Rule    sol89    1989    only    -    Jan    2    12:04:05s -0:04:05 -
  20100. +Rule    sol89    1989    only    -    Jan    3    12:04:30s -0:04:30 -
  20101. +Rule    sol89    1989    only    -    Jan    4    12:05:00s -0:05:00 -
  20102. +Rule    sol89    1989    only    -    Jan    5    12:05:25s -0:05:25 -
  20103. +Rule    sol89    1989    only    -    Jan    6    12:05:50s -0:05:50 -
  20104. +Rule    sol89    1989    only    -    Jan    7    12:06:15s -0:06:15 -
  20105. +Rule    sol89    1989    only    -    Jan    8    12:06:45s -0:06:45 -
  20106. +Rule    sol89    1989    only    -    Jan    9    12:07:10s -0:07:10 -
  20107. +Rule    sol89    1989    only    -    Jan    10    12:07:35s -0:07:35 -
  20108. +Rule    sol89    1989    only    -    Jan    11    12:07:55s -0:07:55 -
  20109. +Rule    sol89    1989    only    -    Jan    12    12:08:20s -0:08:20 -
  20110. +Rule    sol89    1989    only    -    Jan    13    12:08:45s -0:08:45 -
  20111. +Rule    sol89    1989    only    -    Jan    14    12:09:05s -0:09:05 -
  20112. +Rule    sol89    1989    only    -    Jan    15    12:09:25s -0:09:25 -
  20113. +Rule    sol89    1989    only    -    Jan    16    12:09:45s -0:09:45 -
  20114. +Rule    sol89    1989    only    -    Jan    17    12:10:05s -0:10:05 -
  20115. +Rule    sol89    1989    only    -    Jan    18    12:10:25s -0:10:25 -
  20116. +Rule    sol89    1989    only    -    Jan    19    12:10:45s -0:10:45 -
  20117. +Rule    sol89    1989    only    -    Jan    20    12:11:05s -0:11:05 -
  20118. +Rule    sol89    1989    only    -    Jan    21    12:11:20s -0:11:20 -
  20119. +Rule    sol89    1989    only    -    Jan    22    12:11:35s -0:11:35 -
  20120. +Rule    sol89    1989    only    -    Jan    23    12:11:55s -0:11:55 -
  20121. +Rule    sol89    1989    only    -    Jan    24    12:12:10s -0:12:10 -
  20122. +Rule    sol89    1989    only    -    Jan    25    12:12:20s -0:12:20 -
  20123. +Rule    sol89    1989    only    -    Jan    26    12:12:35s -0:12:35 -
  20124. +Rule    sol89    1989    only    -    Jan    27    12:12:50s -0:12:50 -
  20125. +Rule    sol89    1989    only    -    Jan    28    12:13:00s -0:13:00 -
  20126. +Rule    sol89    1989    only    -    Jan    29    12:13:10s -0:13:10 -
  20127. +Rule    sol89    1989    only    -    Jan    30    12:13:20s -0:13:20 -
  20128. +Rule    sol89    1989    only    -    Jan    31    12:13:30s -0:13:30 -
  20129. +Rule    sol89    1989    only    -    Feb    1    12:13:40s -0:13:40 -
  20130. +Rule    sol89    1989    only    -    Feb    2    12:13:45s -0:13:45 -
  20131. +Rule    sol89    1989    only    -    Feb    3    12:13:55s -0:13:55 -
  20132. +Rule    sol89    1989    only    -    Feb    4    12:14:00s -0:14:00 -
  20133. +Rule    sol89    1989    only    -    Feb    5    12:14:05s -0:14:05 -
  20134. +Rule    sol89    1989    only    -    Feb    6    12:14:10s -0:14:10 -
  20135. +Rule    sol89    1989    only    -    Feb    7    12:14:10s -0:14:10 -
  20136. +Rule    sol89    1989    only    -    Feb    8    12:14:15s -0:14:15 -
  20137. +Rule    sol89    1989    only    -    Feb    9    12:14:15s -0:14:15 -
  20138. +Rule    sol89    1989    only    -    Feb    10    12:14:20s -0:14:20 -
  20139. +Rule    sol89    1989    only    -    Feb    11    12:14:20s -0:14:20 -
  20140. +Rule    sol89    1989    only    -    Feb    12    12:14:20s -0:14:20 -
  20141. +Rule    sol89    1989    only    -    Feb    13    12:14:15s -0:14:15 -
  20142. +Rule    sol89    1989    only    -    Feb    14    12:14:15s -0:14:15 -
  20143. +Rule    sol89    1989    only    -    Feb    15    12:14:10s -0:14:10 -
  20144. +Rule    sol89    1989    only    -    Feb    16    12:14:10s -0:14:10 -
  20145. +Rule    sol89    1989    only    -    Feb    17    12:14:05s -0:14:05 -
  20146. +Rule    sol89    1989    only    -    Feb    18    12:14:00s -0:14:00 -
  20147. +Rule    sol89    1989    only    -    Feb    19    12:13:55s -0:13:55 -
  20148. +Rule    sol89    1989    only    -    Feb    20    12:13:50s -0:13:50 -
  20149. +Rule    sol89    1989    only    -    Feb    21    12:13:40s -0:13:40 -
  20150. +Rule    sol89    1989    only    -    Feb    22    12:13:35s -0:13:35 -
  20151. +Rule    sol89    1989    only    -    Feb    23    12:13:25s -0:13:25 -
  20152. +Rule    sol89    1989    only    -    Feb    24    12:13:15s -0:13:15 -
  20153. +Rule    sol89    1989    only    -    Feb    25    12:13:05s -0:13:05 -
  20154. +Rule    sol89    1989    only    -    Feb    26    12:12:55s -0:12:55 -
  20155. +Rule    sol89    1989    only    -    Feb    27    12:12:45s -0:12:45 -
  20156. +Rule    sol89    1989    only    -    Feb    28    12:12:35s -0:12:35 -
  20157. +Rule    sol89    1989    only    -    Mar    1    12:12:25s -0:12:25 -
  20158. +Rule    sol89    1989    only    -    Mar    2    12:12:10s -0:12:10 -
  20159. +Rule    sol89    1989    only    -    Mar    3    12:12:00s -0:12:00 -
  20160. +Rule    sol89    1989    only    -    Mar    4    12:11:45s -0:11:45 -
  20161. +Rule    sol89    1989    only    -    Mar    5    12:11:35s -0:11:35 -
  20162. +Rule    sol89    1989    only    -    Mar    6    12:11:20s -0:11:20 -
  20163. +Rule    sol89    1989    only    -    Mar    7    12:11:05s -0:11:05 -
  20164. +Rule    sol89    1989    only    -    Mar    8    12:10:50s -0:10:50 -
  20165. +Rule    sol89    1989    only    -    Mar    9    12:10:35s -0:10:35 -
  20166. +Rule    sol89    1989    only    -    Mar    10    12:10:20s -0:10:20 -
  20167. +Rule    sol89    1989    only    -    Mar    11    12:10:05s -0:10:05 -
  20168. +Rule    sol89    1989    only    -    Mar    12    12:09:50s -0:09:50 -
  20169. +Rule    sol89    1989    only    -    Mar    13    12:09:30s -0:09:30 -
  20170. +Rule    sol89    1989    only    -    Mar    14    12:09:15s -0:09:15 -
  20171. +Rule    sol89    1989    only    -    Mar    15    12:09:00s -0:09:00 -
  20172. +Rule    sol89    1989    only    -    Mar    16    12:08:40s -0:08:40 -
  20173. +Rule    sol89    1989    only    -    Mar    17    12:08:25s -0:08:25 -
  20174. +Rule    sol89    1989    only    -    Mar    18    12:08:05s -0:08:05 -
  20175. +Rule    sol89    1989    only    -    Mar    19    12:07:50s -0:07:50 -
  20176. +Rule    sol89    1989    only    -    Mar    20    12:07:30s -0:07:30 -
  20177. +Rule    sol89    1989    only    -    Mar    21    12:07:15s -0:07:15 -
  20178. +Rule    sol89    1989    only    -    Mar    22    12:06:55s -0:06:55 -
  20179. +Rule    sol89    1989    only    -    Mar    23    12:06:35s -0:06:35 -
  20180. +Rule    sol89    1989    only    -    Mar    24    12:06:20s -0:06:20 -
  20181. +Rule    sol89    1989    only    -    Mar    25    12:06:00s -0:06:00 -
  20182. +Rule    sol89    1989    only    -    Mar    26    12:05:40s -0:05:40 -
  20183. +Rule    sol89    1989    only    -    Mar    27    12:05:25s -0:05:25 -
  20184. +Rule    sol89    1989    only    -    Mar    28    12:05:05s -0:05:05 -
  20185. +Rule    sol89    1989    only    -    Mar    29    12:04:50s -0:04:50 -
  20186. +Rule    sol89    1989    only    -    Mar    30    12:04:30s -0:04:30 -
  20187. +Rule    sol89    1989    only    -    Mar    31    12:04:10s -0:04:10 -
  20188. +Rule    sol89    1989    only    -    Apr    1    12:03:55s -0:03:55 -
  20189. +Rule    sol89    1989    only    -    Apr    2    12:03:35s -0:03:35 -
  20190. +Rule    sol89    1989    only    -    Apr    3    12:03:20s -0:03:20 -
  20191. +Rule    sol89    1989    only    -    Apr    4    12:03:00s -0:03:00 -
  20192. +Rule    sol89    1989    only    -    Apr    5    12:02:45s -0:02:45 -
  20193. +Rule    sol89    1989    only    -    Apr    6    12:02:25s -0:02:25 -
  20194. +Rule    sol89    1989    only    -    Apr    7    12:02:10s -0:02:10 -
  20195. +Rule    sol89    1989    only    -    Apr    8    12:01:50s -0:01:50 -
  20196. +Rule    sol89    1989    only    -    Apr    9    12:01:35s -0:01:35 -
  20197. +Rule    sol89    1989    only    -    Apr    10    12:01:20s -0:01:20 -
  20198. +Rule    sol89    1989    only    -    Apr    11    12:01:05s -0:01:05 -
  20199. +Rule    sol89    1989    only    -    Apr    12    12:00:50s -0:00:50 -
  20200. +Rule    sol89    1989    only    -    Apr    13    12:00:35s -0:00:35 -
  20201. +Rule    sol89    1989    only    -    Apr    14    12:00:20s -0:00:20 -
  20202. +Rule    sol89    1989    only    -    Apr    15    12:00:05s -0:00:05 -
  20203. +Rule    sol89    1989    only    -    Apr    16    11:59:50s 0:00:10 -
  20204. +Rule    sol89    1989    only    -    Apr    17    11:59:35s 0:00:25 -
  20205. +Rule    sol89    1989    only    -    Apr    18    11:59:20s 0:00:40 -
  20206. +Rule    sol89    1989    only    -    Apr    19    11:59:10s 0:00:50 -
  20207. +Rule    sol89    1989    only    -    Apr    20    11:58:55s 0:01:05 -
  20208. +Rule    sol89    1989    only    -    Apr    21    11:58:45s 0:01:15 -
  20209. +Rule    sol89    1989    only    -    Apr    22    11:58:30s 0:01:30 -
  20210. +Rule    sol89    1989    only    -    Apr    23    11:58:20s 0:01:40 -
  20211. +Rule    sol89    1989    only    -    Apr    24    11:58:10s 0:01:50 -
  20212. +Rule    sol89    1989    only    -    Apr    25    11:58:00s 0:02:00 -
  20213. +Rule    sol89    1989    only    -    Apr    26    11:57:50s 0:02:10 -
  20214. +Rule    sol89    1989    only    -    Apr    27    11:57:40s 0:02:20 -
  20215. +Rule    sol89    1989    only    -    Apr    28    11:57:30s 0:02:30 -
  20216. +Rule    sol89    1989    only    -    Apr    29    11:57:20s 0:02:40 -
  20217. +Rule    sol89    1989    only    -    Apr    30    11:57:15s 0:02:45 -
  20218. +Rule    sol89    1989    only    -    May    1    11:57:05s 0:02:55 -
  20219. +Rule    sol89    1989    only    -    May    2    11:57:00s 0:03:00 -
  20220. +Rule    sol89    1989    only    -    May    3    11:56:50s 0:03:10 -
  20221. +Rule    sol89    1989    only    -    May    4    11:56:45s 0:03:15 -
  20222. +Rule    sol89    1989    only    -    May    5    11:56:40s 0:03:20 -
  20223. +Rule    sol89    1989    only    -    May    6    11:56:35s 0:03:25 -
  20224. +Rule    sol89    1989    only    -    May    7    11:56:30s 0:03:30 -
  20225. +Rule    sol89    1989    only    -    May    8    11:56:30s 0:03:30 -
  20226. +Rule    sol89    1989    only    -    May    9    11:56:25s 0:03:35 -
  20227. +Rule    sol89    1989    only    -    May    10    11:56:25s 0:03:35 -
  20228. +Rule    sol89    1989    only    -    May    11    11:56:20s 0:03:40 -
  20229. +Rule    sol89    1989    only    -    May    12    11:56:20s 0:03:40 -
  20230. +Rule    sol89    1989    only    -    May    13    11:56:20s 0:03:40 -
  20231. +Rule    sol89    1989    only    -    May    14    11:56:20s 0:03:40 -
  20232. +Rule    sol89    1989    only    -    May    15    11:56:20s 0:03:40 -
  20233. +Rule    sol89    1989    only    -    May    16    11:56:20s 0:03:40 -
  20234. +Rule    sol89    1989    only    -    May    17    11:56:20s 0:03:40 -
  20235. +Rule    sol89    1989    only    -    May    18    11:56:25s 0:03:35 -
  20236. +Rule    sol89    1989    only    -    May    19    11:56:25s 0:03:35 -
  20237. +Rule    sol89    1989    only    -    May    20    11:56:30s 0:03:30 -
  20238. +Rule    sol89    1989    only    -    May    21    11:56:35s 0:03:25 -
  20239. +Rule    sol89    1989    only    -    May    22    11:56:35s 0:03:25 -
  20240. +Rule    sol89    1989    only    -    May    23    11:56:40s 0:03:20 -
  20241. +Rule    sol89    1989    only    -    May    24    11:56:45s 0:03:15 -
  20242. +Rule    sol89    1989    only    -    May    25    11:56:55s 0:03:05 -
  20243. +Rule    sol89    1989    only    -    May    26    11:57:00s 0:03:00 -
  20244. +Rule    sol89    1989    only    -    May    27    11:57:05s 0:02:55 -
  20245. +Rule    sol89    1989    only    -    May    28    11:57:15s 0:02:45 -
  20246. +Rule    sol89    1989    only    -    May    29    11:57:20s 0:02:40 -
  20247. +Rule    sol89    1989    only    -    May    30    11:57:30s 0:02:30 -
  20248. +Rule    sol89    1989    only    -    May    31    11:57:35s 0:02:25 -
  20249. +Rule    sol89    1989    only    -    Jun    1    11:57:45s 0:02:15 -
  20250. +Rule    sol89    1989    only    -    Jun    2    11:57:55s 0:02:05 -
  20251. +Rule    sol89    1989    only    -    Jun    3    11:58:05s 0:01:55 -
  20252. +Rule    sol89    1989    only    -    Jun    4    11:58:15s 0:01:45 -
  20253. +Rule    sol89    1989    only    -    Jun    5    11:58:25s 0:01:35 -
  20254. +Rule    sol89    1989    only    -    Jun    6    11:58:35s 0:01:25 -
  20255. +Rule    sol89    1989    only    -    Jun    7    11:58:45s 0:01:15 -
  20256. +Rule    sol89    1989    only    -    Jun    8    11:59:00s 0:01:00 -
  20257. +Rule    sol89    1989    only    -    Jun    9    11:59:10s 0:00:50 -
  20258. +Rule    sol89    1989    only    -    Jun    10    11:59:20s 0:00:40 -
  20259. +Rule    sol89    1989    only    -    Jun    11    11:59:35s 0:00:25 -
  20260. +Rule    sol89    1989    only    -    Jun    12    11:59:45s 0:00:15 -
  20261. +Rule    sol89    1989    only    -    Jun    13    12:00:00s 0:00:00 -
  20262. +Rule    sol89    1989    only    -    Jun    14    12:00:10s -0:00:10 -
  20263. +Rule    sol89    1989    only    -    Jun    15    12:00:25s -0:00:25 -
  20264. +Rule    sol89    1989    only    -    Jun    16    12:00:35s -0:00:35 -
  20265. +Rule    sol89    1989    only    -    Jun    17    12:00:50s -0:00:50 -
  20266. +Rule    sol89    1989    only    -    Jun    18    12:01:05s -0:01:05 -
  20267. +Rule    sol89    1989    only    -    Jun    19    12:01:15s -0:01:15 -
  20268. +Rule    sol89    1989    only    -    Jun    20    12:01:30s -0:01:30 -
  20269. +Rule    sol89    1989    only    -    Jun    21    12:01:40s -0:01:40 -
  20270. +Rule    sol89    1989    only    -    Jun    22    12:01:55s -0:01:55 -
  20271. +Rule    sol89    1989    only    -    Jun    23    12:02:10s -0:02:10 -
  20272. +Rule    sol89    1989    only    -    Jun    24    12:02:20s -0:02:20 -
  20273. +Rule    sol89    1989    only    -    Jun    25    12:02:35s -0:02:35 -
  20274. +Rule    sol89    1989    only    -    Jun    26    12:02:45s -0:02:45 -
  20275. +Rule    sol89    1989    only    -    Jun    27    12:03:00s -0:03:00 -
  20276. +Rule    sol89    1989    only    -    Jun    28    12:03:10s -0:03:10 -
  20277. +Rule    sol89    1989    only    -    Jun    29    12:03:25s -0:03:25 -
  20278. +Rule    sol89    1989    only    -    Jun    30    12:03:35s -0:03:35 -
  20279. +Rule    sol89    1989    only    -    Jul    1    12:03:45s -0:03:45 -
  20280. +Rule    sol89    1989    only    -    Jul    2    12:04:00s -0:04:00 -
  20281. +Rule    sol89    1989    only    -    Jul    3    12:04:10s -0:04:10 -
  20282. +Rule    sol89    1989    only    -    Jul    4    12:04:20s -0:04:20 -
  20283. +Rule    sol89    1989    only    -    Jul    5    12:04:30s -0:04:30 -
  20284. +Rule    sol89    1989    only    -    Jul    6    12:04:40s -0:04:40 -
  20285. +Rule    sol89    1989    only    -    Jul    7    12:04:50s -0:04:50 -
  20286. +Rule    sol89    1989    only    -    Jul    8    12:05:00s -0:05:00 -
  20287. +Rule    sol89    1989    only    -    Jul    9    12:05:10s -0:05:10 -
  20288. +Rule    sol89    1989    only    -    Jul    10    12:05:20s -0:05:20 -
  20289. +Rule    sol89    1989    only    -    Jul    11    12:05:25s -0:05:25 -
  20290. +Rule    sol89    1989    only    -    Jul    12    12:05:35s -0:05:35 -
  20291. +Rule    sol89    1989    only    -    Jul    13    12:05:40s -0:05:40 -
  20292. +Rule    sol89    1989    only    -    Jul    14    12:05:50s -0:05:50 -
  20293. +Rule    sol89    1989    only    -    Jul    15    12:05:55s -0:05:55 -
  20294. +Rule    sol89    1989    only    -    Jul    16    12:06:00s -0:06:00 -
  20295. +Rule    sol89    1989    only    -    Jul    17    12:06:05s -0:06:05 -
  20296. +Rule    sol89    1989    only    -    Jul    18    12:06:10s -0:06:10 -
  20297. +Rule    sol89    1989    only    -    Jul    19    12:06:15s -0:06:15 -
  20298. +Rule    sol89    1989    only    -    Jul    20    12:06:20s -0:06:20 -
  20299. +Rule    sol89    1989    only    -    Jul    21    12:06:20s -0:06:20 -
  20300. +Rule    sol89    1989    only    -    Jul    22    12:06:25s -0:06:25 -
  20301. +Rule    sol89    1989    only    -    Jul    23    12:06:25s -0:06:25 -
  20302. +Rule    sol89    1989    only    -    Jul    24    12:06:30s -0:06:30 -
  20303. +Rule    sol89    1989    only    -    Jul    25    12:06:30s -0:06:30 -
  20304. +Rule    sol89    1989    only    -    Jul    26    12:06:30s -0:06:30 -
  20305. +Rule    sol89    1989    only    -    Jul    27    12:06:30s -0:06:30 -
  20306. +Rule    sol89    1989    only    -    Jul    28    12:06:30s -0:06:30 -
  20307. +Rule    sol89    1989    only    -    Jul    29    12:06:25s -0:06:25 -
  20308. +Rule    sol89    1989    only    -    Jul    30    12:06:25s -0:06:25 -
  20309. +Rule    sol89    1989    only    -    Jul    31    12:06:20s -0:06:20 -
  20310. +Rule    sol89    1989    only    -    Aug    1    12:06:20s -0:06:20 -
  20311. +Rule    sol89    1989    only    -    Aug    2    12:06:15s -0:06:15 -
  20312. +Rule    sol89    1989    only    -    Aug    3    12:06:10s -0:06:10 -
  20313. +Rule    sol89    1989    only    -    Aug    4    12:06:05s -0:06:05 -
  20314. +Rule    sol89    1989    only    -    Aug    5    12:06:00s -0:06:00 -
  20315. +Rule    sol89    1989    only    -    Aug    6    12:05:50s -0:05:50 -
  20316. +Rule    sol89    1989    only    -    Aug    7    12:05:45s -0:05:45 -
  20317. +Rule    sol89    1989    only    -    Aug    8    12:05:35s -0:05:35 -
  20318. +Rule    sol89    1989    only    -    Aug    9    12:05:30s -0:05:30 -
  20319. +Rule    sol89    1989    only    -    Aug    10    12:05:20s -0:05:20 -
  20320. +Rule    sol89    1989    only    -    Aug    11    12:05:10s -0:05:10 -
  20321. +Rule    sol89    1989    only    -    Aug    12    12:05:00s -0:05:00 -
  20322. +Rule    sol89    1989    only    -    Aug    13    12:04:50s -0:04:50 -
  20323. +Rule    sol89    1989    only    -    Aug    14    12:04:40s -0:04:40 -
  20324. +Rule    sol89    1989    only    -    Aug    15    12:04:30s -0:04:30 -
  20325. +Rule    sol89    1989    only    -    Aug    16    12:04:15s -0:04:15 -
  20326. +Rule    sol89    1989    only    -    Aug    17    12:04:05s -0:04:05 -
  20327. +Rule    sol89    1989    only    -    Aug    18    12:03:50s -0:03:50 -
  20328. +Rule    sol89    1989    only    -    Aug    19    12:03:35s -0:03:35 -
  20329. +Rule    sol89    1989    only    -    Aug    20    12:03:25s -0:03:25 -
  20330. +Rule    sol89    1989    only    -    Aug    21    12:03:10s -0:03:10 -
  20331. +Rule    sol89    1989    only    -    Aug    22    12:02:55s -0:02:55 -
  20332. +Rule    sol89    1989    only    -    Aug    23    12:02:40s -0:02:40 -
  20333. +Rule    sol89    1989    only    -    Aug    24    12:02:20s -0:02:20 -
  20334. +Rule    sol89    1989    only    -    Aug    25    12:02:05s -0:02:05 -
  20335. +Rule    sol89    1989    only    -    Aug    26    12:01:50s -0:01:50 -
  20336. +Rule    sol89    1989    only    -    Aug    27    12:01:30s -0:01:30 -
  20337. +Rule    sol89    1989    only    -    Aug    28    12:01:15s -0:01:15 -
  20338. +Rule    sol89    1989    only    -    Aug    29    12:00:55s -0:00:55 -
  20339. +Rule    sol89    1989    only    -    Aug    30    12:00:40s -0:00:40 -
  20340. +Rule    sol89    1989    only    -    Aug    31    12:00:20s -0:00:20 -
  20341. +Rule    sol89    1989    only    -    Sep    1    12:00:00s 0:00:00 -
  20342. +Rule    sol89    1989    only    -    Sep    2    11:59:45s 0:00:15 -
  20343. +Rule    sol89    1989    only    -    Sep    3    11:59:25s 0:00:35 -
  20344. +Rule    sol89    1989    only    -    Sep    4    11:59:05s 0:00:55 -
  20345. +Rule    sol89    1989    only    -    Sep    5    11:58:45s 0:01:15 -
  20346. +Rule    sol89    1989    only    -    Sep    6    11:58:25s 0:01:35 -
  20347. +Rule    sol89    1989    only    -    Sep    7    11:58:05s 0:01:55 -
  20348. +Rule    sol89    1989    only    -    Sep    8    11:57:45s 0:02:15 -
  20349. +Rule    sol89    1989    only    -    Sep    9    11:57:20s 0:02:40 -
  20350. +Rule    sol89    1989    only    -    Sep    10    11:57:00s 0:03:00 -
  20351. +Rule    sol89    1989    only    -    Sep    11    11:56:40s 0:03:20 -
  20352. +Rule    sol89    1989    only    -    Sep    12    11:56:20s 0:03:40 -
  20353. +Rule    sol89    1989    only    -    Sep    13    11:56:00s 0:04:00 -
  20354. +Rule    sol89    1989    only    -    Sep    14    11:55:35s 0:04:25 -
  20355. +Rule    sol89    1989    only    -    Sep    15    11:55:15s 0:04:45 -
  20356. +Rule    sol89    1989    only    -    Sep    16    11:54:55s 0:05:05 -
  20357. +Rule    sol89    1989    only    -    Sep    17    11:54:35s 0:05:25 -
  20358. +Rule    sol89    1989    only    -    Sep    18    11:54:10s 0:05:50 -
  20359. +Rule    sol89    1989    only    -    Sep    19    11:53:50s 0:06:10 -
  20360. +Rule    sol89    1989    only    -    Sep    20    11:53:30s 0:06:30 -
  20361. +Rule    sol89    1989    only    -    Sep    21    11:53:10s 0:06:50 -
  20362. +Rule    sol89    1989    only    -    Sep    22    11:52:45s 0:07:15 -
  20363. +Rule    sol89    1989    only    -    Sep    23    11:52:25s 0:07:35 -
  20364. +Rule    sol89    1989    only    -    Sep    24    11:52:05s 0:07:55 -
  20365. +Rule    sol89    1989    only    -    Sep    25    11:51:45s 0:08:15 -
  20366. +Rule    sol89    1989    only    -    Sep    26    11:51:25s 0:08:35 -
  20367. +Rule    sol89    1989    only    -    Sep    27    11:51:05s 0:08:55 -
  20368. +Rule    sol89    1989    only    -    Sep    28    11:50:40s 0:09:20 -
  20369. +Rule    sol89    1989    only    -    Sep    29    11:50:20s 0:09:40 -
  20370. +Rule    sol89    1989    only    -    Sep    30    11:50:00s 0:10:00 -
  20371. +Rule    sol89    1989    only    -    Oct    1    11:49:45s 0:10:15 -
  20372. +Rule    sol89    1989    only    -    Oct    2    11:49:25s 0:10:35 -
  20373. +Rule    sol89    1989    only    -    Oct    3    11:49:05s 0:10:55 -
  20374. +Rule    sol89    1989    only    -    Oct    4    11:48:45s 0:11:15 -
  20375. +Rule    sol89    1989    only    -    Oct    5    11:48:30s 0:11:30 -
  20376. +Rule    sol89    1989    only    -    Oct    6    11:48:10s 0:11:50 -
  20377. +Rule    sol89    1989    only    -    Oct    7    11:47:50s 0:12:10 -
  20378. +Rule    sol89    1989    only    -    Oct    8    11:47:35s 0:12:25 -
  20379. +Rule    sol89    1989    only    -    Oct    9    11:47:20s 0:12:40 -
  20380. +Rule    sol89    1989    only    -    Oct    10    11:47:00s 0:13:00 -
  20381. +Rule    sol89    1989    only    -    Oct    11    11:46:45s 0:13:15 -
  20382. +Rule    sol89    1989    only    -    Oct    12    11:46:30s 0:13:30 -
  20383. +Rule    sol89    1989    only    -    Oct    13    11:46:15s 0:13:45 -
  20384. +Rule    sol89    1989    only    -    Oct    14    11:46:00s 0:14:00 -
  20385. +Rule    sol89    1989    only    -    Oct    15    11:45:50s 0:14:10 -
  20386. +Rule    sol89    1989    only    -    Oct    16    11:45:35s 0:14:25 -
  20387. +Rule    sol89    1989    only    -    Oct    17    11:45:20s 0:14:40 -
  20388. +Rule    sol89    1989    only    -    Oct    18    11:45:10s 0:14:50 -
  20389. +Rule    sol89    1989    only    -    Oct    19    11:45:00s 0:15:00 -
  20390. +Rule    sol89    1989    only    -    Oct    20    11:44:50s 0:15:10 -
  20391. +Rule    sol89    1989    only    -    Oct    21    11:44:40s 0:15:20 -
  20392. +Rule    sol89    1989    only    -    Oct    22    11:44:30s 0:15:30 -
  20393. +Rule    sol89    1989    only    -    Oct    23    11:44:20s 0:15:40 -
  20394. +Rule    sol89    1989    only    -    Oct    24    11:44:10s 0:15:50 -
  20395. +Rule    sol89    1989    only    -    Oct    25    11:44:05s 0:15:55 -
  20396. +Rule    sol89    1989    only    -    Oct    26    11:44:00s 0:16:00 -
  20397. +Rule    sol89    1989    only    -    Oct    27    11:43:50s 0:16:10 -
  20398. +Rule    sol89    1989    only    -    Oct    28    11:43:45s 0:16:15 -
  20399. +Rule    sol89    1989    only    -    Oct    29    11:43:40s 0:16:20 -
  20400. +Rule    sol89    1989    only    -    Oct    30    11:43:40s 0:16:20 -
  20401. +Rule    sol89    1989    only    -    Oct    31    11:43:35s 0:16:25 -
  20402. +Rule    sol89    1989    only    -    Nov    1    11:43:35s 0:16:25 -
  20403. +Rule    sol89    1989    only    -    Nov    2    11:43:35s 0:16:25 -
  20404. +Rule    sol89    1989    only    -    Nov    3    11:43:30s 0:16:30 -
  20405. +Rule    sol89    1989    only    -    Nov    4    11:43:35s 0:16:25 -
  20406. +Rule    sol89    1989    only    -    Nov    5    11:43:35s 0:16:25 -
  20407. +Rule    sol89    1989    only    -    Nov    6    11:43:35s 0:16:25 -
  20408. +Rule    sol89    1989    only    -    Nov    7    11:43:40s 0:16:20 -
  20409. +Rule    sol89    1989    only    -    Nov    8    11:43:45s 0:16:15 -
  20410. +Rule    sol89    1989    only    -    Nov    9    11:43:50s 0:16:10 -
  20411. +Rule    sol89    1989    only    -    Nov    10    11:43:55s 0:16:05 -
  20412. +Rule    sol89    1989    only    -    Nov    11    11:44:00s 0:16:00 -
  20413. +Rule    sol89    1989    only    -    Nov    12    11:44:05s 0:15:55 -
  20414. +Rule    sol89    1989    only    -    Nov    13    11:44:15s 0:15:45 -
  20415. +Rule    sol89    1989    only    -    Nov    14    11:44:25s 0:15:35 -
  20416. +Rule    sol89    1989    only    -    Nov    15    11:44:35s 0:15:25 -
  20417. +Rule    sol89    1989    only    -    Nov    16    11:44:45s 0:15:15 -
  20418. +Rule    sol89    1989    only    -    Nov    17    11:44:55s 0:15:05 -
  20419. +Rule    sol89    1989    only    -    Nov    18    11:45:10s 0:14:50 -
  20420. +Rule    sol89    1989    only    -    Nov    19    11:45:20s 0:14:40 -
  20421. +Rule    sol89    1989    only    -    Nov    20    11:45:35s 0:14:25 -
  20422. +Rule    sol89    1989    only    -    Nov    21    11:45:50s 0:14:10 -
  20423. +Rule    sol89    1989    only    -    Nov    22    11:46:05s 0:13:55 -
  20424. +Rule    sol89    1989    only    -    Nov    23    11:46:25s 0:13:35 -
  20425. +Rule    sol89    1989    only    -    Nov    24    11:46:40s 0:13:20 -
  20426. +Rule    sol89    1989    only    -    Nov    25    11:47:00s 0:13:00 -
  20427. +Rule    sol89    1989    only    -    Nov    26    11:47:20s 0:12:40 -
  20428. +Rule    sol89    1989    only    -    Nov    27    11:47:35s 0:12:25 -
  20429. +Rule    sol89    1989    only    -    Nov    28    11:47:55s 0:12:05 -
  20430. +Rule    sol89    1989    only    -    Nov    29    11:48:20s 0:11:40 -
  20431. +Rule    sol89    1989    only    -    Nov    30    11:48:40s 0:11:20 -
  20432. +Rule    sol89    1989    only    -    Dec    1    11:49:00s 0:11:00 -
  20433. +Rule    sol89    1989    only    -    Dec    2    11:49:25s 0:10:35 -
  20434. +Rule    sol89    1989    only    -    Dec    3    11:49:50s 0:10:10 -
  20435. +Rule    sol89    1989    only    -    Dec    4    11:50:15s 0:09:45 -
  20436. +Rule    sol89    1989    only    -    Dec    5    11:50:35s 0:09:25 -
  20437. +Rule    sol89    1989    only    -    Dec    6    11:51:00s 0:09:00 -
  20438. +Rule    sol89    1989    only    -    Dec    7    11:51:30s 0:08:30 -
  20439. +Rule    sol89    1989    only    -    Dec    8    11:51:55s 0:08:05 -
  20440. +Rule    sol89    1989    only    -    Dec    9    11:52:20s 0:07:40 -
  20441. +Rule    sol89    1989    only    -    Dec    10    11:52:50s 0:07:10 -
  20442. +Rule    sol89    1989    only    -    Dec    11    11:53:15s 0:06:45 -
  20443. +Rule    sol89    1989    only    -    Dec    12    11:53:45s 0:06:15 -
  20444. +Rule    sol89    1989    only    -    Dec    13    11:54:10s 0:05:50 -
  20445. +Rule    sol89    1989    only    -    Dec    14    11:54:40s 0:05:20 -
  20446. +Rule    sol89    1989    only    -    Dec    15    11:55:10s 0:04:50 -
  20447. +Rule    sol89    1989    only    -    Dec    16    11:55:40s 0:04:20 -
  20448. +Rule    sol89    1989    only    -    Dec    17    11:56:05s 0:03:55 -
  20449. +Rule    sol89    1989    only    -    Dec    18    11:56:35s 0:03:25 -
  20450. +Rule    sol89    1989    only    -    Dec    19    11:57:05s 0:02:55 -
  20451. +Rule    sol89    1989    only    -    Dec    20    11:57:35s 0:02:25 -
  20452. +Rule    sol89    1989    only    -    Dec    21    11:58:05s 0:01:55 -
  20453. +Rule    sol89    1989    only    -    Dec    22    11:58:35s 0:01:25 -
  20454. +Rule    sol89    1989    only    -    Dec    23    11:59:05s 0:00:55 -
  20455. +Rule    sol89    1989    only    -    Dec    24    11:59:35s 0:00:25 -
  20456. +Rule    sol89    1989    only    -    Dec    25    12:00:05s -0:00:05 -
  20457. +Rule    sol89    1989    only    -    Dec    26    12:00:35s -0:00:35 -
  20458. +Rule    sol89    1989    only    -    Dec    27    12:01:05s -0:01:05 -
  20459. +Rule    sol89    1989    only    -    Dec    28    12:01:35s -0:01:35 -
  20460. +Rule    sol89    1989    only    -    Dec    29    12:02:00s -0:02:00 -
  20461. +Rule    sol89    1989    only    -    Dec    30    12:02:30s -0:02:30 -
  20462. +Rule    sol89    1989    only    -    Dec    31    12:03:00s -0:03:00 -
  20463. +
  20464. +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
  20465. +# Before and after 1989, we'll operate on local mean solar time.
  20466. +
  20467. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  20468. +Zone    Mideast/Riyadh89    3:07:04    -        ??    1989
  20469. +                3:07:04    sol89        ??    1990
  20470. +                3:07:04    -        ??
  20471. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/southamerica amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/southamerica
  20472. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/southamerica    Wed Dec 31 17:00:00 1969
  20473. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/southamerica    Sat Sep 28 00:00:00 1996
  20474. @@ -0,0 +1,103 @@
  20475. +# @(#)southamerica    4.3
  20476. +
  20477. +# From Guy Harris:
  20478. +# From Official Airline Guide - Worldwide Edition (1987).  Countries not
  20479. +# listed here do not observe DST, according to the OAG.  Time zone names
  20480. +# are pure inventions, and none are supplied for countries not observing
  20481. +# DST; updates from natives would be appreciated.  The times that DST
  20482. +# starts and ends are based on the assumption that they switch a 2AM just
  20483. +# as everybody else does.
  20484. +
  20485. +###############################################################################
  20486. +
  20487. +# Brazil
  20488. +
  20489. +# From Guy Harris:
  20490. +# The OAG lists October 25, 1987 and February 12, 1988 as the starting and
  20491. +# ending dates, giving them as "estimated date(s) based on previous year".  We
  20492. +# infer a rule here from one example, always a dangerous practice....  Yes,
  20493. +# they really do switch on Saturday, according to the OAG.
  20494. +# "Brazil/Acre" is for the Territory of Acre; "Brazil/DeNoronha" is for
  20495. +# Fernando De Noronha.
  20496. +
  20497. +# From Bob Devine (January 28, 1988):
  20498. +# The only information I found is that there was no DST up to 1985.
  20499. +# But there was some before 1952!
  20500. +
  20501. +# From U. S. Naval Observatory (January 16, 1989):
  20502. +# BRAZIL     WEST     5 H  BEHIND UTC    TERRITORY OF ACRE
  20503. +# BRAZIL     WEST     4 H  BEHIND UTC    ACRE OCT 23, '88-FEB 11,
  20504. +# BRAZIL                                 '89 (ESTIMATED)
  20505. +# BRAZIL     CENTRAL  4 H  BEHIND UTC    MANAUS
  20506. +# BRAZIL     CENTRAL  3 H  BEHIND UTC    MANAUS OCT 23, '88-FEB 11,
  20507. +# BRAZIL     CENTRAL                     '89 (ESTIMATED)
  20508. +# BRAZIL     EAST     3 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  20509. +# BRAZIL     EAST                        PAULO, BRASILIA
  20510. +# BRAZIL     EAST     2 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  20511. +# BRAZIL                                 PAULO, BRASILIA OCT 23,
  20512. +# BRAZIL                                 '88-FEB 11, '89
  20513. +# BRAZIL                                 (ESTIMATED)
  20514. +# BRAZIL              2 H  BEHIND UTC    ATLANTIC ISLANDS, FERNANDO
  20515. +# BRAZIL                                 DE NORONHA
  20516. +# BRAZIL              1 H  BEHIND UTC    OCT 23, '88-FEB 11, '89
  20517. +# BRAZIL                                 (ESTIMATED)
  20518. +# BRAZIL              3 H  BEHIND UTC    FOR MOST MAJOR AIRPORTS.
  20519. +
  20520. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  20521. +Rule    Brazil    1987    max    -    Feb    Sat<=14    2:00    0    S
  20522. +Rule    Brazil    1987    max    -    Oct    Sat<=28    2:00    1:00    D
  20523. +
  20524. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  20525. +Zone    Brazil/East        -3:00    Brazil        E%sT
  20526. +Zone    Brazil/West        -4:00    Brazil        W%sT
  20527. +Zone    Brazil/Acre        -5:00    Brazil        A%sT
  20528. +Zone    Brazil/DeNoronha    -2:00    Brazil        F%sT
  20529. +
  20530. +###############################################################################
  20531. +
  20532. +# Chile
  20533. +
  20534. +# From Guy Harris:
  20535. +# The OAG lists October 11, 1987 and March 12, 1988 as the starting and
  20536. +# ending dates, giving them as "estimated date(s) based on previous year."
  20537. +
  20538. +# From Bob Devine (January 28, 1988):
  20539. +# Chile has had 2nd Sunday in October to 2nd Sunday in March DST since 1977.
  20540. +# Switch is at midnight. OAG is right.
  20541. +
  20542. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  20543. +Rule    Chile    1977    max    -    Oct    Sun>=8    0:00    1:00    D
  20544. +Rule    Chile    1978    max    -    Mar    Sun>=8    0:00    0    S
  20545. +
  20546. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  20547. +Zone    Chile/Continental    -4:00    Chile        C%sT
  20548. +Zone    Chile/EasterIsland    -6:00    Chile        E%sT
  20549. +
  20550. +###############################################################################
  20551. +
  20552. +# Paraguay
  20553. +
  20554. +# From Bob Devine (January 28, 1988):
  20555. +# Paraguay: First day in October to last in March.  Midnight switch??
  20556. +# Since 1980.
  20557. +
  20558. +# From U. S. Naval Observatory (January 19, 1989):
  20559. +# PARAGUAY            4 H  BEHIND UTC
  20560. +# PARAGUAY            3 H  BEHIND UTC    OCT 1, '88-MAR 31, '89
  20561. +
  20562. +# From Arthur David Olson (January 21, 1989):
  20563. +# Still don't know time of day when switch occurs.  Punt.
  20564. +
  20565. +###############################################################################
  20566. +
  20567. +# Argentina
  20568. +
  20569. +# From Bob Devine (January 28, 1988):
  20570. +# Argentina: first Sunday in October to first Sunday in April since 1976.
  20571. +# Double Summer time from 1969 to 1974.  Switches at midnight.
  20572. +
  20573. +# From U. S. Naval Observatory (January 19, 19889):
  20574. +# ARGENTINA           3 H BEHIND   UTC
  20575. +
  20576. +# From Arthur David Olson (January 21, 1989):
  20577. +# OAG, USNO and Bob have different data.  Punt.
  20578. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/systemv amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/systemv
  20579. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/systemv    Wed Dec 31 17:00:00 1969
  20580. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/systemv    Sat Sep 28 00:00:00 1996
  20581. @@ -0,0 +1,35 @@
  20582. +# @(#)systemv    4.1
  20583. +
  20584. +# Old rules, should the need arise.
  20585. +# No attempt is made to handle Newfoundland, since it cannot be expressed
  20586. +# using the System V "TZ" scheme (half-hour offset), or anything outside
  20587. +# North America (no support for non-standard DST start/end dates), nor
  20588. +# the change in the DST rules in the US in 1987 (can't split between
  20589. +# Canada, with no changes, and the US)
  20590. +#
  20591. +# Be sure to compile this *without* leap second correction for true conformance.
  20592. +
  20593. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  20594. +Rule    SystemV    min    1973    -    Apr    lastSun    2:00    1:00    D
  20595. +Rule    SystemV    min    1973    -    Oct    lastSun    2:00    0    S
  20596. +Rule    SystemV    1974    only    -    Jan    6    2:00    1:00    D
  20597. +Rule    SystemV    1974    only    -    Nov    lastSun    2:00    0    S
  20598. +Rule    SystemV    1975    only    -    Feb    23    2:00    1:00    D
  20599. +Rule    SystemV    1975    only    -    Oct    lastSun    2:00    0    S
  20600. +Rule    SystemV    1976    max    -    Apr    lastSun    2:00    1:00    D
  20601. +Rule    SystemV    1976    max    -    Oct    lastSun    2:00    0    S
  20602. +
  20603. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  20604. +Zone    SystemV/AST4ADT    -4:00    SystemV        A%sT
  20605. +Zone    SystemV/EST5EDT    -5:00    SystemV        E%sT
  20606. +Zone    SystemV/CST6CDT    -6:00    SystemV        C%sT
  20607. +Zone    SystemV/MST7MDT    -7:00    SystemV        M%sT
  20608. +Zone    SystemV/PST8PDT    -8:00    SystemV        P%sT
  20609. +Zone    SystemV/YST9YDT    -9:00    SystemV        Y%sT
  20610. +Zone    SystemV/AST4    -4:00    -        AST
  20611. +Zone    SystemV/EST5    -5:00    -        EST
  20612. +Zone    SystemV/CST6    -6:00    -        CST
  20613. +Zone    SystemV/MST7    -7:00    -        MST
  20614. +Zone    SystemV/PST8    -8:00    -        PST
  20615. +Zone    SystemV/YST9    -9:00    -        YST
  20616. +Zone    SystemV/HST10    -10:00    -        HST
  20617. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1988 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1988
  20618. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1988    Wed Dec 31 17:00:00 1969
  20619. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1988    Sat Sep 28 00:00:00 1996
  20620. @@ -0,0 +1,111 @@
  20621. +# @(#)usno1988    1.1
  20622. +#
  20623. +# From Arthur David Olson (January 19, 1989):
  20624. +#
  20625. +# Here's some United States Naval Observatory time zone data from
  20626. +# February 1988.  It's here mostly to convince you that the USNO has indeed
  20627. +# been updating its files (see its 1989 data elsewhere).
  20628. +#
  20629. +ANDORRA             1 H AHEAD OF UTC
  20630. +ARGENTINA           3 H BEHIND   UTC
  20631. +BRASIL   WEST       5 H BEHIND UTC        (CRUZEIRO DO SUL) 
  20632. +BRASIL   CENTRAL    4 H BEHIND UTC              (MANAUS)
  20633. +BRASIL   EAST       3 H BEHIND UTC   COASTAL STATES, RIO, SP, BRASILIA
  20634. +BRASIL              2 H BEHIND UTC   ATLANTIC ISLANDS 
  20635. +BRAZIL              5 H BEHIND UTC   WEST (CRUZEIRO DO SUL) 
  20636. +BRAZIL              4 H BEHIND UTC   CENTRAL    (MANAUS)
  20637. +BRAZIL              3 H BEHIND UTC   COASTAL STATES, RIO, SP, BRASILIA
  20638. +BRAZIL              3 H BEHIND UTC   FOR MOST MAJOR AIRPORTS. 
  20639. +BRAZIL              2 H BEHIND UTC   ATLANTIC ISLANDS 
  20640. +BULGARIA            2 H AHEAD OF UTC WINTER 
  20641. +BULGARIA            3 H AHEAD OF UTC SUMMER MAR31 - SEP 85, 0100 LOCAL
  20642. +CHINA               8 H AHEAD OF UTC; ALL OF CHINA, INCL TAIWAN 
  20643. +CUBA                5 H BEHIND UTC IN WINTER
  20644. +CUBA                4 H BEHIND UTC MAY 8 - OCT 8
  20645. +CYPRUS              2 H AHEAD UTC IN WINTER 
  20646. +CYPRUS              3 H AHEAD UTC MAR 25 - SEP 30 
  20647. +DENMARK             1 H AHEAD UTC IN WINTER 
  20648. +DENMARK             2 H AHEAD UTC MAR 31 - SEP 30  , 0200 LOCAL 
  20649. +DENMK. FAEROE IS    1 H AHEAD UTC MAR 31 - SEP 30  , 0200 LOCAL 
  20650. +EGYPT               2 H AHEAD UTC 
  20651. +EGYPT               3 H AHEAD UTC SUMMER (AFTER RAMADAN)
  20652. +ENGLAND             ON UTC IN WINTER; WALES, SCOTLAND, N.I., CH.IS. 
  20653. +ENGLAND             1 H AHEAD OF UTC; SUMMER TIL 28 OCT 0200 LOCAL
  20654. +FINLAND             2 H AHEAD OF UTC IN WINTER
  20655. +FINLAND             3 H AHEAD OF UTC MAR 25 - SEP 30  
  20656. +FRANCE              1 H AHEAD OF UTC IN WINTER
  20657. +FRANCE              2 H AHEAD OF UTC MAR 31 - SEP 30 , 0100 LOCAL 
  20658. +GREECE              2 H AHEAD OF UTC IN WINTER
  20659. +GREECE              3 H AHEAD OF UTC IN SUMMER EFF. 31MAR85 02/03 LOCAL 
  20660. +GREECE              3 H AHEAD OF UTC MAR 25 - SEP 30
  20661. +GREENLAND           4 H BEHIND UTC  IN THULE AIRBASE YEAR ROUND 
  20662. +GREENLAND           3 H BEHIND UTC  IN WINTER AT SONDRESTROM
  20663. +GREENLAND           2 H BEHIND UTC  30 MAR - 30 SEP 2200 LOCAL AT -"- 
  20664. +GREENLAND           2 H BEHIND UTC  AROUND SCORESBY SUND
  20665. +ICELAND             ON UTC
  20666. +IRAN                3.5H AHEAD OF UTC 
  20667. +IRELAND             ON UTC IN WINTER
  20668. +IRELAND             1 H AHEAD OF UTC MAR 31 - OCT 23  0200 LOCAL
  20669. +ITALY               1 H AHEAD OF UTC IN WINTER
  20670. +ITALY               2 H AHEAD OF UTC MAR 31 - SEP 30, 0030 LOCAL
  20671. +JAMAICA             5 H BEHIND UTC IN WINTER
  20672. +JAMAICA             4 H BEHIND UTC APR 29 - OCT 29
  20673. +LIBYA               2 H AHEAD OF UTC
  20674. +MEXICO BAJA CAL N   8 H BEHIND UTC IN WINTER; NORTH BAJA CAL, TIJUANA 
  20675. +MEXICO BAJA CAL N   7 H BEHIND UTC APR 29 - OCT 29
  20676. +MEXICO BAJA CAL S   7 H BEHIND UTC ALL YEAR; MAZATLAN 
  20677. +MEXICO CENTRAL      6 H BEHIND UTC ALL YEAR; MEXICO CITY
  20678. +MONACO              1 H AHEAD UTC IN WINTER 
  20679. +MONACO              2 H AHEAD UTC MAR 25 - SEP30
  20680. +PARAGUAY            4 H BEHIND UTC IN WINTER
  20681. +PARAGUAY            3 H BEHIND UTC SEP 30 - MAR 30
  20682. +POLAND              1 H AHEAD OF UTC IN WINTER
  20683. +POLAND              2 H AHEAD OF UTC MAR 24 - SEP     0200 LOCAL
  20684. +PORTUGAL            ON UTC IN WINTER
  20685. +PORTUGAL            1 H AHEAD OF UTC IN SUMMER MAR 31 - SEP 29   0100 LOCAL 
  20686. +PORTUGAL AZORES     1 H BEHIND UTC IN WINTER
  20687. +PORTUGAL AZORES     ON UTC IN SUMMER MAR 31 - SEP 29
  20688. +PORTUGAL MADEIRA    ON UTC ALL YEAR;
  20689. +ROMANIA             2 H AHEAD OF UTC IN WINTER
  20690. +ROMANIA             3 H AHEAD OF UTC APR 3 - SEP 24 
  20691. +SCOTLAND            SEE ENGLAND 
  20692. +SWITZERLAND         1 H AHEAD OF UTC IN WINTER
  20693. +SWITZERLAND         2 H AHEAD OF UTC MAR 31 - SEP 30  0200 LOCAL
  20694. +TURKEY              3 H AHEAD OF UTC
  20695. +USA   EASTERN       5 H BEHIND UTC IN WINTER; NEW YORK, WASHINGTON
  20696. +USA   EASTERN       4 H BEHIND UTC APR 29 - OCT 29
  20697. +USA   CENTRAL       6 H BEHIND UTC IN WINTER; CHICAGO, HOUSTON
  20698. +USA   CENTRAL       5 H BEHIND UTC APR 29 - OCT 29
  20699. +USA   MOUNTAIN      7 H BEHIND UTC IN WINTER; DENVER
  20700. +USA   MOUNTAIN      6 H BEHIND UTC APR 29 - OCT 29
  20701. +USA   PACIFIC       8 H BEHIND UTC IN WINTER; L.A., SAN FRANCISCO 
  20702. +USA   PACIFIC       7 H BEHIND UTC APR 29 - OCT 29
  20703. +USA   ALASKA STD    9 H BEHIND UTC IN WINTER; MOST OF ALASKA     (AKST) 
  20704. +USA   ALASKA STD    8 H BEHIND UTC APR 29 - OCT 29               (AKDT) 
  20705. +USA   ALEUTIAN     10 H BEHIND UTC IN WINTER; ISLANDS WEST OF 170W
  20706. +USA   - " -         9 H BEHIND UTC APR 29 - OCT 29
  20707. +USA   HAWAII       10 H BEHIND UTC ALL YEAR;
  20708. +USA   BERING       11 H BEHIND UTC ALL YEAR; SAMOA, MIDWAY
  20709. +USSR WEST EUROP     3 H AHEAD OF UTC IN WINTER; LENINGRAD, MOSCOW 
  20710. +USSR WEST EUROP     4 H AHEAD OF UTC APR 1 - SEP 30 
  20711. +USSR CENTRAL EUR    4 H AHEAD OF UTC IN WINTER; ROSTOV, BAKU
  20712. +USSR CENTRAL EUR    5 H AHEAD OF UTC APR 1 - SEP 30 
  20713. +USSR EAST EUROP     5 H AHEAD OF UTC IN WINTER; SVERDLOVSK
  20714. +USSR EAST EUROP     6 H AHEAD OF UTC APR 1 - SEP 30 
  20715. +USSR WEST SIBERIAN  6 H AHEAD OF UTC IN WINTER; TASHKENT, ALMA ATA
  20716. +USSR WEST SIBERIAN  7 H AHEAD OF UTC APR 1 - SEP 30 
  20717. +USSR WEST-CENTRAL   7 H AHEAD OF UTC IN WINTER; NOVOSIBIRSK 
  20718. +USSR WEST-CENTRAL   8 H AHEAD OF UTC APR 1 - SEP 30 
  20719. +USSR WEST-CENTRAL   8 H AHEAD OF UTC IN WINTER; IRKUTSK 
  20720. +USSR WEST-CENTRAL   9 H AHEAD OF UTC APR 1 - SEP 30 
  20721. +USSR CENTRAL SIB    9 H AHEAD OF UTC IN WINTER; YAKUTSK 
  20722. +USSR CENTRAL SIB   10 H AHEAD OF UTC APR 1 - SEP 30 
  20723. +USSR CENTRAL SIB   10 H AHEAD OF UTC IN WINTER; VLADIVOSTOK 
  20724. +USSR CENTRAL SIB   11 H AHEAD OF UTC APR 1 - SEP 30 
  20725. +USSR EAST SIBERIA  11 H AHEAD OF UTC IN WINTER; MAGADAN 
  20726. +USSR EAST SIBERIA  12 H AHEAD OF UTC APR 1 - SEP 30 
  20727. +USSR EAST SIBERIA  12 H AHEAD OF UTC IN WINTER; PETROPAVLOVSK 
  20728. +USSR EAST SIBERIA  13 H AHEAD OF UTC APR 1 - SEP 30 
  20729. +USSR EAST SIBERIA  13 H AHEAD OF UTC IN WINTER; UELEN 
  20730. +USSR EAST SIBERIA  14 H AHEAD OF UTC APR 1 - SEP 30 
  20731. +WALES               SEE ENGLAND 
  20732. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1989 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1989
  20733. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1989    Wed Dec 31 17:00:00 1969
  20734. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1989    Sat Sep 28 00:00:00 1996
  20735. @@ -0,0 +1,452 @@
  20736. +# @(#)usno1989    1.3
  20737. +#
  20738. +# From Arthur David Olson (January 19, 1989):
  20739. +# 
  20740. +# Here's time zone information from the United States Naval Observatory;
  20741. +# no corrections have been made, and there are some obvious challenges.
  20742. +# The USNO warns:
  20743. +#    DUE TO FREQUENT CHANGES IN THE LOCAL LAWS GOVERNING DAYLIGHT
  20744. +#    SAVING TIME, WE CANNOT GUARANTEE THE ACCURACY OF THIS
  20745. +#    INFORMATION.  PLEASE ALERT US TO ANY DISCREPANCY YOU MAY
  20746. +#    DISCOVER.
  20747. +#
  20748. +AFGHANISTAN         4.5H AHEAD OF UTC
  20749. +ALBANIA             1 H  AHEAD OF UTC
  20750. +ALBANIA             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20751. +ALBANIA                                (ESTIMATED)
  20752. +ALGERIA             1 H  AHEAD OF UTC
  20753. +AMERICAN SAMOA     11 H  BEHIND UTC
  20754. +ANDORRA             1 H  AHEAD OF UTC
  20755. +ANDORRA             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20756. +ANDORRA                                (ESTIMATED)
  20757. +ANGOLA              1 H  AHEAD OF UTC
  20758. +ARGENTINA           3 H  BEHIND UTC
  20759. +ARUBA               4 H  BEHIND UTC    ALSO BONAIRE, CURACAO,
  20760. +ARUBA                                  ST.MAARTEN
  20761. +AUSTRALIA  WEST     8 H  AHEAD OF UTC  PERTH, EXMOUTH
  20762. +AUSTRALIA  N.T.     9.5H AHEAD OF UTC  DARWIN  NO ADVANCED TIME
  20763. +AUSTRALIA  N.T.                                IN SUMMER
  20764. +AUSTRALIA  SOUTH    9.5H AHEAD OF UTC  ADELAIDE
  20765. +AUSTRALIA                              INCLUDING BROKEN HILL, NSW
  20766. +AUSTRALIA  SOUTH   10.5H AHEAD OF UTC  ADELAIDE OCT 30, '88-MAR
  20767. +AUSTRALIA  SOUTH                       18, '89 INCLUDING BROKEN
  20768. +AUSTRIALIA SOUTH                       HILL, NSW
  20769. +AUSTRALIA  QUEENL  10 H  AHEAD OF UTC
  20770. +AUSTRALIA  NSW     10 H  AHEAD OF UTC  SYDNEY
  20771. +AUSTRALIA  NSW     11 H  AHEAD OF UTC  SYDNEY OCT 30, '88-MAR 18,
  20772. +AUSTRALIA  NSW                         '89
  20773. +AUSTRALIA  TASM.   10 H  AHEAD OF UTC  HOBART
  20774. +AUSTRALIA  TASM.   11 H  AHEAD OF UTC  HOBART OCT 30, '88-MAR 18,
  20775. +AUSTRALIA  TASM.                       '89
  20776. +AUSTRIA             1 H  AHEAD OF UTC
  20777. +AUSTRIA             2 H  AHEAD OF UTC  MAR 27 - SEPT 24
  20778. +AZORES                   SEE PORTUGAL
  20779. +BAHAMAS             5 H  BEHIND UTC    EXCLUDING TURKS AND CAICOS
  20780. +BAHAMAS                                ISLANDS)
  20781. +BAHAMAS             4 H  BEHIND UTC    APR 3 - OCT 29 (SAME
  20782. +BAHAMAS                                EXCLUSION)
  20783. +BAHRAIN             3 H  AHEAD OF UTC
  20784. +BANGLADESH          6 H  AHEAD OF UTC
  20785. +BARBADOS            4 H  BEHIND UTC
  20786. +BELGIUM             1 H  AHEAD OF UTC
  20787. +BELGIUM             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20788. +BELIZE              6 H  BEHIND UTC
  20789. +BENIN PEOPLES REP   1 H  AHEAD OF UTC  DAHOMEY
  20790. +BERMUDA             4 H  BEHIND UTC
  20791. +BERMUDA             3 H  BEHIND UTC    APR 3 - OCT 29
  20792. +BHUTAN              6 H  AHEAD OF UTC
  20793. +BOLIVIA             4 H  BEHIND UTC
  20794. +BONAIRE             4 H  BEHIND UTC    ALSO ARUBA,CURACAO,
  20795. +BONAIRE                                ST.MAARTEN, SABA
  20796. +BOTSWANA            2 H  AHEAD OF UTC
  20797. +BRAZIL     WEST     5 H  BEHIND UTC    TERRITORY OF ACRE
  20798. +BRAZIL     WEST     4 H  BEHIND UTC    ACRE OCT 23, '88-FEB 11,
  20799. +BRAZIL                                 '89 (ESTIMATED)
  20800. +BRAZIL     CENTRAL  4 H  BEHIND UTC    MANAUS
  20801. +BRAZIL     CENTRAL  3 H  BEHIND UTC    MANAUS OCT 23, '88-FEB 11,
  20802. +BRAZIL     CENTRAL                     '89 (ESTIMATED)
  20803. +BRAZIL     EAST     3 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  20804. +BRAZIL     EAST                        PAULO, BRASILIA
  20805. +BRAZIL     EAST     2 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  20806. +BRAZIL                                 PAULO, BRASILIA OCT 23,
  20807. +BRAZIL                                 '88-FEB 11, '89
  20808. +BRAZIL                                 (ESTIMATED)
  20809. +BRAZIL              2 H  BEHIND UTC    ATLANTIC ISLANDS, FERNANDO
  20810. +BRAZIL                                 DE NORONHA
  20811. +BRAZIL              1 H  BEHIND UTC    OCT 23, '88-FEB 11, '89
  20812. +BRAZIL                                 (ESTIMATED)
  20813. +BRAZIL              3 H  BEHIND UTC    FOR MOST MAJOR AIRPORTS.
  20814. +BRITISH VIRGIN I.   4 H  BEHIND UTC
  20815. +BRUNEI              8 H  AHEAD OF UTC
  20816. +BULGARIA            2 H  AHEAD OF UTC
  20817. +BULGARIA            3 H  AHEAD OF UTC  MAR 27 - SEP 24
  20818. +BURKINA FASO        ON UTC
  20819. +BURMA               6.5H AHEAD OF UTC
  20820. +BURUNDI             2 H  AHEAD OF UTC
  20821. +CAMBODIA            SEE KAMPUCHEA
  20822. +CAMEROON            1 H  AHEAD OF UTC
  20823. +CANADA   NEW FDL    3.5H BEHIND UTC    ST.JOHN'S
  20824. +CANADA   NEW FDL    1.5H BEHIND UTC    APR 3 - OCT 29
  20825. +CANADA   ATLANTIC   4 H  BEHIND UTC    HALIFAX
  20826. +CANADA   ATLANTIC   3 H  BEHIND UTC    APR 3 - OCT 29
  20827. +CANADA   EASTERN    5 H  BEHIND UTC    TORONTO, MONTREAL, OTTAWA
  20828. +CANADA   EASTERN    4 H  BEHIND UTC    APR 3 - OCT 29
  20829. +CANADA   CENTRAL    6 H  BEHIND UTC    REGINA, WINNIPEG
  20830. +CANADA   CENTRAL    5 H  BEHIND UTC    APR 3 - OCT 29
  20831. +CANADA   MOUNTAIN   7 H  BEHIND UTC    CALGARY, EDMONTON
  20832. +CANADA   MOUNTAIN   6 H  BEHIND UTC    APR 3 - OCT 29
  20833. +CANADA   PACIFIC    8 H  BEHIND UTC    VANCOUVER
  20834. +CANADA   PACIFIC    7 H  BEHIND UTC    APR 3 - OCT 29
  20835. +CANADA   YUKON      SAME AS PACIFIC    DAWSON
  20836. +CAPE VERDE          1 H  BEHIND UTC
  20837. +CAYMAN ISLANDS      5 H  BEHIND UTC
  20838. +CAROLINE ISLAND    10 H  AHEAD OF UTC  EXCLUDING PONAPE IS.,
  20839. +CAROLINE ISLAND                       KUSAIE, AND PINGELAP
  20840. +CENTRAL AFRICA      1 H  AHEAD OF UTC
  20841. +CEYLON              5.5H AHEAD OF UTC, SEE SRI LANKA
  20842. +CHAD                1 H  AHEAD OF UTC
  20843. +CHANNEL ISLANDS     SEE ENGLAND
  20844. +CHILE               4 H  BEHIND UTC    CONTINENTAL
  20845. +CHILE               3 H  BEHIND UTC    OCT 9, '88-MAR 11, '89
  20846. +CHILE               6 H  BEHIND UTC    EASTER ISLAND
  20847. +CHILE               5 H  BEHIND UTC    OCT 9, '88-MAR 11, '89
  20848. +CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
  20849. +CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
  20850. +COCOS (Keeling) I.  6.5H AHEAD OF UTC
  20851. +COLOMBIA            5 H  BEHIND UTC
  20852. +COMOROS             3 H  AHEAD OF UTC
  20853. +CONGO               1 H  AHEAD OF UTC
  20854. +COOK ISLANDS       10 H  BEHIND UTC
  20855. +COOK ISLANDS        9.5H  BEHIND UTC   OCT 30, '88-MAR 24, '89
  20856. +COOK ISLANDS                           (ESTIMATED)
  20857. +COSTA RICA          6 H  BEHIND UTC
  20858. +COTE D'IVOIRE       ON UTC
  20859. +CUBA                5 H  BEHIND UTC
  20860. +CUBA                4 H  BEHIND UTC    MAR 20 - OCT 8
  20861. +CURACAO             4 H  BEHIND UTC    ALSO BONAIRE, ARUBA,
  20862. +CURACAO                                ST.MAARTEN
  20863. +CYPRUS              2 H  AHEAD OF UTC
  20864. +CYPRUS              3 H  AHEAD OF UTC  MAR 27 - SEP 24
  20865. +CZECHOSLOVAKIA      1 H  AHEAD OF UTC
  20866. +CZECHOSLOVAKIA      2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20867. +DENMARK             1 H  AHEAD OF UTC
  20868. +DENMARK             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20869. +DENMK. FAEROE IS    1 H  AHEAD OF UTC  MAR 27 - SEP 24
  20870. +DJIBOUTI            3 H  AHEAD OF UTC
  20871. +DOMINICA            4 H  BEHIND UTC
  20872. +DOMINICAN REP       4 H  BEHIND UTC
  20873. +ECUADOR             5 H  BEHIND UTC    CONTINENTAL
  20874. +ECUADOR             6 H  BEHIND UTC    GALAPAGOS ISLANDS
  20875. +EGYPT               2 H  AHEAD OF UTC
  20876. +EGYPT               3 H  AHEAD OF UTC  MAY 17 - SEP 30 (AFTER
  20877. +EGYPT                                  RAMADAN)
  20878. +EL SALVADOR         6 H  BEHIND UTC
  20879. +ENGLAND             ON UTC             (WALES, SCOTLAND, N.I.,
  20880. +ENGLAND                                CH. IS.)
  20881. +ENGLAND             1 H  AHEAD OF UTC  MAR 27 - OCT 22
  20882. +ENEZUELA           4 H  BEHIND UTC
  20883. +EQUITORIAL GUINEA   1 H  AHEAD OF UTC
  20884. +ETHIOPIA            3 H  AHEAD OF UTC
  20885. +FALKLAND ISLANDS    4 H  BEHIND UTC
  20886. +FALKLAND ISLANDS    3 H  BEHIND UTC    SEP 11, '88-APR 15, '89
  20887. +FALKLAND ISLANDS                       (ESTIMATED)
  20888. +FAROE ISLAND        ON UTC
  20889. +FAROE ISLAND        1 H  AHEAD OF UTC  MAR 27 - SEP 24
  20890. +FIJI               12 H  AHEAD OF UTC
  20891. +FINLAND             2 H  AHEAD OF UTC
  20892. +FINLAND             3 H  AHEAD OF UTC  MAR 27 - SEP 24
  20893. +FRANCE              1 H  AHEAD OF UTC
  20894. +FRANCE              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20895. +FRENCH GUIANA       3 H  BEHIND UTC
  20896. +FRENCH POLYNESIA    9 H  BEHIND UTC    GAMBIER ISLAND
  20897. +FRENCH POLYNESIA    9.5H BEHIND UTC    MARQUESAS ISLANDS
  20898. +FRENCH POLYNESIA   10 H  BEHIND UTC    SOCIETY ISLANDS, TUBUAI
  20899. +FRENCH POLYNESIA                       ISLANDS, TUAMOTU ISLAND,
  20900. +FRENCH POLYNESIA                       TAHITI
  20901. +GABON               1 H  AHEAD OF UTC
  20902. +GAMBIA              ON UTC
  20903. +GERMANY ALL         1 H  AHEAD OF UTC
  20904. +GERMANY ALL         2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20905. +GHANA               ON UTC
  20906. +GIBRALTAR           1 H  AHEAD OF UTC
  20907. +GIBRALTAR           2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20908. +GREECE              2 H  AHEAD OF UTC
  20909. +GREECE              3 H  AHEAD OF UTC  MAR 27 - SEP 24
  20910. +GREENLAND           4 H  BEHIND UTC    THULE AIRBASE YEAR ROUND
  20911. +GREENLAND           3 H  BEHIND UTC    ANGMAGSSALIK AND W. COAST
  20912. +GREENLAND           2 H  BEHIND UTC    MAR 27 - SEP 24
  20913. +GREENLAND           1 H  BEHIND UTC    SCORESBYSUND
  20914. +GREENLAND           ON UTC             MAR 27 - SEP 24
  20915. +GRENADA             4 H  BEHIND UTC
  20916. +GUADELOUPE          4 H  BEHIND UTC    ST. BARTHELEMY, NORTHERN
  20917. +GUADELOUPE                             ST. MARTIN MARTINIQUE
  20918. +GUAM               10 H  AHEAD OF UTC
  20919. +GUATEMALA           6 H  BEHIND UTC
  20920. +GUINEA              ON UTC
  20921. +GUINEA BISSAU       ON UTC
  20922. +GUINEA REPUBLIC     ON UTC
  20923. +GUINEA EQUATORIAL   1 H  AHEAD OF UTC
  20924. +GUYANA              3 H  BEHIND UTC
  20925. +HAITI               5 H  BEHIND UTC
  20926. +HAITI               4 H  BEHIND UTC    APR 3 - OCT 29
  20927. +HOLLAND             SEE NETHERLANDS
  20928. +HONDURAS            6 H  BEHIND UTC
  20929. +HONG KONG           8 H  AHEAD OF UTC
  20930. +HUNGARY             1 H  AHEAD OF UTC
  20931. +HUNGARY             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20932. +ICELAND             ON UTC
  20933. +INDIA               5.5H AHEAD OF UTC  INCLUDING ANDAMAN ISLANDS
  20934. +INDONESIA WEST      7 H  AHEAD OF UTC  SUMATRA, JAVA, BALI,
  20935. +INDONESIA WEST                         JAKARTA
  20936. +INDONESIA CENTRAL   8 H  AHEAD OF UTC  KALIMANTAN, SULAWESI
  20937. +INDONESIA EAST      9 H  AHEAD OF UTC  IRIAN, BARAT
  20938. +IRAN                3.5H AHEAD OF UTC
  20939. +IRAQ                3 H  AHEAD OF UTC
  20940. +IRAQ                4 H  AHEAD OF UTC  APR 1 - SEP 30
  20941. +IRELAND             ON UTC
  20942. +IRELAND             1 H  AHEAD OF UTC  MAR 27 - OCT 22
  20943. +ISRAEL              2 H  AHEAD OF UTC
  20944. +ISRAEL              3 H  AHEAD OF UTC  APR 10 - SEP 3
  20945. +ITALY               1 H  AHEAD OF UTC
  20946. +ITALY               2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20947. +IVORY COAST         ON UTC
  20948. +IWAN              8 H  AHEAD OF UTC
  20949. +JAMAICA             5 H  BEHIND UTC
  20950. +JAPAN               9 H  AHEAD OF UTC
  20951. +JOHNSTON ISLAND    10 H  BEHIND UTC
  20952. +JORDAN              2 H  AHEAD OF UTC
  20953. +JORDAN              3 H  AHEAD OF UTC  APR 1 - OCT 6
  20954. +KAMPUCHEA           7 H  AHEAD OF UTC
  20955. +KENYA               3 H  AHEAD OF UTC
  20956. +KIRIBATI, REP OF   12 H  AHEAD OF UTC  CANTON, ENDERBURY ISLANDS
  20957. +KIRIBATI, REP OF   11 H  AHEAD OF UTC  CHRISTMAS ISLAND
  20958. +KOREA               9 H  AHEAD OF UTC
  20959. +KOREA, REP OF       9 H  AHEAD OF UTC
  20960. +KOREA, REP OF      10 H  AHEAD OF UTC  MAY 8 - OCT 8
  20961. +KUWAIT              3 H  AHEAD OF UTC
  20962. +KUSAIE, PINGELAP  12 H  AHEAD OF UTC  INCLUDING MARSHALL IS.,
  20963. +KUSAIE, PINGELAP                      EXCLUDING KWAJALEIN)
  20964. +KWAJALEIN         12 H  BEHIND UTC
  20965. +LAOS                7 H  AHEAD OF UTC
  20966. +LEBANON             2 H  AHEAD OF UTC
  20967. +LEBANON             3 H  AHEAD OF UTC  JUN 1 - OCT 31
  20968. +LEEWARD ISLANDS     4 H BEHIND UTC     ANTIGUA, DOMINICA,
  20969. +LEEWARD ISLANDS                        MONTSERRAT, ST.
  20970. +LEEWARD ISLAANDS                       CHRISTOPHER, ST. KITTS,
  20971. +LEEWARD ISLANDS                        NEVIS, ANGUILLA
  20972. +LESOTHO             2 H  AHEAD OF UTC
  20973. +LIBERIA             ON UTC
  20974. +LIBYAN ARAB         1 H  AHEAD OF UTC  JAMAHIRIYA/LIBYA
  20975. +LIBYAN ARAB         2 H  AHEAD OF UTC  APR 1 - SEP 30 JAMAHIRIYA/LIBYA
  20976. +LIECHTENSTEIN       1 H  AHEAD OF UTC
  20977. +LIECHTENSTEIN       2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20978. +LUXEMBOURG          1 H  AHEAD OF UTC
  20979. +LUXEMBOURG          2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20980. +MACAO               8 H  AHEAD OF UTC
  20981. +MADAGASCAR          3 H  AHEAD OF UTC
  20982. +MADEIRA             SEE PORTUGAL
  20983. +MALAWI              2 H  AHEAD OF UTC
  20984. +MALAYSIA            8 H  AHEAD OF UTC
  20985. +MALDIVES            5 H  AHEAD OF UTC
  20986. +MALI                ON UTC
  20987. +MALTA               1 H  AHEAD OF UTC
  20988. +MALTA               2 H  AHEAD OF UTC  MAR 27 - SEP 24
  20989. +MARTINIQUE          4 H  BEHIND UTC
  20990. +MAURITANIA          ON UTC
  20991. +MAURITIUS           4 H  AHEAD OF UTC
  20992. +MARIANA ISLAND    10 H  AHEAD OF UTC  EXCLUDING GUAM
  20993. +MEXICO BAJA CAL N   7 H  BEHIND UTC    BAJA CALIFORNIA SUR AND
  20994. +MEXICO BAJA CAL N                      N. PACIFIC COAST (STATES
  20995. +MEXICO BAJA CAL N                      OF SINALOA AND SONORA)
  20996. +MEXICO BAJA CAL N   8 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  20997. +MEXICO BAJA CAL N                      - OCT 29
  20998. +MEXICO BAJA CAL N   7 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  20999. +MEXICO BAJA CAL N                      - 0CT 29
  21000. +MEXICO              6 H  BEHIND UTC    STATES OF DURANGO,
  21001. +MEXICO                                 COAHUILA, NUEVO LEON,
  21002. +MEXICO                                 TAMAULIPAS
  21003. +MEXICO              5 H  BEHIND UTC    STATES OF DURANGO,
  21004. +MEXICO                                 COAHUILA, NUEVO LEON,
  21005. +MEXICO                                 TAMAULIPAS  APR 3 - OCT 29
  21006. +MEXICO              6 H  BEHIND UTC    GENERAL MEXICO, STATES OF
  21007. +MEXICO                                 CAMPECHE, QUINTANA ROO AND
  21008. +MEXICO                                 YUCATAN
  21009. +MIDWAY ISLAND      11 H  BEHIND UTC
  21010. +MONACO              1 H  AHEAD OF UTC
  21011. +MONACO              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  21012. +MONGOLIA            8 H  AHEAD OF UTC
  21013. +MONGOLIA            9 H  AHEAD OF UTC  MAR 27 - SEP 24
  21014. +MONTSERRAT          4 H  BEHIND UTC
  21015. +MOROCCO             ON UTC
  21016. +MOZAMBIQUE          2 H  AHEAD OF UTC
  21017. +NAMIBIA             2 H  AHEAD OF UTC
  21018. +NAURU, REP OF      12 H  AHEAD OF UTC
  21019. +NEPAL              5H45M AHEAD OF UTC
  21020. +NETHERLANDS         1 H  AHEAD OF UTC
  21021. +NETHERLANDS         2 H  AHEAD OF UTC  MAR 27 - SEP 24
  21022. +NETHERLANDS         4 H  BEHIND UTC    ANTILLES AND SOUTHERN ST.
  21023. +NETHERLANDS                            MAARTEN
  21024. +NEW CALEDONIA      11 H  AHEAD OF UTC
  21025. +NEW HEBRIDES        SEE VANUATU
  21026. +NEW ZEALAND        12 H  AHEAD OF UTC  (EXCLUDING CHATHAM ISLAND)
  21027. +NEW ZEALAND        13 H  AHEAD OF UTC  OCT 30, '88-MAR 4, '89
  21028. +NEW ZEALAND       12H45M AHEAD OF UTC  CHATHAM ISLAND
  21029. +NICARAGUA           6 H  BEHIND UTC
  21030. +NIGER               1 H  AHEAD OF UTC
  21031. +NIGERIA             1 H  AHEAD OF UTC
  21032. +NIUE ISLAND        11 H  BEHIND UTC
  21033. +NORFOLK ISLAND    11H30M AHEAD OF UTC
  21034. +NORTHERN IRELAND    ON UTC             WALES, SCOTLAND, N.I.,
  21035. +NORTHERN IRELAND                       CH.IS.
  21036. +NORTHERN IRELAND    1 H  AHEAD OF UTC  MAR 27 - OCT 22
  21037. +NORWAY              1 H  AHEAD OF UTC
  21038. +NORWAY              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  21039. +OGO                ON UTC
  21040. +OMAN                4 H  AHEAD OF UTC
  21041. +PACIFIC ISLAND T.T.
  21042. +PALAU ISLAND       9 H  AHEAD OF UTC
  21043. +PAKISTAN            5 H  AHEAD OF UTC
  21044. +PANAMA              5 H  BEHIND UTC
  21045. +PAPUA NEW GUINEA   10 H  AHEAD OF UTC  INCLUDING BOUGAINVILLE
  21046. +PAPUA NEW GUINEA                       ISLAND
  21047. +PARAGUAY            4 H  BEHIND UTC
  21048. +PARAGUAY            3 H  BEHIND UTC    OCT 1, '88-MAR 31, '89
  21049. +PERU                5 H  BEHIND UTC
  21050. +PHILIPPINES         8 H  AHEAD OF UTC
  21051. +PONAPE ISLAND     11 H  AHEAD OF UTC
  21052. +POLAND              1 H  AHEAD OF UTC
  21053. +POLAND              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  21054. +PORTUGAL MAINLAND   ON UTC
  21055. +PORTUGAL MAINLAND   1 H  AHEAD OF UTC  MAR 27 - SEP 24
  21056. +PORTUGAL AZORES     1 H  BEHIND UTC
  21057. +PORTUGAL AZORES     ON UTC             MAR 27 - SEP 24
  21058. +PORTUGAL MADEIRA    ON UTC
  21059. +PORTUGAL MADEIRA    1 H  AHEAD OF UTC  MAR 27 - SEP 24
  21060. +PUERTO RICO         4 H  BEHIND UTC
  21061. +QATAR               3 H  AHEAD OF UTC
  21062. +ROMANIA             2 H  AHEAD OF UTC
  21063. +ROMANIA             3 H  AHEAD OF UTC  MAR 27 - SEP 24
  21064. +RUSSIA              SEE USSR
  21065. +RWANDA              2 H  AHEAD OF UTC
  21066. +SABA                4 H  BEHIND UTC    ALSO BONAIRE, CURACAO,
  21067. +SAMOA              11 H  BEHIND UTC
  21068. +SAN MARINO          1 H  AHEAD OF UTC
  21069. +SAN MARINO          2 H  AHEAD OF UTC  MAR 27 - SEP 24
  21070. +SAN SALVADOR        6  H  BEHIND UTC
  21071. +SAO TOME ISLAND     ON UTC             AND PRINCIPE ISLAND
  21072. +SAUDI ARABIA        3 H  AHEAD OF UTC
  21073. +SCOTLAND            SEE ENGLAND
  21074. +SENEGAL             ON UTC
  21075. +SEYCHELLES          4 H  AHEAD OF UTC
  21076. +SIERRA LEONE        ON UTC
  21077. +SINGAPORE           8 H  AHEAD OF UTC
  21078. +SOLOMON ISLANDS    11 H  AHEAD OF UTC  EXCLUDING BOUGAINVILLE
  21079. +SOLOMON ISLANDS                        ISLAND
  21080. +SOMALI              3 H  AHEAD OF UTC
  21081. +SOUTH AFRICA        2 H  AHEAD OF UTC
  21082. +SPAIN  CANARY IS    ON UTC
  21083. +SPAIN  CANARY IS    1 H  AHEAD OF UTC  MAR 27 - SEP 24
  21084. +SPAIN               1 H  AHEAD OF UTC  CONTINENTAL, BALEARIC AND
  21085. +SPAIN                                  MALLORCA ISLANDS
  21086. +SPAIN               2 H  AHEAD OF UTC  CONTINENTAL, BALEARIC AND
  21087. +SPAIN                                  MALLORCA ISLANDS  MAR 27 -
  21088. +SPAIN                                  SEP 24
  21089. +SPAIN  MAINLAND     1 H  AHEAD OF UTC  MELILLA
  21090. +SPAIN  MAINLAND     2 H  AHEAD OF UTC  MAR 27 - SEP 24
  21091. +SRI LANKA          5H30M AHEAD OF UTC
  21092. +ST.MAARTEN
  21093. +ST.KITTS-NEVIS     4 H  BEHIND UTC
  21094. +ST.LUCIA           4 H  BEHIND UTC
  21095. +ST.PIERRE          3 H  BEHIND UTC    INCLUDING MIQUELON
  21096. +ST.PIERRE          2 H  BEHIND UTC    INLCUDING MIQUELON  APR 3
  21097. +ST.PIERRE                             - OCT 29
  21098. +ST.VINCENT         4 H  BEHIND UTC    INCLUDING THE GRENADINES
  21099. +ST. HELENA          ON UTC
  21100. +SURINAME            3 H  BEHIND UTC
  21101. +SWAZILAND           2 H  AHEAD OF UTC
  21102. +SWEDEN              1 H  AHEAD OF UTC
  21103. +SWEDEN              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  21104. +SWITZERLAND         1 H  AHEAD OF UTC
  21105. +SWITZERLAND         2 H  AHEAD OF UTC  MAR 27 - SEP 24
  21106. +SYRIA               2 H  AHEAD OF UTC
  21107. +SYRIA               3 H  AHEAD OF UTC  MAR 15 - OCT 30
  21108. +TAHITI             10 H  BEHIND UTC
  21109. +TANZANIA            3 H  AHEAD OF UTC
  21110. +THAILAND            7 H  AHEAD OF UTC
  21111. +TRINIDAD / TOBAGO   4 H  BEHIND UTC
  21112. +TUNISIA             1 H  AHEAD OF UTC
  21113. +TUNISIA             2 H  AHEAD OF UTC  APR 10 - SEP 24
  21114. +TURKEY              2 H  AHEAD OF UTC
  21115. +TURKEY              3 H  AHEAD OF UTC  MAR 27 - SEP 24
  21116. +TURKS AND CAICOS    5 H  BEHIND UTC
  21117. +TURKS AND CAICOS    4 H  BEHIND UTC    APR 3 - OCT 29
  21118. +TUVALU             12 H  AHEAD OF UTC
  21119. +UDAN               2 H  AHEAD OF UTC
  21120. +UGANDA              3 H  AHEAD OF UTC
  21121. +UNITED ARAB EMIR.   4 H  AHEAD OF UTC  ABU DHABI, DUBAI, SHARJAH,
  21122. +UNITED ARAB EMIR                       RAS AL KHAIMAH
  21123. +UNITED KINGDOM      ON UTC             WALES, SCOTLAND, N.I., CH.
  21124. +UNITED KINGDOM                         IS.
  21125. +UNITED KINGDOM      1 H  AHEAD OF UTC  MAR 27 - OCT 22
  21126. +UNITED STATES       SEE USA
  21127. +UPPER VOLTA         ON UTC
  21128. +URUGUAY             3 H  BEHIND UTC
  21129. +URUGUAY             2 H  BEHIND UTC    DEC 11, '88-FEB 25, '89
  21130. +URAGUAY                                (ESTIMATED)
  21131. +USA  EASTERN       5 H  BEHIND UTC    NEW YORK, WASHINGTON
  21132. +USA  EASTERN       4 H  BEHIND UTC    APR 3 - OCT 30
  21133. +USA  CENTRAL       6 H  BEHIND UTC    CHICAGO, HOUSTON
  21134. +USA  CENTRAL       5 H  BEHIND UTC    APR 3 - OCT 30
  21135. +USA  MOUNTAIN      7 H  BEHIND UTC    DENVER
  21136. +USA  MOUNTAIN      6 H  BEHIND UTC    APR 3 - OCT 30
  21137. +USA  PACIFIC       8 H  BEHIND UTC    L.A., SAN FRANCISCO
  21138. +USA  PACIFIC       7 H  BEHIND UTC    APR 3 - OCT 30
  21139. +USA  ALASKA STD    9 H  BEHIND UTC    MOST OF ALASKA     (AKST)
  21140. +USA  ALASKA STD    8 H  BEHIND UTC    APR 3 - OCT 30 (AKDT)
  21141. +USA  ALEUTIAN     10 H  BEHIND UTC    ISLANDS WEST OF 170W
  21142. +USA  - " -         9 H  BEHIND UTC    APR 3 - OCT 30
  21143. +USA  HAWAII       10 H  BEHIND UTC
  21144. +USA  BERING       11 H  BEHIND UTC    SAMOA, MIDWAY
  21145. +USA  FOR SPECIFIC INFO ON USA ZONES/TIMES CALL DOT 202-426-4520
  21146. +USSR WEST EUROP     3 H  AHEAD OF UTC  LENINGRAD, MOSCOW
  21147. +USSR WEST EUROP     4 H  AHEAD OF UTC  APR 1 - SEP 30
  21148. +USSR CENTRAL EUR    4 H  AHEAD OF UTC  ROSTOV, BAKU
  21149. +USSR CENTRAL EUR    5 H  AHEAD OF UTC  APR 1 - SEP 30
  21150. +USSR EAST EUROP     5 H  AHEAD OF UTC  SVERDLOVSK
  21151. +USSR EAST EUROP     6 H  AHEAD OF UTC  APR 1 - SEP 30
  21152. +USSR WEST SIBERIAN  6 H  AHEAD OF UTC  TASHKENT, ALMA ATA
  21153. +USSR WEST SIBERIAN  7 H  AHEAD OF UTC  APR 1 - SEP 30
  21154. +USSR WEST-CENTRAL   7 H  AHEAD OF UTC  NOVOSIBIRSK
  21155. +USSR WEST-CENTRAL   8 H  AHEAD OF UTC  APR 1 - SEP 30
  21156. +USSR WEST-CENTRAL   8 H  AHEAD OF UTC  IRKUTSK
  21157. +USSR WEST-CENTRAL   9 H  AHEAD OF UTC  APR 1 - SEP 30
  21158. +USSR CENTRAL SIB    9 H  AHEAD OF UTC  YAKUTSK
  21159. +USSR CENTRAL SIB   10 H  AHEAD OF UTC  APR 1 - SEP 30
  21160. +USSR CENTRAL SIB   10 H  AHEAD OF UTC  VLADIVOSTOK
  21161. +USSR CENTRAL SIB   11 H  AHEAD OF UTC  APR 1 - SEP 30
  21162. +USSR EAST SIBERIA  11 H  AHEAD OF UTC  MAGADAN
  21163. +USSR EAST SIBERIA  12 H  AHEAD OF UTC  APR 1 - SEP 30
  21164. +USSR EAST SIBERIA  12 H  AHEAD OF UTC  PETROPAVLOVSK
  21165. +USSR EAST SIBERIA  13 H  AHEAD OF UTC  APR 1 - SEP 30
  21166. +USSR EAST SIBERIA  13 H  AHEAD OF UTC  UELEN
  21167. +USSR EAST SIBERIA  14 H  AHEAD OF UTC  APR 1 - SEP 30
  21168. +VANUATU            11 H  AHEAD OF UTC  (NEW HEBRIDES)
  21169. +VANUATU            12 H  AHEAD OF UTC  SEP 25, '88-MAR 25, '89
  21170. +VANUATU                                (ESTIMATED)
  21171. +VATICAN             1 H  AHEAD OF UTC
  21172. +VATICAN             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  21173. +VIETNAM             7 H  AHEAD OF UTC
  21174. +VIRGIN ISLANDS      4 H  BEHIND UTC    ST.CROIX, ST.THOMAS,
  21175. +VIRGIN ISLANDS                         ST.JOHN
  21176. +WAKE ISLAND        12 H  AHEAD OF UTC
  21177. +WALES               SEE ENGLAND
  21178. +WALLIS/FUTUNA IS.  12 H  AHEAD OF UTC
  21179. +WINDWARD ISLANDS    4 H  BEHIND UTC    GRENADA, ST. LUCIA
  21180. +YEMEN               3 H  AHEAD OF UTC  BOTH REPUBLICS
  21181. +YUGOSLAVIA          1 H  AHEAD OF UTC
  21182. +YUGOSLAVIA          2 H  AHEAD OF UTC  MAR 27 - SEP 24
  21183. +ZAIRE  EAST         1 H  AHEAD OF UTC  KINSHASA MBANDAKA
  21184. +ZAIRE  WEST         2 H  AHEAD OF UTC  LUBUMBASHI, KASAI, KIVU,
  21185. +ZAIRE  WEST                            HAUT-ZAIRE, SHABA
  21186. +ZAMBIA              2 H  AHEAD OF UTC
  21187. +ZIMBABWE            2 H  AHEAD OF UTC
  21188. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.c amiga/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.c
  21189. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.c    Wed Dec 31 17:00:00 1969
  21190. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.c    Sat Sep 28 00:00:00 1996
  21191. @@ -0,0 +1,678 @@
  21192. +/* Getopt for GNU.
  21193. +   NOTE: getopt is now part of the C library, so if you don't know what
  21194. +   "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
  21195. +   before changing it!
  21196. +
  21197. +   Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc.
  21198. +
  21199. +   This program is free software; you can redistribute it and/or modify
  21200. +   it under the terms of the GNU General Public License as published by
  21201. +   the Free Software Foundation; either version 2, or (at your option)
  21202. +   any later version.
  21203. +
  21204. +   This program is distributed in the hope that it will be useful,
  21205. +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  21206. +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21207. +   GNU General Public License for more details.
  21208. +
  21209. +   You should have received a copy of the GNU General Public License
  21210. +   along with this program; if not, write to the Free Software
  21211. +   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  21212. +
  21213. +/* AIX requires this to be the first thing in the file. */
  21214. +#ifdef __GNUC__
  21215. +#define alloca __builtin_alloca
  21216. +#else /* not __GNUC__ */
  21217. +#if defined(sparc) && !defined(USG) && !defined(SVR4) && !defined(__svr4__)
  21218. +#include <alloca.h>
  21219. +#else
  21220. +#ifdef _AIX
  21221. + #pragma alloca
  21222. +#else
  21223. +char *alloca ();
  21224. +#endif
  21225. +#endif /* sparc */
  21226. +#endif /* not __GNUC__ */
  21227. +
  21228. +#ifdef    LIBC
  21229. +/* For when compiled as part of the GNU C library.  */
  21230. +#include <ansidecl.h>
  21231. +#endif
  21232. +
  21233. +#include <stdio.h>
  21234. +
  21235. +/* This needs to come after some library #include
  21236. +   to get __GNU_LIBRARY__ defined.  */
  21237. +#ifdef    __GNU_LIBRARY__
  21238. +#undef    alloca
  21239. +#include <stdlib.h>
  21240. +#include <string.h>
  21241. +#else    /* Not GNU C library.  */
  21242. +#define    __alloca    alloca
  21243. +#endif    /* GNU C library.  */
  21244. +
  21245. +
  21246. +#ifndef __STDC__
  21247. +#define const
  21248. +#endif
  21249. +
  21250. +/* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a
  21251. +   long-named option.  Because this is not POSIX.2 compliant, it is
  21252. +   being phased out. */
  21253. +#define GETOPT_COMPAT
  21254. +
  21255. +/* This version of `getopt' appears to the caller like standard Unix `getopt'
  21256. +   but it behaves differently for the user, since it allows the user
  21257. +   to intersperse the options with the other arguments.
  21258. +
  21259. +   As `getopt' works, it permutes the elements of ARGV so that,
  21260. +   when it is done, all the options precede everything else.  Thus
  21261. +   all application programs are extended to handle flexible argument order.
  21262. +
  21263. +   Setting the environment variable POSIXLY_CORRECT disables permutation.
  21264. +   Then the behavior is completely standard.
  21265. +
  21266. +   GNU application programs can use a third alternative mode in which
  21267. +   they can distinguish the relative order of options and other arguments.  */
  21268. +
  21269. +#include "getopt.h"
  21270. +
  21271. +/* For communication from `getopt' to the caller.
  21272. +   When `getopt' finds an option that takes an argument,
  21273. +   the argument value is returned here.
  21274. +   Also, when `ordering' is RETURN_IN_ORDER,
  21275. +   each non-option ARGV-element is returned here.  */
  21276. +
  21277. +char *optarg = 0;
  21278. +
  21279. +/* Index in ARGV of the next element to be scanned.
  21280. +   This is used for communication to and from the caller
  21281. +   and for communication between successive calls to `getopt'.
  21282. +
  21283. +   On entry to `getopt', zero means this is the first call; initialize.
  21284. +
  21285. +   When `getopt' returns EOF, this is the index of the first of the
  21286. +   non-option elements that the caller should itself scan.
  21287. +
  21288. +   Otherwise, `optind' communicates from one call to the next
  21289. +   how much of ARGV has been scanned so far.  */
  21290. +
  21291. +int optind = 0;
  21292. +
  21293. +/* The next char to be scanned in the option-element
  21294. +   in which the last option character we returned was found.
  21295. +   This allows us to pick up the scan where we left off.
  21296. +
  21297. +   If this is zero, or a null string, it means resume the scan
  21298. +   by advancing to the next ARGV-element.  */
  21299. +
  21300. +static char *nextchar;
  21301. +
  21302. +/* Callers store zero here to inhibit the error message
  21303. +   for unrecognized options.  */
  21304. +
  21305. +int opterr = 1;
  21306. +
  21307. +/* Describe how to deal with options that follow non-option ARGV-elements.
  21308. +
  21309. +   If the caller did not specify anything,
  21310. +   the default is REQUIRE_ORDER if the environment variable
  21311. +   POSIXLY_CORRECT is defined, PERMUTE otherwise.
  21312. +
  21313. +   REQUIRE_ORDER means don't recognize them as options;
  21314. +   stop option processing when the first non-option is seen.
  21315. +   This is what Unix does.
  21316. +   This mode of operation is selected by either setting the environment
  21317. +   variable POSIXLY_CORRECT, or using `+' as the first character
  21318. +   of the list of option characters.
  21319. +
  21320. +   PERMUTE is the default.  We permute the contents of ARGV as we scan,
  21321. +   so that eventually all the non-options are at the end.  This allows options
  21322. +   to be given in any order, even with programs that were not written to
  21323. +   expect this.
  21324. +
  21325. +   RETURN_IN_ORDER is an option available to programs that were written
  21326. +   to expect options and other ARGV-elements in any order and that care about
  21327. +   the ordering of the two.  We describe each non-option ARGV-element
  21328. +   as if it were the argument of an option with character code 1.
  21329. +   Using `-' as the first character of the list of option characters
  21330. +   selects this mode of operation.
  21331. +
  21332. +   The special argument `--' forces an end of option-scanning regardless
  21333. +   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
  21334. +   `--' can cause `getopt' to return EOF with `optind' != ARGC.  */
  21335. +
  21336. +static enum
  21337. +{
  21338. +  REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
  21339. +} ordering;
  21340. +
  21341. +#ifdef    __GNU_LIBRARY__
  21342. +#include <string.h>
  21343. +#define    my_index    strchr
  21344. +#define    my_bcopy(src, dst, n)    memcpy ((dst), (src), (n))
  21345. +#else
  21346. +
  21347. +/* Avoid depending on library functions or files
  21348. +   whose names are inconsistent.  */
  21349. +
  21350. +char *getenv ();
  21351. +
  21352. +static char *
  21353. +my_index (string, chr)
  21354. +     char *string;
  21355. +     int chr;
  21356. +{
  21357. +  while (*string)
  21358. +    {
  21359. +      if (*string == chr)
  21360. +    return string;
  21361. +      string++;
  21362. +    }
  21363. +  return 0;
  21364. +}
  21365. +
  21366. +static void
  21367. +my_bcopy (from, to, size)
  21368. +     char *from, *to;
  21369. +     int size;
  21370. +{
  21371. +  int i;
  21372. +  for (i = 0; i < size; i++)
  21373. +    to[i] = from[i];
  21374. +}
  21375. +#endif                /* GNU C library.  */
  21376. +
  21377. +/* Handle permutation of arguments.  */
  21378. +
  21379. +/* Describe the part of ARGV that contains non-options that have
  21380. +   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
  21381. +   `last_nonopt' is the index after the last of them.  */
  21382. +
  21383. +static int first_nonopt;
  21384. +static int last_nonopt;
  21385. +
  21386. +/* Exchange two adjacent subsequences of ARGV.
  21387. +   One subsequence is elements [first_nonopt,last_nonopt)
  21388. +   which contains all the non-options that have been skipped so far.
  21389. +   The other is elements [last_nonopt,optind), which contains all
  21390. +   the options processed since those non-options were skipped.
  21391. +
  21392. +   `first_nonopt' and `last_nonopt' are relocated so that they describe
  21393. +   the new indices of the non-options in ARGV after they are moved.  */
  21394. +
  21395. +static void
  21396. +exchange (argv)
  21397. +     char **argv;
  21398. +{
  21399. +  int nonopts_size = (last_nonopt - first_nonopt) * sizeof (char *);
  21400. +  char **temp = (char **) __alloca (nonopts_size);
  21401. +
  21402. +  /* Interchange the two blocks of data in ARGV.  */
  21403. +
  21404. +  my_bcopy (&argv[first_nonopt], temp, nonopts_size);
  21405. +  my_bcopy (&argv[last_nonopt], &argv[first_nonopt],
  21406. +        (optind - last_nonopt) * sizeof (char *));
  21407. +  my_bcopy (temp, &argv[first_nonopt + optind - last_nonopt], nonopts_size);
  21408. +
  21409. +  /* Update records for the slots the non-options now occupy.  */
  21410. +
  21411. +  first_nonopt += (optind - last_nonopt);
  21412. +  last_nonopt = optind;
  21413. +}
  21414. +
  21415. +/* Scan elements of ARGV (whose length is ARGC) for option characters
  21416. +   given in OPTSTRING.
  21417. +
  21418. +   If an element of ARGV starts with '-', and is not exactly "-" or "--",
  21419. +   then it is an option element.  The characters of this element
  21420. +   (aside from the initial '-') are option characters.  If `getopt'
  21421. +   is called repeatedly, it returns successively each of the option characters
  21422. +   from each of the option elements.
  21423. +
  21424. +   If `getopt' finds another option character, it returns that character,
  21425. +   updating `optind' and `nextchar' so that the next call to `getopt' can
  21426. +   resume the scan with the following option character or ARGV-element.
  21427. +
  21428. +   If there are no more option characters, `getopt' returns `EOF'.
  21429. +   Then `optind' is the index in ARGV of the first ARGV-element
  21430. +   that is not an option.  (The ARGV-elements have been permuted
  21431. +   so that those that are not options now come last.)
  21432. +
  21433. +   OPTSTRING is a string containing the legitimate option characters.
  21434. +   If an option character is seen that is not listed in OPTSTRING,
  21435. +   return '?' after printing an error message.  If you set `opterr' to
  21436. +   zero, the error message is suppressed but we still return '?'.
  21437. +
  21438. +   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
  21439. +   so the following text in the same ARGV-element, or the text of the following
  21440. +   ARGV-element, is returned in `optarg'.  Two colons mean an option that
  21441. +   wants an optional arg; if there is text in the current ARGV-element,
  21442. +   it is returned in `optarg', otherwise `optarg' is set to zero.
  21443. +
  21444. +   If OPTSTRING starts with `-' or `+', it requests different methods of
  21445. +   handling the non-option ARGV-elements.
  21446. +   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
  21447. +
  21448. +   Long-named options begin with `--' instead of `-'.
  21449. +   Their names may be abbreviated as long as the abbreviation is unique
  21450. +   or is an exact match for some defined option.  If they have an
  21451. +   argument, it follows the option name in the same ARGV-element, separated
  21452. +   from the option name by a `=', or else the in next ARGV-element.
  21453. +   When `getopt' finds a long-named option, it returns 0 if that option's
  21454. +   `flag' field is nonzero, the value of the option's `val' field
  21455. +   if the `flag' field is zero.
  21456. +
  21457. +   The elements of ARGV aren't really const, because we permute them.
  21458. +   But we pretend they're const in the prototype to be compatible
  21459. +   with other systems.
  21460. +
  21461. +   LONGOPTS is a vector of `struct option' terminated by an
  21462. +   element containing a name which is zero.
  21463. +
  21464. +   LONGIND returns the index in LONGOPT of the long-named option found.
  21465. +   It is only valid when a long-named option has been found by the most
  21466. +   recent call.
  21467. +
  21468. +   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
  21469. +   long-named options.  */
  21470. +
  21471. +int
  21472. +_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
  21473. +     int argc;
  21474. +     char *const *argv;
  21475. +     const char *optstring;
  21476. +     const struct option *longopts;
  21477. +     int *longind;
  21478. +     int long_only;
  21479. +{
  21480. +  int option_index;
  21481. +
  21482. +  optarg = 0;
  21483. +
  21484. +  /* Initialize the internal data when the first call is made.
  21485. +     Start processing options with ARGV-element 1 (since ARGV-element 0
  21486. +     is the program name); the sequence of previously skipped
  21487. +     non-option ARGV-elements is empty.  */
  21488. +
  21489. +  if (optind == 0)
  21490. +    {
  21491. +      first_nonopt = last_nonopt = optind = 1;
  21492. +
  21493. +      nextchar = NULL;
  21494. +
  21495. +      /* Determine how to handle the ordering of options and nonoptions.  */
  21496. +
  21497. +      if (optstring[0] == '-')
  21498. +    {
  21499. +      ordering = RETURN_IN_ORDER;
  21500. +      ++optstring;
  21501. +    }
  21502. +      else if (optstring[0] == '+')
  21503. +    {
  21504. +      ordering = REQUIRE_ORDER;
  21505. +      ++optstring;
  21506. +    }
  21507. +      else if (getenv ("POSIXLY_CORRECT") != NULL)
  21508. +    ordering = REQUIRE_ORDER;
  21509. +      else
  21510. +    ordering = PERMUTE;
  21511. +    }
  21512. +
  21513. +  if (nextchar == NULL || *nextchar == '\0')
  21514. +    {
  21515. +      if (ordering == PERMUTE)
  21516. +    {
  21517. +      /* If we have just processed some options following some non-options,
  21518. +         exchange them so that the options come first.  */
  21519. +
  21520. +      if (first_nonopt != last_nonopt && last_nonopt != optind)
  21521. +        exchange ((char **) argv);
  21522. +      else if (last_nonopt != optind)
  21523. +        first_nonopt = optind;
  21524. +
  21525. +      /* Now skip any additional non-options
  21526. +         and extend the range of non-options previously skipped.  */
  21527. +
  21528. +      while (optind < argc
  21529. +         && (argv[optind][0] != '-' || argv[optind][1] == '\0')
  21530. +#ifdef GETOPT_COMPAT
  21531. +         && (longopts == NULL
  21532. +             || argv[optind][0] != '+' || argv[optind][1] == '\0')
  21533. +#endif                /* GETOPT_COMPAT */
  21534. +         )
  21535. +        optind++;
  21536. +      last_nonopt = optind;
  21537. +    }
  21538. +
  21539. +      /* Special ARGV-element `--' means premature end of options.
  21540. +     Skip it like a null option,
  21541. +     then exchange with previous non-options as if it were an option,
  21542. +     then skip everything else like a non-option.  */
  21543. +
  21544. +      if (optind != argc && !strcmp (argv[optind], "--"))
  21545. +    {
  21546. +      optind++;
  21547. +
  21548. +      if (first_nonopt != last_nonopt && last_nonopt != optind)
  21549. +        exchange ((char **) argv);
  21550. +      else if (first_nonopt == last_nonopt)
  21551. +        first_nonopt = optind;
  21552. +      last_nonopt = argc;
  21553. +
  21554. +      optind = argc;
  21555. +    }
  21556. +
  21557. +      /* If we have done all the ARGV-elements, stop the scan
  21558. +     and back over any non-options that we skipped and permuted.  */
  21559. +
  21560. +      if (optind == argc)
  21561. +    {
  21562. +      /* Set the next-arg-index to point at the non-options
  21563. +         that we previously skipped, so the caller will digest them.  */
  21564. +      if (first_nonopt != last_nonopt)
  21565. +        optind = first_nonopt;
  21566. +      return EOF;
  21567. +    }
  21568. +
  21569. +      /* If we have come to a non-option and did not permute it,
  21570. +     either stop the scan or describe it to the caller and pass it by.  */
  21571. +
  21572. +      if ((argv[optind][0] != '-' || argv[optind][1] == '\0')
  21573. +#ifdef GETOPT_COMPAT
  21574. +      && (longopts == NULL
  21575. +          || argv[optind][0] != '+' || argv[optind][1] == '\0')
  21576. +#endif                /* GETOPT_COMPAT */
  21577. +      )
  21578. +    {
  21579. +      if (ordering == REQUIRE_ORDER)
  21580. +        return EOF;
  21581. +      optarg = argv[optind++];
  21582. +      return 1;
  21583. +    }
  21584. +
  21585. +      /* We have found another option-ARGV-element.
  21586. +     Start decoding its characters.  */
  21587. +
  21588. +      nextchar = (argv[optind] + 1
  21589. +          + (longopts != NULL && argv[optind][1] == '-'));
  21590. +    }
  21591. +
  21592. +  if (longopts != NULL
  21593. +      && ((argv[optind][0] == '-'
  21594. +       && (argv[optind][1] == '-' || long_only))
  21595. +#ifdef GETOPT_COMPAT
  21596. +      || argv[optind][0] == '+'
  21597. +#endif                /* GETOPT_COMPAT */
  21598. +      ))
  21599. +    {
  21600. +      const struct option *p;
  21601. +      char *s = nextchar;
  21602. +      int exact = 0;
  21603. +      int ambig = 0;
  21604. +      const struct option *pfound = NULL;
  21605. +      int indfound;
  21606. +
  21607. +      while (*s && *s != '=')
  21608. +    s++;
  21609. +
  21610. +      /* Test all options for either exact match or abbreviated matches.  */
  21611. +      for (p = longopts, option_index = 0; p->name;
  21612. +       p++, option_index++)
  21613. +    if (!strncmp (p->name, nextchar, s - nextchar))
  21614. +      {
  21615. +        if (s - nextchar == strlen (p->name))
  21616. +          {
  21617. +        /* Exact match found.  */
  21618. +        pfound = p;
  21619. +        indfound = option_index;
  21620. +        exact = 1;
  21621. +        break;
  21622. +          }
  21623. +        else if (pfound == NULL)
  21624. +          {
  21625. +        /* First nonexact match found.  */
  21626. +        pfound = p;
  21627. +        indfound = option_index;
  21628. +          }
  21629. +        else
  21630. +          /* Second nonexact match found.  */
  21631. +          ambig = 1;
  21632. +      }
  21633. +
  21634. +      if (ambig && !exact)
  21635. +    {
  21636. +      if (opterr)
  21637. +        fprintf (stderr, "%s: option `%s' is ambiguous\n",
  21638. +             argv[0], argv[optind]);
  21639. +      nextchar += strlen (nextchar);
  21640. +      optind++;
  21641. +      return '?';
  21642. +    }
  21643. +
  21644. +      if (pfound != NULL)
  21645. +    {
  21646. +      option_index = indfound;
  21647. +      optind++;
  21648. +      if (*s)
  21649. +        {
  21650. +          /* Don't test has_arg with >, because some C compilers don't
  21651. +         allow it to be used on enums. */
  21652. +          if (pfound->has_arg)
  21653. +        optarg = s + 1;
  21654. +          else
  21655. +        {
  21656. +          if (opterr)
  21657. +            {
  21658. +              if (argv[optind - 1][1] == '-')
  21659. +            /* --option */
  21660. +            fprintf (stderr,
  21661. +                 "%s: option `--%s' doesn't allow an argument\n",
  21662. +                 argv[0], pfound->name);
  21663. +              else
  21664. +            /* +option or -option */
  21665. +            fprintf (stderr,
  21666. +                 "%s: option `%c%s' doesn't allow an argument\n",
  21667. +                 argv[0], argv[optind - 1][0], pfound->name);
  21668. +            }
  21669. +          nextchar += strlen (nextchar);
  21670. +          return '?';
  21671. +        }
  21672. +        }
  21673. +      else if (pfound->has_arg == 1)
  21674. +        {
  21675. +          if (optind < argc)
  21676. +        optarg = argv[optind++];
  21677. +          else
  21678. +        {
  21679. +          if (opterr)
  21680. +            fprintf (stderr, "%s: option `%s' requires an argument\n",
  21681. +                 argv[0], argv[optind - 1]);
  21682. +          nextchar += strlen (nextchar);
  21683. +          return '?';
  21684. +        }
  21685. +        }
  21686. +      nextchar += strlen (nextchar);
  21687. +      if (longind != NULL)
  21688. +        *longind = option_index;
  21689. +      if (pfound->flag)
  21690. +        {
  21691. +          *(pfound->flag) = pfound->val;
  21692. +          return 0;
  21693. +        }
  21694. +      return pfound->val;
  21695. +    }
  21696. +      /* Can't find it as a long option.  If this is not getopt_long_only,
  21697. +     or the option starts with '--' or is not a valid short
  21698. +     option, then it's an error.
  21699. +     Otherwise interpret it as a short option. */
  21700. +      if (!long_only || argv[optind][1] == '-'
  21701. +#ifdef GETOPT_COMPAT
  21702. +      || argv[optind][0] == '+'
  21703. +#endif                /* GETOPT_COMPAT */
  21704. +      || my_index (optstring, *nextchar) == NULL)
  21705. +    {
  21706. +      if (opterr)
  21707. +        {
  21708. +          if (argv[optind][1] == '-')
  21709. +        /* --option */
  21710. +        fprintf (stderr, "%s: unrecognized option `--%s'\n",
  21711. +             argv[0], nextchar);
  21712. +          else
  21713. +        /* +option or -option */
  21714. +        fprintf (stderr, "%s: unrecognized option `%c%s'\n",
  21715. +             argv[0], argv[optind][0], nextchar);
  21716. +        }
  21717. +      nextchar += strlen (nextchar);
  21718. +      optind++;
  21719. +      return '?';
  21720. +    }
  21721. +    }
  21722. +
  21723. +  /* Look at and handle the next option-character.  */
  21724. +
  21725. +  {
  21726. +    char c = *nextchar++;
  21727. +    char *temp = my_index (optstring, c);
  21728. +
  21729. +    /* Increment `optind' when we start to process its last character.  */
  21730. +    if (*nextchar == '\0')
  21731. +      optind++;
  21732. +
  21733. +    if (temp == NULL || c == ':')
  21734. +      {
  21735. +    if (opterr)
  21736. +      {
  21737. +        if (c < 040 || c >= 0177)
  21738. +          fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
  21739. +               argv[0], c);
  21740. +        else
  21741. +          fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c);
  21742. +      }
  21743. +    return '?';
  21744. +      }
  21745. +    if (temp[1] == ':')
  21746. +      {
  21747. +    if (temp[2] == ':')
  21748. +      {
  21749. +        /* This is an option that accepts an argument optionally.  */
  21750. +        if (*nextchar != '\0')
  21751. +          {
  21752. +        optarg = nextchar;
  21753. +        optind++;
  21754. +          }
  21755. +        else
  21756. +          optarg = 0;
  21757. +        nextchar = NULL;
  21758. +      }
  21759. +    else
  21760. +      {
  21761. +        /* This is an option that requires an argument.  */
  21762. +        if (*nextchar != 0)
  21763. +          {
  21764. +        optarg = nextchar;
  21765. +        /* If we end this ARGV-element by taking the rest as an arg,
  21766. +           we must advance to the next element now.  */
  21767. +        optind++;
  21768. +          }
  21769. +        else if (optind == argc)
  21770. +          {
  21771. +        if (opterr)
  21772. +          fprintf (stderr, "%s: option `-%c' requires an argument\n",
  21773. +               argv[0], c);
  21774. +        c = '?';
  21775. +          }
  21776. +        else
  21777. +          /* We already incremented `optind' once;
  21778. +         increment it again when taking next ARGV-elt as argument.  */
  21779. +          optarg = argv[optind++];
  21780. +        nextchar = NULL;
  21781. +      }
  21782. +      }
  21783. +    return c;
  21784. +  }
  21785. +}
  21786. +
  21787. +int
  21788. +getopt (argc, argv, optstring)
  21789. +     int argc;
  21790. +     char *const *argv;
  21791. +     const char *optstring;
  21792. +{
  21793. +  return _getopt_internal (argc, argv, optstring,
  21794. +               (const struct option *) 0,
  21795. +               (int *) 0,
  21796. +               0);
  21797. +}
  21798. +
  21799. +#ifdef TEST
  21800. +
  21801. +/* Compile with -DTEST to make an executable for use in testing
  21802. +   the above definition of `getopt'.  */
  21803. +
  21804. +int
  21805. +main (argc, argv)
  21806. +     int argc;
  21807. +     char **argv;
  21808. +{
  21809. +  int c;
  21810. +  int digit_optind = 0;
  21811. +
  21812. +  while (1)
  21813. +    {
  21814. +      int this_option_optind = optind ? optind : 1;
  21815. +
  21816. +      c = getopt (argc, argv, "abc:d:0123456789");
  21817. +      if (c == EOF)
  21818. +    break;
  21819. +
  21820. +      switch (c)
  21821. +    {
  21822. +    case '0':
  21823. +    case '1':
  21824. +    case '2':
  21825. +    case '3':
  21826. +    case '4':
  21827. +    case '5':
  21828. +    case '6':
  21829. +    case '7':
  21830. +    case '8':
  21831. +    case '9':
  21832. +      if (digit_optind != 0 && digit_optind != this_option_optind)
  21833. +        printf ("digits occur in two different argv-elements.\n");
  21834. +      digit_optind = this_option_optind;
  21835. +      printf ("option %c\n", c);
  21836. +      break;
  21837. +
  21838. +    case 'a':
  21839. +      printf ("option a\n");
  21840. +      break;
  21841. +
  21842. +    case 'b':
  21843. +      printf ("option b\n");
  21844. +      break;
  21845. +
  21846. +    case 'c':
  21847. +      printf ("option c with value `%s'\n", optarg);
  21848. +      break;
  21849. +
  21850. +    case '?':
  21851. +      break;
  21852. +
  21853. +    default:
  21854. +      printf ("?? getopt returned character code 0%o ??\n", c);
  21855. +    }
  21856. +    }
  21857. +
  21858. +  if (optind < argc)
  21859. +    {
  21860. +      printf ("non-option ARGV-elements: ");
  21861. +      while (optind < argc)
  21862. +    printf ("%s ", argv[optind++]);
  21863. +      printf ("\n");
  21864. +    }
  21865. +
  21866. +  exit (0);
  21867. +}
  21868. +
  21869. +#endif /* TEST */
  21870. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.h amiga/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.h
  21871. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.h    Wed Dec 31 17:00:00 1969
  21872. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/getopt.h    Sat Sep 28 00:00:00 1996
  21873. @@ -0,0 +1,113 @@
  21874. +/* Declarations for getopt.
  21875. +   Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
  21876. +
  21877. +   This program is free software; you can redistribute it and/or modify
  21878. +   it under the terms of the GNU General Public License as published by
  21879. +   the Free Software Foundation; either version 2, or (at your option)
  21880. +   any later version.
  21881. +
  21882. +   This program is distributed in the hope that it will be useful,
  21883. +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  21884. +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21885. +   GNU General Public License for more details.
  21886. +
  21887. +   You should have received a copy of the GNU General Public License
  21888. +   along with this program; if not, write to the Free Software
  21889. +   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  21890. +
  21891. +#ifndef _GETOPT_H_
  21892. +#define _GETOPT_H_
  21893. +
  21894. +/* For communication from `getopt' to the caller.
  21895. +   When `getopt' finds an option that takes an argument,
  21896. +   the argument value is returned here.
  21897. +   Also, when `ordering' is RETURN_IN_ORDER,
  21898. +   each non-option ARGV-element is returned here.  */
  21899. +
  21900. +extern char *optarg;
  21901. +
  21902. +/* Index in ARGV of the next element to be scanned.
  21903. +   This is used for communication to and from the caller
  21904. +   and for communication between successive calls to `getopt'.
  21905. +
  21906. +   On entry to `getopt', zero means this is the first call; initialize.
  21907. +
  21908. +   When `getopt' returns EOF, this is the index of the first of the
  21909. +   non-option elements that the caller should itself scan.
  21910. +
  21911. +   Otherwise, `optind' communicates from one call to the next
  21912. +   how much of ARGV has been scanned so far.  */
  21913. +
  21914. +extern int optind;
  21915. +
  21916. +/* Callers store zero here to inhibit the error message `getopt' prints
  21917. +   for unrecognized options.  */
  21918. +
  21919. +extern int opterr;
  21920. +
  21921. +/* Describe the long-named options requested by the application.
  21922. +   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
  21923. +   of `struct option' terminated by an element containing a name which is
  21924. +   zero.
  21925. +
  21926. +   The field `has_arg' is:
  21927. +   no_argument        (or 0) if the option does not take an argument,
  21928. +   required_argument    (or 1) if the option requires an argument,
  21929. +   optional_argument     (or 2) if the option takes an optional argument.
  21930. +
  21931. +   If the field `flag' is not NULL, it points to a variable that is set
  21932. +   to the value given in the field `val' when the option is found, but
  21933. +   left unchanged if the option is not found.
  21934. +
  21935. +   To have a long-named option do something other than set an `int' to
  21936. +   a compiled-in constant, such as set a value from `optarg', set the
  21937. +   option's `flag' field to zero and its `val' field to a nonzero
  21938. +   value (the equivalent single-letter option character, if there is
  21939. +   one).  For long options that have a zero `flag' field, `getopt'
  21940. +   returns the contents of the `val' field.  */
  21941. +
  21942. +struct option
  21943. +{
  21944. +#ifdef    __STDC__
  21945. +  const char *name;
  21946. +#else
  21947. +  char *name;
  21948. +#endif
  21949. +  /* has_arg can't be an enum because some compilers complain about
  21950. +     type mismatches in all the code that assumes it is an int.  */
  21951. +  int has_arg;
  21952. +  int *flag;
  21953. +  int val;
  21954. +};
  21955. +
  21956. +/* Names for the values of the `has_arg' field of `struct option'.  */
  21957. +
  21958. +enum _argtype
  21959. +{
  21960. +  no_argument,
  21961. +  required_argument,
  21962. +  optional_argument
  21963. +};
  21964. +
  21965. +#ifdef __STDC__
  21966. +extern int getopt (int argc, char *const *argv, const char *shortopts);
  21967. +extern int getopt_long (int argc, char *const *argv, const char *shortopts,
  21968. +                const struct option *longopts, int *longind);
  21969. +extern int getopt_long_only (int argc, char *const *argv,
  21970. +                 const char *shortopts,
  21971. +                     const struct option *longopts, int *longind);
  21972. +
  21973. +/* Internal only.  Users should not call this directly.  */
  21974. +extern int _getopt_internal (int argc, char *const *argv,
  21975. +                 const char *shortopts,
  21976. +                     const struct option *longopts, int *longind,
  21977. +                 int long_only);
  21978. +#else /* not __STDC__ */
  21979. +extern int getopt ();
  21980. +extern int getopt_long ();
  21981. +extern int getopt_long_only ();
  21982. +
  21983. +extern int _getopt_internal ();
  21984. +#endif /* not __STDC__ */
  21985. +
  21986. +#endif /* _GETOPT_H_ */
  21987. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/ialloc.c amiga/fsf/emacs18/amiga/unix/src/zoneinfo/ialloc.c
  21988. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/ialloc.c    Wed Dec 31 17:00:00 1969
  21989. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/ialloc.c    Sat Sep 28 00:00:00 1996
  21990. @@ -0,0 +1,142 @@
  21991. +/*-
  21992. + * Copyright (c) 1991 The Regents of the University of California.
  21993. + * All rights reserved.
  21994. + *
  21995. + * This code is derived from software contributed to Berkeley by
  21996. + * Arthur David Olson of the National Cancer Institute.
  21997. + *
  21998. + * Redistribution and use in source and binary forms, with or without
  21999. + * modification, are permitted provided that the following conditions
  22000. + * are met:
  22001. + * 1. Redistributions of source code must retain the above copyright
  22002. + *    notice, this list of conditions and the following disclaimer.
  22003. + * 2. Redistributions in binary form must reproduce the above copyright
  22004. + *    notice, this list of conditions and the following disclaimer in the
  22005. + *    documentation and/or other materials provided with the distribution.
  22006. + * 3. All advertising materials mentioning features or use of this software
  22007. + *    must display the following acknowledgement:
  22008. + *    This product includes software developed by the University of
  22009. + *    California, Berkeley and its contributors.
  22010. + * 4. Neither the name of the University nor the names of its contributors
  22011. + *    may be used to endorse or promote products derived from this software
  22012. + *    without specific prior written permission.
  22013. + *
  22014. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22015. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22016. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  22017. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  22018. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  22019. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  22020. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  22021. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  22022. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  22023. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  22024. + * SUCH DAMAGE.
  22025. + */
  22026. +
  22027. +#ifndef lint
  22028. +static char sccsid[] = "@(#)ialloc.c    5.3 (Berkeley) 4/20/91";
  22029. +#endif /* not lint */
  22030. +
  22031. +#ifdef notdef
  22032. +static char    elsieid[] = "@(#)ialloc.c    8.18";
  22033. +#endif
  22034. +
  22035. +/*LINTLIBRARY*/
  22036. +
  22037. +#include <sys/cdefs.h>
  22038. +#include <sys/types.h>
  22039. +#include <string.h>
  22040. +#include <stdlib.h>
  22041. +
  22042. +#ifdef MAL
  22043. +#define NULLMAL(x)    ((x) == NULL || (x) == MAL)
  22044. +#else /* !defined MAL */
  22045. +#define NULLMAL(x)    ((x) == NULL)
  22046. +#endif /* !defined MAL */
  22047. +
  22048. +#define nonzero(n)    (((n) == 0) ? 1 : (n))
  22049. +
  22050. +char *    icalloc __P((int nelem, int elsize));
  22051. +char *    icatalloc __P((char * old, const char * new));
  22052. +char *    icpyalloc __P((const char * string));
  22053. +char *    imalloc __P((int n));
  22054. +char *    irealloc __P((char * pointer, int size));
  22055. +void    ifree __P((char * pointer));
  22056. +
  22057. +char *
  22058. +imalloc(n)
  22059. +const int    n;
  22060. +{
  22061. +#ifdef MAL
  22062. +    register char *    result;
  22063. +
  22064. +    result = malloc((size_t) nonzero(n));
  22065. +    return NULLMAL(result) ? NULL : result;
  22066. +#else /* !defined MAL */
  22067. +    return malloc((size_t) nonzero(n));
  22068. +#endif /* !defined MAL */
  22069. +}
  22070. +
  22071. +char *
  22072. +icalloc(nelem, elsize)
  22073. +int    nelem;
  22074. +int    elsize;
  22075. +{
  22076. +    if (nelem == 0 || elsize == 0)
  22077. +        nelem = elsize = 1;
  22078. +    return calloc((size_t) nelem, (size_t) elsize);
  22079. +}
  22080. +
  22081. +char *
  22082. +irealloc(pointer, size)
  22083. +char * const    pointer;
  22084. +const int    size;
  22085. +{
  22086. +    if (NULLMAL(pointer))
  22087. +        return imalloc(size);
  22088. +    return realloc((void *) pointer, (size_t) nonzero(size));
  22089. +}
  22090. +
  22091. +char *
  22092. +icatalloc(old, new)
  22093. +char * const        old;
  22094. +const char * const    new;
  22095. +{
  22096. +    register char *    result;
  22097. +    register    oldsize, newsize;
  22098. +
  22099. +    newsize = NULLMAL(new) ? 0 : strlen(new);
  22100. +    if (NULLMAL(old))
  22101. +        oldsize = 0;
  22102. +    else if (newsize == 0)
  22103. +        return old;
  22104. +    else    oldsize = strlen(old);
  22105. +    if ((result = irealloc(old, oldsize + newsize + 1)) != NULL)
  22106. +        if (!NULLMAL(new))
  22107. +            (void) strcpy(result + oldsize, new);
  22108. +    return result;
  22109. +}
  22110. +
  22111. +char *
  22112. +icpyalloc(string)
  22113. +const char * const    string;
  22114. +{
  22115. +    return icatalloc((char *) NULL, string);
  22116. +}
  22117. +
  22118. +void
  22119. +ifree(p)
  22120. +char * const    p;
  22121. +{
  22122. +    if (!NULLMAL(p))
  22123. +        (void) free(p);
  22124. +}
  22125. +
  22126. +void
  22127. +icfree(p)
  22128. +char * const    p;
  22129. +{
  22130. +    if (!NULLMAL(p))
  22131. +        (void) free(p);
  22132. +}
  22133. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/smakefile amiga/fsf/emacs18/amiga/unix/src/zoneinfo/smakefile
  22134. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/smakefile    Wed Dec 31 17:00:00 1969
  22135. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/smakefile    Sat Sep 28 00:00:00 1996
  22136. @@ -0,0 +1,11 @@
  22137. +CFLAGS= DEFINE=TM_GMTOFF=tm_gmtoff DEFINE=TM_ZONE=tm_zone DEFINE=emkdir=mkdir DEFINE=NOSOLAR IDIR=src:unix/include/ IGNORE=104
  22138. +
  22139. +all: zic
  22140. +
  22141. +zic: zic.o ialloc.o getopt.o
  22142. +    sc link to zic zic.o ialloc.o getopt.o lib src:unix/src/unix.lib
  22143. +
  22144. +zic.o: zic.c
  22145. +ialloc.o: ialloc.c
  22146. +getopt.o: getopt.c getopt.h
  22147. +
  22148. Binary files baseline/fsf/emacs18/amiga/unix/src/zoneinfo/zic and amiga/fsf/emacs18/amiga/unix/src/zoneinfo/zic differ
  22149. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/zic.8 amiga/fsf/emacs18/amiga/unix/src/zoneinfo/zic.8
  22150. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/zic.8    Wed Dec 31 17:00:00 1969
  22151. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/zic.8    Sat Sep 28 00:00:00 1996
  22152. @@ -0,0 +1,424 @@
  22153. +.\" Copyright (c) 1991 The Regents of the University of California.
  22154. +.\" All rights reserved.
  22155. +.\"
  22156. +.\" This code is derived from software contributed to Berkeley by
  22157. +.\" Arthur David Olson of the National Cancer Institute.
  22158. +.\"
  22159. +.\" Redistribution and use in source and binary forms, with or without
  22160. +.\" modification, are permitted provided that the following conditions
  22161. +.\" are met:
  22162. +.\" 1. Redistributions of source code must retain the above copyright
  22163. +.\"    notice, this list of conditions and the following disclaimer.
  22164. +.\" 2. Redistributions in binary form must reproduce the above copyright
  22165. +.\"    notice, this list of conditions and the following disclaimer in the
  22166. +.\"    documentation and/or other materials provided with the distribution.
  22167. +.\" 3. All advertising materials mentioning features or use of this software
  22168. +.\"    must display the following acknowledgement:
  22169. +.\"    This product includes software developed by the University of
  22170. +.\"    California, Berkeley and its contributors.
  22171. +.\" 4. Neither the name of the University nor the names of its contributors
  22172. +.\"    may be used to endorse or promote products derived from this software
  22173. +.\"    without specific prior written permission.
  22174. +.\"
  22175. +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22176. +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22177. +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  22178. +.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  22179. +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  22180. +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  22181. +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  22182. +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  22183. +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  22184. +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  22185. +.\" SUCH DAMAGE.
  22186. +.\"
  22187. +.\"    @(#)zic.8    5.2 (Berkeley) 4/20/91
  22188. +.\"
  22189. +.TH ZIC 8
  22190. +.SH NAME
  22191. +zic \- time zone compiler
  22192. +.SH SYNOPSIS
  22193. +.B zic
  22194. +[
  22195. +.B \-v
  22196. +] [
  22197. +.B \-d
  22198. +.I directory
  22199. +] [
  22200. +.B \-l
  22201. +.I localtime
  22202. +] [
  22203. +.B \-p
  22204. +.I posixrules
  22205. +] [
  22206. +.B \-L
  22207. +.I leapsecondfilename
  22208. +] [
  22209. +.B \-s
  22210. +] [
  22211. +.I filename
  22212. +\&... ]
  22213. +.SH DESCRIPTION
  22214. +.if t .ds lq ``
  22215. +.if t .ds rq ''
  22216. +.if n .ds lq \&"\"
  22217. +.if n .ds rq \&"\"
  22218. +.de q
  22219. +\\$3\*(lq\\$1\*(rq\\$2
  22220. +..
  22221. +.I Zic
  22222. +reads text from the file(s) named on the command line
  22223. +and creates the time conversion information files specified in this input.
  22224. +If a
  22225. +.I filename
  22226. +is
  22227. +.BR \- ,
  22228. +the standard input is read.
  22229. +.PP
  22230. +These options are available:
  22231. +.TP
  22232. +.BI "\-d " directory
  22233. +Create time conversion information files in the named directory rather than
  22234. +in the standard directory named below.
  22235. +.TP
  22236. +.BI "\-l " timezone
  22237. +Use the given time zone as local time.
  22238. +.I Zic
  22239. +will act as if the input contained a link line of the form
  22240. +.sp
  22241. +.ti +.5i
  22242. +Link    \fItimezone\fP        localtime
  22243. +.TP
  22244. +.BI "\-p " timezone
  22245. +Use the given time zone's rules when handling POSIX-format
  22246. +time zone environment variables.
  22247. +.I Zic
  22248. +will act as if the input contained a link line of the form
  22249. +.sp
  22250. +.ti +.5i
  22251. +Link    \fItimezone\fP        posixrules
  22252. +.TP
  22253. +.BI "\-L " leapsecondfilename
  22254. +Read leap second information from the file with the given name.
  22255. +If this option is not used,
  22256. +no leap second information appears in output files.
  22257. +.TP
  22258. +.B \-v
  22259. +Complain if a year that appears in a data file is outside the range
  22260. +of years representable by
  22261. +.IR time (2)
  22262. +values.
  22263. +.TP
  22264. +.B \-s
  22265. +Limit time values stored in output files to values that are the same
  22266. +whether they're taken to be signed or unsigned.
  22267. +You can use this option to generate SVVS-compatible files.
  22268. +.sp
  22269. +Input lines are made up of fields.
  22270. +Fields are separated from one another by any number of white space characters.
  22271. +Leading and trailing white space on input lines is ignored.
  22272. +An unquoted sharp character (#) in the input introduces a comment which extends
  22273. +to the end of the line the sharp character appears on.
  22274. +White space characters and sharp characters may be enclosed in double quotes
  22275. +(") if they're to be used as part of a field.
  22276. +Any line that is blank (after comment stripping) is ignored.
  22277. +Non-blank lines are expected to be of one of three types:
  22278. +rule lines, zone lines, and link lines.
  22279. +.PP
  22280. +A rule line has the form
  22281. +.nf
  22282. +.B
  22283. +.ti +.5i
  22284. +.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
  22285. +.sp
  22286. +Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  22287. +.sp
  22288. +For example:
  22289. +.ti +.5i
  22290. +.sp
  22291. +Rule    USA    1969    1973    \-    Apr    lastSun    2:00    1:00    D
  22292. +.sp
  22293. +.fi
  22294. +The fields that make up a rule line are:
  22295. +.TP "\w'LETTER/S'u"
  22296. +.B NAME
  22297. +Gives the (arbitrary) name of the set of rules this rule is part of.
  22298. +.TP
  22299. +.B FROM
  22300. +Gives the first year in which the rule applies.
  22301. +The word
  22302. +.B minimum
  22303. +(or an abbreviation) means the minimum year with a representable time value.
  22304. +The word
  22305. +.B maximum
  22306. +(or an abbreviation) means the maximum year with a representable time value.
  22307. +.TP
  22308. +.B TO
  22309. +Gives the final year in which the rule applies.
  22310. +In addition to
  22311. +.B minimum
  22312. +and
  22313. +.B maximum
  22314. +(as above),
  22315. +the word
  22316. +.B only
  22317. +(or an abbreviation)
  22318. +may be used to repeat the value of the
  22319. +.B FROM
  22320. +field.
  22321. +.TP
  22322. +.B TYPE
  22323. +Gives the type of year in which the rule applies.
  22324. +If
  22325. +.B TYPE
  22326. +is
  22327. +.B \-
  22328. +then the rule applies in all years between
  22329. +.B FROM
  22330. +and
  22331. +.B TO
  22332. +inclusive;
  22333. +if
  22334. +.B TYPE
  22335. +is
  22336. +.BR uspres ,
  22337. +the rule applies in U.S. Presidential election years;
  22338. +if
  22339. +.B TYPE
  22340. +is
  22341. +.BR nonpres ,
  22342. +the rule applies in years other than U.S. Presidential election years.
  22343. +If
  22344. +.B TYPE
  22345. +is something else, then
  22346. +.I zic
  22347. +executes the command
  22348. +.ti +.5i
  22349. +\fByearistype\fP \fIyear\fP \fItype\fP
  22350. +.br
  22351. +to check the type of a year:
  22352. +an exit status of zero is taken to mean that the year is of the given type;
  22353. +an exit status of one is taken to mean that the year is not of the given type.
  22354. +.TP
  22355. +.B IN
  22356. +Names the month in which the rule takes effect.
  22357. +Month names may be abbreviated.
  22358. +.TP
  22359. +.B ON
  22360. +Gives the day on which the rule takes effect.
  22361. +Recognized forms include:
  22362. +.nf
  22363. +.in +.5i
  22364. +.sp
  22365. +.ta \w'Sun<=25\0\0'u
  22366. +5    the fifth of the month
  22367. +lastSun    the last Sunday in the month
  22368. +lastMon    the last Monday in the month
  22369. +Sun>=8    first Sunday on or after the eighth
  22370. +Sun<=25    last Sunday on or before the 25th
  22371. +.fi
  22372. +.in -.5i
  22373. +.sp
  22374. +Names of days of the week may be abbreviated or spelled out in full.
  22375. +Note that there must be no spaces within the
  22376. +.B ON
  22377. +field.
  22378. +.TP
  22379. +.B AT
  22380. +Gives the time of day at which the rule takes effect.
  22381. +Recognized forms include:
  22382. +.nf
  22383. +.in +.5i
  22384. +.sp
  22385. +.ta \w'1:28:13\0\0'u
  22386. +2    time in hours
  22387. +2:00    time in hours and minutes
  22388. +15:00    24-hour format time (for times after noon)
  22389. +1:28:14    time in hours, minutes, and seconds
  22390. +.fi
  22391. +.in -.5i
  22392. +.sp
  22393. +Any of these forms may be followed by the letter
  22394. +.B w
  22395. +if the given time is local
  22396. +.q "wall clock"
  22397. +time or
  22398. +.B s
  22399. +if the given time is local
  22400. +.q standard
  22401. +time; in the absence of
  22402. +.B w
  22403. +or
  22404. +.BR s ,
  22405. +wall clock time is assumed.
  22406. +.TP
  22407. +.B SAVE
  22408. +Gives the amount of time to be added to local standard time when the rule is in
  22409. +effect.
  22410. +This field has the same format as the
  22411. +.B AT
  22412. +field
  22413. +(although, of course, the
  22414. +.B w
  22415. +and
  22416. +.B s
  22417. +suffixes are not used).
  22418. +.TP
  22419. +.B LETTER/S
  22420. +Gives the
  22421. +.q "variable part"
  22422. +(for example, the
  22423. +.q S
  22424. +or
  22425. +.q D
  22426. +in
  22427. +.q EST
  22428. +or
  22429. +.q EDT )
  22430. +of time zone abbreviations to be used when this rule is in effect.
  22431. +If this field is
  22432. +.BR \- ,
  22433. +the variable part is null.
  22434. +.PP
  22435. +A zone line has the form
  22436. +.sp
  22437. +.nf
  22438. +.ti +.5i
  22439. +.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
  22440. +Zone    NAME    GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  22441. +.sp
  22442. +For example:
  22443. +.sp
  22444. +.ti +.5i
  22445. +Zone    Australia/South\-west    9:30    Aus    CST    1987 Mar 15 2:00
  22446. +.sp
  22447. +.fi
  22448. +The fields that make up a zone line are:
  22449. +.TP "\w'GMTOFF'u"
  22450. +.B NAME
  22451. +The name of the time zone.
  22452. +This is the name used in creating the time conversion information file for the
  22453. +zone.
  22454. +.TP
  22455. +.B GMTOFF
  22456. +The amount of time to add to GMT to get standard time in this zone.
  22457. +This field has the same format as the
  22458. +.B AT
  22459. +and
  22460. +.B SAVE
  22461. +fields of rule lines;
  22462. +begin the field with a minus sign if time must be subtracted from GMT.
  22463. +.TP
  22464. +.B RULES/SAVE
  22465. +The name of the rule(s) that apply in the time zone or,
  22466. +alternately, an amount of time to add to local standard time.
  22467. +If this field is
  22468. +.B \-
  22469. +then standard time always applies in the time zone.
  22470. +.TP
  22471. +.B FORMAT
  22472. +The format for time zone abbreviations in this time zone.
  22473. +The pair of characters
  22474. +.B %s
  22475. +is used to show where the
  22476. +.q "variable part"
  22477. +of the time zone abbreviation goes.
  22478. +.TP
  22479. +.B UNTIL
  22480. +The time at which the GMT offset or the rule(s) change for a location.
  22481. +It is specified as a year, a month, a day, and a time of day.
  22482. +If this is specified,
  22483. +the time zone information is generated from the given GMT offset
  22484. +and rule change until the time specified.
  22485. +.IP
  22486. +The next line must be a
  22487. +.q continuation
  22488. +line; this has the same form as a zone line except that the
  22489. +string
  22490. +.q Zone
  22491. +and the name are omitted, as the continuation line will
  22492. +place information starting at the time specified as the
  22493. +.B UNTIL
  22494. +field in the previous line in the file used by the previous line.
  22495. +Continuation lines may contain an
  22496. +.B UNTIL
  22497. +field, just as zone lines do, indicating that the next line is a further
  22498. +continuation.
  22499. +.PP
  22500. +A link line has the form
  22501. +.sp
  22502. +.nf
  22503. +.ti +.5i
  22504. +.if t .ta \w'Link\0\0'u +\w'LINK-FROM\0\0'u
  22505. +.if n .ta \w'Link\0\0'u +\w'US/Eastern\0\0'u
  22506. +Link    LINK-FROM    LINK-TO
  22507. +.sp
  22508. +For example:
  22509. +.sp
  22510. +.ti +.5i
  22511. +Link    US/Eastern    EST5EDT
  22512. +.sp
  22513. +.fi
  22514. +The
  22515. +.B LINK-FROM
  22516. +field should appear as the
  22517. +.B NAME
  22518. +field in some zone line;
  22519. +the
  22520. +.B LINK-TO
  22521. +field is used as an alternate name for that zone.
  22522. +.PP
  22523. +Except for continuation lines,
  22524. +lines may appear in any order in the input.
  22525. +.PP
  22526. +Lines in the file that describes leap seconds have the following form:
  22527. +.nf
  22528. +.B
  22529. +.ti +.5i
  22530. +.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
  22531. +Leap    YEAR    MONTH    DAY    HH:MM:SS    CORR    R/S
  22532. +.sp
  22533. +For example:
  22534. +.ti +.5i
  22535. +.sp
  22536. +Leap    1974    Dec    31    23:59:60    +    S
  22537. +.sp
  22538. +.fi
  22539. +The 
  22540. +.BR YEAR ,
  22541. +.BR MONTH ,
  22542. +.BR DAY ,
  22543. +and
  22544. +.B HH:MM:SS
  22545. +fields tell when the leap second happened.
  22546. +The
  22547. +.B CORR
  22548. +field
  22549. +should be
  22550. +.q +
  22551. +if a second was added
  22552. +or 
  22553. +.q -
  22554. +if a second was skipped.
  22555. +The
  22556. +.B R/S
  22557. +field
  22558. +should be (an abbreviation of)
  22559. +.q Stationary
  22560. +if the leap second time given by the other fields should be interpreted as GMT
  22561. +or
  22562. +(an abbreviation of)
  22563. +.q Rolling
  22564. +if the leap second time given by the other fields should be interpreted as
  22565. +local wall clock time.
  22566. +.SH NOTE
  22567. +For areas with more than two types of local time,
  22568. +you may need to use local standard time in the
  22569. +.B AT
  22570. +field of the earliest transition time's rule to ensure that
  22571. +the earliest transition time recorded in the compiled file is correct.
  22572. +.SH FILE
  22573. +/etc/zoneinfo    standard directory used for created files
  22574. +.SH "SEE ALSO"
  22575. +newctime(3), tzfile(5), zdump(8)
  22576. +.. @(#)zic.8    4.4
  22577. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/src/zoneinfo/zic.c amiga/fsf/emacs18/amiga/unix/src/zoneinfo/zic.c
  22578. --- baseline/fsf/emacs18/amiga/unix/src/zoneinfo/zic.c    Wed Dec 31 17:00:00 1969
  22579. +++ amiga/fsf/emacs18/amiga/unix/src/zoneinfo/zic.c    Sat Sep 28 00:00:00 1996
  22580. @@ -0,0 +1,1903 @@
  22581. +/*-
  22582. + * Copyright (c) 1991 The Regents of the University of California.
  22583. + * All rights reserved.
  22584. + *
  22585. + * This code is derived from software contributed to Berkeley by
  22586. + * Arthur David Olson of the National Cancer Institute.
  22587. + *
  22588. + * Redistribution and use in source and binary forms, with or without
  22589. + * modification, are permitted provided that the following conditions
  22590. + * are met:
  22591. + * 1. Redistributions of source code must retain the above copyright
  22592. + *    notice, this list of conditions and the following disclaimer.
  22593. + * 2. Redistributions in binary form must reproduce the above copyright
  22594. + *    notice, this list of conditions and the following disclaimer in the
  22595. + *    documentation and/or other materials provided with the distribution.
  22596. + * 3. All advertising materials mentioning features or use of this software
  22597. + *    must display the following acknowledgement:
  22598. + *    This product includes software developed by the University of
  22599. + *    California, Berkeley and its contributors.
  22600. + * 4. Neither the name of the University nor the names of its contributors
  22601. + *    may be used to endorse or promote products derived from this software
  22602. + *    without specific prior written permission.
  22603. + *
  22604. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22605. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22606. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  22607. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  22608. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  22609. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  22610. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  22611. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  22612. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  22613. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  22614. + * SUCH DAMAGE.
  22615. + */
  22616. +
  22617. +#ifndef lint
  22618. +static char sccsid[] = "@(#)zic.c    5.3 (Berkeley) 4/20/91";
  22619. +#endif /* not lint */
  22620. +
  22621. +#ifdef notdef
  22622. +static char    elsieid[] = "@(#)zic.c    4.12";
  22623. +#endif
  22624. +
  22625. +#include <sys/types.h>
  22626. +#include <sys/cdefs.h>
  22627. +#include <sys/stat.h>
  22628. +#include <time.h>
  22629. +#include <tzfile.h>
  22630. +#include <stdio.h>
  22631. +#include <ctype.h>
  22632. +#include <string.h>
  22633. +#include <stdlib.h>
  22634. +
  22635. +#ifndef TRUE
  22636. +#define TRUE    1
  22637. +#define FALSE    0
  22638. +#endif /* !defined TRUE */
  22639. +
  22640. +#ifndef EXIT_FAILURE
  22641. +#define EXIT_FAILURE 1
  22642. +#endif
  22643. +
  22644. +#ifndef EXIT_SUCCESS
  22645. +#define EXIT_SUCCESS 0
  22646. +#endif
  22647. +
  22648. +struct rule {
  22649. +    const char *    r_filename;
  22650. +    int        r_linenum;
  22651. +    const char *    r_name;
  22652. +
  22653. +    int        r_loyear;    /* for example, 1986 */
  22654. +    int        r_hiyear;    /* for example, 1986 */
  22655. +    const char *    r_yrtype;
  22656. +
  22657. +    int        r_month;    /* 0..11 */
  22658. +
  22659. +    int        r_dycode;    /* see below */
  22660. +    int        r_dayofmonth;
  22661. +    int        r_wday;
  22662. +
  22663. +    long        r_tod;        /* time from midnight */
  22664. +    int        r_todisstd;    /* above is standard time if TRUE */
  22665. +                    /* or wall clock time if FALSE */
  22666. +    long        r_stdoff;    /* offset from standard time */
  22667. +    const char *    r_abbrvar;    /* variable part of abbreviation */
  22668. +
  22669. +    int        r_todo;        /* a rule to do (used in outzone) */
  22670. +    time_t        r_temp;        /* used in outzone */
  22671. +};
  22672. +
  22673. +/*
  22674. +**    r_dycode        r_dayofmonth    r_wday
  22675. +*/
  22676. +
  22677. +#define DC_DOM        0    /* 1..31 */    /* unused */
  22678. +#define DC_DOWGEQ    1    /* 1..31 */    /* 0..6 (Sun..Sat) */
  22679. +#define DC_DOWLEQ    2    /* 1..31 */    /* 0..6 (Sun..Sat) */
  22680. +
  22681. +struct zone {
  22682. +    const char *    z_filename;
  22683. +    int        z_linenum;
  22684. +
  22685. +    const char *    z_name;
  22686. +    long        z_gmtoff;
  22687. +    const char *    z_rule;
  22688. +    const char *    z_format;
  22689. +
  22690. +    long        z_stdoff;
  22691. +
  22692. +    struct rule *    z_rules;
  22693. +    int        z_nrules;
  22694. +
  22695. +    struct rule    z_untilrule;
  22696. +    time_t        z_untiltime;
  22697. +};
  22698. +
  22699. +extern char *    icatalloc __P((char * old, const char * new));
  22700. +extern char *    icpyalloc __P((const char * string));
  22701. +extern void    ifree __P((char * p));
  22702. +extern char *    imalloc __P((int n));
  22703. +extern char *    irealloc __P((char * old, int n));
  22704. +extern int    link __P((const char * fromname, const char * toname));
  22705. +extern char *    optarg;
  22706. +extern int    optind;
  22707. +static void    addtt __P((time_t starttime, int type));
  22708. +static int    addtype
  22709. +            __P((long gmtoff, const char * abbr, int isdst,
  22710. +            int ttisstd));
  22711. +static void    addleap __P((time_t t, int positive, int rolling));
  22712. +static void    adjleap __P((void));
  22713. +static void    associate __P((void));
  22714. +static int    ciequal __P((const char * ap, const char * bp));
  22715. +static void    convert __P((long val, char * buf));
  22716. +static void    dolink __P((const char * fromfile, const char * tofile));
  22717. +static void    eat __P((const char * name, int num));
  22718. +static void    eats __P((const char * name, int num,
  22719. +            const char * rname, int rnum));
  22720. +static long    eitol __P((int i));
  22721. +static void    error __P((const char * message));
  22722. +static char **    getfields __P((char * buf));
  22723. +static long    gethms __P((char * string, const char * errstrng,
  22724. +            int signable));
  22725. +static void    infile __P((const char * filename));
  22726. +static void    inleap __P((char ** fields, int nfields));
  22727. +static void    inlink __P((char ** fields, int nfields));
  22728. +static void    inrule __P((char ** fields, int nfields));
  22729. +static int    inzcont __P((char ** fields, int nfields));
  22730. +static int    inzone __P((char ** fields, int nfields));
  22731. +static int    inzsub __P((char ** fields, int nfields, int iscont));
  22732. +static int    itsabbr __P((const char * abbr, const char * word));
  22733. +static int    itsdir __P((const char * name));
  22734. +static int    lowerit __P((int c));
  22735. +static char *    memcheck __P((char * tocheck));
  22736. +static int    mkdirs __P((char * filename));
  22737. +static void    newabbr __P((const char * abbr));
  22738. +static long    oadd __P((long t1, long t2));
  22739. +static void    outzone __P((const struct zone * zp, int ntzones));
  22740. +static void    puttzcode __P((long code, FILE * fp));
  22741. +static int    rcomp __P((const void *leftp, const void *rightp));
  22742. +static time_t    rpytime __P((const struct rule * rp, int wantedy));
  22743. +static void    rulesub __P((struct rule * rp, char * loyearp, char * hiyearp,
  22744. +        char * typep, char * monthp, char * dayp, char * timep));
  22745. +static void    setboundaries __P((void));
  22746. +static time_t    tadd __P((time_t t1, long t2));
  22747. +static void    usage __P((void));
  22748. +static void    writezone __P((const char * name));
  22749. +static int    yearistype __P((int year, const char * type));
  22750. +
  22751. +static int        charcnt;
  22752. +static int        errors;
  22753. +static const char *    filename;
  22754. +static int        leapcnt;
  22755. +static int        linenum;
  22756. +static time_t        max_time;
  22757. +static int        max_year;
  22758. +static time_t        min_time;
  22759. +static int        min_year;
  22760. +static int        noise;
  22761. +static const char *    rfilename;
  22762. +static int        rlinenum;
  22763. +static const char *    progname;
  22764. +static int        timecnt;
  22765. +static int        typecnt;
  22766. +static int        tt_signed;
  22767. +
  22768. +/*
  22769. +** Line codes.
  22770. +*/
  22771. +
  22772. +#define LC_RULE        0
  22773. +#define LC_ZONE        1
  22774. +#define LC_LINK        2
  22775. +#define LC_LEAP        3
  22776. +
  22777. +/*
  22778. +** Which fields are which on a Zone line.
  22779. +*/
  22780. +
  22781. +#define ZF_NAME        1
  22782. +#define ZF_GMTOFF    2
  22783. +#define ZF_RULE        3
  22784. +#define ZF_FORMAT    4
  22785. +#define ZF_TILYEAR    5
  22786. +#define ZF_TILMONTH    6
  22787. +#define ZF_TILDAY    7
  22788. +#define ZF_TILTIME    8
  22789. +#define ZONE_MINFIELDS    5
  22790. +#define ZONE_MAXFIELDS    9
  22791. +
  22792. +/*
  22793. +** Which fields are which on a Zone continuation line.
  22794. +*/
  22795. +
  22796. +#define ZFC_GMTOFF    0
  22797. +#define ZFC_RULE    1
  22798. +#define ZFC_FORMAT    2
  22799. +#define ZFC_TILYEAR    3
  22800. +#define ZFC_TILMONTH    4
  22801. +#define ZFC_TILDAY    5
  22802. +#define ZFC_TILTIME    6
  22803. +#define ZONEC_MINFIELDS    3
  22804. +#define ZONEC_MAXFIELDS    7
  22805. +
  22806. +/*
  22807. +** Which files are which on a Rule line.
  22808. +*/
  22809. +
  22810. +#define RF_NAME        1
  22811. +#define RF_LOYEAR    2
  22812. +#define RF_HIYEAR    3
  22813. +#define RF_COMMAND    4
  22814. +#define RF_MONTH    5
  22815. +#define RF_DAY        6
  22816. +#define RF_TOD        7
  22817. +#define RF_STDOFF    8
  22818. +#define RF_ABBRVAR    9
  22819. +#define RULE_FIELDS    10
  22820. +
  22821. +/*
  22822. +** Which fields are which on a Link line.
  22823. +*/
  22824. +
  22825. +#define LF_FROM        1
  22826. +#define LF_TO        2
  22827. +#define LINK_FIELDS    3
  22828. +
  22829. +/*
  22830. +** Which fields are which on a Leap line.
  22831. +*/
  22832. +
  22833. +#define LP_YEAR        1
  22834. +#define LP_MONTH    2
  22835. +#define LP_DAY        3
  22836. +#define LP_TIME        4
  22837. +#define LP_CORR        5
  22838. +#define LP_ROLL        6
  22839. +#define LEAP_FIELDS    7
  22840. +
  22841. +/*
  22842. +** Year synonyms.
  22843. +*/
  22844. +
  22845. +#define YR_MINIMUM    0
  22846. +#define YR_MAXIMUM    1
  22847. +#define YR_ONLY        2
  22848. +
  22849. +static struct rule *    rules;
  22850. +static int        nrules;    /* number of rules */
  22851. +
  22852. +static struct zone *    zones;
  22853. +static int        nzones;    /* number of zones */
  22854. +
  22855. +struct link {
  22856. +    const char *    l_filename;
  22857. +    int        l_linenum;
  22858. +    const char *    l_from;
  22859. +    const char *    l_to;
  22860. +};
  22861. +
  22862. +static struct link *    links;
  22863. +static int        nlinks;
  22864. +
  22865. +struct lookup {
  22866. +    const char *    l_word;
  22867. +    const int    l_value;
  22868. +};
  22869. +
  22870. +static struct lookup const *    byword __P((const char * string,
  22871. +                    const struct lookup * lp));
  22872. +
  22873. +static struct lookup const    line_codes[] = {
  22874. +    "Rule",        LC_RULE,
  22875. +    "Zone",        LC_ZONE,
  22876. +    "Link",        LC_LINK,
  22877. +    "Leap",        LC_LEAP,
  22878. +    NULL,        0
  22879. +};
  22880. +
  22881. +static struct lookup const    mon_names[] = {
  22882. +    "January",    TM_JANUARY,
  22883. +    "February",    TM_FEBRUARY,
  22884. +    "March",    TM_MARCH,
  22885. +    "April",    TM_APRIL,
  22886. +    "May",        TM_MAY,
  22887. +    "June",        TM_JUNE,
  22888. +    "July",        TM_JULY,
  22889. +    "August",    TM_AUGUST,
  22890. +    "September",    TM_SEPTEMBER,
  22891. +    "October",    TM_OCTOBER,
  22892. +    "November",    TM_NOVEMBER,
  22893. +    "December",    TM_DECEMBER,
  22894. +    NULL,        0
  22895. +};
  22896. +
  22897. +static struct lookup const    wday_names[] = {
  22898. +    "Sunday",    TM_SUNDAY,
  22899. +    "Monday",    TM_MONDAY,
  22900. +    "Tuesday",    TM_TUESDAY,
  22901. +    "Wednesday",    TM_WEDNESDAY,
  22902. +    "Thursday",    TM_THURSDAY,
  22903. +    "Friday",    TM_FRIDAY,
  22904. +    "Saturday",    TM_SATURDAY,
  22905. +    NULL,        0
  22906. +};
  22907. +
  22908. +static struct lookup const    lasts[] = {
  22909. +    "last-Sunday",        TM_SUNDAY,
  22910. +    "last-Monday",        TM_MONDAY,
  22911. +    "last-Tuesday",        TM_TUESDAY,
  22912. +    "last-Wednesday",    TM_WEDNESDAY,
  22913. +    "last-Thursday",    TM_THURSDAY,
  22914. +    "last-Friday",        TM_FRIDAY,
  22915. +    "last-Saturday",    TM_SATURDAY,
  22916. +    NULL,            0
  22917. +};
  22918. +
  22919. +static struct lookup const    begin_years[] = {
  22920. +    "minimum",        YR_MINIMUM,
  22921. +    "maximum",        YR_MAXIMUM,
  22922. +    NULL,            0
  22923. +};
  22924. +
  22925. +static struct lookup const    end_years[] = {
  22926. +    "minimum",        YR_MINIMUM,
  22927. +    "maximum",        YR_MAXIMUM,
  22928. +    "only",            YR_ONLY,
  22929. +    NULL,            0
  22930. +};
  22931. +
  22932. +static struct lookup const    leap_types[] = {
  22933. +    "Rolling",        TRUE,
  22934. +    "Stationary",        FALSE,
  22935. +    NULL,            0
  22936. +};
  22937. +
  22938. +static const int    len_months[2][MONSPERYEAR] = {
  22939. +    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
  22940. +    31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  22941. +};
  22942. +
  22943. +static const int    len_years[2] = {
  22944. +    DAYSPERNYEAR, DAYSPERLYEAR
  22945. +};
  22946. +
  22947. +static time_t        ats[TZ_MAX_TIMES];
  22948. +static unsigned char    types[TZ_MAX_TIMES];
  22949. +static long        gmtoffs[TZ_MAX_TYPES];
  22950. +static char        isdsts[TZ_MAX_TYPES];
  22951. +static char        abbrinds[TZ_MAX_TYPES];
  22952. +static char        ttisstds[TZ_MAX_TYPES];
  22953. +static char        chars[TZ_MAX_CHARS];
  22954. +static time_t        trans[TZ_MAX_LEAPS];
  22955. +static long        corr[TZ_MAX_LEAPS];
  22956. +static char        roll[TZ_MAX_LEAPS];
  22957. +
  22958. +/*
  22959. +** Memory allocation.
  22960. +*/
  22961. +
  22962. +static char *
  22963. +memcheck(ptr)
  22964. +char * const    ptr;
  22965. +{
  22966. +    if (ptr == NULL) {
  22967. +        (void) perror(progname);
  22968. +        (void) exit(EXIT_FAILURE);
  22969. +    }
  22970. +    return ptr;
  22971. +}
  22972. +
  22973. +#define emalloc(size)        memcheck(imalloc(size))
  22974. +#define erealloc(ptr, size)    memcheck(irealloc(ptr, size))
  22975. +#define ecpyalloc(ptr)        memcheck(icpyalloc(ptr))
  22976. +#define ecatalloc(oldp, newp)    memcheck(icatalloc(oldp, newp))
  22977. +
  22978. +/*
  22979. +** Error handling.
  22980. +*/
  22981. +
  22982. +static void
  22983. +eats(name, num, rname, rnum)
  22984. +const char * const    name;
  22985. +const int        num;
  22986. +const char * const    rname;
  22987. +const int        rnum;
  22988. +{
  22989. +    filename = name;
  22990. +    linenum = num;
  22991. +    rfilename = rname;
  22992. +    rlinenum = rnum;
  22993. +}
  22994. +
  22995. +static void
  22996. +eat(name, num)
  22997. +const char * const    name;
  22998. +const int        num;
  22999. +{
  23000. +    eats(name, num, (char *) NULL, -1);
  23001. +}
  23002. +
  23003. +static void
  23004. +error(string)
  23005. +const char * const    string;
  23006. +{
  23007. +    /*
  23008. +    ** Match the format of "cc" to allow sh users to
  23009. +    **     zic ... 2>&1 | error -t "*" -v
  23010. +    ** on BSD systems.
  23011. +    */
  23012. +    (void) fprintf(stderr, "\"%s\", line %d: %s",
  23013. +        filename, linenum, string);
  23014. +    if (rfilename != NULL)
  23015. +        (void) fprintf(stderr, " (rule from \"%s\", line %d)",
  23016. +            rfilename, rlinenum);
  23017. +    (void) fprintf(stderr, "\n");
  23018. +    ++errors;
  23019. +}
  23020. +
  23021. +static void
  23022. +usage()
  23023. +{
  23024. +    (void) fprintf(stderr,
  23025. +"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n\
  23026. +\t[ -L leapseconds ] [ filename ... ]\n",
  23027. +        progname, progname);
  23028. +    (void) exit(EXIT_FAILURE);
  23029. +}
  23030. +
  23031. +static const char *    psxrules = NULL;
  23032. +static const char *    lcltime = NULL;
  23033. +static const char *    directory = NULL;
  23034. +static const char *    leapsec = NULL;
  23035. +static int        sflag = FALSE;
  23036. +
  23037. +int
  23038. +main(argc, argv)
  23039. +int    argc;
  23040. +char *    argv[];
  23041. +{
  23042. +    register int    i, j;
  23043. +    register int    c;
  23044. +
  23045. +    (void) umask(umask(022) | 022);
  23046. +    progname = argv[0];
  23047. +    while ((c = getopt(argc, argv, "d:l:p:L:vs")) != EOF)
  23048. +        switch (c) {
  23049. +            default:
  23050. +                usage();
  23051. +            case 'd':
  23052. +                if (directory == NULL)
  23053. +                    directory = optarg;
  23054. +                else {
  23055. +                    (void) fprintf(stderr,
  23056. +"%s: More than one -d option specified\n",
  23057. +                        progname);
  23058. +                    (void) exit(EXIT_FAILURE);
  23059. +                }
  23060. +                break;
  23061. +            case 'l':
  23062. +                if (lcltime == NULL)
  23063. +                    lcltime = optarg;
  23064. +                else {
  23065. +                    (void) fprintf(stderr,
  23066. +"%s: More than one -l option specified\n",
  23067. +                        progname);
  23068. +                    (void) exit(EXIT_FAILURE);
  23069. +                }
  23070. +                break;
  23071. +            case 'p':
  23072. +                if (psxrules == NULL)
  23073. +                    psxrules = optarg;
  23074. +                else {
  23075. +                    (void) fprintf(stderr,
  23076. +"%s: More than one -p option specified\n",
  23077. +                        progname);
  23078. +                    (void) exit(EXIT_FAILURE);
  23079. +                }
  23080. +                break;
  23081. +            case 'L':
  23082. +                if (leapsec == NULL)
  23083. +                    leapsec = optarg;
  23084. +                else {
  23085. +                    (void) fprintf(stderr,
  23086. +"%s: More than one -L option specified\n",
  23087. +                        progname);
  23088. +                    (void) exit(EXIT_FAILURE);
  23089. +                }
  23090. +                break;
  23091. +            case 'v':
  23092. +                noise = TRUE;
  23093. +                break;
  23094. +            case 's':
  23095. +                sflag = TRUE;
  23096. +                break;
  23097. +        }
  23098. +    if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
  23099. +        usage();    /* usage message by request */
  23100. +    if (directory == NULL)
  23101. +        directory = TZDIR;
  23102. +
  23103. +    setboundaries();
  23104. +
  23105. +    if (optind < argc && leapsec != NULL) {
  23106. +        infile(leapsec);
  23107. +        adjleap();
  23108. +    }
  23109. +
  23110. +    zones = (struct zone *) emalloc(0);
  23111. +    rules = (struct rule *) emalloc(0);
  23112. +    links = (struct link *) emalloc(0);
  23113. +    for (i = optind; i < argc; ++i)
  23114. +        infile(argv[i]);
  23115. +    if (errors)
  23116. +        (void) exit(EXIT_FAILURE);
  23117. +    associate();
  23118. +    for (i = 0; i < nzones; i = j) {
  23119. +        /*
  23120. +        ** Find the next non-continuation zone entry.
  23121. +        */
  23122. +        for (j = i + 1; j < nzones && zones[j].z_name == NULL; ++j)
  23123. +            ;
  23124. +        outzone(&zones[i], j - i);
  23125. +    }
  23126. +    /*
  23127. +    ** Make links.
  23128. +    */
  23129. +    for (i = 0; i < nlinks; ++i)
  23130. +        dolink(links[i].l_from, links[i].l_to);
  23131. +    if (lcltime != NULL)
  23132. +        dolink(lcltime, TZDEFAULT);
  23133. +    if (psxrules != NULL)
  23134. +        dolink(psxrules, TZDEFRULES);
  23135. +    return (errors == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  23136. +}
  23137. +
  23138. +static void
  23139. +dolink(fromfile, tofile)
  23140. +const char * const    fromfile;
  23141. +const char * const    tofile;
  23142. +{
  23143. +    register char *    fromname;
  23144. +    register char *    toname;
  23145. +
  23146. +    fromname = ecpyalloc(directory);
  23147. +    fromname = ecatalloc(fromname, "/");
  23148. +    fromname = ecatalloc(fromname, fromfile);
  23149. +    if (strchr(tofile, ':')) toname = ecpyalloc(tofile);
  23150. +    else
  23151. +      {
  23152. +        toname = ecpyalloc(directory);
  23153. +        toname = ecatalloc(toname, "/");
  23154. +        toname = ecatalloc(toname, tofile);
  23155. +      }
  23156. +    /*
  23157. +    ** We get to be careful here since
  23158. +    ** there's a fair chance of root running us.
  23159. +    */
  23160. +    if (!itsdir(toname))
  23161. +        (void) remove(toname);
  23162. +    if (link(fromname, toname) != 0) {
  23163. +        (void) fprintf(stderr, "%s: Can't link from %s to ",
  23164. +            progname, fromname);
  23165. +        (void) perror(toname);
  23166. +        (void) exit(EXIT_FAILURE);
  23167. +    }
  23168. +    ifree(fromname);
  23169. +    ifree(toname);
  23170. +}
  23171. +
  23172. +static void
  23173. +setboundaries()
  23174. +{
  23175. +    register time_t    bit;
  23176. +
  23177. +    for (bit = 1; bit > 0; bit <<= 1)
  23178. +        ;
  23179. +    if (bit == 0) {        /* time_t is an unsigned type */
  23180. +        tt_signed = FALSE;
  23181. +        min_time = 0;
  23182. +        max_time = ~(time_t) 0;
  23183. +        if (sflag)
  23184. +            max_time >>= 1;
  23185. +    } else {
  23186. +        tt_signed = TRUE;
  23187. +        min_time = bit;
  23188. +        max_time = bit;
  23189. +        ++max_time;
  23190. +        max_time = -max_time;
  23191. +        if (sflag)
  23192. +            min_time = 0;
  23193. +    }
  23194. +    min_year = TM_YEAR_BASE + gmtime(&min_time)->tm_year;
  23195. +    max_year = TM_YEAR_BASE + gmtime(&max_time)->tm_year;
  23196. +}
  23197. +
  23198. +static int
  23199. +itsdir(name)
  23200. +const char * const    name;
  23201. +{
  23202. +    struct stat    s;
  23203. +
  23204. +    return (stat(name, &s) == 0 && S_ISDIR(s.st_mode));
  23205. +}
  23206. +
  23207. +/*
  23208. +** Associate sets of rules with zones.
  23209. +*/
  23210. +
  23211. +/*
  23212. +** Sort by rule name.
  23213. +*/
  23214. +
  23215. +static int
  23216. +rcomp(cp1, cp2)
  23217. +const void *    cp1;
  23218. +const void *    cp2;
  23219. +{
  23220. +    return strcmp(((struct rule *) cp1)->r_name,
  23221. +        ((struct rule *) cp2)->r_name);
  23222. +}
  23223. +
  23224. +static void
  23225. +associate()
  23226. +{
  23227. +    register struct zone *    zp;
  23228. +    register struct rule *    rp;
  23229. +    register int        base, out;
  23230. +    register int        i;
  23231. +
  23232. +    if (nrules != 0)
  23233. +        (void) qsort((void *) rules, (size_t) nrules,
  23234. +             (size_t) sizeof *rules, rcomp);
  23235. +    for (i = 0; i < nzones; ++i) {
  23236. +        zp = &zones[i];
  23237. +        zp->z_rules = NULL;
  23238. +        zp->z_nrules = 0;
  23239. +    }
  23240. +    for (base = 0; base < nrules; base = out) {
  23241. +        rp = &rules[base];
  23242. +        for (out = base + 1; out < nrules; ++out)
  23243. +            if (strcmp(rp->r_name, rules[out].r_name) != 0)
  23244. +                break;
  23245. +        for (i = 0; i < nzones; ++i) {
  23246. +            zp = &zones[i];
  23247. +            if (strcmp(zp->z_rule, rp->r_name) != 0)
  23248. +                continue;
  23249. +            zp->z_rules = rp;
  23250. +            zp->z_nrules = out - base;
  23251. +        }
  23252. +    }
  23253. +    for (i = 0; i < nzones; ++i) {
  23254. +        zp = &zones[i];
  23255. +        if (zp->z_nrules == 0) {
  23256. +            /*
  23257. +            ** Maybe we have a local standard time offset.
  23258. +            */
  23259. +            eat(zp->z_filename, zp->z_linenum);
  23260. +            zp->z_stdoff =
  23261. +                gethms((char *)zp->z_rule, "unruly zone", TRUE);
  23262. +            /*
  23263. +            ** Note, though, that if there's no rule,
  23264. +            ** a '%s' in the format is a bad thing.
  23265. +            */
  23266. +            if (strchr(zp->z_format, '%') != 0)
  23267. +                error("%s in ruleless zone");
  23268. +        }
  23269. +    }
  23270. +    if (errors)
  23271. +        (void) exit(EXIT_FAILURE);
  23272. +}
  23273. +
  23274. +static void
  23275. +infile(name)
  23276. +const char *    name;
  23277. +{
  23278. +    register FILE *            fp;
  23279. +    register char **        fields;
  23280. +    register char *            cp;
  23281. +    register const struct lookup *    lp;
  23282. +    register int            nfields;
  23283. +    register int            wantcont;
  23284. +    register int            num;
  23285. +    char                buf[BUFSIZ];
  23286. +
  23287. +    if (strcmp(name, "-") == 0) {
  23288. +        name = "standard input";
  23289. +        fp = stdin;
  23290. +    } else if ((fp = fopen(name, "r")) == NULL) {
  23291. +        (void) fprintf(stderr, "%s: Can't open ", progname);
  23292. +        (void) perror(name);
  23293. +        (void) exit(EXIT_FAILURE);
  23294. +    }
  23295. +    wantcont = FALSE;
  23296. +    for (num = 1; ; ++num) {
  23297. +        eat(name, num);
  23298. +        if (fgets(buf, (int) sizeof buf, fp) != buf)
  23299. +            break;
  23300. +        cp = strchr(buf, '\n');
  23301. +        if (cp == NULL) {
  23302. +            error("line too long");
  23303. +            (void) exit(EXIT_FAILURE);
  23304. +        }
  23305. +        *cp = '\0';
  23306. +        fields = getfields(buf);
  23307. +        nfields = 0;
  23308. +        while (fields[nfields] != NULL) {
  23309. +            if (ciequal(fields[nfields], "-"))
  23310. +                fields[nfields] = "";
  23311. +            ++nfields;
  23312. +        }
  23313. +        if (nfields == 0) {
  23314. +            /* nothing to do */
  23315. +        } else if (wantcont) {
  23316. +            wantcont = inzcont(fields, nfields);
  23317. +        } else {
  23318. +            lp = byword(fields[0], line_codes);
  23319. +            if (lp == NULL)
  23320. +                error("input line of unknown type");
  23321. +            else switch ((int) (lp->l_value)) {
  23322. +                case LC_RULE:
  23323. +                    inrule(fields, nfields);
  23324. +                    wantcont = FALSE;
  23325. +                    break;
  23326. +                case LC_ZONE:
  23327. +                    wantcont = inzone(fields, nfields);
  23328. +                    break;
  23329. +                case LC_LINK:
  23330. +                    inlink(fields, nfields);
  23331. +                    wantcont = FALSE;
  23332. +                    break;
  23333. +                case LC_LEAP:
  23334. +                    if (name != leapsec)
  23335. +                        (void) fprintf(stderr,
  23336. +"%s: Leap line in non leap seconds file %s\n",
  23337. +                            progname, name);
  23338. +                    else    inleap(fields, nfields);
  23339. +                    wantcont = FALSE;
  23340. +                    break;
  23341. +                default:    /* "cannot happen" */
  23342. +                    (void) fprintf(stderr,
  23343. +"%s: panic: Invalid l_value %d\n",
  23344. +                        progname, lp->l_value);
  23345. +                    (void) exit(EXIT_FAILURE);
  23346. +            }
  23347. +        }
  23348. +        ifree((char *) fields);
  23349. +    }
  23350. +    if (ferror(fp)) {
  23351. +        (void) fprintf(stderr, "%s: Error reading ", progname);
  23352. +        (void) perror(filename);
  23353. +        (void) exit(EXIT_FAILURE);
  23354. +    }
  23355. +    if (fp != stdin && fclose(fp)) {
  23356. +        (void) fprintf(stderr, "%s: Error closing ", progname);
  23357. +        (void) perror(filename);
  23358. +        (void) exit(EXIT_FAILURE);
  23359. +    }
  23360. +    if (wantcont)
  23361. +        error("expected continuation line not found");
  23362. +}
  23363. +
  23364. +/*
  23365. +** Convert a string of one of the forms
  23366. +**    h    -h     hh:mm    -hh:mm    hh:mm:ss    -hh:mm:ss
  23367. +** into a number of seconds.
  23368. +** A null string maps to zero.
  23369. +** Call error with errstring and return zero on errors.
  23370. +*/
  23371. +
  23372. +static long
  23373. +gethms(string, errstring, signable)
  23374. +char *        string;
  23375. +const char * const    errstring;
  23376. +const int        signable;
  23377. +{
  23378. +    int    hh, mm, ss, sign;
  23379. +
  23380. +    if (string == NULL || *string == '\0')
  23381. +        return 0;
  23382. +    if (!signable)
  23383. +        sign = 1;
  23384. +    else if (*string == '-') {
  23385. +        sign = -1;
  23386. +        ++string;
  23387. +    } else    sign = 1;
  23388. +    if (sscanf(string, "%d:%d:%d", &hh, &mm, &ss) == 3) ;
  23389. +    else if (sscanf(string, "%d:%d", &hh, &mm) == 2) ss = 0;
  23390. +    else if (sscanf(string, "%d", &hh) == 1) mm = ss = 0;
  23391. +    else
  23392. +    {
  23393. +        error(errstring);
  23394. +        return 0;
  23395. +    }
  23396. +    if (hh < 0 || hh >= HOURSPERDAY ||
  23397. +        mm < 0 || mm >= MINSPERHOUR ||
  23398. +        ss < 0 || ss > SECSPERMIN) {
  23399. +            error(errstring);
  23400. +            return 0;
  23401. +    }
  23402. +    return eitol(sign) *
  23403. +        (eitol(hh * MINSPERHOUR + mm) *
  23404. +        eitol(SECSPERMIN) + eitol(ss));
  23405. +}
  23406. +
  23407. +static void
  23408. +inrule(fields, nfields)
  23409. +register char ** const    fields;
  23410. +const int        nfields;
  23411. +{
  23412. +    static struct rule    r;
  23413. +
  23414. +    if (nfields != RULE_FIELDS) {
  23415. +        error("wrong number of fields on Rule line");
  23416. +        return;
  23417. +    }
  23418. +    if (*fields[RF_NAME] == '\0') {
  23419. +        error("nameless rule");
  23420. +        return;
  23421. +    }
  23422. +    r.r_filename = filename;
  23423. +    r.r_linenum = linenum;
  23424. +    r.r_stdoff = gethms(fields[RF_STDOFF], "invalid saved time", TRUE);
  23425. +    rulesub(&r, fields[RF_LOYEAR], fields[RF_HIYEAR], fields[RF_COMMAND],
  23426. +        fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]);
  23427. +    r.r_name = ecpyalloc(fields[RF_NAME]);
  23428. +    r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]);
  23429. +    rules = (struct rule *) erealloc((char *) rules,
  23430. +        (int) ((nrules + 1) * sizeof *rules));
  23431. +    rules[nrules++] = r;
  23432. +}
  23433. +
  23434. +static int
  23435. +inzone(fields, nfields)
  23436. +register char ** const    fields;
  23437. +const int        nfields;
  23438. +{
  23439. +    register int    i;
  23440. +    char        buf[132];
  23441. +
  23442. +    if (nfields < ZONE_MINFIELDS || nfields > ZONE_MAXFIELDS) {
  23443. +        error("wrong number of fields on Zone line");
  23444. +        return FALSE;
  23445. +    }
  23446. +    if (strcmp(fields[ZF_NAME], TZDEFAULT) == 0 && lcltime != NULL) {
  23447. +        (void) sprintf(buf,
  23448. +            "\"Zone %s\" line and -l option are mutually exclusive",
  23449. +            TZDEFAULT);
  23450. +        error(buf);
  23451. +        return FALSE;
  23452. +    }
  23453. +    if (strcmp(fields[ZF_NAME], TZDEFRULES) == 0 && psxrules != NULL) {
  23454. +        (void) sprintf(buf,
  23455. +            "\"Zone %s\" line and -p option are mutually exclusive",
  23456. +            TZDEFRULES);
  23457. +        error(buf);
  23458. +        return FALSE;
  23459. +    }
  23460. +    for (i = 0; i < nzones; ++i)
  23461. +        if (zones[i].z_name != NULL &&
  23462. +            strcmp(zones[i].z_name, fields[ZF_NAME]) == 0) {
  23463. +                (void) sprintf(buf,
  23464. +"duplicate zone name %s (file \"%s\", line %d)",
  23465. +                    fields[ZF_NAME],
  23466. +                    zones[i].z_filename,
  23467. +                    zones[i].z_linenum);
  23468. +                error(buf);
  23469. +                return FALSE;
  23470. +        }
  23471. +    return inzsub(fields, nfields, FALSE);
  23472. +}
  23473. +
  23474. +static int
  23475. +inzcont(fields, nfields)
  23476. +register char ** const    fields;
  23477. +const int        nfields;
  23478. +{
  23479. +    if (nfields < ZONEC_MINFIELDS || nfields > ZONEC_MAXFIELDS) {
  23480. +        error("wrong number of fields on Zone continuation line");
  23481. +        return FALSE;
  23482. +    }
  23483. +    return inzsub(fields, nfields, TRUE);
  23484. +}
  23485. +
  23486. +static int
  23487. +inzsub(fields, nfields, iscont)
  23488. +register char ** const    fields;
  23489. +const int        nfields;
  23490. +const int        iscont;
  23491. +{
  23492. +    register char *        cp;
  23493. +    static struct zone    z;
  23494. +    register int        i_gmtoff, i_rule, i_format;
  23495. +    register int        i_untilyear, i_untilmonth;
  23496. +    register int        i_untilday, i_untiltime;
  23497. +    register int        hasuntil;
  23498. +
  23499. +    if (iscont) {
  23500. +        i_gmtoff = ZFC_GMTOFF;
  23501. +        i_rule = ZFC_RULE;
  23502. +        i_format = ZFC_FORMAT;
  23503. +        i_untilyear = ZFC_TILYEAR;
  23504. +        i_untilmonth = ZFC_TILMONTH;
  23505. +        i_untilday = ZFC_TILDAY;
  23506. +        i_untiltime = ZFC_TILTIME;
  23507. +        z.z_name = NULL;
  23508. +    } else {
  23509. +        i_gmtoff = ZF_GMTOFF;
  23510. +        i_rule = ZF_RULE;
  23511. +        i_format = ZF_FORMAT;
  23512. +        i_untilyear = ZF_TILYEAR;
  23513. +        i_untilmonth = ZF_TILMONTH;
  23514. +        i_untilday = ZF_TILDAY;
  23515. +        i_untiltime = ZF_TILTIME;
  23516. +        z.z_name = ecpyalloc(fields[ZF_NAME]);
  23517. +    }
  23518. +    z.z_filename = filename;
  23519. +    z.z_linenum = linenum;
  23520. +    z.z_gmtoff = gethms(fields[i_gmtoff], "invalid GMT offset", TRUE);
  23521. +    if ((cp = strchr(fields[i_format], '%')) != 0) {
  23522. +        if (*++cp != 's' || strchr(cp, '%') != 0) {
  23523. +            error("invalid abbreviation format");
  23524. +            return FALSE;
  23525. +        }
  23526. +    }
  23527. +    z.z_rule = ecpyalloc(fields[i_rule]);
  23528. +    z.z_format = ecpyalloc(fields[i_format]);
  23529. +    hasuntil = nfields > i_untilyear;
  23530. +    if (hasuntil) {
  23531. +        z.z_untilrule.r_filename = filename;
  23532. +        z.z_untilrule.r_linenum = linenum;
  23533. +        rulesub(&z.z_untilrule,
  23534. +            fields[i_untilyear],
  23535. +            "only",
  23536. +            "",
  23537. +            (nfields > i_untilmonth) ? fields[i_untilmonth] : "Jan",
  23538. +            (nfields > i_untilday) ? fields[i_untilday] : "1",
  23539. +            (nfields > i_untiltime) ? fields[i_untiltime] : "0");
  23540. +        z.z_untiltime = rpytime(&z.z_untilrule, z.z_untilrule.r_loyear);
  23541. +        if (iscont && nzones > 0 && z.z_untiltime < max_time &&
  23542. +            z.z_untiltime > min_time &&
  23543. +            zones[nzones - 1].z_untiltime >= z.z_untiltime) {
  23544. +error("Zone continuation line end time is not after end time of previous line");
  23545. +            return FALSE;
  23546. +        }
  23547. +    }
  23548. +    zones = (struct zone *) erealloc((char *) zones,
  23549. +        (int) ((nzones + 1) * sizeof *zones));
  23550. +    zones[nzones++] = z;
  23551. +    /*
  23552. +    ** If there was an UNTIL field on this line,
  23553. +    ** there's more information about the zone on the next line.
  23554. +    */
  23555. +    return hasuntil;
  23556. +}
  23557. +
  23558. +static void
  23559. +inleap(fields, nfields)
  23560. +register char ** const    fields;
  23561. +const int        nfields;
  23562. +{
  23563. +    register const char *        cp;
  23564. +    register const struct lookup *    lp;
  23565. +    register int            i, j;
  23566. +    int                year, month, day;
  23567. +    long                dayoff, tod;
  23568. +    time_t                t;
  23569. +
  23570. +    if (nfields != LEAP_FIELDS) {
  23571. +        error("wrong number of fields on Leap line");
  23572. +        return;
  23573. +    }
  23574. +    dayoff = 0;
  23575. +    cp = fields[LP_YEAR];
  23576. +    if (sscanf((char *)cp, "%d", &year) != 1 ||
  23577. +        year < min_year || year > max_year) {
  23578. +            /*
  23579. +             * Leapin' Lizards!
  23580. +             */
  23581. +            error("invalid leaping year");
  23582. +            return;
  23583. +    }
  23584. +    j = EPOCH_YEAR;
  23585. +    while (j != year) {
  23586. +        if (year > j) {
  23587. +            i = len_years[isleap(j)];
  23588. +            ++j;
  23589. +        } else {
  23590. +            --j;
  23591. +            i = -len_years[isleap(j)];
  23592. +        }
  23593. +        dayoff = oadd(dayoff, eitol(i));
  23594. +    }
  23595. +    if ((lp = byword(fields[LP_MONTH], mon_names)) == NULL) {
  23596. +        error("invalid month name");
  23597. +        return;
  23598. +    }
  23599. +    month = lp->l_value;
  23600. +    j = TM_JANUARY;
  23601. +    while (j != month) {
  23602. +        i = len_months[isleap(year)][j];
  23603. +        dayoff = oadd(dayoff, eitol(i));
  23604. +        ++j;
  23605. +    }
  23606. +    cp = fields[LP_DAY];
  23607. +    if (sscanf((char *)cp, "%d", &day) != 1 ||
  23608. +        day <= 0 || day > len_months[isleap(year)][month]) {
  23609. +            error("invalid day of month");
  23610. +            return;
  23611. +    }
  23612. +    dayoff = oadd(dayoff, eitol(day - 1));
  23613. +    if (dayoff < 0 && !tt_signed) {
  23614. +        error("time before zero");
  23615. +        return;
  23616. +    }
  23617. +    t = (time_t) dayoff * SECSPERDAY;
  23618. +    /*
  23619. +    ** Cheap overflow check.
  23620. +    */
  23621. +    if (t / SECSPERDAY != dayoff) {
  23622. +        error("time overflow");
  23623. +        return;
  23624. +    }
  23625. +    tod = gethms(fields[LP_TIME], "invalid time of day", FALSE);
  23626. +    cp = fields[LP_CORR];
  23627. +    if (strcmp(cp, "+") != 0 && strcmp(cp, "") != 0) {
  23628. +        /* infile() turned "-" into "" */
  23629. +        error("illegal CORRECTION field on Leap line");
  23630. +        return;
  23631. +    }
  23632. +    if ((lp = byword(fields[LP_ROLL], leap_types)) == NULL) {
  23633. +        error("illegal Rolling/Stationary field on Leap line");
  23634. +        return;
  23635. +    }
  23636. +    addleap(tadd(t, tod), *cp == '+', lp->l_value);
  23637. +}
  23638. +
  23639. +static void
  23640. +inlink(fields, nfields)
  23641. +register char ** const    fields;
  23642. +const int        nfields;
  23643. +{
  23644. +    struct link    l;
  23645. +
  23646. +    if (nfields != LINK_FIELDS) {
  23647. +        error("wrong number of fields on Link line");
  23648. +        return;
  23649. +    }
  23650. +    if (*fields[LF_FROM] == '\0') {
  23651. +        error("blank FROM field on Link line");
  23652. +        return;
  23653. +    }
  23654. +    if (*fields[LF_TO] == '\0') {
  23655. +        error("blank TO field on Link line");
  23656. +        return;
  23657. +    }
  23658. +    l.l_filename = filename;
  23659. +    l.l_linenum = linenum;
  23660. +    l.l_from = ecpyalloc(fields[LF_FROM]);
  23661. +    l.l_to = ecpyalloc(fields[LF_TO]);
  23662. +    links = (struct link *) erealloc((char *) links,
  23663. +        (int) ((nlinks + 1) * sizeof *links));
  23664. +    links[nlinks++] = l;
  23665. +}
  23666. +
  23667. +static void
  23668. +rulesub(rp, loyearp, hiyearp, typep, monthp, dayp, timep)
  23669. +register struct rule * const    rp;
  23670. +char * const            loyearp;
  23671. +char * const            hiyearp;
  23672. +char * const            typep;
  23673. +char * const            monthp;
  23674. +char * const            dayp;
  23675. +char * const            timep;
  23676. +{
  23677. +    register struct lookup const *    lp;
  23678. +    register char *            cp;
  23679. +
  23680. +    if ((lp = byword(monthp, mon_names)) == NULL) {
  23681. +        error("invalid month name");
  23682. +        return;
  23683. +    }
  23684. +    rp->r_month = lp->l_value;
  23685. +    rp->r_todisstd = FALSE;
  23686. +    cp = timep;
  23687. +    if (*cp != '\0') {
  23688. +        cp += strlen(cp) - 1;
  23689. +        switch (lowerit(*cp)) {
  23690. +            case 's':
  23691. +                rp->r_todisstd = TRUE;
  23692. +                *cp = '\0';
  23693. +                break;
  23694. +            case 'w':
  23695. +                rp->r_todisstd = FALSE;
  23696. +                *cp = '\0';
  23697. +                break;
  23698. +        }
  23699. +    }
  23700. +    rp->r_tod = gethms(timep, "invalid time of day", FALSE);
  23701. +    /*
  23702. +    ** Year work.
  23703. +    */
  23704. +    cp = loyearp;
  23705. +    if ((lp = byword(cp, begin_years)) != NULL) switch ((int) lp->l_value) {
  23706. +        case YR_MINIMUM:
  23707. +            rp->r_loyear = min_year;
  23708. +            break;
  23709. +        case YR_MAXIMUM:
  23710. +            rp->r_loyear = max_year;
  23711. +            break;
  23712. +        default:    /* "cannot happen" */
  23713. +            (void) fprintf(stderr,
  23714. +                "%s: panic: Invalid l_value %d\n",
  23715. +                progname, lp->l_value);
  23716. +            (void) exit(EXIT_FAILURE);
  23717. +    } else if (sscanf(cp, "%d", &rp->r_loyear) != 1 ||
  23718. +        rp->r_loyear < min_year || rp->r_loyear > max_year) {
  23719. +            if (noise)
  23720. +                error("invalid starting year");
  23721. +            if (rp->r_loyear > max_year)
  23722. +                return;
  23723. +    }
  23724. +    cp = hiyearp;
  23725. +    if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
  23726. +        case YR_MINIMUM:
  23727. +            rp->r_hiyear = min_year;
  23728. +            break;
  23729. +        case YR_MAXIMUM:
  23730. +            rp->r_hiyear = max_year;
  23731. +            break;
  23732. +        case YR_ONLY:
  23733. +            rp->r_hiyear = rp->r_loyear;
  23734. +            break;
  23735. +        default:    /* "cannot happen" */
  23736. +            (void) fprintf(stderr,
  23737. +                "%s: panic: Invalid l_value %d\n",
  23738. +                progname, lp->l_value);
  23739. +            (void) exit(EXIT_FAILURE);
  23740. +    } else if (sscanf(cp, "%d", &rp->r_hiyear) != 1 ||
  23741. +        rp->r_hiyear < min_year || rp->r_hiyear > max_year) {
  23742. +            if (noise)
  23743. +                error("invalid ending year");
  23744. +            if (rp->r_hiyear < min_year)
  23745. +                return;
  23746. +    }
  23747. +    if (rp->r_hiyear < min_year)
  23748. +         return;
  23749. +     if (rp->r_loyear < min_year)
  23750. +         rp->r_loyear = min_year;
  23751. +     if (rp->r_hiyear > max_year)
  23752. +         rp->r_hiyear = max_year;
  23753. +    if (rp->r_loyear > rp->r_hiyear) {
  23754. +        error("starting year greater than ending year");
  23755. +        return;
  23756. +    }
  23757. +    if (*typep == '\0')
  23758. +        rp->r_yrtype = NULL;
  23759. +    else {
  23760. +        if (rp->r_loyear == rp->r_hiyear) {
  23761. +            error("typed single year");
  23762. +            return;
  23763. +        }
  23764. +        rp->r_yrtype = ecpyalloc(typep);
  23765. +    }
  23766. +    /*
  23767. +    ** Day work.
  23768. +    ** Accept things such as:
  23769. +    **    1
  23770. +    **    last-Sunday
  23771. +    **    Sun<=20
  23772. +    **    Sun>=7
  23773. +    */
  23774. +    if ((lp = byword(dayp, lasts)) != NULL) {
  23775. +        rp->r_dycode = DC_DOWLEQ;
  23776. +        rp->r_wday = lp->l_value;
  23777. +        rp->r_dayofmonth = len_months[1][rp->r_month];
  23778. +    } else {
  23779. +        if ((cp = strchr(dayp, '<')) != 0)
  23780. +            rp->r_dycode = DC_DOWLEQ;
  23781. +        else if ((cp = strchr(dayp, '>')) != 0)
  23782. +            rp->r_dycode = DC_DOWGEQ;
  23783. +        else {
  23784. +            cp = dayp;
  23785. +            rp->r_dycode = DC_DOM;
  23786. +        }
  23787. +        if (rp->r_dycode != DC_DOM) {
  23788. +            *cp++ = 0;
  23789. +            if (*cp++ != '=') {
  23790. +                error("invalid day of month");
  23791. +                return;
  23792. +            }
  23793. +            if ((lp = byword(dayp, wday_names)) == NULL) {
  23794. +                error("invalid weekday name");
  23795. +                return;
  23796. +            }
  23797. +            rp->r_wday = lp->l_value;
  23798. +        }
  23799. +        if (sscanf(cp, "%d", &rp->r_dayofmonth) != 1 ||
  23800. +            rp->r_dayofmonth <= 0 ||
  23801. +            (rp->r_dayofmonth > len_months[1][rp->r_month])) {
  23802. +                error("invalid day of month");
  23803. +                return;
  23804. +        }
  23805. +    }
  23806. +}
  23807. +
  23808. +static void
  23809. +convert(val, buf)
  23810. +const long    val;
  23811. +char * const    buf;
  23812. +{
  23813. +    register int    i;
  23814. +    register long    shift;
  23815. +
  23816. +    for (i = 0, shift = 24; i < 4; ++i, shift -= 8)
  23817. +        buf[i] = val >> shift;
  23818. +}
  23819. +
  23820. +static void
  23821. +puttzcode(val, fp)
  23822. +const long    val;
  23823. +FILE * const    fp;
  23824. +{
  23825. +    char    buf[4];
  23826. +
  23827. +    convert(val, buf);
  23828. +    (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
  23829. +}
  23830. +
  23831. +static void
  23832. +writezone(name)
  23833. +const char * const    name;
  23834. +{
  23835. +    register FILE *        fp;
  23836. +    register int        i, j;
  23837. +    char            fullname[BUFSIZ];
  23838. +    static struct tzhead    tzh;
  23839. +
  23840. +    if (strlen(directory) + 1 + strlen(name) >= sizeof fullname) {
  23841. +        (void) fprintf(stderr,
  23842. +            "%s: File name %s/%s too long\n", progname,
  23843. +            directory, name);
  23844. +        (void) exit(EXIT_FAILURE);
  23845. +    }
  23846. +    (void) sprintf(fullname, "%s/%s", directory, name);
  23847. +    if ((fp = fopen(fullname, "wb")) == NULL) {
  23848. +        if (mkdirs(fullname) != 0)
  23849. +            (void) exit(EXIT_FAILURE);
  23850. +        if ((fp = fopen(fullname, "wb")) == NULL) {
  23851. +            (void) fprintf(stderr, "%s: Can't create ", progname);
  23852. +            (void) perror(fullname);
  23853. +            (void) exit(EXIT_FAILURE);
  23854. +        }
  23855. +    }
  23856. +    convert(eitol(typecnt), tzh.tzh_ttisstdcnt);
  23857. +    convert(eitol(leapcnt), tzh.tzh_leapcnt);
  23858. +    convert(eitol(timecnt), tzh.tzh_timecnt);
  23859. +    convert(eitol(typecnt), tzh.tzh_typecnt);
  23860. +    convert(eitol(charcnt), tzh.tzh_charcnt);
  23861. +    (void) fwrite((void *) &tzh, (size_t) sizeof tzh, (size_t) 1, fp);
  23862. +    for (i = 0; i < timecnt; ++i) {
  23863. +        j = leapcnt;
  23864. +        while (--j >= 0)
  23865. +            if (ats[i] >= trans[j]) {
  23866. +                ats[i] = tadd(ats[i], corr[j]);
  23867. +                break;
  23868. +            }
  23869. +        puttzcode((long) ats[i], fp);
  23870. +    }
  23871. +    if (timecnt > 0)
  23872. +        (void) fwrite((void *) types, (size_t) sizeof types[0],
  23873. +            (size_t) timecnt, fp);
  23874. +    for (i = 0; i < typecnt; ++i) {
  23875. +        puttzcode((long) gmtoffs[i], fp);
  23876. +        (void) putc(isdsts[i], fp);
  23877. +        (void) putc(abbrinds[i], fp);
  23878. +    }
  23879. +    if (charcnt != 0)
  23880. +        (void) fwrite((void *) chars, (size_t) sizeof chars[0],
  23881. +            (size_t) charcnt, fp);
  23882. +    for (i = 0; i < leapcnt; ++i) {
  23883. +        if (roll[i]) {
  23884. +            if (timecnt == 0 || trans[i] < ats[0]) {
  23885. +                j = 0;
  23886. +                while (isdsts[j])
  23887. +                    if (++j >= typecnt) {
  23888. +                        j = 0;
  23889. +                        break;
  23890. +                    }
  23891. +            } else {
  23892. +                j = 1;
  23893. +                while (j < timecnt && trans[i] >= ats[j])
  23894. +                    ++j;
  23895. +                j = types[j - 1];
  23896. +            }
  23897. +            puttzcode((long) tadd(trans[i], -gmtoffs[j]), fp);
  23898. +        } else    puttzcode((long) trans[i], fp);
  23899. +        puttzcode((long) corr[i], fp);
  23900. +    }
  23901. +    for (i = 0; i < typecnt; ++i)
  23902. +        (void) putc(ttisstds[i], fp);
  23903. +    if (ferror(fp) || fclose(fp)) {
  23904. +        (void) fprintf(stderr, "%s: Write error on ", progname);
  23905. +        (void) perror(fullname);
  23906. +        (void) exit(EXIT_FAILURE);
  23907. +    }
  23908. +}
  23909. +
  23910. +static void
  23911. +outzone(zpfirst, zonecount)
  23912. +const struct zone * const    zpfirst;
  23913. +const int            zonecount;
  23914. +{
  23915. +    register const struct zone *    zp;
  23916. +    register struct rule *        rp;
  23917. +    register int            i, j;
  23918. +    register int            usestart, useuntil;
  23919. +    register time_t            starttime, untiltime;
  23920. +    register long            gmtoff;
  23921. +    register long            stdoff;
  23922. +    register int            year;
  23923. +    register long            startoff;
  23924. +    register int            startisdst;
  23925. +    register int            startttisstd;
  23926. +    register int            type;
  23927. +    char                startbuf[BUFSIZ];
  23928. +
  23929. +    /*
  23930. +    ** Now. . .finally. . .generate some useful data!
  23931. +    */
  23932. +    timecnt = 0;
  23933. +    typecnt = 0;
  23934. +    charcnt = 0;
  23935. +    /*
  23936. +    ** Two guesses. . .the second may well be corrected later.
  23937. +    */
  23938. +    gmtoff = zpfirst->z_gmtoff;
  23939. +    stdoff = 0;
  23940. +#ifdef lint
  23941. +    starttime = 0;
  23942. +    startttisstd = FALSE;
  23943. +#endif /* defined lint */
  23944. +    for (i = 0; i < zonecount; ++i) {
  23945. +        usestart = i > 0;
  23946. +        useuntil = i < (zonecount - 1);
  23947. +        zp = &zpfirst[i];
  23948. +        eat(zp->z_filename, zp->z_linenum);
  23949. +        startisdst = -1;
  23950. +        if (zp->z_nrules == 0) {
  23951. +            type = addtype(oadd(zp->z_gmtoff, zp->z_stdoff),
  23952. +                zp->z_format, zp->z_stdoff != 0,
  23953. +                startttisstd);
  23954. +            if (usestart)
  23955. +                addtt(starttime, type);
  23956. +            gmtoff = zp->z_gmtoff;
  23957. +            stdoff = zp->z_stdoff;
  23958. +        } else for (year = min_year; year <= max_year; ++year) {
  23959. +            if (useuntil && year > zp->z_untilrule.r_hiyear)
  23960. +                break;
  23961. +            /*
  23962. +            ** Mark which rules to do in the current year.
  23963. +            ** For those to do, calculate rpytime(rp, year);
  23964. +            */
  23965. +            for (j = 0; j < zp->z_nrules; ++j) {
  23966. +                rp = &zp->z_rules[j];
  23967. +                eats(zp->z_filename, zp->z_linenum,
  23968. +                    rp->r_filename, rp->r_linenum);
  23969. +                rp->r_todo = year >= rp->r_loyear &&
  23970. +                        year <= rp->r_hiyear &&
  23971. +                        yearistype(year, rp->r_yrtype);
  23972. +                if (rp->r_todo)
  23973. +                    rp->r_temp = rpytime(rp, year);
  23974. +            }
  23975. +            for ( ; ; ) {
  23976. +                register int    k;
  23977. +                register time_t    jtime, ktime;
  23978. +                register long    offset;
  23979. +                char        buf[BUFSIZ];
  23980. +
  23981. +                if (useuntil) {
  23982. +                    /*
  23983. +                    ** Turn untiltime into GMT
  23984. +                    ** assuming the current gmtoff and
  23985. +                    ** stdoff values.
  23986. +                    */
  23987. +                    offset = gmtoff;
  23988. +                    if (!zp->z_untilrule.r_todisstd)
  23989. +                        offset = oadd(offset, stdoff);
  23990. +                    untiltime = tadd(zp->z_untiltime,
  23991. +                        -offset);
  23992. +                }
  23993. +                /*
  23994. +                ** Find the rule (of those to do, if any)
  23995. +                ** that takes effect earliest in the year.
  23996. +                */
  23997. +                k = -1;
  23998. +#ifdef lint
  23999. +                ktime = 0;
  24000. +#endif /* defined lint */
  24001. +                for (j = 0; j < zp->z_nrules; ++j) {
  24002. +                    rp = &zp->z_rules[j];
  24003. +                    if (!rp->r_todo)
  24004. +                        continue;
  24005. +                    eats(zp->z_filename, zp->z_linenum,
  24006. +                        rp->r_filename, rp->r_linenum);
  24007. +                    offset = gmtoff;
  24008. +                    if (!rp->r_todisstd)
  24009. +                        offset = oadd(offset, stdoff);
  24010. +                    jtime = rp->r_temp;
  24011. +                    if (jtime == min_time ||
  24012. +                        jtime == max_time)
  24013. +                            continue;
  24014. +                    jtime = tadd(jtime, -offset);
  24015. +                    if (k < 0 || jtime < ktime) {
  24016. +                        k = j;
  24017. +                        ktime = jtime;
  24018. +                    }
  24019. +                }
  24020. +                if (k < 0)
  24021. +                    break;    /* go on to next year */
  24022. +                rp = &zp->z_rules[k];
  24023. +                rp->r_todo = FALSE;
  24024. +                if (useuntil && ktime >= untiltime)
  24025. +                    break;
  24026. +                if (usestart) {
  24027. +                    if (ktime < starttime) {
  24028. +                        stdoff = rp->r_stdoff;
  24029. +                        startoff = oadd(zp->z_gmtoff,
  24030. +                            rp->r_stdoff);
  24031. +                        (void) sprintf(startbuf,
  24032. +                            zp->z_format,
  24033. +                            rp->r_abbrvar);
  24034. +                        startisdst =
  24035. +                            rp->r_stdoff != 0;
  24036. +                        continue;
  24037. +                    }
  24038. +                    if (ktime != starttime &&
  24039. +                        startisdst >= 0)
  24040. +addtt(starttime, addtype(startoff, startbuf, startisdst, startttisstd));
  24041. +                    usestart = FALSE;
  24042. +                }
  24043. +                eats(zp->z_filename, zp->z_linenum,
  24044. +                    rp->r_filename, rp->r_linenum);
  24045. +                (void) sprintf(buf, zp->z_format,
  24046. +                    rp->r_abbrvar);
  24047. +                offset = oadd(zp->z_gmtoff, rp->r_stdoff);
  24048. +                type = addtype(offset, buf, rp->r_stdoff != 0,
  24049. +                    rp->r_todisstd);
  24050. +                if (timecnt != 0 || rp->r_stdoff != 0)
  24051. +                    addtt(ktime, type);
  24052. +                gmtoff = zp->z_gmtoff;
  24053. +                stdoff = rp->r_stdoff;
  24054. +            }
  24055. +        }
  24056. +        /*
  24057. +        ** Now we may get to set starttime for the next zone line.
  24058. +        */
  24059. +        if (useuntil) {
  24060. +            starttime = tadd(zp->z_untiltime,
  24061. +                -gmtoffs[types[timecnt - 1]]);
  24062. +            startttisstd = zp->z_untilrule.r_todisstd;
  24063. +        }
  24064. +    }
  24065. +    writezone(zpfirst->z_name);
  24066. +}
  24067. +
  24068. +static void
  24069. +addtt(starttime, type)
  24070. +const time_t    starttime;
  24071. +const int    type;
  24072. +{
  24073. +    if (timecnt != 0 && type == types[timecnt - 1])
  24074. +        return;    /* easy enough! */
  24075. +    if (timecnt >= TZ_MAX_TIMES) {
  24076. +        error("too many transitions?!");
  24077. +        (void) exit(EXIT_FAILURE);
  24078. +    }
  24079. +    ats[timecnt] = starttime;
  24080. +    types[timecnt] = type;
  24081. +    ++timecnt;
  24082. +}
  24083. +
  24084. +static int
  24085. +addtype(gmtoff, abbr, isdst, ttisstd)
  24086. +const long        gmtoff;
  24087. +const char * const    abbr;
  24088. +const int        isdst;
  24089. +const int        ttisstd;
  24090. +{
  24091. +    register int    i, j;
  24092. +
  24093. +    /*
  24094. +    ** See if there's already an entry for this zone type.
  24095. +    ** If so, just return its index.
  24096. +    */
  24097. +    for (i = 0; i < typecnt; ++i) {
  24098. +        if (gmtoff == gmtoffs[i] && isdst == isdsts[i] &&
  24099. +            strcmp(abbr, &chars[abbrinds[i]]) == 0 &&
  24100. +            ttisstd == ttisstds[i])
  24101. +                return i;
  24102. +    }
  24103. +    /*
  24104. +    ** There isn't one; add a new one, unless there are already too
  24105. +    ** many.
  24106. +    */
  24107. +    if (typecnt >= TZ_MAX_TYPES) {
  24108. +        error("too many local time types");
  24109. +        (void) exit(EXIT_FAILURE);
  24110. +    }
  24111. +    gmtoffs[i] = gmtoff;
  24112. +    isdsts[i] = isdst;
  24113. +    ttisstds[i] = ttisstd;
  24114. +
  24115. +    for (j = 0; j < charcnt; ++j)
  24116. +        if (strcmp(&chars[j], abbr) == 0)
  24117. +            break;
  24118. +    if (j == charcnt)
  24119. +        newabbr(abbr);
  24120. +    abbrinds[i] = j;
  24121. +    ++typecnt;
  24122. +    return i;
  24123. +}
  24124. +
  24125. +static void
  24126. +addleap(t, positive, rolling)
  24127. +const time_t    t;
  24128. +const int    positive;
  24129. +const int    rolling;
  24130. +{
  24131. +    register int    i, j;
  24132. +
  24133. +    if (leapcnt >= TZ_MAX_LEAPS) {
  24134. +        error("too many leap seconds");
  24135. +        (void) exit(EXIT_FAILURE);
  24136. +    }
  24137. +    for (i = 0; i < leapcnt; ++i)
  24138. +        if (t <= trans[i]) {
  24139. +            if (t == trans[i]) {
  24140. +                error("repeated leap second moment");
  24141. +                (void) exit(EXIT_FAILURE);
  24142. +            }
  24143. +            break;
  24144. +        }
  24145. +    for (j = leapcnt; j > i; --j) {
  24146. +        trans[j] = trans[j-1];
  24147. +        corr[j] = corr[j-1];
  24148. +        roll[j] = roll[j-1];
  24149. +    }
  24150. +    trans[i] = t;
  24151. +    corr[i] = (positive ? 1L : -1L);
  24152. +    roll[i] = rolling;
  24153. +    ++leapcnt;
  24154. +}
  24155. +
  24156. +static void
  24157. +adjleap()
  24158. +{
  24159. +    register int    i;
  24160. +    register long    last = 0;
  24161. +
  24162. +    /*
  24163. +    ** propagate leap seconds forward
  24164. +    */
  24165. +    for (i = 0; i < leapcnt; ++i) {
  24166. +        trans[i] = tadd(trans[i], last);
  24167. +        last = corr[i] += last;
  24168. +    }
  24169. +}
  24170. +
  24171. +static int
  24172. +yearistype(year, type)
  24173. +const int        year;
  24174. +const char * const    type;
  24175. +{
  24176. +    char    buf[BUFSIZ];
  24177. +    int    result;
  24178. +
  24179. +    if (type == NULL || *type == '\0')
  24180. +        return TRUE;
  24181. +    if (strcmp(type, "uspres") == 0)
  24182. +        return (year % 4) == 0;
  24183. +    if (strcmp(type, "nonpres") == 0)
  24184. +        return (year % 4) != 0;
  24185. +    (void) sprintf(buf, "yearistype %d %s", year, type);
  24186. +    result = system(buf);
  24187. +    if (result == 0)
  24188. +        return TRUE;
  24189. +    if (result == (1 << 8))
  24190. +        return FALSE;
  24191. +    error("Wild result from command execution");
  24192. +    (void) fprintf(stderr, "%s: command was '%s', result was %d\n",
  24193. +        progname, buf, result);
  24194. +    for ( ; ; )
  24195. +        (void) exit(EXIT_FAILURE);
  24196. +}
  24197. +
  24198. +static int
  24199. +lowerit(a)
  24200. +const int    a;
  24201. +{
  24202. +    return (isascii(a) && isupper(a)) ? tolower(a) : a;
  24203. +}
  24204. +
  24205. +static int
  24206. +ciequal(ap, bp)        /* case-insensitive equality */
  24207. +register const char *    ap;
  24208. +register const char *    bp;
  24209. +{
  24210. +    while (lowerit(*ap) == lowerit(*bp++))
  24211. +        if (*ap++ == '\0')
  24212. +            return TRUE;
  24213. +    return FALSE;
  24214. +}
  24215. +
  24216. +static int
  24217. +itsabbr(abbr, word)
  24218. +register const char *    abbr;
  24219. +register const char *    word;
  24220. +{
  24221. +    if (lowerit(*abbr) != lowerit(*word))
  24222. +        return FALSE;
  24223. +    ++word;
  24224. +    while (*++abbr != '\0')
  24225. +        do if (*word == '\0')
  24226. +            return FALSE;
  24227. +                while (lowerit(*word++) != lowerit(*abbr));
  24228. +    return TRUE;
  24229. +}
  24230. +
  24231. +static const struct lookup *
  24232. +byword(word, table)
  24233. +register const char * const        word;
  24234. +register const struct lookup * const    table;
  24235. +{
  24236. +    register const struct lookup *    foundlp;
  24237. +    register const struct lookup *    lp;
  24238. +
  24239. +    if (word == NULL || table == NULL)
  24240. +        return NULL;
  24241. +    /*
  24242. +    ** Look for exact match.
  24243. +    */
  24244. +    for (lp = table; lp->l_word != NULL; ++lp)
  24245. +        if (ciequal(word, lp->l_word))
  24246. +            return lp;
  24247. +    /*
  24248. +    ** Look for inexact match.
  24249. +    */
  24250. +    foundlp = NULL;
  24251. +    for (lp = table; lp->l_word != NULL; ++lp)
  24252. +        if (itsabbr(word, lp->l_word))
  24253. +            if (foundlp == NULL)
  24254. +                foundlp = lp;
  24255. +            else    return NULL;    /* multiple inexact matches */
  24256. +    return foundlp;
  24257. +}
  24258. +
  24259. +static char **
  24260. +getfields(cp)
  24261. +register char *    cp;
  24262. +{
  24263. +    register char *        dp;
  24264. +    register char **    array;
  24265. +    register int        nsubs;
  24266. +
  24267. +    if (cp == NULL)
  24268. +        return NULL;
  24269. +    array = (char **) emalloc((int) ((strlen(cp) + 1) * sizeof *array));
  24270. +    nsubs = 0;
  24271. +    for ( ; ; ) {
  24272. +        while (isascii(*cp) && isspace(*cp))
  24273. +            ++cp;
  24274. +        if (*cp == '\0' || *cp == '#')
  24275. +            break;
  24276. +        array[nsubs++] = dp = cp;
  24277. +        do {
  24278. +            if ((*dp = *cp++) != '"')
  24279. +                ++dp;
  24280. +            else while ((*dp = *cp++) != '"')
  24281. +                if (*dp != '\0')
  24282. +                    ++dp;
  24283. +                else    error("Odd number of quotation marks");
  24284. +        } while (*cp != '\0' && *cp != '#' &&
  24285. +            (!isascii(*cp) || !isspace(*cp)));
  24286. +        if (isascii(*cp) && isspace(*cp))
  24287. +            ++cp;
  24288. +        *dp = '\0';
  24289. +    }
  24290. +    array[nsubs] = NULL;
  24291. +    return array;
  24292. +}
  24293. +
  24294. +static long
  24295. +oadd(t1, t2)
  24296. +const long    t1;
  24297. +const long    t2;
  24298. +{
  24299. +    register long    t;
  24300. +
  24301. +    t = t1 + t2;
  24302. +    if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) {
  24303. +        error("time overflow");
  24304. +        (void) exit(EXIT_FAILURE);
  24305. +    }
  24306. +    return t;
  24307. +}
  24308. +
  24309. +static time_t
  24310. +tadd(t1, t2)
  24311. +const time_t    t1;
  24312. +const long    t2;
  24313. +{
  24314. +    register time_t    t;
  24315. +
  24316. +    if (t1 == max_time && t2 > 0)
  24317. +        return max_time;
  24318. +    if (t1 == min_time && t2 < 0)
  24319. +        return min_time;
  24320. +    t = t1 + t2;
  24321. +    if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) {
  24322. +        error("time overflow");
  24323. +        (void) exit(EXIT_FAILURE);
  24324. +    }
  24325. +    return t;
  24326. +}
  24327. +
  24328. +/*
  24329. +** Given a rule, and a year, compute the date - in seconds since January 1,
  24330. +** 1970, 00:00 LOCAL time - in that year that the rule refers to.
  24331. +*/
  24332. +
  24333. +static time_t
  24334. +rpytime(rp, wantedy)
  24335. +register const struct rule * const    rp;
  24336. +register const int            wantedy;
  24337. +{
  24338. +    register int    y, m, i;
  24339. +    register long    dayoff;            /* with a nod to Margaret O. */
  24340. +    register time_t    t;
  24341. +
  24342. +    dayoff = 0;
  24343. +    m = TM_JANUARY;
  24344. +    y = EPOCH_YEAR;
  24345. +    while (wantedy != y) {
  24346. +        if (wantedy > y) {
  24347. +            i = len_years[isleap(y)];
  24348. +            ++y;
  24349. +        } else {
  24350. +            --y;
  24351. +            i = -len_years[isleap(y)];
  24352. +        }
  24353. +        dayoff = oadd(dayoff, eitol(i));
  24354. +    }
  24355. +    while (m != rp->r_month) {
  24356. +        i = len_months[isleap(y)][m];
  24357. +        dayoff = oadd(dayoff, eitol(i));
  24358. +        ++m;
  24359. +    }
  24360. +    i = rp->r_dayofmonth;
  24361. +    if (m == TM_FEBRUARY && i == 29 && !isleap(y)) {
  24362. +        if (rp->r_dycode == DC_DOWLEQ)
  24363. +            --i;
  24364. +        else {
  24365. +            error("use of 2/29 in non leap-year");
  24366. +            (void) exit(EXIT_FAILURE);
  24367. +        }
  24368. +    }
  24369. +    --i;
  24370. +    dayoff = oadd(dayoff, eitol(i));
  24371. +    if (rp->r_dycode == DC_DOWGEQ || rp->r_dycode == DC_DOWLEQ) {
  24372. +        register long    wday;
  24373. +
  24374. +#define LDAYSPERWEEK    ((long) DAYSPERWEEK)
  24375. +        wday = eitol(EPOCH_WDAY);
  24376. +        /*
  24377. +        ** Don't trust mod of negative numbers.
  24378. +        */
  24379. +        if (dayoff >= 0)
  24380. +            wday = (wday + dayoff) % LDAYSPERWEEK;
  24381. +        else {
  24382. +            wday -= ((-dayoff) % LDAYSPERWEEK);
  24383. +            if (wday < 0)
  24384. +                wday += LDAYSPERWEEK;
  24385. +        }
  24386. +        while (wday != eitol(rp->r_wday))
  24387. +            if (rp->r_dycode == DC_DOWGEQ) {
  24388. +                dayoff = oadd(dayoff, (long) 1);
  24389. +                if (++wday >= LDAYSPERWEEK)
  24390. +                    wday = 0;
  24391. +                ++i;
  24392. +            } else {
  24393. +                dayoff = oadd(dayoff, (long) -1);
  24394. +                if (--wday < 0)
  24395. +                    wday = LDAYSPERWEEK;
  24396. +                --i;
  24397. +            }
  24398. +        if (i < 0 || i >= len_months[isleap(y)][m]) {
  24399. +            error("no day in month matches rule");
  24400. +            (void) exit(EXIT_FAILURE);
  24401. +        }
  24402. +    }
  24403. +    if (dayoff < 0 && !tt_signed) {
  24404. +        if (wantedy == rp->r_loyear)
  24405. +            return min_time;
  24406. +        error("time before zero");
  24407. +        (void) exit(EXIT_FAILURE);
  24408. +    }
  24409. +    t = (time_t) dayoff * SECSPERDAY;
  24410. +    /*
  24411. +    ** Cheap overflow check.
  24412. +    */
  24413. +    if (t / SECSPERDAY != dayoff) {
  24414. +        if (wantedy == rp->r_hiyear)
  24415. +            return max_time;
  24416. +        if (wantedy == rp->r_loyear)
  24417. +            return min_time;
  24418. +        error("time overflow");
  24419. +        (void) exit(EXIT_FAILURE);
  24420. +    }
  24421. +    return tadd(t, rp->r_tod);
  24422. +}
  24423. +
  24424. +static void
  24425. +newabbr(string)
  24426. +const char * const    string;
  24427. +{
  24428. +    register int    i;
  24429. +
  24430. +    i = strlen(string) + 1;
  24431. +    if (charcnt + i >= TZ_MAX_CHARS) {
  24432. +        error("too many, or too long, time zone abbreviations");
  24433. +        (void) exit(EXIT_FAILURE);
  24434. +    }
  24435. +    (void) strcpy(&chars[charcnt], string);
  24436. +    charcnt += eitol(i);
  24437. +}
  24438. +
  24439. +static int
  24440. +mkdirs(name)
  24441. +char * const    name;
  24442. +{
  24443. +    register char *    cp;
  24444. +
  24445. +    if ((cp = name) == NULL || *cp == '\0')
  24446. +        return 0;
  24447. +    while ((cp = strchr(cp + 1, '/')) != 0) {
  24448. +        *cp = '\0';
  24449. +        if (!itsdir(name)) {
  24450. +            /*
  24451. +            ** It doesn't seem to exist, so we try to create it.
  24452. +            */
  24453. +            if (mkdir(name, 0755) != 0) {
  24454. +                (void) fprintf(stderr,
  24455. +                    "%s: Can't create directory ",
  24456. +                    progname);
  24457. +                (void) perror(name);
  24458. +                return -1;
  24459. +            }
  24460. +        }
  24461. +        *cp = '/';
  24462. +    }
  24463. +    return 0;
  24464. +}
  24465. +
  24466. +static long
  24467. +eitol(i)
  24468. +const int    i;
  24469. +{
  24470. +    long    l;
  24471. +
  24472. +    l = i;
  24473. +    if (i < 0 && l >= 0 || i == 0 && l != 0 || i > 0 && l <= 0) {
  24474. +        (void) fprintf(stderr, "%s: %d did not sign extend correctly\n",
  24475. +            progname, i);
  24476. +        (void) exit(EXIT_FAILURE);
  24477. +    }
  24478. +    return l;
  24479. +}
  24480. +
  24481. +/*
  24482. +** UNIX is a registered trademark of AT&T.
  24483. +*/
  24484. diff -rup --new-file baseline/fsf/emacs18/amiga/unix/unix.doc amiga/fsf/emacs18/amiga/unix/unix.doc
  24485. --- baseline/fsf/emacs18/amiga/unix/unix.doc    Wed Dec 31 17:00:00 1969
  24486. +++ amiga/fsf/emacs18/amiga/unix/unix.doc    Sat Sep 28 00:00:00 1996
  24487. @@ -0,0 +1,452 @@
  24488. +Unix compatibility library for SAS C 6.x version 1.2
  24489. +----------------------------------------------------
  24490. +
  24491. +Introduction
  24492. +------------
  24493. +
  24494. +This library provides 80 odd functions which are useful for porting
  24495. +Unix programs to the Amiga running AmigaOS 2.04 or higher. It is thus
  24496. +similar to Markus Wild's ixemul.library, but has more restricted aims:
  24497. +
  24498. +a) It is written specifically for SAS C 6.1, 6.2, ...
  24499. +
  24500. +b) It isn't a complete C library, it requires the SAS C library to function.
  24501. +It adds some routines, and replaces others that were deficient, out of date,
  24502. +or that didn't provide adequate functionality.
  24503. +
  24504. +c) It isn't a complete Unix emulation library, it only contains those functions
  24505. +that I needed while porting various utilities (mainly from GNU) to the Amiga.
  24506. +
  24507. +d) It is a traditional C link library, not an Amiga library. This produces 
  24508. +bigger executables.
  24509. +
  24510. +Considering the above points, you might ask why I wrote it ... There are several
  24511. +good answers:
  24512. +
  24513. +a) I started it before I was aware of ixemul.library.
  24514. +
  24515. +b) ixemul.library didn't provide the features I needed for Emacs (support for
  24516. +select).
  24517. +
  24518. +c) It is easier for me to maintain when I find I need to support another Unix
  24519. +feature (eg deleting open files).
  24520. +
  24521. +Copying
  24522. +-------
  24523. +
  24524. +The library includes code that I have written, which I place in the public domain.
  24525. +This is found in all the files that don't have a Copyright notice.
  24526. +
  24527. +It also includes code which is (inclusive of my modifications)
  24528. +
  24529. + Copyright (c) 1982, 1986, 1991 The Regents of the University of California.
  24530. + All rights reserved.
  24531. +
  24532. +This code is freely redistributable (see the copyright notices in the source
  24533. +and include files).
  24534. +
  24535. +Finally it includes Doug Gwyn's public domain alloca implementation.
  24536. +
  24537. +Installation & Use
  24538. +------------------
  24539. +
  24540. +To use this library, you must compile with the include directory in your include
  24541. +search path, and link with the unix.lib library (which must be specified before
  24542. +lc.lib). For example, if you extract this archive in a directory called src:, you
  24543. +could compile the following program:
  24544. +
  24545. +echo.c:
  24546. +
  24547. +#include <sys/unistd.h>
  24548. +
  24549. +void main(int argc, char **argv)
  24550. +{
  24551. +  int i;
  24552. +
  24553. +  for (i = 1; i < argc; i++)
  24554. +    {
  24555. +      if (i != 1) write(1, " ", 1);
  24556. +      write(1, argv[i], strlen(argv[i]));
  24557. +    }
  24558. +  write(1, "\n", 1);
  24559. +}
  24560. +
  24561. +with the command
  24562. +
  24563. +  sc idir src:unix/include/ lib src:unix/src/unix.lib link echo.c
  24564. +
  24565. +to produce a simple unix-like echo command.
  24566. +
  24567. +You should define the following environment variables:
  24568. +
  24569. +USER - A user name for the sole Amiga user (default "user").
  24570. +USERNAME - The full name of the sole Amiga user (default $USER).
  24571. +HOME - A "home" directory (default "s:") for programs that want one. Configuration
  24572. +       files will probably end up here ...
  24573. +SHELL - A program which behaves reasonably like a Unix shell (default "bin:sh").
  24574. +    You should copy the sh executable there if you don't have a Unix-like shell.
  24575. +HOSTNAME - The name of your machine (default "amiga").
  24576. +
  24577. +If you are going to be using pipes, you will require Matt Dillon's fifo.library
  24578. +and fifo: device. This can be found on the Fish disks, with his UUCP distribution
  24579. +and on many FTP sites.
  24580. +
  24581. +If you want to install the timezone information (see the discussion below on
  24582. +Unix vs Amiga time), do the following:
  24583. +
  24584. +  a) change to the zoneinfo directory
  24585. +  b) compile the zic problem by running lmk.
  24586. +  c) change to the datfiles directory.
  24587. +  d) edit lmkfile and choose your timezone (you can look at the data files
  24588. +     to see the ones available). If you get this wrong, you can always change
  24589. +     it later with the zic program.
  24590. +  e) type 'lmk install'. This will compile the timezones, and setup the one
  24591. +     you chose as the default. The default can be changed with
  24592. +       zic -l <timezone name>
  24593. +
  24594. +     or by defining the environment variable TZ.
  24595. +
  24596. +Functionality
  24597. +-------------
  24598. +
  24599. +While this library aims to hide the differences between AmigaOS & Unix, 
  24600. +it also aims to provide support for Amiga specific features. This sometimes
  24601. +produces strange compromises.
  24602. +
  24603. +This library provides two things to programs linked with it:
  24604. +
  24605. +a) A Unix-like environment:
  24606. +
  24607. +This includes:
  24608. +
  24609. +- Unix-like command line parsing, with wildcard expansion. These
  24610. +wildcards are however specified with the Amiga syntax. 
  24611. +
  24612. +Arguments which are unquoted or surround with single quotes are
  24613. +handled like Unix shells. Those surrounded with double quotes are
  24614. +handled in the Amiga fashion, but with wildcard expansion (this is
  24615. +done to avoid problems with the way the exec function works).
  24616. +
  24617. +Here is a summary of argument splitting:
  24618. +
  24619. +Arguments can be enclosed in single quotes, (') double quotes ("), or 
  24620. +separated by spaces.
  24621. +
  24622. +Arguments enclosed by single quotes never suffer wildcard expansion, and
  24623. +no character is significant inside them (not even \). Given the echo program
  24624. +given above,
  24625. +
  24626. +  echo 'f*un\'
  24627. +
  24628. +simply displays
  24629. +
  24630. +  f*un\
  24631. +
  24632. +Within double quotes, * is the standard Amiga escape character. \ is
  24633. +handled just like any other character. Wildcards are expanded. So,
  24634. +assuming the current directory contains only echo.c and echo,
  24635. +
  24636. +  echo "#?.c" "*.c" "\mad"
  24637. +
  24638. +displays
  24639. +
  24640. +  echo.c .c \mad
  24641. +
  24642. +(* escapes the following character, except that *N is newline and *E is 
  24643. +escape. Wildcard characters still behave as usual (' is the standard
  24644. +Amiga wildcard escape character)).
  24645. +
  24646. +If an argument is unquoted, \ acts as an escape character (removing
  24647. +special significance from the next character, be it a wildcard, a space, 
  24648. +a \, ...). So
  24649. +
  24650. +  echo \*.c \\ \n
  24651. +
  24652. +displays
  24653. +
  24654. +  *.c \ n
  24655. +
  24656. +- When a program is run from the Workbench, stdin, stdout & stderr are opened 
  24657. +on NIL:, and the icons selected are converted to file names and passed as the
  24658. +argc,argv to main.
  24659. +
  24660. +- The standard variable environ is defined and contains all the local environment
  24661. +variables. This is passed as the envp parameter to main.
  24662. +
  24663. +- The program is led to believe that all files belong to $USER (uid 1), group
  24664. +wheel (gid 0).
  24665. +
  24666. +- Amiga protection flags are mapped onto the standard 12 Unix protection bits
  24667. +(and back when necessary). This can be overridden (dynamically) by changing the
  24668. +value of use_amiga_flags. Eg:
  24669. +
  24670. +  extern int use_amiga_flags;
  24671. +
  24672. +  ...
  24673. +
  24674. +
  24675. +  main()
  24676. +  {
  24677. +    use_amiga_flags = 1;
  24678. +
  24679. +    ... some code using stat or chmod or ...
  24680. +  }
  24681. +
  24682. +In this case, the Amiga protection bits are left untouched. Otherwise the
  24683. +mapping is as follows (note that the archive bit is lost):
  24684. +
  24685. +Unix -> Amiga
  24686. +
  24687. +Amiga read: if user, group or world read.
  24688. +Amiga write: if user or group write.
  24689. +Amiga delete: if user or world write.
  24690. +Amiga execute: if group execute or only user execute.
  24691. +Amiga script: if world execute or only user execute.
  24692. +Amiga pure: if sticky.
  24693. +
  24694. +Amiga -> Unix
  24695. +
  24696. +user, group, world read: if amiga read.
  24697. +user write: if amiga write and delete.
  24698. +group write: if amiga write.
  24699. +world write: if amiga delete.
  24700. +user execute: if amiga execute or amiga script.
  24701. +group execute: if amiga execute.
  24702. +world execute: if amiga script.
  24703. +sticky: if amiga pure.
  24704. +
  24705. +- Unix-like time. time is expressed in seconds since 1-Jan-1970 00:00 GMT. 
  24706. +This is the format used by the time(), stat() and utime() functions. The
  24707. +library uses the BSD time functions which properly handle timezones, 
  24708. +daylight savings time, etc. 
  24709. +
  24710. +On Unix systems, time is generally stored as GMT, while the Amiga stores
  24711. +local time. These times are visible in two places: the time stored in the
  24712. +system clock and the creation, modification or access dates for files (only
  24713. +the modification date is available on the Amiga). There are 3 ways to resolve
  24714. +this conflict:
  24715. +
  24716. +1) Ignore timezones (you can choose this option by not installing the
  24717. +timezone information). The library will then assume that system time
  24718. +and file times are expressed in GMT and will never apply any
  24719. +corrections. All will work well (except maybe on a global network).
  24720. +This is the simplest solution.
  24721. +
  24722. +2) System & file time are assumed to be local times. The time() & stat()
  24723. +functions convert local time to GMT, the utime() call converts GMT to
  24724. +local time. This allows you to keep the system clock on local time, which
  24725. +is compatible with most (all?) Amiga applications. However, nearly every
  24726. +program will be bigger because they will need the timezone information and
  24727. +timezone conversion code (approximately 7k). The library can be recompiled
  24728. +if you prefer to have things this way by adding -dUSE_LOCAL to the CFLAGS
  24729. +variable in lmkfile.
  24730. +
  24731. +3) System & file time are stored in GMT. Times are converted to local time
  24732. +only when they are displayed to the user, who must of course choose the 
  24733. +correct timezone. This entails changing your system clock to GMT, which means
  24734. +that most programs will display an incorrect time. However, you won't have
  24735. +to change your system clock when daylight savings time ends ... The library
  24736. +comes compiled this way (But you can still choose option 1, no timezone
  24737. +information, and avoid the potential confusion).
  24738. +
  24739. +- BSD-like signals. Signal handlers stay enabled after a signal occurs
  24740. +(that particular signal is simply masked for the duration of the handler).
  24741. +setjmp & longjmp preserve the signal mask (the functions _setjmp & _longjmp
  24742. +don't). You may receive any signal with kill(getpid(), sig). Otherwise only
  24743. +the following occur:
  24744. +
  24745. +  SIGINT: user typed ctrl-c
  24746. +  SIGQUIT: user typed ctrl-d
  24747. +  SIGALRM: alarm() expired
  24748. +  SIGCHLD: a child process died
  24749. +
  24750. +When using kill to signal another process, only SIGHUP, SIGINT, SIGQUIT & 
  24751. +SIGKILL do anything. They all send SIGBREAKF_CTRL_C | D to the process (and
  24752. +hopefully its children). See the discussion under the exec function.
  24753. +
  24754. +
  24755. +b) A large number of unix C library calls:
  24756. +
  24757. +_exit, _setjmp, _longjmp, abort, access, alloca, gettimeofday, ftime, 
  24758. +bcmp, bcopy, bzero, chmod, chown, fchown, close, creat, tzset, tzsetwall,
  24759. +localtime, gmtime, asctime, ctime, mktime, opendir, closedir, readdir, 
  24760. +telldir, seekdir, fchmod, fcntl, fstat, ftruncate, getenv, gethostname,
  24761. +getpid, getwd, getgid, getegid, getgrgid, getgrnam, index, ioctl, isatty,
  24762. +kill, link, lseek, mkdir, mkfifo, mknod, mktemp, open, perror, pipe, sktpair, 
  24763. +getpwuid, getpwnam, getlogin, read, rename, rindex, rmdir, select, setjmp, 
  24764. +longjmp, signal, sigpause, sigsetmask, sleep, stat, strftime, time, truncate,
  24765. +getuid, geteuid, umask, unlink, utime, wait, waitpid, wait3, wait4, write,
  24766. +readlink, symlink, popen, pclose.
  24767. +
  24768. +These functions aim to be BSD compatible, however I based myself on descriptions
  24769. +in the SunOS 4 man pages. Their behaviour is sometimes strange or incomplete.
  24770. +
  24771. +Here is a summary of the differences with the standard Unix functions:
  24772. +
  24773. +alloca - This is Doug Gwyn's portable alloca. Memory allocated is freed
  24774. +later than with a true alloca.
  24775. +
  24776. +gettimeofday - The dst field of the timezone is a (not very good) guess. It
  24777. +shouldn't be used anyway.
  24778. +
  24779. +chown, fchown - These are do-nothing routines.
  24780. +
  24781. +opendir, closedir, ... - These interact with stat to avoid having to read
  24782. +each directory entry twice when doing a readdir + stat loop.
  24783. +
  24784. +fchmod - The protection is only set when the file is closed. See also the
  24785. +discussion of protection modes above.
  24786. +
  24787. +fcntl - Only the F_GETFL & F_SETFL operations are supported.
  24788. +
  24789. +truncate, ftruncate - These will not necessarily work with all filing systems.
  24790. +See the discussion of the AmigaOS SetFileSize function.
  24791. +
  24792. +getenv - This checks local environment variables and then global ones. It 
  24793. +allocates memory for the variables value each time. This memory is never freed
  24794. +(till the program exits).
  24795. +
  24796. +gethostname - This is obtained from the HOSTNAME environment variable at startup.
  24797. +
  24798. +getuid, geteuid, getgid, getegid, getpwuid, getpwnam, getgrgid, getgrnam, getlogin -
  24799. +These function only know about one user. He/She is:
  24800. +
  24801. +  name: $USER (default "user")
  24802. +  home directory: $HOME (default "s:")
  24803. +  shell: $SHELL (default "bin:sh")
  24804. +  uid: 1, gid: 0
  24805. +
  24806. +ioctl - Only FIONBIO & TIOCGWINSZ are known, plus a number of amiga specific
  24807. +ioctls (for internal use). These are documented in include/amiga/ioctl.h.
  24808. +
  24809. +lseek - Seeks beyond the end of a file are not implemented.
  24810. +
  24811. +mkfifo, mknod - These are 'do-nothing' routines.
  24812. +
  24813. +pipe - This uses Matt Dillon's fifo.library and fifo: device. It works well
  24814. +for interactive use, but not for transfering large quantities of data.
  24815. +
  24816. +select - This implementation only works with pipes & sktpairs, and cannot
  24817. +detect 'exceptional' conditions.
  24818. +
  24819. +sigvec - The flags are not recognized.
  24820. +
  24821. +symlink - Symbolic links on the Amiga are far too buggy and should not be used.
  24822. +By default, as compiled, this routine always returns an error. However readlink
  24823. +does work, so you can read existing symbolic links.
  24824. +
  24825. +umask - This is a 'do-nothing' routine.
  24826. +
  24827. +unlink - You can unlink a file that your program has opened before you close
  24828. +it. At that point, the AmigaOS file is closed & deleted, though it still
  24829. +appears open to read (it returns EOF), write, close, etc. Also you can unlink
  24830. +a file even if it is protected from deletion (the protection mode is changed
  24831. +first ...).
  24832. +
  24833. +utime - Only the modification time can be changed (the others don't exist).
  24834. +
  24835. +wait3, wait4 - Resource usage is never returned.
  24836. +
  24837. +exec
  24838. +----
  24839. +
  24840. +vfork() and execxx() are very tricky to implement. So I took the easy
  24841. +(but see below) way out, providing a function, eexec, that create a
  24842. +new process given argc, argv.  This functions returns a pid which can
  24843. +be used with wait, waitpid, ... as usual. Also exiting processes
  24844. +generate the SIGCHLD signal. With this, it is generally fairly easy to
  24845. +replace the process creation parts of most Unix programs.
  24846. +
  24847. +First, here is a description of the problems which arise:
  24848. +
  24849. +Executing an external program is tricky with AmigaOS. The various system
  24850. +routines (CreateNewProc, SystemTags, Execute) allow some operations to be
  24851. +done easily, but make others difficult. Specifically, if you want to do all
  24852. +of the following:
  24853. +
  24854. +- Execute a program given argc, argv (like with unix)
  24855. +- Specify arbitrary input, output and error streams, including inheriting
  24856. +the current ones.
  24857. +- Have some of these streams be pipes of which you keep one end.
  24858. +- Have some of these pipes appear to be interactive (this is used for example
  24859. +by programs running inside emacs).
  24860. +- Detect when the execute program exits, and get its return code.
  24861. +- Send signals (eg ctrl-c) to the created process, and preferably its children.
  24862. +
  24863. +you are in deep trouble. A minimum of 10 attempts is needed to get
  24864. +something which works most of the time, ie the eexec function.
  24865. +
  24866. +The problems are:
  24867. +- You have to make a command line from argc, argv. But these arguments may
  24868. +contain spaces, so they must be surrounded by double quotes. And then, '*'
  24869. +must be escaped as it is the escape character. And so on.
  24870. +- Only recently has an error stream appeared in AmigaOS. And it doesn't
  24871. +inherit very well (Indeed, specifying the error stream doesn't work in the
  24872. +current version).
  24873. +- Amiga programs generally expect interactive files to be console windows.
  24874. +And fifo: is the only interactive pipe I'm aware of. So the pipe: system
  24875. +call uses fifo: and fifo.library.
  24876. +- To get the return code of an application, you must use the synchronous
  24877. +version of SystemTags. Otherwise it is lost. But you want an asynchronous
  24878. +process facility. So I create 2 processes, the first one is created with
  24879. +CreateNewProc and executes a custom piece of code. This code launches
  24880. +the real program with SystemTags, and sends a message with the return code
  24881. +to its parent (if it is still around).
  24882. +- You can't find the children of a process. So the signal is sent to all
  24883. +the processes that share the input filehandle of the created process. This
  24884. +is the best solution that I found.
  24885. +- AmigaOS isn't Unix.
  24886. +
  24887. +Therefore, the eexec function is far from perfect. It works as follows:
  24888. +
  24889. +eexec(program, argv, input, output, error, directory, stacksize)
  24890. +
  24891. +  program: the path of the executable file. Your path is searched.
  24892. +  argv: A null terminated array of arguments. The first (argv[0]) is ignored.
  24893. +  input: A unix filehandle on the desired input. -1 means copy Input().
  24894. +  output: A unix filehandle on the desired output. -1 means copy Output().
  24895. +  error: A unix filehandle on the desired error stream. -1 means copy the pr_CES
  24896. +     field of the current process, -2 means copy the value specified for output.
  24897. +         Currently, this parameter has no effect.
  24898. +  directory: pathname for the current directory for the created process, or NULL
  24899. +         to inheir the current processes'.
  24900. +  stacksize: stack size for the created process. 0 means the same size as the 
  24901. +         current stack.
  24902. +  
  24903. +_start_process is a lower level interface:
  24904. +
  24905. +_start_process(command, input, close_input, output, close_output,
  24906. +           error, close_error, dir, stacksize)
  24907. +  command: the string to pass to SystemTags (it will be passed to
  24908. +    the UserShell, not the system default).
  24909. +  input, output, error, close_xxx: AmigaOS filehandles for use as the
  24910. +    appropriate stream. If close_x is true, the corresponding stream will be
  24911. +    closed when the process exits.
  24912. +  dir: Lock on the desired directory for the new process.
  24913. +  stacksize: as above.
  24914. +
  24915. +
  24916. +Recompiling
  24917. +-----------
  24918. +
  24919. +To recompile, simply run lmk in the src directory. You can add the -dUSE_LOCAL
  24920. +flag to CFLAGS in lmkfile if you want the system clock to store local time 
  24921. +instead of GMT.
  24922. +
  24923. +If you want symlink to work, add -dSOFTLINK to CFLAGS (For example, tar uses
  24924. +a version of unix.lib compiled like this).
  24925. +
  24926. +If you add modules, you can use the mkmkf to remake the makefile dependencies
  24927. +(it generates lmkfile from lmkfile.base and the dependencies for all the .c
  24928. +files in the current directory). This program requires perl (available from
  24929. +ftp sites).
  24930. +
  24931. +
  24932. +Changes from 1.0 to 1.1
  24933. +-----------------------
  24934. +stat() now returns a value for st_dev.
  24935. +exec() extended by eexec, assembly part rewritten in C.
  24936. +symbolic links recognized. Their use is not recommended (too buggy).
  24937. +sigvec added.
  24938. +popen, pclose added.
  24939. +Documentation discusses exec.
  24940. diff -rup --new-file baseline/fsf/emacs18/cpp/SCOPTIONS amiga/fsf/emacs18/cpp/SCOPTIONS
  24941. --- baseline/fsf/emacs18/cpp/SCOPTIONS    Wed Dec 31 17:00:00 1969
  24942. +++ amiga/fsf/emacs18/cpp/SCOPTIONS    Sat Sep 28 00:00:00 1996
  24943. @@ -0,0 +1,7 @@
  24944. +IGNORE=161
  24945. +IGNORE=154
  24946. +IGNORE=100
  24947. +IGNORE=181
  24948. +IGNORE=84
  24949. +IGNORE=93
  24950. +IGNORE=72
  24951. \ No newline at end of file
  24952. diff -rup --new-file baseline/fsf/emacs18/cpp/cccp.c amiga/fsf/emacs18/cpp/cccp.c
  24953. --- baseline/fsf/emacs18/cpp/cccp.c    Fri Sep 28 13:17:57 1990
  24954. +++ amiga/fsf/emacs18/cpp/cccp.c    Sat Sep 28 00:00:00 1996
  24955. @@ -97,7 +97,17 @@ typedef unsigned char U_CHAR;
  24956.  
  24957.  #ifdef EMACS
  24958.  #define NO_SHORTNAMES
  24959. +#ifdef AMIGA
  24960. +#include "/src/config.h"
  24961. +#undef fflush
  24962. +#undef fwrite
  24963. +#undef main
  24964. +#undef putchar
  24965. +#undef AMIGA_DUMP
  24966. +#include <string.h>
  24967. +#else
  24968.  #include "../src/config.h"
  24969. +#endif
  24970.  #ifdef static
  24971.  #undef static
  24972.  #endif
  24973. @@ -115,7 +125,11 @@ typedef unsigned char U_CHAR;
  24974.  #include <ctype.h>
  24975.  #include <stdio.h>
  24976.  #ifndef USG
  24977. +#ifdef AMIGA
  24978. +#include <time.h>
  24979. +#else
  24980.  #include <sys/time.h>        /* for __DATE__ and __TIME__ */
  24981. +#endif
  24982.  #else
  24983.  #define index strchr
  24984.  #define rindex strrchr
  24985. @@ -123,8 +137,10 @@ typedef unsigned char U_CHAR;
  24986.  #include <fcntl.h>
  24987.  #endif /* USG */
  24988.  
  24989. +#ifndef AMIGA
  24990.  void bcopy (), bzero ();
  24991.  int bcmp ();
  24992. +#endif
  24993.  
  24994.  char *xmalloc (), *xrealloc (), *xcalloc ();
  24995.  void fatal (), pfatal_with_name (), perror_with_name ();
  24996. @@ -142,15 +158,29 @@ struct directory_stack
  24997.  /* #include "file" starts with the first entry in the stack */
  24998.  /* #include <file> starts with the second. */
  24999.  /* -I directories are added after the first */
  25000. +#ifdef AMIGA
  25001. +struct directory_stack default_includes[2] =
  25002. +  {
  25003. +    { &default_includes[1], "" },
  25004. +    { 0, "include:" }
  25005. +  };
  25006. +#else
  25007.  struct directory_stack default_includes[2] =
  25008.    {
  25009.      { &default_includes[1], "." },
  25010.      { 0, "/usr/include" }
  25011.    };
  25012. +#endif
  25013. +
  25014.  struct directory_stack *include = &default_includes[0];
  25015.  
  25016. +#ifdef AMIGA
  25017.  int max_include_len = 14;    /* strlen (default_include) + 2
  25018.                              (for / and null) */
  25019. +#else
  25020. +int max_include_len = 9;    /* strlen (default_include) + 1
  25021. +                            (for null) */
  25022. +#endif
  25023.  
  25024.  char STDIN_FILE[] = "";        /* Empty, like real cpp */
  25025.  int put_out_comments = 0;    /* JF non-zero means leave comments in the
  25026. @@ -379,7 +409,6 @@ main (argc, argv)
  25027.      dirtmp->next = include->next;
  25028.      include->next = dirtmp;
  25029.      dirtmp->fname = argv[i]+2;
  25030. -    include = dirtmp;
  25031.      if (strlen (argv[i]) > max_include_len)
  25032.        max_include_len = strlen (argv[i]);
  25033.      break;
  25034. @@ -405,11 +434,11 @@ main (argc, argv)
  25035.    else if ((f = open (in_fname, O_RDONLY)) < 0)
  25036.      goto perror;
  25037.  
  25038. -  fstat (f, &sbuf);
  25039. +  if (f) fstat (f, &sbuf);
  25040.    fp->fname = in_fname;
  25041.    fp->lineno = 1;
  25042.    /* JF all this is mine about reading pipes and ttys */
  25043. -  if ((sbuf.st_mode & S_IFMT) != S_IFREG) {
  25044. +  if (!f || (sbuf.st_mode & S_IFMT) != S_IFREG) {
  25045.      int size;
  25046.      int bsize;
  25047.      int cnt;
  25048. @@ -478,11 +507,11 @@ rescan (ip, op)
  25049.    struct keyword_table *handle_directive ();
  25050.    int excess_newlines = 0;
  25051.    int escaped = 0;
  25052. -  
  25053. +
  25054.    U_CHAR *bp;
  25055. -  
  25056. +
  25057.    check_expand(op, ip->length);
  25058. -  
  25059. +
  25060.    ip->bufp = ip->buf;
  25061.    limit = ip->buf + ip->length;
  25062.    while (1) {
  25063. @@ -615,25 +644,25 @@ rescan (ip, op)
  25064.          *op->bufp++ = '/';
  25065.        ip->bufp = bp + 1;
  25066.        break;
  25067. -      
  25068. +
  25069.      case '0': case '1': case '2': case '3': case '4':
  25070.      case '5': case '6': case '7': case '8': case '9':
  25071.        /* if digit is not part of identifier, it is random */
  25072.        if (ident_length == 0)
  25073.      goto randomchar;
  25074.        /* fall through */
  25075. -      
  25076. +
  25077.      case '_':
  25078.      case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
  25079.      case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
  25080.      case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
  25081.      case 's': case 't': case 'u': case 'v': case 'w': case 'x':
  25082. -    case 'y': case 'z': 
  25083. +    case 'y': case 'z':
  25084.      case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
  25085.      case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
  25086.      case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
  25087.      case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
  25088. -    case 'Y': case 'Z': 
  25089. +    case 'Y': case 'Z':
  25090.        ident_length++;
  25091.        /* compute step of hash function, to avoid a proc call on every token */
  25092.        hash = HASHSTEP(hash, c);
  25093. @@ -646,31 +675,31 @@ randomchar:
  25094.      for (hp = hashtab[MAKE_POS(hash) % HASHSIZE]; hp != NULL;
  25095.           hp = hp->next) {
  25096.            U_CHAR *save_ibufp;    /* kludge, see below */
  25097. -          
  25098. +
  25099.            if (hp->length == ident_length) {
  25100.          register int i = ident_length;
  25101.          register U_CHAR *p = hp->name;
  25102.          register U_CHAR *q = op->bufp - i;
  25103.  
  25104. -        if (c != (U_CHAR) -1)
  25105. +        if (c != -1)
  25106.            q--;
  25107.  
  25108.          do {        /* all this to avoid a strncmp() */
  25109.            if (*p++ != *q++)
  25110.          goto hashcollision;
  25111.          } while (--i);
  25112. -     
  25113. +
  25114.          save_ibufp = ip->bufp;
  25115.          /* back up over identifier, then expand token */
  25116.          op->bufp -= ident_length;
  25117. -        if (c != (U_CHAR) -1) op->bufp--;
  25118. +        if (c != -1) op->bufp--;
  25119.          macroexpand (hp, ip, op, &excess_newlines);
  25120.  
  25121.          check_expand(op, ip->length - (ip->bufp - ip->buf));
  25122. -        
  25123. +
  25124.          /* If we just processed an identifier at end of input,
  25125.             return right away.  */
  25126. -        if (c == (U_CHAR) -1)
  25127. +        if (c == -1)
  25128.            return;
  25129.  
  25130.          /* if the expansion routine has not moved the input
  25131. @@ -679,7 +708,7 @@ randomchar:
  25132.             reason to put it back or not put it back. */
  25133.          if (ip->bufp == save_ibufp)
  25134.            *op->bufp++ = c;
  25135. -        
  25136. +
  25137.          break;        /* out of for loop */
  25138.        }
  25139.  hashcollision:
  25140. @@ -687,7 +716,7 @@ hashcollision:
  25141.      }            /* end for loop */
  25142.      ident_length = hash = 0; /* stop collecting identifier */
  25143.        }
  25144. -        
  25145. +
  25146.        /* If we just processed an identifier at end of input,
  25147.       return right away.  */
  25148.        if (c == -1)
  25149. @@ -746,7 +775,7 @@ handle_directive (ip, op, excess_newline
  25150.    while (is_idchar[*cp])
  25151.      cp++;
  25152.    ident_length = cp - bp;
  25153. -  
  25154. +
  25155.    /*
  25156.     * Decode the keyword and call the appropriate expansion
  25157.     * routine, after moving the input pointer up to the next line.
  25158. @@ -758,13 +787,18 @@ handle_directive (ip, op, excess_newline
  25159.        register U_CHAR *buf;
  25160.        register U_CHAR *limit = ip->buf + ip->length;
  25161.        U_CHAR *skip_to_end_of_comment();
  25162. -      
  25163. +
  25164.        buf = bp = bp + ident_length;
  25165.        while (bp < limit) {
  25166.      if (*bp == '\'' || *bp == '\"') {        /* JF handle quotes right  */
  25167.        U_CHAR quotec;
  25168.  
  25169. -      for (quotec = *bp++; bp < limit && *bp != quotec; bp++) {
  25170. +      for (quotec = *bp++; bp < limit; bp++) {
  25171. +        if (*bp == quotec)
  25172. +          {
  25173. +        bp++;
  25174. +        break;
  25175. +          }
  25176.          if (*bp == '\\') bp++;
  25177.          if (*bp == '\n') {
  25178.            if (bp[-1] == '\\')
  25179. @@ -801,13 +835,18 @@ handle_directive (ip, op, excess_newline
  25180.                            some slop */
  25181.      bp = buf;
  25182.      buf = cp;
  25183. -    
  25184. +
  25185.      while (bp < limit) {
  25186.        if (*bp == '\'' || *bp == '\"') {    /* JF handle quotes right  */
  25187.          U_CHAR quotec;
  25188.  
  25189.          *cp++ = *bp;
  25190. -        for (quotec = *bp++; bp < limit && *bp != quotec; *cp++ = *bp++) {
  25191. +        for (quotec = *bp++; bp < limit; *cp++ = *bp++) {
  25192. +          if (*bp == quotec)
  25193. +        {
  25194. +          *cp++ = *bp++;
  25195. +          break;
  25196. +        }
  25197.            if (*bp == '\\')
  25198.          *cp++ = *bp++;
  25199.            if (*bp == '\n') {
  25200. @@ -939,12 +978,12 @@ expand_special_symbol (hp, ip, op)
  25201.        ++ip->bufp;
  25202.      }
  25203.      break;
  25204. -    
  25205. +
  25206.  oops:
  25207. -    
  25208. +
  25209.      error ("`defined' must be followed by IDENT or (IDENT)");
  25210.      break;
  25211. -      
  25212. +
  25213.    default:
  25214.      error("CCCP error: illegal special hash type"); /* time for gdb */
  25215.      abort ();
  25216. @@ -953,7 +992,7 @@ oops:
  25217.    check_expand(op, len);
  25218.    bcopy (buf, op->bufp, len);
  25219.    op->bufp += len;
  25220. -  
  25221. +
  25222.    return;
  25223.  }
  25224.  
  25225. @@ -978,7 +1017,7 @@ do_include (buf, limit, op, keyword)
  25226.    struct stat sbuf;        /* to stat the include file */
  25227.    FILE_BUF *fp;    /* for input stack frame */
  25228.    struct directory_stack *stackp;
  25229. -  int flen;
  25230. +  int flen, maxlen;
  25231.  
  25232.    int save_indepth = indepth;
  25233.                  /* in case of errors */
  25234. @@ -1019,7 +1058,11 @@ do_include (buf, limit, op, keyword)
  25235.    if (err)
  25236.      goto nope;
  25237.  
  25238. +  /* DG: This doesn't handle includes of aa:... on the Amiga */
  25239. +  /* It doesn't seem worth it. */
  25240.    other_dir = NULL;
  25241. +  maxlen = max_include_len;
  25242. +#if 0
  25243.    if (stackp == include)
  25244.      {
  25245.        fp = &instack[indepth];
  25246. @@ -1037,13 +1080,15 @@ do_include (buf, limit, op, keyword)
  25247.            other_dir = (char *) alloca (n + 1);
  25248.            strncpy (other_dir, nam, n);
  25249.            other_dir[n] = '\0';
  25250. +                  if (n + 4 > maxlen) maxlen = n + 4;
  25251.          }
  25252.            break;
  25253.          }
  25254.      }
  25255.      }
  25256. +#endif
  25257.                /* JF search directory path */
  25258. -  fname = (char *) alloca (max_include_len + flen);
  25259. +  fname = (char *) alloca (maxlen + flen);
  25260.    for (; stackp; stackp = stackp->next)
  25261.      {
  25262.        if (other_dir)
  25263. @@ -1053,6 +1098,10 @@ do_include (buf, limit, op, keyword)
  25264.      }
  25265.        else
  25266.      strcpy (fname, stackp->fname);
  25267. +#ifdef AMIGA
  25268. +      if (fname[0] != 0 && fname[strlen(fname) - 1] != ':')
  25269. +      /* Don't add / after : or empty strings */
  25270. +#endif
  25271.        strcat (fname, "/");
  25272.        strncat (fname, fbeg, flen);
  25273.        if ((f = open (fname, O_RDONLY)) >= 0)
  25274. @@ -1064,7 +1113,11 @@ do_include (buf, limit, op, keyword)
  25275.        goto nope;
  25276.      }
  25277.  
  25278. +#ifdef AMIGA
  25279. +  if (stat(fname, &sbuf) < 0)
  25280. +#else
  25281.    if (fstat(f, &sbuf) < 0)
  25282. +#endif
  25283.      {
  25284.        perror_with_name (fname);
  25285.        goto nope;        /* impossible? */
  25286. @@ -1202,7 +1255,7 @@ do_define (buf, limit, op, keyword)
  25287.      ++bp;            /* skip paren */
  25288.      /* Skip exactly one space or tab if any.  */
  25289.      if (bp < limit && (*bp == ' ' || *bp == '\t')) ++bp;
  25290. -      
  25291. +
  25292.      /* now everything from bp before limit is the definition. */
  25293.      defn = collect_expansion(bp, limit - bp, arg_ptrs);
  25294.    } else {
  25295. @@ -1226,10 +1279,10 @@ do_define (buf, limit, op, keyword)
  25296.        }
  25297.      }
  25298.    }
  25299. -  
  25300. +
  25301.    install (symname, T_MACRO, defn);
  25302.    return 0;
  25303. -  
  25304. +
  25305.  nope:
  25306.  
  25307.    return 1;
  25308. @@ -1308,7 +1361,7 @@ collect_expansion(buf, size, arglist)
  25309.  
  25310.      if (is_idstart[*p] && (p==buf || !is_idchar[*(p-1)])) {
  25311.  
  25312. -      for (id_len = 0; is_idchar[p[id_len]]; id_len++)
  25313. +      for (id_len = 0; p+id_len < buf+size && is_idchar[p[id_len]]; id_len++)
  25314.      ;
  25315.        for (arg = arglist; arg != NULL; arg = arg->next) {
  25316.      struct reflist *tpat;
  25317. @@ -1341,7 +1394,7 @@ collect_expansion(buf, size, arglist)
  25318.    *exp_p++ = '\0';
  25319.  
  25320.    defn->length = exp_p - defn->expansion - 1;
  25321. -  
  25322. +
  25323.    /* give back excess storage */
  25324.    defn->expansion = (U_CHAR *) xrealloc (defn->expansion, defn->length + 1);
  25325.  
  25326. @@ -1456,7 +1509,7 @@ do_undef(buf, limit, op, keyword)
  25327.      delete (hp);
  25328.  }
  25329.  
  25330. -/* handle #error command later */ 
  25331. +/* handle #error command later */
  25332.  do_error()
  25333.  {
  25334.  }
  25335. @@ -1465,6 +1518,21 @@ do_error()
  25336.   * the behavior of the #pragma directive is implementation defined.
  25337.   * this implementation defines it as follows.
  25338.   */
  25339. +#ifdef AMIGA
  25340. +do_pragma(buf, limit, op, keyword)
  25341. +     U_CHAR *buf, *limit;
  25342. +     FILE_BUF *op;
  25343. +     struct keyword_table *keyword;
  25344. +{
  25345. +    /* Just copy the pragma directibe back out */
  25346. +    int len2 = limit - buf, len1 = sizeof("#pragma") - 1;
  25347. +
  25348. +    check_expand(op, len1 + len2);
  25349. +    bcopy("#pragma", op->bufp, len1);
  25350. +    bcopy(buf, op->bufp + len1, len2);
  25351. +    op->bufp += len1 + len2;
  25352. +}
  25353. +#else
  25354.  do_pragma()
  25355.  {
  25356.    close (0);
  25357. @@ -1479,6 +1547,7 @@ do_pragma()
  25358.  nope:
  25359.    fatal ("You are in a maze of twisty compiler features, all different");
  25360.  }
  25361. +#endif
  25362.  
  25363.  typedef struct if_stack {
  25364.    struct if_stack *next;    /* for chaining to the next stack frame */
  25365. @@ -1541,7 +1610,7 @@ do_elif (buf, limit, op, keyword)
  25366.      }
  25367.      if_stack->type = T_ELIF;
  25368.    }
  25369. -  
  25370. +
  25371.    value = eval_if_expression (buf, limit - buf);
  25372.    conditional_skip (ip, value == 0, T_ELIF);
  25373.  }
  25374. @@ -1574,7 +1643,7 @@ eval_if_expression (buf, length)
  25375.  
  25376.    delete (save_defined);    /* clean up special symbol */
  25377.    free (temp_obuf.buf);
  25378. -  
  25379. +
  25380.    return value;
  25381.  }
  25382.  
  25383. @@ -1614,7 +1683,7 @@ conditional_skip (ip, skip, type)
  25384.    if_stack = temp;
  25385.  
  25386.    if_stack->type = type;
  25387. -  
  25388. +
  25389.    if (skip != 0) {
  25390.      skip_if_group(ip);
  25391.      return;
  25392. @@ -1724,7 +1793,7 @@ skip_if_group(ip)
  25393.   * without changing  if_stack ;  this is so that the error message
  25394.   * for missing #endif's etc. will point to the original #if.  It
  25395.   * is possible that something different would be better.
  25396. - */ 
  25397. + */
  25398.  do_else(buf, limit, op, keyword)
  25399.       U_CHAR *buf, *limit;
  25400.       FILE_BUF *op;
  25401. @@ -1915,7 +1984,7 @@ macroexpand (hp, ip, op, excess_newlines
  25402.        int totlen;        /* total amount of exp buffer filled so far */
  25403.  
  25404.        register struct reflist *ap;
  25405. -      struct argptrs { 
  25406. +      struct argptrs {
  25407.                 U_CHAR *argstart;
  25408.                 int length;
  25409.               } *args;
  25410. @@ -1999,7 +2068,7 @@ macroexpand (hp, ip, op, excess_newlines
  25411.        ip2->buf = ip2->bufp = defn->expansion;
  25412.        ip2->length = defn->length;
  25413.      }
  25414. -  
  25415. +
  25416.    rescan (ip2, op);
  25417.    --indepth;
  25418.    *excess_newlines_ptr += newlines_found;
  25419. @@ -2024,7 +2093,7 @@ skip_macro_argument(bp, ip, newlines)
  25420.  {
  25421.    int paren = 0;
  25422.    int quotec = 0;
  25423. -  
  25424. +
  25425.    while (bp < ip->buf + ip->length) {
  25426.      switch (*bp) {
  25427.      case '(':
  25428. @@ -2084,9 +2153,9 @@ error (msg)
  25429.      }
  25430.  
  25431.    if (ip != NULL)
  25432. -    fprintf(stdout, "file %s, offset %d (line %d): ",
  25433. +    fprintf(stderr, "file %s, offset %d (line %d): ",
  25434.          ip->fname, ip->bufp - ip->buf, ip->lineno);
  25435. -  fprintf(stdout, "%s\n", msg);
  25436. +  fprintf(stderr, "%s\n", msg);
  25437.    return 0;
  25438.  }
  25439.  
  25440. @@ -2109,7 +2178,7 @@ check_expand(obuf, needed)
  25441.  {
  25442.    register int i;
  25443.    register U_CHAR *p;
  25444. -  
  25445. +
  25446.    if (obuf->length - (obuf->bufp - obuf->buf) > needed)
  25447.      return obuf->buf;
  25448.  
  25449. @@ -2125,7 +2194,7 @@ check_expand(obuf, needed)
  25450.  
  25451.    return p;
  25452.  }
  25453. -  
  25454. +
  25455.  /*
  25456.   * install a name in the main hash table, even if it is already there.
  25457.   *   name stops with first non alphanumeric, except leading '#'.
  25458. @@ -2198,7 +2267,7 @@ lookup (name)
  25459.  delete(hp)
  25460.       HASHNODE *hp;
  25461.  {
  25462. -  
  25463. +
  25464.    if (hp->prev != NULL)
  25465.      hp->prev->next = hp->next;
  25466.    if (hp->next != NULL)
  25467. @@ -2232,10 +2301,10 @@ hashf(name, len, hashsize)
  25468.       int hashsize;
  25469.  {
  25470.    register int r = 0;
  25471. -  
  25472. +
  25473.    while (len--)
  25474.      r = HASHSTEP(r, *name++);
  25475. -  
  25476. +
  25477.    return MAKE_POS(r) % hashsize;
  25478.  }
  25479.  
  25480. @@ -2282,7 +2351,7 @@ initialize_random_junk()
  25481.  #endif
  25482.  
  25483.    /* is there more? */
  25484. -  
  25485. +
  25486.  }
  25487.  
  25488.  /*
  25489. @@ -2357,7 +2426,7 @@ bzero (b, length)
  25490.  #endif /* not VMS */
  25491.  }
  25492.  
  25493. -void 
  25494. +void
  25495.  bcopy (b1, b2, length)
  25496.       register char *b1;
  25497.       register char *b2;
  25498. @@ -2379,7 +2448,7 @@ bcopy (b1, b2, length)
  25499.      *b2++ = *b1++;
  25500.  #endif /* not VMS */
  25501.  }
  25502. +
  25503.  int
  25504.  bcmp (b1, b2, length)    /* This could be a macro! */
  25505.       register char *b1;
  25506. diff -rup --new-file baseline/fsf/emacs18/cpp/smakefile amiga/fsf/emacs18/cpp/smakefile
  25507. --- baseline/fsf/emacs18/cpp/smakefile    Wed Dec 31 17:00:00 1969
  25508. +++ amiga/fsf/emacs18/cpp/smakefile    Sat Sep 28 00:00:00 1996
  25509. @@ -0,0 +1,23 @@
  25510. +# Makefile for cccp in the Emacs distribution only.
  25511. +# Here we assume that you are using SASC
  25512. +# (since cccp is used by Emacs only to deal with long strings in macros.
  25513. +
  25514. +CFLAGS=DEF EMACS idir //unix/include/ def STACK_DIRECTION=-1 def OUTPUT_LINE_COMMANDS nowvret debug sf
  25515. +
  25516. +cpp: cccp
  25517. +    -delete cpp
  25518. +    makelink cpp cccp
  25519. +cccp: cccp.o cexp.tab.o alloca.o
  25520. +    sc link cccp.o alloca.o cexp.tab.o to cccp lib //unix/src/unix.lib
  25521. +
  25522. +testexp: y.tab.c
  25523. +    cc -g -DTEST_EXP_READER y.tab.c -o testexp
  25524. +
  25525. +cexp.tab.c: cexp.y
  25526. +    echo "expect 40 shift/reduce conflicts"
  25527. +    bin:bison cexp.y >bison.debug
  25528. +
  25529. +cccp.o: cccp.c
  25530. +cexp.tab.o: cexp.tab.c
  25531. +alloca.o: /src/alloca.c
  25532. +    $(CC) $(CFLAGS) objname alloca.o /src/alloca.c
  25533. diff -rup --new-file baseline/fsf/emacs18/etc/SCOPTIONS amiga/fsf/emacs18/etc/SCOPTIONS
  25534. --- baseline/fsf/emacs18/etc/SCOPTIONS    Wed Dec 31 17:00:00 1969
  25535. +++ amiga/fsf/emacs18/etc/SCOPTIONS    Sat Sep 28 00:00:00 1996
  25536. @@ -0,0 +1,15 @@
  25537. +STRINGMERGE
  25538. +STRUCTUREEQUIVALENCE
  25539. +NOWARNVOIDRETURN
  25540. +NOVERSION
  25541. +MEMORYSIZE=HUGE
  25542. +INCLUDEDIR=src:unix/include
  25543. +IGNORE=147
  25544. +IGNORE=62
  25545. +IGNORE=132
  25546. +IGNORE=154
  25547. +IGNORE=104
  25548. +IGNORE=100
  25549. +IGNORE=161
  25550. +IGNORE=84
  25551. +IGNORE=93
  25552. diff -rup --new-file baseline/fsf/emacs18/etc/amiga-env.c amiga/fsf/emacs18/etc/amiga-env.c
  25553. --- baseline/fsf/emacs18/etc/amiga-env.c    Wed Dec 31 17:00:00 1969
  25554. +++ amiga/fsf/emacs18/etc/amiga-env.c    Sat Sep 28 00:00:00 1996
  25555. @@ -0,0 +1,439 @@
  25556. +/* env.c - manipulate environment and execute a program
  25557. +   in that environment
  25558. +   Mly 861126
  25559. +
  25560. +   Copyright (C) 1986 Free Software Foundation, Inc.
  25561. +
  25562. +    This program is free software; you can redistribute it and/or modify
  25563. +    it under the terms of the GNU General Public License as published by
  25564. +    the Free Software Foundation; either version 1, or (at your option)
  25565. +    any later version.
  25566. +
  25567. +    This program is distributed in the hope that it will be useful,
  25568. +    but WITHOUT ANY WARRANTY; without even the implied warranty of
  25569. +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  25570. +    GNU General Public License for more details.
  25571. +
  25572. +    You should have received a copy of the GNU General Public License
  25573. +    along with this program; if not, write to the Free Software
  25574. +    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25575. +
  25576. + In other words, you are welcome to use, share and improve this program.
  25577. + You are forbidden to forbid anyone else to use, share and improve
  25578. + what you give them.   Help stamp out software-hoarding!  */
  25579. +
  25580. +/* 
  25581. +
  25582. +   If first argument is "-", then a new environment is constructed
  25583. +   from scratch; otherwise the environment is inherited from the parent
  25584. +   process, except as modified by other options.
  25585. +   
  25586. +   So, "env - foo" will invoke the "foo" program in a null environment,
  25587. +   whereas "env foo" would invoke "foo" in the same environment as that
  25588. +   passed to "env" itself.
  25589. +
  25590. +   Subsequent arguments are interpreted as follows:
  25591. +   
  25592. +   * "variable=value" (ie an arg containing a "=" character)
  25593. +     means to set the specified environment variable to that value.
  25594. +     `value' may be of zero length ("variable=").  Note that setting
  25595. +     a variable to a zero-length value is different from unsetting it.
  25596. +
  25597. +   * "-u variable" or "-unset variable"
  25598. +     means to unset that variable
  25599. +     If that variable isn't set, does nothing.
  25600. +
  25601. +   * "-s variable value" or "-set variable value"
  25602. +     same as "variable=value"
  25603. +
  25604. +   * "-" or "--"
  25605. +     are used to indicate that the following argument is the program
  25606. +     to invoke.  This is only necessary when the program's name
  25607. +     begins with "-" or contains a "="
  25608. +
  25609. +   * anything else
  25610. +     The first remaining argument specifies a program to invoke
  25611. +     (it is searched for according to the specification of the PATH
  25612. +     environment variable) and any arguments following that are
  25613. +     passed as arguments to that program
  25614. +
  25615. +     If no program-name is specified following the environment
  25616. +     specifications the the resulting environment is printed
  25617. +     (The is like specifying a program-name of "printenv")
  25618. +
  25619. +   Examples:
  25620. +     If the environment passed to "env" is
  25621. +     { USER=rms EDITOR=emacs PATH=.:/gnubin:/hacks }
  25622. +
  25623. +     * "env DISPLAY=gnu:0 nemacs"
  25624. +        calls "nemacs" in the envionment
  25625. +    { EDITOR=emacs USER=rms DISPLAY=gnu }
  25626. +
  25627. +     * "env - USER=foo /hacks/hack bar baz"
  25628. +       will call the "hack" program on arguments "bar" and "baz"
  25629. +       in an environment in which the only variable is "USER"
  25630. +       Note that the "-" option will clear out the PATH variable,
  25631. +       so one should be careful to specify in which directory
  25632. +       to find the program to call
  25633. +       
  25634. +     * "env -u EDITOR USER=foo PATH=/energy -- e=mc2 bar baz"
  25635. +       The program "/energy/e=mc2" is called with environment
  25636. +       { USER=foo PATH=/energy }
  25637. +
  25638. +*/
  25639. +
  25640. +#include <exec/types.h>
  25641. +#include <dos/dostags.h>
  25642. +#include <dos/var.h>
  25643. +#include <proto/dos.h>
  25644. +#include <proto/exec.h>
  25645. +
  25646. +#ifdef EMACS
  25647. +#define NO_SHORTNAMES
  25648. +#include "../src/config.h"
  25649. +#endif /* EMACS */
  25650. +
  25651. +#include <stdio.h>
  25652. +#include <errno.h>
  25653. +#include <setjmp.h>
  25654. +
  25655. +extern int execvp ();
  25656. +extern char *index ();
  25657. +
  25658. +char *xmalloc (), *xrealloc ();
  25659. +char *concat ();
  25660. +
  25661. +char *progname;
  25662. +void setenv ();
  25663. +void fatal ();
  25664. +
  25665. +#define index strchr
  25666. +
  25667. +struct MsgPort *end_port;
  25668. +struct {
  25669. +  struct Message msg;
  25670. +  int rc;
  25671. +} end_msg;
  25672. +int gargc;
  25673. +char **gargv;
  25674. +jmp_buf unixexit_buf;
  25675. +
  25676. +void __saveds unix_start(void)
  25677. +{
  25678. +  int rc;
  25679. +
  25680. +  if (!(rc = setjmp(unixexit_buf)))
  25681. +    {
  25682. +      unixmain(gargc, gargv);
  25683. +      rc = 1;
  25684. +    }
  25685. +  end_msg.rc = rc - 1;
  25686. +  end_msg.msg.mn_Length = sizeof(end_msg);
  25687. +  end_msg.msg.mn_Node.ln_Type = NT_MESSAGE;
  25688. +  PutMsg(end_port, &end_msg);
  25689. +}
  25690. +
  25691. +void unixexit(int rc)
  25692. +{
  25693. +  longjmp(unixexit_buf, rc + 1);
  25694. +}
  25695. +
  25696. +main(int argc, char **argv)
  25697. +{
  25698. +  int rc = 1;
  25699. +  long stacksize;
  25700. +  struct Process *us = (struct Process *)FindTask(0);
  25701. +
  25702. +  if (us->pr_CLI) stacksize = ((struct CommandLineInterface *)BADDR(us->pr_CLI))->cli_DefaultStack << 2;
  25703. +  else stacksize = us->pr_StackSize;
  25704. +
  25705. +  gargc = argc;
  25706. +  gargv = argv;
  25707. +  
  25708. +  end_port = CreateMsgPort();
  25709. +
  25710. +  if (end_port && CreateNewProcTags(NP_Entry, unix_start,
  25711. +                    NP_Input, Input(), NP_CloseInput, 0UL,
  25712. +                    NP_Output, Output(), NP_CloseOutput, 0UL,
  25713. +                    NP_StackSize, stacksize,
  25714. +                    NP_Cli, TRUE, TAG_END))
  25715. +    {
  25716. +      while (!GetMsg(end_port)) WaitPort(end_port);
  25717. +      rc = end_msg.rc;
  25718. +    }
  25719. +  if (end_port) DeleteMsgPort(end_port);
  25720. +  Delay(1);
  25721. +  exit(rc);
  25722. +}
  25723. +
  25724. +#define exit unixexit
  25725. +
  25726. +unixmain (argc, argv)
  25727. +     register int argc;
  25728. +     register char **argv;
  25729. +{
  25730. +  register char *tem;
  25731. +
  25732. +  progname = argv[0];
  25733. +  argc--;
  25734. +  argv++;
  25735. +
  25736. +  /* "-" flag means to not inherit parent's environment */
  25737. +  /* This is ignored on the amiga */
  25738. +  if (argc && !strcmp (*argv, "-"))
  25739. +    {
  25740. +      argc--;
  25741. +      argv++;
  25742. +    }
  25743. +
  25744. +  while (argc > 0)
  25745. +    {
  25746. +      tem = index (*argv, '=');
  25747. +      if (tem)
  25748. +    /* If arg contains a "=" it specifies to set a variable */
  25749. +    {
  25750. +      *tem = '\000';
  25751. +      setenv (*argv, tem + 1);
  25752. +      argc--; argv++;
  25753. +      continue;
  25754. +    }
  25755. +      
  25756. +      if (**argv != '-')
  25757. +    /* Remaining args are program name and args to pass it */
  25758. +    break;
  25759. +
  25760. +      if (argc < 2)
  25761. +    fatal ("No argument following \"%s\" switch", *argv);
  25762. +       if (!strcmp (*argv, "-u") ||
  25763. +           !strcmp (*argv, "-unset"))
  25764. +    /* Unset a variable */
  25765. +    {
  25766. +      argc--; argv++;
  25767. +      setenv (*argv, 0);
  25768. +      argc--; argv++;
  25769. +    }
  25770. +      else if (!strcmp (*argv, "-s") ||
  25771. +           !strcmp (*argv, "-set"))
  25772. +    /* Set a variable */
  25773. +    {
  25774. +      argc--; argv++;
  25775. +      tem = *argv;
  25776. +      if (argc < 2)
  25777. +        fatal ("No value specified for variable \"%s\"",
  25778. +           tem);
  25779. +      argc--; argv++;
  25780. +      setenv (tem, *argv);
  25781. +      argc--; argv++;
  25782. +    }
  25783. +      else if (!strcmp (*argv, "-") || !strcmp (*argv, "--"))
  25784. +    {
  25785. +      argc--; argv++;
  25786. +      break;
  25787. +    }
  25788. +      else
  25789. +    {
  25790. +      fatal ("unknown switch \"%s\"", *argv);
  25791. +    }
  25792. +    }
  25793. +
  25794. +  /* If no program specified print the environment and exit */
  25795. +  if (argc <= 0)
  25796. +    {
  25797. +      printenv();
  25798. +      exit (0);
  25799. +    }
  25800. +  else
  25801. +    {
  25802. +      extern int errno, sys_nerr;
  25803. +      extern char *sys_errlist[];
  25804. +
  25805. +      (void) execvp (*argv, argv);
  25806. +
  25807. +      fprintf (stderr, "%s: Cannot execute \"%s\"",
  25808. +           progname, *argv);
  25809. +      if (errno < sys_nerr)
  25810. +    fprintf (stderr, ": %s\n" , sys_errlist[errno]);
  25811. +      else
  25812. +    putc ('\n', stderr);
  25813. +      exit (errno != 0 ? errno : 1);
  25814. +    }
  25815. +}
  25816. +
  25817. +int execvp(program, argv)
  25818. +char *program, **argv;
  25819. +{
  25820. +  int index, comsize;
  25821. +  char *combuf, *bp;
  25822. +  long err, rc;
  25823. +  
  25824. +  combuf = xmalloc(256);
  25825. +  comsize = 256;
  25826. +
  25827. +  bp = combuf;
  25828. +  for (index = 0; argv[index] != 0; index++)
  25829. +    {
  25830. +      char *s = argv[index];
  25831. +      int len;
  25832. +
  25833. +      len = 3;
  25834. +      while (*s) len += 1 + 2 * (*s++ == '"');
  25835. +      if (bp + len + 1 >= combuf + comsize)
  25836. +    {
  25837. +      char *newbuf;
  25838. +      int new_comsize;
  25839. +
  25840. +      new_comsize = 2 * comsize + len;
  25841. +      newbuf = xmalloc(new_comsize);
  25842. +      memcpy(newbuf, combuf, comsize);
  25843. +
  25844. +      bp = newbuf + (bp - combuf);
  25845. +      combuf = newbuf;
  25846. +      comsize = new_comsize;
  25847. +    }
  25848. +      *bp++ = ' ';
  25849. +      *bp++ = '"';
  25850. +      s = argv[index];
  25851. +      while (*s)
  25852. +    {
  25853. +      if (*s == '"' || *s == '*') *bp++ = '*';
  25854. +      *bp++ = *s++;
  25855. +    }
  25856. +      *bp++ = '"';
  25857. +    }
  25858. +  *bp = '\0';
  25859. +  rc = SystemTags(combuf,
  25860. +          SYS_UserShell, 1UL,
  25861. +          TAG_END);
  25862. +  err = IoErr();
  25863. +  free(combuf);
  25864. +  if (rc != -1) exit(rc);
  25865. +  
  25866. +  errno = convert_oserr(err);
  25867. +  return -1;
  25868. +}
  25869. +
  25870. +int convert_oserr(int ioerr)
  25871. +{
  25872. +  extern int _OSERR;
  25873. +
  25874. +  _OSERR = ioerr;
  25875. +  switch (ioerr)
  25876. +    {
  25877. +    case 0: return 0;
  25878. +    case ERROR_NO_FREE_STORE: return ENOMEM;
  25879. +    case ERROR_TASK_TABLE_FULL: return EAGAIN;
  25880. +    case ERROR_BAD_TEMPLATE: case ERROR_REQUIRED_ARG_MISSING:
  25881. +    case ERROR_KEY_NEEDS_ARG: case ERROR_TOO_MANY_ARGS:
  25882. +    case ERROR_UNMATCHED_QUOTES: case ERROR_LINE_TOO_LONG: return EINVAL;
  25883. +    case ERROR_OBJECT_IN_USE: return EBUSY;
  25884. +    case ERROR_OBJECT_EXISTS: return EEXIST;
  25885. +    case ERROR_DIR_NOT_FOUND: return ENOENT;
  25886. +    case ERROR_OBJECT_NOT_FOUND: return ENOENT;
  25887. +    case ERROR_BAD_STREAM_NAME: return EINVAL;
  25888. +    case ERROR_OBJECT_TOO_LARGE: return E2BIG;
  25889. +    case ERROR_ACTION_NOT_KNOWN: return EINVAL;
  25890. +    case ERROR_INVALID_COMPONENT_NAME: return EINVAL;
  25891. +    case ERROR_INVALID_LOCK: return EINVAL;
  25892. +    case ERROR_OBJECT_WRONG_TYPE: return EINVAL;
  25893. +    case ERROR_DISK_WRITE_PROTECTED: return EACCES;
  25894. +    case ERROR_SEEK_ERROR: return EIO;
  25895. +    case ERROR_DISK_FULL: return ENOSPC;
  25896. +    case ERROR_DELETE_PROTECTED: return EACCES;
  25897. +    case ERROR_WRITE_PROTECTED: return EACCES;
  25898. +    case ERROR_READ_PROTECTED: return EACCES;
  25899. +    case ERROR_RENAME_ACROSS_DEVICES: return EXDEV;
  25900. +    default: return EOSERR;
  25901. +    }
  25902. +}
  25903. +
  25904. +printenv(void)
  25905. +/* Effect: Prints a UNIX style environment from the AmigaOS environment.
  25906. +*/
  25907. +{
  25908. +  struct LocalVar *scan_env;
  25909. +  struct Process *us = (struct Process *)FindTask(0);
  25910. +
  25911. +  for (scan_env = (struct LocalVar *)us->pr_LocalVars.mlh_Head;
  25912. +       scan_env->lv_Node.ln_Succ;
  25913. +       scan_env = (struct LocalVar *)scan_env->lv_Node.ln_Succ)
  25914. +    if (scan_env->lv_Node.ln_Type == LV_VAR &&
  25915. +    !(scan_env->lv_Flags & (GVF_GLOBAL_ONLY | GVF_BINARY_VAR)))
  25916. +      {
  25917. +    /* We only handle local text variables */
  25918. +    printf("%s=", scan_env->lv_Node.ln_Name);
  25919. +    fwrite(scan_env->lv_Value, 1, scan_env->lv_Len, stdout);
  25920. +    putchar('\n');
  25921. +      }
  25922. +}
  25923. +
  25924. +void
  25925. +setenv (var, val)
  25926. +  register char *var, *val;
  25927. +{
  25928. +  if (val) SetVar(var, val, -1, LV_VAR | GVF_LOCAL_ONLY);
  25929. +  else DeleteVar(var, LV_VAR | GVF_LOCAL_ONLY);
  25930. +}
  25931. +
  25932. +void
  25933. +fatal (msg, arg1, arg2)
  25934. +     char *msg, *arg1, *arg2;
  25935. +{
  25936. +  fprintf (stderr, "%s: ", progname);
  25937. +  fprintf (stderr, msg, arg1, arg2);
  25938. +  putc ('\n', stderr);
  25939. +  exit (1);
  25940. +}
  25941. +
  25942. +
  25943. +extern char *malloc (), *realloc ();
  25944. +
  25945. +void
  25946. +memory_fatal ()
  25947. +{
  25948. +  fatal ("Out of memory");
  25949. +}
  25950. +
  25951. +char *
  25952. +xmalloc (size)
  25953. +     int size;
  25954. +{
  25955. +  register char *value;
  25956. +  value = (char *) malloc (size);
  25957. +  if (!value) memory_fatal ();
  25958. +  return (value);
  25959. +}
  25960. +
  25961. +char *
  25962. +xrealloc (ptr, size)
  25963. +     char *ptr;
  25964. +     int size;
  25965. +{
  25966. +  register char *value;
  25967. +  value = (char *) realloc (ptr, size);
  25968. +  if (!value) memory_fatal ();
  25969. +  return (value);
  25970. +}
  25971. +
  25972. +/* Return a newly-allocated string whose contents concatenate those of s1, s2, s3.  */
  25973. +
  25974. +char *
  25975. +concat (s1, s2, s3)
  25976. +     char *s1, *s2, *s3;
  25977. +{
  25978. +  int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
  25979. +  char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
  25980. +
  25981. +  strcpy (result, s1);
  25982. +  strcpy (result + len1, s2);
  25983. +  strcpy (result + len1 + len2, s3);
  25984. +  *(result + len1 + len2 + len3) = 0;
  25985. +
  25986. +  return result;
  25987. +}
  25988. +
  25989. +
  25990. +/*
  25991. + * Local variables:
  25992. + * compile-command: "lc -L -v amiga-env.c"
  25993. + * end:
  25994. + */
  25995. diff -rup --new-file baseline/fsf/emacs18/etc/etags.c amiga/fsf/emacs18/etc/etags.c
  25996. --- baseline/fsf/emacs18/etc/etags.c    Wed Aug 19 22:11:01 1992
  25997. +++ amiga/fsf/emacs18/etc/etags.c    Sat Sep 28 00:00:00 1996
  25998. @@ -338,10 +338,17 @@ main(ac,av)
  25999.      {
  26000.        for (i=1; i<ac; i++)
  26001.      {
  26002. +#ifdef AMIGA
  26003. +      rename(outfile, "OTAGS");
  26004. +      sprintf(cmd, "egrep >%s -v '\t%s\t' OTAGS", outfile, av[i]);
  26005. +      system(cmd);
  26006. +      unlink("OTAGS");
  26007. +#else
  26008.        sprintf(cmd,
  26009.            "mv %s OTAGS;fgrep -v '\t%s\t' OTAGS >%s;rm OTAGS",
  26010.            outfile, av[i], outfile);
  26011.        system(cmd);
  26012. +#endif
  26013.      }
  26014.        aflag++;
  26015.      }
  26016. @@ -357,7 +364,11 @@ main(ac,av)
  26017.  #ifndef VMS
  26018.    if (uflag)
  26019.      {
  26020. +#ifdef AMIGA
  26021. +      sprintf(cmd, "c:sort from %s to %s", outfile, outfile);
  26022. +#else
  26023.        sprintf(cmd, "sort %s -o %s", outfile, outfile);
  26024. +#endif
  26025.        system(cmd);
  26026.      }
  26027.  #endif
  26028. diff -rup --new-file baseline/fsf/emacs18/etc/make-docfile.c amiga/fsf/emacs18/etc/make-docfile.c
  26029. --- baseline/fsf/emacs18/etc/make-docfile.c    Fri Oct 25 11:43:28 1991
  26030. +++ amiga/fsf/emacs18/etc/make-docfile.c    Sat Sep 28 00:00:00 1996
  26031. @@ -57,8 +57,30 @@ main (argc, argv)
  26032.        i += 2;
  26033.      }
  26034.  
  26035. +#ifdef AMIGA
  26036. +  {
  26037. +    char fn[512], *fpos;
  26038. +    int c;
  26039. +
  26040. +    c = getchar();
  26041. +    do
  26042. +      {
  26043. +    while (c == ' ' || c == '\n' || c == '\t') c = getchar();
  26044. +    if (c == EOF) break;
  26045. +    fpos = fn;
  26046. +    do *fpos++ = c;
  26047. +    while ((c = getchar()) != EOF && c != ' ' && c != '\t' && c != '\n');
  26048. +    *fpos = 0;
  26049. +
  26050. +    fprintf(stderr, "doc file %s\n", fn);
  26051. +    err_count += scan_file (fn); /* err_count seems to be {mis,un}used */
  26052. +      }
  26053. +    while (1);
  26054. +  }
  26055. +#else
  26056.    for (; i < argc; i++)
  26057.      err_count += scan_file (argv[i]);    /* err_count seems to be {mis,un}used */
  26058. +#endif
  26059.  #ifndef VMS
  26060.    exit (err_count);            /* see below - shane */
  26061.  #endif /* VMS */
  26062. diff -rup --new-file baseline/fsf/emacs18/etc/sh.c amiga/fsf/emacs18/etc/sh.c
  26063. --- baseline/fsf/emacs18/etc/sh.c    Wed Dec 31 17:00:00 1969
  26064. +++ amiga/fsf/emacs18/etc/sh.c    Sat Sep 28 00:00:00 1996
  26065. @@ -0,0 +1,145 @@
  26066. +;/*
  26067. +SC LINK NOSTKCHK DEF SASC=1 sh.c
  26068. +QUIT
  26069. +*/
  26070. +/*
  26071. + * original version: David Gay
  26072. + *
  26073. + * 05/18/93 ch added SAS support, external verbose flag and primitive_parse
  26074. + */
  26075. +#include <exec/types.h>
  26076. +#include <dos/dostags.h>
  26077. +#include <stdio.h>
  26078. +
  26079. +#ifdef SASC
  26080. +#include <string.h>
  26081. +#include <stdlib.h>
  26082. +#endif
  26083. +
  26084. +#include <proto/dos.h>
  26085. +
  26086. +/*
  26087. +  translates:
  26088. +  echo "string1;string2" ; cd xx:c ; copy xx yy
  26089. +      into
  26090. +  echo "string1;string2" \n cd xx:c \n copy xx yy
  26091. +
  26092. +  note:
  26093. +    this is a really primitive function ;-) , it may be 
  26094. +    changed if necessary
  26095. +
  26096. +*/
  26097. +
  26098. +#define QUOTE    '"'
  26099. +
  26100. +void primitive_parse(char *s)
  26101. +{
  26102. +    int c;
  26103. +
  26104. +    while(c = *s++)
  26105. +    {
  26106. +    if(c == QUOTE)
  26107. +    {
  26108. +        while((c = *s++) && (c != QUOTE))
  26109. +        ;
  26110. +        if(!c)
  26111. +        break;
  26112. +    }
  26113. +    else if(c == ';')
  26114. +        *(s-1) = '\n';
  26115. +    }
  26116. +}
  26117. +
  26118. +int execute(char *cmd, int debug)
  26119. +{
  26120. +    long rc;
  26121. +    char *s;
  26122. +
  26123. +    while (*cmd == ' ') cmd++;
  26124. +    if (strncmp(cmd, "exec", 4) == 0 && (cmd[4] == ' ' || cmd[4] == '\t')) 
  26125. +    cmd += 4;
  26126. +    
  26127. +    s = cmd;
  26128. +    primitive_parse(s);
  26129. +
  26130. +    if(debug)
  26131. +    fprintf(stderr,"/etc/sh: preparsed line:\n%s\n", cmd);
  26132. +
  26133. +    if ((rc = SystemTags(cmd, SYS_UserShell, TRUE, TAG_END)) == -1)
  26134. +    {
  26135. +    fprintf(stderr, "Failed to execute command %s\n", cmd);
  26136. +    return 20;
  26137. +    }
  26138. +    return rc;
  26139. +}
  26140. +
  26141. +void main(int argc, char **argv)
  26142. +{
  26143. +  int command;
  26144. +  char *command_string;
  26145. +  char *program_name = argv[0];
  26146. +  struct RDArgs *args;
  26147. +  long opts[1];
  26148. +  static char options[] = "";
  26149. +  long debug = 0;
  26150. +  char *shenv;
  26151. +
  26152. +  /* Throw out AmigaOS args so that Input() is clean */
  26153. +  if (args = ReadArgs(options, opts, NULL)) FreeArgs(args);
  26154. +
  26155. +  shenv = getenv("EMACS_SH_DEBUG");
  26156. +
  26157. +  if(shenv)
  26158. +      if(strstr(shenv, "-v")) /* external verbose flag */
  26159. +      debug = 1;
  26160. +  
  26161. +  command = 0;
  26162. +  /* Simplistic argument parsing */
  26163. +  argv++;
  26164. +  argc--;
  26165. +  while (argc > 0 && argv[0][0] == '-')
  26166. +    {
  26167. +      switch (argv[0][1])
  26168. +    {
  26169. +    case 'c':
  26170. +      if (argc == 1) goto usage;
  26171. +      command = 1;
  26172. +      command_string = argv[1];
  26173. +      argv++;
  26174. +      argc--;
  26175. +      break;
  26176. +    case 'v':
  26177. +      debug = 1;
  26178. +      break;
  26179. +    case 'i':
  26180. +      /* ignored for now */
  26181. +      break;
  26182. +    default: goto usage;
  26183. +    }
  26184. +      argc--;
  26185. +      argv++;
  26186. +    }
  26187. +  if (argc != 0) goto usage;
  26188. +
  26189. +  if (command) 
  26190. +  {
  26191. +      if(debug)
  26192. +      fprintf(stderr,"%s: command_string = %s\n", argv[0], command_string);
  26193. +      exit(execute(command_string, debug));
  26194. +  }
  26195. +  else exit(Execute("", Input(), NULL) ? 0 : 1);
  26196. +
  26197. + usage:
  26198. +  fprintf(stderr, "%s [-i] [-v] [-c command]\n", program_name);
  26199. +  exit(1);
  26200. +}
  26201. +
  26202. +
  26203. +/*
  26204. + * Local variables:
  26205. + * compile-command: "sc link nostkchk def SASC=1 sh.c"
  26206. + * end:
  26207. + */
  26208. diff -rup --new-file baseline/fsf/emacs18/etc/smakefile amiga/fsf/emacs18/etc/smakefile
  26209. --- baseline/fsf/emacs18/etc/smakefile    Wed Dec 31 17:00:00 1969
  26210. +++ amiga/fsf/emacs18/etc/smakefile    Sat Sep 28 00:00:00 1996
  26211. @@ -0,0 +1,17 @@
  26212. +all: etags sh wakeup make-docfile # env
  26213. +
  26214. +env: amiga-env.c
  26215. +    echo "'sc link to env nostkchk amiga-env.c' should work (but doesn't)."
  26216. +    echo "You're welcome to try ..."
  26217. +
  26218. +make-docfile: make-docfile.c
  26219. +    sc link make-docfile.c
  26220. +
  26221. +sh: sh.c
  26222. +    sc link sh.c
  26223. +
  26224. +wakeup: wakeup.c
  26225. +    sc link wakeup.c
  26226. +
  26227. +etags: etags.c
  26228. +    sc link idir //unix/include def ETAGS etags.c lib //unix/src/unix.lib
  26229. diff -rup --new-file baseline/fsf/emacs18/etc/termcap.amiga amiga/fsf/emacs18/etc/termcap.amiga
  26230. --- baseline/fsf/emacs18/etc/termcap.amiga    Wed Dec 31 17:00:00 1969
  26231. +++ amiga/fsf/emacs18/etc/termcap.amiga    Sat Sep 28 00:00:00 1996
  26232. @@ -0,0 +1,12 @@
  26233. + Amiga termcap by Kent Polk and David Gay
  26234. +AA|amiga|Amiga ANSI:\
  26235. +   :co#80:li#23:am:bs:bw:MT:\
  26236. +   :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
  26237. +   :LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:\
  26238. +   :ae=\017:al=\E[L:as=\016:bl=\007:bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
  26239. +   :cm=\E[%i%d;%dH:dc=\E[P:dl=\E[M:do=\E[B:ho=\E[H:ic=\E[@:is=\E[20l:\
  26240. +   :k1=\E0~:k2=\E1~:k3=\E2~:k4=\E3~:k5=\E4~:k6=\E5~:k7=\E6~:k8=\E7~:k9=\E8~:\
  26241. +   :k0=\E9~:kb=^H:kd=\EB:kl=\ED:kr=\EC:ku=\EA:le=\E[D:\
  26242. +   :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:\
  26243. +   :rs=\Ec:se=\E[0m:sf=\E[S:so=\E[7m:sr=\E[T:ue=\E[0m:up=\E[A:us=\E[4m:\
  26244. +   :ve=\E[\040p:vi=\E[\060\040p:xn:
  26245. diff -rup --new-file baseline/fsf/emacs18/etc/wakeup.c amiga/fsf/emacs18/etc/wakeup.c
  26246. --- baseline/fsf/emacs18/etc/wakeup.c    Tue Jul 30 14:03:39 1991
  26247. +++ amiga/fsf/emacs18/etc/wakeup.c    Sat Sep 28 00:00:00 1996
  26248. @@ -18,11 +18,17 @@ main (argc, argv)
  26249.  
  26250.    while (1)
  26251.      {
  26252. +#ifdef AMIGA
  26253. +      if (Write(Output(), "Wake up!\n", 9) != 9) exit(0);
  26254. +      chkabort();
  26255. +#define sleep(n) Delay(50 * (n))
  26256. +#else
  26257.        /* Make sure wakeup stops when Emacs goes away.  */
  26258.        if (getppid () == 1)
  26259.      exit (0);
  26260.        printf ("Wake up!\n");
  26261.        fflush (stdout);
  26262. +#endif
  26263.        /* If using a period of 60, produce the output when the minute
  26264.       changes. */
  26265.        if (period == 60)
  26266. diff -rup --new-file baseline/fsf/emacs18/info/texinfo-3 amiga/fsf/emacs18/info/texinfo-3
  26267. --- baseline/fsf/emacs18/info/texinfo-3    Thu Jan 10 15:03:25 1991
  26268. +++ amiga/fsf/emacs18/info/texinfo-3    Sat Sep 28 00:00:00 1996
  26269. @@ -346,11 +346,11 @@ directory.  Currently, it is equivalent 
  26270.  the output.  For example,
  26271.  
  26272.       The @file{.el} files are in 
  26273. -     the @file{/gnu/emacs/lisp} directory.
  26274. +     the @file{/ade/emacs/lisp} directory.
  26275.  
  26276.   produces
  26277.  
  26278. -     The `.el' files are in  the `/gnu/emacs/lisp' directory.
  26279. +     The `.el' files are in  the `/ade/emacs/lisp' directory.
  26280.  
  26281.  
  26282.  
  26283. diff -rup --new-file baseline/fsf/emacs18/lisp/amiga-init.el amiga/fsf/emacs18/lisp/amiga-init.el
  26284. --- baseline/fsf/emacs18/lisp/amiga-init.el    Wed Dec 31 17:00:00 1969
  26285. +++ amiga/fsf/emacs18/lisp/amiga-init.el    Sat Sep 28 00:00:00 1996
  26286. @@ -0,0 +1,206 @@
  26287. +(global-set-key "\C-z" 'amiga-iconify)
  26288. +(setq amiga-map (make-keymap))
  26289. +(global-set-key "\C-x\C-^" amiga-map)
  26290. +
  26291. +(load "amiga-mouse")
  26292. +(load "amiga-menu")
  26293. +
  26294. +(define-key amiga-map "A" 'previous-line)
  26295. +(define-key amiga-map "B" 'next-line)
  26296. +(define-key amiga-map "D" 'backward-char)
  26297. +(define-key amiga-map "C" 'forward-char)
  26298. +(define-key amiga-map "?~" 'info)
  26299. +(define-key amiga-map "T" 'scroll-down)
  26300. +(define-key amiga-map "S" 'scroll-up)
  26301. +(define-key amiga-map " @" 'forward-word)
  26302. +(define-key amiga-map " A" 'backward-word)
  26303. +(define-key amiga-map "\M-A" 'beginning-of-buffer)
  26304. +(define-key amiga-map "\M-B" 'end-of-buffer)
  26305. +(define-key amiga-map "\M-D" 'beginning-of-line)
  26306. +(define-key amiga-map "\M-C" 'end-of-line)
  26307. +(define-key amiga-map "\M- \M-@" 'forward-sexp)
  26308. +(define-key amiga-map "\M- \M-A" 'backward-sexp)
  26309. +(define-key amiga-map "\M-T" 'scroll-down-1)
  26310. +(define-key amiga-map "\M-S" 'scroll-up-1)
  26311. +; Keypad sequences are handled like normal ones
  26312. +(define-key amiga-map "K" 'do-nothing)
  26313. +
  26314. +(defun do-nothing () (interactive))
  26315. +
  26316. +(defun scroll-down-1 ()
  26317. +  "Move up one line on screen"
  26318. +  (interactive)
  26319. +  (scroll-down 1))
  26320. +
  26321. +(defun scroll-up-1 ()
  26322. +  "Move down one line on screen"
  26323. +  (interactive)
  26324. +  (scroll-up 1))
  26325. +
  26326. +;; ARexx stuff
  26327. +
  26328. +;;; This function needs to be re-written to handle rexx returned results.
  26329. +;;;
  26330. +(setq amiga-arexx-processing nil)
  26331. +(setq amiga-arexx-errors nil)
  26332. +
  26333. +(defvar amiga-arexx-failat 5
  26334. +  "Return level from which arexx commands returns cause errors")
  26335. +
  26336. +;;
  26337. +;; process incoming rexx messages
  26338. +;;
  26339. +(defun amiga-arexx-process ()
  26340. +  (interactive)
  26341. +  (if (not amiga-arexx-processing)
  26342. +      (progn
  26343. +    (setq amiga-arexx-processing t)
  26344. +    (condition-case nil ; Avoid blocking of processing in case of bugs
  26345. +        (let (arexxcmd)
  26346. +          (while (setq arexxcmd (amiga-arexx-get-next-msg))
  26347. +        (let ((rc 0) result)
  26348. +          (condition-case err ; detect errors in arexx command
  26349. +              (let ((expr (car (read-from-string arexxcmd))))
  26350. +            (setq result (prin1-to-string (eval expr))))
  26351. +            (error (progn
  26352. +                 (setq rc 20)
  26353. +                 (setq result (prin1-to-string err)))))
  26354. +          (amiga-arexx-reply rc result))))
  26355. +      (error nil))
  26356. +    (setq amiga-arexx-processing nil))))
  26357. +
  26358. +(defun amiga-arexx-wait-command (id)
  26359. +  "Waits for a pending ARexx commands (MSGID) to complete.
  26360. +Also processes any pending ARexx requests during this interval.
  26361. +returns the result list associated with this id, which takes the
  26362. +form: (msgid result-code error-or-string)
  26363. +``error-or-string'' depends on ``result-code''.
  26364. +if ``result-code'' is 0 the command finished successfully and
  26365. +``error-or-string'' will be a string or nil, otherwise the command
  26366. +returned with an error and ``error-or-string'' will be an interger
  26367. +that is the secondary error code of the arexx command."
  26368. +  (amiga-arexx-process)
  26369. +  (while (not (amiga-arexx-check-command id))
  26370. +    (amiga-arexx-wait)
  26371. +    (amiga-arexx-process))
  26372. +  (amiga-arexx-get-msg-results id))
  26373. +
  26374. +(defconst amiga-arexx-error-messages
  26375. +["No cause"
  26376. +"Program not found"
  26377. +"Execution halted"
  26378. +"Insufficient memory"
  26379. +"Invalid character"
  26380. +"Unmatched quote"
  26381. +"Unterminated comment"
  26382. +"Clause too long"
  26383. +"Invalid token"
  26384. +"Symbol or string too long"
  26385. +"Invalid message packet"
  26386. +"Command string error"
  26387. +"Error return from function"
  26388. +"Host environment not found"
  26389. +"Requested library not found"
  26390. +"Function not found"
  26391. +"Function did not return value"
  26392. +"Wrong number of arguments"
  26393. +"Invalid argument to function"
  26394. +"Invalid PROCEDURE"
  26395. +"Unexpected THEN or WHEN"
  26396. +"Unexpected ELSE or OTHERWISE"
  26397. +"Unexpected BREAK, LEAVE or ITERATE"
  26398. +"Invalid statement in SELECT"
  26399. +"Missing or multiple THEN"
  26400. +"Missing OTHERWISE"
  26401. +"Missing or unexpected END"
  26402. +"Symbol mismatch"
  26403. +"Invalid DO syntax"
  26404. +"Incomplete IF or SELECT"
  26405. +"Label not found"
  26406. +"Symbol expected"
  26407. +"Symbol or string expected"
  26408. +"Invalid keyword"
  26409. +"Required keyword missing"
  26410. +"Extraneous characters"
  26411. +"Keyword conflict"
  26412. +"Invalid template"
  26413. +"Invalid TRACE request"
  26414. +"Unitialized variable"
  26415. +"Invalid variable name"
  26416. +"Invalid expression"
  26417. +"Unbalanced parentheses"
  26418. +"Nesting limit exceeded"
  26419. +"Invalid expression result"
  26420. +"Expression required"
  26421. +"Boolean value not 0 or 1"
  26422. +"Arithmetic conversion error"
  26423. +"Invalid operand"
  26424. +]
  26425. +"The arexx error messages, sorted by number")
  26426. +
  26427. +(defun amiga-arexx-do-command (str as-file)
  26428. +  "Sends ARexx command STR (like amiga-arexx-send-command).
  26429. +If AS-FILE is true, STR is an arexx command, otherwise it is a file name.
  26430. +Waits for the command to return.  If the arexx command fails an error will
  26431. +be caused.
  26432. +
  26433. +If you would like to get result strings and errors (ie. not cause
  26434. +a lisp error) use: (amiga-arexx-do-command-with-results)"
  26435. +  (interactive "sARexx command:
  26436. +P")
  26437. +  (let ((id (amiga-arexx-send-command str as-file)))
  26438. +    (if (not id)
  26439. +    (error "Failed to send arexx command.")
  26440. +      (let ((reslist (amiga-arexx-wait-command id)))
  26441. +    (let ((rc (nth 1 reslist)) (second (nth 2 reslist)))
  26442. +      (if (> rc 0)
  26443. +          (progn            ; error
  26444. +        (let ((error-message
  26445. +               (if (< second (length amiga-arexx-error-messages))
  26446. +             (aref amiga-arexx-error-messages second)
  26447. +             (format nil "Unknown error %d" second))))
  26448. +          (error "Arexx command failed, level %d, cause %s" rc error-message))
  26449. +        reslist)
  26450. +      second))))))
  26451. +
  26452. +(defun amiga-arexx-do-command-with-results (str as-file)
  26453. +  "Sends ARexx command STR (like amiga-arexx-do-command).
  26454. +If AS-FILE is true, STR is an arexx command, otherwise it is a file name.
  26455. +Waits for the command to return.
  26456. +
  26457. +The return value is one of three things:
  26458. + - the command executed succesfully: nil or a result string.
  26459. + - the command failed: a list of the form (RC ERROR-CODE)
  26460. +   where RC is the severity and ERROR-CODE is the secondary error."
  26461. +  (interactive "sARexx command:
  26462. +P")
  26463. +  (let ((id (amiga-arexx-send-command str as-file)))
  26464. +    (if (not id)
  26465. +    (error "Failed to send arexx command.")
  26466. +      (let ((reslist (amiga-arexx-wait-command id)))
  26467. +    (let ((rc (nth 1 reslist)) (second (nth 2 reslist)))
  26468. +      (if (and rc (> rc 0))
  26469. +          (list rc second)
  26470. +        second))))))
  26471. +
  26472. +(define-key amiga-map "X" 'amiga-arexx-process)
  26473. +(setq amiga-arexx-initialized t) ;; ARexx commands can now be processed.
  26474. +
  26475. +(defun amiga-wb-process ()
  26476. +  "Process all pending workbench events, ie load all files requested"
  26477. +  (interactive)
  26478. +  (let (file)
  26479. +    (condition-case nil
  26480. +    (while (setq file (amiga-get-wb-event t))
  26481. +      (condition-case nil
  26482. +          (find-file file)
  26483. +        (error nil)))
  26484. +      (error nil))))
  26485. +
  26486. +(define-key amiga-map "W" 'amiga-wb-process)
  26487. +(setq amiga-wb-initialized t) ;; WB events can now be processed.
  26488. +
  26489. +(setq completion-ignore-case t)
  26490. +;; Default is no numbered versions on Amiga, because directory searches are too
  26491. +;; slow.
  26492. +(setq version-control 'never)
  26493. Binary files baseline/fsf/emacs18/lisp/amiga-init.elc and amiga/fsf/emacs18/lisp/amiga-init.elc differ
  26494. diff -rup --new-file baseline/fsf/emacs18/lisp/amiga-menu.el amiga/fsf/emacs18/lisp/amiga-menu.el
  26495. --- baseline/fsf/emacs18/lisp/amiga-menu.el    Wed Dec 31 17:00:00 1969
  26496. +++ amiga/fsf/emacs18/lisp/amiga-menu.el    Sat Sep 28 00:00:00 1996
  26497. @@ -0,0 +1,135 @@
  26498. +;(provide 'amiga-menu)
  26499. +
  26500. +(defconst amiga-menu-pick (char-to-string 3))
  26501. +(defconst amiga-menu-help (char-to-string 7))
  26502. +
  26503. +(defvar amiga-menus-description nil
  26504. +  "Variable containing the menus setup for Emacs")
  26505. +
  26506. +(defun amiga-menus-set (menus)
  26507. +  "Setup menus for emacs (parameter as for amiga-menus)"
  26508. +  (define-key mouse-map amiga-menu-pick 'amiga-menus-dispatch)
  26509. +  (define-key mouse-map amiga-menu-help 'amiga-menus-help)
  26510. +  (setq amiga-menus-description menus)
  26511. +  (amiga-menus menus))
  26512. +
  26513. +(defun amiga-menus-dispatch (selection)
  26514. +  (let* ((menu (car selection))
  26515. +     (item (cadr selection))
  26516. +     (code (cadr (nth item (cadr (nth menu amiga-menus-description))))))
  26517. +    (if (and (listp code) (eq (car code) 'call-interactively)
  26518. +         (listp (cadr code)) (eq (car (cadr code)) 'quote))
  26519. +    (setq this-command (cadr (cadr code))))
  26520. +    (eval code)))
  26521. +
  26522. +(defun amiga-menus-help (selection)
  26523. +  (let* ((menu (car selection))
  26524. +     (item (cadr selection))
  26525. +     (cmd (cadr (nth item (cadr (nth menu amiga-menus-description))))))
  26526. +    (if (and (listp cmd) (eq (car cmd) 'call-interactively)
  26527. +         (listp (car (cdr cmd))) (eq (car (car (cdr cmd))) 'quote))
  26528. +    (describe-function (car (cdr (car (cdr cmd)))))
  26529. +    (error "Don't know how to describe %s" cmd))))
  26530. +
  26531. +(defun make-explicit-string (str)
  26532. +  (if (and (>= (length str) 2) (= (elt str 0) 27) (< (elt str 1) 128))
  26533. +      (key-description (concat (char-to-string (+ 128 (elt str 1)))
  26534. +                   (substring str 2)))
  26535. +      (key-description str)))
  26536. +
  26537. +(defun make-command-name (command str width)
  26538. +  (let ((keys (where-is-internal command nil t))
  26539. +    (string (if str str (symbol-name command))))
  26540. +    (if keys
  26541. +    (format (if width (format "%%-%ds%%s" (+ width 2)) "%s (%s)")
  26542. +        string (make-explicit-string keys))
  26543. +    string)))
  26544. +
  26545. +(defun menu-items (commands proportional)
  26546. +  (let* ((width (if proportional nil 0))
  26547. +     (names (mapcar
  26548. +         (function (lambda (cmd)
  26549. +                 (if cmd
  26550. +                 (let* ((name (if (symbolp cmd)
  26551. +                          (symbol-name cmd)
  26552. +                          (car cmd)))
  26553. +                    (len (length name)))
  26554. +                   (if (and (not proportional) (> len width))
  26555. +                       (setq width len))
  26556. +                   name))))
  26557. +         commands)))
  26558. +    (mapcar
  26559. +     (function (lambda (cmd)
  26560. +         (let ((name (car names)))
  26561. +           (setq names (cdr names))
  26562. +           (if cmd
  26563. +               (let ((command (if (symbolp cmd) cmd (cadr cmd))))
  26564. +             (list (make-command-name command name width)
  26565. +                   (list 'call-interactively (list 'quote command))
  26566. +                   (caddr cmd)))))))
  26567. +     commands)))
  26568. +
  26569. +(defun convert-menu-buffer (proportional)
  26570. +  "Convert the current buffer into a loadable menu file for emacs.\n\
  26571. +If PROPORTIONAL is true (or if a prefix arg is given), assume menu is in a \n\
  26572. +proportional font & present it differently."
  26573. +  (interactive "P")
  26574. +  (save-buffer)
  26575. +  (widen)
  26576. +  (goto-char 1)
  26577. +  (let ((menu-spec (reverse (read (current-buffer))))
  26578. +    menu-code)
  26579. +    (while menu-spec
  26580. +      (let ((menu-item (car menu-spec)))
  26581. +    (setq menu-code
  26582. +          (cons (list (car menu-item)
  26583. +              (menu-items (cdr menu-item) proportional))
  26584. +            menu-code))
  26585. +    (setq menu-spec (cdr menu-spec))))
  26586. +    (let ((new-buf
  26587. +       (find-file (concat
  26588. +               (substring (buffer-file-name) 0
  26589. +                  (string-match "\\.menu$" (buffer-file-name)))
  26590. +               ".el"))))
  26591. +      (erase-buffer)
  26592. +      (prin1 (list 'amiga-menus-set (list 'quote menu-code)) (current-buffer))
  26593. +      (beginning-of-buffer))))
  26594. +
  26595. +(defvar menu-mode-syntax-table nil
  26596. +  "Syntax table used while in menu mode.")
  26597. +
  26598. +(defvar menu-mode-abbrev-table nil
  26599. +  "Abbrev table used while in menu mode.")
  26600. +(define-abbrev-table 'menu-mode-abbrev-table ())
  26601. +
  26602. +(if menu-mode-syntax-table
  26603. +    ()
  26604. +  (setq menu-mode-syntax-table (make-syntax-table))
  26605. +  (modify-syntax-entry ?' "w   " menu-mode-syntax-table))
  26606. +
  26607. +(defvar menu-mode-map ())
  26608. +(if menu-mode-map
  26609. +    ()
  26610. +  (setq menu-mode-map (make-sparse-keymap))
  26611. +  (define-key menu-mode-map "\t" 'indent-relative)
  26612. +  (define-key menu-mode-map "\C-c\C-c" 'convert-menu-buffer))
  26613. +
  26614. +(defun menu-mode ()
  26615. +  "Major mode for editing menus intended for humans to read.
  26616. +Indentation works like in indented-text-mode. This could be improved.\\{menu-mode-map}
  26617. +Turning on menu-mode calls the value of the variable menu-mode-hook,
  26618. +if that value is non-nil."
  26619. +  (interactive)
  26620. +  (kill-all-local-variables)
  26621. +  (use-local-map menu-mode-map)
  26622. +  (define-abbrev-table 'menu-mode-abbrev-table ())
  26623. +  (setq local-abbrev-table menu-mode-abbrev-table)
  26624. +  (set-syntax-table menu-mode-syntax-table)
  26625. +  (make-local-variable 'indent-line-function)
  26626. +  (setq indent-line-function 'indent-relative-maybe)
  26627. +  (use-local-map menu-mode-map)
  26628. +  (setq mode-name "Menu")
  26629. +  (setq major-mode 'menu-mode)
  26630. +  (run-hooks 'menu-mode-hook))
  26631. +
  26632. +(setq auto-mode-alist (cons '("\\.menu$" . menu-mode) auto-mode-alist))
  26633. Binary files baseline/fsf/emacs18/lisp/amiga-menu.elc and amiga/fsf/emacs18/lisp/amiga-menu.elc differ
  26634. diff -rup --new-file baseline/fsf/emacs18/lisp/amiga-mouse.el amiga/fsf/emacs18/lisp/amiga-mouse.el
  26635. --- baseline/fsf/emacs18/lisp/amiga-mouse.el    Wed Dec 31 17:00:00 1969
  26636. +++ amiga/fsf/emacs18/lisp/amiga-mouse.el    Sat Sep 28 00:00:00 1996
  26637. @@ -0,0 +1,276 @@
  26638. +;; Mouse support for Amiga Intuition window system.
  26639. +;; Copyright (C) 1985, 1987 Free Software Foundation, Inc.
  26640. +
  26641. +;; This file is part of GNU Emacs.
  26642. +
  26643. +;; GNU Emacs is distributed in the hope that it will be useful,
  26644. +;; but WITHOUT ANY WARRANTY.  No author or distributor
  26645. +;; accepts responsibility to anyone for the consequences of using it
  26646. +;; or for whether it serves any particular purpose or works at all,
  26647. +;; unless he says so in writing.  Refer to the GNU Emacs General Public
  26648. +;; License for full details.
  26649. +
  26650. +;; Everyone is granted permission to copy, modify and redistribute
  26651. +;; GNU Emacs, but only under the conditions described in the
  26652. +;; GNU Emacs General Public License.   A copy of this license is
  26653. +;; supposed to have been given to you along with GNU Emacs so you
  26654. +;; can know your rights and responsibilities.  It should be in a
  26655. +;; file named COPYING.  Among other things, the copyright notice
  26656. +;; and this notice must be preserved on all copies.
  26657. +
  26658. +(provide 'amiga-mouse)
  26659. +
  26660. +(defconst amiga-button-right (char-to-string 0))
  26661. +(defconst amiga-button-middle (char-to-string 1))
  26662. +(defconst amiga-button-left (char-to-string 2))
  26663. +
  26664. +(defconst amiga-button-right-up (char-to-string 4))
  26665. +(defconst amiga-button-middle-up (char-to-string 5))
  26666. +(defconst amiga-button-left-up (char-to-string 6))
  26667. +
  26668. +(defconst amiga-button-s-right (char-to-string 16))
  26669. +(defconst amiga-button-s-middle (char-to-string 17))
  26670. +(defconst amiga-button-s-left (char-to-string 18))
  26671. +
  26672. +(defconst amiga-button-s-right-up (char-to-string 20))
  26673. +(defconst amiga-button-s-middle-up (char-to-string 21))
  26674. +(defconst amiga-button-s-left-up (char-to-string 22))
  26675. +
  26676. +(defconst amiga-button-m-right (char-to-string 32))
  26677. +(defconst amiga-button-m-middle (char-to-string 33))
  26678. +(defconst amiga-button-m-left (char-to-string 34))
  26679. +
  26680. +(defconst amiga-button-m-right-up (char-to-string 36))
  26681. +(defconst amiga-button-m-middle-up (char-to-string 37))
  26682. +(defconst amiga-button-m-left-up (char-to-string 38))
  26683. +
  26684. +(defconst amiga-button-c-right (char-to-string 64))
  26685. +(defconst amiga-button-c-middle (char-to-string 65))
  26686. +(defconst amiga-button-c-left (char-to-string 66))
  26687. +
  26688. +(defconst amiga-button-c-right-up (char-to-string 68))
  26689. +(defconst amiga-button-c-middle-up (char-to-string 69))
  26690. +(defconst amiga-button-c-left-up (char-to-string 70))
  26691. +
  26692. +(defconst amiga-button-m-s-right (char-to-string 48))
  26693. +(defconst amiga-button-m-s-middle (char-to-string 49))
  26694. +(defconst amiga-button-m-s-left (char-to-string 50))
  26695. +
  26696. +(defconst amiga-button-m-s-right-up (char-to-string 52))
  26697. +(defconst amiga-button-m-s-middle-up (char-to-string 53))
  26698. +(defconst amiga-button-m-s-left-up (char-to-string 54))
  26699. +
  26700. +(defconst amiga-button-c-s-right (char-to-string 80))
  26701. +(defconst amiga-button-c-s-middle (char-to-string 81))
  26702. +(defconst amiga-button-c-s-left (char-to-string 82))
  26703. +
  26704. +(defconst amiga-button-c-s-right-up (char-to-string 84))
  26705. +(defconst amiga-button-c-s-middle-up (char-to-string 85))
  26706. +(defconst amiga-button-c-s-left-up (char-to-string 86))
  26707. +
  26708. +(defconst amiga-button-c-m-right (char-to-string 96))
  26709. +(defconst amiga-button-c-m-middle (char-to-string 97))
  26710. +(defconst amiga-button-c-m-left (char-to-string 98))
  26711. +
  26712. +(defconst amiga-button-c-m-right-up (char-to-string 100))
  26713. +(defconst amiga-button-c-m-middle-up (char-to-string 101))
  26714. +(defconst amiga-button-c-m-left-up (char-to-string 102))
  26715. +
  26716. +(defconst amiga-button-c-m-s-right (char-to-string 112))
  26717. +(defconst amiga-button-c-m-s-middle (char-to-string 113))
  26718. +(defconst amiga-button-c-m-s-left (char-to-string 114))
  26719. +
  26720. +(defconst amiga-button-c-m-s-right-up (char-to-string 116))
  26721. +(defconst amiga-button-c-m-s-middle-up (char-to-string 117))
  26722. +(defconst amiga-button-c-m-s-left-up (char-to-string 118))
  26723. +
  26724. +(defmacro cadr (x) (list 'car (list 'cdr x)))
  26725. +(defmacro caddr (x) (list 'car (list 'cdr (list 'cdr x))))
  26726. +(defmacro cadddr (x) (list 'car (list 'cdr (list 'cdr (list 'cdr x)))))
  26727. +
  26728. +(defun coordinates-in-window-p (arg w)
  26729. +  (let ((x (car arg))
  26730. +    (y (cadr arg))
  26731. +    (edges (window-edges w)))
  26732. +    (and (>= x (car edges)) (< x (caddr edges))
  26733. +     (>= y (cadr edges)) (< y (cadddr edges))
  26734. +     (list (- x (car edges)) (- y (cadr edges))))))
  26735. +
  26736. +(defvar amiga-process-mouse-hook nil
  26737. +  "Hook to run after each mouse event is processed.  Should take two
  26738. +arguments; the first being a list (XPOS YPOS) corresponding to character
  26739. +offset from top left of screen and the second being a specifier for the
  26740. +buttons/keys.
  26741. +
  26742. +This will normally be set on a per-buffer basis.")
  26743. +
  26744. +(defun amiga-flush-mouse-queue () 
  26745. +  "Process all queued mouse events."
  26746. +  ;; A mouse event causes a special character sequence to be given
  26747. +  ;; as keyboard input.  That runs this function, which process all
  26748. +  ;; queued mouse events and returns.
  26749. +  (interactive)
  26750. +  (while (> (amiga-mouse-events) 0)
  26751. +    (amiga-proc-mouse-event)
  26752. +    (and (boundp 'amiga-process-mouse-hook)
  26753. +     (symbol-value 'amiga-process-mouse-hook)
  26754. +     (funcall amiga-process-mouse-hook amiga-mouse-pos amiga-mouse-item))))
  26755. +
  26756. +(defun amiga-mouse-select (arg)
  26757. +  "Select Emacs window the mouse is on."
  26758. +  (let ((start-w (selected-window))
  26759. +    (done nil)
  26760. +    (w (selected-window))
  26761. +    (rel-coordinate nil))
  26762. +    (if (eq start-w (minibuffer-window))
  26763. +    (setq rel-coordinate (coordinates-in-window-p arg w))
  26764. +    (while (and (not done)
  26765. +            (null (setq rel-coordinate
  26766. +                (coordinates-in-window-p arg w))))
  26767. +      (setq w (next-window w))
  26768. +      (if (eq w start-w)
  26769. +          (setq done t))))
  26770. +    (select-window w)
  26771. +    rel-coordinate))
  26772. +
  26773. +(defun amiga-mouse-keep-one-window (arg)
  26774. +  "Select Emacs window mouse is on, then kill all other Emacs windows."
  26775. +  (if (amiga-mouse-select arg)
  26776. +      (delete-other-windows)))
  26777. +
  26778. +(defun amiga-mouse-select-and-split (arg)
  26779. +  "Select Emacs window mouse is on, then split it vertically in half."
  26780. +  (if (amiga-mouse-select arg)
  26781. +      (split-window-vertically nil)))
  26782. +
  26783. +
  26784. +(defun amiga-mouse-set-point (arg)
  26785. +  "Select Emacs window mouse is on, and move point to mouse position."
  26786. +  (let* ((relative-coordinate (amiga-mouse-select arg))
  26787. +     margin-column
  26788. +     (rel-x (car relative-coordinate))
  26789. +     (rel-y (car (cdr relative-coordinate))))
  26790. +    (if relative-coordinate
  26791. +    (let ((prompt-width (if (eq (selected-window) (minibuffer-window))
  26792. +                minibuffer-prompt-width 0)))
  26793. +      (move-to-window-line rel-y)
  26794. +      (setq margin-column
  26795. +        (if (or truncate-lines (> (window-hscroll) 0))
  26796. +            (current-column)
  26797. +          ;; If we are using line continuation,
  26798. +          ;; compensate if first character on a continuation line
  26799. +          ;; does not start precisely at the margin.
  26800. +          (- (current-column)
  26801. +             (% (current-column) (1- (window-width))))))
  26802. +      (move-to-column (+ rel-x (1- (max 1 (window-hscroll)))
  26803. +                 (if (= (point) 1)
  26804. +                 (- prompt-width) 0)
  26805. +                 margin-column))))))
  26806. +
  26807. +(defun amiga-mouse-set-mark (arg)
  26808. +  "Select Emacs window mouse is on, and set mark at mouse position.
  26809. +Display cursor at that position for a second."
  26810. +  (if (amiga-mouse-select arg)
  26811. +      (let ((point-save (point)))
  26812. +    (unwind-protect
  26813. +        (progn (amiga-mouse-set-point arg)
  26814. +           (push-mark nil t)
  26815. +           (sit-for 1))
  26816. +      (goto-char point-save)))))
  26817. +
  26818. +(defun amiga-mouse-cut (arg)
  26819. +  "Select Emacs window mouse is on, and set mark at mouse position. 
  26820. +Display cursor at that position for a second. Then cut."
  26821. +  (if (amiga-mouse-select arg)
  26822. +      (let ((point-save (point)))
  26823. +    (unwind-protect
  26824. +        (progn (amiga-mouse-set-point arg)
  26825. +           (push-mark nil t)
  26826. +           (kill-region point-save (point))
  26827. +           (sit-for 1))
  26828. +      (goto-char point-save)))))
  26829. +
  26830. +(defun amiga-mouse-copy (arg)
  26831. +  "Select Emacs window mouse is on, and set mark at mouse position. 
  26832. +Display cursor at that position for a second. Then copy."
  26833. +  (if (amiga-mouse-select arg)
  26834. +      (let ((point-save (point)))
  26835. +    (unwind-protect
  26836. +        (progn (amiga-mouse-set-point arg)
  26837. +           (push-mark nil t)
  26838. +           (copy-region-as-kill point-save (point))
  26839. +           (sit-for 1))
  26840. +      (goto-char point-save)))))
  26841. +
  26842. +(defun amiga-mouse-paste (arg)
  26843. +  "Move point to mouse position (and select window), then paste."
  26844. +  (if (amiga-mouse-select arg)
  26845. +      (progn
  26846. +    (amiga-mouse-set-point arg)
  26847. +    (yank))))
  26848. +
  26849. +(defun amiga-mouse-iconify (arg) (amiga-iconify))
  26850. +
  26851. +(defun amiga-mouse-ignore (arg)
  26852. +  "Don't do anything.")
  26853. +
  26854. +; Prevent beeps. on button-up.  If the button isn't bound to anything, it
  26855. +(define-key mouse-map amiga-button-right 'amiga-mouse-ignore)
  26856. +(define-key mouse-map amiga-button-middle 'amiga-mouse-ignore)
  26857. +(define-key mouse-map amiga-button-left 'amiga-mouse-ignore)
  26858. +(define-key mouse-map amiga-button-right-up 'amiga-mouse-ignore)
  26859. +(define-key mouse-map amiga-button-middle-up 'amiga-mouse-ignore)
  26860. +(define-key mouse-map amiga-button-left-up 'amiga-mouse-ignore)
  26861. +(define-key mouse-map amiga-button-s-right 'amiga-mouse-ignore)
  26862. +(define-key mouse-map amiga-button-s-middle 'amiga-mouse-ignore)
  26863. +(define-key mouse-map amiga-button-s-left 'amiga-mouse-ignore)
  26864. +(define-key mouse-map amiga-button-s-right-up 'amiga-mouse-ignore)
  26865. +(define-key mouse-map amiga-button-s-middle-up 'amiga-mouse-ignore)
  26866. +(define-key mouse-map amiga-button-s-left-up 'amiga-mouse-ignore)
  26867. +(define-key mouse-map amiga-button-m-right 'amiga-mouse-ignore)
  26868. +(define-key mouse-map amiga-button-m-middle 'amiga-mouse-ignore)
  26869. +(define-key mouse-map amiga-button-m-left 'amiga-mouse-ignore)
  26870. +(define-key mouse-map amiga-button-m-right-up 'amiga-mouse-ignore)
  26871. +(define-key mouse-map amiga-button-m-middle-up 'amiga-mouse-ignore)
  26872. +(define-key mouse-map amiga-button-m-left-up 'amiga-mouse-ignore)
  26873. +(define-key mouse-map amiga-button-c-right 'amiga-mouse-ignore)
  26874. +(define-key mouse-map amiga-button-c-middle 'amiga-mouse-ignore)
  26875. +(define-key mouse-map amiga-button-c-left 'amiga-mouse-ignore)
  26876. +(define-key mouse-map amiga-button-c-right-up 'amiga-mouse-ignore)
  26877. +(define-key mouse-map amiga-button-c-middle-up 'amiga-mouse-ignore)
  26878. +(define-key mouse-map amiga-button-c-left-up 'amiga-mouse-ignore)
  26879. +(define-key mouse-map amiga-button-m-s-right 'amiga-mouse-ignore)
  26880. +(define-key mouse-map amiga-button-m-s-middle 'amiga-mouse-ignore)
  26881. +(define-key mouse-map amiga-button-m-s-left 'amiga-mouse-ignore)
  26882. +(define-key mouse-map amiga-button-m-s-right-up 'amiga-mouse-ignore)
  26883. +(define-key mouse-map amiga-button-m-s-middle-up 'amiga-mouse-ignore)
  26884. +(define-key mouse-map amiga-button-m-s-left-up 'amiga-mouse-ignore)
  26885. +(define-key mouse-map amiga-button-c-s-right 'amiga-mouse-ignore)
  26886. +(define-key mouse-map amiga-button-c-s-middle 'amiga-mouse-ignore)
  26887. +(define-key mouse-map amiga-button-c-s-left 'amiga-mouse-ignore)
  26888. +(define-key mouse-map amiga-button-c-s-right-up 'amiga-mouse-ignore)
  26889. +(define-key mouse-map amiga-button-c-s-middle-up 'amiga-mouse-ignore)
  26890. +(define-key mouse-map amiga-button-c-s-left-up 'amiga-mouse-ignore)
  26891. +(define-key mouse-map amiga-button-c-m-right 'amiga-mouse-ignore)
  26892. +(define-key mouse-map amiga-button-c-m-middle 'amiga-mouse-ignore)
  26893. +(define-key mouse-map amiga-button-c-m-left 'amiga-mouse-ignore)
  26894. +(define-key mouse-map amiga-button-c-m-right-up 'amiga-mouse-ignore)
  26895. +(define-key mouse-map amiga-button-c-m-middle-up 'amiga-mouse-ignore)
  26896. +(define-key mouse-map amiga-button-c-m-left-up 'amiga-mouse-ignore)
  26897. +(define-key mouse-map amiga-button-c-m-s-right 'amiga-mouse-ignore)
  26898. +(define-key mouse-map amiga-button-c-m-s-middle 'amiga-mouse-ignore)
  26899. +(define-key mouse-map amiga-button-c-m-s-left 'amiga-mouse-ignore)
  26900. +(define-key mouse-map amiga-button-c-m-s-right-up 'amiga-mouse-ignore)
  26901. +(define-key mouse-map amiga-button-c-m-s-middle-up 'amiga-mouse-ignore)
  26902. +(define-key mouse-map amiga-button-c-m-s-left-up 'amiga-mouse-ignore)
  26903. +
  26904. +; Define a few events
  26905. +(define-key mouse-map amiga-button-left 'amiga-mouse-set-point)
  26906. +(define-key mouse-map amiga-button-s-left 'amiga-mouse-set-mark)
  26907. +(define-key mouse-map amiga-button-c-left 'amiga-mouse-cut)
  26908. +(define-key mouse-map amiga-button-m-left 'amiga-mouse-copy)
  26909. +(define-key mouse-map amiga-button-middle 'amiga-mouse-paste)
  26910. +(define-key mouse-map amiga-button-s-middle 'amiga-mouse-iconify)
  26911. +
  26912. +(define-key amiga-map "M" 'amiga-flush-mouse-queue)
  26913. +(setq amiga-mouse-initialized t)  ;; Mouse commands can now be processed.
  26914. Binary files baseline/fsf/emacs18/lisp/amiga-mouse.elc and amiga/fsf/emacs18/lisp/amiga-mouse.elc differ
  26915. diff -rup --new-file baseline/fsf/emacs18/lisp/compile.el amiga/fsf/emacs18/lisp/compile.el
  26916. --- baseline/fsf/emacs18/lisp/compile.el    Fri Aug 14 15:53:00 1992
  26917. +++ amiga/fsf/emacs18/lisp/compile.el    Sat Sep 28 00:00:00 1996
  26918. @@ -43,7 +43,7 @@ the next time the list of errors is want
  26919.  ;; The filename excludes colons to avoid confusion when error message
  26920.  ;; starts with digits.
  26921.  (defvar compilation-error-regexp
  26922. -  "\\([^ :\n]+\\(: *\\|, line \\|(\\)[0-9]+\\)\\|\\([0-9]+ *of *[^ \n]+\\)"
  26923. +  "^\\([^ :\e]+\\([ :] *\\|, line \\|(\\)[0-9]+\\)\\|\\([0-9]+ *of *[^ \n]+\\)"
  26924.    "Regular expression for filename/linenumber in error in compilation log.")
  26925.  
  26926.  (defun compile (command)
  26927. @@ -61,7 +61,8 @@ and move to the source code that caused 
  26928.  While grep runs asynchronously, you can use the \\[next-error] command
  26929.  to find the text that grep hits refer to."
  26930.    (interactive "sRun grep (with args): ")
  26931. -  (compile1 (concat "grep -n " command " /dev/null")
  26932. +  (compile1 (concat "grep -n " command (if (eq system-type 'amigaos) " nil:"
  26933. +                     " /dev/null"))
  26934.          "No more grep hits" "grep"))
  26935.  
  26936.  (defun compile1 (command error-message &optional name-of-mode)
  26937. @@ -195,7 +196,13 @@ means reparse the error message buffer a
  26938.      (let* ((pop-up-windows t)
  26939.         (w (display-buffer (marker-buffer (car next-error)))))
  26940.        (set-window-point w (car next-error))
  26941. -      (set-window-start w (car next-error)))
  26942. +      (if compilation-parse-sasc
  26943. +      (let ((thiswin (selected-window)))
  26944. +        (select-window w)
  26945. +        (vertical-motion -1)
  26946. +        (set-window-start w (point))
  26947. +        (select-window thiswin))
  26948. +    (set-window-start w (car next-error))))
  26949.      (set-marker (car next-error) nil)))
  26950.  
  26951.  ;; Set compilation-error-list to nil, and
  26952. @@ -222,6 +229,8 @@ The function next-error, assigned to \\[
  26953.  and visits its location."
  26954.    (setq compilation-error-list nil)
  26955.    (message "Parsing error messages...")
  26956. +  (goto-char (point-min))
  26957. +  (setq compilation-parse-sasc (search-forward "SAS/C" nil t))
  26958.    (let (text-buffer
  26959.      last-filename last-linenum)
  26960.      ;; Don't reparse messages already seen at last parse.
  26961. Binary files baseline/fsf/emacs18/lisp/compile.elc and amiga/fsf/emacs18/lisp/compile.elc differ
  26962. diff -rup --new-file baseline/fsf/emacs18/lisp/files.el amiga/fsf/emacs18/lisp/files.el
  26963. --- baseline/fsf/emacs18/lisp/files.el    Sun Oct 11 15:27:38 1992
  26964. +++ amiga/fsf/emacs18/lisp/files.el    Sat Sep 28 00:00:00 1996
  26965. @@ -141,6 +141,16 @@ This applies when the local-variables li
  26966.  after you find a file.  If you explicitly request such a scan with
  26967.  \\[normal-mode], there is no query, regardless of this variable.")
  26968.  
  26969. +(defconst backup-char (if (eq system-type 'amigaos) "!" "~")
  26970. +  "Character to add to file names to make backup names.")
  26971. +
  26972. +(defconst autosave-char (if (eq system-type 'amigaos) "@" "#")
  26973. +  "Character to add to file names to make autosave names.")
  26974. +
  26975. +(defconst bufferfile-char (if (eq system-type 'amigaos) "^" "%")
  26976. +  "Character to add to buffer names to make file names.")
  26977. +
  26978. +
  26979.  ;; Avoid losing in versions where CLASH_DETECTION is disabled.
  26980.  (or (fboundp 'lock-buffer)
  26981.      (fset 'lock-buffer 'ignore))
  26982. @@ -380,7 +390,8 @@ for the \"mode:\" local variable.  For t
  26983.        (funcall (intern (concat (downcase mode) "-mode")))
  26984.      (let ((alist auto-mode-alist)
  26985.            (name buffer-file-name))
  26986. -      (let ((case-fold-search (eq system-type 'vax-vms)))
  26987. +      (let ((case-fold-search (or (eq system-type 'amigaos)
  26988. +                      (eq system-type 'vax-vms))))
  26989.          ;; Remove backup-suffixes from file name.
  26990.          (setq name (file-name-sans-versions name))
  26991.          ;; Find first matching alist entry.
  26992. @@ -559,8 +570,11 @@ of the new file to agree with the old mo
  26993.          (setq setmodes (file-modes backupname)))
  26994.          (file-error
  26995.           ;; If trouble writing the backup, write it in ~.
  26996. -         (setq backupname (expand-file-name "~/%backup%~"))
  26997. -         (message "Cannot write backup file; backing up in ~/%%backup%%~")
  26998. +         (setq backupname
  26999. +           (expand-file-name (concat "~/" bufferfile-char "backup"
  27000. +                         bufferfile-char backup-char)))
  27001. +         (message "Cannot write backup file; backing up in ~/%sbackup%s%s"
  27002. +              bufferfile-char bufferfile-char backup-char)
  27003.           (sleep-for 1)
  27004.           (condition-case ()
  27005.           (delete-file backupname)
  27006. @@ -588,18 +602,19 @@ redefine it."
  27007.           (or (string-match ";[0-9]*\\'" name)
  27008.               (and (string-match "\\." name (string-match "[]>]" name))
  27009.                (string-match "\\.[0-9]*\\'" name (match-end 0))))
  27010. -           (string-match "\\(\\.~[0-9]+\\)?~\\'" name))))
  27011. +           (string-match (concat "\\(\\." backup-char "[0-9]+\\)?"
  27012. +                     backup-char "\\'") name))))
  27013.  
  27014.  (defun make-backup-file-name (file)
  27015.    "Create the non-numeric backup file name for FILE.
  27016.  This is a separate function so you can redefine it for customization."
  27017. -  (concat file "~"))
  27018. +  (concat file backup-char))
  27019.  
  27020.  (defun backup-file-name-p (file)
  27021.    "Return non-nil if FILE is a backup file name (numeric or not).
  27022.  This is a separate function so you can redefine it for customization.
  27023.  You may need to redefine file-name-sans-versions as well."
  27024. -  (string-match "~$" file))
  27025. +  (string-match (concat backup-char "$") file))
  27026.  
  27027.  ;; I believe there is no need to alter this behavior for VMS;
  27028.  ;; since backup files are not made on VMS, it should not get called.
  27029. @@ -609,7 +624,7 @@ Value is a list whose car is the name fo
  27030.   and whose cdr is a list of old versions to consider deleting now."
  27031.    (if (eq version-control 'never)
  27032.        (list (make-backup-file-name fn))
  27033. -    (let* ((base-versions (concat (file-name-nondirectory fn) ".~"))
  27034. +    (let* ((base-versions (concat (file-name-nondirectory fn) "." backup-char))
  27035.         (bv-length (length base-versions))
  27036.         (possibilities (file-name-all-completions
  27037.                 base-versions
  27038. @@ -626,20 +641,21 @@ Value is a list whose car is the name fo
  27039.                  kept-old-versions kept-new-versions -1)))
  27040.        (if (not deserve-versions-p)
  27041.        (list (make-backup-file-name fn))
  27042. -    (cons (concat fn ".~" (int-to-string (1+ high-water-mark)) "~")
  27043. +    (cons (concat fn "." backup-char (int-to-string (1+ high-water-mark))
  27044. +              backup-char)
  27045.            (if (and (> number-to-delete 0)
  27046.                 ;; Delete nothing if there is overflow
  27047.                 ;; in the number of versions to keep.
  27048.                 (>= (+ kept-new-versions kept-old-versions -1) 0))
  27049.            (mapcar (function (lambda (n)
  27050. -                      (concat fn ".~"
  27051. -                          (int-to-string n) "~")))
  27052. +                      (concat fn "." backup-char
  27053. +                          (int-to-string n) backup-char)))
  27054.                (let ((v (nthcdr kept-old-versions versions)))
  27055.                  (rplacd (nthcdr (1- number-to-delete) v) ())
  27056.                  v))))))))
  27057.  
  27058.  (defun backup-extract-version (fn)
  27059. -  (if (and (string-match "[0-9]+~$" fn bv-length)
  27060. +  (if (and (string-match (concat "[0-9]+" backup-char "$") fn bv-length)
  27061.         (= (match-beginning 0) bv-length))
  27062.        (string-to-int (substring fn bv-length -1))
  27063.        0))
  27064. @@ -741,7 +757,7 @@ if variable  delete-auto-save-files  is 
  27065.                 ;; If file is precious, rename it away before
  27066.                 ;; overwriting it.
  27067.                 (let ((rename t) nodelete
  27068. -                 (file (concat buffer-file-name "#")))
  27069. +                 (file (concat buffer-file-name autosave-char)))
  27070.               (condition-case ()
  27071.                   (progn (rename-file buffer-file-name file t)
  27072.                      (setq setmodes (file-modes file)))
  27073. @@ -774,6 +790,9 @@ if variable  delete-auto-save-files  is 
  27074.                  ;; Change the mode back, after writing.
  27075.                  (setq setmodes (file-modes buffer-file-name))
  27076.                  (set-file-modes buffer-file-name 511)))
  27077. +             (if (eq system-type 'amigaos)
  27078. +             (if amiga-create-icons
  27079. +                 (amiga-put-icon buffer-file-name nil)))
  27080.               (write-region (point-min) (point-max) 
  27081.                     buffer-file-name nil t)))))
  27082.        (if setmodes
  27083. @@ -983,16 +1002,17 @@ You can redefine this for customization.
  27084.  See also auto-save-file-name-p."
  27085.    (if buffer-file-name
  27086.        (concat (file-name-directory buffer-file-name)
  27087. -          "#"
  27088. +          autosave-char
  27089.            (file-name-nondirectory buffer-file-name)
  27090. -          "#")
  27091. -    (expand-file-name (concat "#%" (buffer-name) "#"))))
  27092. +          autosave-char)
  27093. +    (expand-file-name (concat autosave-char bufferfile-char (buffer-name)
  27094. +                  autosave-char))))
  27095.  
  27096.  (defun auto-save-file-name-p (filename)
  27097.    "Return non-nil if FILENAME can be yielded by make-auto-save-file-name.
  27098.  FILENAME should lack slashes.
  27099.  You can redefine this for customization."
  27100. -  (string-match "^#.*#$" filename))
  27101. +  (string-match (concat "^" autosave-char ".*" autosave-char "$") filename))
  27102.  
  27103.  (defconst list-directory-brief-switches "-CF"
  27104.    "*Switches for list-directory to pass to `ls' for brief listing,")
  27105. Binary files baseline/fsf/emacs18/lisp/files.elc and amiga/fsf/emacs18/lisp/files.elc differ
  27106. diff -rup --new-file baseline/fsf/emacs18/lisp/loadup.el amiga/fsf/emacs18/lisp/loadup.el
  27107. --- baseline/fsf/emacs18/lisp/loadup.el    Wed May 13 12:42:48 1992
  27108. +++ amiga/fsf/emacs18/lisp/loadup.el    Sat Sep 28 00:00:00 1996
  27109. @@ -28,7 +28,6 @@
  27110.  (load "simple")
  27111.  (garbage-collect)
  27112.  (load "help")
  27113. -(garbage-collect)
  27114.  (load "files")
  27115.  (garbage-collect)
  27116.  (load "indent")
  27117. @@ -64,6 +63,10 @@
  27118.      (progn
  27119.        (garbage-collect)
  27120.        (load "vms-patch")))
  27121. +(if (eq system-type 'amigaos)
  27122. +    (progn
  27123. +      (garbage-collect)
  27124. +      (load "amiga-init")))
  27125.  
  27126.  ;If you want additional libraries to be preloaded and their
  27127.  ;doc strings kept in the DOC file rather than in core,
  27128. diff -rup --new-file baseline/fsf/emacs18/lisp/simple.el amiga/fsf/emacs18/lisp/simple.el
  27129. --- baseline/fsf/emacs18/lisp/simple.el    Wed Apr 15 01:13:32 1992
  27130. +++ amiga/fsf/emacs18/lisp/simple.el    Sat Sep 28 00:00:00 1996
  27131. @@ -539,11 +539,47 @@ a number counts as a prefix arg."
  27132.  (defvar kill-ring-yank-pointer nil
  27133.    "The tail of the kill ring whose car is the last thing yanked.")
  27134.  
  27135. +(if (eq system-type 'amigaos)
  27136. +    (progn
  27137. +      (defun safe-amiga-paste ()
  27138. +    "Paste from the amiga clipboard, trapping any errors."
  27139. +    (condition-case nil
  27140. +        (amiga-paste)
  27141. +      (error nil)))
  27142. +
  27143. +      (defun check-clipboard ()
  27144. +    "If there is anything new in the clipboard, add it to the emacs kill ring.
  27145. +Returns t if there was something added, nil otherwise."
  27146. +    (let (added)
  27147. +      (if amiga-new-clip
  27148. +          (let ((str (safe-amiga-paste)))
  27149. +        (setq amiga-new-clip nil)
  27150. +        (if str
  27151. +            (progn
  27152. +              (kill-add str)
  27153. +              (setq added t)
  27154. +              (setq kill-ring-yank-pointer kill-ring)))))
  27155. +      added))
  27156. +      (defun update-clipboard (str)
  27157. +    (amiga-cut str)
  27158. +    (setq amiga-new-clip nil)))
  27159. +    (progn ; These could be defined for X-Windows.
  27160. +      (defun check-clipboard () nil)
  27161. +      (defun update-clipboard () nil)))
  27162. +
  27163.  (defun kill-append (string before-p)
  27164.    (setcar kill-ring
  27165.        (if before-p
  27166.            (concat string (car kill-ring))
  27167. -          (concat (car kill-ring) string))))
  27168. +          (concat (car kill-ring) string)))
  27169. +  (update-clipboard (car kill-ring)))
  27170. +
  27171. +(defun kill-add (string)
  27172. +  (check-clipboard)
  27173. +  (setq kill-ring (cons string kill-ring))
  27174. +  (update-clipboard string)
  27175. +  (if (> (length kill-ring) kill-ring-max)
  27176. +      (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)))
  27177.  
  27178.  (defun kill-region (beg end)
  27179.    "Kill between point and mark.
  27180. @@ -571,9 +607,7 @@ to make one entry in the kill ring."
  27181.      (delete-region beg end)
  27182.      ;; Take the same string recorded for undo
  27183.      ;; and put it in the kill-ring.
  27184. -    (setq kill-ring (cons (car (car buffer-undo-list)) kill-ring))
  27185. -    (if (> (length kill-ring) kill-ring-max)
  27186. -        (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil))
  27187. +    (kill-add (car (car buffer-undo-list)))
  27188.      (setq this-command 'kill-region)
  27189.      (setq kill-ring-yank-pointer kill-ring))
  27190.      (copy-region-as-kill beg end)
  27191. @@ -584,11 +618,9 @@ to make one entry in the kill ring."
  27192.  (defun copy-region-as-kill (beg end)
  27193.    "Save the region as if killed, but don't kill it."
  27194.    (interactive "r")
  27195. -  (if (eq last-command 'kill-region)
  27196. +  (if (and (eq last-command 'kill-region) (not (check-clipboard)))
  27197.        (kill-append (buffer-substring beg end) (< end beg))
  27198. -    (setq kill-ring (cons (buffer-substring beg end) kill-ring))
  27199. -    (if (> (length kill-ring) kill-ring-max)
  27200. -    (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)))
  27201. +    (kill-add (buffer-substring beg end)))
  27202.    (setq this-command 'kill-region)
  27203.    (setq kill-ring-yank-pointer kill-ring))
  27204.  
  27205. @@ -643,6 +675,7 @@ With argument n, reinsert the nth most r
  27206.  text.
  27207.  See also the command \\[yank-pop]."
  27208.    (interactive "*P")
  27209. +  (check-clipboard)
  27210.    (rotate-yank-pointer (if (listp arg) 0
  27211.               (if (eq arg '-) -1
  27212.                 (1- arg))))
  27213. Binary files baseline/fsf/emacs18/lisp/simple.elc and amiga/fsf/emacs18/lisp/simple.elc differ
  27214. diff -rup --new-file baseline/fsf/emacs18/lisp/startup.el amiga/fsf/emacs18/lisp/startup.el
  27215. --- baseline/fsf/emacs18/lisp/startup.el    Sat Apr 18 22:20:08 1992
  27216. +++ amiga/fsf/emacs18/lisp/startup.el    Sat Sep 28 00:00:00 1996
  27217. @@ -113,9 +113,9 @@ definitions made by the terminal-specifi
  27218.      ;; Load user's init file, or load default one.
  27219.      (condition-case error
  27220.      (if init
  27221. -        (progn (load (if (eq system-type 'vax-vms)
  27222. -                 "sys$login:.emacs"
  27223. -                 (concat "~" init "/.emacs"))
  27224. +        (progn (load (cond ((eq system-type 'vax-vms) "sys$login:.emacs")
  27225. +                   ((eq system-type 'amigaos) "s:.emacs")
  27226. +                   (t (concat "~" init "/.emacs")))
  27227.               t t t)
  27228.             (or inhibit-default-init
  27229.                 (let ((inhibit-startup-message nil))
  27230. @@ -129,6 +129,10 @@ definitions made by the terminal-specifi
  27231.      (save-excursion
  27232.        (set-buffer "*scratch*")
  27233.        (funcall initial-major-mode)))
  27234. +    ;; On Amiga, initialise clipboard
  27235. +    (if (eq system-type 'amigaos)
  27236. +    (let ((clip (safe-amiga-paste)))
  27237. +      (if clip (kill-add clip))))
  27238.      ;; Load library for our terminal type.
  27239.      ;; User init file can set term-file-prefix to nil to prevent this.
  27240.      (and term-file-prefix (not noninteractive)
  27241. Binary files baseline/fsf/emacs18/lisp/startup.elc and amiga/fsf/emacs18/lisp/startup.elc differ
  27242. diff -rup --new-file baseline/fsf/emacs18/lisp/term/intuition-win.el amiga/fsf/emacs18/lisp/term/intuition-win.el
  27243. --- baseline/fsf/emacs18/lisp/term/intuition-win.el    Wed Dec 31 17:00:00 1969
  27244. +++ amiga/fsf/emacs18/lisp/term/intuition-win.el    Sat Sep 28 00:00:00 1996
  27245. @@ -0,0 +1,47 @@
  27246. +(load "s:.emacs-menu" t t)
  27247. +(setq command-switch-alist (append '(("-fn" . amiga-handle-set-font)
  27248. +                     ("-fg" . amiga-handle-set-foreground)
  27249. +                     ("-bg" . amiga-handle-set-background)
  27250. +                     ("-geometry" . amiga-handle-set-geometry)
  27251. +                     ("-screen" . amiga-handle-set-screen))
  27252. +                   command-switch-alist))
  27253. +
  27254. +(defun amiga-handle-set-font (switch)
  27255. +  (condition-case err
  27256. +      (let ((wfont (car command-line-args-left))
  27257. +        (height (car (read-from-string (car (cdr command-line-args-left))))))
  27258. +    (setq command-line-args-left (cdr (cdr command-line-args-left)))
  27259. +    (amiga-set-font wfont height))
  27260. +    (error (message "Failed to load font"))))
  27261. +
  27262. +(defun amiga-handle-set-foreground (switch)
  27263. +  (condition-case err
  27264. +      (let ((pen (car (read-from-string (car command-line-args-left)))))
  27265. +    (setq command-line-args-left (cdr command-line-args-left))
  27266. +    (amiga-set-foreground-color pen))
  27267. +    (error (message "Failed to set foreground colour"))))
  27268. +
  27269. +(defun amiga-handle-set-background (switch)
  27270. +  (condition-case err
  27271. +      (let ((pen (car (read-from-string (car command-line-args-left)))))
  27272. +    (setq command-line-args-left (cdr command-line-args-left))
  27273. +    (amiga-set-background-color pen))
  27274. +    (error (message "Failed to set background colour"))))
  27275. +
  27276. +(defun amiga-handle-set-screen (switch)
  27277. +  (condition-case err
  27278. +      (let ((name (car command-line-args-left)))
  27279. +    (setq command-line-args-left (cdr command-line-args-left))
  27280. +    (amiga-set-geometry nil nil nil nil name))
  27281. +    (error (message "Couldn't open on public screen"))))
  27282. +
  27283. +(defun amiga-handle-set-geometry (switch)
  27284. +  (condition-case err
  27285. +      (let ((x (car (read-from-string (car command-line-args-left))))
  27286. +        (y (car (read-from-string (car (cdr command-line-args-left)))))
  27287. +        (w (car (read-from-string (car (cdr (cdr command-line-args-left))))))
  27288. +        (h (car (read-from-string (car (cdr (cdr (cdr command-line-args-left)))))))
  27289. +)
  27290. +    (setq command-line-args-left (cdr (cdr (cdr (cdr command-line-args-left)))))
  27291. +    (amiga-set-geometry x y w h nil))
  27292. +    (error (message "Couldn't set window size"))))
  27293. diff -rup --new-file baseline/fsf/emacs18/lisp/term/intuition-win.elc amiga/fsf/emacs18/lisp/term/intuition-win.elc
  27294. --- baseline/fsf/emacs18/lisp/term/intuition-win.elc    Wed Dec 31 17:00:00 1969
  27295. +++ amiga/fsf/emacs18/lisp/term/intuition-win.elc    Sat Sep 28 00:00:00 1996
  27296. @@ -0,0 +1,16 @@
  27297. +
  27298. +(load "s:.emacs-menu" t t)
  27299. +
  27300. +(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))
  27301. +
  27302. +(defun amiga-handle-set-font (switch) (byte-code "ÀÁ‡" [err (byte-code "    @à   A@!@    AA‰ˆÄ
  27303. +\"*‡" [wfont command-line-args-left height read-from-string amiga-set-font] 4) ((error (byte-code "ÀÁ!‡" [message "Failed to load font"] 2)))] 3))
  27304. +
  27305. +(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))
  27306. +
  27307. +(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))
  27308. +
  27309. +(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))
  27310. +
  27311. +(defun amiga-handle-set-geometry (switch) (byte-code "ÀÁ‡" [err (byte-code "Æ    @!@Æ    A@!@Æ    AA@!@Æ    AAA@!@    AAAA‰ˆÇ
  27312. + Å%,‡" [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))
  27313. diff -rup --new-file baseline/fsf/emacs18/lisp/texinfmt.el amiga/fsf/emacs18/lisp/texinfmt.el
  27314. --- baseline/fsf/emacs18/lisp/texinfmt.el    Sat Dec  7 22:28:09 1991
  27315. +++ amiga/fsf/emacs18/lisp/texinfmt.el    Sat Sep 28 00:00:00 1996
  27316. @@ -874,7 +874,7 @@ converted to Info is stored in a tempora
  27317.      (insert "\n* Menu:\n\n")
  27318.      (setq opoint (point))
  27319.      (texinfo-print-index nil indexelts)
  27320. -    (if (eq system-type 'vax-vms) 
  27321. +    (if (or (eq system-type 'amigaos) (eq system-type 'vax-vms)) 
  27322.      (texinfo-sort-region opoint (point))
  27323.        (shell-command-on-region opoint (point) "sort -fd" 1))))
  27324.  
  27325. Binary files baseline/fsf/emacs18/lisp/texinfmt.elc and amiga/fsf/emacs18/lisp/texinfmt.elc differ
  27326. diff -rup --new-file baseline/fsf/emacs18/manifests/bin amiga/fsf/emacs18/manifests/bin
  27327. --- baseline/fsf/emacs18/manifests/bin    Wed Dec 31 17:00:00 1969
  27328. +++ amiga/fsf/emacs18/manifests/bin    Wed Oct  9 23:26:14 1996
  27329. @@ -0,0 +1,407 @@
  27330. +COPYING
  27331. +COPYING.info
  27332. +bin/emacs
  27333. +bin/etags
  27334. +guide/emacs.guide
  27335. +lib/emacs/18.59/etc/3B-MAXMEM
  27336. +lib/emacs/18.59/etc/AIX.DUMP
  27337. +lib/emacs/18.59/etc/APOLLO
  27338. +lib/emacs/18.59/etc/APPLE
  27339. +lib/emacs/18.59/etc/BABYL
  27340. +lib/emacs/18.59/etc/CCADIFF
  27341. +lib/emacs/18.59/etc/CHARACTERS
  27342. +lib/emacs/18.59/etc/COOKIES
  27343. +lib/emacs/18.59/etc/COPYING
  27344. +lib/emacs/18.59/etc/ChangeLog
  27345. +lib/emacs/18.59/etc/DEBUG
  27346. +lib/emacs/18.59/etc/DIFF
  27347. +lib/emacs/18.59/etc/DISTRIB
  27348. +lib/emacs/18.59/etc/DOC
  27349. +lib/emacs/18.59/etc/EMACS-DATA
  27350. +lib/emacs/18.59/etc/FAQ
  27351. +lib/emacs/18.59/etc/FTP
  27352. +lib/emacs/18.59/etc/GNU
  27353. +lib/emacs/18.59/etc/GNU.JOKES
  27354. +lib/emacs/18.59/etc/GOSDIFF
  27355. +lib/emacs/18.59/etc/INTERVAL.IDEAS
  27356. +lib/emacs/18.59/etc/INTERVIEW
  27357. +lib/emacs/18.59/etc/LEDIT
  27358. +lib/emacs/18.59/etc/LPF
  27359. +lib/emacs/18.59/etc/MACHINES
  27360. +lib/emacs/18.59/etc/MAILINGLISTS
  27361. +lib/emacs/18.59/etc/MOTIVATION
  27362. +lib/emacs/18.59/etc/Makefile
  27363. +lib/emacs/18.59/etc/NEWS
  27364. +lib/emacs/18.59/etc/NICKLES.WORTH
  27365. +lib/emacs/18.59/etc/ONEWS
  27366. +lib/emacs/18.59/etc/OONEWS
  27367. +lib/emacs/18.59/etc/OPTIONS
  27368. +lib/emacs/18.59/etc/README
  27369. +lib/emacs/18.59/etc/SCOPTIONS
  27370. +lib/emacs/18.59/etc/SERVICE
  27371. +lib/emacs/18.59/etc/SUN-SUPPORT
  27372. +lib/emacs/18.59/etc/SUNBUG
  27373. +lib/emacs/18.59/etc/TERMS
  27374. +lib/emacs/18.59/etc/TO-DO
  27375. +lib/emacs/18.59/etc/TUTORIAL
  27376. +lib/emacs/18.59/etc/XDOC
  27377. +lib/emacs/18.59/etc/XENIX
  27378. +lib/emacs/18.59/etc/Xkeymap.txt
  27379. +lib/emacs/18.59/etc/amiga-env.c
  27380. +lib/emacs/18.59/etc/celibacy.1
  27381. +lib/emacs/18.59/etc/complink.com
  27382. +lib/emacs/18.59/etc/cvtmail.c
  27383. +lib/emacs/18.59/etc/digest-doc.c
  27384. +lib/emacs/18.59/etc/echo.msg
  27385. +lib/emacs/18.59/etc/emacs.1
  27386. +lib/emacs/18.59/etc/emacs.icon
  27387. +lib/emacs/18.59/etc/emacs.names
  27388. +lib/emacs/18.59/etc/emacsclient.c
  27389. +lib/emacs/18.59/etc/emacstool.1
  27390. +lib/emacs/18.59/etc/emacstool.c
  27391. +lib/emacs/18.59/etc/env
  27392. +lib/emacs/18.59/etc/env.c
  27393. +lib/emacs/18.59/etc/etags
  27394. +lib/emacs/18.59/etc/etags-vmslib.c
  27395. +lib/emacs/18.59/etc/etags.c
  27396. +lib/emacs/18.59/etc/etags.info
  27397. +lib/emacs/18.59/etc/etags.lnk
  27398. +lib/emacs/18.59/etc/etags.o
  27399. +lib/emacs/18.59/etc/etags.vms
  27400. +lib/emacs/18.59/etc/fakemail.c
  27401. +lib/emacs/18.59/etc/faq2texi.perl
  27402. +lib/emacs/18.59/etc/ledit.l
  27403. +lib/emacs/18.59/etc/leditcfns.c
  27404. +lib/emacs/18.59/etc/make-docfile
  27405. +lib/emacs/18.59/etc/make-docfile.c
  27406. +lib/emacs/18.59/etc/make-docfile.info
  27407. +lib/emacs/18.59/etc/make-docfile.lnk
  27408. +lib/emacs/18.59/etc/make-docfile.o
  27409. +lib/emacs/18.59/etc/makedoc.com
  27410. +lib/emacs/18.59/etc/movemail.c
  27411. +lib/emacs/18.59/etc/ms-kermit
  27412. +lib/emacs/18.59/etc/ms-kermit-7bit
  27413. +lib/emacs/18.59/etc/qsort.c
  27414. +lib/emacs/18.59/etc/refcard.tex
  27415. +lib/emacs/18.59/etc/server.c
  27416. +lib/emacs/18.59/etc/sex.6
  27417. +lib/emacs/18.59/etc/sh
  27418. +lib/emacs/18.59/etc/sh.c
  27419. +lib/emacs/18.59/etc/sh.info
  27420. +lib/emacs/18.59/etc/sh.lnk
  27421. +lib/emacs/18.59/etc/sh.o
  27422. +lib/emacs/18.59/etc/smakefile
  27423. +lib/emacs/18.59/etc/sorted-doc.c
  27424. +lib/emacs/18.59/etc/spook.lines
  27425. +lib/emacs/18.59/etc/termcap.amiga
  27426. +lib/emacs/18.59/etc/termcap.dat
  27427. +lib/emacs/18.59/etc/termcap.ucb
  27428. +lib/emacs/18.59/etc/test-distrib.c
  27429. +lib/emacs/18.59/etc/testfile
  27430. +lib/emacs/18.59/etc/ulimit.hack
  27431. +lib/emacs/18.59/etc/vipcard.tex
  27432. +lib/emacs/18.59/etc/vmslink.opt
  27433. +lib/emacs/18.59/etc/wakeup
  27434. +lib/emacs/18.59/etc/wakeup.c
  27435. +lib/emacs/18.59/etc/wakeup.info
  27436. +lib/emacs/18.59/etc/wakeup.lnk
  27437. +lib/emacs/18.59/etc/wakeup.o
  27438. +lib/emacs/18.59/etc/xmouse.doc
  27439. +lib/emacs/18.59/etc/yow.c
  27440. +lib/emacs/18.59/etc/yow.lines
  27441. +lib/emacs/18.59/lisp/COPYING
  27442. +lib/emacs/18.59/lisp/ChangeLog
  27443. +lib/emacs/18.59/lisp/abbrev.el
  27444. +lib/emacs/18.59/lisp/abbrev.elc
  27445. +lib/emacs/18.59/lisp/abbrevlist.el
  27446. +lib/emacs/18.59/lisp/abbrevlist.elc
  27447. +lib/emacs/18.59/lisp/ada.el
  27448. +lib/emacs/18.59/lisp/ada.elc
  27449. +lib/emacs/18.59/lisp/add-log.el
  27450. +lib/emacs/18.59/lisp/add-log.elc
  27451. +lib/emacs/18.59/lisp/amiga-init.el
  27452. +lib/emacs/18.59/lisp/amiga-init.elc
  27453. +lib/emacs/18.59/lisp/amiga-menu.el
  27454. +lib/emacs/18.59/lisp/amiga-menu.elc
  27455. +lib/emacs/18.59/lisp/amiga-mouse.el
  27456. +lib/emacs/18.59/lisp/amiga-mouse.elc
  27457. +lib/emacs/18.59/lisp/autoinsert.el
  27458. +lib/emacs/18.59/lisp/backquote.el
  27459. +lib/emacs/18.59/lisp/backquote.elc
  27460. +lib/emacs/18.59/lisp/bg-mouse.el
  27461. +lib/emacs/18.59/lisp/bibtex.el
  27462. +lib/emacs/18.59/lisp/bibtex.elc
  27463. +lib/emacs/18.59/lisp/blackbox.el
  27464. +lib/emacs/18.59/lisp/blackbox.elc
  27465. +lib/emacs/18.59/lisp/buff-menu.el
  27466. +lib/emacs/18.59/lisp/buff-menu.elc
  27467. +lib/emacs/18.59/lisp/bytecomp.el
  27468. +lib/emacs/18.59/lisp/bytecomp.elc
  27469. +lib/emacs/18.59/lisp/c-fill.el
  27470. +lib/emacs/18.59/lisp/c-fill.elc
  27471. +lib/emacs/18.59/lisp/c-mode.el
  27472. +lib/emacs/18.59/lisp/c-mode.elc
  27473. +lib/emacs/18.59/lisp/cal.el
  27474. +lib/emacs/18.59/lisp/cal.elc
  27475. +lib/emacs/18.59/lisp/chistory.el
  27476. +lib/emacs/18.59/lisp/chistory.elc
  27477. +lib/emacs/18.59/lisp/cl-indent.el
  27478. +lib/emacs/18.59/lisp/cl-indent.elc
  27479. +lib/emacs/18.59/lisp/cl.el
  27480. +lib/emacs/18.59/lisp/cl.elc
  27481. +lib/emacs/18.59/lisp/cmacexp.el
  27482. +lib/emacs/18.59/lisp/compare-w.el
  27483. +lib/emacs/18.59/lisp/compare-w.elc
  27484. +lib/emacs/18.59/lisp/compile.el
  27485. +lib/emacs/18.59/lisp/compile.elc
  27486. +lib/emacs/18.59/lisp/dabbrev.el
  27487. +lib/emacs/18.59/lisp/dabbrev.elc
  27488. +lib/emacs/18.59/lisp/dbx.el
  27489. +lib/emacs/18.59/lisp/dbx.elc
  27490. +lib/emacs/18.59/lisp/debug.el
  27491. +lib/emacs/18.59/lisp/debug.elc
  27492. +lib/emacs/18.59/lisp/dired.el
  27493. +lib/emacs/18.59/lisp/dired.elc
  27494. +lib/emacs/18.59/lisp/disass.el
  27495. +lib/emacs/18.59/lisp/disass.elc
  27496. +lib/emacs/18.59/lisp/dissociate.el
  27497. +lib/emacs/18.59/lisp/dissociate.elc
  27498. +lib/emacs/18.59/lisp/doctex.el
  27499. +lib/emacs/18.59/lisp/doctor.el
  27500. +lib/emacs/18.59/lisp/doctor.elc
  27501. +lib/emacs/18.59/lisp/ebuff-menu.el
  27502. +lib/emacs/18.59/lisp/ebuff-menu.elc
  27503. +lib/emacs/18.59/lisp/echistory.el
  27504. +lib/emacs/18.59/lisp/echistory.elc
  27505. +lib/emacs/18.59/lisp/edt-doc.el
  27506. +lib/emacs/18.59/lisp/edt.el
  27507. +lib/emacs/18.59/lisp/edt.elc
  27508. +lib/emacs/18.59/lisp/ehelp.el
  27509. +lib/emacs/18.59/lisp/ehelp.elc
  27510. +lib/emacs/18.59/lisp/electric.el
  27511. +lib/emacs/18.59/lisp/electric.elc
  27512. +lib/emacs/18.59/lisp/emacsbug.el
  27513. +lib/emacs/18.59/lisp/files.el
  27514. +lib/emacs/18.59/lisp/files.elc
  27515. +lib/emacs/18.59/lisp/fill.el
  27516. +lib/emacs/18.59/lisp/fill.elc
  27517. +lib/emacs/18.59/lisp/flame.el
  27518. +lib/emacs/18.59/lisp/flame.elc
  27519. +lib/emacs/18.59/lisp/float.el
  27520. +lib/emacs/18.59/lisp/float.elc
  27521. +lib/emacs/18.59/lisp/fortran.el
  27522. +lib/emacs/18.59/lisp/fortran.elc
  27523. +lib/emacs/18.59/lisp/ftp.el
  27524. +lib/emacs/18.59/lisp/ftp.elc
  27525. +lib/emacs/18.59/lisp/gdb.el
  27526. +lib/emacs/18.59/lisp/gdb.elc
  27527. +lib/emacs/18.59/lisp/gosmacs.el
  27528. +lib/emacs/18.59/lisp/grow-vers.el
  27529. +lib/emacs/18.59/lisp/hanoi.el
  27530. +lib/emacs/18.59/lisp/hanoi.elc
  27531. +lib/emacs/18.59/lisp/help.el
  27532. +lib/emacs/18.59/lisp/help.elc
  27533. +lib/emacs/18.59/lisp/helper.el
  27534. +lib/emacs/18.59/lisp/helper.elc
  27535. +lib/emacs/18.59/lisp/hideif.el
  27536. +lib/emacs/18.59/lisp/hideif.elc
  27537. +lib/emacs/18.59/lisp/icon.el
  27538. +lib/emacs/18.59/lisp/icon.elc
  27539. +lib/emacs/18.59/lisp/inc-vers.el
  27540. +lib/emacs/18.59/lisp/indent.el
  27541. +lib/emacs/18.59/lisp/indent.elc
  27542. +lib/emacs/18.59/lisp/info.el
  27543. +lib/emacs/18.59/lisp/info.elc
  27544. +lib/emacs/18.59/lisp/informat.el
  27545. +lib/emacs/18.59/lisp/informat.elc
  27546. +lib/emacs/18.59/lisp/isearch.el
  27547. +lib/emacs/18.59/lisp/isearch.elc
  27548. +lib/emacs/18.59/lisp/kermit.el
  27549. +lib/emacs/18.59/lisp/keypad.el
  27550. +lib/emacs/18.59/lisp/keypad.elc
  27551. +lib/emacs/18.59/lisp/ledit.el
  27552. +lib/emacs/18.59/lisp/life.el
  27553. +lib/emacs/18.59/lisp/life.elc
  27554. +lib/emacs/18.59/lisp/lisp-mode.el
  27555. +lib/emacs/18.59/lisp/lisp-mode.elc
  27556. +lib/emacs/18.59/lisp/lisp.el
  27557. +lib/emacs/18.59/lisp/lisp.elc
  27558. +lib/emacs/18.59/lisp/loaddefs.el
  27559. +lib/emacs/18.59/lisp/loadup.el
  27560. +lib/emacs/18.59/lisp/loadup.elc
  27561. +lib/emacs/18.59/lisp/lpr.el
  27562. +lib/emacs/18.59/lisp/lpr.elc
  27563. +lib/emacs/18.59/lisp/macros.el
  27564. +lib/emacs/18.59/lisp/macros.elc
  27565. +lib/emacs/18.59/lisp/mail-utils.el
  27566. +lib/emacs/18.59/lisp/mail-utils.elc
  27567. +lib/emacs/18.59/lisp/mailalias.el
  27568. +lib/emacs/18.59/lisp/mailalias.elc
  27569. +lib/emacs/18.59/lisp/mailpost.el
  27570. +lib/emacs/18.59/lisp/makesum.el
  27571. +lib/emacs/18.59/lisp/makesum.elc
  27572. +lib/emacs/18.59/lisp/man.el
  27573. +lib/emacs/18.59/lisp/man.elc
  27574. +lib/emacs/18.59/lisp/medit.el
  27575. +lib/emacs/18.59/lisp/medit.elc
  27576. +lib/emacs/18.59/lisp/meese.el
  27577. +lib/emacs/18.59/lisp/mh-e.el
  27578. +lib/emacs/18.59/lisp/mh-e.elc
  27579. +lib/emacs/18.59/lisp/mim-mode.el
  27580. +lib/emacs/18.59/lisp/mim-mode.elc
  27581. +lib/emacs/18.59/lisp/mim-syntax.el
  27582. +lib/emacs/18.59/lisp/mim-syntax.elc
  27583. +lib/emacs/18.59/lisp/mlconvert.el
  27584. +lib/emacs/18.59/lisp/mlconvert.elc
  27585. +lib/emacs/18.59/lisp/mlsupport.el
  27586. +lib/emacs/18.59/lisp/mlsupport.elc
  27587. +lib/emacs/18.59/lisp/modula2.el
  27588. +lib/emacs/18.59/lisp/modula2.elc
  27589. +lib/emacs/18.59/lisp/novice.el
  27590. +lib/emacs/18.59/lisp/nroff-mode.el
  27591. +lib/emacs/18.59/lisp/nroff-mode.elc
  27592. +lib/emacs/18.59/lisp/options.el
  27593. +lib/emacs/18.59/lisp/options.elc
  27594. +lib/emacs/18.59/lisp/outline.el
  27595. +lib/emacs/18.59/lisp/outline.elc
  27596. +lib/emacs/18.59/lisp/page.el
  27597. +lib/emacs/18.59/lisp/page.elc
  27598. +lib/emacs/18.59/lisp/paragraphs.el
  27599. +lib/emacs/18.59/lisp/paragraphs.elc
  27600. +lib/emacs/18.59/lisp/paths.el
  27601. +lib/emacs/18.59/lisp/picture.el
  27602. +lib/emacs/18.59/lisp/picture.elc
  27603. +lib/emacs/18.59/lisp/prolog.el
  27604. +lib/emacs/18.59/lisp/prolog.elc
  27605. +lib/emacs/18.59/lisp/rect.el
  27606. +lib/emacs/18.59/lisp/rect.elc
  27607. +lib/emacs/18.59/lisp/register.el
  27608. +lib/emacs/18.59/lisp/register.elc
  27609. +lib/emacs/18.59/lisp/replace.el
  27610. +lib/emacs/18.59/lisp/replace.elc
  27611. +lib/emacs/18.59/lisp/rfc822.el
  27612. +lib/emacs/18.59/lisp/rfc822.elc
  27613. +lib/emacs/18.59/lisp/rmail.el
  27614. +lib/emacs/18.59/lisp/rmail.elc
  27615. +lib/emacs/18.59/lisp/rmailedit.el
  27616. +lib/emacs/18.59/lisp/rmailedit.elc
  27617. +lib/emacs/18.59/lisp/rmailkwd.el
  27618. +lib/emacs/18.59/lisp/rmailkwd.elc
  27619. +lib/emacs/18.59/lisp/rmailmsc.el
  27620. +lib/emacs/18.59/lisp/rmailmsc.elc
  27621. +lib/emacs/18.59/lisp/rmailout.el
  27622. +lib/emacs/18.59/lisp/rmailout.elc
  27623. +lib/emacs/18.59/lisp/rmailsum.el
  27624. +lib/emacs/18.59/lisp/rmailsum.elc
  27625. +lib/emacs/18.59/lisp/rnews.el
  27626. +lib/emacs/18.59/lisp/rnews.elc
  27627. +lib/emacs/18.59/lisp/rnewspost.el
  27628. +lib/emacs/18.59/lisp/rnewspost.elc
  27629. +lib/emacs/18.59/lisp/saveconf.el
  27630. +lib/emacs/18.59/lisp/scheme.el
  27631. +lib/emacs/18.59/lisp/scheme.elc
  27632. +lib/emacs/18.59/lisp/scribe.el
  27633. +lib/emacs/18.59/lisp/scribe.elc
  27634. +lib/emacs/18.59/lisp/sendmail.el
  27635. +lib/emacs/18.59/lisp/sendmail.elc
  27636. +lib/emacs/18.59/lisp/server.el
  27637. +lib/emacs/18.59/lisp/server.elc
  27638. +lib/emacs/18.59/lisp/shell.el
  27639. +lib/emacs/18.59/lisp/shell.elc
  27640. +lib/emacs/18.59/lisp/simple.el
  27641. +lib/emacs/18.59/lisp/simple.elc
  27642. +lib/emacs/18.59/lisp/simula.defns
  27643. +lib/emacs/18.59/lisp/simula.el
  27644. +lib/emacs/18.59/lisp/simula.elc
  27645. +lib/emacs/18.59/lisp/sort.el
  27646. +lib/emacs/18.59/lisp/sort.elc
  27647. +lib/emacs/18.59/lisp/spell.el
  27648. +lib/emacs/18.59/lisp/spell.elc
  27649. +lib/emacs/18.59/lisp/spook.el
  27650. +lib/emacs/18.59/lisp/startup.el
  27651. +lib/emacs/18.59/lisp/startup.elc
  27652. +lib/emacs/18.59/lisp/studly.el
  27653. +lib/emacs/18.59/lisp/studly.elc
  27654. +lib/emacs/18.59/lisp/subr.el
  27655. +lib/emacs/18.59/lisp/subr.elc
  27656. +lib/emacs/18.59/lisp/sun-cursors.el
  27657. +lib/emacs/18.59/lisp/sun-fns.el
  27658. +lib/emacs/18.59/lisp/sun-fns.elc
  27659. +lib/emacs/18.59/lisp/sun-keys.el
  27660. +lib/emacs/18.59/lisp/sun-mouse.el
  27661. +lib/emacs/18.59/lisp/sun-mouse.elc
  27662. +lib/emacs/18.59/lisp/sup-mouse.el
  27663. +lib/emacs/18.59/lisp/sup-mouse.elc
  27664. +lib/emacs/18.59/lisp/tabify.el
  27665. +lib/emacs/18.59/lisp/tabify.elc
  27666. +lib/emacs/18.59/lisp/tags.el
  27667. +lib/emacs/18.59/lisp/tags.elc
  27668. +lib/emacs/18.59/lisp/telnet.el
  27669. +lib/emacs/18.59/lisp/telnet.elc
  27670. +lib/emacs/18.59/lisp/term/COPYING
  27671. +lib/emacs/18.59/lisp/term/apollo.el
  27672. +lib/emacs/18.59/lisp/term/at386.el
  27673. +lib/emacs/18.59/lisp/term/bbn.el
  27674. +lib/emacs/18.59/lisp/term/bg.el
  27675. +lib/emacs/18.59/lisp/term/bgnv.el
  27676. +lib/emacs/18.59/lisp/term/bgrv.el
  27677. +lib/emacs/18.59/lisp/term/bobcat.el
  27678. +lib/emacs/18.59/lisp/term/intuition-win.el
  27679. +lib/emacs/18.59/lisp/term/intuition-win.elc
  27680. +lib/emacs/18.59/lisp/term/s4.el
  27681. +lib/emacs/18.59/lisp/term/sun.el
  27682. +lib/emacs/18.59/lisp/term/supdup.el
  27683. +lib/emacs/18.59/lisp/term/unixpc.el
  27684. +lib/emacs/18.59/lisp/term/vt100.el
  27685. +lib/emacs/18.59/lisp/term/vt101.el
  27686. +lib/emacs/18.59/lisp/term/vt102.el
  27687. +lib/emacs/18.59/lisp/term/vt125.el
  27688. +lib/emacs/18.59/lisp/term/vt131.el
  27689. +lib/emacs/18.59/lisp/term/vt200.el
  27690. +lib/emacs/18.59/lisp/term/vt220.el
  27691. +lib/emacs/18.59/lisp/term/vt240.el
  27692. +lib/emacs/18.59/lisp/term/vt300.el
  27693. +lib/emacs/18.59/lisp/term/x-win.el
  27694. +lib/emacs/18.59/lisp/term/xterm.el
  27695. +lib/emacs/18.59/lisp/terminal.el
  27696. +lib/emacs/18.59/lisp/terminal.elc
  27697. +lib/emacs/18.59/lisp/tex-mode.el
  27698. +lib/emacs/18.59/lisp/tex-mode.elc
  27699. +lib/emacs/18.59/lisp/tex-start.el
  27700. +lib/emacs/18.59/lisp/texinfmt.el
  27701. +lib/emacs/18.59/lisp/texinfmt.elc
  27702. +lib/emacs/18.59/lisp/texinfo.el
  27703. +lib/emacs/18.59/lisp/texinfo.elc
  27704. +lib/emacs/18.59/lisp/text-mode.el
  27705. +lib/emacs/18.59/lisp/text-mode.elc
  27706. +lib/emacs/18.59/lisp/time.el
  27707. +lib/emacs/18.59/lisp/time.elc
  27708. +lib/emacs/18.59/lisp/uncompress.el
  27709. +lib/emacs/18.59/lisp/underline.el
  27710. +lib/emacs/18.59/lisp/underline.elc
  27711. +lib/emacs/18.59/lisp/undigest.el
  27712. +lib/emacs/18.59/lisp/undigest.elc
  27713. +lib/emacs/18.59/lisp/unused.el
  27714. +lib/emacs/18.59/lisp/userlock.el
  27715. +lib/emacs/18.59/lisp/userlock.elc
  27716. +lib/emacs/18.59/lisp/version.el
  27717. +lib/emacs/18.59/lisp/vi.el
  27718. +lib/emacs/18.59/lisp/vi.elc
  27719. +lib/emacs/18.59/lisp/view.el
  27720. +lib/emacs/18.59/lisp/view.elc
  27721. +lib/emacs/18.59/lisp/vip.el
  27722. +lib/emacs/18.59/lisp/vip.elc
  27723. +lib/emacs/18.59/lisp/vms-patch.el
  27724. +lib/emacs/18.59/lisp/vms-patch.elc
  27725. +lib/emacs/18.59/lisp/vmsproc.el
  27726. +lib/emacs/18.59/lisp/vmsproc.elc
  27727. +lib/emacs/18.59/lisp/window.el
  27728. +lib/emacs/18.59/lisp/window.elc
  27729. +lib/emacs/18.59/lisp/x-menu.el
  27730. +lib/emacs/18.59/lisp/x-menu.elc
  27731. +lib/emacs/18.59/lisp/x-mouse.el
  27732. +lib/emacs/18.59/lisp/x-mouse.elc
  27733. +lib/emacs/18.59/lisp/xscheme.el
  27734. +lib/emacs/18.59/lisp/xscheme.elc
  27735. +lib/emacs/18.59/lisp/yow.el
  27736. +lib/emacs/18.59/lisp/yow.elc
  27737. diff -rup --new-file baseline/fsf/emacs18/manifests/src amiga/fsf/emacs18/manifests/src
  27738. --- baseline/fsf/emacs18/manifests/src    Wed Dec 31 17:00:00 1969
  27739. +++ amiga/fsf/emacs18/manifests/src    Sat Sep 28 00:00:00 1996
  27740. @@ -0,0 +1,1013 @@
  27741. +fsf/emacs18/ChangeLog
  27742. +fsf/emacs18/INSTALL
  27743. +fsf/emacs18/Makefile
  27744. +fsf/emacs18/PROBLEMS
  27745. +fsf/emacs18/Product-Info
  27746. +fsf/emacs18/README
  27747. +fsf/emacs18/VMSINSTALL
  27748. +fsf/emacs18/VMSNOTES
  27749. +fsf/emacs18/allrename.com
  27750. +fsf/emacs18/amiga/README
  27751. +fsf/emacs18/amiga/amiga-extra/INSTALL.AMIGA
  27752. +fsf/emacs18/amiga/amiga-extra/amiga/.emacs
  27753. +fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.el
  27754. +fsf/emacs18/amiga/amiga-extra/amiga/.emacs-menu.menu
  27755. +fsf/emacs18/amiga/amiga-extra/amiga/amiga.doc
  27756. +fsf/emacs18/amiga/amiga-extra/amiga/announce1.28
  27757. +fsf/emacs18/amiga/amiga-extra/amiga/c/emacs
  27758. +fsf/emacs18/amiga/amiga-extra/amiga/c/etags.uue
  27759. +fsf/emacs18/amiga/amiga-extra/amiga/c/getstack.uue
  27760. +fsf/emacs18/amiga/amiga-extra/amiga/c/grep.uue
  27761. +fsf/emacs18/amiga/amiga-extra/amiga/c/ls.uue
  27762. +fsf/emacs18/amiga/amiga-extra/amiga/c/rmdir.uue
  27763. +fsf/emacs18/amiga/amiga-extra/amiga/c/sort.uue
  27764. +fsf/emacs18/amiga/amiga-extra/amiga/compile.doc
  27765. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/amiga-user-name.el
  27766. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/lisp/fix-endif-no-comment.el
  27767. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/invoker
  27768. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/chopps/rexx/sayval.rexx
  27769. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/README
  27770. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.el
  27771. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/dtags.elc
  27772. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/dgay/make-dtags.el
  27773. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/README
  27774. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/distinews.lha
  27775. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/emacs.rexx
  27776. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/cc
  27777. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail
  27778. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/fakemail.c
  27779. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/sascopts
  27780. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/fakemail/version.h
  27781. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/cc
  27782. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail
  27783. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/movemail.c
  27784. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/sascopts
  27785. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/hessu/movemail/version.h
  27786. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/README
  27787. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/kaiser/pub
  27788. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING
  27789. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/COPYING.info
  27790. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/Emacs.info
  27791. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.el
  27792. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons.info
  27793. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_asm.info
  27794. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_c.info
  27795. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_el.info
  27796. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_emacs.info
  27797. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_h.info
  27798. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/icons/def_rexx.info
  27799. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp.info
  27800. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el
  27801. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.el.info
  27802. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc
  27803. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/newicon.elc.info
  27804. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el
  27805. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.el.info
  27806. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc
  27807. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/lisp/sticky.elc.info
  27808. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx.info
  27809. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx
  27810. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexx/emacs.rexx.info
  27811. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/rexxmode10.lha
  27812. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/sas-c-emacs.lha
  27813. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc
  27814. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/starter.doc.info
  27815. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg.info
  27816. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile
  27817. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/makefile.info
  27818. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg
  27819. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c
  27820. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.c.info
  27821. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/wbarg/wbarg.info
  27822. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/lindgren/xsh11.lha
  27823. +fsf/emacs18/amiga/amiga-extra/amiga/contrib/schinz/functions.el
  27824. +fsf/emacs18/amiga/unix/include/alloca.h
  27825. +fsf/emacs18/amiga/unix/include/amiga/ioctl.h
  27826. +fsf/emacs18/amiga/unix/include/errno.h
  27827. +fsf/emacs18/amiga/unix/include/fcntl.h
  27828. +fsf/emacs18/amiga/unix/include/grp.h
  27829. +fsf/emacs18/amiga/unix/include/internal/devices.h
  27830. +fsf/emacs18/amiga/unix/include/internal/files.h
  27831. +fsf/emacs18/amiga/unix/include/internal/messages.h
  27832. +fsf/emacs18/amiga/unix/include/internal/timers.h
  27833. +fsf/emacs18/amiga/unix/include/internal/vars.h
  27834. +fsf/emacs18/amiga/unix/include/pwd.h
  27835. +fsf/emacs18/amiga/unix/include/setjmp.h
  27836. +fsf/emacs18/amiga/unix/include/signal.h
  27837. +fsf/emacs18/amiga/unix/include/stat.h
  27838. +fsf/emacs18/amiga/unix/include/stdio.h
  27839. +fsf/emacs18/amiga/unix/include/stdlib.h
  27840. +fsf/emacs18/amiga/unix/include/strings.h
  27841. +fsf/emacs18/amiga/unix/include/sys/cdefs.h
  27842. +fsf/emacs18/amiga/unix/include/sys/fcntl.h
  27843. +fsf/emacs18/amiga/unix/include/sys/file.h
  27844. +fsf/emacs18/amiga/unix/include/sys/filio.h
  27845. +fsf/emacs18/amiga/unix/include/sys/ioctl.h
  27846. +fsf/emacs18/amiga/unix/include/sys/param.h
  27847. +fsf/emacs18/amiga/unix/include/sys/socket.h
  27848. +fsf/emacs18/amiga/unix/include/sys/stat.h
  27849. +fsf/emacs18/amiga/unix/include/sys/termios.h
  27850. +fsf/emacs18/amiga/unix/include/sys/time.h
  27851. +fsf/emacs18/amiga/unix/include/sys/timeb.h
  27852. +fsf/emacs18/amiga/unix/include/sys/types.h
  27853. +fsf/emacs18/amiga/unix/include/sys/unistd.h
  27854. +fsf/emacs18/amiga/unix/include/sys/vlimit.h
  27855. +fsf/emacs18/amiga/unix/include/sys/wait.h
  27856. +fsf/emacs18/amiga/unix/include/time.h
  27857. +fsf/emacs18/amiga/unix/include/tzfile.h
  27858. +fsf/emacs18/amiga/unix/include/unistd.h
  27859. +fsf/emacs18/amiga/unix/include/utime.h
  27860. +fsf/emacs18/amiga/unix/intro.doc
  27861. +fsf/emacs18/amiga/unix/mkmkf
  27862. +fsf/emacs18/amiga/unix/mkmkf.perl
  27863. +fsf/emacs18/amiga/unix/src/SCOPTIONS
  27864. +fsf/emacs18/amiga/unix/src/_exit.c
  27865. +fsf/emacs18/amiga/unix/src/_main.c
  27866. +fsf/emacs18/amiga/unix/src/_setjmp.asm
  27867. +fsf/emacs18/amiga/unix/src/abort.c
  27868. +fsf/emacs18/amiga/unix/src/access.c
  27869. +fsf/emacs18/amiga/unix/src/alloca.c
  27870. +fsf/emacs18/amiga/unix/src/allocdos.c
  27871. +fsf/emacs18/amiga/unix/src/amiga.h
  27872. +fsf/emacs18/amiga/unix/src/amigaos.c
  27873. +fsf/emacs18/amiga/unix/src/amigaos.h
  27874. +fsf/emacs18/amiga/unix/src/amigatime.c
  27875. +fsf/emacs18/amiga/unix/src/bcmp.c
  27876. +fsf/emacs18/amiga/unix/src/bcopy.c
  27877. +fsf/emacs18/amiga/unix/src/bzero.c
  27878. +fsf/emacs18/amiga/unix/src/chmod.c
  27879. +fsf/emacs18/amiga/unix/src/chown.c
  27880. +fsf/emacs18/amiga/unix/src/close.c
  27881. +fsf/emacs18/amiga/unix/src/creat.c
  27882. +fsf/emacs18/amiga/unix/src/ctime.c
  27883. +fsf/emacs18/amiga/unix/src/devices.c
  27884. +fsf/emacs18/amiga/unix/src/dir.c
  27885. +fsf/emacs18/amiga/unix/src/dir_data.c
  27886. +fsf/emacs18/amiga/unix/src/dir_data.h
  27887. +fsf/emacs18/amiga/unix/src/error.c
  27888. +fsf/emacs18/amiga/unix/src/error_msg.c
  27889. +fsf/emacs18/amiga/unix/src/exec.c
  27890. +fsf/emacs18/amiga/unix/src/fchmod.c
  27891. +fsf/emacs18/amiga/unix/src/fcntl.c
  27892. +fsf/emacs18/amiga/unix/src/fibstat.c
  27893. +fsf/emacs18/amiga/unix/src/fibstat.h
  27894. +fsf/emacs18/amiga/unix/src/fifo.h
  27895. +fsf/emacs18/amiga/unix/src/fifo_pragmas.h
  27896. +fsf/emacs18/amiga/unix/src/fifofd.c
  27897. +fsf/emacs18/amiga/unix/src/fifofd.h
  27898. +fsf/emacs18/amiga/unix/src/files.c
  27899. +fsf/emacs18/amiga/unix/src/fstat.c
  27900. +fsf/emacs18/amiga/unix/src/ftruncate.c
  27901. +fsf/emacs18/amiga/unix/src/getenv.c
  27902. +fsf/emacs18/amiga/unix/src/gethostname.c
  27903. +fsf/emacs18/amiga/unix/src/getpid.c
  27904. +fsf/emacs18/amiga/unix/src/getwd.c
  27905. +fsf/emacs18/amiga/unix/src/gid.c
  27906. +fsf/emacs18/amiga/unix/src/grp.c
  27907. +fsf/emacs18/amiga/unix/src/index.c
  27908. +fsf/emacs18/amiga/unix/src/ioctl.c
  27909. +fsf/emacs18/amiga/unix/src/isatty.c
  27910. +fsf/emacs18/amiga/unix/src/kill.c
  27911. +fsf/emacs18/amiga/unix/src/link.c
  27912. +fsf/emacs18/amiga/unix/src/lseek.c
  27913. +fsf/emacs18/amiga/unix/src/message.c
  27914. +fsf/emacs18/amiga/unix/src/mkdir.c
  27915. +fsf/emacs18/amiga/unix/src/mkfifo.c
  27916. +fsf/emacs18/amiga/unix/src/mktemp.c
  27917. +fsf/emacs18/amiga/unix/src/open.c
  27918. +fsf/emacs18/amiga/unix/src/perror.c
  27919. +fsf/emacs18/amiga/unix/src/pipe.c
  27920. +fsf/emacs18/amiga/unix/src/popen.c
  27921. +fsf/emacs18/amiga/unix/src/processes.c
  27922. +fsf/emacs18/amiga/unix/src/processes.h
  27923. +fsf/emacs18/amiga/unix/src/protection.c
  27924. +fsf/emacs18/amiga/unix/src/pseudo_c.c
  27925. +fsf/emacs18/amiga/unix/src/pwd.c
  27926. +fsf/emacs18/amiga/unix/src/read.c
  27927. +fsf/emacs18/amiga/unix/src/readlink.c
  27928. +fsf/emacs18/amiga/unix/src/rename.c
  27929. +fsf/emacs18/amiga/unix/src/rindex.c
  27930. +fsf/emacs18/amiga/unix/src/rmdir.c
  27931. +fsf/emacs18/amiga/unix/src/select.c
  27932. +fsf/emacs18/amiga/unix/src/setjmp.c
  27933. +fsf/emacs18/amiga/unix/src/siglist.c
  27934. +fsf/emacs18/amiga/unix/src/signal.c
  27935. +fsf/emacs18/amiga/unix/src/signals.c
  27936. +fsf/emacs18/amiga/unix/src/signals.h
  27937. +fsf/emacs18/amiga/unix/src/sigpause.c
  27938. +fsf/emacs18/amiga/unix/src/sigsetmask.c
  27939. +fsf/emacs18/amiga/unix/src/sleep.c
  27940. +fsf/emacs18/amiga/unix/src/smakefile
  27941. +fsf/emacs18/amiga/unix/src/smakefile.base
  27942. +fsf/emacs18/amiga/unix/src/sprintf.asm
  27943. +fsf/emacs18/amiga/unix/src/start.c
  27944. +fsf/emacs18/amiga/unix/src/stat.c
  27945. +fsf/emacs18/amiga/unix/src/strftime.c
  27946. +fsf/emacs18/amiga/unix/src/symlink.c
  27947. +fsf/emacs18/amiga/unix/src/time.c
  27948. +fsf/emacs18/amiga/unix/src/timeconvert.c
  27949. +fsf/emacs18/amiga/unix/src/timeconvert.h
  27950. +fsf/emacs18/amiga/unix/src/timers.c
  27951. +fsf/emacs18/amiga/unix/src/tmpnam.c
  27952. +fsf/emacs18/amiga/unix/src/truncate.c
  27953. +fsf/emacs18/amiga/unix/src/uid.c
  27954. +fsf/emacs18/amiga/unix/src/umask.c
  27955. +fsf/emacs18/amiga/unix/src/unix-hard.lib.uue
  27956. +fsf/emacs18/amiga/unix/src/unix.lib.uue
  27957. +fsf/emacs18/amiga/unix/src/unlink.c
  27958. +fsf/emacs18/amiga/unix/src/utime.c
  27959. +fsf/emacs18/amiga/unix/src/wait4.c
  27960. +fsf/emacs18/amiga/unix/src/write.c
  27961. +fsf/emacs18/amiga/unix/src/zoneinfo/SCOPTIONS
  27962. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/africa
  27963. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/antarctica
  27964. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/asia
  27965. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/australasia
  27966. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/etcetera
  27967. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/europe
  27968. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/factory
  27969. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/leapseconds
  27970. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/northamerica
  27971. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/pacificnew
  27972. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/smakefile
  27973. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar87
  27974. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar88
  27975. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/solar89
  27976. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/southamerica
  27977. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/systemv
  27978. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1988
  27979. +fsf/emacs18/amiga/unix/src/zoneinfo/datfiles/usno1989
  27980. +fsf/emacs18/amiga/unix/src/zoneinfo/getopt.c
  27981. +fsf/emacs18/amiga/unix/src/zoneinfo/getopt.h
  27982. +fsf/emacs18/amiga/unix/src/zoneinfo/ialloc.c
  27983. +fsf/emacs18/amiga/unix/src/zoneinfo/smakefile
  27984. +fsf/emacs18/amiga/unix/src/zoneinfo/zic
  27985. +fsf/emacs18/amiga/unix/src/zoneinfo/zic.8
  27986. +fsf/emacs18/amiga/unix/src/zoneinfo/zic.c
  27987. +fsf/emacs18/amiga/unix/unix.doc
  27988. +fsf/emacs18/build-install
  27989. +fsf/emacs18/cpp/Makefile
  27990. +fsf/emacs18/cpp/SCOPTIONS
  27991. +fsf/emacs18/cpp/cccp.c
  27992. +fsf/emacs18/cpp/cexp.y
  27993. +fsf/emacs18/cpp/smakefile
  27994. +fsf/emacs18/emacs.com
  27995. +fsf/emacs18/etc/3B-MAXMEM
  27996. +fsf/emacs18/etc/AIX.DUMP
  27997. +fsf/emacs18/etc/APOLLO
  27998. +fsf/emacs18/etc/APPLE
  27999. +fsf/emacs18/etc/BABYL
  28000. +fsf/emacs18/etc/CCADIFF
  28001. +fsf/emacs18/etc/CHARACTERS
  28002. +fsf/emacs18/etc/COOKIES
  28003. +fsf/emacs18/etc/COPYING
  28004. +fsf/emacs18/etc/ChangeLog
  28005. +fsf/emacs18/etc/DEBUG
  28006. +fsf/emacs18/etc/DIFF
  28007. +fsf/emacs18/etc/DISTRIB
  28008. +fsf/emacs18/etc/FAQ
  28009. +fsf/emacs18/etc/FTP
  28010. +fsf/emacs18/etc/GNU
  28011. +fsf/emacs18/etc/GNU.JOKES
  28012. +fsf/emacs18/etc/GOSDIFF
  28013. +fsf/emacs18/etc/INTERVAL.IDEAS
  28014. +fsf/emacs18/etc/INTERVIEW
  28015. +fsf/emacs18/etc/LEDIT
  28016. +fsf/emacs18/etc/LPF
  28017. +fsf/emacs18/etc/MACHINES
  28018. +fsf/emacs18/etc/MAILINGLISTS
  28019. +fsf/emacs18/etc/MOTIVATION
  28020. +fsf/emacs18/etc/Makefile
  28021. +fsf/emacs18/etc/NEWS
  28022. +fsf/emacs18/etc/NICKLES.WORTH
  28023. +fsf/emacs18/etc/ONEWS
  28024. +fsf/emacs18/etc/OONEWS
  28025. +fsf/emacs18/etc/OPTIONS
  28026. +fsf/emacs18/etc/README
  28027. +fsf/emacs18/etc/SCOPTIONS
  28028. +fsf/emacs18/etc/SERVICE
  28029. +fsf/emacs18/etc/SUN-SUPPORT
  28030. +fsf/emacs18/etc/SUNBUG
  28031. +fsf/emacs18/etc/TERMS
  28032. +fsf/emacs18/etc/TO-DO
  28033. +fsf/emacs18/etc/TUTORIAL
  28034. +fsf/emacs18/etc/XDOC
  28035. +fsf/emacs18/etc/XENIX
  28036. +fsf/emacs18/etc/Xkeymap.txt
  28037. +fsf/emacs18/etc/amiga-env.c
  28038. +fsf/emacs18/etc/celibacy.1
  28039. +fsf/emacs18/etc/complink.com
  28040. +fsf/emacs18/etc/cvtmail.c
  28041. +fsf/emacs18/etc/digest-doc.c
  28042. +fsf/emacs18/etc/echo.msg
  28043. +fsf/emacs18/etc/emacs.1
  28044. +fsf/emacs18/etc/emacs.icon
  28045. +fsf/emacs18/etc/emacs.names
  28046. +fsf/emacs18/etc/emacsclient.c
  28047. +fsf/emacs18/etc/emacstool.1
  28048. +fsf/emacs18/etc/emacstool.c
  28049. +fsf/emacs18/etc/env.c
  28050. +fsf/emacs18/etc/etags-vmslib.c
  28051. +fsf/emacs18/etc/etags.c
  28052. +fsf/emacs18/etc/etags.vms
  28053. +fsf/emacs18/etc/fakemail.c
  28054. +fsf/emacs18/etc/faq2texi.perl
  28055. +fsf/emacs18/etc/ledit.l
  28056. +fsf/emacs18/etc/leditcfns.c
  28057. +fsf/emacs18/etc/make-docfile.c
  28058. +fsf/emacs18/etc/makedoc.com
  28059. +fsf/emacs18/etc/movemail.c
  28060. +fsf/emacs18/etc/ms-kermit
  28061. +fsf/emacs18/etc/ms-kermit-7bit
  28062. +fsf/emacs18/etc/qsort.c
  28063. +fsf/emacs18/etc/refcard.tex
  28064. +fsf/emacs18/etc/server.c
  28065. +fsf/emacs18/etc/sex.6
  28066. +fsf/emacs18/etc/sh.c
  28067. +fsf/emacs18/etc/smakefile
  28068. +fsf/emacs18/etc/sorted-doc.c
  28069. +fsf/emacs18/etc/spook.lines
  28070. +fsf/emacs18/etc/termcap.amiga
  28071. +fsf/emacs18/etc/termcap.dat
  28072. +fsf/emacs18/etc/termcap.ucb
  28073. +fsf/emacs18/etc/test-distrib.c
  28074. +fsf/emacs18/etc/testfile
  28075. +fsf/emacs18/etc/ulimit.hack
  28076. +fsf/emacs18/etc/vipcard.tex
  28077. +fsf/emacs18/etc/vmslink.opt
  28078. +fsf/emacs18/etc/wakeup.c
  28079. +fsf/emacs18/etc/xmouse.doc
  28080. +fsf/emacs18/etc/yow.c
  28081. +fsf/emacs18/etc/yow.lines
  28082. +fsf/emacs18/info/COPYING
  28083. +fsf/emacs18/info/dir
  28084. +fsf/emacs18/info/emacs
  28085. +fsf/emacs18/info/emacs-1
  28086. +fsf/emacs18/info/emacs-10
  28087. +fsf/emacs18/info/emacs-11
  28088. +fsf/emacs18/info/emacs-12
  28089. +fsf/emacs18/info/emacs-13
  28090. +fsf/emacs18/info/emacs-14
  28091. +fsf/emacs18/info/emacs-15
  28092. +fsf/emacs18/info/emacs-16
  28093. +fsf/emacs18/info/emacs-17
  28094. +fsf/emacs18/info/emacs-18
  28095. +fsf/emacs18/info/emacs-19
  28096. +fsf/emacs18/info/emacs-2
  28097. +fsf/emacs18/info/emacs-3
  28098. +fsf/emacs18/info/emacs-4
  28099. +fsf/emacs18/info/emacs-5
  28100. +fsf/emacs18/info/emacs-6
  28101. +fsf/emacs18/info/emacs-7
  28102. +fsf/emacs18/info/emacs-8
  28103. +fsf/emacs18/info/emacs-9
  28104. +fsf/emacs18/info/info
  28105. +fsf/emacs18/info/regex
  28106. +fsf/emacs18/info/termcap
  28107. +fsf/emacs18/info/termcap-1
  28108. +fsf/emacs18/info/termcap-2
  28109. +fsf/emacs18/info/termcap-3
  28110. +fsf/emacs18/info/texinfo
  28111. +fsf/emacs18/info/texinfo-1
  28112. +fsf/emacs18/info/texinfo-2
  28113. +fsf/emacs18/info/texinfo-3
  28114. +fsf/emacs18/info/texinfo-4
  28115. +fsf/emacs18/info/vip
  28116. +fsf/emacs18/info/vip-1
  28117. +fsf/emacs18/info/vip-2
  28118. +fsf/emacs18/install.sh
  28119. +fsf/emacs18/kepteditor.com
  28120. +fsf/emacs18/lisp/COPYING
  28121. +fsf/emacs18/lisp/ChangeLog
  28122. +fsf/emacs18/lisp/abbrev.el
  28123. +fsf/emacs18/lisp/abbrev.elc
  28124. +fsf/emacs18/lisp/abbrevlist.el
  28125. +fsf/emacs18/lisp/abbrevlist.elc
  28126. +fsf/emacs18/lisp/ada.el
  28127. +fsf/emacs18/lisp/ada.elc
  28128. +fsf/emacs18/lisp/add-log.el
  28129. +fsf/emacs18/lisp/add-log.elc
  28130. +fsf/emacs18/lisp/amiga-init.el
  28131. +fsf/emacs18/lisp/amiga-init.elc
  28132. +fsf/emacs18/lisp/amiga-menu.el
  28133. +fsf/emacs18/lisp/amiga-menu.elc
  28134. +fsf/emacs18/lisp/amiga-mouse.el
  28135. +fsf/emacs18/lisp/amiga-mouse.elc
  28136. +fsf/emacs18/lisp/autoinsert.el
  28137. +fsf/emacs18/lisp/backquote.el
  28138. +fsf/emacs18/lisp/backquote.elc
  28139. +fsf/emacs18/lisp/bg-mouse.el
  28140. +fsf/emacs18/lisp/bibtex.el
  28141. +fsf/emacs18/lisp/bibtex.elc
  28142. +fsf/emacs18/lisp/blackbox.el
  28143. +fsf/emacs18/lisp/blackbox.elc
  28144. +fsf/emacs18/lisp/buff-menu.el
  28145. +fsf/emacs18/lisp/buff-menu.elc
  28146. +fsf/emacs18/lisp/bytecomp.el
  28147. +fsf/emacs18/lisp/bytecomp.elc
  28148. +fsf/emacs18/lisp/c-fill.el
  28149. +fsf/emacs18/lisp/c-fill.elc
  28150. +fsf/emacs18/lisp/c-mode.el
  28151. +fsf/emacs18/lisp/c-mode.elc
  28152. +fsf/emacs18/lisp/cal.el
  28153. +fsf/emacs18/lisp/cal.elc
  28154. +fsf/emacs18/lisp/chistory.el
  28155. +fsf/emacs18/lisp/chistory.elc
  28156. +fsf/emacs18/lisp/cl-indent.el
  28157. +fsf/emacs18/lisp/cl-indent.elc
  28158. +fsf/emacs18/lisp/cl.el
  28159. +fsf/emacs18/lisp/cl.elc
  28160. +fsf/emacs18/lisp/cmacexp.el
  28161. +fsf/emacs18/lisp/compare-w.el
  28162. +fsf/emacs18/lisp/compare-w.elc
  28163. +fsf/emacs18/lisp/compile.el
  28164. +fsf/emacs18/lisp/compile.elc
  28165. +fsf/emacs18/lisp/dabbrev.el
  28166. +fsf/emacs18/lisp/dabbrev.elc
  28167. +fsf/emacs18/lisp/dbx.el
  28168. +fsf/emacs18/lisp/dbx.elc
  28169. +fsf/emacs18/lisp/debug.el
  28170. +fsf/emacs18/lisp/debug.elc
  28171. +fsf/emacs18/lisp/dired.el
  28172. +fsf/emacs18/lisp/dired.elc
  28173. +fsf/emacs18/lisp/disass.el
  28174. +fsf/emacs18/lisp/disass.elc
  28175. +fsf/emacs18/lisp/dissociate.el
  28176. +fsf/emacs18/lisp/dissociate.elc
  28177. +fsf/emacs18/lisp/doctex.el
  28178. +fsf/emacs18/lisp/doctor.el
  28179. +fsf/emacs18/lisp/doctor.elc
  28180. +fsf/emacs18/lisp/ebuff-menu.el
  28181. +fsf/emacs18/lisp/ebuff-menu.elc
  28182. +fsf/emacs18/lisp/echistory.el
  28183. +fsf/emacs18/lisp/echistory.elc
  28184. +fsf/emacs18/lisp/edt-doc.el
  28185. +fsf/emacs18/lisp/edt.el
  28186. +fsf/emacs18/lisp/edt.elc
  28187. +fsf/emacs18/lisp/ehelp.el
  28188. +fsf/emacs18/lisp/ehelp.elc
  28189. +fsf/emacs18/lisp/electric.el
  28190. +fsf/emacs18/lisp/electric.elc
  28191. +fsf/emacs18/lisp/emacsbug.el
  28192. +fsf/emacs18/lisp/files.el
  28193. +fsf/emacs18/lisp/files.elc
  28194. +fsf/emacs18/lisp/fill.el
  28195. +fsf/emacs18/lisp/fill.elc
  28196. +fsf/emacs18/lisp/flame.el
  28197. +fsf/emacs18/lisp/flame.elc
  28198. +fsf/emacs18/lisp/float.el
  28199. +fsf/emacs18/lisp/float.elc
  28200. +fsf/emacs18/lisp/fortran.el
  28201. +fsf/emacs18/lisp/fortran.elc
  28202. +fsf/emacs18/lisp/ftp.el
  28203. +fsf/emacs18/lisp/ftp.elc
  28204. +fsf/emacs18/lisp/gdb.el
  28205. +fsf/emacs18/lisp/gdb.elc
  28206. +fsf/emacs18/lisp/gosmacs.el
  28207. +fsf/emacs18/lisp/grow-vers.el
  28208. +fsf/emacs18/lisp/hanoi.el
  28209. +fsf/emacs18/lisp/hanoi.elc
  28210. +fsf/emacs18/lisp/help.el
  28211. +fsf/emacs18/lisp/help.elc
  28212. +fsf/emacs18/lisp/helper.el
  28213. +fsf/emacs18/lisp/helper.elc
  28214. +fsf/emacs18/lisp/hideif.el
  28215. +fsf/emacs18/lisp/hideif.elc
  28216. +fsf/emacs18/lisp/icon.el
  28217. +fsf/emacs18/lisp/icon.elc
  28218. +fsf/emacs18/lisp/inc-vers.el
  28219. +fsf/emacs18/lisp/indent.el
  28220. +fsf/emacs18/lisp/indent.elc
  28221. +fsf/emacs18/lisp/info.el
  28222. +fsf/emacs18/lisp/info.elc
  28223. +fsf/emacs18/lisp/informat.el
  28224. +fsf/emacs18/lisp/informat.elc
  28225. +fsf/emacs18/lisp/isearch.el
  28226. +fsf/emacs18/lisp/isearch.elc
  28227. +fsf/emacs18/lisp/kermit.el
  28228. +fsf/emacs18/lisp/keypad.el
  28229. +fsf/emacs18/lisp/keypad.elc
  28230. +fsf/emacs18/lisp/ledit.el
  28231. +fsf/emacs18/lisp/life.el
  28232. +fsf/emacs18/lisp/life.elc
  28233. +fsf/emacs18/lisp/lisp-mode.el
  28234. +fsf/emacs18/lisp/lisp-mode.elc
  28235. +fsf/emacs18/lisp/lisp.el
  28236. +fsf/emacs18/lisp/lisp.elc
  28237. +fsf/emacs18/lisp/loaddefs.el
  28238. +fsf/emacs18/lisp/loadup.el
  28239. +fsf/emacs18/lisp/lpr.el
  28240. +fsf/emacs18/lisp/lpr.elc
  28241. +fsf/emacs18/lisp/macros.el
  28242. +fsf/emacs18/lisp/macros.elc
  28243. +fsf/emacs18/lisp/mail-utils.el
  28244. +fsf/emacs18/lisp/mail-utils.elc
  28245. +fsf/emacs18/lisp/mailalias.el
  28246. +fsf/emacs18/lisp/mailalias.elc
  28247. +fsf/emacs18/lisp/mailpost.el
  28248. +fsf/emacs18/lisp/makesum.el
  28249. +fsf/emacs18/lisp/makesum.elc
  28250. +fsf/emacs18/lisp/man.el
  28251. +fsf/emacs18/lisp/man.elc
  28252. +fsf/emacs18/lisp/medit.el
  28253. +fsf/emacs18/lisp/medit.elc
  28254. +fsf/emacs18/lisp/meese.el
  28255. +fsf/emacs18/lisp/mh-e.el
  28256. +fsf/emacs18/lisp/mh-e.elc
  28257. +fsf/emacs18/lisp/mim-mode.el
  28258. +fsf/emacs18/lisp/mim-mode.elc
  28259. +fsf/emacs18/lisp/mim-syntax.el
  28260. +fsf/emacs18/lisp/mim-syntax.elc
  28261. +fsf/emacs18/lisp/mlconvert.el
  28262. +fsf/emacs18/lisp/mlconvert.elc
  28263. +fsf/emacs18/lisp/mlsupport.el
  28264. +fsf/emacs18/lisp/mlsupport.elc
  28265. +fsf/emacs18/lisp/modula2.el
  28266. +fsf/emacs18/lisp/modula2.elc
  28267. +fsf/emacs18/lisp/novice.el
  28268. +fsf/emacs18/lisp/nroff-mode.el
  28269. +fsf/emacs18/lisp/nroff-mode.elc
  28270. +fsf/emacs18/lisp/options.el
  28271. +fsf/emacs18/lisp/options.elc
  28272. +fsf/emacs18/lisp/outline.el
  28273. +fsf/emacs18/lisp/outline.elc
  28274. +fsf/emacs18/lisp/page.el
  28275. +fsf/emacs18/lisp/page.elc
  28276. +fsf/emacs18/lisp/paragraphs.el
  28277. +fsf/emacs18/lisp/paragraphs.elc
  28278. +fsf/emacs18/lisp/paths.el
  28279. +fsf/emacs18/lisp/picture.el
  28280. +fsf/emacs18/lisp/picture.elc
  28281. +fsf/emacs18/lisp/prolog.el
  28282. +fsf/emacs18/lisp/prolog.elc
  28283. +fsf/emacs18/lisp/rect.el
  28284. +fsf/emacs18/lisp/rect.elc
  28285. +fsf/emacs18/lisp/register.el
  28286. +fsf/emacs18/lisp/register.elc
  28287. +fsf/emacs18/lisp/replace.el
  28288. +fsf/emacs18/lisp/replace.elc
  28289. +fsf/emacs18/lisp/rfc822.el
  28290. +fsf/emacs18/lisp/rfc822.elc
  28291. +fsf/emacs18/lisp/rmail.el
  28292. +fsf/emacs18/lisp/rmail.elc
  28293. +fsf/emacs18/lisp/rmailedit.el
  28294. +fsf/emacs18/lisp/rmailedit.elc
  28295. +fsf/emacs18/lisp/rmailkwd.el
  28296. +fsf/emacs18/lisp/rmailkwd.elc
  28297. +fsf/emacs18/lisp/rmailmsc.el
  28298. +fsf/emacs18/lisp/rmailmsc.elc
  28299. +fsf/emacs18/lisp/rmailout.el
  28300. +fsf/emacs18/lisp/rmailout.elc
  28301. +fsf/emacs18/lisp/rmailsum.el
  28302. +fsf/emacs18/lisp/rmailsum.elc
  28303. +fsf/emacs18/lisp/rnews.el
  28304. +fsf/emacs18/lisp/rnews.elc
  28305. +fsf/emacs18/lisp/rnewspost.el
  28306. +fsf/emacs18/lisp/rnewspost.elc
  28307. +fsf/emacs18/lisp/saveconf.el
  28308. +fsf/emacs18/lisp/scheme.el
  28309. +fsf/emacs18/lisp/scheme.elc
  28310. +fsf/emacs18/lisp/scribe.el
  28311. +fsf/emacs18/lisp/scribe.elc
  28312. +fsf/emacs18/lisp/sendmail.el
  28313. +fsf/emacs18/lisp/sendmail.elc
  28314. +fsf/emacs18/lisp/server.el
  28315. +fsf/emacs18/lisp/server.elc
  28316. +fsf/emacs18/lisp/shell.el
  28317. +fsf/emacs18/lisp/shell.elc
  28318. +fsf/emacs18/lisp/simple.el
  28319. +fsf/emacs18/lisp/simple.elc
  28320. +fsf/emacs18/lisp/simula.defns
  28321. +fsf/emacs18/lisp/simula.el
  28322. +fsf/emacs18/lisp/simula.elc
  28323. +fsf/emacs18/lisp/sort.el
  28324. +fsf/emacs18/lisp/sort.elc
  28325. +fsf/emacs18/lisp/spell.el
  28326. +fsf/emacs18/lisp/spell.elc
  28327. +fsf/emacs18/lisp/spook.el
  28328. +fsf/emacs18/lisp/startup.el
  28329. +fsf/emacs18/lisp/startup.elc
  28330. +fsf/emacs18/lisp/studly.el
  28331. +fsf/emacs18/lisp/studly.elc
  28332. +fsf/emacs18/lisp/subr.el
  28333. +fsf/emacs18/lisp/subr.elc
  28334. +fsf/emacs18/lisp/sun-cursors.el
  28335. +fsf/emacs18/lisp/sun-fns.el
  28336. +fsf/emacs18/lisp/sun-fns.elc
  28337. +fsf/emacs18/lisp/sun-keys.el
  28338. +fsf/emacs18/lisp/sun-mouse.el
  28339. +fsf/emacs18/lisp/sun-mouse.elc
  28340. +fsf/emacs18/lisp/sup-mouse.el
  28341. +fsf/emacs18/lisp/sup-mouse.elc
  28342. +fsf/emacs18/lisp/tabify.el
  28343. +fsf/emacs18/lisp/tabify.elc
  28344. +fsf/emacs18/lisp/tags.el
  28345. +fsf/emacs18/lisp/tags.elc
  28346. +fsf/emacs18/lisp/telnet.el
  28347. +fsf/emacs18/lisp/telnet.elc
  28348. +fsf/emacs18/lisp/term/COPYING
  28349. +fsf/emacs18/lisp/term/apollo.el
  28350. +fsf/emacs18/lisp/term/at386.el
  28351. +fsf/emacs18/lisp/term/bbn.el
  28352. +fsf/emacs18/lisp/term/bg.el
  28353. +fsf/emacs18/lisp/term/bgnv.el
  28354. +fsf/emacs18/lisp/term/bgrv.el
  28355. +fsf/emacs18/lisp/term/bobcat.el
  28356. +fsf/emacs18/lisp/term/intuition-win.el
  28357. +fsf/emacs18/lisp/term/intuition-win.elc
  28358. +fsf/emacs18/lisp/term/s4.el
  28359. +fsf/emacs18/lisp/term/sun.el
  28360. +fsf/emacs18/lisp/term/supdup.el
  28361. +fsf/emacs18/lisp/term/unixpc.el
  28362. +fsf/emacs18/lisp/term/vt100.el
  28363. +fsf/emacs18/lisp/term/vt101.el
  28364. +fsf/emacs18/lisp/term/vt102.el
  28365. +fsf/emacs18/lisp/term/vt125.el
  28366. +fsf/emacs18/lisp/term/vt131.el
  28367. +fsf/emacs18/lisp/term/vt200.el
  28368. +fsf/emacs18/lisp/term/vt220.el
  28369. +fsf/emacs18/lisp/term/vt240.el
  28370. +fsf/emacs18/lisp/term/vt300.el
  28371. +fsf/emacs18/lisp/term/x-win.el
  28372. +fsf/emacs18/lisp/term/xterm.el
  28373. +fsf/emacs18/lisp/terminal.el
  28374. +fsf/emacs18/lisp/terminal.elc
  28375. +fsf/emacs18/lisp/tex-mode.el
  28376. +fsf/emacs18/lisp/tex-mode.elc
  28377. +fsf/emacs18/lisp/tex-start.el
  28378. +fsf/emacs18/lisp/texinfmt.el
  28379. +fsf/emacs18/lisp/texinfmt.elc
  28380. +fsf/emacs18/lisp/texinfo.el
  28381. +fsf/emacs18/lisp/texinfo.elc
  28382. +fsf/emacs18/lisp/text-mode.el
  28383. +fsf/emacs18/lisp/text-mode.elc
  28384. +fsf/emacs18/lisp/time.el
  28385. +fsf/emacs18/lisp/time.elc
  28386. +fsf/emacs18/lisp/uncompress.el
  28387. +fsf/emacs18/lisp/underline.el
  28388. +fsf/emacs18/lisp/underline.elc
  28389. +fsf/emacs18/lisp/undigest.el
  28390. +fsf/emacs18/lisp/undigest.elc
  28391. +fsf/emacs18/lisp/unused.el
  28392. +fsf/emacs18/lisp/userlock.el
  28393. +fsf/emacs18/lisp/userlock.elc
  28394. +fsf/emacs18/lisp/version.el
  28395. +fsf/emacs18/lisp/vi.el
  28396. +fsf/emacs18/lisp/vi.elc
  28397. +fsf/emacs18/lisp/view.el
  28398. +fsf/emacs18/lisp/view.elc
  28399. +fsf/emacs18/lisp/vip.el
  28400. +fsf/emacs18/lisp/vip.elc
  28401. +fsf/emacs18/lisp/vms-patch.el
  28402. +fsf/emacs18/lisp/vms-patch.elc
  28403. +fsf/emacs18/lisp/vmsproc.el
  28404. +fsf/emacs18/lisp/vmsproc.elc
  28405. +fsf/emacs18/lisp/window.el
  28406. +fsf/emacs18/lisp/window.elc
  28407. +fsf/emacs18/lisp/x-menu.el
  28408. +fsf/emacs18/lisp/x-menu.elc
  28409. +fsf/emacs18/lisp/x-mouse.el
  28410. +fsf/emacs18/lisp/x-mouse.elc
  28411. +fsf/emacs18/lisp/xscheme.el
  28412. +fsf/emacs18/lisp/xscheme.elc
  28413. +fsf/emacs18/lisp/yow.el
  28414. +fsf/emacs18/lisp/yow.elc
  28415. +fsf/emacs18/man/ChangeLog
  28416. +fsf/emacs18/man/Makefile
  28417. +fsf/emacs18/man/README
  28418. +fsf/emacs18/man/cl.texinfo
  28419. +fsf/emacs18/man/emacs.aux
  28420. +fsf/emacs18/man/emacs.cps
  28421. +fsf/emacs18/man/emacs.fns
  28422. +fsf/emacs18/man/emacs.kys
  28423. +fsf/emacs18/man/emacs.pgs
  28424. +fsf/emacs18/man/emacs.texi
  28425. +fsf/emacs18/man/emacs.vrs
  28426. +fsf/emacs18/man/regex.texinfo
  28427. +fsf/emacs18/man/split-man
  28428. +fsf/emacs18/man/termcap.aux
  28429. +fsf/emacs18/man/termcap.cps
  28430. +fsf/emacs18/man/termcap.fns
  28431. +fsf/emacs18/man/termcap.kys
  28432. +fsf/emacs18/man/termcap.texi
  28433. +fsf/emacs18/man/texindex.c
  28434. +fsf/emacs18/man/texinfo.aux
  28435. +fsf/emacs18/man/texinfo.cps
  28436. +fsf/emacs18/man/texinfo.fns
  28437. +fsf/emacs18/man/texinfo.tex
  28438. +fsf/emacs18/man/texinfo.texi
  28439. +fsf/emacs18/man/vip.texinfo
  28440. +fsf/emacs18/manifests/bin
  28441. +fsf/emacs18/manifests/src
  28442. +fsf/emacs18/oldXMenu/Activate.c
  28443. +fsf/emacs18/oldXMenu/AddPane.c
  28444. +fsf/emacs18/oldXMenu/AddSel.c
  28445. +fsf/emacs18/oldXMenu/ChangeLog
  28446. +fsf/emacs18/oldXMenu/ChgPane.c
  28447. +fsf/emacs18/oldXMenu/ChgSel.c
  28448. +fsf/emacs18/oldXMenu/Create.c
  28449. +fsf/emacs18/oldXMenu/DelPane.c
  28450. +fsf/emacs18/oldXMenu/DelSel.c
  28451. +fsf/emacs18/oldXMenu/Destroy.c
  28452. +fsf/emacs18/oldXMenu/Error.c
  28453. +fsf/emacs18/oldXMenu/EvHand.c
  28454. +fsf/emacs18/oldXMenu/FindPane.c
  28455. +fsf/emacs18/oldXMenu/FindSel.c
  28456. +fsf/emacs18/oldXMenu/Imakefile
  28457. +fsf/emacs18/oldXMenu/InsPane.c
  28458. +fsf/emacs18/oldXMenu/InsSel.c
  28459. +fsf/emacs18/oldXMenu/Internal.c
  28460. +fsf/emacs18/oldXMenu/Locate.c
  28461. +fsf/emacs18/oldXMenu/Makefile
  28462. +fsf/emacs18/oldXMenu/Post.c
  28463. +fsf/emacs18/oldXMenu/README
  28464. +fsf/emacs18/oldXMenu/Recomp.c
  28465. +fsf/emacs18/oldXMenu/SetAEQ.c
  28466. +fsf/emacs18/oldXMenu/SetFrz.c
  28467. +fsf/emacs18/oldXMenu/SetPane.c
  28468. +fsf/emacs18/oldXMenu/SetSel.c
  28469. +fsf/emacs18/oldXMenu/X10.h
  28470. +fsf/emacs18/oldXMenu/XCrAssoc.c
  28471. +fsf/emacs18/oldXMenu/XDelAssoc.c
  28472. +fsf/emacs18/oldXMenu/XDestAssoc.c
  28473. +fsf/emacs18/oldXMenu/XLookAssoc.c
  28474. +fsf/emacs18/oldXMenu/XMakeAssoc.c
  28475. +fsf/emacs18/oldXMenu/XMenu.h
  28476. +fsf/emacs18/oldXMenu/XMenuInt.h
  28477. +fsf/emacs18/oldXMenu/copyright.h
  28478. +fsf/emacs18/oldXMenu/insque.c
  28479. +fsf/emacs18/shortnames/COPYING
  28480. +fsf/emacs18/shortnames/Makefile
  28481. +fsf/emacs18/shortnames/defines.c
  28482. +fsf/emacs18/shortnames/dups.c
  28483. +fsf/emacs18/shortnames/header.h
  28484. +fsf/emacs18/shortnames/names.c
  28485. +fsf/emacs18/shortnames/reserved
  28486. +fsf/emacs18/shortnames/special
  28487. +fsf/emacs18/src/.dbxinit
  28488. +fsf/emacs18/src/COPYING
  28489. +fsf/emacs18/src/ChangeLog
  28490. +fsf/emacs18/src/Makefile
  28491. +fsf/emacs18/src/README
  28492. +fsf/emacs18/src/SCOPTIONS
  28493. +fsf/emacs18/src/TAGS
  28494. +fsf/emacs18/src/VMSBUILD
  28495. +fsf/emacs18/src/abbrev.c
  28496. +fsf/emacs18/src/acldef.h
  28497. +fsf/emacs18/src/alloc.c
  28498. +fsf/emacs18/src/alloca.c
  28499. +fsf/emacs18/src/alloca.s
  28500. +fsf/emacs18/src/amiga.h
  28501. +fsf/emacs18/src/amiga_clipboard.c
  28502. +fsf/emacs18/src/amiga_data.c
  28503. +fsf/emacs18/src/amiga_dump.c
  28504. +fsf/emacs18/src/amiga_malloc.c
  28505. +fsf/emacs18/src/amiga_menu.c
  28506. +fsf/emacs18/src/amiga_processes.c
  28507. +fsf/emacs18/src/amiga_rexx.c
  28508. +fsf/emacs18/src/amiga_screen.c
  28509. +fsf/emacs18/src/amiga_serial.c
  28510. +fsf/emacs18/src/amiga_sysdep.c
  28511. +fsf/emacs18/src/amiga_term.c
  28512. +fsf/emacs18/src/amiga_tty.c
  28513. +fsf/emacs18/src/buffer.c
  28514. +fsf/emacs18/src/buffer.h
  28515. +fsf/emacs18/src/build.com
  28516. +fsf/emacs18/src/bytecode.c
  28517. +fsf/emacs18/src/callint.c
  28518. +fsf/emacs18/src/callproc.c
  28519. +fsf/emacs18/src/casefiddle.c
  28520. +fsf/emacs18/src/ccom.com
  28521. +fsf/emacs18/src/chpdef.h
  28522. +fsf/emacs18/src/cm.c
  28523. +fsf/emacs18/src/cm.h
  28524. +fsf/emacs18/src/cmds.c
  28525. +fsf/emacs18/src/commands.h
  28526. +fsf/emacs18/src/compile.com
  28527. +fsf/emacs18/src/config.h-dist
  28528. +fsf/emacs18/src/crt0.c
  28529. +fsf/emacs18/src/data.c
  28530. +fsf/emacs18/src/dir.h
  28531. +fsf/emacs18/src/dired.c
  28532. +fsf/emacs18/src/dispextern.h
  28533. +fsf/emacs18/src/dispnew.c
  28534. +fsf/emacs18/src/doc.c
  28535. +fsf/emacs18/src/doprnt.c
  28536. +fsf/emacs18/src/dostrip.c
  28537. +fsf/emacs18/src/editfns.c
  28538. +fsf/emacs18/src/emacs.c
  28539. +fsf/emacs18/src/emacssignal.h
  28540. +fsf/emacs18/src/environ.c
  28541. +fsf/emacs18/src/eval.c
  28542. +fsf/emacs18/src/exec.c
  28543. +fsf/emacs18/src/fileio.c
  28544. +fsf/emacs18/src/filelock.c
  28545. +fsf/emacs18/src/filemode.c
  28546. +fsf/emacs18/src/filetypes.h
  28547. +fsf/emacs18/src/firstfile.c
  28548. +fsf/emacs18/src/fns.c
  28549. +fsf/emacs18/src/getpagesize.h
  28550. +fsf/emacs18/src/gettime.h
  28551. +fsf/emacs18/src/hftctl.c
  28552. +fsf/emacs18/src/indent.c
  28553. +fsf/emacs18/src/indent.h
  28554. +fsf/emacs18/src/insdel.c
  28555. +fsf/emacs18/src/ioctl.h
  28556. +fsf/emacs18/src/keyboard.c
  28557. +fsf/emacs18/src/keymap.c
  28558. +fsf/emacs18/src/lastfile.c
  28559. +fsf/emacs18/src/link.com
  28560. +fsf/emacs18/src/lisp.h
  28561. +fsf/emacs18/src/lread.c
  28562. +fsf/emacs18/src/m-7300.h
  28563. +fsf/emacs18/src/m-all2800.h
  28564. +fsf/emacs18/src/m-alliant.h
  28565. +fsf/emacs18/src/m-alliant1.h
  28566. +fsf/emacs18/src/m-alliant4.h
  28567. +fsf/emacs18/src/m-altos.h
  28568. +fsf/emacs18/src/m-amdahl.h
  28569. +fsf/emacs18/src/m-amiga.h
  28570. +fsf/emacs18/src/m-apollo.h
  28571. +fsf/emacs18/src/m-att3b.h
  28572. +fsf/emacs18/src/m-aviion.h
  28573. +fsf/emacs18/src/m-bullx20.h
  28574. +fsf/emacs18/src/m-celerity.h
  28575. +fsf/emacs18/src/m-convex.h
  28576. +fsf/emacs18/src/m-cydra5.h
  28577. +fsf/emacs18/src/m-delta.h
  28578. +fsf/emacs18/src/m-delta88.h
  28579. +fsf/emacs18/src/m-dpx2-200.h
  28580. +fsf/emacs18/src/m-dpx2-300.h
  28581. +fsf/emacs18/src/m-dpx2.h
  28582. +fsf/emacs18/src/m-dual.h
  28583. +fsf/emacs18/src/m-elxsi.h
  28584. +fsf/emacs18/src/m-gec63.h
  28585. +fsf/emacs18/src/m-gould.h
  28586. +fsf/emacs18/src/m-hp9000s300.h
  28587. +fsf/emacs18/src/m-hp9000s800.h
  28588. +fsf/emacs18/src/m-ibmps2-aix.h
  28589. +fsf/emacs18/src/m-ibmrs6000.h
  28590. +fsf/emacs18/src/m-ibmrt-aix.h
  28591. +fsf/emacs18/src/m-ibmrt.h
  28592. +fsf/emacs18/src/m-intel386.h
  28593. +fsf/emacs18/src/m-intel860.h
  28594. +fsf/emacs18/src/m-iris4d.h
  28595. +fsf/emacs18/src/m-irist.h
  28596. +fsf/emacs18/src/m-is386.h
  28597. +fsf/emacs18/src/m-isi-ov.h
  28598. +fsf/emacs18/src/m-masscomp.h
  28599. +fsf/emacs18/src/m-mega68.h
  28600. +fsf/emacs18/src/m-mg1.h
  28601. +fsf/emacs18/src/m-mips.h
  28602. +fsf/emacs18/src/m-mips4.h
  28603. +fsf/emacs18/src/m-news-risc.h
  28604. +fsf/emacs18/src/m-news.h
  28605. +fsf/emacs18/src/m-next.h
  28606. +fsf/emacs18/src/m-ns16000.h
  28607. +fsf/emacs18/src/m-ns32000.h
  28608. +fsf/emacs18/src/m-nu.h
  28609. +fsf/emacs18/src/m-orion.h
  28610. +fsf/emacs18/src/m-orion105.h
  28611. +fsf/emacs18/src/m-pfa50.h
  28612. +fsf/emacs18/src/m-plexus.h
  28613. +fsf/emacs18/src/m-pmax.h
  28614. +fsf/emacs18/src/m-pyramid.h
  28615. +fsf/emacs18/src/m-pyrmips.h
  28616. +fsf/emacs18/src/m-seq386.h
  28617. +fsf/emacs18/src/m-sequent.h
  28618. +fsf/emacs18/src/m-sgi3000.h
  28619. +fsf/emacs18/src/m-sparc.h
  28620. +fsf/emacs18/src/m-stride.h
  28621. +fsf/emacs18/src/m-sun1.h
  28622. +fsf/emacs18/src/m-sun2.h
  28623. +fsf/emacs18/src/m-sun3.h
  28624. +fsf/emacs18/src/m-sun386.h
  28625. +fsf/emacs18/src/m-tad68k.h
  28626. +fsf/emacs18/src/m-tahoe.h
  28627. +fsf/emacs18/src/m-tandem-s2.h
  28628. +fsf/emacs18/src/m-targon31.h
  28629. +fsf/emacs18/src/m-tek4300.h
  28630. +fsf/emacs18/src/m-template.h
  28631. +fsf/emacs18/src/m-tower32.h
  28632. +fsf/emacs18/src/m-tower32v3.h
  28633. +fsf/emacs18/src/m-triton88.h
  28634. +fsf/emacs18/src/m-ustation.h
  28635. +fsf/emacs18/src/m-vax.h
  28636. +fsf/emacs18/src/m-wicat.h
  28637. +fsf/emacs18/src/macros.c
  28638. +fsf/emacs18/src/macros.h
  28639. +fsf/emacs18/src/malloc.c
  28640. +fsf/emacs18/src/marker.c
  28641. +fsf/emacs18/src/minibuf.c
  28642. +fsf/emacs18/src/mocklisp.c
  28643. +fsf/emacs18/src/ndir.h
  28644. +fsf/emacs18/src/param.h
  28645. +fsf/emacs18/src/paths.h-dist
  28646. +fsf/emacs18/src/pre-crt0.c
  28647. +fsf/emacs18/src/precomp.com
  28648. +fsf/emacs18/src/print.c
  28649. +fsf/emacs18/src/process.c
  28650. +fsf/emacs18/src/process.h
  28651. +fsf/emacs18/src/recomp.com
  28652. +fsf/emacs18/src/regex.c
  28653. +fsf/emacs18/src/regex.h
  28654. +fsf/emacs18/src/s-386bsd.h
  28655. +fsf/emacs18/src/s-386ix.h
  28656. +fsf/emacs18/src/s-aix3-1.h
  28657. +fsf/emacs18/src/s-aix3-2.h
  28658. +fsf/emacs18/src/s-amiga.h
  28659. +fsf/emacs18/src/s-bsd4-1.h
  28660. +fsf/emacs18/src/s-bsd4-2.h
  28661. +fsf/emacs18/src/s-bsd4-3.h
  28662. +fsf/emacs18/src/s-dgux.h
  28663. +fsf/emacs18/src/s-dgux4-31.h
  28664. +fsf/emacs18/src/s-esix.h
  28665. +fsf/emacs18/src/s-esix5r4.h
  28666. +fsf/emacs18/src/s-hpux7.h
  28667. +fsf/emacs18/src/s-hpux8.h
  28668. +fsf/emacs18/src/s-iris3-5.h
  28669. +fsf/emacs18/src/s-iris3-6.h
  28670. +fsf/emacs18/src/s-irix3-3.h
  28671. +fsf/emacs18/src/s-irix4-0.h
  28672. +fsf/emacs18/src/s-isc2-2.h
  28673. +fsf/emacs18/src/s-isc3-0.h
  28674. +fsf/emacs18/src/s-mach2.h
  28675. +fsf/emacs18/src/s-newsos5.h
  28676. +fsf/emacs18/src/s-osf1.h
  28677. +fsf/emacs18/src/s-rtu.h
  28678. +fsf/emacs18/src/s-sco.h
  28679. +fsf/emacs18/src/s-sco3-2-1.h
  28680. +fsf/emacs18/src/s-sco3-2-2.h
  28681. +fsf/emacs18/src/s-sco3-2-4.h
  28682. +fsf/emacs18/src/s-sol2.h
  28683. +fsf/emacs18/src/s-sunos4-0.h
  28684. +fsf/emacs18/src/s-sunos4-1.h
  28685. +fsf/emacs18/src/s-template.h
  28686. +fsf/emacs18/src/s-umax.h
  28687. +fsf/emacs18/src/s-unipl5-0.h
  28688. +fsf/emacs18/src/s-unipl5-2.h
  28689. +fsf/emacs18/src/s-usg5-0.h
  28690. +fsf/emacs18/src/s-usg5-2-2.h
  28691. +fsf/emacs18/src/s-usg5-2.h
  28692. +fsf/emacs18/src/s-usg5-3.h
  28693. +fsf/emacs18/src/s-usg5-4.h
  28694. +fsf/emacs18/src/s-vms.h
  28695. +fsf/emacs18/src/s-vms4-0.h
  28696. +fsf/emacs18/src/s-vms4-2.h
  28697. +fsf/emacs18/src/s-vms4-4.h
  28698. +fsf/emacs18/src/s-vms5-5.h
  28699. +fsf/emacs18/src/s-xenix.h
  28700. +fsf/emacs18/src/scroll.c
  28701. +fsf/emacs18/src/search.c
  28702. +fsf/emacs18/src/simplerexx.c
  28703. +fsf/emacs18/src/simplerexx.h
  28704. +fsf/emacs18/src/sink.h
  28705. +fsf/emacs18/src/sink11.h
  28706. +fsf/emacs18/src/sink11mask.h
  28707. +fsf/emacs18/src/sinkmask.h
  28708. +fsf/emacs18/src/smakefile
  28709. +fsf/emacs18/src/sunfns.c
  28710. +fsf/emacs18/src/syntax.c
  28711. +fsf/emacs18/src/syntax.h
  28712. +fsf/emacs18/src/sysdep.c
  28713. +fsf/emacs18/src/temacs.opt
  28714. +fsf/emacs18/src/term.c
  28715. +fsf/emacs18/src/termcap.c
  28716. +fsf/emacs18/src/termchar.h
  28717. +fsf/emacs18/src/termhooks.h
  28718. +fsf/emacs18/src/terminfo.c
  28719. +fsf/emacs18/src/termopts.h
  28720. +fsf/emacs18/src/testemacs.com
  28721. +fsf/emacs18/src/tparam.c
  28722. +fsf/emacs18/src/uaf.h
  28723. +fsf/emacs18/src/undo.c
  28724. +fsf/emacs18/src/unexaix.c
  28725. +fsf/emacs18/src/unexconvex.c
  28726. +fsf/emacs18/src/unexec.c
  28727. +fsf/emacs18/src/unexelf.c
  28728. +fsf/emacs18/src/unexenix.c
  28729. +fsf/emacs18/src/unexfx2800.c
  28730. +fsf/emacs18/src/unexhp9k800.c
  28731. +fsf/emacs18/src/unexmips.c
  28732. +fsf/emacs18/src/unexnext.c
  28733. +fsf/emacs18/src/unexshm.c
  28734. +fsf/emacs18/src/vlimit.h
  28735. +fsf/emacs18/src/vms-pp.c
  28736. +fsf/emacs18/src/vms-pp.trans
  28737. +fsf/emacs18/src/vms-pwd.h
  28738. +fsf/emacs18/src/vmsfns.c
  28739. +fsf/emacs18/src/vmsmap.c
  28740. +fsf/emacs18/src/vmspaths.h
  28741. +fsf/emacs18/src/window.c
  28742. +fsf/emacs18/src/window.h
  28743. +fsf/emacs18/src/x11fns.c
  28744. +fsf/emacs18/src/x11term.c
  28745. +fsf/emacs18/src/x11term.h
  28746. +fsf/emacs18/src/xdisp.c
  28747. +fsf/emacs18/src/xfns.c
  28748. +fsf/emacs18/src/xkeys-aix.h
  28749. +fsf/emacs18/src/xmenu.c
  28750. +fsf/emacs18/src/xterm.c
  28751. +fsf/emacs18/src/xterm.h
  28752. +fsf/emacs18/src/ymakefile
  28753. +fsf/emacs18/vmsdist.com
  28754. diff -rup --new-file baseline/fsf/emacs18/src/SCOPTIONS amiga/fsf/emacs18/src/SCOPTIONS
  28755. --- baseline/fsf/emacs18/src/SCOPTIONS    Wed Dec 31 17:00:00 1969
  28756. +++ amiga/fsf/emacs18/src/SCOPTIONS    Sat Sep 28 00:00:00 1996
  28757. @@ -0,0 +1,15 @@
  28758. +STRINGMERGE
  28759. +STRUCTUREEQUIVALENCE
  28760. +NOWARNVOIDRETURN
  28761. +NOVERSION
  28762. +MEMORYSIZE=HUGE
  28763. +INCLUDEDIR=//unix/include
  28764. +IGNORE=147
  28765. +IGNORE=62
  28766. +IGNORE=132
  28767. +IGNORE=154
  28768. +IGNORE=104
  28769. +IGNORE=100
  28770. +IGNORE=161
  28771. +IGNORE=84
  28772. +IGNORE=93
  28773. diff -rup --new-file baseline/fsf/emacs18/src/alloc.c amiga/fsf/emacs18/src/alloc.c
  28774. --- baseline/fsf/emacs18/src/alloc.c    Sun Sep 20 22:45:30 1992
  28775. +++ amiga/fsf/emacs18/src/alloc.c    Sat Sep 28 00:00:00 1996
  28776. @@ -76,6 +76,11 @@ Lisp_Object Vpurify_flag;
  28777.     Preallocated since perhaps we can't allocate it when memory is full.  */
  28778.  Lisp_Object memory_exhausted_message;
  28779.  
  28780. +#ifdef AMIGA_DUMP
  28781. +int *pure;   /* pure array is allocated at run-time */
  28782. +int puresize = DEF_PURESIZE; /* and has a variable size */
  28783. +#define PUREBEG (char *) pure
  28784. +#else /* not AMIGA_DUMP */
  28785.  #ifndef HAVE_SHM
  28786.  #ifdef VMS
  28787.  int pure[PURESIZE / sizeof (int)];    /*no need to initialize - wasted space*/
  28788. @@ -87,6 +92,7 @@ int pure[PURESIZE / sizeof (int)] = {0,}
  28789.  #define pure PURE_SEG_BITS   /* Use shared memory segment */
  28790.  #define PUREBEG (char *)PURE_SEG_BITS
  28791.  #endif /* not HAVE_SHM */
  28792. +#endif /* not AMIGA_DUMP */
  28793.  
  28794.  /* Index in pure at which next pure object will be allocated. */
  28795.  int pureptr;
  28796. @@ -608,7 +614,7 @@ make_uninit_string (length)
  28797.        XSET (val, Lisp_String,
  28798.          (struct Lisp_String *) current_string_block->chars);
  28799.      }
  28800. -    
  28801. +
  28802.    XSTRING (val)->size = length;
  28803.    XSTRING (val)->data[length] = 0;
  28804.  
  28805. @@ -727,9 +733,13 @@ int staticidx = 0;
  28806.  #ifdef __GNUC__
  28807.  Lisp_Object *staticvec[NSTATICS] = {0};
  28808.  #else
  28809. +#ifdef AMIGA_DUMP
  28810. +Lisp_Object *staticvec[NSTATICS]; /* Doesn't need to be pure */
  28811. +#else
  28812.  char staticvec1[NSTATICS * sizeof (Lisp_Object *)] = {0};
  28813.  #define staticvec ((Lisp_Object **) staticvec1)
  28814.  #endif
  28815. +#endif
  28816.  
  28817.  /* Put an entry in staticvec, pointing at the variable whose address is given */
  28818.  
  28819. @@ -859,12 +869,12 @@ gc-cons-threshold  bytes of Lisp data si
  28820.      {
  28821.        mark_object (&catch->tag);
  28822.        mark_object (&catch->val);
  28823. -    }  
  28824. +    }
  28825.    for (handler = handlerlist; handler; handler = handler->next)
  28826.      {
  28827.        mark_object (&handler->handler);
  28828.        mark_object (&handler->var);
  28829. -    }  
  28830. +    }
  28831.    for (backlist = backtrace_list; backlist; backlist = backlist->next)
  28832.      {
  28833.        if (!XMARKBIT (*backlist->function))
  28834. @@ -882,7 +892,7 @@ gc-cons-threshold  bytes of Lisp data si
  28835.          mark_object (&backlist->args[i]);
  28836.          XMARK (backlist->args[i]);
  28837.        }
  28838. -    }  
  28839. +    }
  28840.  
  28841.    gc_sweep ();
  28842.  
  28843. @@ -900,7 +910,7 @@ gc-cons-threshold  bytes of Lisp data si
  28844.      i = backlist->nargs - 1;
  28845.        for (; i >= 0; i--)
  28846.      XUNMARK (backlist->args[i]);
  28847. -    }  
  28848. +    }
  28849.    XUNMARK (buffer_defaults.name);
  28850.    XUNMARK (buffer_local_symbols.name);
  28851.  
  28852. @@ -936,7 +946,7 @@ clear_marks ()
  28853.    {
  28854.      register struct cons_block *cblk;
  28855.      register int lim = cons_block_index;
  28856. -  
  28857. +
  28858.      for (cblk = cons_block; cblk; cblk = cblk->next)
  28859.        {
  28860.      register int i;
  28861. @@ -949,7 +959,7 @@ clear_marks ()
  28862.    {
  28863.      register struct symbol_block *sblk;
  28864.      register int lim = symbol_block_index;
  28865. -  
  28866. +
  28867.      for (sblk = symbol_block; sblk; sblk = sblk->next)
  28868.        {
  28869.      register int i;
  28870. @@ -964,7 +974,7 @@ clear_marks ()
  28871.    {
  28872.      register struct marker_block *sblk;
  28873.      register int lim = marker_block_index;
  28874. -  
  28875. +
  28876.      for (sblk = marker_block; sblk; sblk = sblk->next)
  28877.        {
  28878.      register int i;
  28879. @@ -1197,7 +1207,7 @@ gc_sweep ()
  28880.      register int num_free = 0, num_used = 0;
  28881.  
  28882.      cons_free_list = 0;
  28883. -  
  28884. +
  28885.      for (cblk = cons_block; cblk; cblk = cblk->next)
  28886.        {
  28887.      register int i;
  28888. @@ -1226,7 +1236,7 @@ gc_sweep ()
  28889.      register int num_free = 0, num_used = 0;
  28890.  
  28891.      symbol_free_list = 0;
  28892. -  
  28893. +
  28894.      for (sblk = symbol_block; sblk; sblk = sblk->next)
  28895.        {
  28896.      register int i;
  28897. @@ -1260,7 +1270,7 @@ gc_sweep ()
  28898.      register int num_free = 0, num_used = 0;
  28899.  
  28900.      marker_free_list = 0;
  28901. -  
  28902. +
  28903.      for (mblk = marker_block; mblk; mblk = mblk->next)
  28904.        {
  28905.      register int i;
  28906. @@ -1400,7 +1410,8 @@ compact_strings ()
  28907.            while ((unsigned) size > STRING_BLOCK_SIZE)
  28908.          {
  28909.            if (size & 1) size ^= MARKBIT | 1;
  28910. -          size = *(int *)size & ~MARKBIT;
  28911. +          size = *(int *)size;
  28912. +                  size &= ~MARKBIT;
  28913.          }
  28914.  
  28915.            total_string_size += size;
  28916. @@ -1438,7 +1449,8 @@ compact_strings ()
  28917.            if (size & 1) size ^= MARKBIT | 1;
  28918.            objptr = (Lisp_Object *)size;
  28919.  
  28920. -          size = XFASTINT (*objptr) & ~MARKBIT;
  28921. +          size = XFASTINT (*objptr);
  28922. +                  size &= ~MARKBIT;
  28923.            if (XMARKBIT (*objptr))
  28924.              {
  28925.                XSET (*objptr, Lisp_String, newaddr);
  28926. @@ -1498,7 +1510,7 @@ truncate_all_undos ()
  28927.       Qt tends to return NULL, which effectively turns undo back on.
  28928.       So don't call truncate_undo_list if undo_list is Qt.  */
  28929.        if (! EQ (nextb->undo_list, Qt))
  28930. -    nextb->undo_list 
  28931. +    nextb->undo_list
  28932.        = truncate_undo_list (nextb->undo_list, undo_threshold,
  28933.                  undo_high_threshold);
  28934.        nextb = nextb->next;
  28935. diff -rup --new-file baseline/fsf/emacs18/src/alloca.c amiga/fsf/emacs18/src/alloca.c
  28936. --- baseline/fsf/emacs18/src/alloca.c    Sat Jul 25 14:40:32 1992
  28937. +++ amiga/fsf/emacs18/src/alloca.c    Sat Sep 28 00:00:00 1996
  28938. @@ -72,7 +72,7 @@ extern pointer    xmalloc();
  28939.  #define    STACK_DIRECTION    0        /* direction unknown */
  28940.  #endif
  28941.  
  28942. -#if STACK_DIRECTION != 0
  28943. +#if (STACK_DIRECTION) != 0
  28944.  
  28945.  #define    STACK_DIR    STACK_DIRECTION    /* known at compile-time */
  28946.  
  28947. @@ -137,6 +137,8 @@ typedef union hdr
  28948.  
  28949.  static header *last_alloca_header = NULL; /* -> last alloca header */
  28950.  
  28951. +int alloca_calling;
  28952. +
  28953.  pointer
  28954.  alloca (size)            /* returns pointer to storage */
  28955.       unsigned    size;        /* # bytes to allocate */
  28956. @@ -176,10 +178,12 @@ alloca (size)            /* returns pointer to st
  28957.  
  28958.    /* Allocate combined header + user data storage. */
  28959.  
  28960. +  alloca_calling = 1;
  28961.    {
  28962.      register pointer    new = xmalloc (sizeof (header) + size);
  28963.      /* address of header */
  28964.  
  28965. +    alloca_calling = 0;
  28966.      ((header *)new)->h.next = last_alloca_header;
  28967.      ((header *)new)->h.deep = depth;
  28968.  
  28969. diff -rup --new-file baseline/fsf/emacs18/src/amiga.h amiga/fsf/emacs18/src/amiga.h
  28970. --- baseline/fsf/emacs18/src/amiga.h    Wed Dec 31 17:00:00 1969
  28971. +++ amiga/fsf/emacs18/src/amiga.h    Sat Sep 28 00:00:00 1996
  28972. @@ -0,0 +1,145 @@
  28973. +
  28974. +/* Prototypes for functions defined in amiga_clipboard.c */
  28975. +void syms_of_amiga_clipboard(void);
  28976. +void early_clipboard(void);
  28977. +void init_clipboard(void);
  28978. +void cleanup_clipboard(void);
  28979. +
  28980. +/* Prototypes for functions defined in amiga_dump.c */
  28981. +void map_out_data(char *fn);
  28982. +void map_in_data(int load);
  28983. +extern void *far first_fn, *far last_fn;
  28984. +
  28985. +/* Prototypes for functions defined in amiga_menu.c */
  28986. +void suspend_menus(void);
  28987. +int resume_menus(void);
  28988. +void syms_of_amiga_menu(void);
  28989. +void init_amiga_menu(void);
  28990. +void cleanup_amiga_menu(void);
  28991. +
  28992. +/* Prototypes for functions defined in amiga_processes.c */
  28993. +/* Simulation of unix processes & signals */
  28994. +int wait_for_termination(int pid);
  28995. +int wait_without_blocking(void);
  28996. +char *amiga_path(void);
  28997. +void init_amiga_processes(void);
  28998. +void cleanup_amiga_processes(void);
  28999. +
  29000. +/* Prototypes for functions defined in amiga_rexx.c */
  29001. +int check_arexx(int force, int kbd);
  29002. +void init_amiga_rexx(void);
  29003. +void cleanup_amiga_rexx(void);
  29004. +void syms_of_amiga_rexx(void);
  29005. +
  29006. +/* Prototypes for functions defined in amiga_screen.c */
  29007. +extern struct Window *emacs_win;
  29008. +void get_window_size(int *widthp, int *heightp);
  29009. +void reset_window(void);
  29010. +void force_window(void);
  29011. +void add_wbevent(struct WBArg *wbarg);
  29012. +void check_window(int force);
  29013. +void setup_intchar(char intchar);
  29014. +
  29015. +void start_count(int n);
  29016. +void stop_count(int n);
  29017. +void suspend_count(int n);
  29018. +void resume_count(int n);
  29019. +int disp_counts(void);
  29020. +
  29021. +void screen_puts(char *str, unsigned int len);
  29022. +void syms_of_amiga_screen(void);
  29023. +void init_amiga_screen(void);
  29024. +void cleanup_amiga_screen(void);
  29025. +
  29026. +/* Prototypes for functions defined in amiga_serial.c */
  29027. +void init_amiga_serial(void);
  29028. +void cleanup_amiga_serial(void);
  29029. +void check_serial(int force);
  29030. +void serial_puts(char *str, int len);
  29031. +unsigned long serial_baud_rate(void);
  29032. +
  29033. +/* Prototypes for functions defined in amiga_sysdep.c */
  29034. +extern int selecting;
  29035. +
  29036. +int set_exclusive_use(int fd);
  29037. +int sys_suspend(void);
  29038. +char *get_system_name(void);
  29039. +char *expand_path(char *path, char *buf, int len);
  29040. +int syms_of_amiga(void);
  29041. +void cleanup_amiga(void);
  29042. +void amiga_undump_reinit(void);
  29043. +void *early_xmalloc(long size);
  29044. +void *early_xrealloc(void *old, long size);
  29045. +
  29046. +/* Failure stuff */
  29047. +void wbmessage(char *msg);
  29048. +void fail(char *cause);
  29049. +void fail_nomem(void);
  29050. +void _fail_internal(char *file, int line);
  29051. +#define fail_internal() _fail_internal(__FILE__, __LINE__);
  29052. +enum exit_method { use_exit, use_xcexit, use_safe };
  29053. +extern enum exit_method amiga_fail_exit;
  29054. +
  29055. +#define MALLOC_HUNK_SIZE 92000 /* Default malloc hunk size */
  29056. +extern long malloc_hunk_size; /* Amount of memory malloc'ed by a to-be-dumped emacs */
  29057. +extern long malloc_bytes_used;    /* Amount of this hunk actually used */
  29058. +extern long far pre_alloc;    /* amount of memory to reserve for emacs */
  29059. +extern int puresize;        /* Size of pure hunk */
  29060. +
  29061. +/* Various special values used to find the beginning & end of the text, data,
  29062. +   bss and malloc segments. */
  29063. +extern int first_data, last_data, first_bss, last_bss;
  29064. +extern void first_function(), last_function();
  29065. +extern char *malloc_hunk;
  29066. +extern int amiga_initialized;    /* True once Emacs has been undumped or initialised */
  29067. +struct mem_header        /* sizeof() must be multiple of 4 ! */
  29068. +{
  29069. +    struct mem_header *next, *prev;
  29070. +    long size;
  29071. +    /* Data follows */
  29072. +};
  29073. +extern struct mem_header *free_list;
  29074. +
  29075. +
  29076. +/* Prototypes for functions defined in amiga_term.c */
  29077. +int amiga_term_init(void);
  29078. +
  29079. +/* Prototypes for functions defined in amiga_tty.c */
  29080. +extern struct timeinfo *far odd_timer;
  29081. +extern unsigned long odd_sig;
  29082. +int setpgrp_of_tty(int pid);
  29083. +int init_sigio(void);
  29084. +int reset_sigio(void);
  29085. +int request_sigio(void);
  29086. +int unrequest_sigio(void);
  29087. +int tabs_safe_p(void);
  29088. +int get_screen_size(int *widthp, int *heightp);
  29089. +int init_baud_rate(void);
  29090. +void check_intuition(void);
  29091. +#define AMIGASEQ 256 /* When passed to enque, insert the Amiga sequence introducer
  29092. +                C-x C-^ */
  29093. +void enque(unsigned int c, int meta);
  29094. +int init_sys_modes(void);
  29095. +int reset_sys_modes(void);
  29096. +void amiga_consume_input(void);
  29097. +int discard_tty_input(void);
  29098. +int emacs_fflush(struct __iobuf *f);
  29099. +void emacs_putchar(int c);
  29100. +void emacs_output(char *str, int size);
  29101. +void emacs_fwrite(char *str, unsigned int nblocks, unsigned int len, FILE *f);
  29102. +void syms_of_amiga_tty(void);
  29103. +void init_amiga_tty(void);
  29104. +void cleanup_amiga_tty(void);
  29105. +void early_amiga_tty(void);
  29106. +void amiga_term_open(void);
  29107. +/* Signal mask used to detect available keyboard input.
  29108. +   Must be set by amiga_serial or amiga_screen */
  29109. +extern unsigned long inputsig;
  29110. +
  29111. +/* Prototypes for functions defined in amiga_unix.c */
  29112. +void MemCleanup(void);
  29113. +char *malloc(int size);
  29114. +int free(void *p);
  29115. +char *calloc(long n, long size);
  29116. +char *realloc(char *p, long size);
  29117. +void emacs_malloc_init(void);
  29118. diff -rup --new-file baseline/fsf/emacs18/src/amiga_clipboard.c amiga/fsf/emacs18/src/amiga_clipboard.c
  29119. --- baseline/fsf/emacs18/src/amiga_clipboard.c    Wed Dec 31 17:00:00 1969
  29120. +++ amiga/fsf/emacs18/src/amiga_clipboard.c    Sat Sep 28 00:00:00 1996
  29121. @@ -0,0 +1,225 @@
  29122. +#include "config.h"
  29123. +#undef NULL
  29124. +#include "lisp.h"
  29125. +#include "termchar.h"
  29126. +#include "amiga.h"
  29127. +
  29128. +#include <stdio.h>
  29129. +#include <internal/devices.h>
  29130. +
  29131. +#undef LONGBITS
  29132. +
  29133. +#include <exec/types.h>
  29134. +#include <exec/io.h>
  29135. +#include <devices/clipboard.h>
  29136. +#include <libraries/iffparse.h>
  29137. +#include <utility/hooks.h>
  29138. +
  29139. +#include <proto/exec.h>
  29140. +#include <proto/iffparse.h>
  29141. +
  29142. +#define  ID_FTXT    MAKE_ID('F','T','X','T')
  29143. +#define  ID_CHRS    MAKE_ID('C','H','R','S')
  29144. +
  29145. +/*
  29146. + * Text error messages for possible IFFERR_#? returns from various
  29147. + * IFF routines.  To get the index into this array, take your IFFERR code,
  29148. + * negate it, and subtract one.
  29149. + *  idx = -error - 1;
  29150. + */
  29151. +static char *far ifferrormsgs[] = {
  29152. +    "End of file (not an error).",
  29153. +    "End of context (not an error).",
  29154. +    "No lexical scope.",
  29155. +    "Insufficient memory.",
  29156. +    "Stream read error.",
  29157. +    "Stream write error.",
  29158. +    "Stream seek error.",
  29159. +    "File is corrupt.",
  29160. +    "IFF syntax error.",
  29161. +    "Not an IFF file.",
  29162. +    "Required call-back hook missing.",
  29163. +    "Return to client.  You should never see this."
  29164. +};
  29165. +
  29166. +Lisp_Object amiga_new_clip;
  29167. +static struct IFFHandle *far iff;
  29168. +struct Library *IFFParseBase;
  29169. +
  29170. +static struct IOClipReq *far ClipRequest;
  29171. +static struct Hook cliphook;
  29172. +
  29173. +/* added __interrupt flag this disables stack checking for this function
  29174. + * so we can compile with stack checking on.  -ch3/19/93. */
  29175. +static ULONG __saveds __asm __interrupt
  29176. +clip_change(    register __a0 struct Hook    *hook,
  29177. +        register __a2 VOID        *object,
  29178. +        register __a1 ULONG        *message )
  29179. +{
  29180. +    amiga_new_clip = 1;
  29181. +    return 0;
  29182. +}
  29183. +
  29184. +static Lisp_Object clip_unwind(Lisp_Object dummy)
  29185. +{
  29186. +    CloseIFF (iff);
  29187. +    CloseClipboard ((struct ClipboardHandle *) iff->iff_Stream);
  29188. +
  29189. +    return Qnil;
  29190. +}
  29191. +
  29192. +static int clip_protect(void)
  29193. +{
  29194. +    int count = specpdl_ptr - specpdl;
  29195. +
  29196. +    record_unwind_protect(clip_unwind, Qnil);
  29197. +
  29198. +    return count;
  29199. +}
  29200. +
  29201. +static long clip_check(long err)
  29202. +{
  29203. +    if(err) error ("Clipboard IO failed, error %ld: %s\n",
  29204. +           err, ifferrormsgs[-err - 1]);
  29205. +    return err;
  29206. +}
  29207. +
  29208. +
  29209. +static void cut(char *str, int size)
  29210. +{
  29211. +    int count;
  29212. +
  29213. +    if (!(iff->iff_Stream = (ULONG) OpenClipboard (0)))
  29214. +    error ("Clipboard open failed.");
  29215. +
  29216. +    count = clip_protect();
  29217. +
  29218. +    /* Open clipbaord */
  29219. +    InitIFFasClip (iff);
  29220. +    clip_check(OpenIFF (iff, IFFF_WRITE));
  29221. +
  29222. +    /* Write data */
  29223. +    clip_check(PushChunk(iff, ID_FTXT, ID_FORM, IFFSIZE_UNKNOWN));
  29224. +    clip_check(PushChunk(iff, 0, ID_CHRS, IFFSIZE_UNKNOWN));
  29225. +    if (WriteChunkBytes(iff, str, size) != size) clip_check(IFFERR_WRITE);
  29226. +    clip_check(PopChunk(iff));
  29227. +    clip_check(PopChunk(iff));
  29228. +
  29229. +    /* & close */
  29230. +    unbind_to (count);
  29231. +}
  29232. +
  29233. +DEFUN ("amiga-cut", Famiga_cut, Samiga_cut,
  29234. +  1, 1, 0,
  29235. +  "Copy string into Amiga clipboard.")
  29236. +  (arg)
  29237. +     Lisp_Object arg;
  29238. +{
  29239. +    struct Lisp_String *p;
  29240. +
  29241. +    CHECK_STRING (arg, 0);
  29242. +
  29243. +    p = XSTRING (arg);
  29244. +    cut(p->data, p->size);
  29245. +
  29246. +    return Qnil;
  29247. +}
  29248. +
  29249. +DEFUN ("amiga-paste", Famiga_paste, Samiga_paste,
  29250. +  0, 0, 0,
  29251. +  "Returns text currently in the Amiga clipboard, or NIL if there is none.")
  29252. +  ()
  29253. +{
  29254. +    long err = 0;
  29255. +    Lisp_Object result = Qnil;
  29256. +    struct ContextNode  *cn;
  29257. +    int count;
  29258. +
  29259. +    if (!(iff->iff_Stream = (ULONG) OpenClipboard (0)))
  29260. +    error ("Clipboard open failed.");
  29261. +
  29262. +    count = clip_protect();
  29263. +
  29264. +    /* Open clipbaord */
  29265. +    InitIFFasClip (iff);
  29266. +    clip_check(OpenIFF (iff, IFFF_READ));
  29267. +    clip_check(StopChunk(iff, ID_FTXT, ID_CHRS));
  29268. +
  29269. +    /* Find the first FTXT CHRS chunks */
  29270. +    while (result == Qnil)
  29271. +    {
  29272. +    long err = ParseIFF(iff, IFFPARSE_SCAN);
  29273. +
  29274. +    if (err == IFFERR_EOC) continue; /* enter next context */
  29275. +    else if (err == IFFERR_EOF) break;
  29276. +    else clip_check(err);
  29277. +
  29278. +    /* We only asked to stop at FTXT CHRS chunks
  29279. +     * If no error we've hit a stop chunk
  29280. +     * Read the CHRS chunk data
  29281. +     */
  29282. +    cn = CurrentChunk(iff);
  29283. +
  29284. +    if ((cn) && (cn->cn_Type == ID_FTXT) && (cn->cn_ID == ID_CHRS))
  29285. +    {
  29286. +        int size = cn->cn_Size, rlen;
  29287. +
  29288. +        result = make_string("", size);
  29289. +
  29290. +        if ((rlen = ReadChunkBytes(iff, XSTRING (result)->data, size)) != size)
  29291. +        if (rlen < 0) clip_check(rlen);
  29292. +        else clip_check(IFFERR_EOC);
  29293. +    }
  29294. +    }
  29295. +    unbind_to (count);
  29296. +
  29297. +    return result;
  29298. +}
  29299. +
  29300. +void syms_of_amiga_clipboard(void)
  29301. +{
  29302. +    DEFVAR_BOOL ("amiga-new-clip", &amiga_new_clip,
  29303. +         "Set to t every time a new clip is put in the Amiga clipboard");
  29304. +    amiga_new_clip = 0;
  29305. +
  29306. +    defsubr (&Samiga_cut);
  29307. +    defsubr (&Samiga_paste);
  29308. +}
  29309. +
  29310. +void early_clipboard(void)
  29311. +{
  29312. +    IFFParseBase = 0;
  29313. +}
  29314. +
  29315. +void init_clipboard(void)
  29316. +{
  29317. +    /* Initialise IFF for clipboard */
  29318. +    if (!(IFFParseBase = OpenLibrary("iffparse.library", 0)))
  29319. +      _fail("iffparse.library is required");
  29320. +    if (!(iff = AllocIFF())) no_memory();
  29321. +
  29322. +    ClipRequest = (struct IOClipReq *)
  29323. +    _device_open("clipboard.device", 0L, 0L, 0L, 0, sizeof(struct IOClipReq));
  29324. +    if (!ClipRequest) _fail("clipboard.device missing !?");
  29325. +
  29326. +    cliphook.h_Entry = (ULONG (*)())clip_change;
  29327. +    ClipRequest->io_Command = CBD_CHANGEHOOK;
  29328. +    ClipRequest->io_Length = 1; /* install */
  29329. +    ClipRequest->io_Data = (APTR)&cliphook;
  29330. +    DoIO((struct IORequest *)ClipRequest);
  29331. +}
  29332. +
  29333. +void cleanup_clipboard(void)
  29334. +{
  29335. +    if (ClipRequest)
  29336. +    {
  29337. +    cliphook.h_Entry = (ULONG (*)())clip_change;
  29338. +    ClipRequest->io_Command = CBD_CHANGEHOOK;
  29339. +    ClipRequest->io_Length = 0; /* remove */
  29340. +    ClipRequest->io_Data = (APTR)&cliphook;
  29341. +    DoIO((struct IORequest *)ClipRequest);
  29342. +    }
  29343. +    if (iff) FreeIFF(iff);
  29344. +    if (IFFParseBase) CloseLibrary(IFFParseBase);
  29345. +    _device_close((struct IORequest *)ClipRequest);
  29346. +}
  29347. diff -rup --new-file baseline/fsf/emacs18/src/amiga_data.c amiga/fsf/emacs18/src/amiga_data.c
  29348. --- baseline/fsf/emacs18/src/amiga_data.c    Wed Dec 31 17:00:00 1969
  29349. +++ amiga/fsf/emacs18/src/amiga_data.c    Sat Sep 28 00:00:00 1996
  29350. @@ -0,0 +1 @@
  29351. +/* Declarations of data that should not be squashed by the dump routine */
  29352. diff -rup --new-file baseline/fsf/emacs18/src/amiga_dump.c amiga/fsf/emacs18/src/amiga_dump.c
  29353. --- baseline/fsf/emacs18/src/amiga_dump.c    Wed Dec 31 17:00:00 1969
  29354. +++ amiga/fsf/emacs18/src/amiga_dump.c    Sat Sep 28 00:00:00 1996
  29355. @@ -0,0 +1,721 @@
  29356. +#include <exec/types.h>
  29357. +#include <fcntl.h>
  29358. +#include <stdio.h>
  29359. +#include <assert.h>
  29360. +#include <proto/dos.h>
  29361. +#include <internal/messages.h>
  29362. +#include "config.h"
  29363. +#include "lisp.h"
  29364. +#include "buffer.h"
  29365. +#include "regex.h"
  29366. +#include "amiga.h"
  29367. +#include "dispextern.h"
  29368. +#include "termchar.h"
  29369. +
  29370. +#define RANGE(ptr, s, e) ((char *)ptr >= (char *)s && (char *)ptr < (char *)e)
  29371. +#define HUNK_POS (VALBITS - 3)
  29372. +#define HUNK_MASK (7 << HUNK_POS)
  29373. +#define HUNK_CODE (0 << HUNK_POS)
  29374. +#define HUNK_DATA (1 << HUNK_POS)
  29375. +#define HUNK_BSS (2 << HUNK_POS)
  29376. +#define HUNK_MALLOC (3 << HUNK_POS)
  29377. +#define HUNK_PURE (4 << HUNK_POS)
  29378. +#define ARRAY_MARK_FLAG ((MARKBIT >> 1) & ~MARKBIT)
  29379. +
  29380. +void *far first_fn = first_function, *far last_fn = last_function;
  29381. +
  29382. +extern int *pure, puresize;
  29383. +extern struct gcpro *gcprolist;
  29384. +
  29385. +extern Lisp_Object *staticvec[];
  29386. +extern int staticidx;
  29387. +extern struct cons_block *cons_block;
  29388. +extern struct Lisp_Cons *cons_free_list;
  29389. +extern struct Lisp_Vector *all_vectors;
  29390. +extern struct symbol_block *symbol_block;
  29391. +extern struct Lisp_Symbol *symbol_free_list;
  29392. +extern struct marker_block *marker_block;
  29393. +extern struct Lisp_Marker *marker_free_list;
  29394. +
  29395. +struct string_block_head
  29396. +  {
  29397. +    struct string_block_head *next, *prev;
  29398. +    int pos;
  29399. +  };
  29400. +extern struct string_block_head *current_string_block;
  29401. +extern struct string_block_head *first_string_block;
  29402. +extern struct string_block_head *large_string_blocks;
  29403. +extern char *kbd_macro_buffer, *read_buffer, *chars_wasted, *copybuf;
  29404. +extern struct minibuf_save_data *minibuf_save_vector;
  29405. +extern struct re_pattern_buffer searchbuf;
  29406. +extern int *ILcost, *DLcost, *ILncost, *DLncost;
  29407. +extern Lisp_Object MouseMap, global_map, Vglobal_map, Vesc_map, Vctl_x_map;
  29408. +extern Lisp_Object Qvariable_documentation, selected_window;
  29409. +
  29410. +extern char *callint_argfuns[];
  29411. +
  29412. +static void *dump_malloc(int size)
  29413. +{
  29414. +  void *new = malloc(size);
  29415. +
  29416. +  if (!new) no_memory();
  29417. +
  29418. +  return new;
  29419. +}
  29420. +
  29421. +static void bailout(char *fn)
  29422. +{
  29423. +  if (fn) _message("%s isn't a dump file for this version of Emacs, aborting", fn);
  29424. +  else _message("Dump file isn't for this version of Emacs, aborting");
  29425. +
  29426. +  /* We are in deep trouble, as all our variables are potentially corrupt */
  29427. +  /* Therefore, no cleanup is possible */
  29428. +  /* Remove cleanup routines */
  29429. +  onexit(0);
  29430. +  /* However, the library & the memory allocation should be ok, so
  29431. +     we can exit reasonably */
  29432. +  _fail("Some system resources may have been lost");
  29433. +}
  29434. +
  29435. +static void *hunk_pointer(void *ptr)
  29436. +{
  29437. +    if (!ptr) return ptr;
  29438. +
  29439. +    if (RANGE(ptr, first_fn, last_fn))
  29440. +    return (void *)(HUNK_CODE | (char *)ptr - (char *)first_fn);
  29441. +    else if (RANGE(ptr, &first_data, &last_data))
  29442. +    return (void *)(HUNK_DATA | (char *)ptr - (char *)&first_data);
  29443. +    else if (RANGE(ptr, &first_bss, &last_bss))
  29444. +    return (void *)(HUNK_BSS | (char *)ptr - (char *)&first_bss);
  29445. +    else if (RANGE(ptr, malloc_hunk, malloc_hunk + malloc_hunk_size))
  29446. +    return (void *)(HUNK_MALLOC | (char *)ptr - malloc_hunk);
  29447. +    else if (RANGE(ptr, pure, (char *)pure + puresize))
  29448. +    return (void *)(HUNK_PURE | (char *)ptr - (char *)pure);
  29449. +    else bailout(0);
  29450. +}
  29451. +
  29452. +static Lisp_Object hunk_lispptr(Lisp_Object *objptr, Lisp_Object val)
  29453. +{
  29454. +    int type = val & ~VALMASK;
  29455. +    void *ptr = (void *)XPNTR(val);
  29456. +
  29457. +    if (RANGE(ptr, first_fn, last_fn))
  29458. +    return type | HUNK_CODE | (char *)ptr - (char *)first_fn;
  29459. +    else if (RANGE(ptr, &first_data, &last_data))
  29460. +    return type | HUNK_DATA | (char *)ptr - (char *)&first_data;
  29461. +    else if (RANGE(ptr, &first_bss, &last_bss))
  29462. +    return type | HUNK_BSS | (char *)ptr - (char *)&first_bss;
  29463. +    else if (RANGE(ptr, pure, (char *)pure + puresize))
  29464. +    return type | HUNK_PURE | (char *)ptr - (char *)pure;
  29465. +    else if (RANGE(ptr, malloc_hunk, malloc_hunk + malloc_hunk_size))
  29466. +    return type | HUNK_MALLOC | (char *)ptr - malloc_hunk;
  29467. +    else bailout(0);
  29468. +}
  29469. +
  29470. +static void patch_pointers ();
  29471. +
  29472. +static void patch_buffer (buf)
  29473. +     Lisp_Object buf;
  29474. +{
  29475. +  Lisp_Object tem;
  29476. +  register struct buffer *buffer = XBUFFER (buf);
  29477. +  register Lisp_Object *ptr;
  29478. +
  29479. +  buffer->text.beg = hunk_pointer (buffer->text.beg);
  29480. +  patch_pointers (&buffer->markers);
  29481. +
  29482. +  /* This is the buffer's markbit */
  29483. +  patch_pointers (&buffer->name);
  29484. +  XMARK (buffer->name);
  29485. +
  29486. +  for (ptr = &buffer->name + 1;
  29487. +       (char *)ptr < (char *)buffer + sizeof (struct buffer);
  29488. +       ptr++)
  29489. +    patch_pointers (ptr);
  29490. +}
  29491. +
  29492. +static void patch_pointers (objptr)
  29493. +     Lisp_Object *objptr;
  29494. +{
  29495. +  register Lisp_Object obj;
  29496. +
  29497. +  obj = *objptr;
  29498. +  XUNMARK (obj);
  29499. +
  29500. +
  29501. + loop:
  29502. +
  29503. +  switch (XGCTYPE (obj))
  29504. +    {
  29505. +    case Lisp_String:
  29506. +      *objptr = hunk_lispptr(objptr, *objptr);
  29507. +      break;
  29508. +
  29509. +    case Lisp_Vector:
  29510. +    case Lisp_Window:
  29511. +    case Lisp_Process:
  29512. +    case Lisp_Window_Configuration:
  29513. +      *objptr = hunk_lispptr(objptr, *objptr);
  29514. +      {
  29515. +    register struct Lisp_Vector *ptr = XVECTOR (obj);
  29516. +    register int size = ptr->size;
  29517. +    register int i;
  29518. +
  29519. +    if (size & ARRAY_MARK_FLAG) break;   /* Already marked */
  29520. +    ptr->size |= ARRAY_MARK_FLAG; /* Else mark it */
  29521. +    for (i = 0; i < size; i++)     /* and then mark its elements */
  29522. +      patch_pointers (&ptr->contents[i]);
  29523. +      }
  29524. +      break;
  29525. +
  29526. +    case Lisp_Symbol:
  29527. +      *objptr = hunk_lispptr(objptr, *objptr);
  29528. +      {
  29529. +    register struct Lisp_Symbol *ptr = XSYMBOL (obj);
  29530. +    struct Lisp_Symbol *ptrx;
  29531. +
  29532. +    if (XMARKBIT (ptr->plist)) break;
  29533. +    XMARK (ptr->plist);
  29534. +    XSETTYPE (*(Lisp_Object *) &ptr->name, Lisp_String);
  29535. +    patch_pointers (&ptr->name);
  29536. +    patch_pointers ((Lisp_Object *) &ptr->value);
  29537. +    patch_pointers (&ptr->function);
  29538. +    patch_pointers (&ptr->plist);
  29539. +    objptr = (Lisp_Object *)&ptr->next;
  29540. +    ptr = ptr->next;
  29541. +    if (ptr)
  29542. +      {
  29543. +        ptrx = ptr;        /* Use pf ptrx avoids compiler bug on Sun */
  29544. +        XSETSYMBOL (obj, ptrx);
  29545. +        goto loop;
  29546. +      }
  29547. +      }
  29548. +      break;
  29549. +
  29550. +    case Lisp_Marker: {
  29551. +    struct Lisp_Marker *ptr = XMARKER (obj);
  29552. +
  29553. +    *objptr = hunk_lispptr(objptr, *objptr);
  29554. +    if (XMARKBIT (ptr->chain)) break;
  29555. +    XMARK (ptr->chain);
  29556. +    ptr->buffer = hunk_pointer (ptr->buffer);
  29557. +    patch_pointers (&ptr->chain);
  29558. +    break;
  29559. +    }
  29560. +
  29561. +    case Lisp_Cons:
  29562. +    case Lisp_Buffer_Local_Value:
  29563. +    case Lisp_Some_Buffer_Local_Value:
  29564. +      *objptr = hunk_lispptr(objptr, *objptr);
  29565. +      {
  29566. +    register struct Lisp_Cons *ptr = XCONS (obj);
  29567. +    if (XMARKBIT (ptr->car)) break;
  29568. +    XMARK (ptr->car);
  29569. +    patch_pointers (&ptr->car);
  29570. +    objptr = &ptr->cdr;
  29571. +    obj = ptr->cdr;
  29572. +    goto loop;
  29573. +      }
  29574. +
  29575. +    case Lisp_Buffer:
  29576. +      *objptr = hunk_lispptr(objptr, *objptr);
  29577. +      if (!XMARKBIT (XBUFFER (obj)->name))
  29578. +    patch_buffer (obj);
  29579. +      break;
  29580. +
  29581. +    case Lisp_Subr: {
  29582. +    struct Lisp_Subr *subr = XSUBR(obj);
  29583. +
  29584. +    *objptr = hunk_lispptr(objptr, *objptr);
  29585. +    if (subr->min_args & 0x8000) break;
  29586. +    subr->min_args |= 0x8000;
  29587. +    subr->function = hunk_pointer(subr->function);
  29588. +    subr->symbol_name = hunk_pointer(subr->symbol_name);
  29589. +    subr->prompt = hunk_pointer(subr->prompt);
  29590. +    if ((long)subr->doc >= 0) /* Make sure that not a doc offset */
  29591. +        subr->doc = hunk_pointer(subr->doc);
  29592. +    break;
  29593. +    }
  29594. +
  29595. +    case Lisp_Int:
  29596. +    case Lisp_Void:
  29597. +    case Lisp_Buffer_Objfwd: break;
  29598. +
  29599. +    case Lisp_Intfwd:
  29600. +    case Lisp_Boolfwd:
  29601. +    case Lisp_Objfwd:
  29602. +    case Lisp_Internal_Stream:
  29603. +      *objptr = hunk_lispptr(objptr, *objptr);
  29604. +    /* Don't bother with Lisp_Buffer_Objfwd,
  29605. +       since all markable slots in current buffer marked anyway.  */
  29606. +    /* Don't need to do Lisp_Objfwd, since the places they point
  29607. +       are protected with staticpro.  */
  29608. +      break;
  29609. +
  29610. +    default:
  29611. +      abort ();
  29612. +    }
  29613. +}
  29614. +
  29615. +static void patch_chain(void **ptr, int offset)
  29616. +{
  29617. +    while (*ptr)
  29618. +    {
  29619. +    void **next = (void **)((char *)*ptr + offset);
  29620. +
  29621. +    *ptr = hunk_pointer(*ptr);
  29622. +    ptr = next;
  29623. +    }
  29624. +}
  29625. +
  29626. +static void patch(void)
  29627. +{
  29628. +    int i;
  29629. +    struct string_block_head *sptr;
  29630. +    struct buffer *bptr;
  29631. +    struct mem_header *mem;
  29632. +
  29633. +    for (i = 0; i < staticidx; i++)
  29634. +    {
  29635. +    if (!XMARKBIT(*staticvec[i]))
  29636. +    {
  29637. +        patch_pointers(staticvec[i]);
  29638. +        XMARK(*staticvec[i]);
  29639. +    }
  29640. +    staticvec[i] = hunk_pointer(staticvec[i]);
  29641. +    }
  29642. +
  29643. +    /* Patch all the pointers normally used before a dump ! */
  29644. +    patch_chain((void **)&cons_block, 0);
  29645. +    patch_chain((void **)&cons_free_list, 0);
  29646. +
  29647. +    patch_chain((void **)&all_vectors, 4);
  29648. +
  29649. +    patch_chain((void **)&symbol_block, 0);
  29650. +    patch_chain((void **)&symbol_free_list, 4);
  29651. +
  29652. +    patch_chain((void **)&marker_block, 0);
  29653. +    patch_chain((void **)&marker_free_list, 4);
  29654. +
  29655. +    /* Strings are lots of fun */
  29656. +    patch_chain((void **)&large_string_blocks, 0);
  29657. +    sptr = first_string_block;
  29658. +    while (sptr)
  29659. +    {
  29660. +    struct string_block *next = sptr->next;
  29661. +
  29662. +    if (sptr->next) sptr->next = hunk_pointer(sptr->next);
  29663. +    if (sptr->prev) sptr->prev = hunk_pointer(sptr->prev);
  29664. +    sptr = next;
  29665. +    }
  29666. +    first_string_block = hunk_pointer(first_string_block);
  29667. +    current_string_block = hunk_pointer(current_string_block);
  29668. +
  29669. +    /* More fun with buffers */
  29670. +    bptr = all_buffers;
  29671. +    if (bptr)
  29672. +    {
  29673. +    while (bptr->next)
  29674. +    {
  29675. +        struct buffer *next = bptr->next;
  29676. +
  29677. +        bptr->next = hunk_pointer(bptr->next);
  29678. +        bptr = next;
  29679. +    }
  29680. +    }
  29681. +    all_buffers = hunk_pointer(all_buffers);
  29682. +    current_buffer = hunk_pointer(current_buffer);
  29683. +
  29684. +    kbd_macro_buffer = hunk_pointer(kbd_macro_buffer);
  29685. +    minibuf_save_vector = hunk_pointer(minibuf_save_vector);
  29686. +    searchbuf.buffer = hunk_pointer(searchbuf.buffer);
  29687. +    searchbuf.fastmap = hunk_pointer(searchbuf.fastmap);
  29688. +    specpdl = hunk_pointer(specpdl);
  29689. +    read_buffer = hunk_pointer(read_buffer);
  29690. +
  29691. +    MouseMap = hunk_lispptr(&MouseMap, MouseMap);
  29692. +    global_map = hunk_lispptr(&global_map, global_map);
  29693. +    Vglobal_map = hunk_lispptr(&Vglobal_map, Vglobal_map);
  29694. +    Vesc_map = hunk_lispptr(&Vesc_map, Vesc_map);
  29695. +    Vctl_x_map = hunk_lispptr(&Vctl_x_map, Vctl_x_map);
  29696. +
  29697. +    Qvariable_documentation = hunk_lispptr(&Qvariable_documentation, Qvariable_documentation);
  29698. +    selected_window = hunk_lispptr(&selected_window, selected_window);
  29699. +
  29700. +    mem = free_list;
  29701. +    free_list = hunk_pointer(free_list);
  29702. +    while (mem)
  29703. +    {
  29704. +    struct mem_header *next = mem->next;
  29705. +
  29706. +    mem->prev = hunk_pointer(mem->prev);
  29707. +    mem->next = hunk_pointer(mem->next);
  29708. +    mem = next;
  29709. +    }
  29710. +
  29711. +    for (i = 0; i <= 4; i++)
  29712. +      callint_argfuns[i] = hunk_pointer(callint_argfuns[i]);
  29713. +}
  29714. +
  29715. +static dump(char *fn)
  29716. +{
  29717. +    BPTR fd;
  29718. +    long size;
  29719. +
  29720. +    fd = Open(fn, MODE_NEWFILE);
  29721. +    if (!fd)
  29722. +      {
  29723. +        static void unpatch();
  29724. +
  29725. +        unpatch();
  29726. +        _fail("emacs hasn't been dumped (%s missing)", fn);
  29727. +      }
  29728. +
  29729. +    Write(fd, (char *)&puresize, sizeof puresize);
  29730. +    Write(fd, (char *)&malloc_hunk_size, sizeof malloc_hunk_size);
  29731. +    Write(fd, (char *)&first_data, (char *)&last_data - (char *)&first_data);
  29732. +    Write(fd, (char *)&first_bss, (char *)&last_bss - (char *)&first_bss);
  29733. +    Write(fd, (char *)pure, puresize);
  29734. +    Write(fd, (char *)malloc_hunk, malloc_hunk_size);
  29735. +    Write(fd, (char *)&staticidx, sizeof staticidx);
  29736. +    Write(fd, (char *)staticvec, staticidx * sizeof(Lisp_Object *));
  29737. +    size = (char *)last_fn - (char *)first_fn;
  29738. +    Write(fd, (char *)&size, sizeof size);
  29739. +
  29740. +    Close(fd);
  29741. +}
  29742. +
  29743. +static void *make_pointer(void *ptr)
  29744. +{
  29745. +    int hunk = (long)ptr & HUNK_MASK;
  29746. +    int offset = (long)ptr & (VALMASK & ~HUNK_MASK);
  29747. +
  29748. +    if (!ptr) return 0;
  29749. +
  29750. +    if (hunk == HUNK_CODE) return (char *)first_fn + offset;
  29751. +    if (hunk == HUNK_DATA) return (char *)&first_data + offset;
  29752. +    if (hunk == HUNK_BSS) return (char *)&first_bss + offset;
  29753. +    if (hunk == HUNK_PURE) return (char *)pure + offset;
  29754. +    if (hunk == HUNK_MALLOC) return malloc_hunk + offset;
  29755. +    assert(0);
  29756. +}
  29757. +
  29758. +static Lisp_Object make_lispptr(Lisp_Object *objptr, Lisp_Object obj)
  29759. +{
  29760. +    long val = XUINT(obj);
  29761. +    int hunk = val & HUNK_MASK;
  29762. +    int offset = val & ~HUNK_MASK;
  29763. +    char *ptr;
  29764. +
  29765. +    if (hunk == HUNK_CODE) ptr = (char *)first_fn + offset;
  29766. +    else if (hunk == HUNK_DATA) ptr = (char *)&first_data + offset;
  29767. +    else if (hunk == HUNK_BSS) ptr = (char *)&first_bss + offset;
  29768. +    else if (hunk == HUNK_PURE) ptr = (char *)pure + offset;
  29769. +    else if (hunk == HUNK_MALLOC) ptr = malloc_hunk + offset;
  29770. +    else assert(0);
  29771. +
  29772. +    XSETPNTR(obj, (long)ptr);
  29773. +    return obj;
  29774. +}
  29775. +
  29776. +static void unpatch_pointers ();
  29777. +
  29778. +static void unpatch_buffer (buf)
  29779. +     Lisp_Object buf;
  29780. +{
  29781. +  Lisp_Object tem;
  29782. +  register struct buffer *buffer = XBUFFER (buf);
  29783. +  register Lisp_Object *ptr;
  29784. +
  29785. +  buffer->text.beg = make_pointer (buffer->text.beg);
  29786. +  unpatch_pointers (&buffer->markers);
  29787. +
  29788. +  /* This is the buffer's markbit */
  29789. +  XUNMARK (buffer->name);
  29790. +  unpatch_pointers (&buffer->name);
  29791. +
  29792. +  for (ptr = &buffer->name + 1;
  29793. +       (char *)ptr < (char *)buffer + sizeof (struct buffer);
  29794. +       ptr++)
  29795. +    unpatch_pointers (ptr);
  29796. +}
  29797. +
  29798. +static void unpatch_pointers (objptr)
  29799. +     Lisp_Object *objptr;
  29800. +{
  29801. +  register Lisp_Object obj;
  29802. +
  29803. +  obj = *objptr;
  29804. +  XUNMARK (obj);
  29805. +
  29806. +
  29807. + loop:
  29808. +
  29809. +  switch (XGCTYPE (obj))
  29810. +    {
  29811. +    case Lisp_String:
  29812. +      *objptr = make_lispptr(objptr, *objptr);
  29813. +      break;
  29814. +
  29815. +    case Lisp_Vector:
  29816. +    case Lisp_Window:
  29817. +    case Lisp_Process:
  29818. +    case Lisp_Window_Configuration:
  29819. +      obj = *objptr = make_lispptr(objptr, *objptr);
  29820. +      {
  29821. +    register struct Lisp_Vector *ptr = XVECTOR (obj);
  29822. +    register int size;
  29823. +    register int i;
  29824. +
  29825. +    if (!(ptr->size & ARRAY_MARK_FLAG)) break;   /* Already unmarked */
  29826. +    size = ptr->size &= ~ARRAY_MARK_FLAG; /* Else unmark it */
  29827. +    for (i = 0; i < size; i++)     /* and then unmark its elements */
  29828. +      unpatch_pointers (&ptr->contents[i]);
  29829. +      }
  29830. +      break;
  29831. +
  29832. +    case Lisp_Symbol:
  29833. +      obj = *objptr = make_lispptr(objptr, *objptr);
  29834. +      {
  29835. +    register struct Lisp_Symbol *ptr = XSYMBOL (obj);
  29836. +    struct Lisp_Symbol *ptrx;
  29837. +
  29838. +    if (!XMARKBIT (ptr->plist)) break;
  29839. +    XUNMARK (ptr->plist);
  29840. +    unpatch_pointers (&ptr->name);
  29841. +    ptr->name = XSTRING (*(Lisp_Object *)&ptr->name);
  29842. +    unpatch_pointers ((Lisp_Object *) &ptr->value);
  29843. +    unpatch_pointers (&ptr->function);
  29844. +    unpatch_pointers (&ptr->plist);
  29845. +    objptr = (Lisp_Object *)&ptr->next;
  29846. +    ptr = ptr->next;
  29847. +    if (ptr)
  29848. +      {
  29849. +        ptrx = ptr;        /* Use pf ptrx avoids compiler bug on Sun */
  29850. +        XSET (obj, Lisp_Symbol, ptrx);
  29851. +        goto loop;
  29852. +      }
  29853. +      }
  29854. +      break;
  29855. +
  29856. +    case Lisp_Marker: {
  29857. +    struct Lisp_Marker *ptr;
  29858. +
  29859. +    obj = *objptr = make_lispptr(objptr, *objptr);
  29860. +    ptr = XMARKER (obj);
  29861. +    if (!XMARKBIT (ptr->chain)) break;
  29862. +    XUNMARK (ptr->chain);
  29863. +    ptr->buffer = make_pointer (ptr->buffer);
  29864. +    unpatch_pointers (&ptr->chain);
  29865. +    break;
  29866. +    }
  29867. +
  29868. +    case Lisp_Cons:
  29869. +    case Lisp_Buffer_Local_Value:
  29870. +    case Lisp_Some_Buffer_Local_Value:
  29871. +      obj = *objptr = make_lispptr(objptr, *objptr);
  29872. +      {
  29873. +    register struct Lisp_Cons *ptr = XCONS (obj);
  29874. +    if (!XMARKBIT (ptr->car)) break;
  29875. +    XUNMARK (ptr->car);
  29876. +    unpatch_pointers (&ptr->car);
  29877. +    objptr = &ptr->cdr;
  29878. +    obj = ptr->cdr;
  29879. +    goto loop;
  29880. +      }
  29881. +
  29882. +    case Lisp_Buffer:
  29883. +      obj = *objptr = make_lispptr(objptr, *objptr);
  29884. +      if (XMARKBIT (XBUFFER (obj)->name))
  29885. +    unpatch_buffer (obj);
  29886. +      break;
  29887. +
  29888. +    case Lisp_Subr: {
  29889. +    struct Lisp_Subr *subr;
  29890. +
  29891. +    obj = *objptr = make_lispptr(objptr, *objptr);
  29892. +    subr = XSUBR(obj);
  29893. +    if (!(subr->min_args & 0x8000)) break;
  29894. +    subr->min_args &= ~0x8000;
  29895. +    subr->function = make_pointer(subr->function);
  29896. +    subr->symbol_name = make_pointer(subr->symbol_name);
  29897. +    subr->prompt = make_pointer(subr->prompt);
  29898. +    if ((long)subr->doc >= 0) /* Make sure that not a doc offset */
  29899. +        subr->doc = make_pointer(subr->doc);
  29900. +    break;
  29901. +    }
  29902. +
  29903. +    case Lisp_Int:
  29904. +    case Lisp_Void:
  29905. +    case Lisp_Buffer_Objfwd: break;
  29906. +
  29907. +    case Lisp_Intfwd:
  29908. +    case Lisp_Boolfwd:
  29909. +    case Lisp_Objfwd:
  29910. +    case Lisp_Internal_Stream:
  29911. +      *objptr = make_lispptr(objptr, *objptr);
  29912. +    /* Don't bother with Lisp_Buffer_Objfwd,
  29913. +       since all markable slots in current buffer marked anyway.  */
  29914. +    /* Don't need to do Lisp_Objfwd, since the places they point
  29915. +       are protected with staticpro.  */
  29916. +      break;
  29917. +
  29918. +    default:
  29919. +      abort ();
  29920. +    }
  29921. +}
  29922. +
  29923. +static void unpatch_chain(void **ptr, int offset)
  29924. +{
  29925. +    while (*ptr)
  29926. +    {
  29927. +    *ptr = make_pointer(*ptr);
  29928. +    ptr = (void **)((char *)*ptr + offset);
  29929. +    }
  29930. +}
  29931. +
  29932. +/* Reconstructs the addresses that were patched */
  29933. +static void unpatch(void)
  29934. +{
  29935. +    int fd, i;
  29936. +    struct string_block_head *sptr;
  29937. +    struct buffer *bptr;
  29938. +    struct mem_header *mem;
  29939. +
  29940. +    for (i = 0; i < staticidx; i++)
  29941. +    {
  29942. +    staticvec[i] = make_pointer(staticvec[i]);
  29943. +    if (XMARKBIT(*staticvec[i]))
  29944. +    {
  29945. +        XUNMARK(*staticvec[i]);
  29946. +        unpatch_pointers(staticvec[i]);
  29947. +    }
  29948. +    }
  29949. +
  29950. +    /* Unpatch all the pointers normally used before a dump ! */
  29951. +    unpatch_chain((void **)&cons_block, 0);
  29952. +    unpatch_chain((void **)&cons_free_list, 0);
  29953. +
  29954. +    unpatch_chain((void **)&all_vectors, 4);
  29955. +
  29956. +    unpatch_chain((void **)&symbol_block, 0);
  29957. +    unpatch_chain((void **)&symbol_free_list, 4);
  29958. +
  29959. +    unpatch_chain((void **)&marker_block, 0);
  29960. +    unpatch_chain((void **)&marker_free_list, 4);
  29961. +
  29962. +    /* Strings are lots of fun */
  29963. +    unpatch_chain((void **)&large_string_blocks, 0);
  29964. +    sptr = first_string_block = make_pointer(first_string_block);
  29965. +    current_string_block = make_pointer(current_string_block);
  29966. +    while (sptr)
  29967. +    {
  29968. +    if (sptr->next) sptr->next = make_pointer(sptr->next);
  29969. +    if (sptr->prev) sptr->prev = make_pointer(sptr->prev);
  29970. +    sptr = sptr->next;
  29971. +    }
  29972. +
  29973. +    /* More fun with buffers */
  29974. +    bptr = all_buffers = make_pointer(all_buffers);
  29975. +    if (bptr)
  29976. +    {
  29977. +    while (bptr->next)
  29978. +    {
  29979. +        bptr->next = make_pointer(bptr->next);
  29980. +        bptr = bptr->next;
  29981. +    }
  29982. +    }
  29983. +    current_buffer = make_pointer(current_buffer);
  29984. +
  29985. +    kbd_macro_buffer = make_pointer(kbd_macro_buffer);
  29986. +    minibuf_save_vector = make_pointer(minibuf_save_vector);
  29987. +    searchbuf.buffer = make_pointer(searchbuf.buffer);
  29988. +    searchbuf.fastmap = make_pointer(searchbuf.fastmap);
  29989. +    specpdl = make_pointer(specpdl);
  29990. +    read_buffer = make_pointer(read_buffer);
  29991. +
  29992. +    MouseMap = make_lispptr(&MouseMap, MouseMap);
  29993. +    global_map = make_lispptr(&global_map, global_map);
  29994. +    Vglobal_map = make_lispptr(&Vglobal_map, Vglobal_map);
  29995. +    Vesc_map = make_lispptr(&Vesc_map, Vesc_map);
  29996. +    Vctl_x_map = make_lispptr(&Vctl_x_map, Vctl_x_map);
  29997. +
  29998. +    Qvariable_documentation = make_lispptr(&Qvariable_documentation, Qvariable_documentation);
  29999. +    selected_window = make_lispptr(&selected_window, selected_window);
  30000. +
  30001. +    free_list = make_pointer(free_list);
  30002. +    mem = free_list;
  30003. +    while (mem)
  30004. +    {
  30005. +    mem->prev = make_pointer(mem->prev);
  30006. +    mem->next = make_pointer(mem->next);
  30007. +    mem = mem->next;
  30008. +    }
  30009. +
  30010. +    for (i = 0; i <= 4; i++)
  30011. +      callint_argfuns[i] = make_pointer(callint_argfuns[i]);
  30012. +}
  30013. +
  30014. +static undump(char *fn)
  30015. +{
  30016. +  BPTR fd;
  30017. +  long code_size;
  30018. +  char *_malloc_hunk;
  30019. +  int *_pure;
  30020. +  /*extern struct Library *FifoBase;
  30021. +  struct Library *_FifoBase = FifoBase;*/
  30022. +
  30023. +  fd = Open(fn, MODE_OLDFILE);
  30024. +  if (!fd) return 0;
  30025. +
  30026. +  Read(fd, (char *)&puresize, sizeof puresize);
  30027. +  Read(fd, (char *)&malloc_hunk_size, sizeof malloc_hunk_size);
  30028. +  _pure = dump_malloc(puresize);
  30029. +  _malloc_hunk = dump_malloc(malloc_hunk_size + pre_alloc);
  30030. +  Read(fd, (char *)&first_data, (char *)&last_data - (char *)&first_data);
  30031. +  Read(fd, (char *)&first_bss, (char *)&last_bss - (char *)&first_bss);
  30032. +  Read(fd, (char *)_pure, puresize);
  30033. +  Read(fd, (char *)_malloc_hunk, malloc_hunk_size);
  30034. +  Read(fd, (char *)&staticidx, sizeof staticidx);
  30035. +  Read(fd, (char *)staticvec, staticidx * sizeof(Lisp_Object *));
  30036. +  /*FifoBase = _FifoBase;*/
  30037. +  if (Read(fd, (char *)&code_size, sizeof code_size) != sizeof code_size ||
  30038. +      code_size != (char *)last_fn - (char *)first_fn)
  30039. +    bailout(fn);
  30040. +
  30041. +  Close(fd);
  30042. +  malloc_hunk = _malloc_hunk;
  30043. +  pure = _pure;
  30044. +  return 1;
  30045. +}
  30046. +
  30047. +void map_out_data(char *fn)
  30048. +{
  30049. +    if (amiga_initialized) error("You can only dump once !");
  30050. +    Fgarbage_collect();
  30051. +
  30052. +    patch();
  30053. +    dump(fn);
  30054. +    unpatch();
  30055. +    amiga_initialized = 1;
  30056. +}
  30057. +
  30058. +void map_in_data(int load)
  30059. +{
  30060. +    if (load && undump("GNUEmacs:etc/EMACS-DATA"))
  30061. +    {
  30062. +    unpatch();
  30063. +    current_screen = new_screen = temp_screen = 0;
  30064. +    message_buf = 0;
  30065. +    chars_wasted = copybuf = 0;
  30066. +    DC_ICcost = 0;
  30067. +    ILcost = DLcost = ILncost = DLncost = 0;
  30068. +    initialized = amiga_initialized = 1;
  30069. +    }
  30070. +    else
  30071. +      {
  30072. +    malloc_hunk = dump_malloc(malloc_hunk_size + pre_alloc);
  30073. +    pure = dump_malloc(puresize);
  30074. +      }
  30075. +    amiga_undump_reinit();
  30076. +}
  30077. diff -rup --new-file baseline/fsf/emacs18/src/amiga_malloc.c amiga/fsf/emacs18/src/amiga_malloc.c
  30078. --- baseline/fsf/emacs18/src/amiga_malloc.c    Wed Dec 31 17:00:00 1969
  30079. +++ amiga/fsf/emacs18/src/amiga_malloc.c    Sat Sep 28 00:00:00 1996
  30080. @@ -0,0 +1,321 @@
  30081. +/* Emulation of some unix functions for emacs.
  30082. +Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
  30083. +
  30084. +This file is part of GNU Emacs.
  30085. +
  30086. +GNU Emacs is distributed in the hope that it will be useful,
  30087. +but WITHOUT ANY WARRANTY.  No author or distributor
  30088. +accepts responsibility to anyone for the consequences of using it
  30089. +or for whether it serves any particular purpose or works at all,
  30090. +unless he says so in writing.  Refer to the GNU Emacs General Public
  30091. +License for full details.
  30092. +
  30093. +Everyone is granted permission to copy, modify and redistribute
  30094. +GNU Emacs, but only under the conditions described in the
  30095. +GNU Emacs General Public License.   A copy of this license is
  30096. +supposed to have been given to you along with GNU Emacs so you
  30097. +can know your rights and responsibilities.  It should be in a
  30098. +file named COPYING.  Among other things, the copyright notice
  30099. +and this notice must be preserved on all copies.  */
  30100. +
  30101. +#include <exec/types.h>
  30102. +#include <exec/memory.h>
  30103. +#include <proto/exec.h>
  30104. +
  30105. +#undef LONGBITS
  30106. +#undef NULL
  30107. +#include "config.h"
  30108. +#include "lisp.h"
  30109. +#include "amiga.h"
  30110. +
  30111. +/* Memory stuff */
  30112. +long far DataSegBits;
  30113. +static int DataSegFound;
  30114. +static struct mem_header *far current;
  30115. +struct mem_header *free_list;
  30116. +extern int alloca_calling;
  30117. +extern int *pure;
  30118. +long far pre_alloc;    /* amount of memory to reserve for emacs */
  30119. +char *malloc_hunk;
  30120. +long malloc_hunk_size = MALLOC_HUNK_SIZE; /* Amount of memory malloc'ed by a
  30121. +                         to-be-dumped emacs */
  30122. +long malloc_bytes_used;    /* Amount of this hunk actually used */
  30123. +static int early_malloc = TRUE;    /* Before we undump, we want system allocations */
  30124. +
  30125. +#define ADDR_OK(x) (((long)x & ~VALMASK) == DataSegBits)
  30126. +
  30127. +/* Memory allocation code */
  30128. +/* ---------------------- */
  30129. +
  30130. +static void *alloc_sys(long memsize)
  30131. +/* Effect: Allocate from AmigaOS (via AllocMem). */
  30132. +{
  30133. +  /* Allocation rounded up to multiple of 4 */
  30134. +  long size = ((memsize + 3) & ~3) + sizeof(struct mem_header);
  30135. +  struct mem_header *mem;
  30136. +
  30137. +  if (!DataSegFound)
  30138. +    {
  30139. +      /* Find page containing Pure data. All data used by emacs must be
  30140. +     on the same page (As a page is 2^26 bytes, this shouldn't be too
  30141. +     unlikely). */
  30142. +      DataSegBits = (long)&first_data & ~VALMASK;
  30143. +      if (!(ADDR_OK(first_fn) && ADDR_OK(last_fn) &&
  30144. +        ADDR_OK(&first_data) && ADDR_OK(&last_data) &&
  30145. +        ADDR_OK(&first_bss) && ADDR_OK(&last_bss)))
  30146. +    _fail("I can't handle your memory configuration");
  30147. +      DataSegFound = TRUE;
  30148. +    }
  30149. +
  30150. +  mem = AllocMem(size, 0);
  30151. +  if (!mem) return 0;
  30152. +  /* All memory *must* be allocated on the same page ! */
  30153. +  if (!ADDR_OK(mem))
  30154. +    {
  30155. +      FreeMem(mem, size);
  30156. +      return 0;
  30157. +    }
  30158. +  if (current) current->prev = mem;
  30159. +  mem->next = current;
  30160. +  mem->prev = 0;
  30161. +  current = mem;
  30162. +  mem->size = size;
  30163. +
  30164. +  return mem + 1;
  30165. +}
  30166. +
  30167. +static void free_sys(char *p)
  30168. +{
  30169. +  struct mem_header *old = (struct mem_header *)p - 1;
  30170. +
  30171. +  if (old == current)
  30172. +    {
  30173. +      current = current->next;
  30174. +      if (current) current->prev = 0;
  30175. +    }
  30176. +  else
  30177. +    {
  30178. +      old->prev->next = old->next;
  30179. +      if (old->next) old->next->prev = old->prev;
  30180. +    }
  30181. +  FreeMem(old, old->size);
  30182. +}
  30183. +
  30184. +void _MemCleanup(void)
  30185. +{
  30186. +  struct mem_header *next;
  30187. +
  30188. +  while (current)
  30189. +    {
  30190. +      next = current->next;
  30191. +      FreeMem(current, current->size);
  30192. +      current = next;
  30193. +    }
  30194. +}
  30195. +
  30196. +static void *alloc_hunk(long memsize)
  30197. +/* Effect: Allocates from the malloc hunk (which is dumped to disk).
  30198. +*/
  30199. +{
  30200. +  /* Allocation rounded up to multiple of 4 */
  30201. +  long size = ((memsize + 3) & ~3) + sizeof(struct mem_header);
  30202. +  /* Find a free block in the memory list */
  30203. +  struct mem_header *scan = free_list->next;
  30204. +
  30205. +  while (scan->size > 0)
  30206. +    {
  30207. +      if (size < scan->size)    /* Found ! */
  30208. +    {
  30209. +      long end;
  30210. +
  30211. +      /* Split block if big enough */
  30212. +      if (size + sizeof(struct mem_header) + 8 > scan->size)
  30213. +        {
  30214. +          /* Remove block from list */
  30215. +          scan->prev->next = scan->next;
  30216. +          scan->next->prev = scan->prev;
  30217. +        }
  30218. +      else
  30219. +        {
  30220. +          /* Split block */
  30221. +          struct mem_header *new = (struct mem_header *)((char *)scan + size);
  30222. +
  30223. +          new->prev = scan->prev;
  30224. +          new->next = scan->next;
  30225. +          scan->prev->next = new;
  30226. +          scan->next->prev = new;
  30227. +          new->size = scan->size - size;
  30228. +          scan->size = size;
  30229. +        }
  30230. +      if (!amiga_initialized)
  30231. +        {
  30232. +          end = (char *)scan - (char *)free_list + scan->size +
  30233. +        sizeof(long) + sizeof(struct mem_header);
  30234. +          if (end > malloc_bytes_used) malloc_bytes_used = end;
  30235. +        }
  30236. +      return scan + 1;
  30237. +    }
  30238. +      scan = scan->next;
  30239. +    }
  30240. +  return 0;
  30241. +}
  30242. +
  30243. +static void free_hunk(char *p)
  30244. +{
  30245. +  struct mem_header *old = (struct mem_header *)p - 1, *scan = free_list;
  30246. +
  30247. +  do scan = scan->next; while (scan < old);
  30248. +
  30249. +  /* Check for merges (potentially with both sides) */
  30250. +  if ((char *)scan->prev + scan->prev->size == (char *)old)
  30251. +    if ((char *)old + old->size == (char *)scan)
  30252. +      {
  30253. +    /* Merge all 3 blocks together */
  30254. +    scan->prev->size += old->size + scan->size;
  30255. +    scan->next->prev = scan->prev;
  30256. +    scan->prev->next = scan->next;
  30257. +      }
  30258. +    else            /* Merge with previous block */
  30259. +      scan->prev->size += old->size;
  30260. +  else if ((char *)old + old->size == (char *)scan)
  30261. +    {
  30262. +      /* Merge with next block */
  30263. +      old->size += scan->size;
  30264. +      scan->prev->next = old;
  30265. +      scan->next->prev = old;
  30266. +      old->prev = scan->prev;
  30267. +      old->next = scan->next;
  30268. +    }
  30269. +  else                /* Add a new block */
  30270. +    {
  30271. +      old->next = scan;
  30272. +      old->prev = scan->prev;
  30273. +      scan->prev->next = old;
  30274. +      scan->prev = old;
  30275. +    }
  30276. +}
  30277. +
  30278. +char *__halloc(long size)
  30279. +{
  30280. +  if (early_malloc) return alloc_sys(size);
  30281. +
  30282. +  if (!amiga_initialized)
  30283. +    if (alloca_calling)
  30284. +      {
  30285. +    alloca_calling = 0;
  30286. +    return alloc_sys(size);
  30287. +      }
  30288. +    else
  30289. +      {
  30290. +    void *mem = alloc_hunk(size);
  30291. +
  30292. +    if (!mem) 
  30293. +      _fail("Emacs dump: ran out of memory for malloc. \n"
  30294. +        "See the -malloc option for more information.\n");
  30295. +    return mem;
  30296. +      }
  30297. +  else
  30298. +    {
  30299. +      alloca_calling = 0;
  30300. +      if (pre_alloc)
  30301. +    {
  30302. +      void *mem;
  30303. +
  30304. +      if (mem = alloc_hunk(size)) return mem;
  30305. +    }
  30306. +      return alloc_sys(size);
  30307. +    }
  30308. +}
  30309. +
  30310. +char *malloc(int size)
  30311. +{
  30312. +  return __halloc(size);
  30313. +}
  30314. +
  30315. +free(void *p)
  30316. +{
  30317. +  struct mem_header *old = (struct mem_header *)p - 1;
  30318. +
  30319. +  if ((char *)p >= malloc_hunk &&
  30320. +      (char *)p <= malloc_hunk + malloc_hunk_size + pre_alloc)
  30321. +    {
  30322. +      if (!amiga_initialized || pre_alloc) free_hunk(p);
  30323. +    }
  30324. +  else free_sys(p);
  30325. +}
  30326. +
  30327. +char *calloc(long n, long size)
  30328. +{
  30329. +  char *t;
  30330. +  long rsize = n * size;
  30331. +
  30332. +  t = malloc(rsize);
  30333. +  if (t) memset (t, 0, rsize);
  30334. +
  30335. +  return t;
  30336. +}
  30337. +
  30338. +char *realloc(char *p, long size)
  30339. +{
  30340. +  char *new = malloc(size);
  30341. +  struct mem_header *old = (struct mem_header *)p - 1;
  30342. +
  30343. +  if (new)
  30344. +    {
  30345. +      long minsize;
  30346. +      long oldsize = old->size - sizeof(struct mem_header);
  30347. +
  30348. +      if (size < oldsize) minsize = size;
  30349. +      else minsize = oldsize;
  30350. +
  30351. +      memcpy(new, p, minsize);
  30352. +    }
  30353. +  free(p);
  30354. +  return new;
  30355. +}
  30356. +
  30357. +void emacs_malloc_init(void)
  30358. +{
  30359. +  struct mem_header *end_sentinel, *new_end, *new_block;
  30360. +
  30361. +  early_malloc = FALSE;        /* We now have a malloc hunk */
  30362. +
  30363. +  /* Set up the memory allocation in the malloc hunk */
  30364. +  free_list = (struct mem_header *)malloc_hunk;
  30365. +  end_sentinel = (struct mem_header *)((char *)free_list + malloc_hunk_size
  30366. +                       - sizeof(struct mem_header));
  30367. +  if (!amiga_initialized)
  30368. +    {
  30369. +      /* Before dumping */
  30370. +      free_list->next = free_list + 1;
  30371. +      free_list->prev = 0;
  30372. +      free_list->size = 0;    /* Prevents merges with this pseudo-block */
  30373. +      free_list[1].prev = free_list;
  30374. +      free_list[1].next = end_sentinel;
  30375. +      free_list[1].size =
  30376. +    malloc_hunk_size - 2 * sizeof(struct mem_header) - sizeof(long);
  30377. +      /* The - sizeof(long) prevents any merges with end_sentinel */
  30378. +
  30379. +      end_sentinel->size = 0;
  30380. +      end_sentinel->prev = free_list + 1;
  30381. +      end_sentinel->next = 0;
  30382. +
  30383. +      malloc_bytes_used = 0;
  30384. +    }
  30385. +  else if (pre_alloc)
  30386. +    {
  30387. +      /* After having undumped extend malloc block */
  30388. +      /* Move end_sentinel: */
  30389. +      new_end = (struct mem_header *)((char *)free_list + malloc_hunk_size +
  30390. +                      pre_alloc - sizeof(struct mem_header));
  30391. +      new_end->size = 0;
  30392. +      new_end->next = 0;
  30393. +      new_end->prev = end_sentinel->prev;
  30394. +      end_sentinel->prev->next = new_end;
  30395. +
  30396. +      /* Add extra memory (pre_alloc bytes) */
  30397. +      new_block = (struct mem_header *)((char *)end_sentinel - sizeof(long));
  30398. +      new_block->size = pre_alloc;
  30399. +      free_hunk((char *)(new_block + 1));
  30400. +    }
  30401. +}
  30402. diff -rup --new-file baseline/fsf/emacs18/src/amiga_menu.c amiga/fsf/emacs18/src/amiga_menu.c
  30403. --- baseline/fsf/emacs18/src/amiga_menu.c    Wed Dec 31 17:00:00 1969
  30404. +++ amiga/fsf/emacs18/src/amiga_menu.c    Sat Sep 28 00:00:00 1996
  30405. @@ -0,0 +1,309 @@
  30406. +#include <exec/types.h>
  30407. +#include <libraries/gadtools.h>
  30408. +#include <intuition/intuition.h>
  30409. +#include <proto/exec.h>
  30410. +#include <proto/dos.h>
  30411. +#include <proto/gadtools.h>
  30412. +#include <proto/intuition.h>
  30413. +#include "config.h"
  30414. +#undef NULL
  30415. +#include "lisp.h"
  30416. +#include "amiga.h"
  30417. +
  30418. +#ifndef GTMN_NewLookMenus
  30419. +#define GTMN_NewLookMenus    GT_TagBase+67
  30420. +#endif
  30421. +
  30422. +static struct Menu *emacs_menu;
  30423. +static char *emacs_menu_strings;
  30424. +static APTR win_vi;
  30425. +struct Library *GadToolsBase;
  30426. +
  30427. +void suspend_menus(void)
  30428. +{
  30429. +  if (emacs_win)
  30430. +    {
  30431. +      ClearMenuStrip(emacs_win);
  30432. +      if (win_vi)
  30433. +    {
  30434. +      FreeVisualInfo(win_vi);
  30435. +      win_vi = 0;
  30436. +    }
  30437. +    }
  30438. +}
  30439. +
  30440. +int resume_menus(void)
  30441. +{
  30442. +  if (emacs_win && emacs_menu)
  30443. +    {
  30444. +      win_vi = GetVisualInfo(emacs_win->WScreen, TAG_END);
  30445. +
  30446. +      if (!win_vi || !LayoutMenus(emacs_menu, win_vi,
  30447. +                  GTMN_NewLookMenus, 1L,
  30448. +                  TAG_END))
  30449. +    {
  30450. +      if (win_vi) FreeVisualInfo(win_vi);
  30451. +      Famiga_delete_menus();
  30452. +
  30453. +      return FALSE;
  30454. +    }
  30455. +      SetMenuStrip(emacs_win, emacs_menu);
  30456. +    }
  30457. +  return TRUE;
  30458. +}
  30459. +
  30460. +DEFUN ("amiga-menus", Famiga_menus, Samiga_menus, 1, 1, 0,
  30461. +  "Define menus for emacs. The argument is a list structured as follows:\n\
  30462. +   ((menu1-name ((item1-name item1-expr item1-key item1-disabled) ...)\n\
  30463. +     menu1-disabled) ...)\n\
  30464. +menu-name is the name of the menu item header.\n\
  30465. +The menu is disabled if menu-disabled is not nil [optional].\n\
  30466. +item-name is the name of an item.\n\
  30467. +The item-expr fields are ignored.\n\
  30468. +If item-key is nil, no shortcut is allowed.\n\
  30469. +If item-disabled is not nil, the item is disabled.\n\
  30470. +If the item information list is nil, a line is drawn in the menu.\n\
  30471. +item-key & item-disabled are optional.")
  30472. +  (menus)
  30473. +     Lisp_Object menus;
  30474. +{
  30475. +    Lisp_Object s_menus, s_items;
  30476. +    int citems, slen;
  30477. +    char *strdata;
  30478. +    struct NewMenu *menudata, *mkm;
  30479. +    struct Lisp_String *name;
  30480. +
  30481. +/*    int i;
  30482. +    extern int total[], nb[];
  30483. +
  30484. +    for (i = 0; i < 16; i++)
  30485. +    {
  30486. +    printf("%d(%d) ", total[i], nb[i]);
  30487. +    total[i] = nb[i] = 0;
  30488. +    }
  30489. +    printf("\n");
  30490. +    start_count(15);
  30491. +    for (i = 0; i < 100; i++) { suspend_count(15); resume_count(15); }
  30492. +    stop_count(15);
  30493. +    for (i = 0; i < 100; i++) { start_count(14); stop_count(14); }
  30494. +    printf("100 s/r: %d, 100 s/s: %d\n", total[15], total[14]);
  30495. +
  30496. +    return Qnil;
  30497. +*/
  30498. +    check_intuition();
  30499. +
  30500. +    /* Check structure of parameter & count # items & menus */
  30501. +    s_menus = menus;
  30502. +    citems = slen = 0;
  30503. +
  30504. +    while (!NULL(s_menus))
  30505. +    {
  30506. +    struct Lisp_Cons *menu, *menu_cell;
  30507. +
  30508. +    CHECK_CONS(s_menus, 0);
  30509. +    menu_cell = XCONS(s_menus);
  30510. +    citems++;
  30511. +    CHECK_CONS(menu_cell->car, 0); /* Each menu is a list */
  30512. +    menu = XCONS(menu_cell->car);
  30513. +
  30514. +    CHECK_STRING(menu->car, 0); /* Check name */
  30515. +    name = XSTRING(menu->car);
  30516. +    slen += name->size + 1;
  30517. +    CHECK_CONS(menu->cdr, 0);
  30518. +
  30519. +    menu = XCONS(menu->cdr); /* Check items */
  30520. +
  30521. +    s_items = menu->car;
  30522. +    while (!NULL(s_items))
  30523. +    {
  30524. +        struct Lisp_Cons *item, *item_cell;
  30525. +
  30526. +        CHECK_CONS(s_items, 0);
  30527. +        item_cell = XCONS(s_items);
  30528. +        citems++;
  30529. +        if (!NULL(item_cell->car))
  30530. +        {
  30531. +        CHECK_CONS(item_cell->car, 0); /* Each item is a list */
  30532. +        item = XCONS(item_cell->car);
  30533. +
  30534. +        CHECK_STRING(item->car, 0);
  30535. +        name = XSTRING(item->car);
  30536. +        slen += name->size + 1;
  30537. +
  30538. +        if (!NULL(item->cdr)) /* Only name is necessary */
  30539. +        {
  30540. +            CHECK_CONS(item->cdr, 0);
  30541. +            item = XCONS(item->cdr);
  30542. +
  30543. +            /* Expr is arbitrary */
  30544. +            if (!NULL(item->cdr))
  30545. +            {
  30546. +            CHECK_CONS(item->cdr, 0);
  30547. +            item = XCONS(item->cdr);
  30548. +
  30549. +            /* Check shortcut */
  30550. +            if (!NULL(item->car))
  30551. +            {
  30552. +                CHECK_NUMBER(item->car, 0);
  30553. +                slen += 2;
  30554. +            }
  30555. +
  30556. +            if (!NULL(item->cdr))
  30557. +            {
  30558. +                CHECK_CONS(item->cdr, 0);
  30559. +                item = XCONS(item->cdr);
  30560. +
  30561. +                /* Check that end of list */
  30562. +                if (!NULL(item->cdr)) error("Badly formed item");
  30563. +            }
  30564. +            }
  30565. +        }
  30566. +        }
  30567. +        s_items = item_cell->cdr;
  30568. +    }
  30569. +    if (!NULL(menu->cdr))
  30570. +    {
  30571. +        CHECK_CONS(menu->cdr, 0);
  30572. +        menu = XCONS(menu->cdr);
  30573. +        if (!NULL(menu->cdr)) error("Badly formed menu");
  30574. +    }
  30575. +    s_menus = menu_cell->cdr;
  30576. +    }
  30577. +
  30578. +    suspend_menus();
  30579. +    if (emacs_menu) Famiga_delete_menus();
  30580. +
  30581. +    /* Now create menu structure */
  30582. +    menudata = (struct NewMenu *)alloca(sizeof(struct NewMenu) * (citems + 1));
  30583. +    emacs_menu_strings = strdata = (char *)xmalloc(slen);
  30584. +    mkm = menudata;
  30585. +    s_menus = menus;
  30586. +    while (!NULL(s_menus))
  30587. +    {
  30588. +    struct Lisp_Cons *menu, *menu_cell;
  30589. +    struct NewMenu *menu1;
  30590. +
  30591. +    menu_cell = XCONS(s_menus);
  30592. +    mkm->nm_Type = NM_TITLE;
  30593. +    menu = XCONS(menu_cell->car);
  30594. +    name = XSTRING(menu->car);
  30595. +    strcpy(strdata, name->data);
  30596. +    mkm->nm_Label = strdata;
  30597. +    strdata += name->size + 1;
  30598. +    mkm->nm_CommKey = 0;
  30599. +    mkm->nm_Flags = 0;
  30600. +    mkm->nm_MutualExclude = 0;
  30601. +    menu1 = mkm++;
  30602. +
  30603. +    menu = XCONS(menu->cdr); /* Check items */
  30604. +
  30605. +    s_items = menu->car;
  30606. +    while (!NULL(s_items))
  30607. +    {
  30608. +        struct Lisp_Cons *item, *item_cell;
  30609. +
  30610. +        item_cell = XCONS(s_items);
  30611. +        mkm->nm_Type = NM_ITEM;
  30612. +        mkm->nm_CommKey = 0;
  30613. +        mkm->nm_Flags = 0;
  30614. +        mkm->nm_MutualExclude = 0;
  30615. +        if (NULL(item_cell->car))
  30616. +        {
  30617. +        mkm->nm_Type = IM_ITEM;
  30618. +        mkm->nm_Label = NM_BARLABEL;
  30619. +        }
  30620. +        else
  30621. +        {
  30622. +
  30623. +        item = XCONS(item_cell->car);
  30624. +        name = XSTRING(item->car);
  30625. +        strcpy(strdata, name->data);
  30626. +        mkm->nm_Label = strdata;
  30627. +        strdata += name->size + 1;
  30628. +
  30629. +        if (!NULL(item->cdr)) /* Only name is necessary */
  30630. +        {
  30631. +            item = XCONS(item->cdr);
  30632. +
  30633. +            /* Expr is ignored */
  30634. +
  30635. +            if (!NULL(item->cdr))
  30636. +            {
  30637. +            item = XCONS(item->cdr);
  30638. +
  30639. +            /* Check shortcut */
  30640. +            if (!NULL(item->car))
  30641. +            {
  30642. +                mkm->nm_CommKey = strdata;
  30643. +                strdata[0] = XFASTINT(item->car);
  30644. +                strdata[1] = '\0';
  30645. +                strdata += 2;
  30646. +            }
  30647. +            if (!NULL(item->cdr))
  30648. +            {
  30649. +                item = XCONS(item->cdr);
  30650. +                if (!NULL(item->car))
  30651. +                mkm->nm_Flags |= NM_ITEMDISABLED;
  30652. +            }
  30653. +            }
  30654. +        }
  30655. +        }
  30656. +        mkm++;
  30657. +        s_items = item_cell->cdr;
  30658. +    }
  30659. +    if (!NULL(menu->cdr))
  30660. +    {
  30661. +        menu = XCONS(menu->cdr);
  30662. +        if (!NULL(menu->car)) menu1->nm_Flags |= NM_MENUDISABLED;
  30663. +    }
  30664. +    s_menus = menu_cell->cdr;
  30665. +    }
  30666. +    mkm->nm_Type = NM_END;
  30667. +    mkm->nm_Label = 0;
  30668. +    mkm->nm_CommKey = 0;
  30669. +    mkm->nm_Flags = 0;
  30670. +    mkm->nm_MutualExclude = 0;
  30671. +    if (!(emacs_menu = CreateMenus(menudata, TAG_END)))
  30672. +    {
  30673. +    free(emacs_menu_strings);
  30674. +    emacs_menu_strings = 0;
  30675. +    error("Menu couldn't be created");
  30676. +    }
  30677. +    if (!resume_menus()) error("Menu couldn't be layed out");
  30678. +
  30679. +    return Qt;
  30680. +}
  30681. +
  30682. +DEFUN ("amiga-delete-menus", Famiga_delete_menus, Samiga_delete_menus, 0, 0, 0,
  30683. +       "Remove & free menu strip")
  30684. +   ()
  30685. +{
  30686. +    check_intuition();
  30687. +
  30688. +    suspend_menus();
  30689. +    if (emacs_menu) FreeMenus(emacs_menu);
  30690. +    emacs_menu = 0;
  30691. +    if (emacs_menu_strings) free(emacs_menu_strings);
  30692. +    emacs_menu_strings = 0;
  30693. +
  30694. +    return Qt;
  30695. +}
  30696. +
  30697. +void syms_of_amiga_menu(void)
  30698. +{
  30699. +    defsubr(&Samiga_delete_menus);
  30700. +    defsubr(&Samiga_menus);
  30701. +}
  30702. +
  30703. +void init_amiga_menu(void)
  30704. +{
  30705. +    GadToolsBase = OpenLibrary("gadtools.library", 0);
  30706. +    if (!GadToolsBase) _fail("gadtools.library required");
  30707. +}
  30708. +
  30709. +void cleanup_amiga_menu(void)
  30710. +{
  30711. +  suspend_menus();
  30712. +  if (emacs_menu) Famiga_delete_menus();
  30713. +  if (GadToolsBase) CloseLibrary(GadToolsBase);
  30714. +}
  30715. diff -rup --new-file baseline/fsf/emacs18/src/amiga_processes.c amiga/fsf/emacs18/src/amiga_processes.c
  30716. --- baseline/fsf/emacs18/src/amiga_processes.c    Wed Dec 31 17:00:00 1969
  30717. +++ amiga/fsf/emacs18/src/amiga_processes.c    Sat Sep 28 00:00:00 1996
  30718. @@ -0,0 +1,94 @@
  30719. +#include <exec/types.h>
  30720. +#include <exec/execbase.h>
  30721. +#include <exec/memory.h>
  30722. +#include <dos/dos.h>
  30723. +#include <dos/dosextens.h>
  30724. +#include <dos/dostags.h>
  30725. +#include <proto/exec.h>
  30726. +#include <proto/dos.h>
  30727. +#include <clib/alib_protos.h>
  30728. +#include <signal.h>
  30729. +#undef signal
  30730. +#include <ios1.h>
  30731. +#include <string.h>
  30732. +#include <errno.h>
  30733. +#include <stdio.h>
  30734. +#include <internal/vars.h>
  30735. +
  30736. +#include "config.h"
  30737. +#include "lisp.h"
  30738. +#include "amiga.h"
  30739. +#include "emacssignal.h"
  30740. +
  30741. +extern struct ExecBase *SysBase;
  30742. +
  30743. +int amiga_process_stack_size;
  30744. +
  30745. +/* A few emacs support functions */
  30746. +/* ----------------------------- */
  30747. +
  30748. +wait_for_termination (pid)
  30749. +     int pid;
  30750. +{
  30751. +  while (1)
  30752. +    {
  30753. +      sigsetmask (sigmask (SIGCHLD));
  30754. +      if (0 > kill (pid, 0))
  30755. +        {
  30756. +      sigsetmask (SIGEMPTYMASK);
  30757. +      break;
  30758. +    }
  30759. +      sigpause (SIGEMPTYMASK);
  30760. +    }
  30761. +}
  30762. +
  30763. +char *amiga_path(void)
  30764. +{
  30765. +  char *path, *pp, name[128];
  30766. +  int pathsize;
  30767. +  struct CommandLineInterface *cli;
  30768. +  BPTR lock;
  30769. +  long l, *lp, nlen;
  30770. +
  30771. +  pathsize = 128;
  30772. +  path = (char *)xmalloc(pathsize);
  30773. +
  30774. +  strcpy(path, ".");
  30775. +  pp = path + 1;
  30776. +
  30777. +  if (!(cli = (struct CommandLineInterface *)((long)_us->pr_CLI << 2)))
  30778. +    return path;
  30779. +
  30780. +  l = (long)cli->cli_CommandDir;
  30781. +  while (l) {
  30782. +    *pp++ = ',';
  30783. +    l <<= 2;
  30784. +    lp = (long *)l;
  30785. +    lock = (BPTR)*(lp + 1);
  30786. +    NameFromLock(lock, name, 128);
  30787. +    nlen = strlen(name);
  30788. +    if (pp + nlen + 5 >= path + pathsize)
  30789. +      {
  30790. +    char *newpath;
  30791. +
  30792. +    pathsize = 2 * pathsize + nlen;
  30793. +    newpath = (char *)xrealloc(path);
  30794. +    pp = newpath + (pp - path);
  30795. +    path = newpath;
  30796. +      }
  30797. +    memcpy(pp, name, nlen);
  30798. +    pp += nlen;
  30799. +    l = *lp;
  30800. +  }
  30801. +  /* Use of +5 above guarantees that there is enough space for c: */
  30802. +  strcpy(pp, ",c:");
  30803. +
  30804. +  return path;
  30805. +}
  30806. +
  30807. +void syms_of_amiga_processes(void)
  30808. +{
  30809. +  amiga_process_stack_size = 0;
  30810. +  DEFVAR_INT("amiga-process-stack-size", &amiga_process_stack_size,
  30811. +     "Size of stack for called processes. 0 means same size as emacs stack.");
  30812. +}
  30813. diff -rup --new-file baseline/fsf/emacs18/src/amiga_rexx.c amiga/fsf/emacs18/src/amiga_rexx.c
  30814. --- baseline/fsf/emacs18/src/amiga_rexx.c    Wed Dec 31 17:00:00 1969
  30815. +++ amiga/fsf/emacs18/src/amiga_rexx.c    Sat Sep 28 00:00:00 1996
  30816. @@ -0,0 +1,460 @@
  30817. +/* low level ARexx code for use in amiga version of Emacs.
  30818. +   Copyright (C) 1993 Christian E. Hopps.
  30819. +
  30820. +This file is part of GNU Emacs.
  30821. +
  30822. +GNU Emacs is free software; you can redistribute it and/or modify
  30823. +it under the terms of the GNU General Public License as published by
  30824. +the Free Software Foundation; either version 1, or (at your option)
  30825. +any later version.
  30826. +
  30827. +GNU Emacs is distributed in the hope that it will be useful,
  30828. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  30829. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  30830. +GNU General Public License for more details.
  30831. +
  30832. +You should have received a copy of the GNU General Public License
  30833. +along with GNU Emacs; see the file COPYING.  If not, write to
  30834. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  30835. +
  30836. +#include "SimpleRexx.h"
  30837. +#include <proto/exec.h>
  30838. +#undef NULL
  30839. +#include "config.h"
  30840. +#include "lisp.h"
  30841. +
  30842. +#include "amiga.h"
  30843. +
  30844. +#define XLRXMSG(x) ((struct LispRexxMsg *) XPNTR((x)))
  30845. +#define XSETLRXMSG(x,v) (XSET((x), Lisp_Int, v))
  30846. +
  30847. +static AREXXCONTEXT far handle;
  30848. +static int amiga_arexx_initialized;
  30849. +
  30850. +/* This structure should be allocated with emacs_malloc() its pointer will be */
  30851. +/* used as an msgid. (emacs XUINT())*/
  30852. +struct LispRexxMsg {
  30853. +  struct MinNode  lrm_Node;              /* A node for tracking messages. */
  30854. +  struct RexxMsg *lrm_Msg;              /* The actual Rexx Msg. */
  30855. +  ULONG  lrm_Flags;
  30856. +};
  30857. +/* Flags for LispRexxMessage indicating what to do with it. */
  30858. +#define LRMF_SENTCMD (1L << 0)              /* this msg originated here. */
  30859. +#define LRMF_DOERRORS (1L << 1)              /* handle error replies */
  30860. +#define LRMF_DORESULTS (1L << 2)          /* handle result strings */
  30861. +
  30862. +struct LispRexxList {
  30863. +    struct MinList lrl_List;
  30864. +    int    lrl_Count;
  30865. +};
  30866. +
  30867. +struct LispRexxList pending;              /* The list of pending */
  30868. +                          /* (outgoing) Rexx Messages. */
  30869. +struct LispRexxList returned;              /* The list of pending */
  30870. +                          /* (outgoing) Rexx Messages */
  30871. +                          /* that have been received. */
  30872. +struct LispRexxList incoming;              /* The message that are */
  30873. +                          /* incoming to Emacs (sent */
  30874. +                          /* from some other rexx host. */
  30875. +
  30876. +/* allocate a rexx message properly */
  30877. +Lisp_Object alloc_rexx_msg(ULONG flags)
  30878. +{
  30879. +    Lisp_Object rm = Qnil;
  30880. +    struct LispRexxMsg *lrm = (struct LispRexxMsg *)malloc(sizeof(*lrm));
  30881. +    if(lrm) {
  30882. +    lrm->lrm_Flags = flags;
  30883. +    XSETLRXMSG(rm,lrm);
  30884. +    return(rm);
  30885. +    }
  30886. +    return(Qnil);
  30887. +}
  30888. +
  30889. +/* free an arexx message allocated with alloc_arexx_msg() */
  30890. +void free_rexx_msg (Lisp_Object rm)
  30891. +{
  30892. +    if(!NULL(rm)) {
  30893. +    void *mem = XLRXMSG(rm);
  30894. +    free(mem);
  30895. +    }
  30896. +}
  30897. +
  30898. +/* The next 2 functions imlement FIFO lists. */
  30899. +
  30900. +/* add LispRexxMsg to a LispRexxLisp Tail. */
  30901. +void add_rexx_msg_to_tail(struct LispRexxList *rl, Lisp_Object rm)
  30902. +{
  30903. +    AddTail((struct List *)rl,(struct Node *)XPNTR(rm));
  30904. +    rl->lrl_Count++;
  30905. +}
  30906. +
  30907. +/* remove LispRexxMsg from head of a LispRexxLisp. */
  30908. +Lisp_Object remove_rexx_msg_from_head(struct LispRexxList *rl)
  30909. +{
  30910. +    Lisp_Object rm = (Lisp_Object)RemHead((struct List *)rl);
  30911. +    if(rm != 0) {
  30912. +    rl->lrl_Count--;
  30913. +    return(rm);
  30914. +    } else {
  30915. +        return Qnil;
  30916. +    }
  30917. +}
  30918. +
  30919. +void remove_rexx_msg(struct LispRexxList *rl, Lisp_Object rm)
  30920. +{
  30921. +    Remove((struct Node *)XPNTR(rm));
  30922. +    rl->lrl_Count--;
  30923. +}
  30924. +
  30925. +
  30926. +/* find a rexx message on a list given an msgid (ptr) */
  30927. +int is_rexx_msgid_on_list(struct LispRexxList *rl,
  30928. +                    Lisp_Object id)
  30929. +{
  30930. +    struct MinNode *mn = rl->lrl_List.mlh_Head;
  30931. +    for(mn; mn->mln_Succ; mn = mn->mln_Succ) {
  30932. +    Lisp_Object cmpid = Qnil;
  30933. +    XSETLRXMSG(cmpid,mn);
  30934. +    if( EQ(cmpid,id)) {
  30935. +        return(1);
  30936. +    }
  30937. +    }
  30938. +    return(0);
  30939. +}
  30940. +
  30941. +Lisp_Object find_rexx_msg_on_list(struct LispRexxList *rl,
  30942. +                  struct RexxMsg *msg)
  30943. +{
  30944. +    Lisp_Object pnt = Qnil;
  30945. +    struct MinNode *mn = rl->lrl_List.mlh_Head;
  30946. +    for(mn; mn->mln_Succ; mn = mn->mln_Succ) {
  30947. +    if( ((struct LispRexxMsg *)mn)->lrm_Msg == msg) {
  30948. +        XSETLRXMSG(pnt,mn);
  30949. +    }
  30950. +    }
  30951. +    return(pnt);
  30952. +}
  30953. +
  30954. +/* This function is given a RexxMsg and it goes and find (or doesn't) the */
  30955. +/* corisponding pending message, removes it from the list and sets up the lisp */
  30956. +/* list for return values.  if it is not found nil is returned. (it deals with */
  30957. +/* the errors for incoming messages properly.  Some thought is needed on how to */
  30958. +/* handle errors from replied sent commands that were not asking for results. */
  30959. +Lisp_Object handle_rexx_msg_replied(struct RexxMsg *msg)
  30960. +{
  30961. +    Lisp_Object rm = find_rexx_msg_on_list(&pending, msg);
  30962. +    if(!NULL(rm)) {
  30963. +    /* Process the command.  If it was requesting results strings handle */
  30964. +    /* them otherwise just delete. */
  30965. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  30966. +    remove_rexx_msg(&pending, rm);
  30967. +
  30968. +    if(msg->rm_Result1 == 0) {
  30969. +        if(lrm->lrm_Flags & LRMF_DORESULTS) {
  30970. +        /* add to returned so that result can be fetched. */
  30971. +        add_rexx_msg_to_tail(&returned,rm);
  30972. +        } else {
  30973. +        /* simply delete rexx message. */
  30974. +        DeleteARexxMsg(handle,msg);
  30975. +        free_rexx_msg(rm);
  30976. +        }
  30977. +    } else {
  30978. +        /* an error occured with our message. */
  30979. +        if(lrm->lrm_Flags & LRMF_DOERRORS) {
  30980. +        /* add to returned so that error can be fetched. */
  30981. +        add_rexx_msg_to_tail(&returned,rm);
  30982. +        } else {
  30983. +        /* simply delete rexx message. */
  30984. +        DeleteARexxMsg(handle,msg);
  30985. +        free_rexx_msg(rm);
  30986. +        }
  30987. +    }
  30988. +    } else {
  30989. +    /* This should never happen we received a rexx message reply */
  30990. +    /* that we never sent out. */
  30991. +    DeleteARexxMsg(handle,msg);
  30992. +    }
  30993. +}
  30994. +
  30995. +/* This function takes incoming messages and place them on the incoming msg */
  30996. +/* list.  */
  30997. +Lisp_Object handle_rexx_msg_received(struct RexxMsg *msg)
  30998. +{
  30999. +    Lisp_Object rm = alloc_rexx_msg(LRMF_DORESULTS|LRMF_DOERRORS);
  31000. +    if(!NULL(rm)) {
  31001. +    /* Add message to incoming list. */
  31002. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  31003. +    lrm->lrm_Msg = msg;              /* set msg pointer. */
  31004. +    add_rexx_msg_to_tail(&incoming,rm);
  31005. +    } else {
  31006. +    /* This should never happen we received a rexx message but ran out of */
  31007. +    /* memory.  Set last error msg. and reply with fail. */
  31008. +    SetARexxLastError(handle, msg, "Out of emacs memory.");
  31009. +    ReplyARexxMsg(handle, msg, 0, 20);
  31010. +    }
  31011. +}
  31012. +
  31013. +/* Almost the same as old one, but we now call handle_pending_arexx_reply() for */
  31014. +/* replied messages that we sent, so that we can setup result strings and such. */
  31015. +int check_arexx(int force, int kbd)
  31016. +{
  31017. +    struct RexxMsg *msg;
  31018. +    int msg_received = FALSE;
  31019. +    while (msg = GetARexxMsg(handle)) {
  31020. +    msg_received = TRUE;
  31021. +    if(msg->rm_Node.mn_Node.ln_Type == NT_REPLYMSG)    {
  31022. +        /* This is a reply to a rexx command we send out. */
  31023. +        handle_rexx_msg_replied(msg);
  31024. +    } else {
  31025. +        handle_rexx_msg_received(msg);
  31026. +    }
  31027. +    }
  31028. +    if ((kbd && amiga_arexx_initialized)) {
  31029. +    /* if we got a message or we have some out, or we have some waiting to */
  31030. +    /* be processes then enque the Key sequence that will call the rexx */
  31031. +    /* message handler.  We obviously don't do this for returned commands :^) */
  31032. +    if ((msg_received || force && incoming.lrl_Count > 0) &&
  31033. +        get_ttycount() == 0) {
  31034. +        enque(AMIGASEQ, FALSE); enque('X', FALSE);
  31035. +    }
  31036. +    }
  31037. +    return msg_received;
  31038. +}
  31039. +
  31040. +DEFUN ("amiga-arexx-wait", Famiga_arexx_wait, Samiga_arexx_wait, 0, 0, 0,
  31041. +       "Wait for an ARexx event (command or reply) before proceeding.")
  31042. +    ()
  31043. +{
  31044. +    while (!check_arexx(FALSE, FALSE)) Wait(ARexxSignal(handle));
  31045. +}
  31046. +
  31047. +DEFUN ("amiga-arexx-check-command",
  31048. +       Famiga_arexx_check_command, Samiga_arexx_check_command, 1, 1, 0,
  31049. +       "Return t if command ID has finished, nil otherwise.")
  31050. +    (id)
  31051. +Lisp_Object id;
  31052. +{
  31053. +    CHECK_NUMBER(id,0);
  31054. +
  31055. +    if(is_rexx_msgid_on_list(&pending,id)) {
  31056. +    /* still on pending return false. */
  31057. +    return Qnil;
  31058. +    } else if(is_rexx_msgid_on_list(&returned,id)) {
  31059. +    /* is waiting to be processed return true. */
  31060. +    return Qt;
  31061. +    }
  31062. +
  31063. +    /* is nowhere to be found. error. */
  31064. +    error("id not found.");
  31065. +    return Qnil;
  31066. +}
  31067. +
  31068. +DEFUN ("amiga-arexx-get-next-msg", Famiga_arexx_get_next_msg,
  31069. +       Samiga_get_next_msg, 0, 0, 0,
  31070. +"Returns the oldest arexx msg sent to emacs rexx port.\n\
  31071. +When you are through with this message call (amiga-arexx-reply).\n\
  31072. +if the msg is not replied this function will continue to\n\
  31073. +return that msg until it has been replied to.")
  31074. +  ()
  31075. +{
  31076. +    struct RexxMsg *rmsg;
  31077. +
  31078. +    check_arexx(FALSE, FALSE);
  31079. +    if (incoming.lrl_Count) {
  31080. +    struct RexxMsg *msg = ((struct LispRexxMsg *)
  31081. +                   incoming.lrl_List.mlh_Head)->lrm_Msg;
  31082. +    return build_string(ARG0(msg));
  31083. +    }
  31084. +    /* nothing to be gotten. */
  31085. +    return Qnil;
  31086. +}
  31087. +
  31088. +DEFUN("amiga-arexx-get-msg-results", Famiga_arexx_get_msg_results,
  31089. +      Samiga_arexx_get_msg_results, 1,1,0,
  31090. +"Returns the results from MSGID. will be a list of the form:\n\
  31091. +  (msgid resultcode secondary)\n\n\
  31092. +If resultcode is 0 then secondary will be a string or nil.\n\
  31093. +else resulcode will be greater than 0 and secondary will be\n\
  31094. +an error-code (int).\n\n\
  31095. +If MSGID has not yet completed nil is returned.\n\
  31096. +if MSGID has been dealt with or is invalid and error will occur.")
  31097. +    (msgid)
  31098. +Lisp_Object msgid;
  31099. +{
  31100. +    CHECK_NUMBER(msgid,0);
  31101. +
  31102. +    if(is_rexx_msgid_on_list(&returned,msgid)) {
  31103. +    /* msgid has completed build list and delete LispRexxMsg. */
  31104. +    struct LispRexxMsg *lrm = XLRXMSG(msgid);
  31105. +    Lisp_Object rc, error_or_string, ret;
  31106. +    struct RexxMsg *msg = lrm->lrm_Msg;
  31107. +
  31108. +    remove_rexx_msg(&returned,msgid);
  31109. +
  31110. +    rc = make_number(msg->rm_Result1);
  31111. +    if(msg->rm_Result1 == 0) {
  31112. +        error_or_string = msg->rm_Result2 ? build_string(msg->rm_Result2) : 0;
  31113. +    } else {
  31114. +        /* error occurred */
  31115. +        error_or_string = make_number(msg->rm_Result2); /* save error code. */
  31116. +    }
  31117. +    free_rexx_msg(msgid);              /* free our rexx msg. */
  31118. +    DeleteARexxMsg(handle,msg);          /* free ARexx msg proper */
  31119. +
  31120. +    /* build lisp list. */
  31121. +    ret = Fcons( msgid, Fcons( rc, Fcons(error_or_string, Qnil)));
  31122. +    if(NULL(ret)) {
  31123. +        error("Couldn't get memory.");
  31124. +    }
  31125. +    return(ret);
  31126. +    } else if(is_rexx_msgid_on_list(&pending,msgid)) {
  31127. +    return Qnil;                  /* this msgid has not yet completed. */
  31128. +    } else {
  31129. +    error("Unknown MSGID.");
  31130. +    return Qnil;
  31131. +    }
  31132. +}
  31133. +
  31134. +DEFUN ("amiga-arexx-reply", Famiga_arexx_reply, Samiga_arexx_reply,
  31135. +       2, 2, 0,
  31136. +"Replies to the first arexx message (the one got via amiga-arexx-get-event)\n\
  31137. +with RC as return code.\n\
  31138. +If RC=0, TEXT is the result, otherwise it is the error text. It can be nil.")
  31139. +    (rc, text)
  31140. +Lisp_Object rc, text;
  31141. +{
  31142. +    int retcode, ok = TRUE;
  31143. +    char *result;
  31144. +    struct RexxMsg *rmsg;
  31145. +    Lisp_Object rm = remove_rexx_msg_from_head(&incoming);
  31146. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  31147. +
  31148. +    if (NULL(rm))
  31149. +    error("No ARexx message to reply to.");
  31150. +
  31151. +    rmsg = lrm->lrm_Msg;
  31152. +
  31153. +    CHECK_NUMBER(rc, 0);
  31154. +    retcode = XINT(rc);
  31155. +
  31156. +    if (!NULL (text)) {
  31157. +    CHECK_STRING(text, 0);
  31158. +    result = XSTRING (text)->data;
  31159. +    } else {
  31160. +    result = 0;
  31161. +    }
  31162. +    if (retcode && result)
  31163. +    ok = SetARexxLastError(handle, rmsg, result);
  31164. +    ReplyARexxMsg(handle, rmsg, result, retcode);
  31165. +
  31166. +    if (!ok)
  31167. +    error("Failed to set ARexx error message.");
  31168. +
  31169. +    return Qnil;
  31170. +}
  31171. +
  31172. +Lisp_Object send_rexx_command(Lisp_Object str, Lisp_Object as_file,
  31173. +                  ULONG flags)
  31174. +{
  31175. +    struct RexxMsg *rmsg;
  31176. +    int i;
  31177. +    Lisp_Object id, rm;
  31178. +    struct LispRexxMsg *lrm;
  31179. +
  31180. +    rm = alloc_rexx_msg(flags);
  31181. +    if(NULL(rm)) {
  31182. +    error("Failed to send command to ARexx.");
  31183. +    return Qnil;
  31184. +    }
  31185. +
  31186. +    CHECK_STRING (str, 0);
  31187. +    if (!(rmsg = SendARexxMsg(handle, XSTRING (str)->data,!NULL (as_file),
  31188. +                  (flags & LRMF_DORESULTS ? 1 : 0)))) {
  31189. +    free_rexx_msg(rm);
  31190. +    error("Failed to send command to ARexx.");
  31191. +    return Qnil;
  31192. +    }
  31193. +    lrm = XLRXMSG(rm);
  31194. +    lrm->lrm_Msg = rmsg;              /* set rexx message pointer. */
  31195. +    add_rexx_msg_to_tail(&pending,rm);          /* add to pending list. */
  31196. +
  31197. +    return(rm);
  31198. +}
  31199. +
  31200. +DEFUN ("amiga-arexx-send-command", Famiga_arexx_send_command,
  31201. +       Samiga_arexx_send_command, 1, 2, 0,
  31202. +"Sends a command to ARexx for execution.\n\
  31203. +If the second arg is non-nil, the command is directly interpreted.\n\
  31204. +Returns an integer that uniquely identifies this message.  This must\n\
  31205. +then be used to get the results from the command.\n\
  31206. +NOTE: this is very different from old way things worked.\n\
  31207. +      earlier versions of emacs discarded successful results\n\
  31208. +      and errors always got replied to becuase they caused failures\n\
  31209. +      Neither of these are true now.\
  31210. +This function is also no longer interactive.\n\
  31211. +Use (amiga-arexx-do-command)\n")
  31212. +    (str, as_file)
  31213. +Lisp_Object str, as_file;
  31214. +{
  31215. +    return(send_rexx_command(str,as_file,
  31216. +                 LRMF_DORESULTS|
  31217. +                 LRMF_DOERRORS|
  31218. +                 LRMF_SENTCMD));
  31219. +}
  31220. +
  31221. +void init_amiga_rexx(void)
  31222. +{
  31223. +    extern ULONG inputsig;
  31224. +    int i;
  31225. +
  31226. +    handle = InitARexx("Emacs", "elx");
  31227. +    inputsig |= ARexxSignal(handle);
  31228. +
  31229. +    /* init exec lists. */
  31230. +    NewList((struct List *)&incoming.lrl_List);
  31231. +    incoming.lrl_Count = 0;
  31232. +
  31233. +    NewList((struct List *)&pending.lrl_List);
  31234. +    pending.lrl_Count = 0;
  31235. +
  31236. +    NewList((struct List *)&returned.lrl_List);
  31237. +    returned.lrl_Count = 0;
  31238. +}
  31239. +
  31240. +void cleanup_amiga_rexx(void)
  31241. +{
  31242. +    /* Delete and reply all rexx messages we have gotten. */
  31243. +    Lisp_Object rm = remove_rexx_msg_from_head(&returned);
  31244. +    while(!NULL(rm)) {
  31245. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  31246. +    DeleteARexxMsg(handle,lrm->lrm_Msg);
  31247. +    free_rexx_msg(rm);
  31248. +    rm = remove_rexx_msg_from_head(&returned);
  31249. +    }
  31250. +
  31251. +    rm = remove_rexx_msg_from_head(&incoming);
  31252. +    while(!NULL(rm)) {
  31253. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  31254. +    ReplyARexxMsg(handle, lrm->lrm_Msg, 0, 20);
  31255. +    free_rexx_msg(rm);
  31256. +    rm = remove_rexx_msg_from_head(&incoming);
  31257. +    }
  31258. +
  31259. +    /* Free the rest of rexx, will wait for pending msgs to return */
  31260. +    FreeARexx(handle);
  31261. +}
  31262. +
  31263. +void syms_of_amiga_rexx(void)
  31264. +{
  31265. +    DEFVAR_BOOL ("amiga-arexx-initialized", &amiga_arexx_initialized,
  31266. +         "Set this to t when Emacs is ready to respond to ARexx messages.\n"
  31267. +         "(ie C-\ X causes all pending ARexx messages to be answered)");
  31268. +    amiga_arexx_initialized = 0;
  31269. +
  31270. +    defsubr(&Samiga_arexx_send_command);
  31271. +    defsubr(&Samiga_arexx_reply);
  31272. +    defsubr(&Samiga_get_next_msg);
  31273. +    defsubr(&Samiga_arexx_get_msg_results);
  31274. +    defsubr(&Samiga_arexx_check_command);
  31275. +    defsubr(&Samiga_arexx_wait);
  31276. +}
  31277. diff -rup --new-file baseline/fsf/emacs18/src/amiga_screen.c amiga/fsf/emacs18/src/amiga_screen.c
  31278. --- baseline/fsf/emacs18/src/amiga_screen.c    Wed Dec 31 17:00:00 1969
  31279. +++ amiga/fsf/emacs18/src/amiga_screen.c    Sat Sep 28 00:00:00 1996
  31280. @@ -0,0 +1,1396 @@
  31281. +#include "config.h"
  31282. +#undef NULL
  31283. +#include "lisp.h"
  31284. +#include "termchar.h"
  31285. +#include "dispextern.h"
  31286. +
  31287. +#include <stdio.h>
  31288. +#include <string.h>
  31289. +#include <stddef.h>
  31290. +#include <internal/devices.h>
  31291. +#include <internal/vars.h>
  31292. +
  31293. +#define min(x,y) ((x) > (y) ? (y) : (x))
  31294. +#define max(x,y) ((x) < (y) ? (y) : (x))
  31295. +
  31296. +#undef LONGBITS
  31297. +
  31298. +#include <exec/types.h>
  31299. +#include <exec/interrupts.h>
  31300. +#include <devices/input.h>
  31301. +#include <devices/inputevent.h>
  31302. +#include <intuition/intuitionbase.h>
  31303. +#include <intuition/intuition.h>
  31304. +#include <devices/conunit.h>
  31305. +#include <devices/inputevent.h>
  31306. +#include <graphics/gfxbase.h>
  31307. +#include <graphics/gfxmacros.h>
  31308. +#include <utility/hooks.h>
  31309. +#include <workbench/startup.h>
  31310. +#include <workbench/workbench.h>
  31311. +
  31312. +#include <proto/exec.h>
  31313. +#include <proto/dos.h>
  31314. +#include <proto/intuition.h>
  31315. +#include <proto/graphics.h>
  31316. +#include <proto/console.h>
  31317. +#include <proto/diskfont.h>
  31318. +#include <proto/wb.h>
  31319. +
  31320. +/* this is defined for those unlucky enough
  31321. + * not to have the 3.0 headers  -ch3/16/93. */
  31322. +#ifndef WA_NewLookMenus
  31323. +#define WA_NewLookMenus (WA_Dummy + 0x30)
  31324. +#endif
  31325. +
  31326. +#include "amiga.h"
  31327. +
  31328. +#define SHIFT_MASK (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)
  31329. +#define CONTROL_MASK IEQUALIFIER_CONTROL
  31330. +#define META_MASK IEQUALIFIER_LALT
  31331. +
  31332. +struct GfxBase *GfxBase;
  31333. +struct IntuitionBase *IntuitionBase;
  31334. +struct Library *DiskfontBase, *KeymapBase, *WorkbenchBase;
  31335. +
  31336. +static char intkey_code, intkey_qualifier;
  31337. +static struct IOStdReq *input_req;
  31338. +static struct Interrupt int_handler_hook;
  31339. +static int hooked;
  31340. +
  31341. +static struct MsgPort *wbport;
  31342. +static struct AppWindow *emacs_app_win;
  31343. +static struct AppIcon *emacs_icon;
  31344. +
  31345. +struct Library *ConsoleDevice;
  31346. +static struct TextFont *font;
  31347. +static int font_opened;
  31348. +/* The reset string resets the console, turns off scrolling and sets up
  31349. +   the foreground & background colors. */
  31350. +#define CONSOLE_RESET "\x1b""c\x9b>1l\x9b""3%d;4%d;>%dm"
  31351. +static char reset_string[20]; /* Must be big enough for
  31352. +              printf(CONSOLE_RESET, foreground, background, background);
  31353. +              (0 <= foreground, background <= 7) */
  31354. +
  31355. +/* These are the pen numbers for emacs window's base colors */
  31356. +int foreground = 1, background = 0;
  31357. +
  31358. +/* Current window, and its main characteristics */
  31359. +struct Window *emacs_win;
  31360. +WORD emacs_x = 0, emacs_y = 0, emacs_w = 640, emacs_h = 200;
  31361. +char *emacs_screen_name;
  31362. +char emacs_screen_name_storage[MAXPUBSCREENNAME+1];
  31363. +int emacs_backdrop = 0;        /* Use backdrop window ? */
  31364. +
  31365. +/* Current window size: */
  31366. +#define EMACS_X() (emacs_win ? emacs_win->LeftEdge : emacs_x)
  31367. +#define EMACS_Y() (emacs_win ? emacs_win->TopEdge : emacs_y)
  31368. +#define EMACS_W() (emacs_win ? emacs_win->Width : emacs_w)
  31369. +#define EMACS_H() (emacs_win ? emacs_win->Height : emacs_h)
  31370. +
  31371. +/* used for setting the color of standout text  -ch3/16/93. */
  31372. +int inverse_fill_pen = 8, inverse_text_pen = 8;
  31373. +
  31374. +/* IO request for all console io. */
  31375. +static struct IOStdReq *emacs_console;
  31376. +
  31377. +/* a storage area for the name of the screen last opened on */
  31378. +
  31379. +#define emacs_icon_width 57
  31380. +#define emacs_icon_height 55
  31381. +#define emacs_icon_num_planes 1
  31382. +#define emacs_icon_words_per_plane 220
  31383. +
  31384. +UWORD chip emacs_icon_data[1][55][4] = {
  31385. +  {
  31386. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  31387. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  31388. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0fe0,0x6000,
  31389. +    0x0000,0x0000,0x0060,0x6000,0x0000,0x0000,0x0fff,0xe000,
  31390. +    0x0000,0x0000,0x1800,0x2000,0x0000,0x0000,0x13ff,0xa000,
  31391. +    0x0000,0x0000,0x1400,0xa000,0x0000,0x0000,0x3600,0xa000,
  31392. +    0x0000,0x0000,0x0000,0xa000,0x0000,0x0000,0x0c00,0xa000,
  31393. +    0x0000,0x0000,0x1e00,0xa000,0x0000,0x0000,0x0c00,0xa000,
  31394. +    0x0000,0x0000,0x0000,0xa000,0x0000,0x0000,0x2100,0xa000,
  31395. +    0x0000,0x0000,0x3300,0xa000,0x0000,0x0000,0x0c00,0xa000,
  31396. +    0x003f,0xffff,0xffff,0xb000,0x001f,0xffff,0xffff,0x8000,
  31397. +    0x004e,0x0000,0x0001,0xf000,0x00c6,0x00f0,0x0001,0x8000,
  31398. +    0x00c6,0x0100,0x0001,0x8000,0x0006,0x0103,0x9201,0x8000,
  31399. +    0x0006,0x013a,0x5201,0x8000,0x00c6,0x010a,0x5201,0x8000,
  31400. +    0x00c6,0x010a,0x5601,0x8000,0x0086,0x00f2,0x4a01,0x8000,
  31401. +    0x0006,0x0000,0x0001,0x8000,0x0046,0x0000,0x0001,0x8000,
  31402. +    0x00c6,0x7c00,0x0001,0x8000,0x00c6,0x4000,0x0001,0x8000,
  31403. +    0x0006,0x41d8,0xc319,0x8000,0x0006,0x7925,0x24a1,0x8000,
  31404. +    0x00c6,0x4125,0x2419,0x8000,0x01c6,0x4125,0x2485,0x8000,
  31405. +    0x0086,0x7d24,0xd319,0x8000,0x0007,0x0000,0x0003,0x8000,
  31406. +    0x0003,0xffe3,0xffff,0x0000,0x0081,0xfff7,0xfffe,0x0000,
  31407. +    0x01c0,0x0036,0x0000,0x0000,0x0180,0x0014,0x0f80,0x0000,
  31408. +    0x0000,0x0014,0x1040,0x0000,0x0000,0x0014,0x2720,0x0000,
  31409. +    0x0000,0x0012,0x28a0,0x0000,0x0080,0x000a,0x48a0,0x0000,
  31410. +    0x01c0,0x0009,0x90a0,0x0000,0x0180,0x0004,0x20a0,0x0000,
  31411. +    0x0000,0x0003,0xc0a0,0x0000,0x0000,0x0000,0x00a0,0x0000,
  31412. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  31413. +    0x0000,0x0000,0x0000,0x0000
  31414. +  },
  31415. +};
  31416. +
  31417. +struct Image far emacs_icon_image = {
  31418. +  0, 0,
  31419. +  emacs_icon_width, emacs_icon_height, emacs_icon_num_planes,
  31420. +  (UWORD *)emacs_icon_data,
  31421. +  3, 0,
  31422. +  0
  31423. +};
  31424. +
  31425. +static struct DiskObject far emacs_icon_object = {
  31426. +  0, 0,
  31427. +  { 0, 0, 0, emacs_icon_width, emacs_icon_height, 0, 0, 0, (APTR)&emacs_icon_image },
  31428. +  0, 0, 0,
  31429. +  NO_ICON_POSITION, NO_ICON_POSITION
  31430. +};
  31431. +
  31432. +static struct Hook background_hook;
  31433. +
  31434. +#define EVENTSIZE 32
  31435. +
  31436. +static struct event {
  31437. +  ULONG class;
  31438. +  UWORD code, qual;
  31439. +  WORD x, y;
  31440. +} events[EVENTSIZE];
  31441. +static int event_num, event_in, event_out;
  31442. +
  31443. +static struct wbevent {
  31444. +  struct wbevent *next;
  31445. +  char file[1];
  31446. +} *wbevents;
  31447. +
  31448. +Lisp_Object Vamiga_mouse_pos;
  31449. +Lisp_Object Vamiga_mouse_item;
  31450. +extern Lisp_Object MouseMap;
  31451. +int amiga_remap_bsdel;
  31452. +int amiga_remap_numeric_keypad;
  31453. +int amiga_mouse_initialized;
  31454. +int amiga_wb_initialized;
  31455. +int emacs_iconified;
  31456. +
  31457. +static int amiga_pos_x(int x)
  31458. +{
  31459. +  return (x - emacs_win->BorderLeft) / emacs_win->RPort->Font->tf_XSize;
  31460. +}
  31461. +
  31462. +static int amiga_pos_y(int y)
  31463. +{
  31464. +  return (y - emacs_win->BorderTop) / emacs_win->RPort->Font->tf_YSize;
  31465. +}
  31466. +
  31467. +static void amiga_change_size(void)
  31468. +{
  31469. +  int new_height = amiga_pos_y(emacs_win->Height - emacs_win->BorderBottom);
  31470. +  int new_width = amiga_pos_x(emacs_win->Width - emacs_win->BorderRight);
  31471. +
  31472. +  /* Hack to force redisplay */
  31473. +  if (screen_height == new_height) screen_height--;
  31474. +  /* I consider that refreshes are possible during a select, which is
  31475. +     true for the current state of emacs */
  31476. +  change_screen_size(new_height, new_width, 0, !selecting && !waiting_for_input, 1);
  31477. +}
  31478. +
  31479. +/* Get terminal size from system.
  31480. +   Store number of lines into *heightp and width into *widthp.
  31481. +   If zero or a negative number is stored, the value is not valid.  */
  31482. +
  31483. +void get_window_size (widthp, heightp)
  31484. +     int *widthp, *heightp;
  31485. +{
  31486. +  if (emacs_win)
  31487. +    {
  31488. +      *heightp = amiga_pos_y(emacs_win->Height - emacs_win->BorderBottom);
  31489. +      *widthp = amiga_pos_x(emacs_win->Width - emacs_win->BorderRight);
  31490. +    }
  31491. +  else
  31492. +    {
  31493. +      *heightp = 0;
  31494. +      *widthp = 0;
  31495. +    }
  31496. +}
  31497. +
  31498. +static int set_min_size(struct Window *win, struct TextFont *font,
  31499. +            WORD *minw, WORD *minh)
  31500. +{
  31501. +  *minw = 11 * font->tf_XSize + win->BorderLeft + win->BorderRight;
  31502. +  *minh = 4 * font->tf_YSize + win->BorderTop + win->BorderBottom;
  31503. +
  31504. +  return (int)WindowLimits(win, *minw, *minh, 0, 0);
  31505. +}
  31506. +
  31507. +struct fill
  31508. +{
  31509. +  struct Layer *layer;
  31510. +  struct Rectangle bounds;
  31511. +  WORD offsetx, offsety;
  31512. +};
  31513. +
  31514. +/* __interrupt disables stack checking.   -ch3/19/93. */
  31515. +static ULONG __asm __saveds __interrupt
  31516. +fill_background(register __a2 struct RastPort *obj,
  31517. +        register __a1 struct fill *msg)
  31518. +{
  31519. +  struct Layer *l;
  31520. +
  31521. +  SetAPen(obj, background);
  31522. +  SetDrMd(obj, JAM1);
  31523. +  SetAfPt(obj, 0, 0);
  31524. +  SetWrMsk(obj, 0xff);
  31525. +  /* Gross hack starts here */
  31526. +  l = obj->Layer;
  31527. +  obj->Layer = 0;
  31528. +  /* Stops */
  31529. +  RectFill(obj, msg->bounds.MinX, msg->bounds.MinY,
  31530. +       msg->bounds.MaxX, msg->bounds.MaxY);
  31531. +  /* Starts again */
  31532. +  obj->Layer = l;
  31533. +  /* And finally dies */
  31534. +
  31535. +  return 0;
  31536. +}
  31537. +
  31538. +static void clear_window(void)
  31539. +{
  31540. +  SetAPen(emacs_win->RPort, background);
  31541. +  RectFill(emacs_win->RPort, emacs_win->BorderLeft, emacs_win->BorderTop,
  31542. +       emacs_win->Width - emacs_win->BorderRight - 1,
  31543. +       emacs_win->Height - emacs_win->BorderBottom - 1);
  31544. +}
  31545. +
  31546. +static int make_reset_string(void)
  31547. +{
  31548. +  sprintf(reset_string, CONSOLE_RESET, foreground, background, background);
  31549. +}
  31550. +
  31551. +void reset_window(void)
  31552. +{
  31553. +  make_reset_string();
  31554. +  if (emacs_win)
  31555. +    {
  31556. +      screen_puts (reset_string, strlen(reset_string));
  31557. +      clear_window();
  31558. +      amiga_change_size ();
  31559. +    }
  31560. +}
  31561. +
  31562. +static void close_app_win(void)
  31563. +{
  31564. +  if (emacs_app_win)
  31565. +    {
  31566. +      struct AppMessage *msg;
  31567. +
  31568. +      RemoveAppWindow(emacs_app_win); /* What can I do if it fails ?! */
  31569. +      while (msg = (struct AppMessage *)GetMsg(wbport)) ReplyMsg(msg);
  31570. +    }
  31571. +}
  31572. +
  31573. +static int close_emacs_window(void)
  31574. +{
  31575. +  close_app_win();
  31576. +  inputsig &= ~(1L << emacs_win->UserPort->mp_SigBit);
  31577. +  _device_close(emacs_console);
  31578. +  if(emacs_win)
  31579. +    {
  31580. +      /* put title back the way it should be   -ch3/19/93. */
  31581. +      ShowTitle(emacs_win->WScreen, !emacs_backdrop);
  31582. +    }
  31583. +  CloseWindow(emacs_win);
  31584. +  emacs_console = 0;
  31585. +  emacs_win = 0;
  31586. +  ConsoleDevice = 0;
  31587. +}
  31588. +
  31589. +/* We need this function becuase we do not always have the string
  31590. + * for the screen we opened on. for example LockPubScreen(NULL);
  31591. + * This function will get the name by looping through all public
  31592. + * screens looking for the one that matches ours. -ch3/20/93 */
  31593. +
  31594. +char *get_screen_name(struct Screen *this, char *namebuf)
  31595. +{
  31596. +  struct PubScreenNode *pubscreens =
  31597. +    (struct PubScreenNode *)LockPubScreenList()->lh_Head;
  31598. +
  31599. +  while (pubscreens->psn_Node.ln_Succ)
  31600. +    {
  31601. +      if (pubscreens->psn_Screen == this)
  31602. +    {
  31603. +      strcpy(namebuf, pubscreens->psn_Node.ln_Name);
  31604. +      UnlockPubScreenList();
  31605. +      return namebuf;
  31606. +    }
  31607. +      pubscreens = (struct PubScreenNode *)pubscreens->psn_Node.ln_Succ;
  31608. +    }
  31609. +  /* Failed to find screen */
  31610. +  namebuf[0] = '\0';
  31611. +  UnlockPubScreenList();
  31612. +
  31613. +  return 0;
  31614. +}
  31615. +
  31616. +/* added two parameters to eliminate the need for the global
  31617. + * which was causing some unwanted effect (bugs). -ch3/19/93 */
  31618. +
  31619. +static enum { ok, no_screen, no_window }
  31620. +open_emacs_window(UWORD x, UWORD y, UWORD w, UWORD h, int backdrop,
  31621. +          char *pubscreen_name)
  31622. +     /* Open or reopen emacs window */
  31623. +{
  31624. +  WORD minw, minh;
  31625. +  struct Screen *new_screen;
  31626. +  struct Window *new_win;
  31627. +  struct IOStdReq *new_console;
  31628. +  int no_backdrop = !backdrop;
  31629. +
  31630. +  new_screen = LockPubScreen(pubscreen_name);
  31631. +
  31632. +  if (!new_screen)
  31633. +    return no_screen;
  31634. +
  31635. +  /* removed newwindow structure, and added as tag
  31636. +   * items so that we can change them easier. -ch3/16/93. */
  31637. +
  31638. +  new_win = OpenWindowTags(0, WA_Left, x, WA_Top, y,
  31639. +                  WA_Width, w, WA_Height, h,    /* Static items */
  31640. +                  WA_AutoAdjust, 1, WA_NewLookMenus, 1,
  31641. +                  WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_RAWKEY |
  31642. +                            IDCMP_MOUSEBUTTONS| IDCMP_NEWSIZE |
  31643. +                            IDCMP_MENUPICK | IDCMP_MENUHELP,
  31644. +                  WA_PubScreen, new_screen,
  31645. +                  WA_BackFill, &background_hook,
  31646. +                  WA_MenuHelp, 1, WA_Activate, 1,
  31647. +                  WA_SimpleRefresh, 1,
  31648. +                  WA_MaxWidth, -1, WA_MaxHeight, -1,
  31649. +                  WA_Backdrop, backdrop,    /* changing items */
  31650. +                  WA_Borderless, backdrop,
  31651. +                  WA_CloseGadget, no_backdrop,
  31652. +                  WA_SizeGadget, no_backdrop,
  31653. +                  WA_DragBar, no_backdrop,
  31654. +                  WA_DepthGadget, no_backdrop,
  31655. +                  WA_Title, no_backdrop ?
  31656. +                   "GNU Emacs 18.59, Amiga port "VERS : 0,
  31657. +                              TAG_END);
  31658. +
  31659. +  UnlockPubScreen(0L, new_screen);
  31660. +
  31661. +  if (new_win)
  31662. +    {
  31663. +      /* if emacs_backdrop then the screen title will show BEHIND the window
  31664. +     -ch3/16/93. */
  31665. +      ShowTitle(new_screen, !emacs_backdrop);
  31666. +      SetFont(new_win->RPort, font);
  31667. +
  31668. +      if (set_min_size(new_win, font, &minw, &minh) &&
  31669. +      (new_console = (struct IOStdReq *)
  31670. +       _device_open("console.device", CONU_CHARMAP, CONFLAG_NODRAW_ON_NEWSIZE,
  31671. +            (APTR)new_win, sizeof(*new_win),
  31672. +            sizeof(struct IOStdReq))))
  31673. +    {
  31674. +      inputsig |= 1L << new_win->UserPort->mp_SigBit;
  31675. +      ConsoleDevice = (struct Library *)new_console->io_Device;
  31676. +      emacs_app_win = AddAppWindowA(0, 0, new_win, wbport, 0);
  31677. +
  31678. +      /* Copy the info into permanent storage */
  31679. +      emacs_win = new_win;
  31680. +      emacs_console = new_console;
  31681. +
  31682. +      /* fetch the name of the current screen -ch3/19/93 */
  31683. +      emacs_screen_name = get_screen_name(emacs_win->WScreen,
  31684. +                          emacs_screen_name_storage);
  31685. +
  31686. +      emacs_backdrop = backdrop;
  31687. +
  31688. +      reset_window();
  31689. +
  31690. +      return ok;
  31691. +    }
  31692. +      CloseWindow(new_win);
  31693. +    }
  31694. +  return no_window;
  31695. +}
  31696. +
  31697. +void force_window(void)
  31698. +{
  31699. +  if (!emacs_win && !emacs_iconified)
  31700. +    {
  31701. +      if (open_emacs_window(emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
  31702. +                emacs_screen_name) != ok)
  31703. +    {
  31704. +      /* Try to return to defaults (Workbench, etc) */
  31705. +      if (open_emacs_window(0, 0, 640, 200, 0, 0) != ok)
  31706. +          _fail("I've lost my window ! Exiting.");
  31707. +    }
  31708. +      resume_menus();
  31709. +    }
  31710. +}
  31711. +
  31712. +/* returns:
  31713. + *    -2 if msg is not class RAWKEY
  31714. + *    same as RawKeyConvert otherwise:
  31715. + *    buffer length if <= kbsize
  31716. + *    -1 else
  31717. + */
  31718. +static DeadKeyConvert(struct IntuiMessage *msg, UBYTE *kbuffer, int kbsize,
  31719. +              struct KeyMap *kmap)
  31720. +{
  31721. +  static struct InputEvent ievent = {0, IECLASS_RAWKEY, 0, 0, 0};
  31722. +  int extra = 0, res;
  31723. +
  31724. +  if (msg->Class != RAWKEY) return (-2);
  31725. +
  31726. +  /* Do some keymapping ourselves to make emacs users happy */
  31727. +
  31728. +  /* Ctrl-space becomes Ctrl-@ */
  31729. +  if (msg->Code == 0x40 && msg->Qualifier & CONTROL_MASK)
  31730. +    {
  31731. +      *kbuffer = 0;
  31732. +      return 1;
  31733. +    }
  31734. +  /* Backspace becomes DEL */
  31735. +  if (msg->Code == 0x41 && amiga_remap_bsdel)
  31736. +    {
  31737. +      *kbuffer = 0177;
  31738. +      return 1;
  31739. +    }
  31740. +  /* And DEL becomes CTRL-D */
  31741. +  if (msg->Code == 0x46 && amiga_remap_bsdel)
  31742. +    {
  31743. +      *kbuffer = 04;
  31744. +      return 1;
  31745. +    }
  31746. +  /* Stick numeric pad prefix in front of numeric keypad chars */
  31747. +  if (msg->Qualifier & IEQUALIFIER_NUMERICPAD && amiga_remap_numeric_keypad)
  31748. +    {
  31749. +      *kbuffer++ = 'x' & 037;
  31750. +      *kbuffer++ = '^' & 037;
  31751. +      *kbuffer++ = 'K';
  31752. +      kbsize -= 3;
  31753. +      extra = 3;
  31754. +    }
  31755. +
  31756. +  /* pack input event */
  31757. +  ievent.ie_Code = msg->Code;
  31758. +
  31759. +  /* Ignore meta in decoding keys */
  31760. +  ievent.ie_Qualifier = msg->Qualifier & ~META_MASK;
  31761. +
  31762. +  /* get previous codes from location pointed to by IAddress
  31763. +   *  this pointer is valid until IntuiMessage is replied.
  31764. +   */
  31765. +  ievent.ie_position.ie_addr = *((APTR *)msg->IAddress);
  31766. +  ievent.ie_position.ie_dead.ie_prev1DownQual &= ~META_MASK;
  31767. +  ievent.ie_position.ie_dead.ie_prev2DownQual &= ~META_MASK;
  31768. +
  31769. +  res = RawKeyConvert(&ievent, kbuffer, kbsize, kmap);
  31770. +  return res ? res + extra : 0;
  31771. +}
  31772. +
  31773. +void add_wbevent(struct WBArg *wbarg)
  31774. +{
  31775. +  char filename[256];
  31776. +
  31777. +  if (wbarg->wa_Lock && NameFromLock(wbarg->wa_Lock, filename, 256))
  31778. +    {
  31779. +      struct wbevent *event;
  31780. +
  31781. +      if (wbarg->wa_Name) AddPart(filename, wbarg->wa_Name, 256);
  31782. +      if (event = (struct wbevent *)malloc(offsetof(struct wbevent, file) +
  31783. +                       strlen(filename) + 1))
  31784. +    {
  31785. +      event->next = wbevents;
  31786. +      strcpy(event->file, filename);
  31787. +      wbevents = event;
  31788. +    }
  31789. +    }
  31790. +}
  31791. +
  31792. +void check_window(int force)
  31793. +{
  31794. +  ULONG class;
  31795. +  USHORT code, qualifier;
  31796. +  UWORD mx, my;
  31797. +  unsigned char buf[32];
  31798. +  int buflen, deiconify, i;
  31799. +  struct IntuiMessage *msg;
  31800. +  int mouse_event = FALSE, wb_event = FALSE;
  31801. +  struct AppMessage *amsg;
  31802. +
  31803. +  force_window();
  31804. +
  31805. +  if (emacs_win)
  31806. +    while (msg = (struct IntuiMessage *)GetMsg(emacs_win->UserPort))
  31807. +      {
  31808. +    class = msg->Class;
  31809. +    code = msg->Code;
  31810. +    qualifier = msg->Qualifier;
  31811. +    mx = msg->MouseX; my = msg->MouseY;
  31812. +    buflen = DeadKeyConvert(msg, buf, 32, 0);
  31813. +    ReplyMsg(msg);
  31814. +
  31815. +    switch (class)
  31816. +      {
  31817. +      case IDCMP_CLOSEWINDOW: {
  31818. +        enque(030, FALSE); enque(03, FALSE); /* ^X^C */
  31819. +        break;
  31820. +      }
  31821. +      case IDCMP_RAWKEY: {
  31822. +        if (buflen > 0)
  31823. +          {
  31824. +        unsigned char *sbuf = buf;
  31825. +        int meta = qualifier & META_MASK;
  31826. +
  31827. +        /* Don't set META on CSI */
  31828. +        do enque(*sbuf++, meta); while (--buflen);
  31829. +          }
  31830. +        break;
  31831. +      }
  31832. +      case IDCMP_NEWSIZE: amiga_change_size(); break;
  31833. +      case IDCMP_MENUPICK: case IDCMP_MENUHELP:
  31834. +        if (code == MENUNULL) break; /* else fall through */
  31835. +      case IDCMP_MOUSEBUTTONS: {
  31836. +        mouse_event = TRUE;
  31837. +        if (event_num == EVENTSIZE) break;
  31838. +
  31839. +        events[event_in].class = class;
  31840. +        events[event_in].code = code;
  31841. +        events[event_in].qual = qualifier;
  31842. +        events[event_in].x = mx;
  31843. +        events[event_in].y = my;
  31844. +        event_num++;
  31845. +        event_in = (event_in + 1) % EVENTSIZE;
  31846. +
  31847. +        break;
  31848. +      }
  31849. +      }
  31850. +      }
  31851. +  /* Handle App requests */
  31852. +  while (amsg = (struct AppMessage *)GetMsg(wbport))
  31853. +      switch (amsg->am_Type)
  31854. +    {
  31855. +    case MTYPE_APPICON: case MTYPE_APPWINDOW:
  31856. +      /* Add an event for all these files */
  31857. +      for (i = 0; i < amsg->am_NumArgs; i++) add_wbevent(amsg->am_ArgList + i);
  31858. +      wb_event = TRUE;
  31859. +      /* Reply to the message, and deiconify if was icon */
  31860. +      deiconify = amsg->am_Type == MTYPE_APPICON;
  31861. +      ReplyMsg(amsg);
  31862. +      if (deiconify && emacs_icon)
  31863. +        /* Reopen window */
  31864. +        if (open_emacs_window(emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
  31865. +                  emacs_screen_name) == ok)
  31866. +          {
  31867. +        resume_menus();
  31868. +        RemoveAppIcon(emacs_icon);
  31869. +        emacs_icon = 0;
  31870. +        emacs_iconified = 0;
  31871. +          }
  31872. +      break;
  31873. +    default: ReplyMsg(amsg); break;
  31874. +    }
  31875. +
  31876. +  if (amiga_mouse_initialized && (force && event_num > 0 || mouse_event))
  31877. +    {
  31878. +      enque(AMIGASEQ, FALSE); enque('M', FALSE);
  31879. +    }
  31880. +  if (amiga_wb_initialized && (force && wbevents || wb_event))
  31881. +    {
  31882. +      enque(AMIGASEQ, FALSE); enque('W', FALSE);
  31883. +    }
  31884. +}
  31885. +
  31886. +void setup_intchar(char intchar)
  31887. +{
  31888. +  char cqbuf[2];
  31889. +
  31890. +  if (MapANSI(&intchar, 1, cqbuf, 1, 0) == 1)
  31891. +    {
  31892. +      intkey_code = cqbuf[0];
  31893. +      intkey_qualifier = cqbuf[1];
  31894. +    }
  31895. +  else
  31896. +    {
  31897. +      /* Default is CTRL-G in usa0 keymap */
  31898. +      intkey_code = 0x24;
  31899. +      intkey_qualifier = IEQUALIFIER_CONTROL;
  31900. +    }
  31901. +}
  31902. +
  31903. +/* Hack to detect interrupt char as soon as it is pressed */
  31904. +/* __interrupt disables stack checking.  -ch3/19/93.*/
  31905. +static long __saveds __interrupt __asm
  31906. +int_handler(register __a0 struct InputEvent *ev)
  31907. +{
  31908. +  struct InputEvent *ep, *laste;
  31909. +  static struct InputEvent retkey;
  31910. +  ULONG lock = LockIBase(0);
  31911. +
  31912. +  if (emacs_win && IntuitionBase->ActiveWindow == emacs_win)
  31913. +    {
  31914. +      laste = 0;
  31915. +
  31916. +      /* run down the list of events to see if they pressed the magic key */
  31917. +      for (ep = ev; ep; laste = ep, ep = ep->ie_NextEvent)
  31918. +    if (ep->ie_Class == IECLASS_RAWKEY &&
  31919. +        (ep->ie_Qualifier & 0xff) == intkey_qualifier &&
  31920. +        ep->ie_Code == intkey_code)
  31921. +      {
  31922. +        /* Remove this key from input sequence */
  31923. +        if (laste) laste->ie_NextEvent = ep->ie_NextEvent;
  31924. +        else ev = ep->ie_NextEvent;
  31925. +
  31926. +        Vquit_flag = Qt;
  31927. +        Signal(_us, SIGBREAKF_CTRL_C);
  31928. +      }
  31929. +    }
  31930. +  UnlockIBase(lock);
  31931. +
  31932. +  /* pass on the pointer to the event */
  31933. +  return (long)ev;
  31934. +}
  31935. +
  31936. +DEFUN ("amiga-mouse-events", Famiga_mouse_events, Samiga_mouse_events, 0, 0, 0,
  31937. +       "Return number of pending mouse events from Intuition.")
  31938. +     ()
  31939. +{
  31940. +  register Lisp_Object tem;
  31941. +
  31942. +  check_intuition ();
  31943. +
  31944. +  XSET (tem, Lisp_Int, event_num);
  31945. +
  31946. +  return tem;
  31947. +}
  31948. +
  31949. +DEFUN ("amiga-proc-mouse-event", Famiga_proc_mouse_event, Samiga_proc_mouse_event,
  31950. +       0, 0, 0,
  31951. +       "Pulls a mouse event out of the mouse event buffer and dispatches\n\
  31952. +the appropriate function to act upon this event.")
  31953. +()
  31954. +{
  31955. +  register Lisp_Object mouse_cmd;
  31956. +  register char com_letter;
  31957. +  register char key_mask;
  31958. +  register Lisp_Object tempx;
  31959. +  register Lisp_Object tempy;
  31960. +  extern Lisp_Object get_keyelt ();
  31961. +  extern int meta_prefix_char;
  31962. +  struct event *ev;
  31963. +  int posx, posy;
  31964. +
  31965. +  check_intuition ();
  31966. +
  31967. +  if (event_num) {
  31968. +    ev = &events[event_out];
  31969. +    event_out = (event_out + 1) % EVENTSIZE;
  31970. +    event_num--;
  31971. +    if (ev->class == MOUSEBUTTONS)
  31972. +      {
  31973. +    switch (ev->code)
  31974. +      {
  31975. +      case SELECTDOWN: com_letter = 2; break;
  31976. +      case SELECTUP: com_letter = 6; break;
  31977. +      case MIDDLEDOWN: com_letter = 1; break;
  31978. +      case MIDDLEUP: com_letter = 5; break;
  31979. +      case MENUDOWN: com_letter = 0; break;
  31980. +      case MENUUP: com_letter = 4; break;
  31981. +      default: com_letter = 3; break;
  31982. +      }
  31983. +    posx = amiga_pos_x(ev->x);
  31984. +    posy = amiga_pos_y(ev->y);
  31985. +    XSET (tempx, Lisp_Int, min (screen_width-1, max (0, posx)));
  31986. +    XSET (tempy, Lisp_Int, min (screen_height-1, max (0, posy)));
  31987. +      }
  31988. +    else
  31989. +      {
  31990. +    /* Must be Menu Pick or Help */
  31991. +    com_letter = ev->class == IDCMP_MENUPICK ? 3 : 7;
  31992. +
  31993. +    /* The parameters passed describe the selected item */
  31994. +    XSET (tempx, Lisp_Int, MENUNUM(ev->code));
  31995. +    XSET (tempy, Lisp_Int, ITEMNUM(ev->code));
  31996. +      }
  31997. +    if (ev->qual & META_MASK) com_letter |= 0x20;
  31998. +    if (ev->qual & SHIFT_MASK) com_letter |= 0x10;
  31999. +    if (ev->qual & CONTROL_MASK) com_letter |= 0x40;
  32000. +
  32001. +    Vamiga_mouse_pos = Fcons (tempx, Fcons (tempy, Qnil));
  32002. +    Vamiga_mouse_item = make_number (com_letter);
  32003. +    mouse_cmd = get_keyelt (access_keymap (MouseMap, com_letter));
  32004. +    if (NULL (mouse_cmd)) {
  32005. +      bell ();
  32006. +      Vamiga_mouse_pos = Qnil;
  32007. +    }
  32008. +    else return call1 (mouse_cmd, Vamiga_mouse_pos);
  32009. +  }
  32010. +  return Qnil;
  32011. +}
  32012. +
  32013. +DEFUN ("amiga-get-mouse-event", Famiga_get_mouse_event, Samiga_get_mouse_event,
  32014. +       1, 1, 0,
  32015. +       "Get next mouse event out of mouse event buffer (com-letter (x y)).\n\
  32016. +ARG non-nil means return nil immediately if no pending event;\n\
  32017. +otherwise, wait for an event.")
  32018. +(arg)
  32019. +Lisp_Object arg;
  32020. +{
  32021. +  register char com_letter;
  32022. +  register char key_mask;
  32023. +
  32024. +  register Lisp_Object tempx;
  32025. +  register Lisp_Object tempy;
  32026. +  struct event *ev;
  32027. +  int posx, posy;
  32028. +
  32029. +  check_intuition ();
  32030. +
  32031. +  if (NULL (arg))
  32032. +    {
  32033. +      amiga_consume_input();
  32034. +      while (!event_num)
  32035. +    {
  32036. +      int rfds = 1;
  32037. +
  32038. +      select(1, &rfds, 0, 0, 0);
  32039. +      amiga_consume_input();
  32040. +    }
  32041. +    }
  32042. +  /*** ??? Surely you don't mean to busy wait??? */
  32043. +
  32044. +  if (event_num) {
  32045. +    ev = &events[event_out];
  32046. +    event_out = (event_out + 1) % EVENTSIZE;
  32047. +    event_num--;
  32048. +    switch (ev->code)
  32049. +      {
  32050. +      case SELECTDOWN: com_letter = 2; break;
  32051. +      case SELECTUP: com_letter = 6; break;
  32052. +      case MIDDLEDOWN: com_letter = 1; break;
  32053. +      case MIDDLEUP: com_letter = 5; break;
  32054. +      case MENUDOWN: com_letter = 0; break;
  32055. +      case MENUUP: com_letter = 4; break;
  32056. +      default: com_letter = 3; break;
  32057. +      }
  32058. +    if (ev->qual & META_MASK) com_letter |= 0x20;
  32059. +    if (ev->qual & SHIFT_MASK) com_letter |= 0x10;
  32060. +    if (ev->qual & CONTROL_MASK) com_letter |= 0x40;
  32061. +
  32062. +    posx = amiga_pos_x(ev->x);
  32063. +    posy = amiga_pos_y(ev->y);
  32064. +    XSET (tempx, Lisp_Int, min (screen_width-1, max (0, posx)));
  32065. +    XSET (tempy, Lisp_Int, min (screen_height-1, max (0, posy)));
  32066. +
  32067. +    Vamiga_mouse_pos = Fcons (tempx, Fcons (tempy, Qnil));
  32068. +    Vamiga_mouse_item = make_number (com_letter);
  32069. +    return Fcons (com_letter, Fcons (Vamiga_mouse_pos, Qnil));
  32070. +  }
  32071. +  return Qnil;
  32072. +}
  32073. +
  32074. +DEFUN ("amiga-get-wb-event", Famiga_get_wb_event, Samiga_get_wb_event,
  32075. +       1, 1, 0,
  32076. +       "Get next Workbench event out of workbench event buffer (a file name).\n\
  32077. +ARG non-nil means return nil immediately if no pending event;\n\
  32078. +otherwise, wait for an event.")
  32079. +(arg)
  32080. +Lisp_Object arg;
  32081. +{
  32082. +  Lisp_Object file;
  32083. +  struct wbevent *ev;
  32084. +
  32085. +  check_intuition ();
  32086. +
  32087. +  if (NULL (arg))
  32088. +    {
  32089. +      amiga_consume_input();
  32090. +      while (!wbevents)
  32091. +    {
  32092. +      int rfds = 1;
  32093. +
  32094. +      select(1, &rfds, 0, 0, 0);
  32095. +      amiga_consume_input();
  32096. +    }
  32097. +    }
  32098. +  /*** ??? Surely you don't mean to busy wait??? */
  32099. +
  32100. +  if (wbevents) {
  32101. +    file = build_string(wbevents->file);
  32102. +    ev = wbevents;
  32103. +    wbevents = wbevents->next;
  32104. +    free(ev);
  32105. +    return file;
  32106. +  }
  32107. +  return Qnil;
  32108. +}
  32109. +
  32110. +DEFUN("amiga-set-foreground-color", Famiga_set_foreground_color,
  32111. +      Samiga_set_foreground_color, 1, 1, "nPen number: ",
  32112. +      "Use PEN as foreground color")
  32113. +     (pen)
  32114. +{
  32115. +  int fg;
  32116. +
  32117. +  check_intuition();
  32118. +  CHECK_NUMBER(pen, 0);
  32119. +
  32120. +  fg = XUINT (pen);
  32121. +  if (pen > 7) error("Pen colors must be between 0 & 7");
  32122. +  foreground = fg;
  32123. +  reset_window();
  32124. +  return Qnil;
  32125. +}
  32126. +
  32127. +DEFUN("amiga-set-background-color", Famiga_set_background_color,
  32128. +      Samiga_set_background_color, 1, 1, "nPen number: ",
  32129. +      "Use PEN as background color")
  32130. +     (pen)
  32131. +{
  32132. +  int bg;
  32133. +
  32134. +  check_intuition();
  32135. +  CHECK_NUMBER(pen, 0);
  32136. +
  32137. +  bg = XUINT (pen);
  32138. +  if (pen > 7) error("Pen colors must be between 0 & 7");
  32139. +  background = bg;
  32140. +  reset_window();
  32141. +  return Qnil;
  32142. +}
  32143. +
  32144. +DEFUN("amiga-set-inverse-fill-pen", Famiga_set_inverse_fill_pen,
  32145. +      Samiga_set_inverse_fill_pen, 1, 1, "nPen number: ",
  32146. +      "Use PEN's color for inverse fills (0-7 or 8 for reverse)")
  32147. +     (pen)
  32148. +{
  32149. +  int ifp = 8;
  32150. +
  32151. +  check_intuition();
  32152. +  CHECK_NUMBER(pen, 0);
  32153. +
  32154. +  ifp = XUINT (pen);
  32155. +  if (pen > 8)
  32156. +    error("choices are from 0 to 8");
  32157. +  inverse_fill_pen = ifp;
  32158. +  reset_window();
  32159. +  return Qnil;
  32160. +}
  32161. +
  32162. +DEFUN("amiga-set-inverse-text-pen", Famiga_set_inverse_text_pen,
  32163. +      Samiga_set_inverse_text_pen, 1, 1, "nPen number: ",
  32164. +      "Use PEN's color for inverse fills (0-7 or 8 for reverse)")
  32165. +     (pen)
  32166. +{
  32167. +  int itp = 8;
  32168. +
  32169. +  check_intuition();
  32170. +  CHECK_NUMBER(pen, 0);
  32171. +
  32172. +  itp = XUINT (pen);
  32173. +  if (pen > 8)
  32174. +    error("choices are from 0 to 8");
  32175. +  inverse_text_pen = itp;
  32176. +  reset_window();
  32177. +  return Qnil;
  32178. +}
  32179. +
  32180. +DEFUN("amiga-set-font", Famiga_set_font, Samiga_set_font, 2, 2,
  32181. +      "sFont: \n\
  32182. +nSize: ",
  32183. +      "Set font used for window to FONT with given HEIGHT.\n\
  32184. +The font used must be non-proportional.")
  32185. +(wfont, height)
  32186. +{
  32187. +  struct TextAttr attr;
  32188. +  struct TextFont *newfont;
  32189. +  char *fname;
  32190. +  struct Lisp_String *fstr;
  32191. +  WORD minw, minh, oldmw, oldmh;
  32192. +
  32193. +  CHECK_STRING (wfont, 0);
  32194. +  CHECK_NUMBER (height, 0);
  32195. +
  32196. +  check_intuition();
  32197. +
  32198. +  fstr = XSTRING (wfont);
  32199. +  fname = (char *)alloca (fstr->size + 6);
  32200. +  strcpy (fname, fstr->data);
  32201. +  strcat (fname, ".font");
  32202. +  attr.ta_Name = fname;
  32203. +  attr.ta_YSize = XFASTINT (height);
  32204. +  attr.ta_Style = 0;
  32205. +  attr.ta_Flags = 0;
  32206. +  newfont = OpenDiskFont (&attr);
  32207. +
  32208. +  if (!newfont)
  32209. +    error ("Font %s %d not found", fstr->data, XFASTINT (height));
  32210. +  if (newfont->tf_Flags & FPF_PROPORTIONAL)
  32211. +    {
  32212. +      CloseFont(newfont);
  32213. +      error ("Font %s %d is proportional", fstr->data, XFASTINT (height));
  32214. +    }
  32215. +
  32216. +  if (emacs_win)
  32217. +    {
  32218. +      if (!set_min_size(emacs_win, newfont, &minw, &minh))
  32219. +    {
  32220. +      CloseFont(newfont);
  32221. +      if (!set_min_size(emacs_win, font, &oldmw, &oldmh))
  32222. +        _fail("Failed to restore old font, exiting.");
  32223. +      error("Window is too small for this font, need at least %d(w) by %d(h)",
  32224. +        minw, minh);
  32225. +    }
  32226. +      SetFont(emacs_win->RPort, newfont);
  32227. +    }
  32228. +  if (font_opened) CloseFont(font);
  32229. +  font_opened = TRUE;
  32230. +  font = newfont;
  32231. +  reset_window();
  32232. +  return Qnil;
  32233. +}
  32234. +
  32235. +DEFUN("amiga-set-geometry", Famiga_set_geometry, Samiga_set_geometry, 4, MANY, 0,
  32236. +      "Set Emacs window geometry and screen.\n\
  32237. +First 4 parameters are the (X,Y) position of the top-left corner of the window\n\
  32238. +and its WIDTH and HEIGHT. These must be big enough for an 11x4 characters window.\n\
  32239. +If nil is given for any of these, that means to keep the same value as before.\n\
  32240. +The optional argument SCREEN specifies which screen to use, nil stands for the\n\
  32241. +same screen as the window is on, t stands for the default public screen (normally\n\
  32242. +the Workbench), a string specifies a given public screen.\n\
  32243. +If optional argument BACKDROP is t, a backdrop window is used.")
  32244. +  (nargs, args)
  32245. +    int nargs;
  32246. +    Lisp_Object *args;
  32247. +{
  32248. +  Lisp_Object x, y, w, h, scr = Qnil, backdrop = Qnil;
  32249. +  int opened;
  32250. +  WORD tempx, tempy, tempw, temph;
  32251. +  char *screen_name;
  32252. +  int use_backdrop;
  32253. +
  32254. +  if (nargs > 6) error("Too many arguments to amiga-set-geometry");
  32255. +  x = args[0]; y = args[1]; w = args[2]; h = args[3];
  32256. +  if (nargs > 4)
  32257. +    {
  32258. +      scr = args[4];
  32259. +      if (nargs > 5) backdrop = args[5];
  32260. +    }
  32261. +
  32262. +  check_intuition();
  32263. +
  32264. +  if (!NULL (x))
  32265. +    {
  32266. +      CHECK_NUMBER(x, 0);
  32267. +      tempx = XUINT(x);
  32268. +    }
  32269. +  else tempx = EMACS_X();
  32270. +  if (!NULL (y))
  32271. +    {
  32272. +      CHECK_NUMBER(y, 0);
  32273. +      tempy = XUINT(y);
  32274. +    }
  32275. +  else tempy = EMACS_Y();
  32276. +  if (!NULL (w))
  32277. +    {
  32278. +      CHECK_NUMBER(w, 0);
  32279. +      tempw = XUINT(w);
  32280. +    }
  32281. +  else tempw = EMACS_W();
  32282. +  if (!NULL (h))
  32283. +    {
  32284. +      CHECK_NUMBER(h, 0);
  32285. +      temph = XUINT(h);
  32286. +    }
  32287. +  else temph = EMACS_H();
  32288. +
  32289. +  use_backdrop = !NULL(backdrop);
  32290. +
  32291. +  if (scr == Qt) screen_name = 0; /* set to zero for def. */
  32292. +  else if (!NULL (scr))
  32293. +    {
  32294. +      CHECK_STRING (scr, 0);
  32295. +      screen_name = XSTRING (scr)->data;
  32296. +    }
  32297. +  else screen_name = emacs_screen_name;
  32298. +
  32299. +  if (emacs_win)
  32300. +    {
  32301. +      struct Window *old_win = emacs_win;
  32302. +      struct IOStdReq *old_console = emacs_console;
  32303. +
  32304. +      suspend_menus();
  32305. +      opened = open_emacs_window(tempx, tempy, tempw, temph, use_backdrop,
  32306. +                 screen_name);
  32307. +      if (opened != ok)
  32308. +    {
  32309. +      resume_menus();
  32310. +
  32311. +      if (opened == no_window) error("Failed to open desired window");
  32312. +      else if (screen_name)
  32313. +        error("Unknown public screen %s", screen_name);
  32314. +      else error("The default screen wasn't found !?");
  32315. +    }
  32316. +
  32317. +      _device_close(old_console);
  32318. +      CloseWindow(old_win);
  32319. +      if (!resume_menus()) error("Failed to recover menus (No memory?)");
  32320. +    }
  32321. +  else /* No window, set defaults */
  32322. +    {
  32323. +      emacs_screen_name = screen_name;
  32324. +      if (screen_name)
  32325. +    {
  32326. +      emacs_screen_name_storage[MAXPUBSCREENNAME] = '\0';
  32327. +      strncpy(emacs_screen_name_storage, screen_name, MAXPUBSCREENNAME);
  32328. +    }
  32329. +      emacs_x = tempx;
  32330. +      emacs_y = tempy;
  32331. +      emacs_w = tempw;
  32332. +      emacs_h = temph;
  32333. +      emacs_backdrop = use_backdrop;
  32334. +    }
  32335. +  return Qnil;
  32336. +}
  32337. +
  32338. +
  32339. +/* The next 2 functions are very usefull for writing
  32340. + * arexx/lisp functions that interact with other programs
  32341. + * that will be sharing the same screen.  -ch3/19/93. */
  32342. +
  32343. +DEFUN("amiga-get-window-geometry",
  32344. +      Famiga_get_window_geometry, Samiga_get_window_geometry, 0, 0, 0,
  32345. +      "Get Emacs window geometry.\n\
  32346. +a list returned is of the form:  (iconified x y width height backdrop)\n\
  32347. +where x, y, width, height are integers, backdrop is t or nil and iconified\n\
  32348. +is t if the window is iconified and nil otherwise")
  32349. +()
  32350. +{
  32351. +  Lisp_Object x, y, w, h, b, i;
  32352. +
  32353. +  XSET(x, Lisp_Int, EMACS_X());
  32354. +  XSET(y, Lisp_Int, EMACS_Y());
  32355. +  XSET(w, Lisp_Int, EMACS_W());
  32356. +  XSET(h, Lisp_Int, EMACS_H());
  32357. +  b = emacs_backdrop ? Qt : Qnil;
  32358. +  i = emacs_iconified ? Qt : Qnil;
  32359. +
  32360. +  return Fcons(i, Fcons(x, Fcons(y, Fcons(w, Fcons(h, Fcons(b, Qnil))))));
  32361. +}
  32362. +
  32363. +DEFUN("amiga-get-screen-geometry",
  32364. +      Famiga_get_screen_geometry, Samiga_get_screen_geometry, 0, 0, 0,
  32365. +      "Get geometry of the screen emacs window resides on.\n\
  32366. +a list returned is of the form:  (name x y width height)\n\
  32367. +where name is a string, x, y, width, height are integers.\n\
  32368. +Only the public screen name is returned if the window is not currently open.\n\
  32369. +In this last case, the name may be nil if the window will be opened on the\n\
  32370. +default public screen.")
  32371. +()
  32372. +{
  32373. +  Lisp_Object name;
  32374. +
  32375. +  if (emacs_screen_name) name = Qnil;
  32376. +  else name = build_string(emacs_screen_name);
  32377. +
  32378. +  if(emacs_win)
  32379. +    {
  32380. +      struct Screen *s = emacs_win->WScreen;
  32381. +      Lisp_Object x, y, w, h;
  32382. +
  32383. +      XSET(x, Lisp_Int, s->LeftEdge);
  32384. +      XSET(y, Lisp_Int, s->TopEdge);
  32385. +      XSET(w, Lisp_Int, s->Width);
  32386. +      XSET(h, Lisp_Int, s->Height);
  32387. +
  32388. +      return Fcons(name, Fcons(x, Fcons(y, Fcons(w, Fcons(h, Qnil)))));
  32389. +    }
  32390. +  return Fcons(name, Qnil);
  32391. +}
  32392. +
  32393. +DEFUN("amiga-iconify", Famiga_iconify, Samiga_iconify, 0, 0, "",
  32394. +      "Toggle the emacs iconification state.")
  32395. +()
  32396. +{
  32397. +  check_intuition();
  32398. +
  32399. +  if (emacs_iconified)
  32400. +    {
  32401. +      /* Deiconify */
  32402. +
  32403. +      /* Reopen window */
  32404. +      if (open_emacs_window(emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
  32405. +                emacs_screen_name) != ok)
  32406. +    error("Failed to deiconify (No memory?)");
  32407. +      resume_menus();
  32408. +
  32409. +      RemoveAppIcon(emacs_icon);
  32410. +      emacs_icon = 0;
  32411. +      emacs_iconified = 0;
  32412. +    }
  32413. +  else
  32414. +    if (emacs_icon = AddAppIconA(0, 0, "Emacs", wbport, 0, &emacs_icon_object, 0))
  32415. +      {
  32416. +    if (emacs_win)
  32417. +      {
  32418. +        /* Close window */
  32419. +        emacs_x = EMACS_X(); emacs_y = EMACS_Y();
  32420. +        emacs_w = EMACS_W(); emacs_h = EMACS_H();
  32421. +        suspend_menus();
  32422. +        close_emacs_window();
  32423. +      }
  32424. +    emacs_iconified = 1;
  32425. +      }
  32426. +    else error("Iconify attempt failed\n");
  32427. +
  32428. +  return Qnil;
  32429. +}
  32430. +
  32431. +DEFUN("amiga-set-icon-pos", Famiga_set_icon_pos, Samiga_set_icon_pos, 2, 2,
  32432. +"nX position: \n\
  32433. +nY position: ",
  32434. +      "Set the X Y position of the icon for emacs when iconified.")
  32435. +  (Lisp_Object x, Lisp_Object y)
  32436. +{
  32437. +  long xpos, ypos;
  32438. +
  32439. +  if (NULL (x)) emacs_icon_object.do_CurrentX = NO_ICON_POSITION;
  32440. +  else
  32441. +    {
  32442. +      CHECK_NUMBER (x, 0);
  32443. +      emacs_icon_object.do_CurrentX = XINT(x);
  32444. +    }
  32445. +  if (NULL (y)) emacs_icon_object.do_CurrentY = NO_ICON_POSITION;
  32446. +  else
  32447. +    {
  32448. +      CHECK_NUMBER (y, 0);
  32449. +      emacs_icon_object.do_CurrentY = XINT(y);
  32450. +    }
  32451. +
  32452. +  return Qnil;
  32453. +}
  32454. +
  32455. +struct EClockVal scount[16], ecount[16];
  32456. +long total[16], counting[16], nb[16], susp[16];
  32457. +
  32458. +void start_count(int n)
  32459. +{
  32460. +  nb[n]++;
  32461. +  if (counting[n]) printf("Restarted %d\n", n);
  32462. +  counting[n] = 1;
  32463. +  /*ReadEClock(&scount[n]);*/
  32464. +}
  32465. +
  32466. +void stop_count(int n)
  32467. +{
  32468. +  if (counting[n])
  32469. +    {
  32470. +      /*ReadEClock(&ecount[n]);*/
  32471. +      counting[n] = 0;
  32472. +
  32473. +      total[n] += ecount[n].ev_lo - scount[n].ev_lo;
  32474. +    }
  32475. +}
  32476. +
  32477. +void suspend_count(int n)
  32478. +{
  32479. +  if (counting[n] && susp[n]++ == 0)
  32480. +    {
  32481. +      /*ReadEClock(&ecount[n]);*/
  32482. +      total[n] += ecount[n].ev_lo - scount[n].ev_lo;
  32483. +    }
  32484. +}
  32485. +
  32486. +void resume_count(int n)
  32487. +{
  32488. +  if (counting[n] && --susp[n] == 0) /*ReadEClock(&scount[n])*/;
  32489. +}
  32490. +
  32491. +disp_counts(void)
  32492. +{
  32493. +  int i;
  32494. +
  32495. +  for (i = 0; i < 16; i++)
  32496. +    {
  32497. +      printf("%d(%d) ", total[i], nb[i]);
  32498. +      total[i] = nb[i] = 0;
  32499. +    }
  32500. +  printf("\n");
  32501. +}
  32502. +
  32503. +void screen_puts(char *str, unsigned int len)
  32504. +{
  32505. +  if (emacs_win)
  32506. +    {
  32507. +      int i;
  32508. +
  32509. +      emacs_console->io_Command = CMD_WRITE;
  32510. +      emacs_console->io_Data    = (APTR)str;
  32511. +      emacs_console->io_Length  = len;
  32512. +
  32513. +      /*    start_count(0);
  32514. +        for (i = 1; i <= 6; i++) suspend_count(i);*/
  32515. +      DoIO(emacs_console);
  32516. +      /*    for (i = 1; i <= 6; i++) resume_count(i);
  32517. +        stop_count(0);*/
  32518. +    }
  32519. +}
  32520. +
  32521. +DEFUN ("amiga-activate-window", Famiga_activate_window, Samiga_activate_window, 0, 0, 0,
  32522. +       "Makes emacs window the currently active one.")
  32523. +     ()
  32524. +{
  32525. +  if(emacs_win) {
  32526. +    ActivateWindow(emacs_win);
  32527. +    return Qnil;
  32528. +  }
  32529. +  error("No window to make active.");
  32530. +  return Qnil;
  32531. +}
  32532. +
  32533. +DEFUN ("amiga-window-to-front", Famiga_window_to_front, Samiga_window_to_front, 0, 0, 0,
  32534. +       "Pulls the emacs window to the front (including screen)")
  32535. +     ()
  32536. +{
  32537. +  if(emacs_win) {
  32538. +    WindowToFront(emacs_win);
  32539. +    ScreenToFront(emacs_win->WScreen);
  32540. +    return Qnil;
  32541. +  }
  32542. +  error("No window to pull to the front.");
  32543. +  return Qnil;
  32544. +}
  32545. +
  32546. +DEFUN ("amiga-window-to-back", Famiga_window_to_back, Samiga_window_to_back, 0, 0, 0,
  32547. +       "Pushes the emacs window to the back (including screen)")
  32548. +     ()
  32549. +{
  32550. +  if(emacs_win) {
  32551. +    WindowToBack(emacs_win);
  32552. +    ScreenToBack(emacs_win->WScreen);
  32553. +    return Qnil;
  32554. +  }
  32555. +  error("No window to push back.");
  32556. +  return Qnil;
  32557. +}
  32558. +
  32559. +
  32560. +void syms_of_amiga_screen(void)
  32561. +{
  32562. +  DEFVAR_LISP ("amiga-mouse-item", &Vamiga_mouse_item,
  32563. +           "Encoded representation of last mouse click, corresponding to\n\
  32564. +numerical entries in amiga-mouse-map.");
  32565. +  Vamiga_mouse_item = Qnil;
  32566. +  DEFVAR_LISP ("amiga-mouse-pos", &Vamiga_mouse_pos,
  32567. +           "Current x-y position of mouse by row, column as specified by font.");
  32568. +  Vamiga_mouse_pos = Qnil;
  32569. +
  32570. +  DEFVAR_BOOL ("amiga-remap-bsdel", &amiga_remap_bsdel,
  32571. +           "*If true, map DEL to Ctrl-D and Backspace to DEL. \n\
  32572. +This is the most convenient (and default) setting. If nil, don't remap.");
  32573. +  amiga_remap_bsdel = 1;
  32574. +
  32575. +  DEFVAR_BOOL ("amiga-remap-numeric-keypad", &amiga_remap_numeric_keypad,
  32576. +           "*If true, numeric keypad keys are prefixed with C-x C-^ K.\n\
  32577. +This enables you to remap them, but causes problems with functions like\n\
  32578. +isearch-forward-regexp on some keyboards. Default to true.");
  32579. +  amiga_remap_numeric_keypad = 1;
  32580. +
  32581. +  DEFVAR_BOOL ("amiga-mouse-initialized", &amiga_mouse_initialized,
  32582. +           "Set to true once lisp has been setup to process mouse commands.\n\
  32583. +No mouse processing request (C-X C-^ M) will be queued while this is nil.");
  32584. +  amiga_mouse_initialized = 0;
  32585. +
  32586. +  DEFVAR_BOOL ("amiga-wb-initialized", &amiga_wb_initialized,
  32587. +           "Set to true once lisp has been setup to process workbench commands.\n\
  32588. +No workbench processing request (C-X C-^ W) will be queued while this is nil.");
  32589. +  amiga_mouse_initialized = 0;
  32590. +
  32591. +  defsubr (&Samiga_mouse_events);
  32592. +  defsubr (&Samiga_proc_mouse_event);
  32593. +  defsubr (&Samiga_get_mouse_event);
  32594. +  defsubr (&Samiga_get_wb_event);
  32595. +  defsubr (&Samiga_set_font);
  32596. +  defsubr (&Samiga_set_geometry);
  32597. +  defsubr (&Samiga_set_background_color);
  32598. +  defsubr (&Samiga_set_foreground_color);
  32599. +  defsubr (&Samiga_iconify);
  32600. +  defsubr (&Samiga_set_icon_pos);
  32601. +
  32602. +  /* New functions  -ch3/19/93. */
  32603. +  defsubr (&Samiga_set_inverse_text_pen);
  32604. +  defsubr (&Samiga_set_inverse_fill_pen);
  32605. +  defsubr (&Samiga_window_to_front);
  32606. +  defsubr (&Samiga_window_to_back);
  32607. +  defsubr (&Samiga_activate_window);
  32608. +  defsubr (&Samiga_get_window_geometry);
  32609. +  defsubr (&Samiga_get_screen_geometry);
  32610. +
  32611. +}
  32612. +
  32613. +void init_amiga_screen(void)
  32614. +{
  32615. +  event_num = event_in = event_out = 0;
  32616. +
  32617. +  if (!((IntuitionBase = (struct IntuitionBase *)
  32618. +     OpenLibrary("intuition.library", 37L)) &&
  32619. +    (GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0L)) &&
  32620. +    (DiskfontBase = OpenLibrary("diskfont.library", 0L)) &&
  32621. +    (WorkbenchBase = OpenLibrary("workbench.library", 37)) &&
  32622. +    (KeymapBase = OpenLibrary("keymap.library", 36)) &&
  32623. +    (input_req = (struct IOStdReq *)_device_open("input.device", 0, 0, 0, 0,
  32624. +                             sizeof(struct IOStdReq)))))
  32625. +    _fail("Need version 2.04 and diskfont.library!");
  32626. +
  32627. +  if (!(wbport = CreateMsgPort())) no_memory();
  32628. +
  32629. +  /* Add Ctrl-G detector */
  32630. +  int_handler_hook.is_Data = 0;
  32631. +  int_handler_hook.is_Code = (void *)int_handler;
  32632. +  int_handler_hook.is_Node.ln_Pri = 100; /* 100 not 127 is the standard value
  32633. +                      * for input stream handlers.  -ch3/19/93. */
  32634. +  /* it is standard for interrupts to have names  -ch3/19/93.*/
  32635. +  int_handler_hook.is_Node.ln_Name = "GNU Emacs CTRL-G handler";
  32636. +  input_req->io_Command = IND_ADDHANDLER;
  32637. +  input_req->io_Data = (APTR)&int_handler_hook;
  32638. +
  32639. +  /* wasn't checking for error. -ch3/19/93. */
  32640. +  if(0 == DoIO(input_req))
  32641. +    hooked = TRUE;
  32642. +  else
  32643. +    {
  32644. +      hooked = FALSE;
  32645. +      _fail("couldn't get input handler hook for CTRL-G");
  32646. +    }
  32647. +
  32648. +  inputsig |= 1L << wbport->mp_SigBit;
  32649. +
  32650. +  background_hook.h_Entry = (ULONG (*)()) fill_background; /* added cast. */
  32651. +  font = GfxBase->DefaultFont;
  32652. +
  32653. +  init_amiga_menu();
  32654. +}
  32655. +
  32656. +void cleanup_amiga_screen(void)
  32657. +{
  32658. +  if (hooked)
  32659. +    {
  32660. +      input_req->io_Command = IND_REMHANDLER;
  32661. +      input_req->io_Data = (APTR)&int_handler_hook;
  32662. +      DoIO(input_req);
  32663. +    }
  32664. +  close_app_win();
  32665. +  if (wbport) DeleteMsgPort(wbport);
  32666. +  cleanup_amiga_menu();
  32667. +  _device_close(emacs_console);
  32668. +  if (emacs_win) CloseWindow(emacs_win);
  32669. +  if (font_opened) CloseFont(font);
  32670. +  if (IntuitionBase) CloseLibrary(IntuitionBase);
  32671. +  if (GfxBase) CloseLibrary(GfxBase);
  32672. +  if (DiskfontBase) CloseLibrary(DiskfontBase);
  32673. +  if (WorkbenchBase) CloseLibrary(WorkbenchBase);
  32674. +  if (KeymapBase) CloseLibrary(KeymapBase);
  32675. +  _device_close(input_req);
  32676. +}
  32677. diff -rup --new-file baseline/fsf/emacs18/src/amiga_serial.c amiga/fsf/emacs18/src/amiga_serial.c
  32678. --- baseline/fsf/emacs18/src/amiga_serial.c    Wed Dec 31 17:00:00 1969
  32679. +++ amiga/fsf/emacs18/src/amiga_serial.c    Sat Sep 28 00:00:00 1996
  32680. @@ -0,0 +1,72 @@
  32681. +#include <exec/types.h>
  32682. +#include <devices/serial.h>
  32683. +#include <stdio.h>
  32684. +#include <internal/devices.h>
  32685. +
  32686. +#include <proto/exec.h>
  32687. +#include <proto/dos.h>
  32688. +
  32689. +#include "amiga.h"
  32690. +
  32691. +static struct MsgPort  *SerReadPort;
  32692. +static struct IOExtSer *SerReadRequest, *SerWriteRequest;
  32693. +static char ser_inbuf[2];
  32694. +char *far serial_device = "serial.device";
  32695. +long far serial_unit;
  32696. +
  32697. +void init_amiga_serial(void)
  32698. +{
  32699. +    if ((SerWriteRequest = (struct IOExtSer *)
  32700. +     _device_open(serial_device, serial_unit, 0L,
  32701. +              0L, 0, sizeof(struct IOExtSer))) &&
  32702. +    (SerReadPort = CreateMsgPort()) &&
  32703. +    (SerReadRequest  = (struct IOExtSer *)CreateIORequest(SerReadPort, sizeof (struct IOExtSer))))
  32704. +    {
  32705. +    SerReadRequest->IOSer.io_Device = SerWriteRequest->IOSer.io_Device;
  32706. +    SerReadRequest->IOSer.io_Unit = SerWriteRequest->IOSer.io_Unit;
  32707. +    ser_inbuf[1]=0;
  32708. +    SerReadRequest->IOSer.io_Command = CMD_READ;
  32709. +    SerWriteRequest->IOSer.io_Command = CMD_WRITE;
  32710. +    SerReadRequest->IOSer.io_Length = 1;
  32711. +    SerReadRequest->IOSer.io_Data = &ser_inbuf[0];
  32712. +    SendIO(SerReadRequest);
  32713. +
  32714. +    inputsig |= 1L << SerReadPort->mp_SigBit;
  32715. +    }
  32716. +    else _fail("No memory or serial.device missing");
  32717. +}
  32718. +
  32719. +void cleanup_amiga_serial(void)
  32720. +{
  32721. +    if (SerReadRequest)
  32722. +    {
  32723. +    AbortIO(SerReadRequest);
  32724. +    WaitIO(SerReadRequest);
  32725. +    DeleteIORequest(SerReadRequest);
  32726. +    }
  32727. +    if (SerReadPort) DeletePort(SerReadPort);
  32728. +    _device_close(SerWriteRequest);
  32729. +}
  32730. +
  32731. +void check_serial(int force)
  32732. +{
  32733. +    while (CheckIO(SerReadRequest))
  32734. +    {
  32735. +    int c = ser_inbuf[0];
  32736. +    SendIO(SerReadRequest);
  32737. +    enque(c, FALSE);
  32738. +    }
  32739. +}
  32740. +
  32741. +void serial_puts(char *str, int len)
  32742. +{
  32743. +
  32744. +    SerWriteRequest->IOSer.io_Length = len;
  32745. +    SerWriteRequest->IOSer.io_Data = str;
  32746. +    DoIO(SerWriteRequest);
  32747. +}
  32748. +
  32749. +unsigned long serial_baud_rate(void)
  32750. +{
  32751. +    return SerWriteRequest->io_Baud;
  32752. +}
  32753. diff -rup --new-file baseline/fsf/emacs18/src/amiga_sysdep.c amiga/fsf/emacs18/src/amiga_sysdep.c
  32754. --- baseline/fsf/emacs18/src/amiga_sysdep.c    Wed Dec 31 17:00:00 1969
  32755. +++ amiga/fsf/emacs18/src/amiga_sysdep.c    Sat Sep 28 00:00:00 1996
  32756. @@ -0,0 +1,375 @@
  32757. +/* Interfaces to system-dependent kernel and library entries.
  32758. +Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
  32759. +
  32760. +This file is part of GNU Emacs.
  32761. +
  32762. +GNU Emacs is distributed in the hope that it will be useful,
  32763. +but WITHOUT ANY WARRANTY.  No author or distributor
  32764. +accepts responsibility to anyone for the consequences of using it
  32765. +or for whether it serves any particular purpose or works at all,
  32766. +unless he says so in writing.  Refer to the GNU Emacs General Public
  32767. +License for full details.
  32768. +
  32769. +Everyone is granted permission to copy, modify and redistribute
  32770. +GNU Emacs, but only under the conditions described in the
  32771. +GNU Emacs General Public License.   A copy of this license is
  32772. +supposed to have been given to you along with GNU Emacs so you
  32773. +can know your rights and responsibilities.  It should be in a
  32774. +file named COPYING.  Among other things, the copyright notice
  32775. +and this notice must be preserved on all copies.  */
  32776. +
  32777. +#include <exec/types.h>
  32778. +#include <dos/dos.h>
  32779. +#include <dos/dosextens.h>
  32780. +#include <dos/var.h>
  32781. +#include <exec/execbase.h>
  32782. +#include <exec/tasks.h>
  32783. +#include <utility/tagitem.h>
  32784. +#include <workbench/startup.h>
  32785. +#include <workbench/workbench.h>
  32786. +#include <proto/exec.h>
  32787. +#include <proto/dos.h>
  32788. +#include <proto/icon.h>
  32789. +
  32790. +#include <string.h>
  32791. +#include <ios1.h>
  32792. +#include <stdio.h>
  32793. +#include <sys/types.h>
  32794. +#include <sys/stat.h>
  32795. +#include <signal.h>
  32796. +#include <setjmp.h>
  32797. +#include <unistd.h>
  32798. +#include <internal/vars.h>
  32799. +
  32800. +#undef LONGBITS
  32801. +#undef NULL
  32802. +#include "config.h"
  32803. +#include "lisp.h"
  32804. +#include "emacssignal.h"
  32805. +
  32806. +#define min(x,y) ((x) > (y) ? (y) : (x))
  32807. +
  32808. +#include "termhooks.h"
  32809. +#include "termchar.h"
  32810. +#include "termopts.h"
  32811. +#include "dispextern.h"
  32812. +#include "amiga.h"
  32813. +
  32814. +#define EMACS_TOOL_SIZE 128    /* Room for path to emacs executable */
  32815. +
  32816. +struct Library *IconBase;
  32817. +extern struct ExecBase *SysBase;
  32818. +
  32819. +/*long __stack = 40000;*/        /* Minimum stack size, used by c.o */
  32820. +int amiga_process_stack_size;
  32821. +
  32822. +int amiga_initialized;
  32823. +int amiga_create_icons;        /* If true, we create icons when saving files */
  32824. +enum exit_method amiga_fail_exit = use_xcexit;
  32825. +int selecting;
  32826. +
  32827. +/* Emacs sysdep routines */
  32828. +/* --------------------- */
  32829. +
  32830. +set_exclusive_use(int fd) {}
  32831. +
  32832. +/* Suspend the Emacs process; give terminal to its superior.  */
  32833. +sys_suspend()
  32834. +{
  32835. +  /* This could have been iconify, but:
  32836. +     a) Not good for serial lines.
  32837. +     b) emacs stays active while iconified */
  32838. +}
  32839. +
  32840. +char *get_system_name()
  32841. +{
  32842. +  static char sysname[32];
  32843. +
  32844. +  gethostname(sysname, sizeof sysname);
  32845. +  return sysname;
  32846. +}
  32847. +
  32848. +/*
  32849. + *    flush any pending output
  32850. + *      (may flush input as well; it does not matter the way we use it)
  32851. + */
  32852. +
  32853. +flush_pending_output (channel)
  32854. +     int channel;
  32855. +{
  32856. +}
  32857. +
  32858. +wait_for_termination (pid)
  32859. +     int pid;
  32860. +{
  32861. +  while (1)
  32862. +    {
  32863. +      sigsetmask (sigmask (SIGCHLD));
  32864. +      if (0 > kill (pid, 0))
  32865. +        {
  32866. +      sigsetmask (SIGEMPTYMASK);
  32867. +      break;
  32868. +    }
  32869. +      sigpause (SIGEMPTYMASK);
  32870. +    }
  32871. +}
  32872. +
  32873. +/* A few general amiga support routines */
  32874. +/* ------------------------------------ */
  32875. +
  32876. +char *expand_path(char *path, char *buf, int len)
  32877. +{
  32878. +  BPTR dirlock;
  32879. +  APTR window;
  32880. +
  32881. +  window = _us->pr_WindowPtr;
  32882. +  _us->pr_WindowPtr = (APTR)-1;
  32883. +  dirlock = Lock(path, ACCESS_READ);
  32884. +  _us->pr_WindowPtr = window;
  32885. +  if (dirlock)            /* Expand lock name */
  32886. +    {
  32887. +      if (!NameFromLock(dirlock, buf, len)) buf = 0;
  32888. +      UnLock(dirlock);
  32889. +      return buf;
  32890. +    }
  32891. +  return 0;
  32892. +}
  32893. +
  32894. +#undef select
  32895. +int emacs_select(int nfds, int *rfds, int *wfds, int *efds, struct timeval *timeout)
  32896. +{
  32897. +  int ret;
  32898. +
  32899. +  selecting = TRUE;
  32900. +  ret = select(nfds, rfds, wfds, efds, timeout);
  32901. +  selecting = FALSE;
  32902. +  return ret;
  32903. +}
  32904. +
  32905. +void no_memory(void)
  32906. +{
  32907. +  _fail("No memory");
  32908. +}
  32909. +
  32910. +char *amiga_path(void)
  32911. +{
  32912. +  char *path, *pp, name[128];
  32913. +  int pathsize;
  32914. +  struct CommandLineInterface *cli;
  32915. +  BPTR lock;
  32916. +  long l, *lp, nlen;
  32917. +
  32918. +  pathsize = 128;
  32919. +  path = (char *)xmalloc(pathsize);
  32920. +
  32921. +  strcpy(path, ".");
  32922. +  pp = path + 1;
  32923. +
  32924. +  if (!(cli = (struct CommandLineInterface *)((long)_us->pr_CLI << 2)))
  32925. +    return path;
  32926. +
  32927. +  l = (long)cli->cli_CommandDir;
  32928. +  while (l) {
  32929. +    *pp++ = ',';
  32930. +    l <<= 2;
  32931. +    lp = (long *)l;
  32932. +    lock = (BPTR)*(lp + 1);
  32933. +    NameFromLock(lock, name, 128);
  32934. +    nlen = strlen(name);
  32935. +    if (pp + nlen + 5 >= path + pathsize)
  32936. +      {
  32937. +    char *newpath;
  32938. +
  32939. +    pathsize = 2 * pathsize + nlen;
  32940. +    newpath = (char *)xrealloc(path, pathsize);
  32941. +    pp = newpath + (pp - path);
  32942. +    path = newpath;
  32943. +      }
  32944. +    memcpy(pp, name, nlen);
  32945. +    pp += nlen;
  32946. +    l = *lp;
  32947. +  }
  32948. +  /* Use of +5 above guarantees that there is enough space for c: */
  32949. +  strcpy(pp, ",c:");
  32950. +
  32951. +  return path;
  32952. +}
  32953. +
  32954. +/* Some general amiga commands */
  32955. +/* --------------------------- */
  32956. +
  32957. +#define emacs_file_icon_width 54
  32958. +#define emacs_file_icon_height 22
  32959. +#define emacs_file_icon_num_planes 2
  32960. +
  32961. +static UWORD chip emacs_file_icon_data[2][22][4] = {
  32962. +    {
  32963. +        0x0000,0x0000,0x0000,0x0400,0x0000,0x0000,0x0000,0x0c00,
  32964. +        0x0000,0x0000,0x0000,0x0c00,0x07ff,0xffff,0xffe0,0x0c00,
  32965. +        0x0400,0x0000,0x0030,0x0c00,0x0400,0x0000,0x0028,0x0c00,
  32966. +        0x04ff,0xffff,0xfe24,0x0c00,0x0400,0x0000,0x0022,0x0c00,
  32967. +        0x04ff,0xffff,0xfe3f,0x0c00,0x0400,0x0000,0x0000,0x8c00,
  32968. +        0x04ff,0xffc0,0x0000,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  32969. +        0x0400,0x0000,0x0000,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  32970. +        0x04ff,0xffff,0xfe00,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  32971. +        0x04ff,0xffff,0xfe00,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  32972. +        0x07ff,0xffff,0xffff,0x8c00,0x0000,0x0000,0x0000,0x0c00,
  32973. +        0x0000,0x0000,0x0000,0x0c00,0x7fff,0xffff,0xffff,0xfc00
  32974. +    },
  32975. +    {
  32976. +        0xffff,0xffff,0xffff,0xf800,0x8000,0x0000,0x0000,0x0000,
  32977. +        0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,
  32978. +        0x83ff,0xffff,0xffc0,0x0000,0x83ff,0xffff,0xffd0,0x0000,
  32979. +        0x8300,0x0000,0x01d8,0x0000,0x83ff,0xffff,0xffdc,0x0000,
  32980. +        0x8300,0x0000,0x01c0,0x0000,0x83ff,0xffff,0xffff,0x0000,
  32981. +        0x8300,0x003f,0xffff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  32982. +        0x83ff,0xffff,0xffff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  32983. +        0x8300,0x0000,0x01ff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  32984. +        0x8300,0x0000,0x01ff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  32985. +        0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,
  32986. +        0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000
  32987. +    },
  32988. +};
  32989. +struct Image far emacs_file_icon_image = {
  32990. +  0, 0,
  32991. +  emacs_file_icon_width, emacs_file_icon_height, emacs_file_icon_num_planes,
  32992. +  (UWORD *)emacs_file_icon_data,
  32993. +  3, 0,
  32994. +  0
  32995. +};
  32996. +
  32997. +static char *far emacs_file_tooltypes[] = {
  32998. +  "FILETYPE=TEXT",
  32999. +  0
  33000. +};
  33001. +
  33002. +static char far emacs_tool[EMACS_TOOL_SIZE];
  33003. +
  33004. +static struct DiskObject far emacs_file_icon_object = {
  33005. +  WB_DISKMAGIC, WB_DISKVERSION,
  33006. +  { 0, 0, 0, emacs_file_icon_width, emacs_file_icon_height,
  33007. +    GFLG_GADGIMAGE | GADGBACKFILL, GACT_IMMEDIATE | GACT_RELVERIFY, GTYP_BOOLGADGET,
  33008. +    (APTR)&emacs_file_icon_image },
  33009. +  WBPROJECT, emacs_tool, emacs_file_tooltypes,
  33010. +  NO_ICON_POSITION, NO_ICON_POSITION,
  33011. +  0, 0,
  33012. +  40000                /* Stack size for emacs */
  33013. +};
  33014. +
  33015. +DEFUN ("amiga-put-icon", Famiga_put_icon, Samiga_put_icon, 2, 2, 0,
  33016. +       "Create an icon for FILE.\n\
  33017. +If FORCE is non-nil create it unconditionally, otherwise only if one doesn't exist.\n\
  33018. +Returns t if an icon was created, nil otherwise.")
  33019. +     (file, force)
  33020. +Lisp_Object file, force;
  33021. +{
  33022. +  char *fname;
  33023. +  struct DiskObject *obj;
  33024. +
  33025. +  CHECK_STRING(file, 0);
  33026. +  fname = XSTRING(file)->data;
  33027. +
  33028. +  if (NULL (force) && (obj = GetDiskObject(fname)))
  33029. +    {
  33030. +      /* Icon exists, don't overwrite */
  33031. +      FreeDiskObject(obj);
  33032. +      return Qnil;
  33033. +    }
  33034. +  emacs_file_icon_object.do_StackSize = _stack_size;
  33035. +  if (PutDiskObject(fname, &emacs_file_icon_object)) return Qt;
  33036. +  error("Icon for %s couldn't be created", fname);
  33037. +}
  33038. +
  33039. +/* Amiga initialisation routines */
  33040. +/* ----------------------------- */
  33041. +
  33042. +syms_of_amiga ()
  33043. +{
  33044. +  DEFVAR_BOOL("amiga-initialized", &amiga_initialized, "");
  33045. +  DEFVAR_INT("amiga-malloc-bytes-used", &malloc_bytes_used,
  33046. +         "Number of malloc bytes used when emacs was dumped");
  33047. +  DEFVAR_BOOL("amiga-create-icons", &amiga_create_icons,
  33048. +         "If non-nil, create icons when saving files.");
  33049. +  defsubr(&Samiga_put_icon);
  33050. +  amiga_process_stack_size = 0;
  33051. +  DEFVAR_INT("amiga-process-stack-size", &amiga_process_stack_size,
  33052. +     "Size of stack for called processes. 0 means same size as emacs stack.");
  33053. +  syms_of_amiga_tty();
  33054. +  syms_of_amiga_menu();
  33055. +  syms_of_amiga_clipboard();
  33056. +}
  33057. +
  33058. +static void amiga_early_init(int *_argc, char ***_argv)
  33059. +{
  33060. +  int argc = *_argc;
  33061. +  char **argv = *_argv;
  33062. +
  33063. +  if (argc > 2 && !strcmp(argv[1], "-pure"))
  33064. +    {
  33065. +      puresize = atoi(argv[2]);
  33066. +      argc -= 2; argv += 2;
  33067. +    }
  33068. +  if (argc > 2 && !strcmp(argv[1], "-malloc"))
  33069. +    {
  33070. +      malloc_hunk_size = atoi(argv[2]);
  33071. +      argc -= 2; argv += 2;
  33072. +    }
  33073. +  if (argc > 2 && !strcmp(argv[1], "-prealloc"))
  33074. +    {
  33075. +      pre_alloc = atoi(argv[2]);
  33076. +      argc -= 2; argv += 2;
  33077. +    }
  33078. +  /* Handle the -dev switch, which specifies device & unit to use as terminal */
  33079. +  if (argc > 3 && !strcmp (argv[1], "-dev"))
  33080. +    {
  33081. +      extern char *far serial_device;
  33082. +      extern long far serial_unit;
  33083. +
  33084. +      serial_device = argv[2];
  33085. +      serial_unit = atoi(argv[3]);
  33086. +      fprintf (stderr, "Using %s (unit %d)\n", serial_device ,serial_unit);
  33087. +      argc -= 3; argv += 3;
  33088. +    }
  33089. +  /* Patch real argc, argv to hide arguments we used */
  33090. +  argv[0] = (*_argv)[0];
  33091. +  *_argv = argv;
  33092. +  *_argc = argc;
  33093. +
  33094. +  expand_path(argv[0], emacs_tool, EMACS_TOOL_SIZE);
  33095. +}
  33096. +
  33097. +void cleanup_amiga(void)
  33098. +{
  33099. +  cleanup_clipboard();
  33100. +  cleanup_amiga_tty();
  33101. +  if (IconBase) CloseLibrary(IconBase);
  33102. +}
  33103. +
  33104. +void amiga_undump_reinit(void)
  33105. +/* Post-undump initialisation */
  33106. +{
  33107. +  extern struct WBStartup *_WBenchMsg;
  33108. +
  33109. +  emacs_malloc_init();
  33110. +  early_amiga_tty();
  33111. +  early_clipboard();
  33112. +
  33113. +  if (!onexit(cleanup_amiga)) _fail("Internal problem with onexit");
  33114. +
  33115. +  make_environ();
  33116. +  IconBase = OpenLibrary("icon.library", 0);
  33117. +  if (!IconBase) _fail("Need icon.library");
  33118. +  amiga_create_icons = _WBenchMsg != 0;
  33119. +
  33120. +  init_amiga_tty(); init_clipboard();
  33121. +}
  33122. +
  33123. +#undef main
  33124. +main(int argc, char **argv)
  33125. +/* Effect: Call emacs_main after doing some early amiga initialisation for emacs.
  33126. +*/
  33127. +{
  33128. +  /* This initialisation may steal some command line options */
  33129. +  amiga_early_init(&argc, &argv);
  33130. +  emacs_main(argc, argv);
  33131. +}
  33132. diff -rup --new-file baseline/fsf/emacs18/src/amiga_term.c amiga/fsf/emacs18/src/amiga_term.c
  33133. --- baseline/fsf/emacs18/src/amiga_term.c    Wed Dec 31 17:00:00 1969
  33134. +++ amiga/fsf/emacs18/src/amiga_term.c    Sat Sep 28 00:00:00 1996
  33135. @@ -0,0 +1,388 @@
  33136. +/* Amiga terminal control routines.
  33137. +   Copyright (C) 1985, 1986, 1987 Free Software Foundation, Inc.
  33138. +
  33139. +This file is part of GNU Emacs.
  33140. +
  33141. +GNU Emacs is free software; you can redistribute it and/or modify
  33142. +it under the terms of the GNU General Public License as published by
  33143. +the Free Software Foundation; either version 1, or (at your option)
  33144. +any later version.
  33145. +
  33146. +GNU Emacs is distributed in the hope that it will be useful,
  33147. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  33148. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  33149. +GNU General Public License for more details.
  33150. +
  33151. +You should have received a copy of the GNU General Public License
  33152. +along with GNU Emacs; see the file COPYING.  If not, write to
  33153. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  33154. +
  33155. +
  33156. +#include <stdio.h>
  33157. +#include <ctype.h>
  33158. +#include "config.h"
  33159. +#include "termhooks.h"
  33160. +#include "termchar.h"
  33161. +#include "termopts.h"
  33162. +
  33163. +/* internal state */
  33164. +
  33165. +/* nonzero means supposed to write text in standout mode.  */
  33166. +static int standout_requested;
  33167. +
  33168. +static int standout_mode;    /* Nonzero when in standout mode.  */
  33169. +
  33170. +static char tens[100] = {
  33171. +    '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
  33172. +    '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
  33173. +    '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
  33174. +    '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
  33175. +    '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
  33176. +    '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
  33177. +    '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
  33178. +    '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
  33179. +    '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
  33180. +    '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
  33181. +};
  33182. +
  33183. +static char ones[100] = {
  33184. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  33185. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  33186. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  33187. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  33188. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  33189. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  33190. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  33191. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  33192. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  33193. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  33194. +};
  33195. +
  33196. +#define addnum(str, num) if (num < 100) \
  33197. +                             { *--str = ones[num]; *--str = tens[num]; } \
  33198. +                         else do { *--str = '0' + num % 10; num /= 10; } while (num != 0)
  33199. +
  33200. +static background_highlight ();
  33201. +static turn_off_highlight ();
  33202. +
  33203. +
  33204. +/* Cursor motion stuff (from cm.c) */
  33205. +static int curX, curY;
  33206. +
  33207. +/* Move to absolute position, specified origin 0 */
  33208. +
  33209. +Amove_cursor (row, col)
  33210. +{
  33211. +  char buf[32], *pos = buf + 32;
  33212. +
  33213. +  if (curY == row && curX == col)
  33214. +    return;
  33215. +
  33216. +  curX = col; curY = row;
  33217. +  *--pos = 'H';
  33218. +  col = col + 1; row = row + 1;
  33219. +  addnum(pos, col);
  33220. +  *--pos = ';';
  33221. +  addnum(pos, row);
  33222. +  *--pos = 0x9b;
  33223. +  emacs_output(pos, buf + 32 - pos);
  33224. +  if (pos < buf) abort();
  33225. +}
  33226. +
  33227. +
  33228. +Aring_bell ()
  33229. +{
  33230. +  emacs_output("\07", 1);
  33231. +}
  33232. +
  33233. +Aset_terminal_modes ()
  33234. +{
  33235. +}
  33236. +
  33237. +Areset_terminal_modes ()
  33238. +{
  33239. +  turn_off_highlight ();
  33240. +}
  33241. +
  33242. +Aupdate_begin ()
  33243. +{
  33244. +  /* Hide cursor */
  33245. +  emacs_output("\x9b\x30\x20\x70", 4);
  33246. +}
  33247. +
  33248. +Aupdate_end ()
  33249. +{
  33250. +  background_highlight ();
  33251. +  standout_requested = 0;
  33252. +  emacs_output("\x9b\x20\x70", 3); /* Show cursor */
  33253. +}
  33254. +
  33255. +
  33256. +/* Handle highlighting when TN_standout_width (termcap sg) is not specified.
  33257. +   In these terminals, output is affected by the value of standout
  33258. +   mode when the output is written.
  33259. +
  33260. +   These functions are called on all terminals, but do nothing
  33261. +   on terminals whose standout mode does not work that way.  */
  33262. +
  33263. +static turn_off_highlight ()
  33264. +{
  33265. +  if (standout_mode)
  33266. +    {
  33267. +      extern int background, foreground;      
  33268. +      extern int inverse_fill_pen, inverse_text_pen;
  33269. +      int b = background + 40, f = foreground + 30;
  33270. +      if(inverse_fill_pen < 8 && inverse_text_pen < 8)
  33271. +    {
  33272. +      char buf[32], *pos = buf + 32;
  33273. +      /* UnDo inverse fill */
  33274. +      *--pos = '\0';
  33275. +      *--pos = 'm';
  33276. +      addnum(pos, b);
  33277. +      *--pos = ';';
  33278. +      /* UnDo inverse text */
  33279. +      addnum(pos, f);
  33280. +      *--pos = 0x9b;
  33281. +      emacs_output(pos, buf + 32 - pos);
  33282. +    }
  33283. +      else
  33284. +    {
  33285. +      emacs_output("\x9b""27m", 4);
  33286. +    }
  33287. +    }
  33288. +  standout_mode = 0;
  33289. +}
  33290. +
  33291. +static turn_on_highlight ()
  33292. +{
  33293. +  if (!standout_mode)
  33294. +    {
  33295. +      extern int inverse_fill_pen, inverse_text_pen;
  33296. +      int b = inverse_fill_pen + 40, f = inverse_text_pen + 30;
  33297. +      if(inverse_fill_pen < 8 && inverse_text_pen < 8)
  33298. +    {
  33299. +      char buf[32], *pos = buf + 32;
  33300. +      /* Do inverse fill */
  33301. +      *--pos = '\0';
  33302. +      *--pos = 'm';
  33303. +      addnum(pos, b);
  33304. +      *--pos = ';';
  33305. +
  33306. +      /* Do inverse text */
  33307. +      addnum(pos, f);
  33308. +      *--pos = 0x9b;
  33309. +      emacs_output(pos, buf + 32 - pos);
  33310. +    }
  33311. +      else
  33312. +    {
  33313. +      emacs_output("\x9b\x37m", 3);
  33314. +    }
  33315. +    }
  33316. +  standout_mode = 1;
  33317. +}
  33318. +
  33319. +/* Set standout mode to the state it should be in for
  33320. +   empty space inside windows.  What this is,
  33321. +   depends on the user option inverse-video.  */
  33322. +
  33323. +static background_highlight ()
  33324. +{
  33325. +  if (inverse_video)
  33326. +    turn_on_highlight ();
  33327. +  else
  33328. +    turn_off_highlight ();
  33329. +}
  33330. +
  33331. +/* Set standout mode to the mode specified for the text to be output.  */
  33332. +
  33333. +static
  33334. +highlight_if_desired ()
  33335. +{
  33336. +  if (!inverse_video == !standout_requested)
  33337. +    turn_off_highlight ();
  33338. +  else
  33339. +    turn_on_highlight ();
  33340. +}
  33341. +
  33342. +/* External interface to control of standout mode.
  33343. +   Call this when about to modify line at position VPOS
  33344. +   and not change whether it is highlighted.  */
  33345. +
  33346. +Areassert_line_highlight (highlight, vpos)
  33347. +     int highlight;
  33348. +     int vpos;
  33349. +{
  33350. +  standout_requested = highlight;
  33351. +}
  33352. +
  33353. +/* Call this when about to modify line at position VPOS
  33354. +   and change whether it is highlighted.  */
  33355. +
  33356. +Achange_line_highlight (new_highlight, vpos, first_unused_hpos)
  33357. +     int new_highlight, vpos, first_unused_hpos;
  33358. +{
  33359. +  standout_requested = new_highlight;
  33360. +
  33361. +  move_cursor (vpos, 0);
  33362. +
  33363. +  background_highlight ();
  33364. +  clear_end_of_line (first_unused_hpos);
  33365. +  reassert_line_highlight (new_highlight, curY);
  33366. +}
  33367. +
  33368. +/* Erase operations */
  33369. +
  33370. +/* clear from cursor to end of screen */
  33371. +Aclear_to_end ()
  33372. +{
  33373. +  background_highlight ();
  33374. +  emacs_output("\x9bJ", 2);
  33375. +}
  33376. +
  33377. +/* Clear entire screen */
  33378. +
  33379. +Aclear_screen ()
  33380. +{
  33381. +  background_highlight ();
  33382. +  emacs_output("\f", 1);
  33383. +  curX = curY = 0;
  33384. +}
  33385. +
  33386. +/* Clear to end of line, but do not clear any standout marker.
  33387. +   Assumes that the cursor is positioned at a character of real text,
  33388. +   which implies it cannot be before a standout marker
  33389. +   unless the marker has zero width.
  33390. +
  33391. +   Note that the cursor may be moved.  */
  33392. +
  33393. +Aclear_end_of_line (first_unused_hpos)
  33394. +     int first_unused_hpos;
  33395. +{
  33396. +  if (curX >= first_unused_hpos)
  33397. +    return;
  33398. +
  33399. +  background_highlight ();
  33400. +  emacs_output("\x9bK", 2);
  33401. +}
  33402. +
  33403. +Aoutput_chars (string, len)
  33404. +     register char *string;
  33405. +     int len;
  33406. +{
  33407. +  highlight_if_desired ();
  33408. +
  33409. +  curX += len;
  33410. +  emacs_output(string, len);
  33411. +}
  33412. +
  33413. +/* If start is zero, insert blanks instead of a string at start */
  33414. +
  33415. +Ainsert_chars (start, len)
  33416. +     register char *start;
  33417. +     int len;
  33418. +{
  33419. +  char buf[32], *pos = buf + 32;
  33420. +
  33421. +  highlight_if_desired ();
  33422. +
  33423. +  *--pos = '@';
  33424. +  addnum(pos, len);
  33425. +  *--pos = 0x9b;
  33426. +  emacs_output(pos, buf + 32 - pos);
  33427. +  if (pos < buf) abort();
  33428. +  if (start) emacs_output(start, len);
  33429. +}
  33430. +
  33431. +Adelete_chars (n)
  33432. +     register int n;
  33433. +{
  33434. +  char buf[32], *pos = buf + 32;
  33435. +
  33436. +  *--pos = 'P';
  33437. +  addnum(pos, n);
  33438. +  *--pos = 0x9b;
  33439. +  emacs_output(pos, buf + 32 - pos);
  33440. +  if (pos < buf) abort();
  33441. +}
  33442. +
  33443. +/* Insert N lines at vpos VPOS.  If N is negative, delete -N lines.  */
  33444. +
  33445. +Ains_del_lines (vpos, n)
  33446. +     int vpos, n;
  33447. +{
  33448. +  register int i = n > 0 ? n : -n;
  33449. +  char buf[32], *pos = buf + 32;
  33450. +
  33451. +  if (n > 0)
  33452. +    {
  33453. +      i = n;
  33454. +      *--pos = 'L';
  33455. +    }
  33456. +  else
  33457. +    {
  33458. +      i = -n;
  33459. +      *--pos = 'M';
  33460. +    }
  33461. +  if (vpos + i >= screen_height) return;
  33462. +
  33463. +  move_cursor (vpos, 0);
  33464. +  background_highlight ();
  33465. +  addnum(pos, i);
  33466. +  *--pos = 0x9b;
  33467. +  emacs_output(pos, buf + 32 - pos);
  33468. +  if (pos < buf) abort();
  33469. +}
  33470. +
  33471. +Acalculate_costs (extra, costvec, ncostvec)
  33472. +     int extra;
  33473. +     int *costvec, *ncostvec;
  33474. +{
  33475. +  CalcLID(2, 40, extra, 0, costvec, ncostvec);
  33476. +}
  33477. +
  33478. +Aset_terminal_window (size)
  33479. +int size;
  33480. +{
  33481. +}
  33482. +
  33483. +
  33484. +amiga_term_init ()
  33485. +{
  33486. +  must_write_spaces = FALSE;
  33487. +  min_padding_speed = 0;
  33488. +  memory_below_screen = FALSE;
  33489. +  meta_key = TRUE;
  33490. +  scroll_region_ok = FALSE;
  33491. +  line_ins_del_ok = FALSE;    /* much cleaner display when FALSE  -ch3/19/93. */
  33492. +  char_ins_del_ok = FALSE;
  33493. +  fast_clear_end_of_line = TRUE;
  33494. +  no_redraw_on_reenter = FALSE;
  33495. +
  33496. +  clear_screen_hook = Aclear_screen;
  33497. +  clear_end_of_line_hook = Aclear_end_of_line;
  33498. +  clear_to_end_hook = Aclear_to_end;
  33499. +  ins_del_lines_hook = Ains_del_lines;
  33500. +  change_line_highlight_hook = Achange_line_highlight;
  33501. +  insert_chars_hook = Ainsert_chars;
  33502. +  output_chars_hook = Aoutput_chars;
  33503. +  delete_chars_hook = Adelete_chars;
  33504. +  ring_bell_hook = Aring_bell;
  33505. +  reset_terminal_modes_hook = Areset_terminal_modes;
  33506. +  set_terminal_modes_hook = Aset_terminal_modes;
  33507. +  update_begin_hook = Aupdate_begin;
  33508. +  update_end_hook = Aupdate_end;
  33509. +  set_terminal_window_hook = Aset_terminal_window;
  33510. +  move_cursor_hook = Amove_cursor;
  33511. +  reassert_line_highlight_hook = Areassert_line_highlight;
  33512. +
  33513. +  dont_calculate_costs = 1;
  33514. +  calculate_costs_hook = Acalculate_costs;
  33515. +
  33516. +  /* Get screen size from system, or else from somewhere ...  */
  33517. +  get_screen_size (&screen_width, &screen_height);
  33518. +  /* Random defaults to avoid any problems */
  33519. +  if (screen_width <= 0) screen_width = 80;
  33520. +  if (screen_height <= 0) screen_height = 23;
  33521. +
  33522. +  init_baud_rate ();
  33523. +}
  33524. diff -rup --new-file baseline/fsf/emacs18/src/amiga_tty.c amiga/fsf/emacs18/src/amiga_tty.c
  33525. --- baseline/fsf/emacs18/src/amiga_tty.c    Wed Dec 31 17:00:00 1969
  33526. +++ amiga/fsf/emacs18/src/amiga_tty.c    Sat Sep 28 00:00:00 1996
  33527. @@ -0,0 +1,305 @@
  33528. +#include "config.h"
  33529. +#undef NULL
  33530. +#include "lisp.h"
  33531. +#include "termchar.h"
  33532. +
  33533. +#include <stdio.h>
  33534. +#include <errno.h>
  33535. +#include <internal/files.h>
  33536. +#include <internal/vars.h>
  33537. +
  33538. +#undef LONGBITS
  33539. +
  33540. +#include <exec/types.h>
  33541. +#include <dos/dos.h>
  33542. +#include <proto/exec.h>
  33543. +
  33544. +#include "amiga.h"
  33545. +#include "termhooks.h"
  33546. +
  33547. +static int term_initialised;
  33548. +ULONG inputsig;
  33549. +
  33550. +/* A few tty system dependent routines unused on the Amiga */
  33551. +
  33552. +setpgrp_of_tty(int pid) {}
  33553. +init_sigio() {}
  33554. +reset_sigio() {}
  33555. +request_sigio() {}
  33556. +unrequest_sigio() {}
  33557. +
  33558. +/* Return nonzero if safe to use tabs in output.
  33559. +   At the time this is called, init_sys_modes has not been done yet.  */
  33560. +
  33561. +tabs_safe_p()
  33562. +{
  33563. +  if (noninteractive)
  33564. +    return 1;
  33565. +
  33566. +  return 0;            /* Not safe on Amiga !? */
  33567. +}
  33568. +
  33569. +/* Get terminal size from system.
  33570. +   Store number of lines into *heightp and width into *widthp.
  33571. +   If zero or a negative number is stored, the value is not valid.  */
  33572. +
  33573. +get_screen_size (widthp, heightp)
  33574. +     int *widthp, *heightp;
  33575. +{
  33576. +    if (term_initialised && !inhibit_window_system)
  33577. +    get_window_size(widthp, heightp);
  33578. +    else /* We don't known what size the terminal is */
  33579. +    {
  33580. +    *widthp = 0;
  33581. +    *heightp = 0;
  33582. +    }
  33583. +}
  33584. +
  33585. +init_baud_rate ()
  33586. +{
  33587. +  if (noninteractive || !term_initialised) baud_rate = 1200;
  33588. +  else if (!inhibit_window_system) baud_rate = 38400;
  33589. +  else baud_rate = serial_baud_rate();
  33590. +}
  33591. +
  33592. +void check_intuition ()
  33593. +{
  33594. +    if (noninteractive || inhibit_window_system)
  33595. +        error ("You aren't using a window.");
  33596. +}
  33597. +
  33598. +#define TTYBUFSIZE 256        /* Same size as kbd_buffer */
  33599. +static char ttybuf[TTYBUFSIZE];
  33600. +static int tty_count;
  33601. +#define TTYPUT(c) { if (tty_count < TTYBUFSIZE) ttybuf[tty_count++] = c; }
  33602. +
  33603. +static int interrupt_char;
  33604. +
  33605. +void enque(unsigned int c, int meta)
  33606. +/* place input keys in keyboard buffer
  33607. +   If high bit is set, precede character with ^Q (hack).
  33608. +   If meta is true, set high bit.
  33609. +   If both the high bit & meta are true, we have a problem. Ignore it.
  33610. +   If c == AMIGASEQ (256) enqueue the amiga sequence introducer (C-x C-^)
  33611. +*/
  33612. +{
  33613. +  /* Hack CSI to be AMIGASEQ (to allow defining function keys, etc) */
  33614. +  if (c == 0233 || c == AMIGASEQ)
  33615. +    {
  33616. +      TTYPUT('x' & 037);
  33617. +      TTYPUT('^' & 037);
  33618. +    }
  33619. +  else if (c >= 0200)    /* Special character, precede with ^Q */
  33620. +    {
  33621. +      TTYPUT('q' & 037);
  33622. +      TTYPUT(c);
  33623. +    }
  33624. +  else
  33625. +    {
  33626. +      if (meta) c |= 0200;
  33627. +      if (c == interrupt_char) Signal(_us, SIGBREAKF_CTRL_C);
  33628. +      else TTYPUT(c);
  33629. +    }
  33630. +}
  33631. +
  33632. +int get_ttycount(void)
  33633. +{
  33634. +  return tty_count;
  33635. +}
  33636. +
  33637. +init_sys_modes ()
  33638. +{
  33639. +  extern int quit_char;
  33640. +
  33641. +  if (noninteractive)
  33642. +    return;
  33643. +
  33644. +  if (inhibit_window_system) clear_screen();
  33645. +
  33646. +  interrupt_char = quit_char;
  33647. +  if (!inhibit_window_system) setup_intchar(interrupt_char);
  33648. +}
  33649. +
  33650. +reset_sys_modes ()
  33651. +{
  33652. +  if (noninteractive)
  33653. +    {
  33654. +      fflush (stdout);
  33655. +      return;
  33656. +    }
  33657. +  move_cursor (screen_height - 1, 0);
  33658. +  clear_end_of_line (screen_width);
  33659. +  /* clear_end_of_line may move the cursor */
  33660. +  move_cursor (screen_height - 1, 0);
  33661. +}
  33662. +
  33663. +void amiga_consume_input(void)
  33664. +{
  33665. +  extern int this_command_key_count;
  33666. +  int force = this_command_key_count == 0;
  33667. +  /* If force is TRUE & some non-keyboard (eg mouse events) input is pending,
  33668. +     insert the appropriate magic sequence in the input stream */
  33669. +
  33670. +  if (term_initialised)
  33671. +    {
  33672. +      if (!inhibit_window_system) check_window(force);
  33673. +      else check_serial(force);
  33674. +      check_arexx(force, TRUE);
  33675. +    }
  33676. +}
  33677. +
  33678. +discard_tty_input ()
  33679. +{
  33680. +  if (noninteractive)
  33681. +    return;
  33682. +
  33683. +  amiga_consume_input();
  33684. +  tty_count = 0;
  33685. +  chkabort();
  33686. +}
  33687. +
  33688. +/* Code for the fd describing the emacs input (terminal or window) */
  33689. +
  33690. +static ULONG __regargs ttyin_select_start(void *userinfo, int rd, int wr)
  33691. +{
  33692. +  if (!inhibit_window_system) force_window();
  33693. +
  33694. +  return tty_count ? -1 : inputsig;
  33695. +}
  33696. +
  33697. +static void __regargs ttyin_select_poll(void *userinfo, int *rd, int *wr)
  33698. +{
  33699. +  amiga_consume_input();
  33700. +  if (!tty_count) *rd = 0;
  33701. +}
  33702. +
  33703. +static int __regargs ttyin_read(void *userinfo, void *buffer, unsigned int length)
  33704. +{
  33705. +  amiga_consume_input();
  33706. +  if (length > tty_count) length = tty_count;
  33707. +  memcpy(buffer, ttybuf, length);
  33708. +  tty_count -= length;
  33709. +  if (tty_count) memmove(ttybuf, ttybuf + length, tty_count - length);
  33710. +
  33711. +  return (int)length;
  33712. +}
  33713. +
  33714. +static int __regargs ttyin_write(void *userinfo, void *buffer, unsigned int length)
  33715. +{
  33716. +  errno = EACCES;
  33717. +  return -1;
  33718. +}
  33719. +
  33720. +static int __regargs ttyin_lseek(void *userinfo, long rpos, int mode)
  33721. +{
  33722. +  errno = ESPIPE;
  33723. +  return -1;
  33724. +}
  33725. +
  33726. +static int __regargs ttyin_close(void *userinfo, int internal)
  33727. +{
  33728. +  return 0;
  33729. +}
  33730. +
  33731. +static int __regargs ttyin_ioctl(void *userinfo, int request, void *data)
  33732. +{
  33733. +  errno = EINVAL;
  33734. +  return -1;
  33735. +}
  33736. +
  33737. +#define CBUFSIZE 1024
  33738. +#undef fwrite
  33739. +#undef fflush
  33740. +
  33741. +char cbuffer[CBUFSIZE + 16], *cbuffer_pos;
  33742. +
  33743. +int emacs_fflush(FILE *f)
  33744. +{
  33745. +    if (noninteractive || f != stdout) return fflush(f);
  33746. +    else
  33747. +    {
  33748. +    int len;
  33749. +
  33750. +    len = cbuffer_pos - cbuffer;
  33751. +    if (term_initialised)
  33752. +        if (!inhibit_window_system) screen_puts(cbuffer, len);
  33753. +        else serial_puts(cbuffer, len);
  33754. +    if (termscript) fwrite (cbuffer, 1, len, termscript);
  33755. +    cbuffer_pos = cbuffer;
  33756. +
  33757. +    return 0;
  33758. +    }
  33759. +}
  33760. +
  33761. +void emacs_putchar(int c)
  33762. +{
  33763. +    if (cbuffer_pos >= cbuffer + CBUFSIZE) emacs_fflush(stdout);
  33764. +    *cbuffer_pos++ = c;
  33765. +}
  33766. +
  33767. +void emacs_output(char *str, int size)
  33768. +{
  33769. +    if (cbuffer_pos + size > cbuffer + CBUFSIZE) emacs_fflush(stdout);
  33770. +    if (size > CBUFSIZE)
  33771. +    {
  33772. +    if (term_initialised)
  33773. +        if (!inhibit_window_system) screen_puts(str, size);
  33774. +        else serial_puts(str, size);
  33775. +    }
  33776. +    else
  33777. +    {
  33778. +    memcpy(cbuffer_pos, str, size);
  33779. +    cbuffer_pos += size;
  33780. +    }
  33781. +}
  33782. +
  33783. +void emacs_fwrite(char *str, unsigned int nblocks, unsigned int len, FILE *f)
  33784. +{
  33785. +    if (noninteractive || f != stdout) fwrite (str, nblocks, len, f);
  33786. +    else
  33787. +    {
  33788. +    unsigned int size;
  33789. +
  33790. +    if (nblocks == 1) size = len; /* Emacs always uses 1 "block" */
  33791. +    else size = nblocks * len;
  33792. +
  33793. +    emacs_output(str, size);
  33794. +    }
  33795. +}
  33796. +
  33797. +void syms_of_amiga_tty(void)
  33798. +{
  33799. +  syms_of_amiga_screen();
  33800. +  syms_of_amiga_rexx();
  33801. +}
  33802. +
  33803. +void init_amiga_tty()
  33804. +{
  33805. +  inputsig = 0;
  33806. +  term_initialised = FALSE;
  33807. +  init_amiga_rexx();
  33808. +}
  33809. +
  33810. +void cleanup_amiga_tty()
  33811. +{
  33812. +  cleanup_amiga_rexx();
  33813. +  cleanup_amiga_serial();
  33814. +  cleanup_amiga_screen();
  33815. +}
  33816. +
  33817. +void early_amiga_tty()
  33818. +{
  33819. +  cbuffer_pos = cbuffer;
  33820. +  tty_count = 0;
  33821. +}
  33822. +
  33823. +void amiga_term_open(void)
  33824. +{
  33825. +  inhibit_window_system ? init_amiga_serial() : init_amiga_screen();
  33826. +  close(0);
  33827. +  if (_alloc_fd((void *)1, FI_READ, ttyin_select_start, ttyin_select_poll, ttyin_read,
  33828. +        ttyin_write, ttyin_lseek, ttyin_close, ttyin_ioctl) == 0)
  33829. +    term_initialised = TRUE;
  33830. +  else _fail("Failed to initialise I/O, no memory ?");
  33831. +}
  33832. +
  33833. diff -rup --new-file baseline/fsf/emacs18/src/buffer.c amiga/fsf/emacs18/src/buffer.c
  33834. --- baseline/fsf/emacs18/src/buffer.c    Wed May 13 12:39:33 1992
  33835. +++ amiga/fsf/emacs18/src/buffer.c    Sat Sep 28 00:00:00 1996
  33836. @@ -1137,7 +1137,11 @@ init_buffer ()
  33837.  #ifndef VMS
  33838.    /* Maybe this should really use some standard subroutine
  33839.       whose definition is filename syntax dependent.  */
  33840. -  if (buf[strlen (buf) - 1] != '/')
  33841. +  if (buf[strlen (buf) - 1] != '/'
  33842. +#ifdef AMIGA
  33843. +&& buf[strlen (buf) -1] != ':'
  33844. +#endif /*AMIGA  */
  33845. +)
  33846.      strcat (buf, "/");
  33847.  #endif /* not VMS */
  33848.    current_buffer->directory = build_string (buf);
  33849. diff -rup --new-file baseline/fsf/emacs18/src/callproc.c amiga/fsf/emacs18/src/callproc.c
  33850. --- baseline/fsf/emacs18/src/callproc.c    Sat Jul 11 20:26:01 1992
  33851. +++ amiga/fsf/emacs18/src/callproc.c    Sat Sep 28 00:00:00 1996
  33852. @@ -124,11 +124,7 @@ If you quit, the process is killed with 
  33853.    CHECK_STRING (args[0], 0);
  33854.  
  33855.    if (nargs <= 1 || NULL (args[1]))
  33856. -#ifdef VMS
  33857. -    args[1] = build_string ("NLA0:");
  33858. -#else
  33859. -    args[1] = build_string ("/dev/null");
  33860. -#endif /* not VMS */
  33861. +    args[1] = build_string (PATH_NULL);
  33862.    else
  33863.      args[1] = Fexpand_file_name (args[1], current_buffer->directory);
  33864.  
  33865. @@ -177,10 +173,9 @@ If you quit, the process is killed with 
  33866.  
  33867.    if (XTYPE (buffer) == Lisp_Int)
  33868.  #ifdef VMS
  33869. -    fd[1] = open ("NLA0:", 0), fd[0] = -1;
  33870. +    fd[1] = open (PATH_NULL, 0), fd[0] = -1;
  33871.  #else
  33872. -    fd[1] = open ("/dev/null", O_WRONLY), fd[0] = -1;
  33873. -#endif /* not VMS */
  33874. +    fd[1] = open (PATH_NULL, O_WRONLY), fd[0] = -1;
  33875.    else
  33876.      {
  33877.        pipe (fd);
  33878. @@ -193,6 +188,22 @@ If you quit, the process is killed with 
  33879.    synch_process_death = 0;
  33880.    synch_process_retcode = 0;
  33881.  
  33882. +#ifdef AMIGA
  33883. +  {
  33884. +    register unsigned char *temp;
  33885. +
  33886. +    if (XTYPE (current_buffer->directory) == Lisp_String)
  33887. +      {
  33888. +    register int i;
  33889. +
  33890. +    i = XSTRING (current_buffer->directory)->size;
  33891. +    temp = (unsigned char *) alloca (i + 1);
  33892. +    bcopy (XSTRING (current_buffer->directory)->data, temp, i);
  33893. +    temp[i] = 0;
  33894. +      }
  33895. +    pid = exec(new_argv[0], new_argv, filefd, fd[1], temp, amiga_process_stack_size);
  33896. +  }
  33897. +#else  
  33898.    {
  33899.      /* child_setup must clobber environ in systems with true vfork.
  33900.         Protect it from permanent change.  */
  33901. @@ -230,6 +241,7 @@ If you quit, the process is killed with 
  33902.      close (filefd);
  33903.      close (fd1);
  33904.    }
  33905. +#endif /* not AMIGA */
  33906.  
  33907.    if (pid < 0)
  33908.      {
  33909. @@ -302,7 +314,7 @@ If you quit, the process is killed with 
  33910.    register Lisp_Object filename_string, start, end, status;
  33911.    char tempfile[20];
  33912.  
  33913. -  strcpy (tempfile, "/tmp/emacsXXXXXX");
  33914. +  strcpy (tempfile, PATH_TEMP);
  33915.    mktemp (tempfile);
  33916.  
  33917.    filename_string = build_string (tempfile);
  33918. @@ -318,6 +330,7 @@ If you quit, the process is killed with 
  33919.    unlink (tempfile);
  33920.    return status;
  33921.  }
  33922. +#ifndef AMIGA
  33923.  
  33924.  /* This is the last thing run in a newly forked inferior
  33925.     either synchronous or asynchronous.
  33926. @@ -425,6 +438,7 @@ child_setup (in, out, err, new_argv, env
  33927.    write (1, new_argv[0], strlen (new_argv[0]));
  33928.    _exit (1);
  33929.  }
  33930. +#endif /* not AMIGA */
  33931.  
  33932.  init_callproc ()
  33933.  {
  33934. @@ -437,6 +451,15 @@ init_callproc ()
  33935.    Vexec_path = decode_env_path (0, PATH_EXEC);
  33936.    Vexec_directory = Ffile_name_as_directory (Fcar (Vexec_path));
  33937.    Vexec_path = nconc2 (decode_env_path ("PATH", ""), Vexec_path);
  33938. +#ifdef AMIGA
  33939. +  {
  33940. +    char *amiga_path(), *apath = amiga_path();
  33941. +
  33942. +    Vexec_path = nconc2 (decode_env_path (0, apath), Vexec_path);
  33943. +    Vexec_path = nconc2 (decode_env_path (0, "GNUEmacs:c"), Vexec_path);
  33944. +    free(apath);
  33945. +  }
  33946. +#endif  
  33947.  
  33948.    execdir = Fdirectory_file_name (Vexec_directory);
  33949.    if (access (XSTRING (execdir)->data, 0) < 0)
  33950. @@ -447,7 +470,7 @@ init_callproc ()
  33951.      }
  33952.  
  33953.    sh = (char *) egetenv ("SHELL");
  33954. -  Vshell_file_name = build_string (sh ? sh : "/bin/sh");
  33955. +  Vshell_file_name = build_string (sh ? sh : PATH_SHELL);
  33956.  
  33957.  #ifndef MAINTAIN_ENVIRONMENT
  33958.    /* The equivalent of this operation was done
  33959. diff -rup --new-file baseline/fsf/emacs18/src/dired.c amiga/fsf/emacs18/src/dired.c
  33960. --- baseline/fsf/emacs18/src/dired.c    Sun Mar 22 21:16:41 1992
  33961. +++ amiga/fsf/emacs18/src/dired.c    Sat Sep 28 00:00:00 1996
  33962. @@ -385,7 +385,11 @@ file_name_completion_stat (dirname, dp, 
  33963.  
  33964.    bcopy (XSTRING (dirname)->data, fullname, pos);
  33965.  #ifndef VMS
  33966. +#ifdef AMIGA
  33967. +  if ((fullname[pos - 1] != '/')&&(fullname[pos - 1] != ':'))
  33968. +#else
  33969.    if (fullname[pos - 1] != '/')
  33970. +#endif
  33971.      fullname[pos++] = '/';
  33972.  #endif
  33973.  
  33974. diff -rup --new-file baseline/fsf/emacs18/src/dispnew.c amiga/fsf/emacs18/src/dispnew.c
  33975. --- baseline/fsf/emacs18/src/dispnew.c    Fri Jul 24 12:31:36 1992
  33976. +++ amiga/fsf/emacs18/src/dispnew.c    Sat Sep 28 00:00:00 1996
  33977. @@ -674,11 +674,27 @@ update_screen (force, inhibit_hairy_id)
  33978.    int preempt_count = baud_rate / 2400 + 1;
  33979.    extern input_pending;
  33980.  
  33981. +  start_count(0);
  33982. +
  33983.    if (screen_height == 0) abort (); /* Some bug zeros some core */
  33984.  
  33985.    if (force_redisplay)
  33986.      force = 1;
  33987.  
  33988. +#ifdef FAST_DISPLAY
  33989. +  /* Don't compute for i/d line if just want cursor motion. */
  33990. +  /* Don't allow preemption, etc either */
  33991. +  for (i = 0; i < screen_height; i++)
  33992. +    if (new_screen->enable[i])
  33993. +      break;
  33994. +
  33995. +  if (i >= screen_height)
  33996. +    {
  33997. +      update_begin();
  33998. +      goto update_done;
  33999. +    }
  34000. +#endif
  34001. +
  34002.    if (!force)
  34003.      detect_input_pending ();
  34004.    if (!force
  34005. @@ -695,10 +711,12 @@ update_screen (force, inhibit_hairy_id)
  34006.    if (!line_ins_del_ok)
  34007.      inhibit_hairy_id = 1;
  34008.  
  34009. +#ifndef FAST_DISPLAY
  34010.    /* Don't compute for i/d line if just want cursor motion. */
  34011.    for (i = 0; i < screen_height; i++)
  34012. -    if (new_screen->enable)
  34013. +    if (new_screen->enable[i])
  34014.        break;
  34015. +#endif
  34016.  
  34017.    /* Try doing i/d line, if not yet inhibited.  */
  34018.    if (!inhibit_hairy_id && i < screen_height)
  34019. @@ -742,6 +760,9 @@ update_screen (force, inhibit_hairy_id)
  34020.        update_line (i);
  34021.      }
  34022.      }
  34023. +#ifdef FAST_DISPLAY
  34024. +update_done:
  34025. +#endif
  34026.    pause = (i < screen_height - 1) ? i + 1 : 0;
  34027.  
  34028.    /* Now just clean up termcap drivers and set cursor, etc.  */
  34029. @@ -781,6 +802,7 @@ update_screen (force, inhibit_hairy_id)
  34030.      }
  34031.  
  34032.    bzero (new_screen->enable, screen_height);
  34033. +  stop_count(0);
  34034.    return pause;
  34035.  }
  34036.  
  34037. @@ -894,6 +916,57 @@ update_line (vpos)
  34038.    else
  34039.      reassert_line_highlight (new_screen->highlight[vpos], vpos);
  34040.  
  34041. +#ifdef FAST_DISPLAY
  34042. +  if (current_screen->enable[vpos])
  34043. +  {
  34044. +      obody = current_screen->contents[vpos];
  34045. +      olen = current_screen->used[vpos];
  34046. +  }
  34047. +  else olen = 0;
  34048. +
  34049. +  nbody = new_screen->contents[vpos];
  34050. +  nlen = new_screen->used[vpos];
  34051. +  
  34052. +  /* Pretend trailing spaces are not there at all,
  34053. +     unless for one reason or another we must write all spaces.  */
  34054. +  /* We know that the previous character byte contains 0.  */
  34055. +  if (! new_screen->highlight[vpos])
  34056. +  {
  34057. +      if (!must_write_spaces)
  34058. +      while (nbody[nlen - 1] == ' ')
  34059. +          nlen--;
  34060. +  }
  34061. +  else
  34062. +  {
  34063. +      /* For an inverse-video line, give it extra trailing spaces
  34064. +     all the way to the screen edge
  34065. +     so that the reverse video extends all the way across.  */
  34066. +      while (nlen < screen_width - 1)
  34067. +      nbody[nlen++] = ' ';
  34068. +  }
  34069. +  
  34070. +  while (olen > 0 && nlen > 0 && *obody == *nbody)
  34071. +  {
  34072. +      olen--; nlen--; obody++; nbody++;
  34073. +  }
  34074. +  if (olen > 0 || nlen > 0)
  34075. +      move_cursor (vpos, nbody - new_screen->contents[vpos]);
  34076. +  if (nlen > 0) output_chars (nbody, nlen);
  34077. +  
  34078. +  if (olen > nlen && new_screen->used[vpos] != screen_width)
  34079. +      clear_end_of_line(current_screen->used[vpos]);
  34080. +  /* Exchange contents between current_screen and new_screen.  */
  34081. +  temp = new_screen->contents[vpos];
  34082. +  new_screen->contents[vpos] = current_screen->contents[vpos];
  34083. +  current_screen->contents[vpos] = temp;
  34084. +  
  34085. +  /* One way or another, this will enable the line being updated.  */
  34086. +  current_screen->enable[vpos] = 1;
  34087. +  current_screen->used[vpos] = new_screen->used[vpos];
  34088. +  current_screen->highlight[vpos] = new_screen->highlight[vpos];
  34089. +
  34090. +#else /* not FAST_DISPLAY */
  34091. +
  34092.    /* ??? */
  34093.    if (! current_screen->enable[vpos])
  34094.      {
  34095. @@ -1172,6 +1245,7 @@ update_line (vpos)
  34096.    temp = new_screen->contents[vpos];
  34097.    new_screen->contents[vpos] = current_screen->contents[vpos];
  34098.    current_screen->contents[vpos] = temp;
  34099. +#endif /* not FAST_DISPLAY */
  34100.  }
  34101.  
  34102.  count_blanks (str)
  34103. @@ -1577,8 +1651,18 @@ init_display ()
  34104.    cursor_in_echo_area = 0;
  34105.    terminal_type = (char *) 0;
  34106.  
  34107. +#ifdef AMIGA
  34108. +  amiga_term_open();
  34109. +#endif
  34110.    if (!inhibit_window_system)
  34111.      {
  34112. +#ifdef AMIGA
  34113. +      amiga_term_init();
  34114. +      /* Using Intuition V2.04 */
  34115. +      Vwindow_system = intern ("intuition");
  34116. +      Vwindow_system_version = make_number (2);
  34117. +      goto term_init_done;
  34118. +#endif /* AMIGA */
  34119.  #ifdef HAVE_X_WINDOWS
  34120.        extern char *alternate_display;
  34121.        char *disp = (char *) egetenv ("DISPLAY");
  34122. diff -rup --new-file baseline/fsf/emacs18/src/doc.c amiga/fsf/emacs18/src/doc.c
  34123. --- baseline/fsf/emacs18/src/doc.c    Tue Jan  8 10:25:38 1991
  34124. +++ amiga/fsf/emacs18/src/doc.c    Sat Sep 28 00:00:00 1996
  34125. @@ -21,6 +21,7 @@ the Free Software Foundation, 675 Mass A
  34126.  #include "config.h"
  34127.  #include "lisp.h"
  34128.  #include "buffer.h"
  34129. +#include "paths.h"
  34130.  
  34131.  #include <sys/types.h>
  34132.  #include <sys/file.h>    /* Must be after sys/types.h for USG and BSD4_1*/
  34133. @@ -188,7 +189,7 @@ when doc strings are referred to later i
  34134.  
  34135.  #ifndef CANNOT_DUMP
  34136.    name = (char *) alloca (XSTRING (filename)->size + 8);
  34137. -  strcpy (name, "../etc/");
  34138. +  strcpy (name, RELPATH_DOC);
  34139.  #else /* CANNOT_DUMP */
  34140.    CHECK_STRING (Vexec_directory, 0);
  34141.    name = (char *) alloca (XSTRING (filename)->size +
  34142. diff -rup --new-file baseline/fsf/emacs18/src/dostrip.c amiga/fsf/emacs18/src/dostrip.c
  34143. --- baseline/fsf/emacs18/src/dostrip.c    Wed Dec 31 17:00:00 1969
  34144. +++ amiga/fsf/emacs18/src/dostrip.c    Sat Sep 28 00:00:00 1996
  34145. @@ -0,0 +1,23 @@
  34146. +#include <stdio.h>
  34147. +
  34148. +#define SIZE 2048
  34149. +
  34150. +main(int argc, char **argv)
  34151. +{
  34152. +    char buf[SIZE];
  34153. +
  34154. +    buf[SIZE - 1] = 0;
  34155. +    while (fgets(buf, SIZE - 1, stdin))
  34156. +    {
  34157. +    if (buf[0] != '#')
  34158. +    {
  34159. +        char *p = buf, *e;
  34160. +
  34161. +        while (*p && *p == ' ') p++;
  34162. +        e = p + strlen(p);
  34163. +        while (e > p && (e[-1] == ' ' || e[-1] == '\t' || e[-1] == '\n')) e--;
  34164. +        *e = '\0';
  34165. +        if (*p) puts(p);
  34166. +    }
  34167. +    }
  34168. +}
  34169. diff -rup --new-file baseline/fsf/emacs18/src/emacs.c amiga/fsf/emacs18/src/emacs.c
  34170. --- baseline/fsf/emacs18/src/emacs.c    Fri Oct 16 20:51:00 1992
  34171. +++ amiga/fsf/emacs18/src/emacs.c    Sat Sep 28 00:00:00 1996
  34172. @@ -78,6 +78,10 @@ the Free Software Foundation, 675 Mass A
  34173.  #endif
  34174.  #endif
  34175.  
  34176. +#ifdef AMIGA_DUMP
  34177. +#define HAVE_SHM        /* Simplifies the ifdefs */
  34178. +#endif
  34179. +
  34180.  #ifndef O_RDWR
  34181.  #define O_RDWR 2
  34182.  #endif
  34183. @@ -323,6 +327,7 @@ main (argc, argv, envp)
  34184.    xargc = argc;
  34185.  #endif
  34186.  
  34187. +#ifndef AMIGA
  34188.  /* Handle the -t switch, which specifies filename to use as terminal */
  34189.    if (skip_args + 2 < argc && !strcmp (argv[skip_args + 1], "-t"))
  34190.      {
  34191. @@ -336,6 +341,7 @@ main (argc, argv, envp)
  34192.        inhibit_window_system = 1;    /* -t => -nw */
  34193.  #endif
  34194.      }
  34195. +#endif
  34196.  #ifdef HAVE_X_WINDOWS
  34197.  /* Handle the -d switch, which means use a different display for X */
  34198.    if (skip_args + 2 < argc && (!strcmp (argv[skip_args + 1], "-d") ||
  34199. @@ -717,7 +723,11 @@ Take symbols from SYMFILE (presumably th
  34200.  #ifdef VMS
  34201.  #define SEPCHAR ','
  34202.  #else
  34203. +#ifdef AMIGA            /* Can't use : on Amiga */
  34204. +#define SEPCHAR ','
  34205. +#else
  34206.  #define SEPCHAR ':'
  34207. +#endif
  34208.  #endif
  34209.  
  34210.  Lisp_Object
  34211. diff -rup --new-file baseline/fsf/emacs18/src/exec.c amiga/fsf/emacs18/src/exec.c
  34212. --- baseline/fsf/emacs18/src/exec.c    Wed Dec 31 17:00:00 1969
  34213. +++ amiga/fsf/emacs18/src/exec.c    Sat Sep 28 00:00:00 1996
  34214. @@ -0,0 +1,138 @@
  34215. +#include "amiga.h"
  34216. +#include "processes.h"
  34217. +#include <amiga/ioctl.h>
  34218. +#include <exec/memory.h>
  34219. +#include <dos/dosextens.h>
  34220. +#include <dos/dostags.h>
  34221. +#include <string.h>
  34222. +
  34223. +int eexec(char *program, char **argv, int input, int output, int error,
  34224. +      char *dir, int stacksize)
  34225. +/* input = -1 -> inherit Input()
  34226. +   output = -1 -> inherit Output()
  34227. +   error = -1 -> inherit pr_CES
  34228. +   error = -2 -> stderr = stdout */
  34229. +{
  34230. +  int index, comsize, close_input, close_output, close_error;
  34231. +  char *combuf, *bp;
  34232. +  BPTR in, out, err, dirlock;
  34233. +  int _pseudo_close(int fd);
  34234. +
  34235. +  comsize = 256;
  34236. +  combuf = malloc(comsize);
  34237. +
  34238. +  if (input == -1)
  34239. +    {
  34240. +      in = Input();
  34241. +      close_input = FALSE;
  34242. +    }
  34243. +  else
  34244. +    {
  34245. +      if (ioctl(input, _AMIGA_GET_FH, &in) == -1) in = 0;
  34246. +      close_input = TRUE;
  34247. +      _pseudo_close(input);
  34248. +    }
  34249. +
  34250. +  if (output == -1)
  34251. +    {
  34252. +      out = Output();
  34253. +      close_output = FALSE;
  34254. +    }
  34255. +  else
  34256. +    {
  34257. +      if (ioctl(output, _AMIGA_GET_FH, &out) == -1) out = 0;
  34258. +      close_output = out != in;
  34259. +      _pseudo_close(output);
  34260. +    }
  34261. +
  34262. +  if (error == -1)
  34263. +    {
  34264. +      err = _us->pr_CES;
  34265. +      close_error = FALSE;
  34266. +    }
  34267. +  else if (error == -2)
  34268. +    {
  34269. +      err = out;
  34270. +      close_error = FALSE;
  34271. +    }
  34272. +  else
  34273. +    {
  34274. +      if (ioctl(error, _AMIGA_GET_FH, &err) == -1) err = 0;
  34275. +      close_error = err != out && err != in;
  34276. +      _pseudo_close(error);
  34277. +    }
  34278. +
  34279. +  /* pr_CES is not always defined */
  34280. +  if (in && out && (err || error == -1))
  34281. +    if (combuf)
  34282. +      {
  34283. +    bp = combuf;
  34284. +    for (index = 0; argv[index] != 0; index++)
  34285. +      {
  34286. +        /* Use program as argv[0]. This loses some information, but ... */
  34287. +        char *arg = index == 0 ? program : argv[index];
  34288. +        char *s;
  34289. +        int len;
  34290. +
  34291. +        len = 3;
  34292. +        s = arg;
  34293. +        while (*s)
  34294. +          {
  34295. +        len++;
  34296. +        if (*s == '*' || *s == '"' || *s == '\n') len++;
  34297. +        s++;
  34298. +          }
  34299. +        if (bp + len + 1 >= combuf + comsize)
  34300. +          {
  34301. +        char *newbuf;
  34302. +
  34303. +        comsize += comsize + len;
  34304. +        newbuf = realloc(combuf, comsize);
  34305. +        if (!newbuf) { errno = ENOMEM; goto error; }
  34306. +        bp = newbuf + (bp - combuf);
  34307. +        combuf = newbuf;
  34308. +          }
  34309. +        *bp++ = ' ';
  34310. +        *bp++ = '"';
  34311. +        s = arg;
  34312. +        while (*s)
  34313. +          {
  34314. +        if (*s == '"' || *s == '*') *bp++ = '*';
  34315. +        else if (*s == '\n') *bp++ = '+';
  34316. +        *bp++ = *s++;
  34317. +          }
  34318. +        *bp++ = '"';
  34319. +      }
  34320. +    *bp = '\0';
  34321. +    if (dir) dirlock = Lock(dir, SHARED_LOCK);
  34322. +    else dirlock = 0;
  34323. +
  34324. +    if (dirlock || !dir)
  34325. +      {
  34326. +        int pid = _start_process(combuf, in, close_input, out, close_output,
  34327. +                     err, close_error, dirlock, stacksize);
  34328. +
  34329. +        if (pid != -1)
  34330. +          {
  34331. +        free(combuf);
  34332. +        return pid;
  34333. +          }
  34334. +      }
  34335. +    else errno = convert_oserr(IoErr());
  34336. +    if (dirlock) UnLock(dirlock);
  34337. +      }
  34338. +    else errno = ENOMEM;
  34339. +
  34340. + error:
  34341. +  if (in && close_input) Close(in);
  34342. +  if (out && close_output) Close(out);
  34343. +  if (err && close_error) Close(err);
  34344. +  if (combuf) free(combuf);
  34345. +  return -1;
  34346. +}
  34347. +
  34348. +int exec(char *program, char **argv, int input, int output, 
  34349. +      char *dir, int stacksize)
  34350. +{
  34351. +  return eexec(program, argv, input, output, -1, dir, stacksize);
  34352. +}
  34353. diff -rup --new-file baseline/fsf/emacs18/src/fileio.c amiga/fsf/emacs18/src/fileio.c
  34354. --- baseline/fsf/emacs18/src/fileio.c    Tue Oct  6 15:02:20 1992
  34355. +++ amiga/fsf/emacs18/src/fileio.c    Sat Sep 28 00:00:00 1996
  34356. @@ -147,6 +147,9 @@ on VMS, perhaps instead a string ending 
  34357.    p = beg + XSTRING (file)->size;
  34358.  
  34359.    while (p != beg && p[-1] != '/'
  34360. +#ifdef    AMIGA
  34361. +         && p[-1] != ':'
  34362. +#endif    /* AMIGA */
  34363.  #ifdef VMS
  34364.       && p[-1] != ':' && p[-1] != ']' && p[-1] != '>'
  34365.  #endif /* VMS */
  34366. @@ -174,6 +177,9 @@ or the entire name if it contains no sla
  34367.    end = p = beg + XSTRING (file)->size;
  34368.  
  34369.    while (p != beg && p[-1] != '/'
  34370. +#ifdef    AMIGA
  34371. +         && p[-1] != ':'
  34372. +#endif    /* AMIGA */
  34373.  #ifdef VMS
  34374.       && p[-1] != ':' && p[-1] != ']' && p[-1] != '>'
  34375.  #endif /* VMS */
  34376. @@ -248,9 +254,15 @@ file_name_as_directory (out, in)
  34377.        out[size] = '\0';
  34378.      }
  34379.  #else /* not VMS */
  34380. +#ifdef    AMIGA
  34381. +  /* AmigaOS syntax, append slash if the last char isn't a ':' or '/' */
  34382. +  if (out[size] != '/' && out[size] != ':' && size != 0)
  34383. +    strcat (out, "/");
  34384. +#else    /* not AMIGA */
  34385.    /* For Unix syntax, Append a slash if necessary */
  34386.    if (out[size] != '/')
  34387.      strcat (out, "/");
  34388. +#endif /* not AMIGA */
  34389.  #endif /* not VMS */
  34390.    return out;
  34391.  }
  34392. @@ -464,6 +476,110 @@ initial ~ is expanded.  See also the fun
  34393.       (name, defalt)
  34394.       Lisp_Object name, defalt;
  34395.  {
  34396. +#ifdef AMIGA
  34397. +  unsigned char *nm, *tilde, *newdir, *colon, *t_pos, *target;
  34398. +
  34399. +  CHECK_STRING (name, 0);
  34400. +
  34401. +  nm = XSTRING (name)->data;
  34402. +  /* Find base directory */
  34403. +  if (NULL (defalt))
  34404. +      defalt = current_buffer->directory;
  34405. +  CHECK_STRING (defalt, 1);
  34406. +  newdir = XSTRING (defalt)->data;
  34407. +
  34408. +  /* Concat newdir w/ nm and canonicalize */
  34409. +  /* newdir always contains at least the device name.
  34410. +     It is assumed canonical */
  34411. +  target = (unsigned char *)alloca(strlen(nm) + strlen(newdir) + 2);
  34412. +  file_name_as_directory (target, newdir);
  34413. +  t_pos = target + strlen(target);
  34414. +
  34415. +  while (*nm)
  34416. +  {
  34417. +      unsigned char *comp_end = nm;
  34418. +      int comp_len;
  34419. +
  34420. +      /* Find next component of path (everything upto the next /) */
  34421. +      do comp_end++; while (comp_end[0] && comp_end[-1] != '/' && comp_end[-1] != ':');
  34422. +      comp_len = comp_end - nm;
  34423. +
  34424. +      if (comp_len == 1 && nm[0] == '/' ||
  34425. +      nm[0] == '.' && nm[1] == '.' &&
  34426. +      (comp_len == 2 || comp_len == 3 && nm[2] == '/'))
  34427. +      {
  34428. +      /* Previous directory */
  34429. +      if (t_pos > target && t_pos[-1] != ':')
  34430. +      {
  34431. +          t_pos--; /* Back up over / */
  34432. +          while (t_pos > target &&
  34433. +             t_pos[-1] != ':' && t_pos[-1] != '/') t_pos--;
  34434. +      }
  34435. +      }
  34436. +      else if (comp_len == 2 && nm[0] == '.' && nm[1] == '/' ||
  34437. +           comp_len == 1 && nm[0] == '.') ; /* Ignore . */
  34438. +      else if (nm[0] == ':') /* Just keep disk name */
  34439. +      {
  34440. +      char *new_pos;
  34441. +
  34442. +      *t_pos = 0; /* Limit search for : */
  34443. +      t_pos = index(target, ':');
  34444. +      if (t_pos) t_pos++;
  34445. +      else t_pos = target;
  34446. +      }
  34447. +      else if (nm[0] == '~' || index(nm, ':'))
  34448. +      {
  34449. +      char *exp_name;
  34450. +
  34451. +      if (nm[0] == '~')
  34452. +          if (nm[1] == '/' || nm[1] == 0) /* Home directory */
  34453. +          {
  34454. +          newdir = (unsigned char *) egetenv ("HOME");
  34455. +          if (!newdir) newdir = (unsigned char *) "s:";
  34456. +          }
  34457. +          else
  34458. +          {
  34459. +          /* Handle ~ followed by user name.  */
  34460. +          char lastc = nm[comp_len - 1];
  34461. +          int len = comp_len - 1;
  34462. +
  34463. +          if (lastc == ':' || lastc == '/') len--;
  34464. +
  34465. +          /* ~name becomes name: */
  34466. +          newdir = (unsigned char *) alloca (len + 2);
  34467. +          bcopy((char *) nm + 1, newdir, len);
  34468. +          newdir[len] = ':';
  34469. +          newdir[len + 1] = 0;
  34470. +          }
  34471. +      else /* we have name: */
  34472. +      {
  34473. +          newdir = (char *)alloca(comp_len + 1);
  34474. +          bcopy(nm, newdir, comp_len);
  34475. +          newdir[comp_len] = 0;
  34476. +      }
  34477. +      exp_name = (char *)alloca(1024);
  34478. +      if (expand_path(newdir, exp_name, 1024))
  34479. +      {
  34480. +          char *colon = strchr(exp_name, ':');
  34481. +
  34482. +          /* Detect paths with multiple colons (eg from PATH:) and
  34483. +         leave them alone. They create confusion. */
  34484. +          if (!(colon && strchr(colon + 1, ':'))) newdir = exp_name;
  34485. +      }
  34486. +      target = (unsigned char *)alloca(strlen(nm) + strlen(newdir) + 2);
  34487. +      file_name_as_directory (target, newdir);
  34488. +      t_pos = target + strlen(target);
  34489. +      }
  34490. +      else /* Copy component */
  34491. +      {
  34492. +      bcopy(nm, t_pos, comp_len);
  34493. +      t_pos += comp_len;
  34494. +      }
  34495. +
  34496. +      nm = comp_end;
  34497. +  }
  34498. +  return make_string (target, t_pos - target);
  34499. +#else /* not AMIGA */
  34500.    unsigned char *nm;
  34501.    
  34502.    register unsigned char *newdir, *p, *o;
  34503. @@ -795,6 +911,7 @@ initial ~ is expanded.  See also the fun
  34504.      }
  34505.  
  34506.    return make_string (target, o - target);
  34507. +#endif /* not AMIGA */
  34508.  }
  34509.  
  34510.  DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name,
  34511. @@ -825,6 +942,23 @@ duplicates what expand-file-name does.")
  34512.  
  34513.    for (p = nm; p != endp; p++)
  34514.      {
  34515. +#ifdef AMIGA
  34516. +      if (p[0] == '~' && p != nm && p[-1] == '/')
  34517. +    {
  34518. +        nm = p;
  34519. +        substituted = 1;
  34520. +    }
  34521. +      else if (p[0] == ':')
  34522. +    {
  34523. +          char *p2 = p;
  34524. +      while (p2 > nm && p2[-1] != ':' && p2[-1] != '/') p2--;
  34525. +      if (p2 != nm)
  34526. +        {
  34527. +          nm = p2;
  34528. +          substituted = 1;
  34529. +        }
  34530. +    }
  34531. +#else /* not AMIGA */
  34532.        if ((p[0] == '~' ||
  34533.  #ifdef APOLLO
  34534.         /* // at start of file name is meaningful in Apollo system */
  34535. @@ -845,6 +979,7 @@ duplicates what expand-file-name does.")
  34536.        nm = p;
  34537.        substituted = 1;
  34538.      }
  34539. +#endif /* not AMIGA */
  34540.      }
  34541.  
  34542.  #ifdef VMS
  34543. @@ -1353,6 +1488,13 @@ DEFUN ("file-name-absolute-p", Ffile_nam
  34544.  
  34545.    CHECK_STRING (filename, 0);
  34546.    ptr = XSTRING (filename)->data;
  34547. +#ifdef    AMIGA
  34548. +  /* An absolute filename has a non-leading ':' in it */
  34549. +  if (*ptr != ':')
  34550. +      while (*ptr)
  34551. +      if (*ptr++ == ':') return Qt;
  34552. +  return Qnil;
  34553. +#else    /* not AMIGA */
  34554.    if (*ptr == '/' || *ptr == '~'
  34555.  #ifdef VMS
  34556.  /* ??? This criterion is probably wrong for '<'.  */
  34557. @@ -1364,6 +1506,7 @@ DEFUN ("file-name-absolute-p", Ffile_nam
  34558.      return Qt;
  34559.    else
  34560.      return Qnil;
  34561. +#endif /* not AMIGA */
  34562.  }
  34563.  
  34564.  DEFUN ("file-exists-p", Ffile_exists_p, Sfile_exists_p, 1, 1, 0,
  34565. diff -rup --new-file baseline/fsf/emacs18/src/firstfile.c amiga/fsf/emacs18/src/firstfile.c
  34566. --- baseline/fsf/emacs18/src/firstfile.c    Wed Dec 31 17:00:00 1969
  34567. +++ amiga/fsf/emacs18/src/firstfile.c    Sat Sep 28 00:00:00 1996
  34568. @@ -0,0 +1,4 @@
  34569. +int first_data = 1;
  34570. +int first_bss;
  34571. +
  34572. +void first_function() { }
  34573. diff -rup --new-file baseline/fsf/emacs18/src/indent.c amiga/fsf/emacs18/src/indent.c
  34574. --- baseline/fsf/emacs18/src/indent.c    Sat Apr 18 09:01:07 1992
  34575. +++ amiga/fsf/emacs18/src/indent.c    Sat Sep 28 00:00:00 1996
  34576. @@ -35,6 +35,11 @@ int indent_tabs_mode;
  34577.  #define min(a, b) ((a) < (b) ? (a) : (b))
  34578.  #define max(a, b) ((a) > (b) ? (a) : (b))
  34579.  
  34580. +#ifdef EIGHT_BIT
  34581. +/* Visible characters */
  34582. +extern char visible[];
  34583. +#endif
  34584. +
  34585.  /* These three values memoize the current column to avoid recalculation */
  34586.  /* Some things in set last_known_column_point to -1
  34587.    to mark the memoized value as invalid */
  34588. @@ -115,7 +120,11 @@ current_column ()
  34589.      }
  34590.  
  34591.        c = *--ptr;
  34592. +#ifdef EIGHT_BIT
  34593. +      if (visible[c])
  34594. +#else
  34595.        if (c >= 040 && c < 0177)
  34596. +#endif
  34597.      {
  34598.        col++;
  34599.      }
  34600. @@ -326,7 +335,11 @@ passed values greater than (screen-width
  34601.      }
  34602.        else if (ctl_arrow && (c < 040 || c == 0177))
  34603.          col++;
  34604. +#ifdef EIGHT_BIT
  34605. +      else if (!visible[c])
  34606. +#else
  34607.        else if (c < 040 || c >= 0177)
  34608. +#endif
  34609.          col += 3;
  34610.      }
  34611.  
  34612. @@ -373,9 +386,57 @@ compute_motion (from, fromvpos, fromhpos
  34613.        prev_hpos = hpos;
  34614.  
  34615.        c = FETCH_CHAR (pos);
  34616. +#ifdef EIGHT_BIT
  34617. +      if (visible[c])
  34618. +#else
  34619.        if (c >= 040 && c < 0177)
  34620. -    hpos++;
  34621. -      else if (c == '\t')
  34622. +#endif
  34623. +        {
  34624. +      unsigned char *p;
  34625. +      int gap_pos;
  34626. +      int maxhpos;
  34627. +
  34628. +      if (vpos == tovpos)
  34629. +        {
  34630. +          maxhpos = tohpos;
  34631. +          if (maxhpos > width) maxhpos = width;
  34632. +        }
  34633. +      else maxhpos = width;
  34634. +
  34635. +      if (pos < GPT)
  34636. +        {
  34637. +          gap_pos = GPT;
  34638. +          p = BEG_ADDR + pos;
  34639. +        }
  34640. +      else
  34641. +        {
  34642. +          gap_pos = -1;
  34643. +          p = GAP_SIZE + BEG_ADDR + pos;
  34644. +        }
  34645. +      do
  34646. +        {
  34647. +          hpos++;
  34648. +          if (hpos >= maxhpos)
  34649. +          {
  34650. +          prev_hpos = hpos - 1;
  34651. +          if (hpos >= width) goto check_hpos;
  34652. +          /* We've reached the target pos */
  34653. +          pos++;
  34654. +          goto done;
  34655. +          }
  34656. +          pos++;
  34657. +          if (pos >= to)
  34658. +            {
  34659. +          prev_hpos = hpos - 1;
  34660. +          goto done;
  34661. +            }
  34662. +          if (gap_pos == pos) p += GAP_SIZE;
  34663. +          c = *p++;
  34664. +        }
  34665. +      while (visible[c]);
  34666. +      prev_hpos = hpos;
  34667. +        }
  34668. +      if (c == '\t')
  34669.      {
  34670.        hpos += tab_width - ((hpos + tab_offset + hscroll - (hscroll > 0)
  34671.                  /* Add tab_width here to make sure positive.
  34672. @@ -433,6 +494,7 @@ compute_motion (from, fromvpos, fromhpos
  34673.        else
  34674.      hpos += (ctl_arrow && c < 0200) ? 2 : 4;
  34675.  
  34676. +check_hpos:
  34677.        /* Handle right margin.  */
  34678.        if (hpos >= width
  34679.        && (hpos > width
  34680. @@ -462,6 +524,7 @@ compute_motion (from, fromvpos, fromhpos
  34681.  
  34682.      }
  34683.      }
  34684. +  done:
  34685.  
  34686.    val_compute_motion.bufpos = pos;
  34687.    val_compute_motion.hpos = hpos;
  34688. diff -rup --new-file baseline/fsf/emacs18/src/keyboard.c amiga/fsf/emacs18/src/keyboard.c
  34689. --- baseline/fsf/emacs18/src/keyboard.c    Sat May 16 23:57:15 1992
  34690. +++ amiga/fsf/emacs18/src/keyboard.c    Sat Sep 28 00:00:00 1996
  34691. @@ -1313,7 +1313,13 @@ read_avail_input (nread)
  34692.  #endif
  34693.      fcntl (fileno (stdin), F_SETFL, 0);
  34694.  #else /* not USG */
  34695. +#ifdef    AMIGA    /* This is where the input work finally gets done */
  34696. +  /* Note, The nread != 0 case isn't handled as it doesn't arise on the Amiga.
  34697. +     (Look carefully at calls to read_avail_input) */
  34698. +  nread = read(0, buf, sizeof buf);
  34699. +#else  /* not AMIGA */
  34700.    you lose
  34701. +#endif /* not AMIGA */
  34702.  #endif /* not USG */
  34703.  #endif /* no FIONREAD */
  34704.  
  34705. diff -rup --new-file baseline/fsf/emacs18/src/keymap.c amiga/fsf/emacs18/src/keymap.c
  34706. --- baseline/fsf/emacs18/src/keymap.c    Sat Jul 27 10:43:27 1991
  34707. +++ amiga/fsf/emacs18/src/keymap.c    Sat Sep 28 00:00:00 1996
  34708. @@ -29,6 +29,10 @@ the Free Software Foundation, 675 Mass A
  34709.  
  34710.  /* Actually allocate storage for these variables */
  34711.  
  34712. +#ifdef AMIGA
  34713. +#define HAVE_X_WINDOWS        /* We want the mouse map too */
  34714. +#endif
  34715. +
  34716.  #ifdef HAVE_X_WINDOWS
  34717.  Lisp_Object MouseMap;        /* Keymap for mouse commands */
  34718.  #endif /* HAVE_X_WINDOWS */
  34719. diff -rup --new-file baseline/fsf/emacs18/src/lastfile.c amiga/fsf/emacs18/src/lastfile.c
  34720. --- baseline/fsf/emacs18/src/lastfile.c    Sat Mar 30 16:05:55 1991
  34721. +++ amiga/fsf/emacs18/src/lastfile.c    Sat Sep 28 00:00:00 1996
  34722. @@ -35,9 +35,23 @@ the Free Software Foundation, 675 Mass A
  34723.   coming from libraries.
  34724.  */
  34725.  
  34726. +#ifdef AMIGA
  34727. +/* I need to find the end of initialised and unitialised data, as well as of
  34728. +   executable code.
  34729. +*/
  34730. +int last_data = 1;
  34731. +int last_bss;
  34732. +
  34733. +void last_function() { }
  34734. +
  34735. +/* Some data that shouldn't be dumped */
  34736. +#include "amiga_data.c" 
  34737. +
  34738. +#else /* not AMIGA */
  34739.  #ifdef VMS
  34740.  /* Prevent the file from being totally empty.  */
  34741.  static dummy () {}
  34742.  #endif
  34743.  
  34744.  char my_edata = 0;
  34745. +#endif /* not AMIGA */
  34746. diff -rup --new-file baseline/fsf/emacs18/src/lisp.h amiga/fsf/emacs18/src/lisp.h
  34747. --- baseline/fsf/emacs18/src/lisp.h    Thu Mar  5 16:11:31 1992
  34748. +++ amiga/fsf/emacs18/src/lisp.h    Sat Sep 28 00:00:00 1996
  34749. @@ -287,7 +287,7 @@ Lisp_Object;
  34750.    (XUINT (a) | (XUINT (a) > PURESIZE ? DATA_SEG_BITS : PURE_SEG_BITS))
  34751.  #else /* not HAVE_SHM */
  34752.  #ifdef DATA_SEG_BITS
  34753. -/* This case is used for the rt-pc.
  34754. +/* This case is used for the rt-pc and the Amiga.
  34755.     In the diffs I was given, it checked for ptr = 0
  34756.     and did not adjust it in that case.
  34757.     But I don't think that zero should ever be found
  34758. @@ -520,6 +520,13 @@ struct Lisp_Marker
  34759.    { if (XTYPE ((x)) == Lisp_Marker) XFASTINT (x) = marker_position (x); \
  34760.      else if (XTYPE ((x)) != Lisp_Int) x = wrong_type_argument (Qinteger_or_marker_p, (x)); }
  34761.  
  34762. +#ifdef AMIGA_DUMP
  34763. +#define CHECK_IMPURE(obj) \
  34764. +  { extern int *pure, puresize; \
  34765. +    if ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + puresize) \
  34766. +    && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) \
  34767. +      pure_write_error (); }
  34768. +#else /* not AMIGA_DUMP */
  34769.  #ifdef VIRT_ADDR_VARIES
  34770.  
  34771.  /* For machines like APOLLO where text and data can go anywhere
  34772. @@ -529,7 +536,6 @@ struct Lisp_Marker
  34773.      if ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE) \
  34774.      && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) \
  34775.        pure_write_error (); }
  34776. -
  34777.  #else /* not VIRT_ADDR_VARIES */
  34778.  #ifdef PNTR_COMPARISON_TYPE
  34779.  
  34780. @@ -548,6 +554,7 @@ struct Lisp_Marker
  34781.  
  34782.  #endif /* PNTR_COMPARISON_TYPE */
  34783.  #endif /* VIRT_ADDRESS_VARIES */
  34784. +#endif /* not AMIGA_DUMP */
  34785.  
  34786.  /* Cast pointers to this type to compare them.  Some machines want int.  */
  34787.  #ifndef PNTR_COMPARISON_TYPE
  34788. diff -rup --new-file baseline/fsf/emacs18/src/lread.c amiga/fsf/emacs18/src/lread.c
  34789. --- baseline/fsf/emacs18/src/lread.c    Sun Mar 22 21:18:17 1992
  34790. +++ amiga/fsf/emacs18/src/lread.c    Sat Sep 28 00:00:00 1996
  34791. @@ -240,11 +240,15 @@ absolute_filename_p (pathname)
  34792.       Lisp_Object pathname;
  34793.  {
  34794.    register unsigned char *s = XSTRING (pathname)->data;
  34795. +#ifdef AMIGA
  34796. +  return (*s && index(s + 1, ':')); /* Non-leading : */
  34797. +#else
  34798.    return (*s == '~' || *s == '/'
  34799.  #ifdef VMS
  34800.        || index (s, ':')
  34801.  #endif /* VMS */
  34802.        );
  34803. +#endif /* not AMIGA */
  34804.  }
  34805.  
  34806.  /* Search for a file whose name is STR, looking in directories
  34807. @@ -559,7 +563,7 @@ read0 (readcharfun)
  34808.  }
  34809.  
  34810.  static int read_buffer_size;
  34811. -static char *read_buffer;
  34812. +char *read_buffer;
  34813.  
  34814.  static Lisp_Object
  34815.  read1 (readcharfun)
  34816. diff -rup --new-file baseline/fsf/emacs18/src/m-amiga.h amiga/fsf/emacs18/src/m-amiga.h
  34817. --- baseline/fsf/emacs18/src/m-amiga.h    Wed Dec 31 17:00:00 1969
  34818. +++ amiga/fsf/emacs18/src/m-amiga.h    Sat Sep 28 00:00:00 1996
  34819. @@ -0,0 +1,129 @@
  34820. +/* m- file for GNU Emacs running on AmigaOS 2.04, SAS C compiler 5.10b
  34821. +   Copyright (C) 1985, 1986 Free Software Foundation, Inc.
  34822. +
  34823. +This file is part of GNU Emacs.
  34824. +
  34825. +GNU Emacs is distributed in the hope that it will be useful,
  34826. +but WITHOUT ANY WARRANTY.  No author or distributor
  34827. +accepts responsibility to anyone for the consequences of using it
  34828. +or for whether it serves any particular purpose or works at all,
  34829. +unless he says so in writing.  Refer to the GNU Emacs General Public
  34830. +License for full details.
  34831. +
  34832. +Everyone is granted permission to copy, modify and redistribute
  34833. +GNU Emacs, but only under the conditions described in the
  34834. +GNU Emacs General Public License.   A copy of this license is
  34835. +supposed to have been given to you along with GNU Emacs so you
  34836. +can know your rights and responsibilities.  It should be in a
  34837. +file named COPYING.  Among other things, the copyright notice
  34838. +and this notice must be preserved on all copies.  */
  34839. +
  34840. +
  34841. +/* The following three symbols give information on
  34842. + the size of various data types.  */
  34843. +/* lisp.h doesn't make any concessions for INTBITS = 16 and
  34844. +   NO_UNION_TYPE (use int as lisp object) defined.  The following is
  34845. +   assuming that the Manx 32 bit int. math package is faster than
  34846. +   bitfield implementation, overall.  If you want to use INTBITS = 16,
  34847. +   you *cannot* define NO_UNION_TYPE.    */
  34848. +
  34849. +#define SHORTBITS 16        /* Number of bits in a short */
  34850. +
  34851. +#define INTBITS 32        /* Number of bits in an int */
  34852. +
  34853. +#define LONGBITS 32        /* Number of bits in a long */
  34854. +
  34855. +#define VALBITS 26        /* Number of bits in an int or pointer offset */
  34856. +
  34857. +#define GCTYPEBITS 5        /* Number of bits in a type. */
  34858. +
  34859. +/* Define BIG_ENDIAN iff lowest-numbered byte in a word
  34860. +   is the most significant byte.  */
  34861. +
  34862. +#define BIG_ENDIAN
  34863. +
  34864. +/* Define NO_ARG_ARRAY if you cannot take the address of the first of a
  34865. + * group of arguments and treat it as an array of the arguments.  */
  34866. +
  34867. +/* #define NO_ARG_ARRAY */
  34868. +
  34869. +/* Define WORD_MACHINE if addresses and such have
  34870. + * to be corrected before they can be used as byte counts.  */
  34871. +
  34872. +#define WORD_MACHINE
  34873. +
  34874. +/* Define how to take a char and sign-extend into an int.
  34875. +   On machines where char is signed, this is a no-op.  */
  34876. +
  34877. +#define SIGN_EXTEND_CHAR(c) (c)
  34878. +
  34879. +/* Now define a symbol for the cpu type, if your compiler
  34880. +   does not define it automatically:
  34881. +   Ones defined so far include vax, m68000, ns16000, pyramid,
  34882. +   orion, tahoe, APOLLO and many others */
  34883. +
  34884. +#ifndef    m68000
  34885. +#define m68000
  34886. +#endif
  34887. +
  34888. +/* Use type int rather than a union, to represent Lisp_Object */
  34889. +/* This is desirable for most machines.  */
  34890. +
  34891. +#define NO_UNION_TYPE
  34892. +/* Use a struct rather than an int. */
  34893. +
  34894. +
  34895. +/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
  34896. +   the 24-bit bit field into an int.  In other words, if bit fields
  34897. +   are always unsigned.
  34898. +
  34899. +   If you use NO_UNION_TYPE, this flag does not matter.  */
  34900. +
  34901. +#define EXPLICIT_SIGN_EXTEND
  34902. +
  34903. +/* We don't have /dev/kmem, so LOAD_AVE_TYPE and LOAD_AVE_CVT are
  34904. +   not defined. */
  34905. +
  34906. +/* Define CANNOT_DUMP on machines where unexec does not work.
  34907. +   Then the function dump-emacs will not be defined
  34908. +   and temacs will do (load "loadup") automatically unless told otherwise.  */
  34909. +
  34910. +/* #define CANNOT_DUMP */
  34911. +
  34912. +/* Define VIRT_ADDR_VARIES if the virtual addresses of
  34913. +   pure and impure space as loaded can vary, and even their
  34914. +   relative order cannot be relied on.
  34915. +
  34916. +   Otherwise Emacs assumes that text space precedes data space,
  34917. +   numerically.  */
  34918. +
  34919. +/* #define VIRT_ADDR_VARIES */
  34920. +/* I now rely on AMIGA_DUMP to make appropriate patches in the source */
  34921. +
  34922. +/* Define C_ALLOCA if this machine does not support a true alloca
  34923. +   and the one written in C should be used instead.
  34924. +   Define HAVE_ALLOCA to say that the system provides a properly
  34925. +   working alloca function and it should be used.
  34926. +   Define neither one if an assembler-language alloca
  34927. +   in the file alloca.s should be used.  */
  34928. +
  34929. +#define C_ALLOCA
  34930. +/* #define HAVE_ALLOCA */
  34931. +
  34932. +/* Define STACK_DIRECTION for alloca.c */
  34933. +#define    STACK_DIRECTION    -1    /* Grows downward */
  34934. +
  34935. +/* Define NO_REMAP if memory segmentation makes it not work well
  34936. +   to change the boundary between the text section and data section
  34937. +   when Emacs is dumped.  If you define this, the preloaded Lisp
  34938. +   code will not be sharable; but that's better than failing completely.  */
  34939. +
  34940. +#define NO_REMAP
  34941. +
  34942. +/* Set high (32 - VALBITS) = 6 bits of every pointer to the same as those of
  34943. +   &pure[0].
  34944. +*/
  34945. +#ifdef emacs
  34946. +extern long far DataSegBits;
  34947. +#endif
  34948. +#define DATA_SEG_BITS DataSegBits
  34949. diff -rup --new-file baseline/fsf/emacs18/src/paths.h-dist amiga/fsf/emacs18/src/paths.h-dist
  34950. --- baseline/fsf/emacs18/src/paths.h-dist    Tue Sep 11 17:51:18 1990
  34951. +++ amiga/fsf/emacs18/src/paths.h-dist    Sat Sep 28 00:00:00 1996
  34952. @@ -17,3 +17,19 @@
  34953.  /* the name of the file !!!SuperLock!!! in the directory
  34954.   specified by PATH_LOCK.  Yes, this is redundant.  */
  34955.  #define PATH_SUPERLOCK "/usr/local/emacs/lock/!!!SuperLock!!!"
  34956. +
  34957. +/* The path to the file containing the termcap descriptions */
  34958. +#define PATH_TERMCAP "/etc/termcap"
  34959. +
  34960. +/* The relative path (while dumping) to the directory containing 
  34961. +   the DOC file */
  34962. +#define RELPATH_DOC "../etc/"
  34963. +
  34964. +/* The path for a /dev/null-like device */
  34965. +#define PATH_NULL "/dev/null"
  34966. +
  34967. +/* Path for temporary files (for call-process-region) */
  34968. +#define PATH_TEMP "/tmp/emacsXXXXXX"
  34969. +
  34970. +/* Path to the shell (the one in shell-file-name) */
  34971. +#define PATH_SHELL "/bin/sh"
  34972. diff -rup --new-file baseline/fsf/emacs18/src/process.c amiga/fsf/emacs18/src/process.c
  34973. --- baseline/fsf/emacs18/src/process.c    Sat Oct 24 21:42:04 1992
  34974. +++ amiga/fsf/emacs18/src/process.c    Sat Sep 28 00:00:00 1996
  34975. @@ -1203,6 +1203,23 @@ create_process (process, new_argv)
  34976.       If fork fails, remove_process will clear the bit.  */
  34977.    FD_SET (inchannel, &input_wait_mask);
  34978.  
  34979. +#ifdef AMIGA
  34980. +  {
  34981. +    register unsigned char *temp;
  34982. +
  34983. +    if (XTYPE (current_buffer->directory) == Lisp_String)
  34984. +      {
  34985. +    register int i;
  34986. +
  34987. +    i = XSTRING (current_buffer->directory)->size;
  34988. +    temp = (unsigned char *) alloca (i + 1);
  34989. +    bcopy (XSTRING (current_buffer->directory)->data, temp, i);
  34990. +    temp[i] = 0;
  34991. +      }
  34992. +    pid = exec(new_argv[0], new_argv, forkin, forkout, temp,
  34993. +           amiga_process_stack_size);
  34994. +  }
  34995. +#else /* not AMIGA */
  34996.    {
  34997.      /* child_setup must clobber environ on systems with true vfork.
  34998.         Protect it from permanent change.  */
  34999. @@ -1305,6 +1322,7 @@ create_process (process, new_argv)
  35000.        }
  35001.      environ = save_environ;
  35002.    }
  35003. +#endif /* not AMIGA */
  35004.  
  35005.    if (pid < 0)
  35006.      {
  35007. @@ -1314,6 +1332,7 @@ create_process (process, new_argv)
  35008.  
  35009.    XFASTINT (XPROCESS (process)->pid) = pid;
  35010.  
  35011. +#ifndef AMIGA
  35012.    /* If the subfork execv fails, and it exits,
  35013.       this close hangs.  I don't know why.
  35014.       So have an interrupt jar it loose.  */
  35015. @@ -1326,6 +1345,7 @@ create_process (process, new_argv)
  35016.    start_polling ();
  35017.    if (forkin != forkout && forkout >= 0)
  35018.      close (forkout);
  35019. +#endif
  35020.  
  35021.  #ifdef SIGCHLD
  35022.  #ifdef BSD4_1
  35023. diff -rup --new-file baseline/fsf/emacs18/src/s-amiga.h amiga/fsf/emacs18/src/s-amiga.h
  35024. --- baseline/fsf/emacs18/src/s-amiga.h    Wed Dec 31 17:00:00 1969
  35025. +++ amiga/fsf/emacs18/src/s-amiga.h    Sat Sep 28 00:00:00 1996
  35026. @@ -0,0 +1,215 @@
  35027. +/* file for GNU Emacs running on AmigaOS 2.04, SAS C compiler 5.10b
  35028. +   Copyright (C) 1985, 1986 Free Software Foundation, Inc.
  35029. +
  35030. +This file is part of GNU Emacs.
  35031. +
  35032. +GNU Emacs is distributed in the hope that it will be useful,
  35033. +but WITHOUT ANY WARRANTY.  No author or distributor
  35034. +accepts responsibility to anyone for the consequences of using it
  35035. +or for whether it serves any particular purpose or works at all,
  35036. +unless he says so in writing.  Refer to the GNU Emacs General Public
  35037. +License for full details.
  35038. +
  35039. +Everyone is granted permission to copy, modify and redistribute
  35040. +GNU Emacs, but only under the conditions described in the
  35041. +GNU Emacs General Public License.   A copy of this license is
  35042. +supposed to have been given to you along with GNU Emacs so you
  35043. +can know your rights and responsibilities.  It should be in a
  35044. +file named COPYING.  Among other things, the copyright notice
  35045. +and this notice must be preserved on all copies.  */
  35046. +
  35047. +
  35048. +/*
  35049. + *    Define symbols to identify the version of Unix this is.
  35050. + *    Define all the symbols that apply correctly.
  35051. + */
  35052. +
  35053. +#ifndef AMIGA
  35054. +#define AMIGA
  35055. +#endif /* AMIGA */
  35056. +
  35057. +/* SYSTEM_TYPE should indicate the kind of system you are using.
  35058. + It sets the Lisp variable system-type.  */
  35059. +
  35060. +#define SYSTEM_TYPE "amigaos"
  35061. +
  35062. +/* Define this if you want a faster redisplay. This saves a lot of CPU
  35063. +   time at the expense of more characters to be redrawn.
  35064. +   On a bitmapped display you win, with a serial line you probably lose.
  35065. +*/
  35066. +#define FAST_DISPLAY
  35067. +
  35068. +/* Define this to display eight bit characters. The actual characters
  35069. +   that are visible can be set in init_xdisp ().
  35070. +*/
  35071. +#define EIGHT_BIT
  35072. +
  35073. +/* nomultiplejobs should be defined if your system's shell
  35074. + does not have "job control" (the ability to stop a program,
  35075. + run some other program, then continue the first one).  */
  35076. +
  35077. +#define NOMULTIPLEJOBS
  35078. +
  35079. +/* Define this to include various patches that allow the Amiga to dump.
  35080. +   This *must* be defined on the Amiga!
  35081. +*/
  35082. +#define AMIGA_DUMP
  35083. +
  35084. +/* Do not use interrupt_input = 1 by default, because in 4.3
  35085. +   we can make noninterrupt input work properly.  */
  35086. +
  35087. +/* #undef INTERRUPT_INPUT */    /* This file borrowed from s-bsd4-3.h */
  35088. +
  35089. +/* First pty name is /dev/ptyp0.  */
  35090. +
  35091. +/* #define FIRST_PTY_LETTER 'p' */
  35092. +/*
  35093. + *    Define HAVE_TIMEVAL if the system supports the BSD style clock values.
  35094. + *    Look in <sys/time.h> for a timeval structure.
  35095. + */
  35096. +
  35097. +#define HAVE_TIMEVAL
  35098. +#define USE_UTIME
  35099. +
  35100. +/*
  35101. + *    Define HAVE_SELECT if the system supports the `select' system call.
  35102. + */
  35103. +
  35104. +#define HAVE_SELECT
  35105. +
  35106. +/*
  35107. + *    Define HAVE_PTYS if the system supports pty devices.
  35108. + */
  35109. +
  35110. +/* #define HAVE_PTYS */
  35111. +
  35112. +/* Define HAVE_SOCKETS if system supports 4.2-compatible sockets.  */
  35113. +
  35114. +/* #define HAVE_SOCKETS */
  35115. +
  35116. +/* But we do have socket pairs for processes ... */
  35117. +#define SKTPAIR
  35118. +
  35119. +/*
  35120. + *    Define NONSYSTEM_DIR_LIBRARY to make Emacs emulate
  35121. + *      The 4.2 opendir, etc., library functions.
  35122. + */
  35123. +
  35124. +/* #define NONSYSTEM_DIR_LIBRARY */
  35125. +#define SYSV_SYSTEM_DIR
  35126. +
  35127. +/* Define this symbol if your system has the functions bcopy, etc. */
  35128. +
  35129. +#define BSTRING        /* #define'ed later on */
  35130. +
  35131. +/* subprocesses should be defined if you want to
  35132. +   have code for asynchronous subprocesses
  35133. +   (as used in M-x compile and M-x shell).
  35134. +   This is generally OS dependent, and not supported
  35135. +   under most USG systems. */
  35136. +
  35137. +#define subprocesses
  35138. +
  35139. +#define DID_REMOTE        /* Use 0 length write to send eof */
  35140. +
  35141. +/* If your system uses COFF (Common Object File Format) then define the
  35142. +   preprocessor symbol "COFF". */
  35143. +
  35144. +/* #define COFF */
  35145. +
  35146. +/* define MAIL_USE_FLOCK if the mailer uses flock
  35147. +   to interlock access to /usr/spool/mail/$USER.
  35148. +   The alternative is that a lock file named
  35149. +   /usr/spool/mail/$USER.lock.  */
  35150. +
  35151. +/* #define MAIL_USE_FLOCK */
  35152. +
  35153. +/* Define CLASH_DETECTION if you want lock files to be written
  35154. +   so that Emacs can tell instantly when you try to modify
  35155. +   a file that someone else has modified in his Emacs.  */
  35156. +
  35157. +/* #define CLASH_DETECTION */
  35158. +
  35159. +/* We use the Berkeley (and usg5.2.2) interface to nlist.  */
  35160. +
  35161. +/* #define NLIST_STRUCT */
  35162. +
  35163. +/* The file containing the kernel's symbol table is called /vmunix.  */
  35164. +
  35165. +/* #define KERNEL_FILE "/vmunix" */
  35166. +
  35167. +/* The symbol in the kernel where the load average is found
  35168. +   is named _avenrun.  */
  35169. +
  35170. +/* #define LDAV_SYMBOL "_avenrun" */
  35171. +
  35172. +/* We use our own malloc for 2 reasons:
  35173. +     - To check that the 6 (INTBITS - VALBITS) of allocated data are
  35174. +       the same as &pure[0].
  35175. +     - To release unused memory to the system (SAS's malloc keeps it
  35176. +       till you quit)
  35177. +*/
  35178. +
  35179. +#define SYMS_SYSTEM syms_of_amiga()
  35180. +
  35181. +#define SYSTEM_MALLOC        /* But I have replaced the system malloc ... */
  35182. +
  35183. +#define DEF_PURESIZE 132000        /* Leave space for extra code for Amiga */
  35184. +#ifdef emacs
  35185. +extern int puresize;
  35186. +#endif
  35187. +#define PURESIZE puresize    /* Puresize is variable ... */
  35188. +
  35189. +#ifdef emacs
  35190. +/* Stdio must be included before redefining putchar */
  35191. +#include <stdio.h>
  35192. +extern char cbuffer[], *cbuffer_pos;
  35193. +#define PENDING_OUTPUT_COUNT(x) (cbuffer_pos - cbuffer)
  35194. +#endif
  35195. +/* We divert some calls to our routines */
  35196. +#define putchar(c) do { extern int noninteractive; \
  35197. +             if (noninteractive) putc (c, stdout); \
  35198. +             else emacs_putchar(c); } while(0)
  35199. +#define fwrite emacs_fwrite
  35200. +#define fflush emacs_fflush
  35201. +#define random rand
  35202. +#define srandom srand
  35203. +#define main emacs_main
  35204. +#define select emacs_select
  35205. +
  35206. +#ifdef emacs
  35207. +#include <string.h>
  35208. +#undef index
  35209. +#undef rindex
  35210. +#define index strchr
  35211. +#define rindex strrchr
  35212. +#endif
  35213. +
  35214. +#define fsync(x) 0        /* Emulate fsync ... */
  35215. +
  35216. +#ifdef emacs
  35217. +#include <sys/wait.h>        /* process.c doesn't have appropriate #ifdef's */
  35218. +extern int amiga_process_stack_size;
  35219. +#endif
  35220. +
  35221. +/* Here are some symbols for ymakefile's benefit */
  35222. +
  35223. +#define    LIB_STANDARD        //unix/src/unix.lib lib:sc.lib lib:amiga.lib
  35224. +#define    START_FILES        lib:c.o firstfile.o
  35225. +#define    C_DEBUG_SWITCH        debug s
  35226. +#define    C_OPTIMIZE_SWITCH    opt
  35227. +#define    LD_SWITCH_SYSTEM
  35228. +#define    C_SWITCH_SYSTEM
  35229. +#define    S_SWITCH_MACHINE    /* Nothing! */
  35230. +#define UNEXEC amiga_dump.o
  35231. +#define OBJECTS_SYSTEM        amiga_clipboard.o amiga_tty.o amiga_serial.o \
  35232. +                amiga_screen.o amiga_menu.o amiga_malloc.o \
  35233. +                                amiga_rexx.o simplerexx.o amiga_term.o
  35234. +
  35235. +
  35236. +/* Amiga window-specific stuff */
  35237. +
  35238. +#define VERS "1.28DG Beta"
  35239. +
  35240. +#define FALSE 0
  35241. +#define TRUE 1
  35242. diff -rup --new-file baseline/fsf/emacs18/src/scroll.c amiga/fsf/emacs18/src/scroll.c
  35243. --- baseline/fsf/emacs18/src/scroll.c    Tue Jan  8 11:04:52 1991
  35244. +++ amiga/fsf/emacs18/src/scroll.c    Sat Sep 28 00:00:00 1996
  35245. @@ -55,6 +55,65 @@ int *DLcost;
  35246.  int *ILncost;
  35247.  int *DLncost;
  35248.  
  35249. +#ifdef FAST_DISPLAY
  35250. +scrolling_1 (window_size, unchanged_at_top, unchanged_at_bottom,
  35251. +         draw_cost, old_hash, new_hash, free_at_end)
  35252. +     int window_size, unchanged_at_top, unchanged_at_bottom;
  35253. +     int *draw_cost;
  35254. +     int *old_hash;
  35255. +     int *new_hash;
  35256. +     int free_at_end;
  35257. +{
  35258. +  int lines, i;
  35259. +  int window_end = unchanged_at_top + window_size;
  35260. +
  35261. +  /* Rebase arrays at line 0 */
  35262. +  old_hash -= unchanged_at_top - 1;
  35263. +  new_hash -= unchanged_at_top - 1;
  35264. +  draw_cost -= unchanged_at_top - 1;
  35265. +
  35266. +  /* We can't allow un-enabled lines to be scrolled (they are not redrawable). 
  35267. +     Restrict window to the first set of contiguous enabled lines 
  35268. +     (an enabled line has draw_cost[x] != INFINITY) */
  35269. +  for (i = unchanged_at_top; i < window_end && draw_cost[i] != INFINITY; i++) ;
  35270. +  /*unchanged_at_bottom += window_size - i;*/
  35271. +  /*window_size = i - unchanged_at_top;*/
  35272. +  window_end = i;
  35273. +
  35274. +  if (lines = calc_scroll(old_hash, new_hash, unchanged_at_top, window_end))
  35275. +      scroll_screen_lines(unchanged_at_top, window_end - lines, lines);
  35276. +  else if (lines = calc_scroll(new_hash, old_hash, unchanged_at_top, window_end))
  35277. +      scroll_screen_lines(unchanged_at_top + lines, window_end, -lines);
  35278. +}
  35279. +
  35280. +int calc_scroll(int *old_hash, int *new_hash, int from, int to)
  35281. +/* For insert attempt, the parameters are correct.
  35282. +   For delete attempt, swap the old & new hash parameters
  35283. +*/
  35284. +{
  35285. +    int try = from + 1, lines, i;
  35286. +    int hash1 = old_hash[from];
  35287. +
  35288. +    do
  35289. +    {
  35290. +    if (hash1 == new_hash[try])
  35291. +    {
  35292. +        /* Check if other lines match too */
  35293. +        lines = try - from; /* Amount to insert */
  35294. +        for (i = try + 1; i < to; i++)
  35295. +        if (old_hash[i - lines] != new_hash[i]) break;
  35296. +        if (i == to) /* It works ! */
  35297. +        return lines;
  35298. +    }
  35299. +    try++;
  35300. +    }
  35301. +    while (try < to);
  35302. +
  35303. +    return 0;
  35304. +}
  35305. +
  35306. +#else /* not FAST_DISPLAY */
  35307. +
  35308.  scrolling_1 (window_size, unchanged_at_top, unchanged_at_bottom,
  35309.           draw_cost, old_hash, new_hash, free_at_end)
  35310.       int window_size, unchanged_at_top, unchanged_at_bottom;
  35311. @@ -320,6 +379,7 @@ do_scrolling (matrix, window_size, uncha
  35312.    if (window)
  35313.      set_terminal_window (0);
  35314.  }
  35315. +#endif /* not FAST_DISPLAY */
  35316.  
  35317.  /* Return number of lines in common between current screen contents
  35318.     and the text to be displayed,
  35319. diff -rup --new-file baseline/fsf/emacs18/src/simplerexx.c amiga/fsf/emacs18/src/simplerexx.c
  35320. --- baseline/fsf/emacs18/src/simplerexx.c    Wed Dec 31 17:00:00 1969
  35321. +++ amiga/fsf/emacs18/src/simplerexx.c    Sat Sep 28 00:00:00 1996
  35322. @@ -0,0 +1,416 @@
  35323. +/*
  35324. + * Simple ARexx interface by Michael Sinz
  35325. + *
  35326. + * This is a very "Simple" interface to the world of ARexx...
  35327. + * For more complex interfaces into ARexx, it is best that you
  35328. + * understand the functions that are provided by ARexx.
  35329. + * In many cases they are more powerful than what is presented
  35330. + * here.
  35331. + *
  35332. + * This code is fully re-entrant and self-contained other than
  35333. + * the use of SysBase/AbsExecBase and the ARexx RVI support
  35334. + * library which is also self-contained...
  35335. + */
  35336. +
  35337. +#include    <exec/types.h>
  35338. +#include    <exec/nodes.h>
  35339. +#include    <exec/lists.h>
  35340. +#include    <exec/ports.h>
  35341. +#include    <exec/memory.h>
  35342. +
  35343. +#include    <proto/exec.h>
  35344. +
  35345. +#include    <rexx/storage.h>
  35346. +#include    <rexx/rxslib.h>
  35347. +
  35348. +#include    <string.h>
  35349. +#include    <ctype.h>
  35350. +
  35351. +/*
  35352. + * The prototypes for the few ARexx functions we will call...
  35353. + */
  35354. +struct RexxMsg *CreateRexxMsg(struct MsgPort *,char *,char *);
  35355. +void *CreateArgstring(char *,long);
  35356. +void DeleteRexxMsg(struct RexxMsg *);
  35357. +void DeleteArgstring(char *);
  35358. +BOOL IsRexxMsg(struct Message *);
  35359. +
  35360. +/*
  35361. + * Pragmas for the above functions...  (To make this all self-contained...)
  35362. + * If you use RexxGlue.o, this is not needed...
  35363. + *
  35364. + * These are for Lattice C 5.x  (Note the use of RexxContext->RexxSysBase)
  35365. + */
  35366. +#pragma libcall RexxContext->RexxSysBase CreateRexxMsg 90 09803
  35367. +#pragma libcall RexxContext->RexxSysBase CreateArgstring 7E 0802
  35368. +#pragma libcall RexxContext->RexxSysBase DeleteRexxMsg 96 801
  35369. +#pragma libcall RexxContext->RexxSysBase DeleteArgstring 84 801
  35370. +#pragma libcall RexxContext->RexxSysBase IsRexxMsg A8 801
  35371. +
  35372. +/*
  35373. + * Now, we have made the pragmas needed, let's get to work...
  35374. + */
  35375. +
  35376. +/*
  35377. + * A structure for the ARexx handler context
  35378. + * This is *VERY* *PRIVATE* and should not be touched...
  35379. + */
  35380. +struct    ARexxContext
  35381. +{
  35382. +struct    MsgPort    *ARexxPort;    /* The port messages come in at... */
  35383. +struct    Library    *RexxSysBase;    /* We will hide the library pointer here... */
  35384. +    long    Outstanding;    /* The count of outstanding ARexx messages... */
  35385. +    char    PortName[24];    /* The port name goes here... */
  35386. +    char    ErrorName[28];    /* The name of the <base>.LASTERROR... */
  35387. +    char    Extension[8];    /* Default file name extension... */
  35388. +};
  35389. +
  35390. +#define    AREXXCONTEXT    struct ARexxContext *
  35391. +
  35392. +#include    "SimpleRexx.h"
  35393. +
  35394. +/*
  35395. + * This function returns the port name of your ARexx port.
  35396. + * It will return NULL if there is no ARexx port...
  35397. + *
  35398. + * This string is *READ ONLY*  You *MUST NOT* modify it...
  35399. + */
  35400. +char *ARexxName(AREXXCONTEXT RexxContext)
  35401. +{
  35402. +    register    char    *tmp=NULL;
  35403. +
  35404. +    if (RexxContext) tmp=RexxContext->PortName;
  35405. +    return(tmp);
  35406. +}
  35407. +
  35408. +/*
  35409. + * This function returns the signal mask that the Rexx port is
  35410. + * using.  It returns NULL if there is no signal...
  35411. + *
  35412. + * Use this signal bit in your Wait() loop...
  35413. + */
  35414. +ULONG ARexxSignal(AREXXCONTEXT RexxContext)
  35415. +{
  35416. +    register    ULONG    tmp=NULL;
  35417. +
  35418. +    if (RexxContext) tmp=1L << (RexxContext->ARexxPort->mp_SigBit);
  35419. +    return(tmp);
  35420. +}
  35421. +
  35422. +/*
  35423. + * This function returns a structure that contains the commands sent from
  35424. + * ARexx or the results of commands you sent.  You will need to parse it 
  35425. + * and return the structure back so that the memory can be freed.
  35426. + *
  35427. + * This returns NULL if there was no message.
  35428. + */
  35429. +struct RexxMsg *GetARexxMsg(AREXXCONTEXT RexxContext)
  35430. +{
  35431. +    register    struct    RexxMsg    *tmp=NULL;
  35432. +    register        short    flag;
  35433. +
  35434. +    if (RexxContext) tmp=(struct RexxMsg *)GetMsg(RexxContext->ARexxPort);
  35435. +    return(tmp);
  35436. +}
  35437. +
  35438. +/* Use this to delete a message sent via SendARexxMsg and that has now been
  35439. +   returned to you.
  35440. +*/
  35441. +void DeleteARexxMsg(AREXXCONTEXT RexxContext, struct RexxMsg *rmsg)
  35442. +{
  35443. +    /*
  35444. +     * Free the arguments and the message...
  35445. +     */
  35446. +    if(rmsg->rm_Action & RXFF_RESULT) {
  35447. +    if(rmsg->rm_Result1 == 0 && rmsg->rm_Result2) {
  35448. +        DeleteArgstring((STRPTR)rmsg->rm_Result2);
  35449. +    }
  35450. +    }
  35451. +    DeleteArgstring(rmsg->rm_Args[0]);
  35452. +    DeleteRexxMsg(rmsg);
  35453. +    RexxContext->Outstanding-=1;
  35454. +}
  35455. +
  35456. +/*
  35457. + * Use this to return a ARexx message...
  35458. + *
  35459. + * If you wish to return something, it must be in the RString.
  35460. + * If you wish to return an Error, it must be in the Error.
  35461. + * If there is an error, the RString is ignored.
  35462. + */
  35463. +void ReplyARexxMsg(AREXXCONTEXT RexxContext,struct RexxMsg *rmsg,
  35464. +           char *RString,LONG Error)
  35465. +{
  35466. +    if (RexxContext) if (rmsg) if (rmsg!=REXX_RETURN_ERROR)
  35467. +    {
  35468. +    rmsg->rm_Result2=0;
  35469. +    if (!(rmsg->rm_Result1=Error))
  35470. +    {
  35471. +        /*
  35472. +         * if you did not have an error we return the string
  35473. +         */
  35474. +        if (rmsg->rm_Action & (1L << RXFB_RESULT)) if (RString)
  35475. +        {
  35476. +        rmsg->rm_Result2=(LONG)CreateArgstring(RString,
  35477. +                               (LONG)strlen(RString));
  35478. +        }
  35479. +    }
  35480. +
  35481. +    /*
  35482. +     * Reply the message to ARexx...
  35483. +     */
  35484. +    ReplyMsg((struct Message *)rmsg);
  35485. +    }
  35486. +}
  35487. +
  35488. +/*
  35489. + * This function will set an error string for the ARexx
  35490. + * application in the variable defined as <appname>.LASTERROR
  35491. + *
  35492. + * Note that this can only happen if there is an ARexx message...
  35493. + *
  35494. + * This returns TRUE if it worked, FALSE if it did not...
  35495. + */
  35496. +short SetARexxLastError(AREXXCONTEXT RexxContext,struct RexxMsg *rmsg,
  35497. +            char *ErrorString)
  35498. +{
  35499. +    register    short    OkFlag=FALSE;
  35500. +
  35501. +    if (RexxContext) if (rmsg) if (CheckRexxMsg(rmsg))
  35502. +    {
  35503. +    /*
  35504. +     * Note that SetRexxVar() has more than just a TRUE/FALSE
  35505. +     * return code, but for this "basic" case, we just care if
  35506. +     * it works or not.
  35507. +     */
  35508. +    if (!SetRexxVar(rmsg,RexxContext->ErrorName,ErrorString,
  35509. +            (long)strlen(ErrorString)))
  35510. +    {
  35511. +        OkFlag=TRUE;
  35512. +    }
  35513. +    }
  35514. +    return(OkFlag);
  35515. +}
  35516. +
  35517. +/*
  35518. + * This function will send a string to ARexx...
  35519. + *
  35520. + * The default host port will be that of your task...
  35521. + *
  35522. + * If you set StringFile to TRUE, it will set that bit for the message...
  35523. + *
  35524. + * Returns the message sent, or NULL in case of error.
  35525. + */
  35526. +struct RexxMsg *SendARexxMsg(AREXXCONTEXT RexxContext,char *RString,
  35527. +                  short StringFile, short results)
  35528. +{
  35529. +    register    struct    MsgPort    *RexxPort;
  35530. +    register    struct    RexxMsg    *rmsg;
  35531. +    register        short    flag=FALSE;
  35532. +
  35533. +    if (RexxContext) if (RString)
  35534. +    {
  35535. +    if (rmsg=CreateRexxMsg(RexxContext->ARexxPort,
  35536. +                   RexxContext->Extension,
  35537. +                   RexxContext->PortName))
  35538. +    {
  35539. +        rmsg->rm_Action=RXCOMM | (StringFile ?
  35540. +                      (1L << RXFB_STRING):0);
  35541. +        rmsg->rm_Action |= (results ? RXFF_RESULT : 0);
  35542. +        if (rmsg->rm_Args[0]=CreateArgstring(RString,
  35543. +                         (LONG)strlen(RString)))
  35544. +        {
  35545. +        /*
  35546. +         * We need to find the RexxPort and this needs
  35547. +         * to be done in a Forbid()
  35548. +         */
  35549. +        Forbid();
  35550. +        if (RexxPort=FindPort(RXSDIR))
  35551. +        {
  35552. +            /*
  35553. +             * We found the port, so put the
  35554. +             * message to ARexx...
  35555. +             */
  35556. +            PutMsg(RexxPort,(struct Message *)rmsg);
  35557. +            RexxContext->Outstanding+=1;
  35558. +            flag=TRUE;
  35559. +        }
  35560. +        else
  35561. +        {
  35562. +            /*
  35563. +             * No port, so clean up...
  35564. +             */
  35565. +            DeleteArgstring(rmsg->rm_Args[0]);
  35566. +            DeleteRexxMsg(rmsg);
  35567. +        }
  35568. +        Permit();
  35569. +        }
  35570. +        else DeleteRexxMsg(rmsg);
  35571. +    }
  35572. +    }
  35573. +    return flag ? rmsg : NULL;
  35574. +}
  35575. +
  35576. +int PendingCommands(AREXXCONTEXT RexxContext)
  35577. +{
  35578. +    if (RexxContext) return RexxContext->Outstanding;
  35579. +    else return 0;
  35580. +}
  35581. +
  35582. +/*
  35583. + * This function closes down the ARexx context that was opened
  35584. + * with InitARexx...
  35585. + */
  35586. +void FreeARexx(AREXXCONTEXT RexxContext)
  35587. +{
  35588. +    register    struct    RexxMsg    *rmsg;
  35589. +
  35590. +    if (RexxContext)
  35591. +    {
  35592. +    /*
  35593. +     * Clear port name so it can't be found...
  35594. +     */
  35595. +    RexxContext->PortName[0]='\0';
  35596. +
  35597. +    /*
  35598. +     * Clean out any outstanding messages we had sent out...
  35599. +     */
  35600. +    while (RexxContext->Outstanding)
  35601. +    {
  35602. +        WaitPort(RexxContext->ARexxPort);
  35603. +        while (rmsg=GetARexxMsg(RexxContext))
  35604. +        {
  35605. +        if (rmsg!=REXX_RETURN_ERROR)
  35606. +        {
  35607. +            /*
  35608. +             * Any messages that come now are blown
  35609. +             * away...
  35610. +             */
  35611. +            SetARexxLastError(RexxContext,rmsg,
  35612. +                      "99: Port Closed!");
  35613. +            /* removed ReplyARexxMsg() this was a bug that would */
  35614. +            /* obviously cause a loop (we would continue to reply and */
  35615. +            /* then get the message.  It now deletes the message as */
  35616. +            /* should be done.  -ch5/10/93. */
  35617. +            DeleteARexxMsg(RexxContext,rmsg);
  35618. +        }
  35619. +        }
  35620. +    }
  35621. +
  35622. +    /*
  35623. +     * Clean up the port and delete it...
  35624. +     */
  35625. +    if (RexxContext->ARexxPort)
  35626. +    {
  35627. +        while (rmsg=GetARexxMsg(RexxContext))
  35628. +        {
  35629. +        /*
  35630. +         * Any messages that still are coming in are
  35631. +         * "dead"  We just set the LASTERROR and
  35632. +         * reply an error of 100...
  35633. +         */
  35634. +        SetARexxLastError(RexxContext,rmsg,
  35635. +                  "99: Port Closed!");
  35636. +        ReplyARexxMsg(RexxContext,rmsg,NULL,100);
  35637. +        }
  35638. +        RemPort(RexxContext->ARexxPort);
  35639. +        DeleteMsgPort(RexxContext->ARexxPort);
  35640. +    }
  35641. +
  35642. +    /*
  35643. +     * Make sure we close the library...
  35644. +     */
  35645. +    if (RexxContext->RexxSysBase)
  35646. +    {
  35647. +        CloseLibrary(RexxContext->RexxSysBase);
  35648. +    }
  35649. +
  35650. +    /*
  35651. +     * Free the memory of the RexxContext
  35652. +     */
  35653. +    FreeMem(RexxContext,sizeof(struct ARexxContext));
  35654. +    }
  35655. +}
  35656. +
  35657. +/*
  35658. + * This routine initializes an ARexx port for your process
  35659. + * This should only be done once per process.  You must call it
  35660. + * with a valid application name and you must use the handle it
  35661. + * returns in all other calls...
  35662. + *
  35663. + * NOTE:  The AppName should not have spaces in it...
  35664. + *        Example AppNames:  "MyWord" or "FastCalc" etc...
  35665. + *        The name *MUST* be less that 16 characters...
  35666. + *        If it is not, it will be trimmed...
  35667. + *        The name will also be UPPER-CASED...
  35668. + *
  35669. + * NOTE:  The Default file name extension, if NULL will be
  35670. + *        "rexx"  (the "." is automatic)
  35671. + */
  35672. +AREXXCONTEXT InitARexx(char *AppName,char *Extension)
  35673. +{
  35674. +    register    AREXXCONTEXT    RexxContext=NULL;
  35675. +    register    short        loop;
  35676. +    register    short        count;
  35677. +    register    char        *tmp;
  35678. +
  35679. +    if (RexxContext=AllocMem(sizeof(struct ARexxContext),
  35680. +                 MEMF_PUBLIC|MEMF_CLEAR))
  35681. +    {
  35682. +    if (RexxContext->RexxSysBase=OpenLibrary("rexxsyslib.library", NULL))
  35683. +    {
  35684. +        /*
  35685. +         * Set up the extension...
  35686. +         */
  35687. +        if (!Extension) Extension="rexx";
  35688. +        tmp=RexxContext->Extension;
  35689. +        for (loop=0;(loop<7)&&(Extension[loop]);loop++)
  35690. +        {
  35691. +        *tmp++=Extension[loop];
  35692. +        }
  35693. +        *tmp='\0';
  35694. +
  35695. +        /*
  35696. +         * Set up a port name...
  35697. +         */
  35698. +        tmp=RexxContext->PortName;
  35699. +        for (loop=0;(loop<16)&&(AppName[loop]);loop++)
  35700. +        {
  35701. +        *tmp++=toupper(AppName[loop]);
  35702. +        }
  35703. +        *tmp='\0';
  35704. +
  35705. +        /*
  35706. +         * Set up the last error RVI name...
  35707. +         *
  35708. +         * This is <appname>.LASTERROR
  35709. +         */
  35710. +        strcpy(RexxContext->ErrorName,RexxContext->PortName);
  35711. +        strcat(RexxContext->ErrorName,".LASTERROR");
  35712. +
  35713. +        /* We need to make a unique port name... */
  35714. +        Forbid();
  35715. +        for (count=1,RexxContext->ARexxPort=(VOID *)1;
  35716. +         RexxContext->ARexxPort;count++)
  35717. +        {
  35718. +        stci_d(tmp,count);
  35719. +        RexxContext->ARexxPort=
  35720. +            FindPort(RexxContext->PortName);
  35721. +        }
  35722. +
  35723. +        /*RexxContext->ARexxPort=CreatePort(RexxContext->PortName,NULL);*/
  35724. +        RexxContext->ARexxPort=CreateMsgPort();
  35725. +        RexxContext->ARexxPort->mp_Node.ln_Name = RexxContext->PortName;
  35726. +        RexxContext->ARexxPort->mp_Node.ln_Pri = 0;
  35727. +        AddPort(RexxContext->ARexxPort);
  35728. +        Permit();
  35729. +    }
  35730. +
  35731. +    if (!RexxContext->RexxSysBase || !RexxContext->ARexxPort)
  35732. +    {
  35733. +        FreeARexx(RexxContext);
  35734. +        RexxContext=NULL;
  35735. +    }
  35736. +    }
  35737. +    return(RexxContext);
  35738. +}
  35739. diff -rup --new-file baseline/fsf/emacs18/src/simplerexx.h amiga/fsf/emacs18/src/simplerexx.h
  35740. --- baseline/fsf/emacs18/src/simplerexx.h    Wed Dec 31 17:00:00 1969
  35741. +++ amiga/fsf/emacs18/src/simplerexx.h    Sat Sep 28 00:00:00 1996
  35742. @@ -0,0 +1,119 @@
  35743. +/*
  35744. + * Simple ARexx interface by Michael Sinz
  35745. + *
  35746. + * This is a very "Simple" interface...
  35747. + */
  35748. +
  35749. +#ifndef    SIMPLE_REXX_H
  35750. +#define    SIMPLE_REXX_H
  35751. +
  35752. +#include    <exec/types.h>
  35753. +#include    <exec/nodes.h>
  35754. +#include    <exec/lists.h>
  35755. +#include    <exec/ports.h>
  35756. +
  35757. +#include    <rexx/storage.h>
  35758. +#include    <rexx/rxslib.h>
  35759. +
  35760. +/*
  35761. + * This is the handle that SimpleRexx will give you
  35762. + * when you initialize an ARexx port...
  35763. + *
  35764. + * The conditional below is used to skip this if we have
  35765. + * defined it earlier...
  35766. + */
  35767. +#ifndef    AREXXCONTEXT
  35768. +
  35769. +typedef void *AREXXCONTEXT;
  35770. +
  35771. +#endif    /* AREXXCONTEXT */
  35772. +
  35773. +/*
  35774. + * The value of RexxMsg (from GetARexxMsg) if there was an error returned
  35775. + */
  35776. +#define    REXX_RETURN_ERROR    ((struct RexxMsg *)-1L)
  35777. +#define    REXX_RETURN_OK            ((struct RexxMsg *)-3L)
  35778. +
  35779. +/*
  35780. + * This function closes down the ARexx context that was opened
  35781. + * with InitARexx...
  35782. + */
  35783. +void FreeARexx(AREXXCONTEXT);
  35784. +
  35785. +/*
  35786. + * This routine initializes an ARexx port for your process
  35787. + * This should only be done once per process.  You must call it
  35788. + * with a valid application name and you must use the handle it
  35789. + * returns in all other calls...
  35790. + *
  35791. + * NOTE:  The AppName should not have spaces in it...
  35792. + *        Example AppNames:  "MyWord" or "FastCalc" etc...
  35793. + *        The name *MUST* be less that 16 characters...
  35794. + *        If it is not, it will be trimmed...
  35795. + *        The name will also be UPPER-CASED...
  35796. + *
  35797. + * NOTE:  The Default file name extension, if NULL will be
  35798. + *        "rexx"  (the "." is automatic)
  35799. + */
  35800. +AREXXCONTEXT InitARexx(char *,char *);
  35801. +
  35802. +/*
  35803. + * This function returns the port name of your ARexx port.
  35804. + * It will return NULL if there is no ARexx port...
  35805. + *
  35806. + * This string is *READ ONLY*  You *MUST NOT* modify it...
  35807. + */
  35808. +char *ARexxName(AREXXCONTEXT);
  35809. +
  35810. +/*
  35811. + * This function returns the signal mask that the Rexx port is
  35812. + * using.  It returns NULL if there is no signal...
  35813. + *
  35814. + * Use this signal bit in your Wait() loop...
  35815. + */
  35816. +ULONG ARexxSignal(AREXXCONTEXT);
  35817. +
  35818. +/*
  35819. + * This function returns a structure that contains the commands sent from
  35820. + * ARexx...  You will need to parse it and return the structure back
  35821. + * so that the memory can be freed...
  35822. + *
  35823. + * This returns NULL if there was no message...
  35824. + */
  35825. +struct RexxMsg *GetARexxMsg(AREXXCONTEXT);
  35826. +
  35827. +/* Use this to delete a message sent via SendARexxMsg and that has now been
  35828. +   returned to you.
  35829. +*/
  35830. +void DeleteARexxMsg(AREXXCONTEXT RexxContext, struct RexxMsg *rmsg);
  35831. +
  35832. +/*
  35833. + * Use this to return a ARexx message...
  35834. + *
  35835. + * If you wish to return something, it must be in the RString.
  35836. + * If you wish to return an Error, it must be in the Error.
  35837. + */
  35838. +void ReplyARexxMsg(AREXXCONTEXT,struct RexxMsg *,char *,LONG);
  35839. +
  35840. +/*
  35841. + * This function will send a string to ARexx...
  35842. + *
  35843. + * The default host port will be that of your task...
  35844. + *
  35845. + * If you set StringFile to TRUE, it will set that bit for the message...
  35846. + *
  35847. + * Returns the message sent, or NULL in case of error.
  35848. + */
  35849. +struct RexxMsg *SendARexxMsg(AREXXCONTEXT,char *,short,short);
  35850. +
  35851. +/*
  35852. + * This function will set an error string for the ARexx
  35853. + * application in the variable defined as <appname>.LASTERROR
  35854. + *
  35855. + * Note that this can only happen if there is an ARexx message...
  35856. + *
  35857. + * This returns TRUE if it worked, FALSE if it did not...
  35858. + */
  35859. +short SetARexxLastError(AREXXCONTEXT,struct RexxMsg *,char *);
  35860. +
  35861. +#endif    /* SIMPLE_REXX_H */
  35862. diff -rup --new-file baseline/fsf/emacs18/src/smakefile amiga/fsf/emacs18/src/smakefile
  35863. --- baseline/fsf/emacs18/src/smakefile    Wed Dec 31 17:00:00 1969
  35864. +++ amiga/fsf/emacs18/src/smakefile    Sat Sep 28 00:00:00 1996
  35865. @@ -0,0 +1,45 @@
  35866. +CPP = /cpp/cpp -DAMIGA
  35867. +MAKE = smake  # BSD doesn't have it as a default.
  35868. +#Note: an alternative is  CPP = /lib/cpp
  35869. +
  35870. +all: xmakefile doall
  35871. +
  35872. +doall:
  35873. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} all
  35874. +
  35875. +#This is used in making a distribution.
  35876. +#Do not use it on development directories!
  35877. +distclean:
  35878. +    -delete force paths.h config.h emacs-* temacs xemacs xmakefile \
  35879. +   *! @* *.o
  35880. +
  35881. +clean:
  35882. +    -delete force temacs xemacs xmakefile @* *.o
  35883. +
  35884. +xemacs: xmakefile doxemacs
  35885. +
  35886. +doxemacs:
  35887. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} xemacs
  35888. +
  35889. +temacs: xmakefile dotemacs
  35890. +
  35891. +dotemacs:
  35892. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} temacs
  35893. +
  35894. +demacs: xmakefile dodemacs
  35895. +
  35896. +dodemacs:
  35897. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} demacs
  35898. +
  35899. +# If you have a problem with cc -E here, changing
  35900. +# the definition of CPP above may fix it.
  35901. +xmakefile: ymakefile config.h dostrip
  35902. +    -delete force xmakefile
  35903. +    ${CPP} ymakefile > t:ymkf
  35904. +    dostrip <t:ymkf >xmakefile
  35905. +
  35906. +dostrip: dostrip.c
  35907. +    sc link dostrip
  35908. +
  35909. +tags:
  35910. +    etags [a-z]*.h [a-z]*.c /lisp/[a-z]*.el
  35911. diff -rup --new-file baseline/fsf/emacs18/src/term.c amiga/fsf/emacs18/src/term.c
  35912. --- baseline/fsf/emacs18/src/term.c    Fri Jan  3 00:46:47 1992
  35913. +++ amiga/fsf/emacs18/src/term.c    Sat Sep 28 00:00:00 1996
  35914. @@ -161,7 +161,7 @@ static int se_is_so;    /* 1 if same string
  35915.     or'd with 0100.  Zero if no standout marker at all.  */
  35916.  /* used iff TN_standout_width >= 0. */
  35917.  char *chars_wasted;
  35918. -static char *copybuf;
  35919. +char *copybuf;
  35920.  
  35921.  /* nonzero means supposed to write text in standout mode.  */
  35922.  int standout_requested;
  35923. diff -rup --new-file baseline/fsf/emacs18/src/termcap.c amiga/fsf/emacs18/src/termcap.c
  35924. --- baseline/fsf/emacs18/src/termcap.c    Tue Jan  8 11:08:50 1991
  35925. +++ amiga/fsf/emacs18/src/termcap.c    Sat Sep 28 00:00:00 1996
  35926. @@ -30,6 +30,7 @@ what you give them.   Help stamp out sof
  35927.  
  35928.  #ifdef emacs
  35929.  #include "config.h"
  35930. +#include "paths.h"
  35931.  #endif
  35932.  
  35933.  #ifndef BUFSIZE
  35934. @@ -344,7 +345,11 @@ tgetent (bp, name)
  35935.  #ifdef VMS
  35936.    filep = tem && legal_filename_p (tem);
  35937.  #else
  35938. +#ifdef AMIGA
  35939. +  filep = tem != 0;            /* Always assume that it is a file */
  35940. +#else
  35941.    filep = tem && (*tem == '/');
  35942. +#endif
  35943.  #endif /* VMS */
  35944.  
  35945.    /* If tem is non-null and starts with / (in the un*x case, that is),
  35946. @@ -374,11 +379,7 @@ tgetent (bp, name)
  35947.      indirect = (char *) 0;
  35948.  
  35949.    if (!tem)
  35950. -#ifdef VMS
  35951. -    tem = "emacs_library:[etc]termcap.dat";
  35952. -#else
  35953. -    tem = "/etc/termcap";
  35954. -#endif
  35955. +    tem = PATH_TERMCAP;
  35956.  
  35957.    /* Here we know we must search a file and tem has its name.  */
  35958.  
  35959. diff -rup --new-file baseline/fsf/emacs18/src/tparam.c amiga/fsf/emacs18/src/tparam.c
  35960. --- baseline/fsf/emacs18/src/tparam.c    Tue Jan  8 11:09:27 1991
  35961. +++ amiga/fsf/emacs18/src/tparam.c    Sat Sep 28 00:00:00 1996
  35962. @@ -258,7 +258,7 @@ tparam1 (string, outstring, len, up, lef
  35963.    return outstring;
  35964.  }
  35965.  
  35966. -#ifdef DEBUG
  35967. +#ifdef TPARAM_DEBUG
  35968.  
  35969.  main (argc, argv)
  35970.       int argc;
  35971. @@ -274,4 +274,4 @@ main (argc, argv)
  35972.    return 0;
  35973.  }
  35974.  
  35975. -#endif /* DEBUG */
  35976. +#endif /* TPARAM_DEBUG */
  35977. diff -rup --new-file baseline/fsf/emacs18/src/xdisp.c amiga/fsf/emacs18/src/xdisp.c
  35978. --- baseline/fsf/emacs18/src/xdisp.c    Fri Jul 24 12:08:13 1992
  35979. +++ amiga/fsf/emacs18/src/xdisp.c    Sat Sep 28 00:00:00 1996
  35980. @@ -31,6 +31,17 @@ the Free Software Foundation, 675 Mass A
  35981.  #include "commands.h"
  35982.  #include "macros.h"
  35983.  
  35984. +#define MAX_WIN_LINE 64
  35985. +static int win_line_bufpos[MAX_WIN_LINE];
  35986. +static int win_line_modified;
  35987. +static struct buffer *win_line_buffer;
  35988. +#define CLEAR_WIN_LINE() (win_line_buffer = 0)
  35989. +
  35990. +#ifdef EIGHT_BIT
  35991. +char visible[256];        /* visible[i] is true if character i is
  35992. +                   displayable */
  35993. +#endif
  35994. +
  35995.  extern int interrupt_input;
  35996.  extern int command_loop_level;
  35997.  
  35998. @@ -275,7 +286,10 @@ display_echo_area_contents ()
  35999.      windows_or_buffers_changed++;
  36000.  
  36001.    if (EQ (minibuf_window, selected_window))
  36002. -    this_line_bufpos = 0;
  36003. +    {
  36004. +      this_line_bufpos = 0;
  36005. +      CLEAR_WIN_LINE();
  36006. +    }
  36007.  
  36008.    prev_echo_area_contents = echo_area_contents;
  36009.  }
  36010. @@ -327,6 +341,8 @@ redisplay ()
  36011.        must_finish = 1;
  36012.      }
  36013.  
  36014. +  if (windows_or_buffers_changed) CLEAR_WIN_LINE();
  36015. +
  36016.    if (clip_changed || windows_or_buffers_changed)
  36017.      update_mode_lines++;
  36018.  
  36019. @@ -453,6 +469,7 @@ update: 
  36020.       Also, don't forget to check every line to update the arrow.  */
  36021.    if (pause)
  36022.      {
  36023. +      CLEAR_WIN_LINE();
  36024.        this_line_bufpos = 0;
  36025.        if (!NULL (last_arrow_position))
  36026.      {
  36027. @@ -709,9 +726,29 @@ redisplay_window (window, just_this_one)
  36028.        && (just_this_one || XFASTINT (w->width) == screen_width)
  36029.        && !EQ (window, minibuf_window))
  36030.      {
  36031. -      pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0),
  36032. +      int *wlb;
  36033. +      int line, best_startp, best_vpos;
  36034. +
  36035. +      best_startp = startp; best_vpos = 0;
  36036. +      if (win_line_buffer && BUF_MODIFF(win_line_buffer) > win_line_modified)
  36037. +      CLEAR_WIN_LINE();
  36038. +      if (current_buffer == win_line_buffer && current_buffer == XBUFFER (w->buffer))
  36039. +        {
  36040. +      /* Try & find line to start from */
  36041. +      wlb = win_line_bufpos; line = 0;
  36042. +      while (line < MAX_WIN_LINE)
  36043. +        {
  36044. +          if (*wlb && point > *wlb && *wlb > best_startp)
  36045. +            {
  36046. +          best_startp = *wlb;
  36047. +          best_vpos = line;
  36048. +            }
  36049. +          line++; wlb++;
  36050. +        }
  36051. +        }
  36052. +      pos = *compute_motion (best_startp, best_vpos, (hscroll ? 1 - hscroll : 0),
  36053.                  point, height + 1, 10000, width, hscroll,
  36054. -                pos_tab_offset (w, startp));
  36055. +                pos_tab_offset (w, best_startp));
  36056.  
  36057.        if (pos.vpos < height)
  36058.      {
  36059. @@ -843,6 +880,8 @@ try_window (window, pos)
  36060.  
  36061.    struct position val;
  36062.  
  36063. +  if (XBUFFER(w->buffer) == win_line_buffer) CLEAR_WIN_LINE();
  36064. +
  36065.    Fset_marker (w->start, make_number (pos), Qnil);
  36066.  
  36067.    point_vpos = -1;
  36068. @@ -908,6 +947,8 @@ try_window_id (window)
  36069.    int delta;
  36070.    int tab_offset, epto;
  36071.  
  36072. +  if (XBUFFER(w->buffer) == win_line_buffer) CLEAR_WIN_LINE();
  36073. +
  36074.    if (GPT - BEG < beg_unchanged)
  36075.      beg_unchanged = GPT - BEG;
  36076.    if (Z - GPT < end_unchanged)
  36077. @@ -1334,6 +1375,7 @@ display_text_line (w, start, vpos, hpos,
  36078.    pause = pos;
  36079.    while (p1 < endp)
  36080.      {
  36081. +restart:
  36082.        p1prev = p1;
  36083.        if (pos == pause)
  36084.      {
  36085. @@ -1354,13 +1396,44 @@ display_text_line (w, start, vpos, hpos,
  36086.        p = &FETCH_CHAR (pos);
  36087.      }
  36088.        c = *p++;
  36089. +#ifdef EIGHT_BIT
  36090. +      if (visible[c])
  36091. +#else
  36092.        if (c >= 040 && c < 0177)
  36093. -    {
  36094. +#endif
  36095. +      /* This optimises the frequent part (displayable characters) of
  36096. +     this inner loop. If the conditions aren't met, return to old
  36097. +     inner loop. */
  36098. +        {
  36099.        if (p1 >= startp)
  36100. -        *p1 = c;
  36101. -      p1++;
  36102. -    }
  36103. -      else if (c == '\n')
  36104. +        {
  36105. +          do
  36106. +            {
  36107. +          *p1++ = c;
  36108. +          pos++;
  36109. +          if (p1 >= endp)
  36110. +            {
  36111. +              p1prev = p1 - 1;
  36112. +              goto done;
  36113. +            }
  36114. +          if (pos == pause) goto restart;
  36115. +          c = *p++;
  36116. +            }
  36117. +#ifdef EIGHT_BIT
  36118. +          while (visible[c]);
  36119. +#else
  36120. +          while (c >= 040 && c < 0177);
  36121. +#endif
  36122. +          p1prev = p1;
  36123. +        }
  36124. +      else
  36125. +        {
  36126. +          p1++;
  36127. +          pos++;
  36128. +          goto restart;
  36129. +        }
  36130. +        }
  36131. +      if (c == '\n')
  36132.      {
  36133.        invis = 0;
  36134.        while (pos < end
  36135. @@ -1434,6 +1507,7 @@ display_text_line (w, start, vpos, hpos,
  36136.      }
  36137.        pos++;
  36138.      }
  36139. +done:
  36140.  
  36141.    val.hpos = - XINT (w->hscroll);
  36142.    if (val.hpos)
  36143. @@ -1525,6 +1599,25 @@ display_text_line (w, start, vpos, hpos,
  36144.          this_line_bufpos = 0;
  36145.      }
  36146.      }
  36147. +  /* Save positions of all lines of current window */
  36148. +  if (w == XWINDOW(selected_window) && vpos < MAX_WIN_LINE)
  36149. +  {
  36150. +      /* Line is not continued and did not start in middle of character */
  36151. +      if (hpos == (XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0)
  36152. +      && val.vpos)
  36153. +      {
  36154. +      if (current_buffer != win_line_buffer ||
  36155. +          !(win_line_modified >= MODIFF))
  36156. +      {
  36157. +          win_line_buffer = current_buffer;
  36158. +          win_line_modified = MODIFF;
  36159. +          bzero(win_line_bufpos, sizeof win_line_bufpos);
  36160. +      }
  36161. +      win_line_bufpos[vpos - XINT (w->top)] = start;
  36162. +      }
  36163. +      else
  36164. +      win_line_bufpos[vpos - XINT (w->top)] = 0;
  36165. +  }
  36166.  
  36167.    /* If hscroll and line not empty, insert truncation-at-left marker */
  36168.    if (hscroll && lastpos != start)
  36169. @@ -1994,7 +2087,11 @@ display_string (w, vpos, string, hpos, t
  36170.      {
  36171.        c = *string++;
  36172.        if (!c) break;
  36173. +#ifdef EIGHT_BIT
  36174. +      if (visible[c])
  36175. +#else
  36176.        if (c >= 040 && c < 0177)
  36177. +#endif
  36178.      {
  36179.        if (p1 >= start)
  36180.          *p1 = c;
  36181. @@ -2109,7 +2206,11 @@ init_xdisp ()
  36182.    register
  36183.  #endif COMPILER_REGISTER_BUG
  36184.      struct window *mini_w;
  36185. +#ifdef EIGHT_BIT
  36186. +  int i;
  36187. +#endif
  36188.  
  36189. +  CLEAR_WIN_LINE();
  36190.    this_line_bufpos = 0;
  36191.  
  36192.    mini_w = XWINDOW (minibuf_window);
  36193. @@ -2128,4 +2229,10 @@ init_xdisp ()
  36194.        XFASTINT (XWINDOW (root_window)->width) = screen_width;
  36195.        XFASTINT (mini_w->width) = screen_width;
  36196.      }
  36197. +#ifdef EIGHT_BIT
  36198. +  for (i = 040; i < 0177; i++) visible[i] = 1;
  36199. +#ifdef AMIGA
  36200. +  for (i = 0240; i <= 0377; i++) visible[i] = 1;
  36201. +#endif
  36202. +#endif
  36203.  }
  36204. diff -rup --new-file baseline/fsf/emacs18/src/ymakefile amiga/fsf/emacs18/src/ymakefile
  36205. --- baseline/fsf/emacs18/src/ymakefile    Tue Oct  6 11:44:28 1992
  36206. +++ amiga/fsf/emacs18/src/ymakefile    Sat Sep 28 00:00:00 1996
  36207. @@ -18,7 +18,15 @@ along with GNU Emacs; see the file COPYI
  36208.  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  36209.  
  36210.  
  36211. +#ifdef amiga
  36212. +#undef amiga
  36213. +#endif
  36214. +
  36215. +#ifdef AMIGA
  36216. +dot =
  36217. +#else
  36218.  dot = .
  36219. +#endif
  36220.  /* on Xenix, replace double-dot below with $(dot)$(dot) */
  36221.  lispdir = $(dot)$(dot)/lisp/
  36222.  etcdir = $(dot)$(dot)/etc/
  36223. @@ -161,7 +169,7 @@ LD = $(CC)
  36224.  #define LINKER gcc -nostdlib
  36225.  #else
  36226.  #define LINKER ld
  36227. -#endif 
  36228. +#endif
  36229.  #endif /* not ORDINARY_LINK */
  36230.  #endif /* no LINKER */
  36231.  
  36232. @@ -191,7 +199,11 @@ LOCALCPP= localcpp
  36233.  SHORT= shortnames
  36234.  #endif /* SHORTNAMES */
  36235.  
  36236. +#ifdef AMIGA
  36237. +CFLAGS= C_DEBUG_SWITCH def emacs $(MYCPPFLAG) C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM
  36238. +#else
  36239.  CFLAGS= C_DEBUG_SWITCH -Demacs $(MYCPPFLAG) C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM
  36240. +#endif
  36241.  /* DO NOT use -R.  There is a special hack described in lastfile.c
  36242.     which is used instead.  Some initialized data areas are modified
  36243.     at initial startup, then labeled as part of the text area when
  36244. @@ -258,7 +270,7 @@ GNULIB_VAR = LIB_GCC
  36245.  GNULIB_VAR = `if [ -f LIB_GCC ] ; then echo LIB_GCC; else echo; fi`
  36246.  #endif /* __GNUC__ <= 1 */
  36247.  #else
  36248. -GNULIB_VAR = 
  36249. +GNULIB_VAR =
  36250.  #endif
  36251.  
  36252.  #ifdef MAINTAIN_ENVIRONMENT
  36253. @@ -270,11 +282,19 @@ environobj = environ.o
  36254.  #define UNEXEC unexec.o
  36255.  #endif
  36256.  
  36257. +termobjs= term.o cm.o
  36258. +
  36259. +#ifdef AMIGA
  36260. +SYSDEP= amiga_sysdep.o
  36261. +#else
  36262. +SYSDEP= sysdep.o
  36263. +#endif
  36264. +
  36265.  /* lastfile must follow all files
  36266.     whose initialized data areas should be dumped as pure by dump-emacs. */
  36267.  obj=    dispnew.o scroll.o xdisp.o window.o \
  36268. -    term.o cm.o $(XOBJ) \
  36269. -    emacs.o keyboard.o macros.o keymap.o sysdep.o \
  36270. +    $(termobjs) $(XOBJ) \
  36271. +    emacs.o keyboard.o macros.o keymap.o $(SYSDEP) \
  36272.      buffer.o filelock.o insdel.o marker.o \
  36273.      minibuf.o fileio.o dired.o filemode.o \
  36274.      cmds.o casefiddle.o indent.o search.o regex.o undo.o \
  36275. @@ -360,17 +380,43 @@ xemacs: temacs ${etcdir}DOC ${lisp}
  36276.  #ifdef CANNOT_DUMP
  36277.      mv temacs xemacs
  36278.  #else
  36279. +#ifdef AMIGA
  36280. +    -delete ${etcdir}EMACS-DATA xemacs force
  36281. +    temacs -nl -batch -l inc-vers
  36282. +    temacs -nl -batch -l loadup.el dump
  36283. +    -touch xemacs
  36284. +    -delete /temacs force
  36285. +    makelink from /temacs temacs
  36286. +#else
  36287.      ./temacs -batch -l inc-vers
  36288.      ./temacs -batch -l loadup.el dump
  36289. +#endif /* not AMIGA */
  36290.  #endif /* not CANNOT_DUMP */
  36291.  #endif /* not HAVE_SHM */
  36292.  
  36293.  ${etcdir}DOC: ${etcdir}make-docfile ${obj} ${lisp}
  36294. +#ifdef AMIGA
  36295. +REDIRECT_IN= <
  36296. +    -delete force ${etcdir}DOC
  36297. +    ${etcdir}make-docfile >${etcdir}DOC $(REDIRECT_IN) < <
  36298. +${obj}
  36299. +${lisp}
  36300. +${lispdir}version.el
  36301. +${lispdir}amiga-menu.elc ${lispdir}amiga-init.elc ${lispdir}amiga-mouse.elc
  36302. +OBJECTS_SYSTEM
  36303. +<
  36304. +#else
  36305.      rm -f ${etcdir}DOC
  36306.      ${etcdir}make-docfile ${obj} ${lisp} ${lispdir}version.el > ${etcdir}DOC
  36307. +#endif
  36308.  
  36309. +#ifdef AMIGA
  36310. +${etcdir}make-docfile: ${etcdir}make-docfile.c
  36311. +    sc link /etc/make-docfile
  36312. +#else
  36313.  ${etcdir}make-docfile:
  36314.      cd ${etcdir}; ${MAKE} ${MFLAGS} make-docfile
  36315. +#endif
  36316.  
  36317.  /* Some systems define this to cause parallel Make-ing.  */
  36318.  #ifndef MAKE_PARALLEL
  36319. @@ -378,7 +424,30 @@ ${etcdir}make-docfile:
  36320.  #endif
  36321.  
  36322.  temacs: MAKE_PARALLEL $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE
  36323. +#ifdef AMIGA
  36324. +    slink <with <
  36325. +from ${STARTFILES} $(obj) OBJECTS_SYSTEM OBJECTS_MACHINE $(otherobj)
  36326. +to temacs
  36327. +lib LIB_STANDARD
  36328. +nodebug
  36329. +batch
  36330. +<
  36331. +#endif
  36332. +
  36333. +demacs: MAKE_PARALLEL $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE
  36334. +#ifdef AMIGA
  36335. +    slink <with <
  36336. +from ${STARTFILES} $(obj) OBJECTS_SYSTEM OBJECTS_MACHINE $(otherobj)
  36337. +to demacs
  36338. +lib LIB_STANDARD
  36339. +map ram:emacs.map,h,x
  36340. +addsym
  36341. +swidth 16
  36342. +batch
  36343. +<
  36344. +#else
  36345.      $(LD) ${STARTFLAGS} ${LDFLAGS} -o temacs ${STARTFILES} ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE ${LIBES}
  36346. +#endif
  36347.  
  36348.  /* These are needed for C compilation, on the systems that need them */
  36349.  #ifdef NEED_CPP
  36350. @@ -460,51 +529,51 @@ alloca.o : alloca.s config.h
  36351.     it is so often changed in ways that do not require any recompilation
  36352.     and so rarely changed in ways that do require any.  */
  36353.  
  36354. -abbrev.o : abbrev.c buffer.h commands.h config.h 
  36355. -buffer.o : buffer.c syntax.h buffer.h commands.h window.h config.h 
  36356. -callint.o : callint.c window.h commands.h buffer.h config.h 
  36357. -callproc.o : callproc.c paths.h buffer.h commands.h config.h 
  36358. -casefiddle.o : casefiddle.c syntax.h commands.h buffer.h config.h 
  36359. +abbrev.o : abbrev.c buffer.h commands.h config.h
  36360. +buffer.o : buffer.c syntax.h buffer.h commands.h window.h config.h
  36361. +callint.o : callint.c window.h commands.h buffer.h config.h
  36362. +callproc.o : callproc.c paths.h buffer.h commands.h config.h
  36363. +casefiddle.o : casefiddle.c syntax.h commands.h buffer.h config.h
  36364.  cm.o : cm.c cm.h termhooks.h config.h
  36365. -cmds.o : cmds.c syntax.h buffer.h commands.h config.h 
  36366. +cmds.o : cmds.c syntax.h buffer.h commands.h config.h
  36367.  crt0.o : crt0.c config.h
  36368.      $(CC) -c $(CFLAGS) C_SWITCH_ASM crt0.c
  36369.  dired.o : dired.c commands.h buffer.h config.h regex.h
  36370.  dispnew.o : dispnew.c commands.h window.h buffer.h dispextern.h termchar.h termopts.h cm.h config.h lisp.h
  36371.  doc.o : doc.c buffer.h config.h paths.h
  36372.  doprnt.o : doprnt.c
  36373. -editfns.o : editfns.c window.h buffer.h config.h 
  36374. -emacs.o : emacs.c commands.h config.h 
  36375. +editfns.o : editfns.c window.h buffer.h config.h
  36376. +emacs.o : emacs.c commands.h config.h
  36377.  #ifdef MAINTAIN_ENVIRONMENT
  36378.  environ.o : environ.c buffer.h commands.h config.h
  36379.  #endif /* MAINTAIN_ENVIRONMENT */
  36380. -fileio.o : fileio.c window.h buffer.h config.h 
  36381. +fileio.o : fileio.c window.h buffer.h config.h
  36382.  filelock.o : filelock.c buffer.h paths.h config.h
  36383. -filemode.o : filemode.c 
  36384. +filemode.o : filemode.c
  36385.  indent.o : indent.c window.h indent.h buffer.h config.h termchar.h termopts.h
  36386. -insdel.o : insdel.c window.h buffer.h config.h 
  36387. -keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h commands.h window.h macros.h config.h 
  36388. -keymap.o : keymap.c buffer.h commands.h config.h 
  36389. -lastfile.o : lastfile.c 
  36390. +insdel.o : insdel.c window.h buffer.h config.h
  36391. +keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h commands.h window.h macros.h config.h
  36392. +keymap.o : keymap.c buffer.h commands.h config.h
  36393. +lastfile.o : lastfile.c
  36394.  macros.o : macros.c window.h buffer.h commands.h macros.h config.h
  36395.  malloc.o : malloc.c config.h
  36396. -marker.o : marker.c buffer.h config.h 
  36397. -minibuf.o : minibuf.c syntax.h window.h buffer.h commands.h config.h 
  36398. +marker.o : marker.c buffer.h config.h
  36399. +minibuf.o : minibuf.c syntax.h window.h buffer.h commands.h config.h
  36400.  mocklisp.o : mocklisp.c buffer.h config.h
  36401. -process.o : process.c process.h buffer.h window.h termhooks.h termopts.h commands.h dispextern.h config.h 
  36402. -regex.o : regex.c syntax.h buffer.h config.h regex.h 
  36403. +process.o : process.c process.h buffer.h window.h termhooks.h termopts.h commands.h dispextern.h config.h
  36404. +regex.o : regex.c syntax.h buffer.h config.h regex.h
  36405.  scroll.o : scroll.c termchar.h config.h dispextern.h termhooks.h
  36406. -search.o : search.c regex.h commands.h buffer.h syntax.h config.h 
  36407. -syntax.o : syntax.c syntax.h buffer.h commands.h config.h 
  36408. +search.o : search.c regex.h commands.h buffer.h syntax.h config.h
  36409. +syntax.o : syntax.c syntax.h buffer.h commands.h config.h
  36410.  sysdep.o : sysdep.c config.h dispextern.h termhooks.h termchar.h termopts.h window.h
  36411.  term.o : term.c termchar.h termhooks.h termopts.h config.h cm.h
  36412.  termcap.o : termcap.c config.h
  36413.  terminfo.o : terminfo.c config.h
  36414.  tparam.o : tparam.c config.h
  36415. -undo.o : undo.c buffer.h commands.h config.h 
  36416. +undo.o : undo.c buffer.h commands.h config.h
  36417.  UNEXEC : config.h getpagesize.h
  36418.  window.o : window.c indent.h commands.h window.h buffer.h config.h termchar.h
  36419. -xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h termchar.h window.h config.h 
  36420. +xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h termchar.h window.h config.h
  36421.  xfns.o : xfns.c xterm.h window.h config.h
  36422.  xmenu.o : xmenu.c xterm.h window.h config.h
  36423.  xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h \
  36424. @@ -517,13 +586,13 @@ x11term.o : x11term.c x11term.h termhook
  36425.  
  36426.  /* The files of Lisp proper */
  36427.  
  36428. -alloc.o : alloc.c window.h buffer.h config.h 
  36429. -bytecode.o : bytecode.c buffer.h config.h 
  36430. -data.o : data.c buffer.h config.h 
  36431. +alloc.o : alloc.c window.h buffer.h config.h
  36432. +bytecode.o : bytecode.c buffer.h config.h
  36433. +data.o : data.c buffer.h config.h
  36434.  eval.o : eval.c commands.h config.h
  36435.  fns.o : fns.c buffer.h commands.h config.h
  36436. -print.o : print.c process.h window.h buffer.h dispextern.h termchar.h config.h 
  36437. -lread.o : lread.c buffer.h paths.h config.h 
  36438. +print.o : print.c process.h window.h buffer.h dispextern.h termchar.h config.h
  36439. +lread.o : lread.c buffer.h paths.h config.h
  36440.  
  36441.  /* System-specific programs to be made.
  36442.     OTHER_FILES, OBJECTS_SYSTEM and OBJECTS_MACHINE
  36443. @@ -533,3 +602,18 @@ sunfns.o  : sunfns.c buffer.h config.h
  36444.  
  36445.  ${etcdir}emacstool: ${etcdir}emacstool.c
  36446.      cd ${etcdir}; ${MAKE} ${MFLAGS} emacstool
  36447. +
  36448. +SimpleRexx.o: SimpleRexx.c SimpleRexx.h
  36449. +amiga_clipboard.o: amiga_clipboard.c termchar.h amiga.h config.h
  36450. +amiga_dump.o: amiga_dump.c termchar.h buffer.h dispextern.h regex.h amiga.h config.h
  36451. +amiga_menu.o: amiga_menu.c amiga.h config.h
  36452. +amiga_processes.o: amiga_processes.c amiga.h config.h
  36453. +amiga_rexx.o: amiga_rexx.c SimpleRexx.h amiga.h config.h
  36454. +amiga_screen.o: amiga_screen.c termchar.h dispextern.h amiga.h config.h
  36455. +amiga_serial.o: amiga_serial.c amiga.h config.h
  36456. +amiga_sysdep.o: amiga_sysdep.c termopts.h termhooks.h termchar.h dispextern.h \
  36457. +        amiga.h config.h
  36458. +amiga_term.o: amiga_term.c termopts.h termhooks.h  termchar.h config.h
  36459. +amiga_tty.o: amiga_tty.c termhooks.h termchar.h amiga.h config.h
  36460. +amiga_malloc.o: amiga_malloc.c amiga.h config.h
  36461. +    $(CC) $(CFLAGS) parms=both amiga_malloc.c
  36462.